1"use strict"; 2 3Object.defineProperty(exports, "__esModule", { 4 value: true 5}); 6exports.buildResourceGroup = buildResourceGroup; 7exports.buildResourceItem = buildResourceItem; 8exports.ensureDefaultResourceXML = ensureDefaultResourceXML; 9exports.findResourceGroup = findResourceGroup; 10exports.getObjectAsResourceGroup = getObjectAsResourceGroup; 11exports.getObjectAsResourceItems = getObjectAsResourceItems; 12exports.getResourceItemsAsObject = getResourceItemsAsObject; 13exports.readResourcesXMLAsync = readResourcesXMLAsync; 14 15function _XML() { 16 const data = require("../utils/XML"); 17 18 _XML = function () { 19 return data; 20 }; 21 22 return data; 23} 24 25const fallbackResourceString = `<?xml version="1.0" encoding="utf-8"?><resources></resources>`; 26/** 27 * Read an XML file while providing a default fallback for resource files. 28 * 29 * @param options path to the XML file, returns a fallback XML if the path doesn't exist. 30 */ 31 32async function readResourcesXMLAsync({ 33 path, 34 fallback = fallbackResourceString 35}) { 36 const xml = await (0, _XML().readXMLAsync)({ 37 path, 38 fallback 39 }); // Ensure the type is expected. 40 41 if (!xml.resources) { 42 xml.resources = {}; 43 } 44 45 return xml; 46} 47/** 48 * Ensure the provided xml has a `resources` object (the expected shape). 49 * 50 * @param xml 51 */ 52 53 54function ensureDefaultResourceXML(xml) { 55 if (!xml) { 56 xml = { 57 resources: {} 58 }; 59 } 60 61 if (!xml.resources) { 62 xml.resources = {}; 63 } 64 65 return xml; 66} 67/** 68 * Build a `ResourceItemXML` given its `name` and `value`. This makes things a bit more readable. 69 * 70 * - JSON: `{ $: { name }, _: value }` 71 * - XML: `<item name="NAME">VALUE</item>` 72 * 73 * @param props name and value strings. 74 */ 75 76 77function buildResourceItem({ 78 name, 79 value, 80 targetApi, 81 translatable 82}) { 83 const item = { 84 $: { 85 name 86 }, 87 _: value 88 }; 89 90 if (targetApi) { 91 item.$['tools:targetApi'] = targetApi; 92 } 93 94 if (translatable !== undefined) { 95 item.$['translatable'] = String(translatable); 96 } 97 98 return item; 99} 100 101function buildResourceGroup(parent) { 102 var _parent$items; 103 104 return { 105 $: { 106 name: parent.name, 107 parent: parent.parent 108 }, 109 item: (_parent$items = parent.items) !== null && _parent$items !== void 0 ? _parent$items : [] 110 }; 111} 112 113function findResourceGroup(xml, group) { 114 var _xml$filter, _xml$filter$call; 115 116 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, ({ 117 $: head 118 }) => { 119 let matches = head.name === group.name; 120 121 if (group.parent != null && matches) { 122 matches = head.parent === group.parent; 123 } 124 125 return matches; 126 })) === null || _xml$filter$call === void 0 ? void 0 : _xml$filter$call[0]; 127 return app !== null && app !== void 0 ? app : null; 128} 129/** 130 * Helper to convert a basic XML object into a simple k/v pair. 131 * 132 * @param xml 133 * @returns 134 */ 135 136 137function getResourceItemsAsObject(xml) { 138 return xml.reduce((prev, curr) => ({ ...prev, 139 [curr.$.name]: curr._ 140 }), {}); 141} 142/** 143 * Helper to convert a basic k/v object to a ResourceItemXML array. 144 * 145 * @param xml 146 * @returns 147 */ 148 149 150function getObjectAsResourceItems(obj) { 151 return Object.entries(obj).map(([name, value]) => ({ 152 $: { 153 name 154 }, 155 _: value 156 })); 157} 158 159function getObjectAsResourceGroup(group) { 160 return { 161 $: { 162 name: group.name, 163 parent: group.parent 164 }, 165 item: getObjectAsResourceItems(group.item) 166 }; 167} 168//# sourceMappingURL=Resources.js.map