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