@appium/universal-xml-plugin 1.0.0-beta.14 → 1.0.0-beta.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,98 +1,86 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = exports.UniversalXMLPlugin = void 0;
9
-
10
- require("source-map-support/register");
11
-
12
- var _plugin = _interopRequireDefault(require("appium/plugin"));
13
-
14
- var _driver = require("appium/driver");
15
-
16
- var _source = require("./source");
17
-
18
- var _xpath = require("./xpath");
19
-
20
- var _logger = _interopRequireDefault(require("./logger"));
21
-
22
- class UniversalXMLPlugin extends _plugin.default {
23
- commands = ['getPageSource', 'findElement', 'findElements', 'findElementFromElement', 'findElementsFromElement'];
24
-
25
- async getPageSource(next, driver, sessId, addIndexPath = false) {
26
- const source = next ? await next() : await driver.getPageSource();
27
- const metadata = {};
28
- const {
29
- platformName
30
- } = driver.caps;
31
-
32
- if (platformName.toLowerCase() === 'android') {
33
- metadata.appPackage = driver.opts.appPackage;
2
+ /* eslint-disable no-case-declarations */
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.UniversalXMLPlugin = void 0;
8
+ const plugin_1 = __importDefault(require("appium/plugin"));
9
+ const driver_1 = require("appium/driver");
10
+ const source_1 = require("./source");
11
+ const xpath_1 = require("./xpath");
12
+ const logger_1 = __importDefault(require("./logger"));
13
+ class UniversalXMLPlugin extends plugin_1.default {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.commands = [
17
+ 'getPageSource',
18
+ 'findElement',
19
+ 'findElements',
20
+ 'findElementFromElement',
21
+ 'findElementsFromElement',
22
+ ];
34
23
  }
35
-
36
- const {
37
- xml,
38
- unknowns
39
- } = (0, _source.transformSourceXml)(source, platformName.toLowerCase(), {
40
- metadata,
41
- addIndexPath
42
- });
43
-
44
- if (unknowns.nodes.length) {
45
- _logger.default.warn(`The XML mapper found ${unknowns.nodes.length} node(s) / ` + `tag name(s) that it didn't know about. These should be ` + `reported to improve the quality of the plugin: ` + unknowns.nodes.join(', '));
24
+ async getPageSource(next, driver, sessId, addIndexPath = false) {
25
+ const source = next ? await next() : await driver.getPageSource();
26
+ const metadata = {};
27
+ const { platformName } = driver.caps;
28
+ if (platformName.toLowerCase() === 'android') {
29
+ metadata.appPackage = driver.opts.appPackage;
30
+ }
31
+ const { xml, unknowns } = (0, source_1.transformSourceXml)(source, platformName.toLowerCase(), {
32
+ metadata,
33
+ addIndexPath,
34
+ });
35
+ if (unknowns.nodes.length) {
36
+ logger_1.default.warn(`The XML mapper found ${unknowns.nodes.length} node(s) / ` +
37
+ `tag name(s) that it didn't know about. These should be ` +
38
+ `reported to improve the quality of the plugin: ` +
39
+ unknowns.nodes.join(', '));
40
+ }
41
+ if (unknowns.attrs.length) {
42
+ logger_1.default.warn(`The XML mapper found ${unknowns.attrs.length} attributes ` +
43
+ `that it didn't know about. These should be reported to ` +
44
+ `improve the quality of the plugin: ` +
45
+ unknowns.attrs.join(', '));
46
+ }
47
+ return xml;
46
48
  }
47
-
48
- if (unknowns.attrs.length) {
49
- _logger.default.warn(`The XML mapper found ${unknowns.attrs.length} attributes ` + `that it didn't know about. These should be reported to ` + `improve the quality of the plugin: ` + unknowns.attrs.join(', '));
49
+ async findElement(...args) {
50
+ return await this._find(false, ...args);
50
51
  }
51
-
52
- return xml;
53
- }
54
-
55
- async findElement(...args) {
56
- return await this._find(false, ...args);
57
- }
58
-
59
- async findElements(...args) {
60
- return await this._find(true, ...args);
61
- }
62
-
63
- async _find(multiple, next, driver, strategy, selector) {
64
- const {
65
- platformName
66
- } = driver.caps;
67
-
68
- if (strategy.toLowerCase() !== 'xpath') {
69
- return await next();
52
+ async findElements(...args) {
53
+ return await this._find(true, ...args);
70
54
  }
71
-
72
- const xml = await this.getPageSource(null, driver, null, true);
73
- let newSelector = (0, _xpath.transformQuery)(selector, xml, multiple);
74
-
75
- if (newSelector === null) {
76
- _logger.default.warn(`Selector was not able to be translated to underlying XML. Either the requested ` + `element does not exist or there was an error in translation`);
77
-
78
- if (multiple) {
79
- return [];
80
- }
81
-
82
- throw new _driver.errors.NoSuchElementError();
55
+ async _find(multiple, next, driver, strategy, selector) {
56
+ const { platformName } = driver.caps;
57
+ if (strategy.toLowerCase() !== 'xpath') {
58
+ return await next();
59
+ }
60
+ const xml = await this.getPageSource(null, driver, null, true);
61
+ let newSelector = (0, xpath_1.transformQuery)(selector, xml, multiple);
62
+ // if the selector was not able to be transformed, that means no elements were found that
63
+ // matched, so do the appropriate thing based on element vs elements
64
+ if (newSelector === null) {
65
+ logger_1.default.warn(`Selector was not able to be translated to underlying XML. Either the requested ` +
66
+ `element does not exist or there was an error in translation`);
67
+ if (multiple) {
68
+ return [];
69
+ }
70
+ throw new driver_1.errors.NoSuchElementError();
71
+ }
72
+ if (platformName.toLowerCase() === 'ios') {
73
+ // with the XCUITest driver, the <AppiumAUT> wrapper element is present in the source but is
74
+ // not present in the source considered by WDA, so our index path based xpath queries will
75
+ // not work with WDA as-is. We need to remove the first path segment.
76
+ newSelector = newSelector.replace(/^\/\*\[1\]/, '');
77
+ }
78
+ logger_1.default.info(`Selector was translated to: ${newSelector}`);
79
+ // otherwise just run the transformed query!
80
+ const finder = multiple ? 'findElements' : 'findElement';
81
+ return await driver[finder](strategy, newSelector);
83
82
  }
84
-
85
- if (platformName.toLowerCase() === 'ios') {
86
- newSelector = newSelector.replace(/^\/\*\[1\]/, '');
87
- }
88
-
89
- _logger.default.info(`Selector was translated to: ${newSelector}`);
90
-
91
- const finder = multiple ? 'findElements' : 'findElement';
92
- return await driver[finder](strategy, newSelector);
93
- }
94
-
95
83
  }
96
-
97
- exports.UniversalXMLPlugin = exports.default = UniversalXMLPlugin;
98
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVbml2ZXJzYWxYTUxQbHVnaW4iLCJCYXNlUGx1Z2luIiwiY29tbWFuZHMiLCJnZXRQYWdlU291cmNlIiwibmV4dCIsImRyaXZlciIsInNlc3NJZCIsImFkZEluZGV4UGF0aCIsInNvdXJjZSIsIm1ldGFkYXRhIiwicGxhdGZvcm1OYW1lIiwiY2FwcyIsInRvTG93ZXJDYXNlIiwiYXBwUGFja2FnZSIsIm9wdHMiLCJ4bWwiLCJ1bmtub3ducyIsInRyYW5zZm9ybVNvdXJjZVhtbCIsIm5vZGVzIiwibGVuZ3RoIiwibG9nIiwid2FybiIsImpvaW4iLCJhdHRycyIsImZpbmRFbGVtZW50IiwiYXJncyIsIl9maW5kIiwiZmluZEVsZW1lbnRzIiwibXVsdGlwbGUiLCJzdHJhdGVneSIsInNlbGVjdG9yIiwibmV3U2VsZWN0b3IiLCJ0cmFuc2Zvcm1RdWVyeSIsImVycm9ycyIsIk5vU3VjaEVsZW1lbnRFcnJvciIsInJlcGxhY2UiLCJpbmZvIiwiZmluZGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3BsdWdpbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xuXG5pbXBvcnQgQmFzZVBsdWdpbiBmcm9tICdhcHBpdW0vcGx1Z2luJztcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7dHJhbnNmb3JtU291cmNlWG1sfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQge3RyYW5zZm9ybVF1ZXJ5fSBmcm9tICcuL3hwYXRoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVbml2ZXJzYWxYTUxQbHVnaW4gZXh0ZW5kcyBCYXNlUGx1Z2luIHtcbiAgY29tbWFuZHMgPSBbXG4gICAgJ2dldFBhZ2VTb3VyY2UnLFxuICAgICdmaW5kRWxlbWVudCcsXG4gICAgJ2ZpbmRFbGVtZW50cycsXG4gICAgJ2ZpbmRFbGVtZW50RnJvbUVsZW1lbnQnLFxuICAgICdmaW5kRWxlbWVudHNGcm9tRWxlbWVudCcsXG4gIF07XG5cbiAgYXN5bmMgZ2V0UGFnZVNvdXJjZShuZXh0LCBkcml2ZXIsIHNlc3NJZCwgYWRkSW5kZXhQYXRoID0gZmFsc2UpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXh0ID8gYXdhaXQgbmV4dCgpIDogYXdhaXQgZHJpdmVyLmdldFBhZ2VTb3VyY2UoKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHt9O1xuICAgIGNvbnN0IHtwbGF0Zm9ybU5hbWV9ID0gZHJpdmVyLmNhcHM7XG4gICAgaWYgKHBsYXRmb3JtTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYW5kcm9pZCcpIHtcbiAgICAgIG1ldGFkYXRhLmFwcFBhY2thZ2UgPSBkcml2ZXIub3B0cy5hcHBQYWNrYWdlO1xuICAgIH1cbiAgICBjb25zdCB7eG1sLCB1bmtub3duc30gPSB0cmFuc2Zvcm1Tb3VyY2VYbWwoc291cmNlLCBwbGF0Zm9ybU5hbWUudG9Mb3dlckNhc2UoKSwge1xuICAgICAgbWV0YWRhdGEsXG4gICAgICBhZGRJbmRleFBhdGgsXG4gICAgfSk7XG4gICAgaWYgKHVua25vd25zLm5vZGVzLmxlbmd0aCkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIGBUaGUgWE1MIG1hcHBlciBmb3VuZCAke3Vua25vd25zLm5vZGVzLmxlbmd0aH0gbm9kZShzKSAvIGAgK1xuICAgICAgICAgIGB0YWcgbmFtZShzKSB0aGF0IGl0IGRpZG4ndCBrbm93IGFib3V0LiBUaGVzZSBzaG91bGQgYmUgYCArXG4gICAgICAgICAgYHJlcG9ydGVkIHRvIGltcHJvdmUgdGhlIHF1YWxpdHkgb2YgdGhlIHBsdWdpbjogYCArXG4gICAgICAgICAgdW5rbm93bnMubm9kZXMuam9pbignLCAnKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVua25vd25zLmF0dHJzLmxlbmd0aCkge1xuICAgICAgbG9nLndhcm4oXG4gICAgICAgIGBUaGUgWE1MIG1hcHBlciBmb3VuZCAke3Vua25vd25zLmF0dHJzLmxlbmd0aH0gYXR0cmlidXRlcyBgICtcbiAgICAgICAgICBgdGhhdCBpdCBkaWRuJ3Qga25vdyBhYm91dC4gVGhlc2Ugc2hvdWxkIGJlIHJlcG9ydGVkIHRvIGAgK1xuICAgICAgICAgIGBpbXByb3ZlIHRoZSBxdWFsaXR5IG9mIHRoZSBwbHVnaW46IGAgK1xuICAgICAgICAgIHVua25vd25zLmF0dHJzLmpvaW4oJywgJylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB4bWw7XG4gIH1cblxuICBhc3luYyBmaW5kRWxlbWVudCguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2ZpbmQoZmFsc2UsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgZmluZEVsZW1lbnRzKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZmluZCh0cnVlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIF9maW5kKG11bHRpcGxlLCBuZXh0LCBkcml2ZXIsIHN0cmF0ZWd5LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHtwbGF0Zm9ybU5hbWV9ID0gZHJpdmVyLmNhcHM7XG4gICAgaWYgKHN0cmF0ZWd5LnRvTG93ZXJDYXNlKCkgIT09ICd4cGF0aCcpIHtcbiAgICAgIHJldHVybiBhd2FpdCBuZXh0KCk7XG4gICAgfVxuICAgIGNvbnN0IHhtbCA9IGF3YWl0IHRoaXMuZ2V0UGFnZVNvdXJjZShudWxsLCBkcml2ZXIsIG51bGwsIHRydWUpO1xuICAgIGxldCBuZXdTZWxlY3RvciA9IHRyYW5zZm9ybVF1ZXJ5KHNlbGVjdG9yLCB4bWwsIG11bHRpcGxlKTtcblxuICAgIC8vIGlmIHRoZSBzZWxlY3RvciB3YXMgbm90IGFibGUgdG8gYmUgdHJhbnNmb3JtZWQsIHRoYXQgbWVhbnMgbm8gZWxlbWVudHMgd2VyZSBmb3VuZCB0aGF0XG4gICAgLy8gbWF0Y2hlZCwgc28gZG8gdGhlIGFwcHJvcHJpYXRlIHRoaW5nIGJhc2VkIG9uIGVsZW1lbnQgdnMgZWxlbWVudHNcbiAgICBpZiAobmV3U2VsZWN0b3IgPT09IG51bGwpIHtcbiAgICAgIGxvZy53YXJuKFxuICAgICAgICBgU2VsZWN0b3Igd2FzIG5vdCBhYmxlIHRvIGJlIHRyYW5zbGF0ZWQgdG8gdW5kZXJseWluZyBYTUwuIEVpdGhlciB0aGUgcmVxdWVzdGVkIGAgK1xuICAgICAgICAgIGBlbGVtZW50IGRvZXMgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBlcnJvciBpbiB0cmFuc2xhdGlvbmBcbiAgICAgICk7XG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hFbGVtZW50RXJyb3IoKTtcbiAgICB9XG5cbiAgICBpZiAocGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpb3MnKSB7XG4gICAgICAvLyB3aXRoIHRoZSBYQ1VJVGVzdCBkcml2ZXIsIHRoZSA8QXBwaXVtQVVUPiB3cmFwcGVyIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgc291cmNlIGJ1dCBpc1xuICAgICAgLy8gbm90IHByZXNlbnQgaW4gdGhlIHNvdXJjZSBjb25zaWRlcmVkIGJ5IFdEQSwgc28gb3VyIGluZGV4IHBhdGggYmFzZWQgeHBhdGggcXVlcmllcyB3aWxsXG4gICAgICAvLyBub3Qgd29yayB3aXRoIFdEQSBhcy1pcy4gV2UgbmVlZCB0byByZW1vdmUgdGhlIGZpcnN0IHBhdGggc2VnbWVudC5cbiAgICAgIG5ld1NlbGVjdG9yID0gbmV3U2VsZWN0b3IucmVwbGFjZSgvXlxcL1xcKlxcWzFcXF0vLCAnJyk7XG4gICAgfVxuICAgIGxvZy5pbmZvKGBTZWxlY3RvciB3YXMgdHJhbnNsYXRlZCB0bzogJHtuZXdTZWxlY3Rvcn1gKTtcblxuICAgIC8vIG90aGVyd2lzZSBqdXN0IHJ1biB0aGUgdHJhbnNmb3JtZWQgcXVlcnkhXG4gICAgY29uc3QgZmluZGVyID0gbXVsdGlwbGUgPyAnZmluZEVsZW1lbnRzJyA6ICdmaW5kRWxlbWVudCc7XG4gICAgcmV0dXJuIGF3YWl0IGRyaXZlcltmaW5kZXJdKHN0cmF0ZWd5LCBuZXdTZWxlY3Rvcik7XG4gIH1cbn1cblxuZXhwb3J0IHtVbml2ZXJzYWxYTUxQbHVnaW59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVlLE1BQU1BLGtCQUFOLFNBQWlDQyxlQUFqQyxDQUE0QztFQUN6REMsUUFBUSxHQUFHLENBQ1QsZUFEUyxFQUVULGFBRlMsRUFHVCxjQUhTLEVBSVQsd0JBSlMsRUFLVCx5QkFMUyxDQUFIOztFQVFXLE1BQWJDLGFBQWEsQ0FBQ0MsSUFBRCxFQUFPQyxNQUFQLEVBQWVDLE1BQWYsRUFBdUJDLFlBQVksR0FBRyxLQUF0QyxFQUE2QztJQUM5RCxNQUFNQyxNQUFNLEdBQUdKLElBQUksR0FBRyxNQUFNQSxJQUFJLEVBQWIsR0FBa0IsTUFBTUMsTUFBTSxDQUFDRixhQUFQLEVBQTNDO0lBQ0EsTUFBTU0sUUFBUSxHQUFHLEVBQWpCO0lBQ0EsTUFBTTtNQUFDQztJQUFELElBQWlCTCxNQUFNLENBQUNNLElBQTlCOztJQUNBLElBQUlELFlBQVksQ0FBQ0UsV0FBYixPQUErQixTQUFuQyxFQUE4QztNQUM1Q0gsUUFBUSxDQUFDSSxVQUFULEdBQXNCUixNQUFNLENBQUNTLElBQVAsQ0FBWUQsVUFBbEM7SUFDRDs7SUFDRCxNQUFNO01BQUNFLEdBQUQ7TUFBTUM7SUFBTixJQUFrQixJQUFBQywwQkFBQSxFQUFtQlQsTUFBbkIsRUFBMkJFLFlBQVksQ0FBQ0UsV0FBYixFQUEzQixFQUF1RDtNQUM3RUgsUUFENkU7TUFFN0VGO0lBRjZFLENBQXZELENBQXhCOztJQUlBLElBQUlTLFFBQVEsQ0FBQ0UsS0FBVCxDQUFlQyxNQUFuQixFQUEyQjtNQUN6QkMsZUFBQSxDQUFJQyxJQUFKLENBQ0csd0JBQXVCTCxRQUFRLENBQUNFLEtBQVQsQ0FBZUMsTUFBTyxhQUE5QyxHQUNHLHlEQURILEdBRUcsaURBRkgsR0FHRUgsUUFBUSxDQUFDRSxLQUFULENBQWVJLElBQWYsQ0FBb0IsSUFBcEIsQ0FKSjtJQU1EOztJQUNELElBQUlOLFFBQVEsQ0FBQ08sS0FBVCxDQUFlSixNQUFuQixFQUEyQjtNQUN6QkMsZUFBQSxDQUFJQyxJQUFKLENBQ0csd0JBQXVCTCxRQUFRLENBQUNPLEtBQVQsQ0FBZUosTUFBTyxjQUE5QyxHQUNHLHlEQURILEdBRUcscUNBRkgsR0FHRUgsUUFBUSxDQUFDTyxLQUFULENBQWVELElBQWYsQ0FBb0IsSUFBcEIsQ0FKSjtJQU1EOztJQUNELE9BQU9QLEdBQVA7RUFDRDs7RUFFZ0IsTUFBWFMsV0FBVyxDQUFDLEdBQUdDLElBQUosRUFBVTtJQUN6QixPQUFPLE1BQU0sS0FBS0MsS0FBTCxDQUFXLEtBQVgsRUFBa0IsR0FBR0QsSUFBckIsQ0FBYjtFQUNEOztFQUVpQixNQUFaRSxZQUFZLENBQUMsR0FBR0YsSUFBSixFQUFVO0lBQzFCLE9BQU8sTUFBTSxLQUFLQyxLQUFMLENBQVcsSUFBWCxFQUFpQixHQUFHRCxJQUFwQixDQUFiO0VBQ0Q7O0VBRVUsTUFBTEMsS0FBSyxDQUFDRSxRQUFELEVBQVd4QixJQUFYLEVBQWlCQyxNQUFqQixFQUF5QndCLFFBQXpCLEVBQW1DQyxRQUFuQyxFQUE2QztJQUN0RCxNQUFNO01BQUNwQjtJQUFELElBQWlCTCxNQUFNLENBQUNNLElBQTlCOztJQUNBLElBQUlrQixRQUFRLENBQUNqQixXQUFULE9BQTJCLE9BQS9CLEVBQXdDO01BQ3RDLE9BQU8sTUFBTVIsSUFBSSxFQUFqQjtJQUNEOztJQUNELE1BQU1XLEdBQUcsR0FBRyxNQUFNLEtBQUtaLGFBQUwsQ0FBbUIsSUFBbkIsRUFBeUJFLE1BQXpCLEVBQWlDLElBQWpDLEVBQXVDLElBQXZDLENBQWxCO0lBQ0EsSUFBSTBCLFdBQVcsR0FBRyxJQUFBQyxxQkFBQSxFQUFlRixRQUFmLEVBQXlCZixHQUF6QixFQUE4QmEsUUFBOUIsQ0FBbEI7O0lBSUEsSUFBSUcsV0FBVyxLQUFLLElBQXBCLEVBQTBCO01BQ3hCWCxlQUFBLENBQUlDLElBQUosQ0FDRyxpRkFBRCxHQUNHLDZEQUZMOztNQUlBLElBQUlPLFFBQUosRUFBYztRQUNaLE9BQU8sRUFBUDtNQUNEOztNQUNELE1BQU0sSUFBSUssY0FBQSxDQUFPQyxrQkFBWCxFQUFOO0lBQ0Q7O0lBRUQsSUFBSXhCLFlBQVksQ0FBQ0UsV0FBYixPQUErQixLQUFuQyxFQUEwQztNQUl4Q21CLFdBQVcsR0FBR0EsV0FBVyxDQUFDSSxPQUFaLENBQW9CLFlBQXBCLEVBQWtDLEVBQWxDLENBQWQ7SUFDRDs7SUFDRGYsZUFBQSxDQUFJZ0IsSUFBSixDQUFVLCtCQUE4QkwsV0FBWSxFQUFwRDs7SUFHQSxNQUFNTSxNQUFNLEdBQUdULFFBQVEsR0FBRyxjQUFILEdBQW9CLGFBQTNDO0lBQ0EsT0FBTyxNQUFNdkIsTUFBTSxDQUFDZ0MsTUFBRCxDQUFOLENBQWVSLFFBQWYsRUFBeUJFLFdBQXpCLENBQWI7RUFDRDs7QUEvRXdEIn0=
84
+ exports.default = UniversalXMLPlugin;
85
+ exports.UniversalXMLPlugin = UniversalXMLPlugin;
86
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../lib/plugin.js"],"names":[],"mappings":"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"}
@@ -1,224 +1,184 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
7
17
  });
8
- exports.IDX_PREFIX = exports.IDX_PATH_PREFIX = exports.ATTR_PREFIX = void 0;
9
- exports.getUniversalAttrName = getUniversalAttrName;
10
- exports.getUniversalNodeName = getUniversalNodeName;
11
- exports.transformAttrs = transformAttrs;
12
- exports.transformChildNodes = transformChildNodes;
13
- exports.transformNode = transformNode;
14
- exports.transformSourceXml = transformSourceXml;
15
-
16
- require("source-map-support/register");
17
-
18
- var _lodash = _interopRequireDefault(require("lodash"));
19
-
20
- var _fastXmlParser = _interopRequireWildcard(require("fast-xml-parser"));
21
-
22
- var _nodeMap = _interopRequireDefault(require("./node-map"));
23
-
24
- var _attrMap = require("./attr-map");
25
-
26
- var _transformers = _interopRequireDefault(require("./transformers"));
27
-
28
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
-
30
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
-
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.transformAttrs = exports.transformChildNodes = exports.transformNode = exports.getUniversalAttrName = exports.getUniversalNodeName = exports.transformSourceXml = exports.IDX_PREFIX = exports.IDX_PATH_PREFIX = exports.ATTR_PREFIX = void 0;
30
+ const lodash_1 = __importDefault(require("lodash"));
31
+ const fast_xml_parser_1 = __importStar(require("fast-xml-parser"));
32
+ const node_map_1 = __importDefault(require("./node-map"));
33
+ const attr_map_1 = require("./attr-map");
34
+ const transformers_1 = __importDefault(require("./transformers"));
32
35
  const PARSE_OPTS = {
33
- ignoreAttributes: false,
34
- arrayMode: true
36
+ ignoreAttributes: false,
37
+ arrayMode: true,
35
38
  };
36
39
  const GEN_OPTS = {
37
- ignoreAttributes: false,
38
- arrayMode: true,
39
- format: true
40
+ ignoreAttributes: false,
41
+ arrayMode: true,
42
+ format: true,
40
43
  };
41
- const ATTR_PREFIX = '@_';
42
- exports.ATTR_PREFIX = ATTR_PREFIX;
43
- const IDX_PATH_PREFIX = `${ATTR_PREFIX}indexPath`;
44
- exports.IDX_PATH_PREFIX = IDX_PATH_PREFIX;
45
- const IDX_PREFIX = `${ATTR_PREFIX}index`;
46
- exports.IDX_PREFIX = IDX_PREFIX;
47
-
48
- const isAttr = k => k.substring(0, 2) === ATTR_PREFIX;
49
-
50
- const isNode = k => !isAttr(k);
51
-
52
- function transformSourceXml(xmlStr, platform, {
53
- metadata = {},
54
- addIndexPath = false
55
- } = {}) {
56
- xmlStr = xmlStr.replace('<AppiumAUT>', '<AppiumAUT index="0">');
57
-
58
- const xmlObj = _fastXmlParser.default.parse(xmlStr, PARSE_OPTS);
59
-
60
- const unknowns = transformNode(xmlObj, platform, {
61
- metadata,
62
- addIndexPath,
63
- parentPath: ''
64
- });
65
- const jParser = new _fastXmlParser.j2xParser(GEN_OPTS);
66
- let transformedXml = jParser.parse(xmlObj).trim();
67
- transformedXml = `<?xml version="1.0" encoding="UTF-8"?>\n${transformedXml}`;
68
- return {
69
- xml: transformedXml,
70
- unknowns
71
- };
44
+ exports.ATTR_PREFIX = '@_';
45
+ exports.IDX_PATH_PREFIX = `${exports.ATTR_PREFIX}indexPath`;
46
+ exports.IDX_PREFIX = `${exports.ATTR_PREFIX}index`;
47
+ const isAttr = (k) => k.substring(0, 2) === exports.ATTR_PREFIX;
48
+ const isNode = (k) => !isAttr(k);
49
+ function transformSourceXml(xmlStr, platform, { metadata = {}, addIndexPath = false } = {}) {
50
+ // first thing we want to do is modify the ios source root node, because it doesn't include the
51
+ // necessary index attribute, so we add it if it's not there
52
+ xmlStr = xmlStr.replace('<AppiumAUT>', '<AppiumAUT index="0">');
53
+ const xmlObj = fast_xml_parser_1.default.parse(xmlStr, PARSE_OPTS);
54
+ const unknowns = transformNode(xmlObj, platform, {
55
+ metadata,
56
+ addIndexPath,
57
+ parentPath: '',
58
+ });
59
+ const jParser = new fast_xml_parser_1.j2xParser(GEN_OPTS);
60
+ let transformedXml = jParser.parse(xmlObj).trim();
61
+ transformedXml = `<?xml version="1.0" encoding="UTF-8"?>\n${transformedXml}`;
62
+ return { xml: transformedXml, unknowns };
72
63
  }
73
-
64
+ exports.transformSourceXml = transformSourceXml;
74
65
  function getUniversalName(nameMap, name, platform) {
75
- for (const translatedName of Object.keys(nameMap)) {
76
- var _nameMap$translatedNa;
77
-
78
- const sourceNodes = (_nameMap$translatedNa = nameMap[translatedName]) === null || _nameMap$translatedNa === void 0 ? void 0 : _nameMap$translatedNa[platform];
79
-
80
- if (_lodash.default.isArray(sourceNodes) && sourceNodes.includes(name)) {
81
- return translatedName;
66
+ for (const translatedName of Object.keys(nameMap)) {
67
+ const sourceNodes = nameMap[translatedName]?.[platform];
68
+ if (lodash_1.default.isArray(sourceNodes) && sourceNodes.includes(name)) {
69
+ return translatedName;
70
+ }
71
+ if (sourceNodes === name) {
72
+ return translatedName;
73
+ }
82
74
  }
83
-
84
- if (sourceNodes === name) {
85
- return translatedName;
86
- }
87
- }
88
-
89
- return null;
75
+ return null;
90
76
  }
91
-
92
77
  function getUniversalNodeName(nodeName, platform) {
93
- return getUniversalName(_nodeMap.default, nodeName, platform);
78
+ return getUniversalName(node_map_1.default, nodeName, platform);
94
79
  }
95
-
80
+ exports.getUniversalNodeName = getUniversalNodeName;
96
81
  function getUniversalAttrName(attrName, platform) {
97
- return getUniversalName(_attrMap.ATTR_MAP, attrName, platform);
82
+ return getUniversalName(attr_map_1.ATTR_MAP, attrName, platform);
98
83
  }
99
-
100
- function transformNode(nodeObj, platform, {
101
- metadata,
102
- addIndexPath,
103
- parentPath
104
- }) {
105
- const unknownNodes = [];
106
- const unknownAttrs = [];
107
-
108
- if (_lodash.default.isPlainObject(nodeObj)) {
109
- var _TRANSFORMS$platform;
110
-
111
- const keys = Object.keys(nodeObj);
112
- const childNodeNames = keys.filter(isNode);
113
- const attrs = keys.filter(isAttr);
114
- let thisIndexPath = parentPath;
115
-
116
- if (attrs.length && addIndexPath) {
117
- if (!attrs.includes(IDX_PREFIX)) {
118
- throw new Error(`Index path is required but node found with no 'index' attribute`);
119
- }
120
-
121
- thisIndexPath = `${parentPath}/${nodeObj[IDX_PREFIX]}`;
122
- nodeObj[IDX_PATH_PREFIX] = thisIndexPath;
84
+ exports.getUniversalAttrName = getUniversalAttrName;
85
+ function transformNode(nodeObj, platform, { metadata, addIndexPath, parentPath }) {
86
+ const unknownNodes = [];
87
+ const unknownAttrs = [];
88
+ if (lodash_1.default.isPlainObject(nodeObj)) {
89
+ const keys = Object.keys(nodeObj);
90
+ const childNodeNames = keys.filter(isNode);
91
+ const attrs = keys.filter(isAttr);
92
+ let thisIndexPath = parentPath;
93
+ if (attrs.length && addIndexPath) {
94
+ if (!attrs.includes(exports.IDX_PREFIX)) {
95
+ throw new Error(`Index path is required but node found with no 'index' attribute`);
96
+ }
97
+ thisIndexPath = `${parentPath}/${nodeObj[exports.IDX_PREFIX]}`;
98
+ nodeObj[exports.IDX_PATH_PREFIX] = thisIndexPath;
99
+ }
100
+ transformers_1.default[platform]?.(nodeObj, metadata);
101
+ unknownAttrs.push(...transformAttrs(nodeObj, attrs, platform));
102
+ const unknowns = transformChildNodes(nodeObj, childNodeNames, platform, {
103
+ metadata,
104
+ addIndexPath,
105
+ parentPath: thisIndexPath,
106
+ });
107
+ unknownAttrs.push(...unknowns.attrs);
108
+ unknownNodes.push(...unknowns.nodes);
123
109
  }
124
-
125
- (_TRANSFORMS$platform = _transformers.default[platform]) === null || _TRANSFORMS$platform === void 0 ? void 0 : _TRANSFORMS$platform.call(_transformers.default, nodeObj, metadata);
126
- unknownAttrs.push(...transformAttrs(nodeObj, attrs, platform));
127
- const unknowns = transformChildNodes(nodeObj, childNodeNames, platform, {
128
- metadata,
129
- addIndexPath,
130
- parentPath: thisIndexPath
131
- });
132
- unknownAttrs.push(...unknowns.attrs);
133
- unknownNodes.push(...unknowns.nodes);
134
- } else if (_lodash.default.isArray(nodeObj)) {
135
- for (const childObj of nodeObj) {
136
- const {
137
- nodes,
138
- attrs
139
- } = transformNode(childObj, platform, {
140
- metadata,
141
- addIndexPath,
142
- parentPath
143
- });
144
- unknownNodes.push(...nodes);
145
- unknownAttrs.push(...attrs);
110
+ else if (lodash_1.default.isArray(nodeObj)) {
111
+ for (const childObj of nodeObj) {
112
+ const { nodes, attrs } = transformNode(childObj, platform, {
113
+ metadata,
114
+ addIndexPath,
115
+ parentPath,
116
+ });
117
+ unknownNodes.push(...nodes);
118
+ unknownAttrs.push(...attrs);
119
+ }
146
120
  }
147
- }
148
-
149
- return {
150
- nodes: _lodash.default.uniq(unknownNodes),
151
- attrs: _lodash.default.uniq(unknownAttrs)
152
- };
121
+ return {
122
+ nodes: lodash_1.default.uniq(unknownNodes),
123
+ attrs: lodash_1.default.uniq(unknownAttrs),
124
+ };
153
125
  }
154
-
155
- function transformChildNodes(nodeObj, childNodeNames, platform, {
156
- metadata,
157
- addIndexPath,
158
- parentPath
159
- }) {
160
- const unknownNodes = [];
161
- const unknownAttrs = [];
162
-
163
- for (const nodeName of childNodeNames) {
164
- const {
165
- nodes,
166
- attrs
167
- } = transformNode(nodeObj[nodeName], platform, {
168
- metadata,
169
- addIndexPath,
170
- parentPath
171
- });
172
- unknownNodes.push(...nodes);
173
- unknownAttrs.push(...attrs);
174
- const universalName = getUniversalNodeName(nodeName, platform);
175
-
176
- if (universalName === null) {
177
- unknownNodes.push(nodeName);
178
- continue;
179
- }
180
-
181
- if (nodeObj[universalName]) {
182
- nodeObj[universalName].push(...nodeObj[nodeName]);
183
- } else {
184
- nodeObj[universalName] = nodeObj[nodeName];
126
+ exports.transformNode = transformNode;
127
+ function transformChildNodes(nodeObj, childNodeNames, platform, { metadata, addIndexPath, parentPath }) {
128
+ const unknownNodes = [];
129
+ const unknownAttrs = [];
130
+ for (const nodeName of childNodeNames) {
131
+ // before modifying the name of this child node, recurse down and modify the subtree
132
+ const { nodes, attrs } = transformNode(nodeObj[nodeName], platform, {
133
+ metadata,
134
+ addIndexPath,
135
+ parentPath,
136
+ });
137
+ unknownNodes.push(...nodes);
138
+ unknownAttrs.push(...attrs);
139
+ // now translate the node name and replace the subtree with this node
140
+ const universalName = getUniversalNodeName(nodeName, platform);
141
+ if (universalName === null) {
142
+ unknownNodes.push(nodeName);
143
+ continue;
144
+ }
145
+ // since multiple child node names could map to the same new transformed node name, we can't
146
+ // simply assign nodeObj[universalName] = nodeObj[nodeName]; we need to be sensitive to the
147
+ // situation where the end result is an array of children having the same node name
148
+ if (nodeObj[universalName]) {
149
+ // if we already have a node with the universal name, that means we are mapping a second
150
+ // original node name to the same universal node name, so we just push all its children into
151
+ // the list
152
+ nodeObj[universalName].push(...nodeObj[nodeName]);
153
+ }
154
+ else {
155
+ nodeObj[universalName] = nodeObj[nodeName];
156
+ }
157
+ delete nodeObj[nodeName];
185
158
  }
186
-
187
- delete nodeObj[nodeName];
188
- }
189
-
190
- return {
191
- nodes: unknownNodes,
192
- attrs: unknownAttrs
193
- };
159
+ return { nodes: unknownNodes, attrs: unknownAttrs };
194
160
  }
195
-
161
+ exports.transformChildNodes = transformChildNodes;
196
162
  function transformAttrs(nodeObj, attrs, platform) {
197
- const unknownAttrs = [];
198
-
199
- for (const attr of attrs) {
200
- const cleanAttr = attr.substring(2);
201
-
202
- if (_attrMap.REMOVE_ATTRS.includes(cleanAttr)) {
203
- delete nodeObj[attr];
204
- continue;
163
+ const unknownAttrs = [];
164
+ for (const attr of attrs) {
165
+ const cleanAttr = attr.substring(2);
166
+ if (attr_map_1.REMOVE_ATTRS.includes(cleanAttr)) {
167
+ delete nodeObj[attr];
168
+ continue;
169
+ }
170
+ const universalAttr = getUniversalAttrName(cleanAttr, platform);
171
+ if (universalAttr === null) {
172
+ unknownAttrs.push(cleanAttr);
173
+ continue;
174
+ }
175
+ const newAttr = `${exports.ATTR_PREFIX}${universalAttr}`;
176
+ if (newAttr !== attr) {
177
+ nodeObj[newAttr] = nodeObj[attr];
178
+ delete nodeObj[attr];
179
+ }
205
180
  }
206
-
207
- const universalAttr = getUniversalAttrName(cleanAttr, platform);
208
-
209
- if (universalAttr === null) {
210
- unknownAttrs.push(cleanAttr);
211
- continue;
212
- }
213
-
214
- const newAttr = `${ATTR_PREFIX}${universalAttr}`;
215
-
216
- if (newAttr !== attr) {
217
- nodeObj[newAttr] = nodeObj[attr];
218
- delete nodeObj[attr];
219
- }
220
- }
221
-
222
- return unknownAttrs;
181
+ return unknownAttrs;
223
182
  }
224
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQQVJTRV9PUFRTIiwiaWdub3JlQXR0cmlidXRlcyIsImFycmF5TW9kZSIsIkdFTl9PUFRTIiwiZm9ybWF0IiwiQVRUUl9QUkVGSVgiLCJJRFhfUEFUSF9QUkVGSVgiLCJJRFhfUFJFRklYIiwiaXNBdHRyIiwiayIsInN1YnN0cmluZyIsImlzTm9kZSIsInRyYW5zZm9ybVNvdXJjZVhtbCIsInhtbFN0ciIsInBsYXRmb3JtIiwibWV0YWRhdGEiLCJhZGRJbmRleFBhdGgiLCJyZXBsYWNlIiwieG1sT2JqIiwicGFyc2VyIiwicGFyc2UiLCJ1bmtub3ducyIsInRyYW5zZm9ybU5vZGUiLCJwYXJlbnRQYXRoIiwialBhcnNlciIsImoyeFBhcnNlciIsInRyYW5zZm9ybWVkWG1sIiwidHJpbSIsInhtbCIsImdldFVuaXZlcnNhbE5hbWUiLCJuYW1lTWFwIiwibmFtZSIsInRyYW5zbGF0ZWROYW1lIiwiT2JqZWN0Iiwia2V5cyIsInNvdXJjZU5vZGVzIiwiXyIsImlzQXJyYXkiLCJpbmNsdWRlcyIsImdldFVuaXZlcnNhbE5vZGVOYW1lIiwibm9kZU5hbWUiLCJOT0RFX01BUCIsImdldFVuaXZlcnNhbEF0dHJOYW1lIiwiYXR0ck5hbWUiLCJBVFRSX01BUCIsIm5vZGVPYmoiLCJ1bmtub3duTm9kZXMiLCJ1bmtub3duQXR0cnMiLCJpc1BsYWluT2JqZWN0IiwiY2hpbGROb2RlTmFtZXMiLCJmaWx0ZXIiLCJhdHRycyIsInRoaXNJbmRleFBhdGgiLCJsZW5ndGgiLCJFcnJvciIsIlRSQU5TRk9STVMiLCJwdXNoIiwidHJhbnNmb3JtQXR0cnMiLCJ0cmFuc2Zvcm1DaGlsZE5vZGVzIiwibm9kZXMiLCJjaGlsZE9iaiIsInVuaXEiLCJ1bml2ZXJzYWxOYW1lIiwiYXR0ciIsImNsZWFuQXR0ciIsIlJFTU9WRV9BVFRSUyIsInVuaXZlcnNhbEF0dHIiLCJuZXdBdHRyIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3NvdXJjZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhcnNlciwge2oyeFBhcnNlcn0gZnJvbSAnZmFzdC14bWwtcGFyc2VyJztcbmltcG9ydCBOT0RFX01BUCBmcm9tICcuL25vZGUtbWFwJztcbmltcG9ydCB7QVRUUl9NQVAsIFJFTU9WRV9BVFRSU30gZnJvbSAnLi9hdHRyLW1hcCc7XG5pbXBvcnQgVFJBTlNGT1JNUyBmcm9tICcuL3RyYW5zZm9ybWVycyc7XG5cbmNvbnN0IFBBUlNFX09QVFMgPSB7XG4gIGlnbm9yZUF0dHJpYnV0ZXM6IGZhbHNlLFxuICBhcnJheU1vZGU6IHRydWUsXG59O1xuXG5jb25zdCBHRU5fT1BUUyA9IHtcbiAgaWdub3JlQXR0cmlidXRlczogZmFsc2UsXG4gIGFycmF5TW9kZTogdHJ1ZSxcbiAgZm9ybWF0OiB0cnVlLFxufTtcblxuZXhwb3J0IGNvbnN0IEFUVFJfUFJFRklYID0gJ0BfJztcbmV4cG9ydCBjb25zdCBJRFhfUEFUSF9QUkVGSVggPSBgJHtBVFRSX1BSRUZJWH1pbmRleFBhdGhgO1xuZXhwb3J0IGNvbnN0IElEWF9QUkVGSVggPSBgJHtBVFRSX1BSRUZJWH1pbmRleGA7XG5cbmNvbnN0IGlzQXR0ciA9IChrKSA9PiBrLnN1YnN0cmluZygwLCAyKSA9PT0gQVRUUl9QUkVGSVg7XG5jb25zdCBpc05vZGUgPSAoaykgPT4gIWlzQXR0cihrKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVNvdXJjZVhtbCh4bWxTdHIsIHBsYXRmb3JtLCB7bWV0YWRhdGEgPSB7fSwgYWRkSW5kZXhQYXRoID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gZmlyc3QgdGhpbmcgd2Ugd2FudCB0byBkbyBpcyBtb2RpZnkgdGhlIGlvcyBzb3VyY2Ugcm9vdCBub2RlLCBiZWNhdXNlIGl0IGRvZXNuJ3QgaW5jbHVkZSB0aGVcbiAgLy8gbmVjZXNzYXJ5IGluZGV4IGF0dHJpYnV0ZSwgc28gd2UgYWRkIGl0IGlmIGl0J3Mgbm90IHRoZXJlXG4gIHhtbFN0ciA9IHhtbFN0ci5yZXBsYWNlKCc8QXBwaXVtQVVUPicsICc8QXBwaXVtQVVUIGluZGV4PVwiMFwiPicpO1xuICBjb25zdCB4bWxPYmogPSBwYXJzZXIucGFyc2UoeG1sU3RyLCBQQVJTRV9PUFRTKTtcbiAgY29uc3QgdW5rbm93bnMgPSB0cmFuc2Zvcm1Ob2RlKHhtbE9iaiwgcGxhdGZvcm0sIHtcbiAgICBtZXRhZGF0YSxcbiAgICBhZGRJbmRleFBhdGgsXG4gICAgcGFyZW50UGF0aDogJycsXG4gIH0pO1xuICBjb25zdCBqUGFyc2VyID0gbmV3IGoyeFBhcnNlcihHRU5fT1BUUyk7XG4gIGxldCB0cmFuc2Zvcm1lZFhtbCA9IGpQYXJzZXIucGFyc2UoeG1sT2JqKS50cmltKCk7XG4gIHRyYW5zZm9ybWVkWG1sID0gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxcbiR7dHJhbnNmb3JtZWRYbWx9YDtcbiAgcmV0dXJuIHt4bWw6IHRyYW5zZm9ybWVkWG1sLCB1bmtub3duc307XG59XG5cbmZ1bmN0aW9uIGdldFVuaXZlcnNhbE5hbWUobmFtZU1hcCwgbmFtZSwgcGxhdGZvcm0pIHtcbiAgZm9yIChjb25zdCB0cmFuc2xhdGVkTmFtZSBvZiBPYmplY3Qua2V5cyhuYW1lTWFwKSkge1xuICAgIGNvbnN0IHNvdXJjZU5vZGVzID0gbmFtZU1hcFt0cmFuc2xhdGVkTmFtZV0/LltwbGF0Zm9ybV07XG4gICAgaWYgKF8uaXNBcnJheShzb3VyY2VOb2RlcykgJiYgc291cmNlTm9kZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGVkTmFtZTtcbiAgICB9XG4gICAgaWYgKHNvdXJjZU5vZGVzID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlZE5hbWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pdmVyc2FsTm9kZU5hbWUobm9kZU5hbWUsIHBsYXRmb3JtKSB7XG4gIHJldHVybiBnZXRVbml2ZXJzYWxOYW1lKE5PREVfTUFQLCBub2RlTmFtZSwgcGxhdGZvcm0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pdmVyc2FsQXR0ck5hbWUoYXR0ck5hbWUsIHBsYXRmb3JtKSB7XG4gIHJldHVybiBnZXRVbml2ZXJzYWxOYW1lKEFUVFJfTUFQLCBhdHRyTmFtZSwgcGxhdGZvcm0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTm9kZShub2RlT2JqLCBwbGF0Zm9ybSwge21ldGFkYXRhLCBhZGRJbmRleFBhdGgsIHBhcmVudFBhdGh9KSB7XG4gIGNvbnN0IHVua25vd25Ob2RlcyA9IFtdO1xuICBjb25zdCB1bmtub3duQXR0cnMgPSBbXTtcbiAgaWYgKF8uaXNQbGFpbk9iamVjdChub2RlT2JqKSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlT2JqKTtcbiAgICBjb25zdCBjaGlsZE5vZGVOYW1lcyA9IGtleXMuZmlsdGVyKGlzTm9kZSk7XG4gICAgY29uc3QgYXR0cnMgPSBrZXlzLmZpbHRlcihpc0F0dHIpO1xuICAgIGxldCB0aGlzSW5kZXhQYXRoID0gcGFyZW50UGF0aDtcblxuICAgIGlmIChhdHRycy5sZW5ndGggJiYgYWRkSW5kZXhQYXRoKSB7XG4gICAgICBpZiAoIWF0dHJzLmluY2x1ZGVzKElEWF9QUkVGSVgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW5kZXggcGF0aCBpcyByZXF1aXJlZCBidXQgbm9kZSBmb3VuZCB3aXRoIG5vICdpbmRleCcgYXR0cmlidXRlYCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXNJbmRleFBhdGggPSBgJHtwYXJlbnRQYXRofS8ke25vZGVPYmpbSURYX1BSRUZJWF19YDtcbiAgICAgIG5vZGVPYmpbSURYX1BBVEhfUFJFRklYXSA9IHRoaXNJbmRleFBhdGg7XG4gICAgfVxuXG4gICAgVFJBTlNGT1JNU1twbGF0Zm9ybV0/Lihub2RlT2JqLCBtZXRhZGF0YSk7XG4gICAgdW5rbm93bkF0dHJzLnB1c2goLi4udHJhbnNmb3JtQXR0cnMobm9kZU9iaiwgYXR0cnMsIHBsYXRmb3JtKSk7XG4gICAgY29uc3QgdW5rbm93bnMgPSB0cmFuc2Zvcm1DaGlsZE5vZGVzKG5vZGVPYmosIGNoaWxkTm9kZU5hbWVzLCBwbGF0Zm9ybSwge1xuICAgICAgbWV0YWRhdGEsXG4gICAgICBhZGRJbmRleFBhdGgsXG4gICAgICBwYXJlbnRQYXRoOiB0aGlzSW5kZXhQYXRoLFxuICAgIH0pO1xuICAgIHVua25vd25BdHRycy5wdXNoKC4uLnVua25vd25zLmF0dHJzKTtcbiAgICB1bmtub3duTm9kZXMucHVzaCguLi51bmtub3ducy5ub2Rlcyk7XG4gIH0gZWxzZSBpZiAoXy5pc0FycmF5KG5vZGVPYmopKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZE9iaiBvZiBub2RlT2JqKSB7XG4gICAgICBjb25zdCB7bm9kZXMsIGF0dHJzfSA9IHRyYW5zZm9ybU5vZGUoY2hpbGRPYmosIHBsYXRmb3JtLCB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBhZGRJbmRleFBhdGgsXG4gICAgICAgIHBhcmVudFBhdGgsXG4gICAgICB9KTtcbiAgICAgIHVua25vd25Ob2Rlcy5wdXNoKC4uLm5vZGVzKTtcbiAgICAgIHVua25vd25BdHRycy5wdXNoKC4uLmF0dHJzKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBub2RlczogXy51bmlxKHVua25vd25Ob2RlcyksXG4gICAgYXR0cnM6IF8udW5pcSh1bmtub3duQXR0cnMpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtQ2hpbGROb2RlcyhcbiAgbm9kZU9iaixcbiAgY2hpbGROb2RlTmFtZXMsXG4gIHBsYXRmb3JtLFxuICB7bWV0YWRhdGEsIGFkZEluZGV4UGF0aCwgcGFyZW50UGF0aH1cbikge1xuICBjb25zdCB1bmtub3duTm9kZXMgPSBbXTtcbiAgY29uc3QgdW5rbm93bkF0dHJzID0gW107XG4gIGZvciAoY29uc3Qgbm9kZU5hbWUgb2YgY2hpbGROb2RlTmFtZXMpIHtcbiAgICAvLyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBuYW1lIG9mIHRoaXMgY2hpbGQgbm9kZSwgcmVjdXJzZSBkb3duIGFuZCBtb2RpZnkgdGhlIHN1YnRyZWVcbiAgICBjb25zdCB7bm9kZXMsIGF0dHJzfSA9IHRyYW5zZm9ybU5vZGUobm9kZU9ialtub2RlTmFtZV0sIHBsYXRmb3JtLCB7XG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGFkZEluZGV4UGF0aCxcbiAgICAgIHBhcmVudFBhdGgsXG4gICAgfSk7XG4gICAgdW5rbm93bk5vZGVzLnB1c2goLi4ubm9kZXMpO1xuICAgIHVua25vd25BdHRycy5wdXNoKC4uLmF0dHJzKTtcblxuICAgIC8vIG5vdyB0cmFuc2xhdGUgdGhlIG5vZGUgbmFtZSBhbmQgcmVwbGFjZSB0aGUgc3VidHJlZSB3aXRoIHRoaXMgbm9kZVxuICAgIGNvbnN0IHVuaXZlcnNhbE5hbWUgPSBnZXRVbml2ZXJzYWxOb2RlTmFtZShub2RlTmFtZSwgcGxhdGZvcm0pO1xuICAgIGlmICh1bml2ZXJzYWxOYW1lID09PSBudWxsKSB7XG4gICAgICB1bmtub3duTm9kZXMucHVzaChub2RlTmFtZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzaW5jZSBtdWx0aXBsZSBjaGlsZCBub2RlIG5hbWVzIGNvdWxkIG1hcCB0byB0aGUgc2FtZSBuZXcgdHJhbnNmb3JtZWQgbm9kZSBuYW1lLCB3ZSBjYW4ndFxuICAgIC8vIHNpbXBseSBhc3NpZ24gbm9kZU9ialt1bml2ZXJzYWxOYW1lXSA9IG5vZGVPYmpbbm9kZU5hbWVdOyB3ZSBuZWVkIHRvIGJlIHNlbnNpdGl2ZSB0byB0aGVcbiAgICAvLyBzaXR1YXRpb24gd2hlcmUgdGhlIGVuZCByZXN1bHQgaXMgYW4gYXJyYXkgb2YgY2hpbGRyZW4gaGF2aW5nIHRoZSBzYW1lIG5vZGUgbmFtZVxuICAgIGlmIChub2RlT2JqW3VuaXZlcnNhbE5hbWVdKSB7XG4gICAgICAvLyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBub2RlIHdpdGggdGhlIHVuaXZlcnNhbCBuYW1lLCB0aGF0IG1lYW5zIHdlIGFyZSBtYXBwaW5nIGEgc2Vjb25kXG4gICAgICAvLyBvcmlnaW5hbCBub2RlIG5hbWUgdG8gdGhlIHNhbWUgdW5pdmVyc2FsIG5vZGUgbmFtZSwgc28gd2UganVzdCBwdXNoIGFsbCBpdHMgY2hpbGRyZW4gaW50b1xuICAgICAgLy8gdGhlIGxpc3RcbiAgICAgIG5vZGVPYmpbdW5pdmVyc2FsTmFtZV0ucHVzaCguLi5ub2RlT2JqW25vZGVOYW1lXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVPYmpbdW5pdmVyc2FsTmFtZV0gPSBub2RlT2JqW25vZGVOYW1lXTtcbiAgICB9XG4gICAgZGVsZXRlIG5vZGVPYmpbbm9kZU5hbWVdO1xuICB9XG4gIHJldHVybiB7bm9kZXM6IHVua25vd25Ob2RlcywgYXR0cnM6IHVua25vd25BdHRyc307XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1BdHRycyhub2RlT2JqLCBhdHRycywgcGxhdGZvcm0pIHtcbiAgY29uc3QgdW5rbm93bkF0dHJzID0gW107XG4gIGZvciAoY29uc3QgYXR0ciBvZiBhdHRycykge1xuICAgIGNvbnN0IGNsZWFuQXR0ciA9IGF0dHIuc3Vic3RyaW5nKDIpO1xuICAgIGlmIChSRU1PVkVfQVRUUlMuaW5jbHVkZXMoY2xlYW5BdHRyKSkge1xuICAgICAgZGVsZXRlIG5vZGVPYmpbYXR0cl07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdW5pdmVyc2FsQXR0ciA9IGdldFVuaXZlcnNhbEF0dHJOYW1lKGNsZWFuQXR0ciwgcGxhdGZvcm0pO1xuICAgIGlmICh1bml2ZXJzYWxBdHRyID09PSBudWxsKSB7XG4gICAgICB1bmtub3duQXR0cnMucHVzaChjbGVhbkF0dHIpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0F0dHIgPSBgJHtBVFRSX1BSRUZJWH0ke3VuaXZlcnNhbEF0dHJ9YDtcbiAgICBpZiAobmV3QXR0ciAhPT0gYXR0cikge1xuICAgICAgbm9kZU9ialtuZXdBdHRyXSA9IG5vZGVPYmpbYXR0cl07XG4gICAgICBkZWxldGUgbm9kZU9ialthdHRyXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVua25vd25BdHRycztcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsTUFBTUEsVUFBVSxHQUFHO0VBQ2pCQyxnQkFBZ0IsRUFBRSxLQUREO0VBRWpCQyxTQUFTLEVBQUU7QUFGTSxDQUFuQjtBQUtBLE1BQU1DLFFBQVEsR0FBRztFQUNmRixnQkFBZ0IsRUFBRSxLQURIO0VBRWZDLFNBQVMsRUFBRSxJQUZJO0VBR2ZFLE1BQU0sRUFBRTtBQUhPLENBQWpCO0FBTU8sTUFBTUMsV0FBVyxHQUFHLElBQXBCOztBQUNBLE1BQU1DLGVBQWUsR0FBSSxHQUFFRCxXQUFZLFdBQXZDOztBQUNBLE1BQU1FLFVBQVUsR0FBSSxHQUFFRixXQUFZLE9BQWxDOzs7QUFFUCxNQUFNRyxNQUFNLEdBQUlDLENBQUQsSUFBT0EsQ0FBQyxDQUFDQyxTQUFGLENBQVksQ0FBWixFQUFlLENBQWYsTUFBc0JMLFdBQTVDOztBQUNBLE1BQU1NLE1BQU0sR0FBSUYsQ0FBRCxJQUFPLENBQUNELE1BQU0sQ0FBQ0MsQ0FBRCxDQUE3Qjs7QUFFTyxTQUFTRyxrQkFBVCxDQUE0QkMsTUFBNUIsRUFBb0NDLFFBQXBDLEVBQThDO0VBQUNDLFFBQVEsR0FBRyxFQUFaO0VBQWdCQyxZQUFZLEdBQUc7QUFBL0IsSUFBd0MsRUFBdEYsRUFBMEY7RUFHL0ZILE1BQU0sR0FBR0EsTUFBTSxDQUFDSSxPQUFQLENBQWUsYUFBZixFQUE4Qix1QkFBOUIsQ0FBVDs7RUFDQSxNQUFNQyxNQUFNLEdBQUdDLHNCQUFBLENBQU9DLEtBQVAsQ0FBYVAsTUFBYixFQUFxQmIsVUFBckIsQ0FBZjs7RUFDQSxNQUFNcUIsUUFBUSxHQUFHQyxhQUFhLENBQUNKLE1BQUQsRUFBU0osUUFBVCxFQUFtQjtJQUMvQ0MsUUFEK0M7SUFFL0NDLFlBRitDO0lBRy9DTyxVQUFVLEVBQUU7RUFIbUMsQ0FBbkIsQ0FBOUI7RUFLQSxNQUFNQyxPQUFPLEdBQUcsSUFBSUMsd0JBQUosQ0FBY3RCLFFBQWQsQ0FBaEI7RUFDQSxJQUFJdUIsY0FBYyxHQUFHRixPQUFPLENBQUNKLEtBQVIsQ0FBY0YsTUFBZCxFQUFzQlMsSUFBdEIsRUFBckI7RUFDQUQsY0FBYyxHQUFJLDJDQUEwQ0EsY0FBZSxFQUEzRTtFQUNBLE9BQU87SUFBQ0UsR0FBRyxFQUFFRixjQUFOO0lBQXNCTDtFQUF0QixDQUFQO0FBQ0Q7O0FBRUQsU0FBU1EsZ0JBQVQsQ0FBMEJDLE9BQTFCLEVBQW1DQyxJQUFuQyxFQUF5Q2pCLFFBQXpDLEVBQW1EO0VBQ2pELEtBQUssTUFBTWtCLGNBQVgsSUFBNkJDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSixPQUFaLENBQTdCLEVBQW1EO0lBQUE7O0lBQ2pELE1BQU1LLFdBQVcsNEJBQUdMLE9BQU8sQ0FBQ0UsY0FBRCxDQUFWLDBEQUFHLHNCQUEwQmxCLFFBQTFCLENBQXBCOztJQUNBLElBQUlzQixlQUFBLENBQUVDLE9BQUYsQ0FBVUYsV0FBVixLQUEwQkEsV0FBVyxDQUFDRyxRQUFaLENBQXFCUCxJQUFyQixDQUE5QixFQUEwRDtNQUN4RCxPQUFPQyxjQUFQO0lBQ0Q7O0lBQ0QsSUFBSUcsV0FBVyxLQUFLSixJQUFwQixFQUEwQjtNQUN4QixPQUFPQyxjQUFQO0lBQ0Q7RUFDRjs7RUFDRCxPQUFPLElBQVA7QUFDRDs7QUFFTSxTQUFTTyxvQkFBVCxDQUE4QkMsUUFBOUIsRUFBd0MxQixRQUF4QyxFQUFrRDtFQUN2RCxPQUFPZSxnQkFBZ0IsQ0FBQ1ksZ0JBQUQsRUFBV0QsUUFBWCxFQUFxQjFCLFFBQXJCLENBQXZCO0FBQ0Q7O0FBRU0sU0FBUzRCLG9CQUFULENBQThCQyxRQUE5QixFQUF3QzdCLFFBQXhDLEVBQWtEO0VBQ3ZELE9BQU9lLGdCQUFnQixDQUFDZSxpQkFBRCxFQUFXRCxRQUFYLEVBQXFCN0IsUUFBckIsQ0FBdkI7QUFDRDs7QUFFTSxTQUFTUSxhQUFULENBQXVCdUIsT0FBdkIsRUFBZ0MvQixRQUFoQyxFQUEwQztFQUFDQyxRQUFEO0VBQVdDLFlBQVg7RUFBeUJPO0FBQXpCLENBQTFDLEVBQWdGO0VBQ3JGLE1BQU11QixZQUFZLEdBQUcsRUFBckI7RUFDQSxNQUFNQyxZQUFZLEdBQUcsRUFBckI7O0VBQ0EsSUFBSVgsZUFBQSxDQUFFWSxhQUFGLENBQWdCSCxPQUFoQixDQUFKLEVBQThCO0lBQUE7O0lBQzVCLE1BQU1YLElBQUksR0FBR0QsTUFBTSxDQUFDQyxJQUFQLENBQVlXLE9BQVosQ0FBYjtJQUNBLE1BQU1JLGNBQWMsR0FBR2YsSUFBSSxDQUFDZ0IsTUFBTCxDQUFZdkMsTUFBWixDQUF2QjtJQUNBLE1BQU13QyxLQUFLLEdBQUdqQixJQUFJLENBQUNnQixNQUFMLENBQVkxQyxNQUFaLENBQWQ7SUFDQSxJQUFJNEMsYUFBYSxHQUFHN0IsVUFBcEI7O0lBRUEsSUFBSTRCLEtBQUssQ0FBQ0UsTUFBTixJQUFnQnJDLFlBQXBCLEVBQWtDO01BQ2hDLElBQUksQ0FBQ21DLEtBQUssQ0FBQ2IsUUFBTixDQUFlL0IsVUFBZixDQUFMLEVBQWlDO1FBQy9CLE1BQU0sSUFBSStDLEtBQUosQ0FBVyxpRUFBWCxDQUFOO01BQ0Q7O01BRURGLGFBQWEsR0FBSSxHQUFFN0IsVUFBVyxJQUFHc0IsT0FBTyxDQUFDdEMsVUFBRCxDQUFhLEVBQXJEO01BQ0FzQyxPQUFPLENBQUN2QyxlQUFELENBQVAsR0FBMkI4QyxhQUEzQjtJQUNEOztJQUVELHdCQUFBRyxxQkFBQSxDQUFXekMsUUFBWCxvRkFBQXlDLHFCQUFBLEVBQXVCVixPQUF2QixFQUFnQzlCLFFBQWhDO0lBQ0FnQyxZQUFZLENBQUNTLElBQWIsQ0FBa0IsR0FBR0MsY0FBYyxDQUFDWixPQUFELEVBQVVNLEtBQVYsRUFBaUJyQyxRQUFqQixDQUFuQztJQUNBLE1BQU1PLFFBQVEsR0FBR3FDLG1CQUFtQixDQUFDYixPQUFELEVBQVVJLGNBQVYsRUFBMEJuQyxRQUExQixFQUFvQztNQUN0RUMsUUFEc0U7TUFFdEVDLFlBRnNFO01BR3RFTyxVQUFVLEVBQUU2QjtJQUgwRCxDQUFwQyxDQUFwQztJQUtBTCxZQUFZLENBQUNTLElBQWIsQ0FBa0IsR0FBR25DLFFBQVEsQ0FBQzhCLEtBQTlCO0lBQ0FMLFlBQVksQ0FBQ1UsSUFBYixDQUFrQixHQUFHbkMsUUFBUSxDQUFDc0MsS0FBOUI7RUFDRCxDQXhCRCxNQXdCTyxJQUFJdkIsZUFBQSxDQUFFQyxPQUFGLENBQVVRLE9BQVYsQ0FBSixFQUF3QjtJQUM3QixLQUFLLE1BQU1lLFFBQVgsSUFBdUJmLE9BQXZCLEVBQWdDO01BQzlCLE1BQU07UUFBQ2MsS0FBRDtRQUFRUjtNQUFSLElBQWlCN0IsYUFBYSxDQUFDc0MsUUFBRCxFQUFXOUMsUUFBWCxFQUFxQjtRQUN2REMsUUFEdUQ7UUFFdkRDLFlBRnVEO1FBR3ZETztNQUh1RCxDQUFyQixDQUFwQztNQUtBdUIsWUFBWSxDQUFDVSxJQUFiLENBQWtCLEdBQUdHLEtBQXJCO01BQ0FaLFlBQVksQ0FBQ1MsSUFBYixDQUFrQixHQUFHTCxLQUFyQjtJQUNEO0VBQ0Y7O0VBQ0QsT0FBTztJQUNMUSxLQUFLLEVBQUV2QixlQUFBLENBQUV5QixJQUFGLENBQU9mLFlBQVAsQ0FERjtJQUVMSyxLQUFLLEVBQUVmLGVBQUEsQ0FBRXlCLElBQUYsQ0FBT2QsWUFBUDtFQUZGLENBQVA7QUFJRDs7QUFFTSxTQUFTVyxtQkFBVCxDQUNMYixPQURLLEVBRUxJLGNBRkssRUFHTG5DLFFBSEssRUFJTDtFQUFDQyxRQUFEO0VBQVdDLFlBQVg7RUFBeUJPO0FBQXpCLENBSkssRUFLTDtFQUNBLE1BQU11QixZQUFZLEdBQUcsRUFBckI7RUFDQSxNQUFNQyxZQUFZLEdBQUcsRUFBckI7O0VBQ0EsS0FBSyxNQUFNUCxRQUFYLElBQXVCUyxjQUF2QixFQUF1QztJQUVyQyxNQUFNO01BQUNVLEtBQUQ7TUFBUVI7SUFBUixJQUFpQjdCLGFBQWEsQ0FBQ3VCLE9BQU8sQ0FBQ0wsUUFBRCxDQUFSLEVBQW9CMUIsUUFBcEIsRUFBOEI7TUFDaEVDLFFBRGdFO01BRWhFQyxZQUZnRTtNQUdoRU87SUFIZ0UsQ0FBOUIsQ0FBcEM7SUFLQXVCLFlBQVksQ0FBQ1UsSUFBYixDQUFrQixHQUFHRyxLQUFyQjtJQUNBWixZQUFZLENBQUNTLElBQWIsQ0FBa0IsR0FBR0wsS0FBckI7SUFHQSxNQUFNVyxhQUFhLEdBQUd2QixvQkFBb0IsQ0FBQ0MsUUFBRCxFQUFXMUIsUUFBWCxDQUExQzs7SUFDQSxJQUFJZ0QsYUFBYSxLQUFLLElBQXRCLEVBQTRCO01BQzFCaEIsWUFBWSxDQUFDVSxJQUFiLENBQWtCaEIsUUFBbEI7TUFDQTtJQUNEOztJQUtELElBQUlLLE9BQU8sQ0FBQ2lCLGFBQUQsQ0FBWCxFQUE0QjtNQUkxQmpCLE9BQU8sQ0FBQ2lCLGFBQUQsQ0FBUCxDQUF1Qk4sSUFBdkIsQ0FBNEIsR0FBR1gsT0FBTyxDQUFDTCxRQUFELENBQXRDO0lBQ0QsQ0FMRCxNQUtPO01BQ0xLLE9BQU8sQ0FBQ2lCLGFBQUQsQ0FBUCxHQUF5QmpCLE9BQU8sQ0FBQ0wsUUFBRCxDQUFoQztJQUNEOztJQUNELE9BQU9LLE9BQU8sQ0FBQ0wsUUFBRCxDQUFkO0VBQ0Q7O0VBQ0QsT0FBTztJQUFDbUIsS0FBSyxFQUFFYixZQUFSO0lBQXNCSyxLQUFLLEVBQUVKO0VBQTdCLENBQVA7QUFDRDs7QUFFTSxTQUFTVSxjQUFULENBQXdCWixPQUF4QixFQUFpQ00sS0FBakMsRUFBd0NyQyxRQUF4QyxFQUFrRDtFQUN2RCxNQUFNaUMsWUFBWSxHQUFHLEVBQXJCOztFQUNBLEtBQUssTUFBTWdCLElBQVgsSUFBbUJaLEtBQW5CLEVBQTBCO0lBQ3hCLE1BQU1hLFNBQVMsR0FBR0QsSUFBSSxDQUFDckQsU0FBTCxDQUFlLENBQWYsQ0FBbEI7O0lBQ0EsSUFBSXVELHFCQUFBLENBQWEzQixRQUFiLENBQXNCMEIsU0FBdEIsQ0FBSixFQUFzQztNQUNwQyxPQUFPbkIsT0FBTyxDQUFDa0IsSUFBRCxDQUFkO01BQ0E7SUFDRDs7SUFDRCxNQUFNRyxhQUFhLEdBQUd4QixvQkFBb0IsQ0FBQ3NCLFNBQUQsRUFBWWxELFFBQVosQ0FBMUM7O0lBQ0EsSUFBSW9ELGFBQWEsS0FBSyxJQUF0QixFQUE0QjtNQUMxQm5CLFlBQVksQ0FBQ1MsSUFBYixDQUFrQlEsU0FBbEI7TUFDQTtJQUNEOztJQUNELE1BQU1HLE9BQU8sR0FBSSxHQUFFOUQsV0FBWSxHQUFFNkQsYUFBYyxFQUEvQzs7SUFDQSxJQUFJQyxPQUFPLEtBQUtKLElBQWhCLEVBQXNCO01BQ3BCbEIsT0FBTyxDQUFDc0IsT0FBRCxDQUFQLEdBQW1CdEIsT0FBTyxDQUFDa0IsSUFBRCxDQUExQjtNQUNBLE9BQU9sQixPQUFPLENBQUNrQixJQUFELENBQWQ7SUFDRDtFQUNGOztFQUNELE9BQU9oQixZQUFQO0FBQ0QifQ==
183
+ exports.transformAttrs = transformAttrs;
184
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../lib/source.js"],"names":[],"mappings":"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"}