1*082815dcSEvan Baconimport { getResourceXMLPathAsync } from './Paths'; 2*082815dcSEvan Baconimport { ResourceItemXML, ResourceKind, ResourceXML } from './Resources'; 3*082815dcSEvan Bacon 4*082815dcSEvan Baconexport async function getProjectStringsXMLPathAsync( 5*082815dcSEvan Bacon projectRoot: string, 6*082815dcSEvan Bacon { kind }: { kind?: ResourceKind } = {} 7*082815dcSEvan Bacon): Promise<string> { 8*082815dcSEvan Bacon return getResourceXMLPathAsync(projectRoot, { kind, name: 'strings' }); 9*082815dcSEvan Bacon} 10*082815dcSEvan Bacon 11*082815dcSEvan Baconexport function setStringItem( 12*082815dcSEvan Bacon itemToAdd: ResourceItemXML[], 13*082815dcSEvan Bacon stringFileContentsJSON: ResourceXML 14*082815dcSEvan Bacon): ResourceXML { 15*082815dcSEvan Bacon if (!stringFileContentsJSON?.resources?.string) { 16*082815dcSEvan Bacon if (!stringFileContentsJSON.resources || typeof stringFileContentsJSON.resources === 'string') { 17*082815dcSEvan Bacon // file was empty and JSON is `{resources : ''}` 18*082815dcSEvan Bacon stringFileContentsJSON.resources = {}; 19*082815dcSEvan Bacon } 20*082815dcSEvan Bacon stringFileContentsJSON.resources.string = itemToAdd; 21*082815dcSEvan Bacon return stringFileContentsJSON; 22*082815dcSEvan Bacon } 23*082815dcSEvan Bacon 24*082815dcSEvan Bacon for (const newItem of itemToAdd) { 25*082815dcSEvan Bacon const stringNameExists = stringFileContentsJSON.resources.string.findIndex( 26*082815dcSEvan Bacon (e: ResourceItemXML) => e.$.name === newItem.$.name 27*082815dcSEvan Bacon ); 28*082815dcSEvan Bacon if (stringNameExists > -1) { 29*082815dcSEvan Bacon // replace the previous item 30*082815dcSEvan Bacon stringFileContentsJSON.resources.string[stringNameExists] = newItem; 31*082815dcSEvan Bacon } else { 32*082815dcSEvan Bacon stringFileContentsJSON.resources.string = 33*082815dcSEvan Bacon stringFileContentsJSON.resources.string.concat(newItem); 34*082815dcSEvan Bacon } 35*082815dcSEvan Bacon } 36*082815dcSEvan Bacon return stringFileContentsJSON; 37*082815dcSEvan Bacon} 38*082815dcSEvan Bacon 39*082815dcSEvan Baconexport function removeStringItem(named: string, stringFileContentsJSON: ResourceXML): ResourceXML { 40*082815dcSEvan Bacon if (stringFileContentsJSON?.resources?.string) { 41*082815dcSEvan Bacon const stringNameExists = stringFileContentsJSON.resources.string.findIndex( 42*082815dcSEvan Bacon (e: ResourceItemXML) => e.$.name === named 43*082815dcSEvan Bacon ); 44*082815dcSEvan Bacon if (stringNameExists > -1) { 45*082815dcSEvan Bacon // replace the previous value 46*082815dcSEvan Bacon stringFileContentsJSON.resources.string.splice(stringNameExists, 1); 47*082815dcSEvan Bacon } 48*082815dcSEvan Bacon } 49*082815dcSEvan Bacon return stringFileContentsJSON; 50*082815dcSEvan Bacon} 51