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