1082815dcSEvan Bacon"use strict"; 2082815dcSEvan Bacon 3082815dcSEvan BaconObject.defineProperty(exports, "__esModule", { 4082815dcSEvan Bacon value: true 5082815dcSEvan Bacon}); 6082815dcSEvan Baconexports.buildResourceGroup = buildResourceGroup; 7082815dcSEvan Baconexports.buildResourceItem = buildResourceItem; 8082815dcSEvan Baconexports.ensureDefaultResourceXML = ensureDefaultResourceXML; 9082815dcSEvan Baconexports.findResourceGroup = findResourceGroup; 10082815dcSEvan Baconexports.getObjectAsResourceGroup = getObjectAsResourceGroup; 11082815dcSEvan Baconexports.getObjectAsResourceItems = getObjectAsResourceItems; 12082815dcSEvan Baconexports.getResourceItemsAsObject = getResourceItemsAsObject; 13082815dcSEvan Baconexports.readResourcesXMLAsync = readResourcesXMLAsync; 14082815dcSEvan Baconfunction _XML() { 15082815dcSEvan Bacon const data = require("../utils/XML"); 16082815dcSEvan Bacon _XML = function () { 17082815dcSEvan Bacon return data; 18082815dcSEvan Bacon }; 19082815dcSEvan Bacon return data; 20082815dcSEvan Bacon} 21082815dcSEvan Baconconst fallbackResourceString = `<?xml version="1.0" encoding="utf-8"?><resources></resources>`; 22*ee216927STomasz Sapeta 23082815dcSEvan Bacon/** 24082815dcSEvan Bacon * Read an XML file while providing a default fallback for resource files. 25082815dcSEvan Bacon * 26082815dcSEvan Bacon * @param options path to the XML file, returns a fallback XML if the path doesn't exist. 27082815dcSEvan Bacon */ 28082815dcSEvan Baconasync function readResourcesXMLAsync({ 29082815dcSEvan Bacon path, 30082815dcSEvan Bacon fallback = fallbackResourceString 31082815dcSEvan Bacon}) { 32082815dcSEvan Bacon const xml = await (0, _XML().readXMLAsync)({ 33082815dcSEvan Bacon path, 34082815dcSEvan Bacon fallback 35*ee216927STomasz Sapeta }); 36*ee216927STomasz Sapeta // Ensure the type is expected. 37082815dcSEvan Bacon if (!xml.resources) { 38082815dcSEvan Bacon xml.resources = {}; 39082815dcSEvan Bacon } 40082815dcSEvan Bacon return xml; 41082815dcSEvan Bacon} 42*ee216927STomasz Sapeta 43082815dcSEvan Bacon/** 44082815dcSEvan Bacon * Ensure the provided xml has a `resources` object (the expected shape). 45082815dcSEvan Bacon * 46082815dcSEvan Bacon * @param xml 47082815dcSEvan Bacon */ 48082815dcSEvan Baconfunction ensureDefaultResourceXML(xml) { 49082815dcSEvan Bacon if (!xml) { 50082815dcSEvan Bacon xml = { 51082815dcSEvan Bacon resources: {} 52082815dcSEvan Bacon }; 53082815dcSEvan Bacon } 54082815dcSEvan Bacon if (!xml.resources) { 55082815dcSEvan Bacon xml.resources = {}; 56082815dcSEvan Bacon } 57082815dcSEvan Bacon return xml; 58082815dcSEvan Bacon} 59*ee216927STomasz Sapeta 60082815dcSEvan Bacon/** 61082815dcSEvan Bacon * Build a `ResourceItemXML` given its `name` and `value`. This makes things a bit more readable. 62082815dcSEvan Bacon * 63082815dcSEvan Bacon * - JSON: `{ $: { name }, _: value }` 64082815dcSEvan Bacon * - XML: `<item name="NAME">VALUE</item>` 65082815dcSEvan Bacon * 66082815dcSEvan Bacon * @param props name and value strings. 67082815dcSEvan Bacon */ 68082815dcSEvan Baconfunction buildResourceItem({ 69082815dcSEvan Bacon name, 70082815dcSEvan Bacon value, 71082815dcSEvan Bacon targetApi, 72082815dcSEvan Bacon translatable 73082815dcSEvan Bacon}) { 74082815dcSEvan Bacon const item = { 75082815dcSEvan Bacon $: { 76082815dcSEvan Bacon name 77082815dcSEvan Bacon }, 78082815dcSEvan Bacon _: value 79082815dcSEvan Bacon }; 80082815dcSEvan Bacon if (targetApi) { 81082815dcSEvan Bacon item.$['tools:targetApi'] = targetApi; 82082815dcSEvan Bacon } 83082815dcSEvan Bacon if (translatable !== undefined) { 84082815dcSEvan Bacon item.$['translatable'] = String(translatable); 85082815dcSEvan Bacon } 86082815dcSEvan Bacon return item; 87082815dcSEvan Bacon} 88082815dcSEvan Baconfunction buildResourceGroup(parent) { 89082815dcSEvan Bacon var _parent$items; 90082815dcSEvan Bacon return { 91082815dcSEvan Bacon $: { 92082815dcSEvan Bacon name: parent.name, 93082815dcSEvan Bacon parent: parent.parent 94082815dcSEvan Bacon }, 95082815dcSEvan Bacon item: (_parent$items = parent.items) !== null && _parent$items !== void 0 ? _parent$items : [] 96082815dcSEvan Bacon }; 97082815dcSEvan Bacon} 98082815dcSEvan Baconfunction findResourceGroup(xml, group) { 99082815dcSEvan Bacon var _xml$filter, _xml$filter$call; 100082815dcSEvan Bacon const app = xml === null || xml === void 0 ? void 0 : (_xml$filter = xml.filter) === null || _xml$filter === void 0 ? void 0 : (_xml$filter$call = _xml$filter.call(xml, ({ 101082815dcSEvan Bacon $: head 102082815dcSEvan Bacon }) => { 103082815dcSEvan Bacon let matches = head.name === group.name; 104082815dcSEvan Bacon if (group.parent != null && matches) { 105082815dcSEvan Bacon matches = head.parent === group.parent; 106082815dcSEvan Bacon } 107082815dcSEvan Bacon return matches; 108082815dcSEvan Bacon })) === null || _xml$filter$call === void 0 ? void 0 : _xml$filter$call[0]; 109082815dcSEvan Bacon return app !== null && app !== void 0 ? app : null; 110082815dcSEvan Bacon} 111*ee216927STomasz Sapeta 112082815dcSEvan Bacon/** 113082815dcSEvan Bacon * Helper to convert a basic XML object into a simple k/v pair. 114082815dcSEvan Bacon * 115082815dcSEvan Bacon * @param xml 116082815dcSEvan Bacon * @returns 117082815dcSEvan Bacon */ 118082815dcSEvan Baconfunction getResourceItemsAsObject(xml) { 119*ee216927STomasz Sapeta return xml.reduce((prev, curr) => ({ 120*ee216927STomasz Sapeta ...prev, 121082815dcSEvan Bacon [curr.$.name]: curr._ 122082815dcSEvan Bacon }), {}); 123082815dcSEvan Bacon} 124*ee216927STomasz Sapeta 125082815dcSEvan Bacon/** 126082815dcSEvan Bacon * Helper to convert a basic k/v object to a ResourceItemXML array. 127082815dcSEvan Bacon * 128082815dcSEvan Bacon * @param xml 129082815dcSEvan Bacon * @returns 130082815dcSEvan Bacon */ 131082815dcSEvan Baconfunction getObjectAsResourceItems(obj) { 132082815dcSEvan Bacon return Object.entries(obj).map(([name, value]) => ({ 133082815dcSEvan Bacon $: { 134082815dcSEvan Bacon name 135082815dcSEvan Bacon }, 136082815dcSEvan Bacon _: value 137082815dcSEvan Bacon })); 138082815dcSEvan Bacon} 139082815dcSEvan Baconfunction getObjectAsResourceGroup(group) { 140082815dcSEvan Bacon return { 141082815dcSEvan Bacon $: { 142082815dcSEvan Bacon name: group.name, 143082815dcSEvan Bacon parent: group.parent 144082815dcSEvan Bacon }, 145082815dcSEvan Bacon item: getObjectAsResourceItems(group.item) 146082815dcSEvan Bacon }; 147082815dcSEvan Bacon} 148082815dcSEvan Bacon//# sourceMappingURL=Resources.js.map