appium 2.0.0-beta.43 → 2.0.0-beta.45
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.
- package/build/lib/appium.d.ts +137 -15
- package/build/lib/appium.d.ts.map +1 -1
- package/build/lib/appium.js +5 -5
- package/build/lib/appium.js.map +1 -0
- package/build/lib/cli/args.js +3 -3
- package/build/lib/cli/args.js.map +1 -0
- package/build/lib/cli/driver-command.js +3 -3
- package/build/lib/cli/driver-command.js.map +1 -0
- package/build/lib/cli/extension-command.d.ts.map +1 -1
- package/build/lib/cli/extension-command.js +4 -4
- package/build/lib/cli/extension-command.js.map +1 -0
- package/build/lib/cli/extension.js +3 -3
- package/build/lib/cli/extension.js.map +1 -0
- package/build/lib/cli/parser.js +3 -3
- package/build/lib/cli/parser.js.map +1 -0
- package/build/lib/cli/plugin-command.js +3 -3
- package/build/lib/cli/plugin-command.js.map +1 -0
- package/build/lib/cli/utils.js +3 -3
- package/build/lib/cli/utils.js.map +1 -0
- package/build/lib/config-file.js +3 -3
- package/build/lib/config-file.js.map +1 -0
- package/build/lib/config.js +3 -3
- package/build/lib/config.js.map +1 -0
- package/build/lib/constants.js +3 -3
- package/build/lib/constants.js.map +1 -0
- package/build/lib/extension/driver-config.d.ts +3 -2
- package/build/lib/extension/driver-config.d.ts.map +1 -1
- package/build/lib/extension/driver-config.js +3 -3
- package/build/lib/extension/driver-config.js.map +1 -0
- package/build/lib/extension/extension-config.js +3 -3
- package/build/lib/extension/extension-config.js.map +1 -0
- package/build/lib/extension/index.js +3 -3
- package/build/lib/extension/index.js.map +1 -0
- package/build/lib/extension/manifest.d.ts +1 -2
- package/build/lib/extension/manifest.d.ts.map +1 -1
- package/build/lib/extension/manifest.js +35 -30
- package/build/lib/extension/manifest.js.map +1 -0
- package/build/lib/extension/package-changed.js +3 -3
- package/build/lib/extension/package-changed.js.map +1 -0
- package/build/lib/extension/plugin-config.js +3 -3
- package/build/lib/extension/plugin-config.js.map +1 -0
- package/build/lib/grid-register.js +3 -3
- package/build/lib/grid-register.js.map +1 -0
- package/build/lib/logger.js.map +1 -0
- package/build/lib/logsink.js +3 -3
- package/build/lib/logsink.js.map +1 -0
- package/build/lib/main.d.ts.map +1 -1
- package/build/lib/main.js +4 -3
- package/build/lib/main.js.map +1 -0
- package/build/lib/schema/arg-spec.js +3 -3
- package/build/lib/schema/arg-spec.js.map +1 -0
- package/build/lib/schema/cli-args.js +3 -3
- package/build/lib/schema/cli-args.js.map +1 -0
- package/build/lib/schema/cli-transformers.d.ts +1 -1
- package/build/lib/schema/cli-transformers.d.ts.map +1 -1
- package/build/lib/schema/cli-transformers.js +23 -18
- package/build/lib/schema/cli-transformers.js.map +1 -0
- package/build/lib/schema/index.js.map +1 -0
- package/build/lib/schema/keywords.js.map +1 -0
- package/build/lib/schema/schema.js +3 -3
- package/build/lib/schema/schema.js.map +1 -0
- package/build/lib/utils.d.ts +296 -27
- package/build/lib/utils.d.ts.map +1 -1
- package/build/lib/utils.js +60 -27
- package/build/lib/utils.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/lib/appium.js +32 -18
- package/lib/cli/extension-command.js +2 -1
- package/lib/extension/driver-config.js +2 -1
- package/lib/extension/manifest.js +49 -32
- package/lib/main.js +3 -1
- package/lib/schema/cli-transformers.js +27 -23
- package/lib/utils.js +143 -62
- package/package.json +17 -18
- package/test.d.ts +0 -7
- package/test.js +0 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["loadExtensions","appiumHome","manifest","Manifest","getInstance","read","driverConfig","DriverConfig","create","pluginConfig","PluginConfig","B","all","validate","getActivePlugins","usePlugins","Map","_","compact","Object","keys","installedExtensions","filter","pluginName","includes","length","USE_ALL_PLUGINS","map","log","info","PluginClass","require","err","error","message","debug","stack","getActiveDrivers","useDrivers","driverName","DriverClass"],"sources":["../../../lib/extension/index.js"],"sourcesContent":["import _ from 'lodash';\nimport {USE_ALL_PLUGINS} from '../constants';\nimport log from '../logger';\nimport {DriverConfig} from './driver-config';\nimport {Manifest} from './manifest';\nimport {PluginConfig} from './plugin-config';\nimport B from 'bluebird';\n\n/**\n * Loads extensions and creates `ExtensionConfig` instances.\n *\n * - Reads the manifest file, creating if necessary\n * - Using the parsed extension data, creates/gets the `ExtensionConfig` subclass instances\n * - Returns these instances\n *\n * If `appiumHome` is needed, use `resolveAppiumHome` from the `env` module in `@appium/support`.\n * @param {string} appiumHome\n * @returns {Promise<ExtensionConfigs>}\n */\nexport async function loadExtensions(appiumHome) {\n const manifest = Manifest.getInstance(appiumHome);\n await manifest.read();\n const driverConfig = DriverConfig.getInstance(manifest) ?? DriverConfig.create(manifest);\n const pluginConfig = PluginConfig.getInstance(manifest) ?? PluginConfig.create(manifest);\n\n await B.all([driverConfig.validate(), pluginConfig.validate()]);\n return {driverConfig, pluginConfig};\n}\n\n/**\n * Find any plugin name which has been installed, and which has been requested for activation by\n * using the --use-plugins flag, and turn each one into its class, so we can send them as objects\n * to the server init. We also want to send/assign them to the umbrella driver so it can use them\n * to wrap command execution\n *\n * @param {import('./plugin-config').PluginConfig} pluginConfig - a plugin extension config\n * @param {string[]} usePlugins\n * @returns {PluginNameMap} Mapping of PluginClass to name\n */\nexport function getActivePlugins(pluginConfig, usePlugins = []) {\n return new Map(\n _.compact(\n Object.keys(pluginConfig.installedExtensions)\n .filter(\n (pluginName) =>\n _.includes(usePlugins, pluginName) ||\n (usePlugins.length === 1 && usePlugins[0] === USE_ALL_PLUGINS)\n )\n .map((pluginName) => {\n try {\n log.info(`Attempting to load plugin ${pluginName}...`);\n const PluginClass = pluginConfig.require(pluginName);\n return [PluginClass, pluginName];\n } catch (err) {\n log.error(\n `Could not load plugin '${pluginName}', so it will not be available. Error ` +\n `in loading the plugin was: ${err.message}`\n );\n log.debug(err.stack);\n }\n })\n )\n );\n}\n\n/**\n * Find any driver name which has been installed, and turn each one into its class, so we can send\n * them as objects to the server init in case they need to add methods/routes or update the server.\n * If the --drivers flag was given, this method only loads the given drivers.\n *\n * @param {import('./driver-config').DriverConfig} driverConfig - a driver extension config\n * @param {string[]} [useDrivers] - optional list of drivers to load\n * @returns {DriverNameMap}\n */\nexport function getActiveDrivers(driverConfig, useDrivers = []) {\n return new Map(\n _.compact(\n Object.keys(driverConfig.installedExtensions)\n .filter((driverName) => _.includes(useDrivers, driverName) || useDrivers.length === 0)\n .map((driverName) => {\n try {\n log.info(`Attempting to load driver ${driverName}...`);\n const DriverClass = driverConfig.require(driverName);\n return [DriverClass, driverName];\n } catch (err) {\n log.error(\n `Could not load driver '${driverName}', so it will not be available. Error ` +\n `in loading the driver was: ${err.message}`\n );\n log.debug(err.stack);\n }\n })\n )\n );\n}\n\n/**\n * A mapping of {@linkcode PluginClass} classes to their names.\n * @typedef {Map<PluginClass,string>} PluginNameMap\n */\n\n/**\n * A mapping of {@linkcode DriverClass} classes to their names.\n * @typedef {Map<DriverClass,string>} DriverNameMap\n */\n\n/**\n * @typedef {import('@appium/types').PluginClass} PluginClass\n * @typedef {import('@appium/types').DriverClass} DriverClass\n */\n\n/**\n * @typedef ExtensionConfigs\n * @property {import('./driver-config').DriverConfig} driverConfig\n * @property {import('./plugin-config').PluginConfig} pluginConfig\n */\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAaO,eAAeA,cAAf,CAA8BC,UAA9B,EAA0C;EAC/C,MAAMC,QAAQ,GAAGC,kBAAA,CAASC,WAAT,CAAqBH,UAArB,CAAjB;;EACA,MAAMC,QAAQ,CAACG,IAAT,EAAN;;EACA,MAAMC,YAAY,GAAGC,0BAAA,CAAaH,WAAb,CAAyBF,QAAzB,KAAsCK,0BAAA,CAAaC,MAAb,CAAoBN,QAApB,CAA3D;;EACA,MAAMO,YAAY,GAAGC,0BAAA,CAAaN,WAAb,CAAyBF,QAAzB,KAAsCQ,0BAAA,CAAaF,MAAb,CAAoBN,QAApB,CAA3D;;EAEA,MAAMS,iBAAA,CAAEC,GAAF,CAAM,CAACN,YAAY,CAACO,QAAb,EAAD,EAA0BJ,YAAY,CAACI,QAAb,EAA1B,CAAN,CAAN;EACA,OAAO;IAACP,YAAD;IAAeG;EAAf,CAAP;AACD;;AAYM,SAASK,gBAAT,CAA0BL,YAA1B,EAAwCM,UAAU,GAAG,EAArD,EAAyD;EAC9D,OAAO,IAAIC,GAAJ,CACLC,eAAA,CAAEC,OAAF,CACEC,MAAM,CAACC,IAAP,CAAYX,YAAY,CAACY,mBAAzB,EACGC,MADH,CAEKC,UAAD,IACEN,eAAA,CAAEO,QAAF,CAAWT,UAAX,EAAuBQ,UAAvB,KACCR,UAAU,CAACU,MAAX,KAAsB,CAAtB,IAA2BV,UAAU,CAAC,CAAD,CAAV,KAAkBW,0BAJpD,EAMGC,GANH,CAMQJ,UAAD,IAAgB;IACnB,IAAI;MACFK,eAAA,CAAIC,IAAJ,CAAU,6BAA4BN,UAAW,KAAjD;;MACA,MAAMO,WAAW,GAAGrB,YAAY,CAACsB,OAAb,CAAqBR,UAArB,CAApB;;MACA,OAAO,CAACO,WAAD,EAAcP,UAAd,CAAP;IACD,CAJD,CAIE,OAAOS,GAAP,EAAY;MACZJ,eAAA,CAAIK,KAAJ,CACG,0BAAyBV,UAAW,wCAArC,GACG,8BAA6BS,GAAG,CAACE,OAAQ,EAF9C;;MAIAN,eAAA,CAAIO,KAAJ,CAAUH,GAAG,CAACI,KAAd;IACD;EACF,CAlBH,CADF,CADK,CAAP;AAuBD;;AAWM,SAASC,gBAAT,CAA0B/B,YAA1B,EAAwCgC,UAAU,GAAG,EAArD,EAAyD;EAC9D,OAAO,IAAItB,GAAJ,CACLC,eAAA,CAAEC,OAAF,CACEC,MAAM,CAACC,IAAP,CAAYd,YAAY,CAACe,mBAAzB,EACGC,MADH,CACWiB,UAAD,IAAgBtB,eAAA,CAAEO,QAAF,CAAWc,UAAX,EAAuBC,UAAvB,KAAsCD,UAAU,CAACb,MAAX,KAAsB,CADtF,EAEGE,GAFH,CAEQY,UAAD,IAAgB;IACnB,IAAI;MACFX,eAAA,CAAIC,IAAJ,CAAU,6BAA4BU,UAAW,KAAjD;;MACA,MAAMC,WAAW,GAAGlC,YAAY,CAACyB,OAAb,CAAqBQ,UAArB,CAApB;;MACA,OAAO,CAACC,WAAD,EAAcD,UAAd,CAAP;IACD,CAJD,CAIE,OAAOP,GAAP,EAAY;MACZJ,eAAA,CAAIK,KAAJ,CACG,0BAAyBM,UAAW,wCAArC,GACG,8BAA6BP,GAAG,CAACE,OAAQ,EAF9C;;MAIAN,eAAA,CAAIO,KAAJ,CAAUH,GAAG,CAACI,KAAd;IACD;EACF,CAdH,CADF,CADK,CAAP;AAmBD"}
|
|
@@ -64,10 +64,9 @@ export class Manifest {
|
|
|
64
64
|
private _reading;
|
|
65
65
|
/**
|
|
66
66
|
* Searches `APPIUM_HOME` for installed extensions and adds them to the manifest.
|
|
67
|
-
* @param {SyncWithInstalledExtensionsOpts} opts
|
|
68
67
|
* @returns {Promise<boolean>} `true` if any extensions were added, `false` otherwise.
|
|
69
68
|
*/
|
|
70
|
-
syncWithInstalledExtensions(
|
|
69
|
+
syncWithInstalledExtensions(): Promise<boolean>;
|
|
71
70
|
/**
|
|
72
71
|
* Returns `true` if driver with name `name` is registered.
|
|
73
72
|
* @param {string} name - Driver name
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../lib/extension/manifest.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../lib/extension/manifest.js"],"names":[],"mappings":"AAoFA;;;;GAIG;AACH;IA4DE;;;;;;OAMG;IACH,yEAEG;IArBH;;;;;;OAMG;IACH,sBAGC;IAzDD;;;;;;OAMG;IACH,cAAM;IAEN;;;;OAIG;IACH,oBAAY;IAEZ;;;;OAIG;IACH,eAHU,MAAM,CAGF;IAEd;;;;;;;;;OASG;IACH,iBAAS;IAET;;;;;;;;;OASG;IACH,iBAAS;IAyBT;;;OAGG;IACH,+BAFa,QAAQ,OAAO,CAAC,CAqD5B;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;;OAQG;IACH,0HAHW,MAAM,GACJ,OAAO,CAuCnB;IAED;;;;;;;;;;OAUG;IACH,mGAJW,MAAM,2DAQhB;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;;;OAMG;IACH,oHAEC;IAED;;;;;;;;;OASG;IACH,QAFa,QAAQ,YAAY,CAAC,CAuDjC;IAED;;;;;;OAMG;IACH,yBAaC;IAED;;;;;;;OAOG;IACH,SAFa,QAAQ,OAAO,CAAC,CAgC5B;CACF;;;;yBAIY,OAAO,eAAe,EAAE,UAAU;;;;yBAKlC,OAAO,eAAe,EAAE,UAAU;;;;;;;2BASlC,OAAO,cAAc,EAAE,YAAY;+BACnC,OAAO,cAAc,EAAE,gBAAgB;gCAKvC,OAAO,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;6BAKxC,OAAO,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;2BAKrC,OAAO,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;;;;4BAKnC,OAAO,eAAe,EAAE,aAAa"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -9,6 +7,10 @@ exports.Manifest = void 0;
|
|
|
9
7
|
|
|
10
8
|
require("source-map-support/register");
|
|
11
9
|
|
|
10
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
11
|
+
|
|
12
|
+
var _glob = _interopRequireDefault(require("glob"));
|
|
13
|
+
|
|
12
14
|
var _support = require("@appium/support");
|
|
13
15
|
|
|
14
16
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
@@ -25,11 +27,8 @@ var _extensionConfig = require("./extension-config");
|
|
|
25
27
|
|
|
26
28
|
var _packageChanged = require("./package-changed");
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
depthLimit: DEFAULT_SEARCH_DEPTH,
|
|
31
|
-
filter: filepath => !_path.default.basename(filepath).startsWith('.')
|
|
32
|
-
});
|
|
30
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
+
|
|
33
32
|
const CONFIG_SCHEMA_REV = 2;
|
|
34
33
|
const CONFIG_DATA_DRIVER_KEY = `${_constants.DRIVER_TYPE}s`;
|
|
35
34
|
const CONFIG_DATA_PLUGIN_KEY = `${_constants.PLUGIN_TYPE}s`;
|
|
@@ -67,31 +66,37 @@ class Manifest {
|
|
|
67
66
|
return new Manifest(appiumHome);
|
|
68
67
|
});
|
|
69
68
|
|
|
70
|
-
async syncWithInstalledExtensions({
|
|
71
|
-
depthLimit = DEFAULT_SEARCH_DEPTH
|
|
72
|
-
} = {}) {
|
|
73
|
-
const walkOpts = _lodash.default.defaults({
|
|
74
|
-
depthLimit
|
|
75
|
-
}, DEFAULT_FIND_EXTENSIONS_OPTS);
|
|
76
|
-
|
|
69
|
+
async syncWithInstalledExtensions() {
|
|
77
70
|
let didChange = false;
|
|
78
71
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
72
|
+
const onMatch = async filepath => {
|
|
73
|
+
try {
|
|
74
|
+
const pkg = JSON.parse(await _support.fs.readFile(filepath, 'utf8'));
|
|
75
|
+
|
|
76
|
+
if (isDriver(pkg) || isPlugin(pkg)) {
|
|
77
|
+
const changed = this.addExtensionFromPackage(pkg, filepath);
|
|
78
|
+
didChange = didChange || changed;
|
|
79
|
+
}
|
|
80
|
+
} catch {}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const queue = [onMatch(_path.default.join(this._appiumHome, 'package.json'))];
|
|
84
|
+
await new _bluebird.default((resolve, reject) => {
|
|
85
|
+
(0, _glob.default)('node_modules/{*,@*/*}/package.json', {
|
|
86
|
+
cwd: this._appiumHome,
|
|
87
|
+
silent: true,
|
|
88
|
+
absolute: true
|
|
89
|
+
}, err => {
|
|
90
|
+
if (err) {
|
|
91
|
+
reject(err);
|
|
92
|
+
}
|
|
94
93
|
|
|
94
|
+
resolve();
|
|
95
|
+
}).on('error', reject).on('match', filepath => {
|
|
96
|
+
queue.push(onMatch(filepath));
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
await _bluebird.default.all(queue);
|
|
95
100
|
return didChange;
|
|
96
101
|
}
|
|
97
102
|
|
|
@@ -253,4 +258,4 @@ class Manifest {
|
|
|
253
258
|
}
|
|
254
259
|
|
|
255
260
|
exports.Manifest = Manifest;
|
|
256
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NFQVJDSF9ERVBUSCIsIkRFRkFVTFRfRklORF9FWFRFTlNJT05TX09QVFMiLCJPYmplY3QiLCJmcmVlemUiLCJkZXB0aExpbWl0IiwiZmlsdGVyIiwiZmlsZXBhdGgiLCJwYXRoIiwiYmFzZW5hbWUiLCJzdGFydHNXaXRoIiwiQ09ORklHX1NDSEVNQV9SRVYiLCJDT05GSUdfREFUQV9EUklWRVJfS0VZIiwiRFJJVkVSX1RZUEUiLCJDT05GSUdfREFUQV9QTFVHSU5fS0VZIiwiUExVR0lOX1RZUEUiLCJJTklUSUFMX01BTklGRVNUX0RBVEEiLCJzY2hlbWFSZXYiLCJpc0V4dGVuc2lvbiIsInZhbHVlIiwiXyIsImlzUGxhaW5PYmplY3QiLCJhcHBpdW0iLCJpc1N0cmluZyIsIm5hbWUiLCJ2ZXJzaW9uIiwiaXNEcml2ZXIiLCJnZXQiLCJpc0FycmF5IiwiaXNQbHVnaW4iLCJNYW5pZmVzdCIsIl9kYXRhIiwiX2FwcGl1bUhvbWUiLCJfbWFuaWZlc3RQYXRoIiwiX3dyaXRpbmciLCJfcmVhZGluZyIsImNvbnN0cnVjdG9yIiwiYXBwaXVtSG9tZSIsImNsb25lRGVlcCIsImdldEluc3RhbmNlIiwibWVtb2l6ZSIsIl9nZXRJbnN0YW5jZSIsInN5bmNXaXRoSW5zdGFsbGVkRXh0ZW5zaW9ucyIsIndhbGtPcHRzIiwiZGVmYXVsdHMiLCJkaWRDaGFuZ2UiLCJzdGF0cyIsImZzIiwid2FsayIsImlzRGlyZWN0b3J5IiwicGtnIiwiZW52IiwicmVhZFBhY2thZ2VJbkRpciIsImFkZGVkIiwiYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2UiLCJqb2luIiwiaGFzRHJpdmVyIiwiQm9vbGVhbiIsImRyaXZlcnMiLCJoYXNQbHVnaW4iLCJwbHVnaW5zIiwicGtnSnNvbiIsInBrZ1BhdGgiLCJleHRlbnNpb25QYXRoIiwiZGlybmFtZSIsImludGVybmFsIiwicGtnTmFtZSIsImFwcGl1bVZlcnNpb24iLCJwZWVyRGVwZW5kZW5jaWVzIiwiaW5zdGFsbFR5cGUiLCJJTlNUQUxMX1RZUEVfTlBNIiwiaW5zdGFsbFNwZWMiLCJkcml2ZXJOYW1lIiwiYWRkRXh0ZW5zaW9uIiwib21pdCIsInBsdWdpbk5hbWUiLCJUeXBlRXJyb3IiLCJleHRUeXBlIiwiZXh0TmFtZSIsImV4dERhdGEiLCJkYXRhIiwiY2xvbmUiLCJtYW5pZmVzdFBhdGgiLCJnZXRFeHRlbnNpb25EYXRhIiwicmVhZCIsImlzTmV3RmlsZSIsIl9zZXRNYW5pZmVzdFBhdGgiLCJsb2ciLCJkZWJ1ZyIsInlhbWwiLCJyZWFkRmlsZSIsIllBTUwiLCJwYXJzZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJlcnIiLCJjb2RlIiwiRXJyb3IiLCJtZXNzYWdlIiwiaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQiLCJoYXNBcHBpdW1EZXBlbmRlbmN5IiwicGFja2FnZURpZENoYW5nZSIsIndyaXRlIiwidW5kZWZpbmVkIiwicmVzb2x2ZU1hbmlmZXN0UGF0aCIsInJlbGF0aXZlIiwibWtkaXJwIiwid3JpdGVGaWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2V4dGVuc2lvbi9tYW5pZmVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZHVsZSBjb250YWluaW5nIHtAbGluayBNYW5pZmVzdH0gd2hpY2ggaGFuZGxlcyByZWFkaW5nICYgd3JpdGluZyBvZiBleHRlbnNpb24gY29uZmlnIGZpbGVzLlxuICovXG5cbmltcG9ydCB7ZW52LCBmc30gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBZQU1MIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHtEUklWRVJfVFlQRSwgUExVR0lOX1RZUEV9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQge0lOU1RBTExfVFlQRV9OUE19IGZyb20gJy4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge3BhY2thZ2VEaWRDaGFuZ2V9IGZyb20gJy4vcGFja2FnZS1jaGFuZ2VkJztcblxuLyoqXG4gKiBEZWZhdWx0IGRlcHRoIHRvIHNlYXJjaCBpbiBkaXJlY3RvcnkgdHJlZSBmb3Igd2hhdGV2ZXIgaXQgaXMgd2UncmUgbG9va2luZyBmb3IuXG4gKlxuICogSXQncyA0IGJlY2F1c2Ugc21hbGxlciBudW1iZXJzIGRpZG4ndCB3b3JrLlxuICovXG5jb25zdCBERUZBVUxUX1NFQVJDSF9ERVBUSCA9IDQ7XG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIGZvciB7QGxpbmsgZmluZEV4dGVuc2lvbnN9LlxuICogQHR5cGUge1JlYWRvbmx5PGltcG9ydCgna2xhdycpLk9wdGlvbnM+fVxuICovXG5jb25zdCBERUZBVUxUX0ZJTkRfRVhURU5TSU9OU19PUFRTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGRlcHRoTGltaXQ6IERFRkFVTFRfU0VBUkNIX0RFUFRILFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmaWx0ZXI6IChmaWxlcGF0aCkgPT4gIXBhdGguYmFzZW5hbWUoZmlsZXBhdGgpLnN0YXJ0c1dpdGgoJy4nKSxcbn0pO1xuXG4vKipcbiAqIEN1cnJlbnQgY29uZmlndXJhdGlvbiBzY2hlbWEgcmV2aXNpb24hXG4gKi9cbmNvbnN0IENPTkZJR19TQ0hFTUFfUkVWID0gMjtcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcHJvcCAoYGRyaXZlcnNgKSB1c2VkIGluIGBleHRlbnNpb25zLnlhbWxgIGZvciBkcml2ZXJzLlxuICogQHR5cGUge2Ake3R5cGVvZiBEUklWRVJfVFlQRX1zYH1cbiAqL1xuY29uc3QgQ09ORklHX0RBVEFfRFJJVkVSX0tFWSA9IGAke0RSSVZFUl9UWVBFfXNgO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wIChgcGx1Z2luc2ApIHVzZWQgaW4gYGV4dGVuc2lvbnMueWFtbGAgZm9yIHBsdWdpbnMuXG4gKiBAdHlwZSB7YCR7dHlwZW9mIFBMVUdJTl9UWVBFfXNgfVxuICovXG5jb25zdCBDT05GSUdfREFUQV9QTFVHSU5fS0VZID0gYCR7UExVR0lOX1RZUEV9c2A7XG5cbi8qKlxuICogQHR5cGUge1JlYWRvbmx5PE1hbmlmZXN0RGF0YT59XG4gKi9cbmNvbnN0IElOSVRJQUxfTUFOSUZFU1RfREFUQSA9IE9iamVjdC5mcmVlemUoe1xuICBbQ09ORklHX0RBVEFfRFJJVkVSX0tFWV06IE9iamVjdC5mcmVlemUoe30pLFxuICBbQ09ORklHX0RBVEFfUExVR0lOX0tFWV06IE9iamVjdC5mcmVlemUoe30pLFxuICBzY2hlbWFSZXY6IENPTkZJR19TQ0hFTUFfUkVWLFxufSk7XG5cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCByZXR1cm4gYHRydWVgIGlmIGl0IHJlcHJlc2VudHMgYW4gQXBwaXVtIEV4dGVuc2lvbiAoZWl0aGVyIGEgZHJpdmVyIG9yIHBsdWdpbikuXG4gKlxuICogVGhlIGBwYWNrYWdlLmpzb25gIG11c3QgaGF2ZSBhbiBgYXBwaXVtYCBwcm9wZXJ0eSB3aGljaCBpcyBhbiBvYmplY3QuXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBFeHRQYWNrYWdlSnNvbjxFeHRlbnNpb25UeXBlPn1cbiAqL1xuZnVuY3Rpb24gaXNFeHRlbnNpb24odmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICBfLmlzUGxhaW5PYmplY3QodmFsdWUpICYmXG4gICAgXy5pc1BsYWluT2JqZWN0KHZhbHVlLmFwcGl1bSkgJiZcbiAgICBfLmlzU3RyaW5nKHZhbHVlLm5hbWUpICYmXG4gICAgXy5pc1N0cmluZyh2YWx1ZS52ZXJzaW9uKVxuICApO1xufVxuLyoqXG4gKiBHaXZlbiBhIGBwYWNrYWdlLmpzb25gLCByZXR1cm4gYHRydWVgIGlmIGl0IHJlcHJlc2VudHMgYW4gQXBwaXVtIERyaXZlci5cbiAqXG4gKiBUbyBiZSBjb25zaWRlcmVkIGEgZHJpdmVyLCBhIGBwYWNrYWdlLmpzb25gIG11c3QgaGF2ZSBhIGZpZWxkc1xuICogYGFwcGl1bS5kcml2ZXJOYW1lYCwgYGFwcGl1bS5hdXRvbWF0aW9uTmFtZWAgYW5kIGBhcHBpdW0ucGxhdGZvcm1OYW1lc2AuXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBWYWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgRXh0UGFja2FnZUpzb248RHJpdmVyVHlwZT59XG4gKi9cbmZ1bmN0aW9uIGlzRHJpdmVyKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgaXNFeHRlbnNpb24odmFsdWUpICYmXG4gICAgXy5pc1N0cmluZyhfLmdldCh2YWx1ZSwgJ2FwcGl1bS5kcml2ZXJOYW1lJykpICYmXG4gICAgXy5pc1N0cmluZyhfLmdldCh2YWx1ZSwgJ2FwcGl1bS5hdXRvbWF0aW9uTmFtZScpKSAmJlxuICAgIF8uaXNBcnJheShfLmdldCh2YWx1ZSwgJ2FwcGl1bS5wbGF0Zm9ybU5hbWVzJykpXG4gICk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCwgcmV0dXJuIGB0cnVlYCBpZiBpdCByZXByZXNlbnRzIGFuIEFwcGl1bSBQbHVnaW4uXG4gKlxuICogVG8gYmUgY29uc2lkZXJlZCBhIHBsdWdpbiwgYSBgcGFja2FnZS5qc29uYCBtdXN0IGhhdmUgYW4gYGFwcGl1bS5wbHVnaW5OYW1lYCBmaWVsZC5cbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBFeHRQYWNrYWdlSnNvbjxQbHVnaW5UeXBlPn1cbiAqL1xuZnVuY3Rpb24gaXNQbHVnaW4odmFsdWUpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaW9uKHZhbHVlKSAmJiBfLmlzU3RyaW5nKF8uZ2V0KHZhbHVlLCAnYXBwaXVtLnBsdWdpbk5hbWUnKSk7XG59XG5cbi8qKlxuICogSGFuZGxlcyByZWFkaW5nICYgd3JpdGluZyBvZiBleHRlbnNpb24gY29uZmlnIGZpbGVzLlxuICpcbiAqIE9ubHkgb25lIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZXhpc3RzIHBlciB2YWx1ZSBvZiBgQVBQSVVNX0hPTUVgLlxuICovXG5leHBvcnQgY2xhc3MgTWFuaWZlc3Qge1xuICAvKipcbiAgICogVGhlIGVudGlyZSBjb250ZW50cyBvZiBhIHBhcnNlZCBZQU1MIGV4dGVuc2lvbiBjb25maWcgZmlsZS5cbiAgICpcbiAgICogQ29udGFpbnMgcHJveGllcyBmb3IgYXV0b21hdGljIHBlcnNpc3RlbmNlIG9uIGRpc2tcbiAgICogQHR5cGUge01hbmlmZXN0RGF0YX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kYXRhO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGBBUFBJVU1fSE9NRWAuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgX2FwcGl1bUhvbWU7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYGV4dGVuc2lvbnMueWFtbGBcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogTm90IHNldCB1bnRpbCB7QGxpbmsgTWFuaWZlc3QucmVhZH0gaXMgY2FsbGVkLlxuICAgKi9cbiAgX21hbmlmZXN0UGF0aDtcblxuICAvKipcbiAgICogSGVscHMgYXZvaWQgd3JpdGluZyBtdWx0aXBsZSB0aW1lcy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdW5kZWZpbmVkYCwgY2FsbGluZyB7QGxpbmsgTWFuaWZlc3Qud3JpdGV9IHdpbGwgY2F1c2UgaXQgdG8gYmVcbiAgICogc2V0IHRvIGEgYFByb21pc2VgLiBXaGVuIHRoZSBjYWxsIHRvIGB3cml0ZSgpYCBpcyBjb21wbGV0ZSwgdGhlIGBQcm9taXNlYFxuICAgKiB3aWxsIHJlc29sdmUgYW5kIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byBgdW5kZWZpbmVkYC4gIENvbmN1cnJlbnQgY2FsbHNcbiAgICogbWFkZSB3aGlsZSB0aGlzIHZhbHVlIGlzIGEgYFByb21pc2VgIHdpbGwgcmV0dXJuIHRoZSBgUHJvbWlzZWAgaXRzZWxmLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UHJvbWlzZTxib29sZWFuPnx1bmRlZmluZWR9XG4gICAqL1xuICBfd3JpdGluZztcblxuICAvKipcbiAgICogSGVscHMgYXZvaWQgcmVhZGluZyBtdWx0aXBsZSB0aW1lcy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdW5kZWZpbmVkYCwgY2FsbGluZyB7QGxpbmsgTWFuaWZlc3QucmVhZH0gd2lsbCBjYXVzZSBpdCB0byBiZVxuICAgKiBzZXQgdG8gYSBgUHJvbWlzZWAuIFdoZW4gdGhlIGNhbGwgdG8gYHJlYWQoKWAgaXMgY29tcGxldGUsIHRoZSBgUHJvbWlzZWBcbiAgICogd2lsbCByZXNvbHZlIGFuZCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAuICBDb25jdXJyZW50IGNhbGxzXG4gICAqIG1hZGUgd2hpbGUgdGhpcyB2YWx1ZSBpcyBhIGBQcm9taXNlYCB3aWxsIHJldHVybiB0aGUgYFByb21pc2VgIGl0c2VsZi5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1Byb21pc2U8dm9pZD58dW5kZWZpbmVkfVxuICAgKi9cbiAgX3JlYWRpbmc7XG5cbiAgLyoqXG4gICAqIFNldHMgaW50ZXJuYWwgZGF0YSB0byBhIGZyZXNoIGNsb25lIG9mIHtAbGluayBJTklUSUFMX01BTklGRVNUX0RBVEF9XG4gICAqXG4gICAqIFVzZSB7QGxpbmsgTWFuaWZlc3QuZ2V0SW5zdGFuY2V9IGluc3RlYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcHBpdW1Ib21lKSB7XG4gICAgdGhpcy5fYXBwaXVtSG9tZSA9IGFwcGl1bUhvbWU7XG4gICAgdGhpcy5fZGF0YSA9IF8uY2xvbmVEZWVwKElOSVRJQUxfTUFOSUZFU1RfREFUQSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBvciBleGlzdGluZyB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYGFwcGl1bUhvbWVgLlxuICAgKlxuICAgKiBNYWludGFpbnMgb25lIGluc3RhbmNlIHBlciB2YWx1ZSBvZiBgYXBwaXVtSG9tZWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gUGF0aCB0byBgQVBQSVVNX0hPTUVgXG4gICAqIEByZXR1cm5zIHtNYW5pZmVzdH1cbiAgICovXG4gIHN0YXRpYyBnZXRJbnN0YW5jZSA9IF8ubWVtb2l6ZShmdW5jdGlvbiBfZ2V0SW5zdGFuY2UoYXBwaXVtSG9tZSkge1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3QoYXBwaXVtSG9tZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBgQVBQSVVNX0hPTUVgIGZvciBpbnN0YWxsZWQgZXh0ZW5zaW9ucyBhbmQgYWRkcyB0aGVtIHRvIHRoZSBtYW5pZmVzdC5cbiAgICogQHBhcmFtIHtTeW5jV2l0aEluc3RhbGxlZEV4dGVuc2lvbnNPcHRzfSBvcHRzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBgdHJ1ZWAgaWYgYW55IGV4dGVuc2lvbnMgd2VyZSBhZGRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBzeW5jV2l0aEluc3RhbGxlZEV4dGVuc2lvbnMoe2RlcHRoTGltaXQgPSBERUZBVUxUX1NFQVJDSF9ERVBUSH0gPSB7fSkge1xuICAgIGNvbnN0IHdhbGtPcHRzID0gXy5kZWZhdWx0cyh7ZGVwdGhMaW1pdH0sIERFRkFVTFRfRklORF9FWFRFTlNJT05TX09QVFMpO1xuICAgIC8vIHRoaXMgY291bGQgYmUgcGFyYWxsZWxpemVkLCBidXQgd2UgY2FuJ3QgdXNlIGZzLndhbGsgYXMgYW4gYXN5bmMgaXRlcmF0b3JcbiAgICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gICAgZm9yIGF3YWl0IChjb25zdCB7c3RhdHMsIHBhdGg6IGZpbGVwYXRofSBvZiBmcy53YWxrKHRoaXMuX2FwcGl1bUhvbWUsIHdhbGtPcHRzKSkge1xuICAgICAgaWYgKGZpbGVwYXRoICE9PSB0aGlzLl9hcHBpdW1Ib21lICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwa2cgPSBhd2FpdCBlbnYucmVhZFBhY2thZ2VJbkRpcihmaWxlcGF0aCk7XG4gICAgICAgICAgaWYgKHBrZyAmJiBpc0V4dGVuc2lvbihwa2cpKSB7XG4gICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBleHRlbnNpb24gYWxyZWFkeSBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LFxuICAgICAgICAgICAgLy8gc28gb25seSB1cGRhdGUgYGRpZENoYW5nZWAgaWYgaXQncyBuZXcuXG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2UocGtnLCBwYXRoLmpvaW4oZmlsZXBhdGgsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgICAgICAgICBkaWRDaGFuZ2UgPSBkaWRDaGFuZ2UgfHwgYWRkZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWRDaGFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgZHJpdmVyIHdpdGggbmFtZSBgbmFtZWAgaXMgcmVnaXN0ZXJlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBEcml2ZXIgbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc0RyaXZlcihuYW1lKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZGF0YS5kcml2ZXJzW25hbWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBwbHVnaW4gd2l0aCBuYW1lIGBuYW1lYCBpcyByZWdpc3RlcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFBsdWdpbiBuYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaGFzUGx1Z2luKG5hbWUpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9kYXRhLnBsdWdpbnNbbmFtZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgcGF0aCB0byBhIGBwYWNrYWdlLmpzb25gLCBhZGQgaXQgYXMgZWl0aGVyIGEgZHJpdmVyIG9yIHBsdWdpbiB0byB0aGUgbWFuaWZlc3QuXG4gICAqXG4gICAqIFdpbGwgX25vdF8gb3ZlcndyaXRlIGV4aXN0aW5nIGVudHJpZXMuXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFBhY2thZ2VKc29uPEV4dFR5cGU+fSBwa2dKc29uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dQYXRoXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCB1cG9uIHN1Y2Nlc3MsIGBmYWxzZWAgaWYgdGhlIGV4dGVuc2lvbiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gICAqL1xuICBhZGRFeHRlbnNpb25Gcm9tUGFja2FnZShwa2dKc29uLCBwa2dQYXRoKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uUGF0aCA9IHBhdGguZGlybmFtZShwa2dQYXRoKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtJbnRlcm5hbE1ldGFkYXRhfVxuICAgICAqL1xuICAgIGNvbnN0IGludGVybmFsID0ge1xuICAgICAgcGtnTmFtZTogcGtnSnNvbi5uYW1lLFxuICAgICAgdmVyc2lvbjogcGtnSnNvbi52ZXJzaW9uLFxuICAgICAgYXBwaXVtVmVyc2lvbjogcGtnSnNvbi5wZWVyRGVwZW5kZW5jaWVzPy5hcHBpdW0sXG4gICAgICBpbnN0YWxsVHlwZTogSU5TVEFMTF9UWVBFX05QTSxcbiAgICAgIGluc3RhbGxTcGVjOiBgJHtwa2dKc29uLm5hbWV9QCR7cGtnSnNvbi52ZXJzaW9ufWAsXG4gICAgfTtcblxuICAgIGlmIChpc0RyaXZlcihwa2dKc29uKSkge1xuICAgICAgaWYgKCF0aGlzLmhhc0RyaXZlcihwa2dKc29uLmFwcGl1bS5kcml2ZXJOYW1lKSkge1xuICAgICAgICB0aGlzLmFkZEV4dGVuc2lvbihEUklWRVJfVFlQRSwgcGtnSnNvbi5hcHBpdW0uZHJpdmVyTmFtZSwge1xuICAgICAgICAgIC4uLl8ub21pdChwa2dKc29uLmFwcGl1bSwgJ2RyaXZlck5hbWUnKSxcbiAgICAgICAgICAuLi5pbnRlcm5hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoaXNQbHVnaW4ocGtnSnNvbikpIHtcbiAgICAgIGlmICghdGhpcy5oYXNQbHVnaW4ocGtnSnNvbi5hcHBpdW0ucGx1Z2luTmFtZSkpIHtcbiAgICAgICAgdGhpcy5hZGRFeHRlbnNpb24oUExVR0lOX1RZUEUsIHBrZ0pzb24uYXBwaXVtLnBsdWdpbk5hbWUsIHtcbiAgICAgICAgICAuLi5fLm9taXQocGtnSnNvbi5hcHBpdW0sICdwbHVnaW5OYW1lJyksXG4gICAgICAgICAgLi4uaW50ZXJuYWwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYFRoZSBleHRlbnNpb24gaW4gJHtleHRlbnNpb25QYXRofSBpcyBuZWl0aGVyIGEgdmFsaWQgZHJpdmVyIG5vciBhIHZhbGlkIHBsdWdpbi5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV4dGVuc2lvbiB0byB0aGUgbWFuaWZlc3QgYXMgd2FzIGluc3RhbGxlZCBieSB0aGUgYGFwcGl1bWAgQ0xJLiAgVGhlXG4gICAqIGBleHREYXRhYCwgYGV4dFR5cGVgLCBhbmQgYGV4dE5hbWVgIGhhdmUgYWxyZWFkeSBiZWVuIGRldGVybWluZWQuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgTWFuaWZlc3QuYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2V9IGZvciBhZGRpbmcgYW4gZXh0ZW5zaW9uIGZyb20gYW4gb24tZGlzayBwYWNrYWdlLlxuICAgKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAgICogQHBhcmFtIHtFeHRUeXBlfSBleHRUeXBlIC0gYGRyaXZlcmAgb3IgYHBsdWdpbmBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lIG9mIGV4dGVuc2lvblxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PEV4dFR5cGU+fSBleHREYXRhIC0gRXh0ZW5zaW9uIG1ldGFkYXRhXG4gICAqIEByZXR1cm5zIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gQSBjbG9uZSBvZiBgZXh0RGF0YWAsIHBvdGVudGlhbGx5IHdpdGggYSBtdXRhdGVkIGBhcHBpdW1WZXJzaW9uYCBmaWVsZFxuICAgKi9cbiAgYWRkRXh0ZW5zaW9uKGV4dFR5cGUsIGV4dE5hbWUsIGV4dERhdGEpIHtcbiAgICBjb25zdCBkYXRhID0gXy5jbG9uZShleHREYXRhKTtcbiAgICB0aGlzLl9kYXRhW2Ake2V4dFR5cGV9c2BdW2V4dE5hbWVdID0gZGF0YTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBBUFBJVU1fSE9NRSBwYXRoXG4gICAqL1xuICBnZXQgYXBwaXVtSG9tZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwaXVtSG9tZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBtYW5pZmVzdCBmaWxlXG4gICAqL1xuICBnZXQgbWFuaWZlc3RQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBleHRlbnNpb24gZGF0YSBmb3IgYSBwYXJ0aWN1bGFyIHR5cGUuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFR5cGV9IGV4dFR5cGVcbiAgICogQHJldHVybnMge0V4dFJlY29yZDxFeHRUeXBlPn1cbiAgICovXG4gIGdldEV4dGVuc2lvbkRhdGEoZXh0VHlwZSkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoYCR7ZXh0VHlwZX1zYCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIG1hbmlmZXN0IGZyb20gZGlzayBhbmQgX292ZXJ3cml0ZXNfIHRoZSBpbnRlcm5hbCBkYXRhLlxuICAgKlxuICAgKiBJZiB0aGUgbWFuaWZlc3QgZG9lcyBub3QgZXhpc3Qgb24gZGlzaywgYW4ge0BsaW5rIElOSVRJQUxfTUFOSUZFU1RfREFUQSBcImVtcHR5XCJ9IG1hbmlmZXN0IGZpbGUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBJZiBgQVBQSVVNX0hPTUVgIGNvbnRhaW5zIGEgYHBhY2thZ2UuanNvbmAgd2l0aCBhbiBgYXBwaXVtYCBkZXBlbmRlbmN5LCB0aGVuIGEgaGFzaCBvZiB0aGUgYHBhY2thZ2UuanNvbmAgd2lsbCBiZSB0YWtlbi4gSWYgdGhpcyBoYXNoIGRpZmZlcnMgZnJvbSB0aGUgbGFzdCBoYXNoLCB0aGUgY29udGVudHMgb2YgYEFQUElVTV9IT01FL25vZGVfbW9kdWxlc2Agd2lsbCBiZSBzY2FubmVkIGZvciBleHRlbnNpb25zIHRoYXQgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgYGFwcGl1bWAgQ0xJLiAgQW55IGZvdW5kIGV4dGVuc2lvbnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuaWZlc3QgZmlsZSwgYW5kIGlmIHNvLCB0aGUgbWFuaWZlc3QgZmlsZSB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzay5cbiAgICpcbiAgICogT25seSBvbmUgcmVhZCBvcGVyYXRpb24gc2hvdWxkIGhhcHBlbiBhdCBhIHRpbWUuICBUaGlzIGlzIGNvbnRyb2xsZWQgdmlhIHRoZSB7QGxpbmsgTWFuaWZlc3QuX3JlYWRpbmd9IHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNYW5pZmVzdERhdGE+fSBUaGUgZGF0YVxuICAgKi9cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGluZykge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZGluZztcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cblxuICAgIHRoaXMuX3JlYWRpbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgLyoqIEB0eXBlIHtNYW5pZmVzdERhdGF9ICovXG4gICAgICBsZXQgZGF0YTtcbiAgICAgIGxldCBpc05ld0ZpbGUgPSBmYWxzZTtcbiAgICAgIGF3YWl0IHRoaXMuX3NldE1hbmlmZXN0UGF0aCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nLmRlYnVnKGBSZWFkaW5nICR7dGhpcy5fbWFuaWZlc3RQYXRofS4uLmApO1xuICAgICAgICBjb25zdCB5YW1sID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy5fbWFuaWZlc3RQYXRoLCAndXRmOCcpO1xuICAgICAgICBkYXRhID0gWUFNTC5wYXJzZSh5YW1sKTtcbiAgICAgICAgbG9nLmRlYnVnKGBQYXJzZWQgbWFuaWZlc3QgZmlsZTogJHtKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKX1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgZGF0YSA9IF8uY2xvbmVEZWVwKElOSVRJQUxfTUFOSUZFU1RfREFUQSk7XG4gICAgICAgICAgaXNOZXdGaWxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5fbWFuaWZlc3RQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBBcHBpdW0gaGFkIHRyb3VibGUgbG9hZGluZyB0aGUgZXh0ZW5zaW9uIGluc3RhbGxhdGlvbiBgICtcbiAgICAgICAgICAgICAgICBgY2FjaGUgZmlsZSAoJHt0aGlzLl9tYW5pZmVzdFBhdGh9KS4gSXQgbWF5IGJlIGludmFsaWQgWUFNTC4gU3BlY2lmaWMgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQXBwaXVtIGVuY291bnRlcmVkIGFuIHVua25vd24gcHJvYmxlbS4gU3BlY2lmaWMgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICBsZXQgaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGlmIChcbiAgICAgICAgKGF3YWl0IGVudi5oYXNBcHBpdW1EZXBlbmRlbmN5KHRoaXMuYXBwaXVtSG9tZSkpICYmXG4gICAgICAgIChhd2FpdCBwYWNrYWdlRGlkQ2hhbmdlKHRoaXMuYXBwaXVtSG9tZSkpXG4gICAgICApIHtcbiAgICAgICAgaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQgPSBhd2FpdCB0aGlzLnN5bmNXaXRoSW5zdGFsbGVkRXh0ZW5zaW9ucygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNOZXdGaWxlIHx8IGluc3RhbGxlZEV4dGVuc2lvbnNDaGFuZ2VkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud3JpdGUoKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZWFkaW5nO1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3JlYWRpbmcgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMge0BsaW5rIE1hbmlmZXN0Ll9tYW5pZmVzdFBhdGh9IGlzIHNldC5cbiAgICpcbiAgICogQ3JlYXRlcyB0aGUgZGlyZWN0b3J5IGlmIG5lY2Vzc2FyeS5cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAgICovXG4gIGFzeW5jIF9zZXRNYW5pZmVzdFBhdGgoKSB7XG4gICAgaWYgKCF0aGlzLl9tYW5pZmVzdFBhdGgpIHtcbiAgICAgIHRoaXMuX21hbmlmZXN0UGF0aCA9IGF3YWl0IGVudi5yZXNvbHZlTWFuaWZlc3RQYXRoKHRoaXMuX2FwcGl1bUhvbWUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChwYXRoLnJlbGF0aXZlKHRoaXMuX2FwcGl1bUhvbWUsIHRoaXMuX21hbmlmZXN0UGF0aCkuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTWlzbWF0Y2ggYmV0d2VlbiBsb2NhdGlvbiBvZiBBUFBJVU1fSE9NRSBhbmQgbWFuaWZlc3QgZmlsZS4gQVBQSVVNX0hPTUU6ICR7dGhpcy5hcHBpdW1Ib21lfSwgbWFuaWZlc3QgZmlsZTogJHt0aGlzLl9tYW5pZmVzdFBhdGh9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBkYXRhIGlmIGl0IG5lZWQgcyB3cml0aW5nLlxuICAgKlxuICAgKiBJZiB0aGUgYHNjaGVtYVJldmAgcHJvcCBuZWVkcyB1cGRhdGluZywgdGhlIGZpbGUgd2lsbCBiZSB3cml0dGVuLlxuICAgKlxuICAgKiBAdG9kbyBJZiB0aGlzIGJlY29tZXMgdG9vIG11Y2ggb2YgYSBib3R0bGVuZWNrLCB0aHJvdHRsZSBpdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFdoZXRoZXIgdGhlIGRhdGEgd2FzIHdyaXR0ZW5cbiAgICovXG4gIGFzeW5jIHdyaXRlKCkge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGluZztcbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLl9zZXRNYW5pZmVzdFBhdGgoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmRpcm5hbWUodGhpcy5fbWFuaWZlc3RQYXRoKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBcHBpdW0gY291bGQgbm90IGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvciB0aGUgbWFuaWZlc3QgZmlsZTogJHtwYXRoLmRpcm5hbWUoXG4gICAgICAgICAgICB0aGlzLl9tYW5pZmVzdFBhdGhcbiAgICAgICAgICApfS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMuX21hbmlmZXN0UGF0aCwgWUFNTC5zdHJpbmdpZnkodGhpcy5fZGF0YSksICd1dGY4Jyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXBwaXVtIGNvdWxkIG5vdCB3cml0ZSB0byBtYW5pZmVzdCBhdCAke3RoaXMuX21hbmlmZXN0UGF0aH0gdXNpbmcgQVBQSVVNX0hPTUUgJHt0aGlzLl9hcHBpdW1Ib21lfS4gYCArXG4gICAgICAgICAgICBgUGxlYXNlIGVuc3VyZSBpdCBpcyB3cml0YWJsZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93cml0aW5nO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl93cml0aW5nID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFR5cGUgb2YgdGhlIHN0cmluZyByZWZlcnJpbmcgdG8gYSBkcml2ZXIgKHR5cGljYWxseSBhcyBhIGtleSBvciB0eXBlIHN0cmluZylcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBzdHJpbmcgcmVmZXJyaW5nIHRvIGEgcGx1Z2luICh0eXBpY2FsbHkgYXMgYSBrZXkgb3IgdHlwZSBzdHJpbmcpXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuUGx1Z2luVHlwZX0gUGx1Z2luVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zT3B0c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZXB0aExpbWl0XSAtIE1heGltdW0gZGVwdGggdG8gcmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5NYW5pZmVzdERhdGF9IE1hbmlmZXN0RGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuSW50ZXJuYWxNZXRhZGF0YX0gSW50ZXJuYWxNZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dFBhY2thZ2VKc29uPFQ+fSBFeHRQYWNrYWdlSnNvblxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1hbmlmZXN0PFQ+fSBFeHRNYW5pZmVzdFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dFJlY29yZDxUPn0gRXh0UmVjb3JkXG4gKi9cblxuLyoqXG4gKiBFaXRoZXIgYGRyaXZlcmAgb3IgYHBsdWdpbmAgcm5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPQSxNQUFNQSxvQkFBb0IsR0FBRyxDQUE3QjtBQU1BLE1BQU1DLDRCQUE0QixHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztFQUNqREMsVUFBVSxFQUFFSixvQkFEcUM7RUFHakRLLE1BQU0sRUFBR0MsUUFBRCxJQUFjLENBQUNDLGFBQUEsQ0FBS0MsUUFBTCxDQUFjRixRQUFkLEVBQXdCRyxVQUF4QixDQUFtQyxHQUFuQztBQUgwQixDQUFkLENBQXJDO0FBU0EsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBMUI7QUFNQSxNQUFNQyxzQkFBc0IsR0FBSSxHQUFFQyxzQkFBWSxHQUE5QztBQU1BLE1BQU1DLHNCQUFzQixHQUFJLEdBQUVDLHNCQUFZLEdBQTlDO0FBS0EsTUFBTUMscUJBQXFCLEdBQUdiLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0VBQzFDLENBQUNRLHNCQUFELEdBQTBCVCxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLENBRGdCO0VBRTFDLENBQUNVLHNCQUFELEdBQTBCWCxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLENBRmdCO0VBRzFDYSxTQUFTLEVBQUVOO0FBSCtCLENBQWQsQ0FBOUI7O0FBYUEsU0FBU08sV0FBVCxDQUFxQkMsS0FBckIsRUFBNEI7RUFDMUIsT0FDRUMsZUFBQSxDQUFFQyxhQUFGLENBQWdCRixLQUFoQixLQUNBQyxlQUFBLENBQUVDLGFBQUYsQ0FBZ0JGLEtBQUssQ0FBQ0csTUFBdEIsQ0FEQSxJQUVBRixlQUFBLENBQUVHLFFBQUYsQ0FBV0osS0FBSyxDQUFDSyxJQUFqQixDQUZBLElBR0FKLGVBQUEsQ0FBRUcsUUFBRixDQUFXSixLQUFLLENBQUNNLE9BQWpCLENBSkY7QUFNRDs7QUFTRCxTQUFTQyxRQUFULENBQWtCUCxLQUFsQixFQUF5QjtFQUN2QixPQUNFRCxXQUFXLENBQUNDLEtBQUQsQ0FBWCxJQUNBQyxlQUFBLENBQUVHLFFBQUYsQ0FBV0gsZUFBQSxDQUFFTyxHQUFGLENBQU1SLEtBQU4sRUFBYSxtQkFBYixDQUFYLENBREEsSUFFQUMsZUFBQSxDQUFFRyxRQUFGLENBQVdILGVBQUEsQ0FBRU8sR0FBRixDQUFNUixLQUFOLEVBQWEsdUJBQWIsQ0FBWCxDQUZBLElBR0FDLGVBQUEsQ0FBRVEsT0FBRixDQUFVUixlQUFBLENBQUVPLEdBQUYsQ0FBTVIsS0FBTixFQUFhLHNCQUFiLENBQVYsQ0FKRjtBQU1EOztBQVNELFNBQVNVLFFBQVQsQ0FBa0JWLEtBQWxCLEVBQXlCO0VBQ3ZCLE9BQU9ELFdBQVcsQ0FBQ0MsS0FBRCxDQUFYLElBQXNCQyxlQUFBLENBQUVHLFFBQUYsQ0FBV0gsZUFBQSxDQUFFTyxHQUFGLENBQU1SLEtBQU4sRUFBYSxtQkFBYixDQUFYLENBQTdCO0FBQ0Q7O0FBT00sTUFBTVcsUUFBTixDQUFlO0VBUXBCQyxLQUFLO0VBT0xDLFdBQVc7RUFPWEMsYUFBYTtFQVliQyxRQUFRO0VBWVJDLFFBQVE7O0VBU1JDLFdBQVcsQ0FBQ0MsVUFBRCxFQUFhO0lBQ3RCLEtBQUtMLFdBQUwsR0FBbUJLLFVBQW5CO0lBQ0EsS0FBS04sS0FBTCxHQUFhWCxlQUFBLENBQUVrQixTQUFGLENBQVl0QixxQkFBWixDQUFiO0VBQ0Q7O0VBU2lCLE9BQVh1QixXQUFXLEdBQUduQixlQUFBLENBQUVvQixPQUFGLENBQVUsU0FBU0MsWUFBVCxDQUFzQkosVUFBdEIsRUFBa0M7SUFDL0QsT0FBTyxJQUFJUCxRQUFKLENBQWFPLFVBQWIsQ0FBUDtFQUNELENBRm9CLENBQUg7O0VBU2UsTUFBM0JLLDJCQUEyQixDQUFDO0lBQUNyQyxVQUFVLEdBQUdKO0VBQWQsSUFBc0MsRUFBdkMsRUFBMkM7SUFDMUUsTUFBTTBDLFFBQVEsR0FBR3ZCLGVBQUEsQ0FBRXdCLFFBQUYsQ0FBVztNQUFDdkM7SUFBRCxDQUFYLEVBQXlCSCw0QkFBekIsQ0FBakI7O0lBRUEsSUFBSTJDLFNBQVMsR0FBRyxLQUFoQjs7SUFDQSxXQUFXLE1BQU07TUFBQ0MsS0FBRDtNQUFRdEMsSUFBSSxFQUFFRDtJQUFkLENBQWpCLElBQTRDd0MsV0FBQSxDQUFHQyxJQUFILENBQVEsS0FBS2hCLFdBQWIsRUFBMEJXLFFBQTFCLENBQTVDLEVBQWlGO01BQy9FLElBQUlwQyxRQUFRLEtBQUssS0FBS3lCLFdBQWxCLElBQWlDYyxLQUFLLENBQUNHLFdBQU4sRUFBckMsRUFBMEQ7UUFDeEQsSUFBSTtVQUNGLE1BQU1DLEdBQUcsR0FBRyxNQUFNQyxZQUFBLENBQUlDLGdCQUFKLENBQXFCN0MsUUFBckIsQ0FBbEI7O1VBQ0EsSUFBSTJDLEdBQUcsSUFBSWhDLFdBQVcsQ0FBQ2dDLEdBQUQsQ0FBdEIsRUFBNkI7WUFHM0IsTUFBTUcsS0FBSyxHQUFHLEtBQUtDLHVCQUFMLENBQTZCSixHQUE3QixFQUFrQzFDLGFBQUEsQ0FBSytDLElBQUwsQ0FBVWhELFFBQVYsRUFBb0IsY0FBcEIsQ0FBbEMsQ0FBZDtZQUNBc0MsU0FBUyxHQUFHQSxTQUFTLElBQUlRLEtBQXpCO1VBQ0Q7UUFDRixDQVJELENBUUUsTUFBTSxDQUFFO01BQ1g7SUFDRjs7SUFDRCxPQUFPUixTQUFQO0VBQ0Q7O0VBT0RXLFNBQVMsQ0FBQ2hDLElBQUQsRUFBTztJQUNkLE9BQU9pQyxPQUFPLENBQUMsS0FBSzFCLEtBQUwsQ0FBVzJCLE9BQVgsQ0FBbUJsQyxJQUFuQixDQUFELENBQWQ7RUFDRDs7RUFPRG1DLFNBQVMsQ0FBQ25DLElBQUQsRUFBTztJQUNkLE9BQU9pQyxPQUFPLENBQUMsS0FBSzFCLEtBQUwsQ0FBVzZCLE9BQVgsQ0FBbUJwQyxJQUFuQixDQUFELENBQWQ7RUFDRDs7RUFXRDhCLHVCQUF1QixDQUFDTyxPQUFELEVBQVVDLE9BQVYsRUFBbUI7SUFBQTs7SUFDeEMsTUFBTUMsYUFBYSxHQUFHdkQsYUFBQSxDQUFLd0QsT0FBTCxDQUFhRixPQUFiLENBQXRCOztJQUtBLE1BQU1HLFFBQVEsR0FBRztNQUNmQyxPQUFPLEVBQUVMLE9BQU8sQ0FBQ3JDLElBREY7TUFFZkMsT0FBTyxFQUFFb0MsT0FBTyxDQUFDcEMsT0FGRjtNQUdmMEMsYUFBYSwyQkFBRU4sT0FBTyxDQUFDTyxnQkFBViwwREFBRSxzQkFBMEI5QyxNQUgxQjtNQUlmK0MsV0FBVyxFQUFFQyxpQ0FKRTtNQUtmQyxXQUFXLEVBQUcsR0FBRVYsT0FBTyxDQUFDckMsSUFBSyxJQUFHcUMsT0FBTyxDQUFDcEMsT0FBUTtJQUxqQyxDQUFqQjs7SUFRQSxJQUFJQyxRQUFRLENBQUNtQyxPQUFELENBQVosRUFBdUI7TUFDckIsSUFBSSxDQUFDLEtBQUtMLFNBQUwsQ0FBZUssT0FBTyxDQUFDdkMsTUFBUixDQUFla0QsVUFBOUIsQ0FBTCxFQUFnRDtRQUM5QyxLQUFLQyxZQUFMLENBQWtCNUQsc0JBQWxCLEVBQStCZ0QsT0FBTyxDQUFDdkMsTUFBUixDQUFla0QsVUFBOUMsRUFBMEQsRUFDeEQsR0FBR3BELGVBQUEsQ0FBRXNELElBQUYsQ0FBT2IsT0FBTyxDQUFDdkMsTUFBZixFQUF1QixZQUF2QixDQURxRDtVQUV4RCxHQUFHMkM7UUFGcUQsQ0FBMUQ7UUFJQSxPQUFPLElBQVA7TUFDRDs7TUFDRCxPQUFPLEtBQVA7SUFDRCxDQVRELE1BU08sSUFBSXBDLFFBQVEsQ0FBQ2dDLE9BQUQsQ0FBWixFQUF1QjtNQUM1QixJQUFJLENBQUMsS0FBS0YsU0FBTCxDQUFlRSxPQUFPLENBQUN2QyxNQUFSLENBQWVxRCxVQUE5QixDQUFMLEVBQWdEO1FBQzlDLEtBQUtGLFlBQUwsQ0FBa0IxRCxzQkFBbEIsRUFBK0I4QyxPQUFPLENBQUN2QyxNQUFSLENBQWVxRCxVQUE5QyxFQUEwRCxFQUN4RCxHQUFHdkQsZUFBQSxDQUFFc0QsSUFBRixDQUFPYixPQUFPLENBQUN2QyxNQUFmLEVBQXVCLFlBQXZCLENBRHFEO1VBRXhELEdBQUcyQztRQUZxRCxDQUExRDtRQUlBLE9BQU8sSUFBUDtNQUNEOztNQUNELE9BQU8sS0FBUDtJQUNELENBVE0sTUFTQTtNQUNMLE1BQU0sSUFBSVcsU0FBSixDQUNILG9CQUFtQmIsYUFBYyxnREFEOUIsQ0FBTjtJQUdEO0VBQ0Y7O0VBYURVLFlBQVksQ0FBQ0ksT0FBRCxFQUFVQyxPQUFWLEVBQW1CQyxPQUFuQixFQUE0QjtJQUN0QyxNQUFNQyxJQUFJLEdBQUc1RCxlQUFBLENBQUU2RCxLQUFGLENBQVFGLE9BQVIsQ0FBYjs7SUFDQSxLQUFLaEQsS0FBTCxDQUFZLEdBQUU4QyxPQUFRLEdBQXRCLEVBQTBCQyxPQUExQixJQUFxQ0UsSUFBckM7SUFDQSxPQUFPQSxJQUFQO0VBQ0Q7O0VBS2EsSUFBVjNDLFVBQVUsR0FBRztJQUNmLE9BQU8sS0FBS0wsV0FBWjtFQUNEOztFQUtlLElBQVprRCxZQUFZLEdBQUc7SUFDakIsT0FBTyxLQUFLakQsYUFBWjtFQUNEOztFQVNEa0QsZ0JBQWdCLENBQUNOLE9BQUQsRUFBVTtJQUN4QixPQUFPLEtBQUs5QyxLQUFMLENBQW1DLEdBQUU4QyxPQUFRLEdBQTdDLENBQVA7RUFDRDs7RUFZUyxNQUFKTyxJQUFJLEdBQUc7SUFDWCxJQUFJLEtBQUtqRCxRQUFULEVBQW1CO01BQ2pCLE1BQU0sS0FBS0EsUUFBWDtNQUNBLE9BQU8sS0FBS0osS0FBWjtJQUNEOztJQUVELEtBQUtJLFFBQUwsR0FBZ0IsQ0FBQyxZQUFZO01BRTNCLElBQUk2QyxJQUFKO01BQ0EsSUFBSUssU0FBUyxHQUFHLEtBQWhCO01BQ0EsTUFBTSxLQUFLQyxnQkFBTCxFQUFOOztNQUNBLElBQUk7UUFDRkMsZUFBQSxDQUFJQyxLQUFKLENBQVcsV0FBVSxLQUFLdkQsYUFBYyxLQUF4Qzs7UUFDQSxNQUFNd0QsSUFBSSxHQUFHLE1BQU0xQyxXQUFBLENBQUcyQyxRQUFILENBQVksS0FBS3pELGFBQWpCLEVBQWdDLE1BQWhDLENBQW5CO1FBQ0ErQyxJQUFJLEdBQUdXLGFBQUEsQ0FBS0MsS0FBTCxDQUFXSCxJQUFYLENBQVA7O1FBQ0FGLGVBQUEsQ0FBSUMsS0FBSixDQUFXLHlCQUF3QkssSUFBSSxDQUFDQyxTQUFMLENBQWVkLElBQWYsRUFBcUIsSUFBckIsRUFBMkIsQ0FBM0IsQ0FBOEIsRUFBakU7TUFDRCxDQUxELENBS0UsT0FBT2UsR0FBUCxFQUFZO1FBQ1osSUFBSUEsR0FBRyxDQUFDQyxJQUFKLEtBQWEsUUFBakIsRUFBMkI7VUFDekJoQixJQUFJLEdBQUc1RCxlQUFBLENBQUVrQixTQUFGLENBQVl0QixxQkFBWixDQUFQO1VBQ0FxRSxTQUFTLEdBQUcsSUFBWjtRQUNELENBSEQsTUFHTztVQUNMLElBQUksS0FBS3BELGFBQVQsRUFBd0I7WUFDdEIsTUFBTSxJQUFJZ0UsS0FBSixDQUNILHdEQUFELEdBQ0csZUFBYyxLQUFLaEUsYUFBYyw4Q0FBNkM4RCxHQUFHLENBQUNHLE9BQVEsRUFGekYsQ0FBTjtVQUlELENBTEQsTUFLTztZQUNMLE1BQU0sSUFBSUQsS0FBSixDQUNILDBEQUF5REYsR0FBRyxDQUFDRyxPQUFRLEVBRGxFLENBQU47VUFHRDtRQUNGO01BQ0Y7O01BRUQsS0FBS25FLEtBQUwsR0FBYWlELElBQWI7TUFDQSxJQUFJbUIsMEJBQTBCLEdBQUcsS0FBakM7O01BQ0EsSUFDRSxDQUFDLE1BQU1oRCxZQUFBLENBQUlpRCxtQkFBSixDQUF3QixLQUFLL0QsVUFBN0IsQ0FBUCxNQUNDLE1BQU0sSUFBQWdFLGdDQUFBLEVBQWlCLEtBQUtoRSxVQUF0QixDQURQLENBREYsRUFHRTtRQUNBOEQsMEJBQTBCLEdBQUcsTUFBTSxLQUFLekQsMkJBQUwsRUFBbkM7TUFDRDs7TUFFRCxJQUFJMkMsU0FBUyxJQUFJYywwQkFBakIsRUFBNkM7UUFDM0MsTUFBTSxLQUFLRyxLQUFMLEVBQU47TUFDRDtJQUNGLENBeENlLEdBQWhCOztJQXlDQSxJQUFJO01BQ0YsTUFBTSxLQUFLbkUsUUFBWDtNQUNBLE9BQU8sS0FBS0osS0FBWjtJQUNELENBSEQsU0FHVTtNQUNSLEtBQUtJLFFBQUwsR0FBZ0JvRSxTQUFoQjtJQUNEO0VBQ0Y7O0VBU3FCLE1BQWhCakIsZ0JBQWdCLEdBQUc7SUFDdkIsSUFBSSxDQUFDLEtBQUtyRCxhQUFWLEVBQXlCO01BQ3ZCLEtBQUtBLGFBQUwsR0FBcUIsTUFBTWtCLFlBQUEsQ0FBSXFELG1CQUFKLENBQXdCLEtBQUt4RSxXQUE3QixDQUEzQjs7TUFHQSxJQUFJeEIsYUFBQSxDQUFLaUcsUUFBTCxDQUFjLEtBQUt6RSxXQUFuQixFQUFnQyxLQUFLQyxhQUFyQyxFQUFvRHZCLFVBQXBELENBQStELEdBQS9ELENBQUosRUFBeUU7UUFDdkUsTUFBTSxJQUFJdUYsS0FBSixDQUNILDRFQUEyRSxLQUFLNUQsVUFBVyxvQkFBbUIsS0FBS0osYUFBYyxFQUQ5SCxDQUFOO01BR0Q7SUFDRjs7SUFFRCxPQUFPLEtBQUtBLGFBQVo7RUFDRDs7RUFVVSxNQUFMcUUsS0FBSyxHQUFHO0lBQ1osSUFBSSxLQUFLcEUsUUFBVCxFQUFtQjtNQUNqQixPQUFPLEtBQUtBLFFBQVo7SUFDRDs7SUFDRCxLQUFLQSxRQUFMLEdBQWdCLENBQUMsWUFBWTtNQUMzQixNQUFNLEtBQUtvRCxnQkFBTCxFQUFOOztNQUNBLElBQUk7UUFDRixNQUFNdkMsV0FBQSxDQUFHMkQsTUFBSCxDQUFVbEcsYUFBQSxDQUFLd0QsT0FBTCxDQUFhLEtBQUsvQixhQUFsQixDQUFWLENBQU47TUFDRCxDQUZELENBRUUsT0FBTzhELEdBQVAsRUFBWTtRQUNaLE1BQU0sSUFBSUUsS0FBSixDQUNILGdFQUErRHpGLGFBQUEsQ0FBS3dELE9BQUwsQ0FDOUQsS0FBSy9CLGFBRHlELENBRTlELHFCQUFvQjhELEdBQUcsQ0FBQ0csT0FBUSxFQUg5QixDQUFOO01BS0Q7O01BQ0QsSUFBSTtRQUNGLE1BQU1uRCxXQUFBLENBQUc0RCxTQUFILENBQWEsS0FBSzFFLGFBQWxCLEVBQWlDMEQsYUFBQSxDQUFLRyxTQUFMLENBQWUsS0FBSy9ELEtBQXBCLENBQWpDLEVBQTZELE1BQTdELENBQU47UUFDQSxPQUFPLElBQVA7TUFDRCxDQUhELENBR0UsT0FBT2dFLEdBQVAsRUFBWTtRQUNaLE1BQU0sSUFBSUUsS0FBSixDQUNILHlDQUF3QyxLQUFLaEUsYUFBYyxzQkFBcUIsS0FBS0QsV0FBWSxJQUFsRyxHQUNHLGlEQUFnRCtELEdBQUcsQ0FBQ0csT0FBUSxFQUYzRCxDQUFOO01BSUQ7SUFDRixDQXBCZSxHQUFoQjs7SUFxQkEsSUFBSTtNQUNGLE9BQU8sTUFBTSxLQUFLaEUsUUFBbEI7SUFDRCxDQUZELFNBRVU7TUFDUixLQUFLQSxRQUFMLEdBQWdCcUUsU0FBaEI7SUFDRDtFQUNGOztBQXpVbUIifQ==
|
|
261
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT05GSUdfU0NIRU1BX1JFViIsIkNPTkZJR19EQVRBX0RSSVZFUl9LRVkiLCJEUklWRVJfVFlQRSIsIkNPTkZJR19EQVRBX1BMVUdJTl9LRVkiLCJQTFVHSU5fVFlQRSIsIklOSVRJQUxfTUFOSUZFU1RfREFUQSIsIk9iamVjdCIsImZyZWV6ZSIsInNjaGVtYVJldiIsImlzRXh0ZW5zaW9uIiwidmFsdWUiLCJfIiwiaXNQbGFpbk9iamVjdCIsImFwcGl1bSIsImlzU3RyaW5nIiwibmFtZSIsInZlcnNpb24iLCJpc0RyaXZlciIsImdldCIsImlzQXJyYXkiLCJpc1BsdWdpbiIsIk1hbmlmZXN0IiwiX2RhdGEiLCJfYXBwaXVtSG9tZSIsIl9tYW5pZmVzdFBhdGgiLCJfd3JpdGluZyIsIl9yZWFkaW5nIiwiY29uc3RydWN0b3IiLCJhcHBpdW1Ib21lIiwiY2xvbmVEZWVwIiwiZ2V0SW5zdGFuY2UiLCJtZW1vaXplIiwiX2dldEluc3RhbmNlIiwic3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zIiwiZGlkQ2hhbmdlIiwib25NYXRjaCIsImZpbGVwYXRoIiwicGtnIiwiSlNPTiIsInBhcnNlIiwiZnMiLCJyZWFkRmlsZSIsImNoYW5nZWQiLCJhZGRFeHRlbnNpb25Gcm9tUGFja2FnZSIsInF1ZXVlIiwicGF0aCIsImpvaW4iLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsImdsb2IiLCJjd2QiLCJzaWxlbnQiLCJhYnNvbHV0ZSIsImVyciIsIm9uIiwicHVzaCIsImFsbCIsImhhc0RyaXZlciIsIkJvb2xlYW4iLCJkcml2ZXJzIiwiaGFzUGx1Z2luIiwicGx1Z2lucyIsInBrZ0pzb24iLCJwa2dQYXRoIiwiZXh0ZW5zaW9uUGF0aCIsImRpcm5hbWUiLCJpbnRlcm5hbCIsInBrZ05hbWUiLCJhcHBpdW1WZXJzaW9uIiwicGVlckRlcGVuZGVuY2llcyIsImluc3RhbGxUeXBlIiwiSU5TVEFMTF9UWVBFX05QTSIsImluc3RhbGxTcGVjIiwiZHJpdmVyTmFtZSIsImFkZEV4dGVuc2lvbiIsIm9taXQiLCJwbHVnaW5OYW1lIiwiVHlwZUVycm9yIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJleHREYXRhIiwiZGF0YSIsImNsb25lIiwibWFuaWZlc3RQYXRoIiwiZ2V0RXh0ZW5zaW9uRGF0YSIsInJlYWQiLCJpc05ld0ZpbGUiLCJfc2V0TWFuaWZlc3RQYXRoIiwibG9nIiwiZGVidWciLCJ5YW1sIiwiWUFNTCIsInN0cmluZ2lmeSIsImNvZGUiLCJFcnJvciIsIm1lc3NhZ2UiLCJpbnN0YWxsZWRFeHRlbnNpb25zQ2hhbmdlZCIsImVudiIsImhhc0FwcGl1bURlcGVuZGVuY3kiLCJwYWNrYWdlRGlkQ2hhbmdlIiwid3JpdGUiLCJ1bmRlZmluZWQiLCJyZXNvbHZlTWFuaWZlc3RQYXRoIiwicmVsYXRpdmUiLCJzdGFydHNXaXRoIiwibWtkaXJwIiwid3JpdGVGaWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2V4dGVuc2lvbi9tYW5pZmVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZHVsZSBjb250YWluaW5nIHtAbGluayBNYW5pZmVzdH0gd2hpY2ggaGFuZGxlcyByZWFkaW5nICYgd3JpdGluZyBvZiBleHRlbnNpb24gY29uZmlnIGZpbGVzLlxuICovXG5cbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuaW1wb3J0IHtlbnYsIGZzfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFlBTUwgZnJvbSAneWFtbCc7XG5pbXBvcnQge0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRX0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7SU5TVEFMTF9UWVBFX05QTX0gZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7cGFja2FnZURpZENoYW5nZX0gZnJvbSAnLi9wYWNrYWdlLWNoYW5nZWQnO1xuXG4vKipcbiAqIEN1cnJlbnQgY29uZmlndXJhdGlvbiBzY2hlbWEgcmV2aXNpb24hXG4gKi9cbmNvbnN0IENPTkZJR19TQ0hFTUFfUkVWID0gMjtcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcHJvcCAoYGRyaXZlcnNgKSB1c2VkIGluIGBleHRlbnNpb25zLnlhbWxgIGZvciBkcml2ZXJzLlxuICogQHR5cGUge2Ake3R5cGVvZiBEUklWRVJfVFlQRX1zYH1cbiAqL1xuY29uc3QgQ09ORklHX0RBVEFfRFJJVkVSX0tFWSA9IGAke0RSSVZFUl9UWVBFfXNgO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wIChgcGx1Z2luc2ApIHVzZWQgaW4gYGV4dGVuc2lvbnMueWFtbGAgZm9yIHBsdWdpbnMuXG4gKiBAdHlwZSB7YCR7dHlwZW9mIFBMVUdJTl9UWVBFfXNgfVxuICovXG5jb25zdCBDT05GSUdfREFUQV9QTFVHSU5fS0VZID0gYCR7UExVR0lOX1RZUEV9c2A7XG5cbi8qKlxuICogQHR5cGUge1JlYWRvbmx5PE1hbmlmZXN0RGF0YT59XG4gKi9cbmNvbnN0IElOSVRJQUxfTUFOSUZFU1RfREFUQSA9IE9iamVjdC5mcmVlemUoe1xuICBbQ09ORklHX0RBVEFfRFJJVkVSX0tFWV06IE9iamVjdC5mcmVlemUoe30pLFxuICBbQ09ORklHX0RBVEFfUExVR0lOX0tFWV06IE9iamVjdC5mcmVlemUoe30pLFxuICBzY2hlbWFSZXY6IENPTkZJR19TQ0hFTUFfUkVWLFxufSk7XG5cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCByZXR1cm4gYHRydWVgIGlmIGl0IHJlcHJlc2VudHMgYW4gQXBwaXVtIEV4dGVuc2lvbiAoZWl0aGVyIGEgZHJpdmVyIG9yIHBsdWdpbikuXG4gKlxuICogVGhlIGBwYWNrYWdlLmpzb25gIG11c3QgaGF2ZSBhbiBgYXBwaXVtYCBwcm9wZXJ0eSB3aGljaCBpcyBhbiBvYmplY3QuXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBFeHRQYWNrYWdlSnNvbjxFeHRlbnNpb25UeXBlPn1cbiAqL1xuZnVuY3Rpb24gaXNFeHRlbnNpb24odmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICBfLmlzUGxhaW5PYmplY3QodmFsdWUpICYmXG4gICAgXy5pc1BsYWluT2JqZWN0KHZhbHVlLmFwcGl1bSkgJiZcbiAgICBfLmlzU3RyaW5nKHZhbHVlLm5hbWUpICYmXG4gICAgXy5pc1N0cmluZyh2YWx1ZS52ZXJzaW9uKVxuICApO1xufVxuLyoqXG4gKiBHaXZlbiBhIGBwYWNrYWdlLmpzb25gLCByZXR1cm4gYHRydWVgIGlmIGl0IHJlcHJlc2VudHMgYW4gQXBwaXVtIERyaXZlci5cbiAqXG4gKiBUbyBiZSBjb25zaWRlcmVkIGEgZHJpdmVyLCBhIGBwYWNrYWdlLmpzb25gIG11c3QgaGF2ZSBhIGZpZWxkc1xuICogYGFwcGl1bS5kcml2ZXJOYW1lYCwgYGFwcGl1bS5hdXRvbWF0aW9uTmFtZWAgYW5kIGBhcHBpdW0ucGxhdGZvcm1OYW1lc2AuXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBWYWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgRXh0UGFja2FnZUpzb248RHJpdmVyVHlwZT59XG4gKi9cbmZ1bmN0aW9uIGlzRHJpdmVyKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgaXNFeHRlbnNpb24odmFsdWUpICYmXG4gICAgXy5pc1N0cmluZyhfLmdldCh2YWx1ZSwgJ2FwcGl1bS5kcml2ZXJOYW1lJykpICYmXG4gICAgXy5pc1N0cmluZyhfLmdldCh2YWx1ZSwgJ2FwcGl1bS5hdXRvbWF0aW9uTmFtZScpKSAmJlxuICAgIF8uaXNBcnJheShfLmdldCh2YWx1ZSwgJ2FwcGl1bS5wbGF0Zm9ybU5hbWVzJykpXG4gICk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCwgcmV0dXJuIGB0cnVlYCBpZiBpdCByZXByZXNlbnRzIGFuIEFwcGl1bSBQbHVnaW4uXG4gKlxuICogVG8gYmUgY29uc2lkZXJlZCBhIHBsdWdpbiwgYSBgcGFja2FnZS5qc29uYCBtdXN0IGhhdmUgYW4gYGFwcGl1bS5wbHVnaW5OYW1lYCBmaWVsZC5cbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBFeHRQYWNrYWdlSnNvbjxQbHVnaW5UeXBlPn1cbiAqL1xuZnVuY3Rpb24gaXNQbHVnaW4odmFsdWUpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaW9uKHZhbHVlKSAmJiBfLmlzU3RyaW5nKF8uZ2V0KHZhbHVlLCAnYXBwaXVtLnBsdWdpbk5hbWUnKSk7XG59XG5cbi8qKlxuICogSGFuZGxlcyByZWFkaW5nICYgd3JpdGluZyBvZiBleHRlbnNpb24gY29uZmlnIGZpbGVzLlxuICpcbiAqIE9ubHkgb25lIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZXhpc3RzIHBlciB2YWx1ZSBvZiBgQVBQSVVNX0hPTUVgLlxuICovXG5leHBvcnQgY2xhc3MgTWFuaWZlc3Qge1xuICAvKipcbiAgICogVGhlIGVudGlyZSBjb250ZW50cyBvZiBhIHBhcnNlZCBZQU1MIGV4dGVuc2lvbiBjb25maWcgZmlsZS5cbiAgICpcbiAgICogQ29udGFpbnMgcHJveGllcyBmb3IgYXV0b21hdGljIHBlcnNpc3RlbmNlIG9uIGRpc2tcbiAgICogQHR5cGUge01hbmlmZXN0RGF0YX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kYXRhO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGBBUFBJVU1fSE9NRWAuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgX2FwcGl1bUhvbWU7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYGV4dGVuc2lvbnMueWFtbGBcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogTm90IHNldCB1bnRpbCB7QGxpbmsgTWFuaWZlc3QucmVhZH0gaXMgY2FsbGVkLlxuICAgKi9cbiAgX21hbmlmZXN0UGF0aDtcblxuICAvKipcbiAgICogSGVscHMgYXZvaWQgd3JpdGluZyBtdWx0aXBsZSB0aW1lcy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdW5kZWZpbmVkYCwgY2FsbGluZyB7QGxpbmsgTWFuaWZlc3Qud3JpdGV9IHdpbGwgY2F1c2UgaXQgdG8gYmVcbiAgICogc2V0IHRvIGEgYFByb21pc2VgLiBXaGVuIHRoZSBjYWxsIHRvIGB3cml0ZSgpYCBpcyBjb21wbGV0ZSwgdGhlIGBQcm9taXNlYFxuICAgKiB3aWxsIHJlc29sdmUgYW5kIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byBgdW5kZWZpbmVkYC4gIENvbmN1cnJlbnQgY2FsbHNcbiAgICogbWFkZSB3aGlsZSB0aGlzIHZhbHVlIGlzIGEgYFByb21pc2VgIHdpbGwgcmV0dXJuIHRoZSBgUHJvbWlzZWAgaXRzZWxmLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UHJvbWlzZTxib29sZWFuPnx1bmRlZmluZWR9XG4gICAqL1xuICBfd3JpdGluZztcblxuICAvKipcbiAgICogSGVscHMgYXZvaWQgcmVhZGluZyBtdWx0aXBsZSB0aW1lcy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdW5kZWZpbmVkYCwgY2FsbGluZyB7QGxpbmsgTWFuaWZlc3QucmVhZH0gd2lsbCBjYXVzZSBpdCB0byBiZVxuICAgKiBzZXQgdG8gYSBgUHJvbWlzZWAuIFdoZW4gdGhlIGNhbGwgdG8gYHJlYWQoKWAgaXMgY29tcGxldGUsIHRoZSBgUHJvbWlzZWBcbiAgICogd2lsbCByZXNvbHZlIGFuZCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAuICBDb25jdXJyZW50IGNhbGxzXG4gICAqIG1hZGUgd2hpbGUgdGhpcyB2YWx1ZSBpcyBhIGBQcm9taXNlYCB3aWxsIHJldHVybiB0aGUgYFByb21pc2VgIGl0c2VsZi5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1Byb21pc2U8dm9pZD58dW5kZWZpbmVkfVxuICAgKi9cbiAgX3JlYWRpbmc7XG5cbiAgLyoqXG4gICAqIFNldHMgaW50ZXJuYWwgZGF0YSB0byBhIGZyZXNoIGNsb25lIG9mIHtAbGluayBJTklUSUFMX01BTklGRVNUX0RBVEF9XG4gICAqXG4gICAqIFVzZSB7QGxpbmsgTWFuaWZlc3QuZ2V0SW5zdGFuY2V9IGluc3RlYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcHBpdW1Ib21lKSB7XG4gICAgdGhpcy5fYXBwaXVtSG9tZSA9IGFwcGl1bUhvbWU7XG4gICAgdGhpcy5fZGF0YSA9IF8uY2xvbmVEZWVwKElOSVRJQUxfTUFOSUZFU1RfREFUQSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBvciBleGlzdGluZyB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYGFwcGl1bUhvbWVgLlxuICAgKlxuICAgKiBNYWludGFpbnMgb25lIGluc3RhbmNlIHBlciB2YWx1ZSBvZiBgYXBwaXVtSG9tZWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gUGF0aCB0byBgQVBQSVVNX0hPTUVgXG4gICAqIEByZXR1cm5zIHtNYW5pZmVzdH1cbiAgICovXG4gIHN0YXRpYyBnZXRJbnN0YW5jZSA9IF8ubWVtb2l6ZShmdW5jdGlvbiBfZ2V0SW5zdGFuY2UoYXBwaXVtSG9tZSkge1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3QoYXBwaXVtSG9tZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBgQVBQSVVNX0hPTUVgIGZvciBpbnN0YWxsZWQgZXh0ZW5zaW9ucyBhbmQgYWRkcyB0aGVtIHRvIHRoZSBtYW5pZmVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IGB0cnVlYCBpZiBhbnkgZXh0ZW5zaW9ucyB3ZXJlIGFkZGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIHN5bmNXaXRoSW5zdGFsbGVkRXh0ZW5zaW9ucygpIHtcbiAgICAvLyB0aGlzIGNvdWxkIGJlIHBhcmFsbGVsaXplZCwgYnV0IHdlIGNhbid0IHVzZSBmcy53YWxrIGFzIGFuIGFzeW5jIGl0ZXJhdG9yXG4gICAgbGV0IGRpZENoYW5nZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogTGlzdGVuZXIgZm9yIHRoZSBgbWF0Y2hgIGV2ZW50IG9mIGEgYGdsb2JgIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVwYXRoIC0gUGF0aCB0byBhIGBwYWNrYWdlLmpzb25gXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICovXG4gICAgY29uc3Qgb25NYXRjaCA9IGFzeW5jIChmaWxlcGF0aCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShmaWxlcGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIGlmIChpc0RyaXZlcihwa2cpIHx8IGlzUGx1Z2luKHBrZykpIHtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5hZGRFeHRlbnNpb25Gcm9tUGFja2FnZShwa2csIGZpbGVwYXRoKTtcbiAgICAgICAgICBkaWRDaGFuZ2UgPSBkaWRDaGFuZ2UgfHwgY2hhbmdlZDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7fVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgYFByb21pc2VgcyB3aGljaCByZWFkIGBwYWNrYWdlLmpzb25gIGZpbGVzIGxvb2tpbmcgZm9yIEFwcGl1bSBleHRlbnNpb25zLlxuICAgICAqIEB0eXBlIHtQcm9taXNlPHZvaWQ+W119XG4gICAgICovXG4gICAgY29uc3QgcXVldWUgPSBbXG4gICAgICAvLyBsb29rIGF0IGBwYWNrYWdlLmpzb25gIGluIGBBUFBJVU1fSE9NRWAgb25seVxuICAgICAgb25NYXRjaChwYXRoLmpvaW4odGhpcy5fYXBwaXVtSG9tZSwgJ3BhY2thZ2UuanNvbicpKSxcbiAgICBdO1xuXG4gICAgLy8gYWRkIGRlcGVuZGVuY2llcyB0byB0aGUgcXVldWVcbiAgICBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBnbG9iKFxuICAgICAgICAnbm9kZV9tb2R1bGVzL3sqLEAqLyp9L3BhY2thZ2UuanNvbicsXG4gICAgICAgIHtjd2Q6IHRoaXMuX2FwcGl1bUhvbWUsIHNpbGVudDogdHJ1ZSwgYWJzb2x1dGU6IHRydWV9LFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgICAgIC5vbignZXJyb3InLCByZWplY3QpXG4gICAgICAgIC5vbignbWF0Y2gnLCAoZmlsZXBhdGgpID0+IHtcbiAgICAgICAgICBxdWV1ZS5wdXNoKG9uTWF0Y2goZmlsZXBhdGgpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyB3YWl0IGZvciBldmVyeXRoaW5nIHRvIGZpbmlzaFxuICAgIGF3YWl0IEIuYWxsKHF1ZXVlKTtcblxuICAgIHJldHVybiBkaWRDaGFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgZHJpdmVyIHdpdGggbmFtZSBgbmFtZWAgaXMgcmVnaXN0ZXJlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBEcml2ZXIgbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc0RyaXZlcihuYW1lKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZGF0YS5kcml2ZXJzW25hbWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBwbHVnaW4gd2l0aCBuYW1lIGBuYW1lYCBpcyByZWdpc3RlcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFBsdWdpbiBuYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaGFzUGx1Z2luKG5hbWUpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9kYXRhLnBsdWdpbnNbbmFtZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgcGF0aCB0byBhIGBwYWNrYWdlLmpzb25gLCBhZGQgaXQgYXMgZWl0aGVyIGEgZHJpdmVyIG9yIHBsdWdpbiB0byB0aGUgbWFuaWZlc3QuXG4gICAqXG4gICAqIFdpbGwgX25vdF8gb3ZlcndyaXRlIGV4aXN0aW5nIGVudHJpZXMuXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFBhY2thZ2VKc29uPEV4dFR5cGU+fSBwa2dKc29uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dQYXRoXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCB1cG9uIHN1Y2Nlc3MsIGBmYWxzZWAgaWYgdGhlIGV4dGVuc2lvbiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gICAqL1xuICBhZGRFeHRlbnNpb25Gcm9tUGFja2FnZShwa2dKc29uLCBwa2dQYXRoKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uUGF0aCA9IHBhdGguZGlybmFtZShwa2dQYXRoKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtJbnRlcm5hbE1ldGFkYXRhfVxuICAgICAqL1xuICAgIGNvbnN0IGludGVybmFsID0ge1xuICAgICAgcGtnTmFtZTogcGtnSnNvbi5uYW1lLFxuICAgICAgdmVyc2lvbjogcGtnSnNvbi52ZXJzaW9uLFxuICAgICAgYXBwaXVtVmVyc2lvbjogcGtnSnNvbi5wZWVyRGVwZW5kZW5jaWVzPy5hcHBpdW0sXG4gICAgICBpbnN0YWxsVHlwZTogSU5TVEFMTF9UWVBFX05QTSxcbiAgICAgIGluc3RhbGxTcGVjOiBgJHtwa2dKc29uLm5hbWV9QCR7cGtnSnNvbi52ZXJzaW9ufWAsXG4gICAgfTtcblxuICAgIGlmIChpc0RyaXZlcihwa2dKc29uKSkge1xuICAgICAgaWYgKCF0aGlzLmhhc0RyaXZlcihwa2dKc29uLmFwcGl1bS5kcml2ZXJOYW1lKSkge1xuICAgICAgICB0aGlzLmFkZEV4dGVuc2lvbihEUklWRVJfVFlQRSwgcGtnSnNvbi5hcHBpdW0uZHJpdmVyTmFtZSwge1xuICAgICAgICAgIC4uLl8ub21pdChwa2dKc29uLmFwcGl1bSwgJ2RyaXZlck5hbWUnKSxcbiAgICAgICAgICAuLi5pbnRlcm5hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoaXNQbHVnaW4ocGtnSnNvbikpIHtcbiAgICAgIGlmICghdGhpcy5oYXNQbHVnaW4ocGtnSnNvbi5hcHBpdW0ucGx1Z2luTmFtZSkpIHtcbiAgICAgICAgdGhpcy5hZGRFeHRlbnNpb24oUExVR0lOX1RZUEUsIHBrZ0pzb24uYXBwaXVtLnBsdWdpbk5hbWUsIHtcbiAgICAgICAgICAuLi5fLm9taXQocGtnSnNvbi5hcHBpdW0sICdwbHVnaW5OYW1lJyksXG4gICAgICAgICAgLi4uaW50ZXJuYWwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYFRoZSBleHRlbnNpb24gaW4gJHtleHRlbnNpb25QYXRofSBpcyBuZWl0aGVyIGEgdmFsaWQgZHJpdmVyIG5vciBhIHZhbGlkIHBsdWdpbi5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV4dGVuc2lvbiB0byB0aGUgbWFuaWZlc3QgYXMgd2FzIGluc3RhbGxlZCBieSB0aGUgYGFwcGl1bWAgQ0xJLiAgVGhlXG4gICAqIGBleHREYXRhYCwgYGV4dFR5cGVgLCBhbmQgYGV4dE5hbWVgIGhhdmUgYWxyZWFkeSBiZWVuIGRldGVybWluZWQuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgTWFuaWZlc3QuYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2V9IGZvciBhZGRpbmcgYW4gZXh0ZW5zaW9uIGZyb20gYW4gb24tZGlzayBwYWNrYWdlLlxuICAgKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAgICogQHBhcmFtIHtFeHRUeXBlfSBleHRUeXBlIC0gYGRyaXZlcmAgb3IgYHBsdWdpbmBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lIG9mIGV4dGVuc2lvblxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PEV4dFR5cGU+fSBleHREYXRhIC0gRXh0ZW5zaW9uIG1ldGFkYXRhXG4gICAqIEByZXR1cm5zIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gQSBjbG9uZSBvZiBgZXh0RGF0YWAsIHBvdGVudGlhbGx5IHdpdGggYSBtdXRhdGVkIGBhcHBpdW1WZXJzaW9uYCBmaWVsZFxuICAgKi9cbiAgYWRkRXh0ZW5zaW9uKGV4dFR5cGUsIGV4dE5hbWUsIGV4dERhdGEpIHtcbiAgICBjb25zdCBkYXRhID0gXy5jbG9uZShleHREYXRhKTtcbiAgICB0aGlzLl9kYXRhW2Ake2V4dFR5cGV9c2BdW2V4dE5hbWVdID0gZGF0YTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBBUFBJVU1fSE9NRSBwYXRoXG4gICAqL1xuICBnZXQgYXBwaXVtSG9tZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwaXVtSG9tZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBtYW5pZmVzdCBmaWxlXG4gICAqL1xuICBnZXQgbWFuaWZlc3RQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBleHRlbnNpb24gZGF0YSBmb3IgYSBwYXJ0aWN1bGFyIHR5cGUuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFR5cGV9IGV4dFR5cGVcbiAgICogQHJldHVybnMge0V4dFJlY29yZDxFeHRUeXBlPn1cbiAgICovXG4gIGdldEV4dGVuc2lvbkRhdGEoZXh0VHlwZSkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoYCR7ZXh0VHlwZX1zYCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIG1hbmlmZXN0IGZyb20gZGlzayBhbmQgX292ZXJ3cml0ZXNfIHRoZSBpbnRlcm5hbCBkYXRhLlxuICAgKlxuICAgKiBJZiB0aGUgbWFuaWZlc3QgZG9lcyBub3QgZXhpc3Qgb24gZGlzaywgYW4ge0BsaW5rIElOSVRJQUxfTUFOSUZFU1RfREFUQSBcImVtcHR5XCJ9IG1hbmlmZXN0IGZpbGUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBJZiBgQVBQSVVNX0hPTUVgIGNvbnRhaW5zIGEgYHBhY2thZ2UuanNvbmAgd2l0aCBhbiBgYXBwaXVtYCBkZXBlbmRlbmN5LCB0aGVuIGEgaGFzaCBvZiB0aGUgYHBhY2thZ2UuanNvbmAgd2lsbCBiZSB0YWtlbi4gSWYgdGhpcyBoYXNoIGRpZmZlcnMgZnJvbSB0aGUgbGFzdCBoYXNoLCB0aGUgY29udGVudHMgb2YgYEFQUElVTV9IT01FL25vZGVfbW9kdWxlc2Agd2lsbCBiZSBzY2FubmVkIGZvciBleHRlbnNpb25zIHRoYXQgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgYGFwcGl1bWAgQ0xJLiAgQW55IGZvdW5kIGV4dGVuc2lvbnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuaWZlc3QgZmlsZSwgYW5kIGlmIHNvLCB0aGUgbWFuaWZlc3QgZmlsZSB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzay5cbiAgICpcbiAgICogT25seSBvbmUgcmVhZCBvcGVyYXRpb24gc2hvdWxkIGhhcHBlbiBhdCBhIHRpbWUuICBUaGlzIGlzIGNvbnRyb2xsZWQgdmlhIHRoZSB7QGxpbmsgTWFuaWZlc3QuX3JlYWRpbmd9IHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNYW5pZmVzdERhdGE+fSBUaGUgZGF0YVxuICAgKi9cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGluZykge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZGluZztcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cblxuICAgIHRoaXMuX3JlYWRpbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgLyoqIEB0eXBlIHtNYW5pZmVzdERhdGF9ICovXG4gICAgICBsZXQgZGF0YTtcbiAgICAgIGxldCBpc05ld0ZpbGUgPSBmYWxzZTtcbiAgICAgIGF3YWl0IHRoaXMuX3NldE1hbmlmZXN0UGF0aCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nLmRlYnVnKGBSZWFkaW5nICR7dGhpcy5fbWFuaWZlc3RQYXRofS4uLmApO1xuICAgICAgICBjb25zdCB5YW1sID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy5fbWFuaWZlc3RQYXRoLCAndXRmOCcpO1xuICAgICAgICBkYXRhID0gWUFNTC5wYXJzZSh5YW1sKTtcbiAgICAgICAgbG9nLmRlYnVnKGBQYXJzZWQgbWFuaWZlc3QgZmlsZTogJHtKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKX1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgZGF0YSA9IF8uY2xvbmVEZWVwKElOSVRJQUxfTUFOSUZFU1RfREFUQSk7XG4gICAgICAgICAgaXNOZXdGaWxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5fbWFuaWZlc3RQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBBcHBpdW0gaGFkIHRyb3VibGUgbG9hZGluZyB0aGUgZXh0ZW5zaW9uIGluc3RhbGxhdGlvbiBgICtcbiAgICAgICAgICAgICAgICBgY2FjaGUgZmlsZSAoJHt0aGlzLl9tYW5pZmVzdFBhdGh9KS4gSXQgbWF5IGJlIGludmFsaWQgWUFNTC4gU3BlY2lmaWMgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQXBwaXVtIGVuY291bnRlcmVkIGFuIHVua25vd24gcHJvYmxlbS4gU3BlY2lmaWMgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICBsZXQgaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGlmIChcbiAgICAgICAgKGF3YWl0IGVudi5oYXNBcHBpdW1EZXBlbmRlbmN5KHRoaXMuYXBwaXVtSG9tZSkpICYmXG4gICAgICAgIChhd2FpdCBwYWNrYWdlRGlkQ2hhbmdlKHRoaXMuYXBwaXVtSG9tZSkpXG4gICAgICApIHtcbiAgICAgICAgaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQgPSBhd2FpdCB0aGlzLnN5bmNXaXRoSW5zdGFsbGVkRXh0ZW5zaW9ucygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNOZXdGaWxlIHx8IGluc3RhbGxlZEV4dGVuc2lvbnNDaGFuZ2VkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud3JpdGUoKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZWFkaW5nO1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3JlYWRpbmcgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMge0BsaW5rIE1hbmlmZXN0Ll9tYW5pZmVzdFBhdGh9IGlzIHNldC5cbiAgICpcbiAgICogQ3JlYXRlcyB0aGUgZGlyZWN0b3J5IGlmIG5lY2Vzc2FyeS5cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAgICovXG4gIGFzeW5jIF9zZXRNYW5pZmVzdFBhdGgoKSB7XG4gICAgaWYgKCF0aGlzLl9tYW5pZmVzdFBhdGgpIHtcbiAgICAgIHRoaXMuX21hbmlmZXN0UGF0aCA9IGF3YWl0IGVudi5yZXNvbHZlTWFuaWZlc3RQYXRoKHRoaXMuX2FwcGl1bUhvbWUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChwYXRoLnJlbGF0aXZlKHRoaXMuX2FwcGl1bUhvbWUsIHRoaXMuX21hbmlmZXN0UGF0aCkuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTWlzbWF0Y2ggYmV0d2VlbiBsb2NhdGlvbiBvZiBBUFBJVU1fSE9NRSBhbmQgbWFuaWZlc3QgZmlsZS4gQVBQSVVNX0hPTUU6ICR7dGhpcy5hcHBpdW1Ib21lfSwgbWFuaWZlc3QgZmlsZTogJHt0aGlzLl9tYW5pZmVzdFBhdGh9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBkYXRhIGlmIGl0IG5lZWQgcyB3cml0aW5nLlxuICAgKlxuICAgKiBJZiB0aGUgYHNjaGVtYVJldmAgcHJvcCBuZWVkcyB1cGRhdGluZywgdGhlIGZpbGUgd2lsbCBiZSB3cml0dGVuLlxuICAgKlxuICAgKiBAdG9kbyBJZiB0aGlzIGJlY29tZXMgdG9vIG11Y2ggb2YgYSBib3R0bGVuZWNrLCB0aHJvdHRsZSBpdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFdoZXRoZXIgdGhlIGRhdGEgd2FzIHdyaXR0ZW5cbiAgICovXG4gIGFzeW5jIHdyaXRlKCkge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGluZztcbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLl9zZXRNYW5pZmVzdFBhdGgoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmRpcm5hbWUodGhpcy5fbWFuaWZlc3RQYXRoKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBcHBpdW0gY291bGQgbm90IGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvciB0aGUgbWFuaWZlc3QgZmlsZTogJHtwYXRoLmRpcm5hbWUoXG4gICAgICAgICAgICB0aGlzLl9tYW5pZmVzdFBhdGhcbiAgICAgICAgICApfS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMuX21hbmlmZXN0UGF0aCwgWUFNTC5zdHJpbmdpZnkodGhpcy5fZGF0YSksICd1dGY4Jyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXBwaXVtIGNvdWxkIG5vdCB3cml0ZSB0byBtYW5pZmVzdCBhdCAke3RoaXMuX21hbmlmZXN0UGF0aH0gdXNpbmcgQVBQSVVNX0hPTUUgJHt0aGlzLl9hcHBpdW1Ib21lfS4gYCArXG4gICAgICAgICAgICBgUGxlYXNlIGVuc3VyZSBpdCBpcyB3cml0YWJsZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93cml0aW5nO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl93cml0aW5nID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFR5cGUgb2YgdGhlIHN0cmluZyByZWZlcnJpbmcgdG8gYSBkcml2ZXIgKHR5cGljYWxseSBhcyBhIGtleSBvciB0eXBlIHN0cmluZylcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBzdHJpbmcgcmVmZXJyaW5nIHRvIGEgcGx1Z2luICh0eXBpY2FsbHkgYXMgYSBrZXkgb3IgdHlwZSBzdHJpbmcpXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuUGx1Z2luVHlwZX0gUGx1Z2luVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zT3B0c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZXB0aExpbWl0XSAtIE1heGltdW0gZGVwdGggdG8gcmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5NYW5pZmVzdERhdGF9IE1hbmlmZXN0RGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuSW50ZXJuYWxNZXRhZGF0YX0gSW50ZXJuYWxNZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dFBhY2thZ2VKc29uPFQ+fSBFeHRQYWNrYWdlSnNvblxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1hbmlmZXN0PFQ+fSBFeHRNYW5pZmVzdFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dFJlY29yZDxUPn0gRXh0UmVjb3JkXG4gKi9cblxuLyoqXG4gKiBFaXRoZXIgYGRyaXZlcmAgb3IgYHBsdWdpbmAgcm5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFLQSxNQUFNQSxpQkFBaUIsR0FBRyxDQUExQjtBQU1BLE1BQU1DLHNCQUFzQixHQUFJLEdBQUVDLHNCQUFZLEdBQTlDO0FBTUEsTUFBTUMsc0JBQXNCLEdBQUksR0FBRUMsc0JBQVksR0FBOUM7QUFLQSxNQUFNQyxxQkFBcUIsR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWM7RUFDMUMsQ0FBQ04sc0JBQUQsR0FBMEJLLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsQ0FEZ0I7RUFFMUMsQ0FBQ0osc0JBQUQsR0FBMEJHLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsQ0FGZ0I7RUFHMUNDLFNBQVMsRUFBRVI7QUFIK0IsQ0FBZCxDQUE5Qjs7QUFhQSxTQUFTUyxXQUFULENBQXFCQyxLQUFyQixFQUE0QjtFQUMxQixPQUNFQyxlQUFBLENBQUVDLGFBQUYsQ0FBZ0JGLEtBQWhCLEtBQ0FDLGVBQUEsQ0FBRUMsYUFBRixDQUFnQkYsS0FBSyxDQUFDRyxNQUF0QixDQURBLElBRUFGLGVBQUEsQ0FBRUcsUUFBRixDQUFXSixLQUFLLENBQUNLLElBQWpCLENBRkEsSUFHQUosZUFBQSxDQUFFRyxRQUFGLENBQVdKLEtBQUssQ0FBQ00sT0FBakIsQ0FKRjtBQU1EOztBQVNELFNBQVNDLFFBQVQsQ0FBa0JQLEtBQWxCLEVBQXlCO0VBQ3ZCLE9B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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","names":["CONFIG_SCHEMA_REV","CONFIG_DATA_DRIVER_KEY","DRIVER_TYPE","CONFIG_DATA_PLUGIN_KEY","PLUGIN_TYPE","INITIAL_MANIFEST_DATA","Object","freeze","schemaRev","isExtension","value","_","isPlainObject","appium","isString","name","version","isDriver","get","isArray","isPlugin","Manifest","_data","_appiumHome","_manifestPath","_writing","_reading","constructor","appiumHome","cloneDeep","getInstance","memoize","_getInstance","syncWithInstalledExtensions","didChange","onMatch","filepath","pkg","JSON","parse","fs","readFile","changed","addExtensionFromPackage","queue","path","join","B","resolve","reject","glob","cwd","silent","absolute","err","on","push","all","hasDriver","Boolean","drivers","hasPlugin","plugins","pkgJson","pkgPath","extensionPath","dirname","internal","pkgName","appiumVersion","peerDependencies","installType","INSTALL_TYPE_NPM","installSpec","driverName","addExtension","omit","pluginName","TypeError","extType","extName","extData","data","clone","manifestPath","getExtensionData","read","isNewFile","_setManifestPath","log","debug","yaml","YAML","stringify","code","Error","message","installedExtensionsChanged","env","hasAppiumDependency","packageDidChange","write","undefined","resolveManifestPath","relative","startsWith","mkdirp","writeFile"],"sources":["../../../lib/extension/manifest.js"],"sourcesContent":["/**\n * Module containing {@link Manifest} which handles reading & writing of extension config files.\n */\n\nimport B from 'bluebird';\nimport glob from 'glob';\nimport {env, fs} from '@appium/support';\nimport _ from 'lodash';\nimport path from 'path';\nimport YAML from 'yaml';\nimport {DRIVER_TYPE, PLUGIN_TYPE} from '../constants';\nimport log from '../logger';\nimport {INSTALL_TYPE_NPM} from './extension-config';\nimport {packageDidChange} from './package-changed';\n\n/**\n * Current configuration schema revision!\n */\nconst CONFIG_SCHEMA_REV = 2;\n\n/**\n * The name of the prop (`drivers`) used in `extensions.yaml` for drivers.\n * @type {`${typeof DRIVER_TYPE}s`}\n */\nconst CONFIG_DATA_DRIVER_KEY = `${DRIVER_TYPE}s`;\n\n/**\n * The name of the prop (`plugins`) used in `extensions.yaml` for plugins.\n * @type {`${typeof PLUGIN_TYPE}s`}\n */\nconst CONFIG_DATA_PLUGIN_KEY = `${PLUGIN_TYPE}s`;\n\n/**\n * @type {Readonly<ManifestData>}\n */\nconst INITIAL_MANIFEST_DATA = Object.freeze({\n [CONFIG_DATA_DRIVER_KEY]: Object.freeze({}),\n [CONFIG_DATA_PLUGIN_KEY]: Object.freeze({}),\n schemaRev: CONFIG_SCHEMA_REV,\n});\n\n/**\n * Given a `package.json` return `true` if it represents an Appium Extension (either a driver or plugin).\n *\n * The `package.json` must have an `appium` property which is an object.\n * @param {any} value\n * @returns {value is ExtPackageJson<ExtensionType>}\n */\nfunction isExtension(value) {\n return (\n _.isPlainObject(value) &&\n _.isPlainObject(value.appium) &&\n _.isString(value.name) &&\n _.isString(value.version)\n );\n}\n/**\n * Given a `package.json`, return `true` if it represents an Appium Driver.\n *\n * To be considered a driver, a `package.json` must have a fields\n * `appium.driverName`, `appium.automationName` and `appium.platformNames`.\n * @param {any} value - Value to test\n * @returns {value is ExtPackageJson<DriverType>}\n */\nfunction isDriver(value) {\n return (\n isExtension(value) &&\n _.isString(_.get(value, 'appium.driverName')) &&\n _.isString(_.get(value, 'appium.automationName')) &&\n _.isArray(_.get(value, 'appium.platformNames'))\n );\n}\n\n/**\n * Given a `package.json`, return `true` if it represents an Appium Plugin.\n *\n * To be considered a plugin, a `package.json` must have an `appium.pluginName` field.\n * @param {any} value - Value to test\n * @returns {value is ExtPackageJson<PluginType>}\n */\nfunction isPlugin(value) {\n return isExtension(value) && _.isString(_.get(value, 'appium.pluginName'));\n}\n\n/**\n * Handles reading & writing of extension config files.\n *\n * Only one instance of this class exists per value of `APPIUM_HOME`.\n */\nexport class Manifest {\n /**\n * The entire contents of a parsed YAML extension config file.\n *\n * Contains proxies for automatic persistence on disk\n * @type {ManifestData}\n * @private\n */\n _data;\n\n /**\n * Path to `APPIUM_HOME`.\n * @private\n * @type {Readonly<string>}\n */\n _appiumHome;\n\n /**\n * Path to `extensions.yaml`\n * @type {string}\n * Not set until {@link Manifest.read} is called.\n */\n _manifestPath;\n\n /**\n * Helps avoid writing multiple times.\n *\n * If this is `undefined`, calling {@link Manifest.write} will cause it to be\n * set to a `Promise`. When the call to `write()` is complete, the `Promise`\n * will resolve and then this value will be set to `undefined`. Concurrent calls\n * made while this value is a `Promise` will return the `Promise` itself.\n * @private\n * @type {Promise<boolean>|undefined}\n */\n _writing;\n\n /**\n * Helps avoid reading multiple times.\n *\n * If this is `undefined`, calling {@link Manifest.read} will cause it to be\n * set to a `Promise`. When the call to `read()` is complete, the `Promise`\n * will resolve and then this value will be set to `undefined`. Concurrent calls\n * made while this value is a `Promise` will return the `Promise` itself.\n * @private\n * @type {Promise<void>|undefined}\n */\n _reading;\n\n /**\n * Sets internal data to a fresh clone of {@link INITIAL_MANIFEST_DATA}\n *\n * Use {@link Manifest.getInstance} instead.\n * @param {string} appiumHome\n * @private\n */\n constructor(appiumHome) {\n this._appiumHome = appiumHome;\n this._data = _.cloneDeep(INITIAL_MANIFEST_DATA);\n }\n\n /**\n * Returns a new or existing {@link Manifest} instance, based on the value of `appiumHome`.\n *\n * Maintains one instance per value of `appiumHome`.\n * @param {string} appiumHome - Path to `APPIUM_HOME`\n * @returns {Manifest}\n */\n static getInstance = _.memoize(function _getInstance(appiumHome) {\n return new Manifest(appiumHome);\n });\n\n /**\n * Searches `APPIUM_HOME` for installed extensions and adds them to the manifest.\n * @returns {Promise<boolean>} `true` if any extensions were added, `false` otherwise.\n */\n async syncWithInstalledExtensions() {\n // this could be parallelized, but we can't use fs.walk as an async iterator\n let didChange = false;\n\n /**\n * Listener for the `match` event of a `glob` instance\n * @param {string} filepath - Path to a `package.json`\n * @returns {Promise<void>}\n */\n const onMatch = async (filepath) => {\n try {\n const pkg = JSON.parse(await fs.readFile(filepath, 'utf8'));\n if (isDriver(pkg) || isPlugin(pkg)) {\n const changed = this.addExtensionFromPackage(pkg, filepath);\n didChange = didChange || changed;\n }\n } catch {}\n };\n\n /**\n * A list of `Promise`s which read `package.json` files looking for Appium extensions.\n * @type {Promise<void>[]}\n */\n const queue = [\n // look at `package.json` in `APPIUM_HOME` only\n onMatch(path.join(this._appiumHome, 'package.json')),\n ];\n\n // add dependencies to the queue\n await new B((resolve, reject) => {\n glob(\n 'node_modules/{*,@*/*}/package.json',\n {cwd: this._appiumHome, silent: true, absolute: true},\n // eslint-disable-next-line promise/prefer-await-to-callbacks\n (err) => {\n if (err) {\n reject(err);\n }\n resolve();\n }\n )\n .on('error', reject)\n .on('match', (filepath) => {\n queue.push(onMatch(filepath));\n });\n });\n\n // wait for everything to finish\n await B.all(queue);\n\n return didChange;\n }\n\n /**\n * Returns `true` if driver with name `name` is registered.\n * @param {string} name - Driver name\n * @returns {boolean}\n */\n hasDriver(name) {\n return Boolean(this._data.drivers[name]);\n }\n\n /**\n * Returns `true` if plugin with name `name` is registered.\n * @param {string} name - Plugin name\n * @returns {boolean}\n */\n hasPlugin(name) {\n return Boolean(this._data.plugins[name]);\n }\n\n /**\n * Given a path to a `package.json`, add it as either a driver or plugin to the manifest.\n *\n * Will _not_ overwrite existing entries.\n * @template {ExtensionType} ExtType\n * @param {ExtPackageJson<ExtType>} pkgJson\n * @param {string} pkgPath\n * @returns {boolean} - `true` upon success, `false` if the extension is already registered.\n */\n addExtensionFromPackage(pkgJson, pkgPath) {\n const extensionPath = path.dirname(pkgPath);\n\n /**\n * @type {InternalMetadata}\n */\n const internal = {\n pkgName: pkgJson.name,\n version: pkgJson.version,\n appiumVersion: pkgJson.peerDependencies?.appium,\n installType: INSTALL_TYPE_NPM,\n installSpec: `${pkgJson.name}@${pkgJson.version}`,\n };\n\n if (isDriver(pkgJson)) {\n if (!this.hasDriver(pkgJson.appium.driverName)) {\n this.addExtension(DRIVER_TYPE, pkgJson.appium.driverName, {\n ..._.omit(pkgJson.appium, 'driverName'),\n ...internal,\n });\n return true;\n }\n return false;\n } else if (isPlugin(pkgJson)) {\n if (!this.hasPlugin(pkgJson.appium.pluginName)) {\n this.addExtension(PLUGIN_TYPE, pkgJson.appium.pluginName, {\n ..._.omit(pkgJson.appium, 'pluginName'),\n ...internal,\n });\n return true;\n }\n return false;\n } else {\n throw new TypeError(\n `The extension in ${extensionPath} is neither a valid driver nor a valid plugin.`\n );\n }\n }\n\n /**\n * Adds an extension to the manifest as was installed by the `appium` CLI. The\n * `extData`, `extType`, and `extName` have already been determined.\n *\n * See {@link Manifest.addExtensionFromPackage} for adding an extension from an on-disk package.\n * @template {ExtensionType} ExtType\n * @param {ExtType} extType - `driver` or `plugin`\n * @param {string} extName - Name of extension\n * @param {ExtManifest<ExtType>} extData - Extension metadata\n * @returns {ExtManifest<ExtType>} A clone of `extData`, potentially with a mutated `appiumVersion` field\n */\n addExtension(extType, extName, extData) {\n const data = _.clone(extData);\n this._data[`${extType}s`][extName] = data;\n return data;\n }\n\n /**\n * Returns the APPIUM_HOME path\n */\n get appiumHome() {\n return this._appiumHome;\n }\n\n /**\n * Returns the path to the manifest file\n */\n get manifestPath() {\n return this._manifestPath;\n }\n\n /**\n * Returns extension data for a particular type.\n *\n * @template {ExtensionType} ExtType\n * @param {ExtType} extType\n * @returns {ExtRecord<ExtType>}\n */\n getExtensionData(extType) {\n return this._data[/** @type {string} */ (`${extType}s`)];\n }\n\n /**\n * Reads manifest from disk and _overwrites_ the internal data.\n *\n * If the manifest does not exist on disk, an {@link INITIAL_MANIFEST_DATA \"empty\"} manifest file will be created.\n *\n * If `APPIUM_HOME` contains a `package.json` with an `appium` dependency, then a hash of the `package.json` will be taken. If this hash differs from the last hash, the contents of `APPIUM_HOME/node_modules` will be scanned for extensions that may have been installed outside of the `appium` CLI. Any found extensions will be added to the manifest file, and if so, the manifest file will be written to disk.\n *\n * Only one read operation should happen at a time. This is controlled via the {@link Manifest._reading} property.\n * @returns {Promise<ManifestData>} The data\n */\n async read() {\n if (this._reading) {\n await this._reading;\n return this._data;\n }\n\n this._reading = (async () => {\n /** @type {ManifestData} */\n let data;\n let isNewFile = false;\n await this._setManifestPath();\n try {\n log.debug(`Reading ${this._manifestPath}...`);\n const yaml = await fs.readFile(this._manifestPath, 'utf8');\n data = YAML.parse(yaml);\n log.debug(`Parsed manifest file: ${JSON.stringify(data, null, 2)}`);\n } catch (err) {\n if (err.code === 'ENOENT') {\n data = _.cloneDeep(INITIAL_MANIFEST_DATA);\n isNewFile = true;\n } else {\n if (this._manifestPath) {\n throw new Error(\n `Appium had trouble loading the extension installation ` +\n `cache file (${this._manifestPath}). It may be invalid YAML. Specific error: ${err.message}`\n );\n } else {\n throw new Error(\n `Appium encountered an unknown problem. Specific error: ${err.message}`\n );\n }\n }\n }\n\n this._data = data;\n let installedExtensionsChanged = false;\n if (\n (await env.hasAppiumDependency(this.appiumHome)) &&\n (await packageDidChange(this.appiumHome))\n ) {\n installedExtensionsChanged = await this.syncWithInstalledExtensions();\n }\n\n if (isNewFile || installedExtensionsChanged) {\n await this.write();\n }\n })();\n try {\n await this._reading;\n return this._data;\n } finally {\n this._reading = undefined;\n }\n }\n\n /**\n * Ensures {@link Manifest._manifestPath} is set.\n *\n * Creates the directory if necessary.\n * @private\n * @returns {Promise<string>}\n */\n async _setManifestPath() {\n if (!this._manifestPath) {\n this._manifestPath = await env.resolveManifestPath(this._appiumHome);\n\n /* istanbul ignore if */\n if (path.relative(this._appiumHome, this._manifestPath).startsWith('.')) {\n throw new Error(\n `Mismatch between location of APPIUM_HOME and manifest file. APPIUM_HOME: ${this.appiumHome}, manifest file: ${this._manifestPath}`\n );\n }\n }\n\n return this._manifestPath;\n }\n\n /**\n * Writes the data if it need s writing.\n *\n * If the `schemaRev` prop needs updating, the file will be written.\n *\n * @todo If this becomes too much of a bottleneck, throttle it.\n * @returns {Promise<boolean>} Whether the data was written\n */\n async write() {\n if (this._writing) {\n return this._writing;\n }\n this._writing = (async () => {\n await this._setManifestPath();\n try {\n await fs.mkdirp(path.dirname(this._manifestPath));\n } catch (err) {\n throw new Error(\n `Appium could not create the directory for the manifest file: ${path.dirname(\n this._manifestPath\n )}. Original error: ${err.message}`\n );\n }\n try {\n await fs.writeFile(this._manifestPath, YAML.stringify(this._data), 'utf8');\n return true;\n } catch (err) {\n throw new Error(\n `Appium could not write to manifest at ${this._manifestPath} using APPIUM_HOME ${this._appiumHome}. ` +\n `Please ensure it is writable. Original error: ${err.message}`\n );\n }\n })();\n try {\n return await this._writing;\n } finally {\n this._writing = undefined;\n }\n }\n}\n\n/**\n * Type of the string referring to a driver (typically as a key or type string)\n * @typedef {import('@appium/types').DriverType} DriverType\n */\n\n/**\n * Type of the string referring to a plugin (typically as a key or type string)\n * @typedef {import('@appium/types').PluginType} PluginType\n */\n\n/**\n * @typedef SyncWithInstalledExtensionsOpts\n * @property {number} [depthLimit] - Maximum depth to recurse into subdirectories\n */\n\n/**\n * @typedef {import('appium/types').ManifestData} ManifestData\n * @typedef {import('appium/types').InternalMetadata} InternalMetadata\n */\n\n/**\n * @template T\n * @typedef {import('appium/types').ExtPackageJson<T>} ExtPackageJson\n */\n\n/**\n * @template T\n * @typedef {import('appium/types').ExtManifest<T>} ExtManifest\n */\n\n/**\n * @template T\n * @typedef {import('appium/types').ExtRecord<T>} ExtRecord\n */\n\n/**\n * Either `driver` or `plugin` rn\n * @typedef {import('@appium/types').ExtensionType} ExtensionType\n */\n"],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -19,6 +17,8 @@ var _constants = require("../constants");
|
|
|
19
17
|
|
|
20
18
|
var _logger = _interopRequireDefault(require("../logger"));
|
|
21
19
|
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
22
|
async function packageDidChange(appiumHome) {
|
|
23
23
|
const hashFilename = _path.default.join(appiumHome, _constants.PKG_HASHFILE_RELATIVE_PATH);
|
|
24
24
|
|
|
@@ -63,4 +63,4 @@ async function packageDidChange(appiumHome) {
|
|
|
63
63
|
|
|
64
64
|
return isChanged;
|
|
65
65
|
}
|
|
66
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYWNrYWdlRGlkQ2hhbmdlIiwiYXBwaXVtSG9tZSIsImhhc2hGaWxlbmFtZSIsInBhdGgiLCJqb2luIiwiUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgiLCJpc0NoYW5nZWQiLCJ3cml0ZUhhc2giLCJoYXNoIiwib2xkSGFzaCIsImhhc2hGaWxlbmFtZURpciIsImRpcm5hbWUiLCJsb2ciLCJkZWJ1ZyIsImZzIiwibWtkaXJwIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwiaXNQYWNrYWdlQ2hhbmdlZCIsImN3ZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vcGFja2FnZS1jaGFuZ2VkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZnN9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2lzUGFja2FnZUNoYW5nZWR9IGZyb20gJ3BhY2thZ2UtY2hhbmdlZCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7UEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEh9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBleHRlbnNpb25zIGhhdmUgY2hhbmdlZCwgYW5kIHVwZGF0ZXMgYSBoYXNoIHRoZSBgcGFja2FnZS5qc29uYCBpbiBgYXBwaXVtSG9tZWAgaWYgc28uXG4gKlxuICogSWYgdGhleSBoYXZlLCB3ZSBuZWVkIHRvIHN5bmMgdGhlbSB3aXRoIHRoZSBgZXh0ZW5zaW9ucy55YW1sYCBtYW5pZmVzdC5cbiAqXG4gKiBfV2FybmluZzogdGhpcyBtYWtlcyBhIGJsb2NraW5nIGNhbGwgdG8gYHdyaXRlRmlsZVN5bmNgLl9cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gYHRydWVgIGlmIGBwYWNrYWdlLmpzb25gIGBhcHBpdW1Ib21lYCBjaGFuZ2VkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWNrYWdlRGlkQ2hhbmdlKGFwcGl1bUhvbWUpIHtcbiAgY29uc3QgaGFzaEZpbGVuYW1lID0gcGF0aC5qb2luKGFwcGl1bUhvbWUsIFBLR19IQVNIRklMRV9SRUxBVElWRV9QQVRIKTtcblxuICAvLyBYWFg6IHRoZSB0eXBlcyBpbiBgcGFja2FnZS1jaGFuZ2VkYCBzZWVtIHRvIGJlIHdyb25nLlxuXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IGlzQ2hhbmdlZDtcbiAgLyoqIEB0eXBlIHsoKSA9PiB2b2lkfSAqL1xuICBsZXQgd3JpdGVIYXNoO1xuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgbGV0IGhhc2g7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH0gKi9cbiAgbGV0IG9sZEhhc2g7XG5cbiAgLy8gZmlyc3QgbWtkaXJwIHRoZSB0YXJnZXQgZGlyLlxuICBjb25zdCBoYXNoRmlsZW5hbWVEaXIgPSBwYXRoLmRpcm5hbWUoaGFzaEZpbGVuYW1lKTtcbiAgbG9nLmRlYnVnKGBDcmVhdGluZyBoYXNoIGZpbGUgZGlyZWN0b3J5OiAke2hhc2hGaWxlbmFtZURpcn1gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5ta2RpcnAoaGFzaEZpbGVuYW1lRGlyKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEFwcGl1bSBjb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIGhhc2ggZmlsZTogJHtoYXNoRmlsZW5hbWVEaXJ9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gXG4gICAgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgKHtpc0NoYW5nZWQsIHdyaXRlSGFzaCwgb2xkSGFzaCwgaGFzaH0gPSBhd2FpdCBpc1BhY2thZ2VDaGFuZ2VkKHtcbiAgICAgIGN3ZDogYXBwaXVtSG9tZSxcbiAgICAgIGhhc2hGaWxlbmFtZTogUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgsXG4gICAgfSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0NoYW5nZWQpIHtcbiAgICB0cnkge1xuICAgICAgd3JpdGVIYXNoKCk7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBVcGRhdGVkIGhhc2ggb2YgJHthcHBpdW1Ib21lfS9wYWNrYWdlLmpzb24gZnJvbTogJHtvbGRIYXNoID8/
|
|
66
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYWNrYWdlRGlkQ2hhbmdlIiwiYXBwaXVtSG9tZSIsImhhc2hGaWxlbmFtZSIsInBhdGgiLCJqb2luIiwiUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgiLCJpc0NoYW5nZWQiLCJ3cml0ZUhhc2giLCJoYXNoIiwib2xkSGFzaCIsImhhc2hGaWxlbmFtZURpciIsImRpcm5hbWUiLCJsb2ciLCJkZWJ1ZyIsImZzIiwibWtkaXJwIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwiaXNQYWNrYWdlQ2hhbmdlZCIsImN3ZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vcGFja2FnZS1jaGFuZ2VkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZnN9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2lzUGFja2FnZUNoYW5nZWR9IGZyb20gJ3BhY2thZ2UtY2hhbmdlZCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7UEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEh9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBleHRlbnNpb25zIGhhdmUgY2hhbmdlZCwgYW5kIHVwZGF0ZXMgYSBoYXNoIHRoZSBgcGFja2FnZS5qc29uYCBpbiBgYXBwaXVtSG9tZWAgaWYgc28uXG4gKlxuICogSWYgdGhleSBoYXZlLCB3ZSBuZWVkIHRvIHN5bmMgdGhlbSB3aXRoIHRoZSBgZXh0ZW5zaW9ucy55YW1sYCBtYW5pZmVzdC5cbiAqXG4gKiBfV2FybmluZzogdGhpcyBtYWtlcyBhIGJsb2NraW5nIGNhbGwgdG8gYHdyaXRlRmlsZVN5bmNgLl9cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gYHRydWVgIGlmIGBwYWNrYWdlLmpzb25gIGBhcHBpdW1Ib21lYCBjaGFuZ2VkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWNrYWdlRGlkQ2hhbmdlKGFwcGl1bUhvbWUpIHtcbiAgY29uc3QgaGFzaEZpbGVuYW1lID0gcGF0aC5qb2luKGFwcGl1bUhvbWUsIFBLR19IQVNIRklMRV9SRUxBVElWRV9QQVRIKTtcblxuICAvLyBYWFg6IHRoZSB0eXBlcyBpbiBgcGFja2FnZS1jaGFuZ2VkYCBzZWVtIHRvIGJlIHdyb25nLlxuXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IGlzQ2hhbmdlZDtcbiAgLyoqIEB0eXBlIHsoKSA9PiB2b2lkfSAqL1xuICBsZXQgd3JpdGVIYXNoO1xuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgbGV0IGhhc2g7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH0gKi9cbiAgbGV0IG9sZEhhc2g7XG5cbiAgLy8gZmlyc3QgbWtkaXJwIHRoZSB0YXJnZXQgZGlyLlxuICBjb25zdCBoYXNoRmlsZW5hbWVEaXIgPSBwYXRoLmRpcm5hbWUoaGFzaEZpbGVuYW1lKTtcbiAgbG9nLmRlYnVnKGBDcmVhdGluZyBoYXNoIGZpbGUgZGlyZWN0b3J5OiAke2hhc2hGaWxlbmFtZURpcn1gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5ta2RpcnAoaGFzaEZpbGVuYW1lRGlyKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEFwcGl1bSBjb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIGhhc2ggZmlsZTogJHtoYXNoRmlsZW5hbWVEaXJ9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gXG4gICAgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgKHtpc0NoYW5nZWQsIHdyaXRlSGFzaCwgb2xkSGFzaCwgaGFzaH0gPSBhd2FpdCBpc1BhY2thZ2VDaGFuZ2VkKHtcbiAgICAgIGN3ZDogYXBwaXVtSG9tZSxcbiAgICAgIGhhc2hGaWxlbmFtZTogUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgsXG4gICAgfSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0NoYW5nZWQpIHtcbiAgICB0cnkge1xuICAgICAgd3JpdGVIYXNoKCk7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBVcGRhdGVkIGhhc2ggb2YgJHthcHBpdW1Ib21lfS9wYWNrYWdlLmpzb24gZnJvbTogJHtvbGRIYXNoID8/ICcobm9uZSknfSB0bzogJHtoYXNofWBcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBcHBpdW0gY291bGQgbm90IHdyaXRlIGhhc2ggZmlsZTogJHtoYXNoRmlsZW5hbWVEaXJ9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NoYW5nZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBV08sZUFBZUEsZ0JBQWYsQ0FBZ0NDLFVBQWhDLEVBQTRDO0VBQ2pELE1BQU1DLFlBQVksR0FBR0MsYUFBQSxDQUFLQyxJQUFMLENBQVVILFVBQVYsRUFBc0JJLHFDQUF0QixDQUFyQjs7RUFLQSxJQUFJQyxTQUFKO0VBRUEsSUFBSUMsU0FBSjtFQUVBLElBQUlDLElBQUo7RUFFQSxJQUFJQyxPQUFKOztFQUdBLE1BQU1DLGVBQWUsR0FBR1AsYUFBQSxDQUFLUSxPQUFMLENBQWFULFlBQWIsQ0FBeEI7O0VBQ0FVLGVBQUEsQ0FBSUMsS0FBSixDQUFXLGlDQUFnQ0gsZUFBZ0IsRUFBM0Q7O0VBQ0EsSUFBSTtJQUNGLE1BQU1JLFdBQUEsQ0FBR0MsTUFBSCxDQUFVTCxlQUFWLENBQU47RUFDRCxDQUZELENBRUUsT0FBT00sR0FBUCxFQUFZO0lBQ1osTUFBTSxJQUFJQyxLQUFKLENBQ0gsd0RBQXVEUCxlQUFnQixxQkFBb0JNLEdBQUcsQ0FBQ0UsT0FBUSxFQURwRyxDQUFOO0VBR0Q7O0VBRUQsSUFBSTtJQUNGLENBQUM7TUFBQ1osU0FBRDtNQUFZQyxTQUFaO01BQXVCRSxPQUF2QjtNQUFnQ0Q7SUFBaEMsSUFBd0MsTUFBTSxJQUFBVyxnQ0FBQSxFQUFpQjtNQUM5REMsR0FBRyxFQUFFbkIsVUFEeUQ7TUFFOURDLFlBQVksRUFBRUc7SUFGZ0QsQ0FBakIsQ0FBL0M7RUFJRCxDQUxELENBS0UsTUFBTTtJQUNOLE9BQU8sSUFBUDtFQUNEOztFQUVELElBQUlDLFNBQUosRUFBZTtJQUNiLElBQUk7TUFDRkMsU0FBUzs7TUFDVEssZUFBQSxDQUFJQyxLQUFKLENBQ0csbUJBQWtCWixVQUFXLHVCQUFzQlEsT0FBTyxJQUFJLFFBQVMsUUFBT0QsSUFBSyxFQUR0RjtJQUdELENBTEQsQ0FLRSxPQUFPUSxHQUFQLEVBQVk7TUFDWixNQUFNLElBQUlDLEtBQUosQ0FDSCxxQ0FBb0NQLGVBQWdCLHFCQUFvQk0sR0FBRyxDQUFDRSxPQUFRLEVBRGpGLENBQU47SUFHRDtFQUNGOztFQUVELE9BQU9aLFNBQVA7QUFDRCJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-changed.js","names":["packageDidChange","appiumHome","hashFilename","path","join","PKG_HASHFILE_RELATIVE_PATH","isChanged","writeHash","hash","oldHash","hashFilenameDir","dirname","log","debug","fs","mkdirp","err","Error","message","isPackageChanged","cwd"],"sources":["../../../lib/extension/package-changed.js"],"sourcesContent":["import {fs} from '@appium/support';\nimport {isPackageChanged} from 'package-changed';\nimport path from 'path';\nimport {PKG_HASHFILE_RELATIVE_PATH} from '../constants';\nimport log from '../logger';\n\n/**\n * Determines if extensions have changed, and updates a hash the `package.json` in `appiumHome` if so.\n *\n * If they have, we need to sync them with the `extensions.yaml` manifest.\n *\n * _Warning: this makes a blocking call to `writeFileSync`._\n * @param {string} appiumHome\n * @returns {Promise<boolean>} `true` if `package.json` `appiumHome` changed\n */\nexport async function packageDidChange(appiumHome) {\n const hashFilename = path.join(appiumHome, PKG_HASHFILE_RELATIVE_PATH);\n\n // XXX: the types in `package-changed` seem to be wrong.\n\n /** @type {boolean} */\n let isChanged;\n /** @type {() => void} */\n let writeHash;\n /** @type {string} */\n let hash;\n /** @type {string|undefined} */\n let oldHash;\n\n // first mkdirp the target dir.\n const hashFilenameDir = path.dirname(hashFilename);\n log.debug(`Creating hash file directory: ${hashFilenameDir}`);\n try {\n await fs.mkdirp(hashFilenameDir);\n } catch (err) {\n throw new Error(\n `Appium could not create the directory for hash file: ${hashFilenameDir}. Original error: ${err.message}`\n );\n }\n\n try {\n ({isChanged, writeHash, oldHash, hash} = await isPackageChanged({\n cwd: appiumHome,\n hashFilename: PKG_HASHFILE_RELATIVE_PATH,\n }));\n } catch {\n return true;\n }\n\n if (isChanged) {\n try {\n writeHash();\n log.debug(\n `Updated hash of ${appiumHome}/package.json from: ${oldHash ?? '(none)'} to: ${hash}`\n );\n } catch (err) {\n throw new Error(\n `Appium could not write hash file: ${hashFilenameDir}. Original error: ${err.message}`\n );\n }\n }\n\n return isChanged;\n}\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;AAWO,eAAeA,gBAAf,CAAgCC,UAAhC,EAA4C;EACjD,MAAMC,YAAY,GAAGC,aAAA,CAAKC,IAAL,CAAUH,UAAV,EAAsBI,qCAAtB,CAArB;;EAKA,IAAIC,SAAJ;EAEA,IAAIC,SAAJ;EAEA,IAAIC,IAAJ;EAEA,IAAIC,OAAJ;;EAGA,MAAMC,eAAe,GAAGP,aAAA,CAAKQ,OAAL,CAAaT,YAAb,CAAxB;;EACAU,eAAA,CAAIC,KAAJ,CAAW,iCAAgCH,eAAgB,EAA3D;;EACA,IAAI;IACF,MAAMI,WAAA,CAAGC,MAAH,CAAUL,eAAV,CAAN;EACD,CAFD,CAEE,OAAOM,GAAP,EAAY;IACZ,MAAM,IAAIC,KAAJ,CACH,wDAAuDP,eAAgB,qBAAoBM,GAAG,CAACE,OAAQ,EADpG,CAAN;EAGD;;EAED,IAAI;IACF,CAAC;MAACZ,SAAD;MAAYC,SAAZ;MAAuBE,OAAvB;MAAgCD;IAAhC,IAAwC,MAAM,IAAAW,gCAAA,EAAiB;MAC9DC,GAAG,EAAEnB,UADyD;MAE9DC,YAAY,EAAEG;IAFgD,CAAjB,CAA/C;EAID,CALD,CAKE,MAAM;IACN,OAAO,IAAP;EACD;;EAED,IAAIC,SAAJ,EAAe;IACb,IAAI;MACFC,SAAS;;MACTK,eAAA,CAAIC,KAAJ,CACG,mBAAkBZ,UAAW,uBAAsBQ,OAAO,IAAI,QAAS,QAAOD,IAAK,EADtF;IAGD,CALD,CAKE,OAAOQ,GAAP,EAAY;MACZ,MAAM,IAAIC,KAAJ,CACH,qCAAoCP,eAAgB,qBAAoBM,GAAG,CAACE,OAAQ,EADjF,CAAN;IAGD;EACF;;EAED,OAAOZ,SAAP;AACD"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -17,6 +15,8 @@ var _logger = _interopRequireDefault(require("../logger"));
|
|
|
17
15
|
|
|
18
16
|
var _constants = require("../constants");
|
|
19
17
|
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
20
|
class PluginConfig extends _extensionConfig.ExtensionConfig {
|
|
21
21
|
static _instances = new WeakMap();
|
|
22
22
|
|
|
@@ -75,4 +75,4 @@ class PluginConfig extends _extensionConfig.ExtensionConfig {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
exports.PluginConfig = PluginConfig;
|
|
78
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQbHVnaW5Db25maWciLCJFeHRlbnNpb25Db25maWciLCJfaW5zdGFuY2VzIiwiV2Vha01hcCIsImNvbnN0cnVjdG9yIiwibWFuaWZlc3QiLCJQTFVHSU5fVFlQRSIsInZhbGlkYXRlIiwiX3ZhbGlkYXRlIiwiZ2V0RXh0ZW5zaW9uRGF0YSIsImNyZWF0ZSIsImluc3RhbmNlIiwiZ2V0SW5zdGFuY2UiLCJFcnJvciIsImFwcGl1bUhvbWUiLCJzZXQiLCJnZXQiLCJleHRlbnNpb25EZXNjIiwicGx1Z2luTmFtZSIsInZlcnNpb24iLCJwcmludCIsImFjdGl2ZU5hbWVzIiwicGx1Z2luTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwiaW5zdGFsbGVkRXh0ZW5zaW9ucyIsIl8iLCJpc0VtcHR5IiwibG9nIiwiaW5mbyIsInBsdWdpbkRhdGEiLCJ0b1BhaXJzIiwiYWN0aXZlVHh0IiwiaW5jbHVkZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXh0ZW5zaW9uL3BsdWdpbi1jb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7RXh0ZW5zaW9uQ29uZmlnfSBmcm9tICcuL2V4dGVuc2lvbi1jb25maWcnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtQTFVHSU5fVFlQRX0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZXh0ZW5kcyB7RXh0ZW5zaW9uQ29uZmlnPFBsdWdpblR5cGU+fVxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlcyB0byB7QGxpbmsgUGx1Z2luQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIGBNYW5pZmVzdGAgYW5kIHtAbGluayBFeHRlbnNpb25Db25maWd9IGhhdmUgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXA7IGVhY2ggYE1hbmlmZXN0YCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgYERyaXZlckNvbmZpZ2AgYW5kIGEgYFBsdWdpbkNvbmZpZ2A7IG5vIG1vcmUsIG5vIGxlc3MuXG4gICAqXG4gICAqIFRoaXMgdmFyaWFibGUgdHJhY2tzIHRoZSBgTWFuaWZlc3RgLXRvLWBQbHVnaW5Db25maWdgIHBvcnRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtXZWFrTWFwPE1hbmlmZXN0LFBsdWdpbkNvbmZpZz59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgX2luc3RhbmNlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgLyoqXG4gICAqIENhbGwge0BsaW5rIFBsdWdpbkNvbmZpZy5jcmVhdGV9IGluc3RlYWQuXG4gICAqXG4gICAqIEp1c3QgY2FsbHMgdGhlIHN1cGVyY2xhc3MnIGNvbnN0cnVjdG9yIHdpdGggdGhlIGNvcnJlY3QgZXh0ZW5zaW9uIHR5cGVcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtNYW5pZmVzdH0gbWFuaWZlc3QgLSBJTyBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1hbmlmZXN0KSB7XG4gICAgc3VwZXIoUExVR0lOX1RZUEUsIG1hbmlmZXN0KTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5fdmFsaWRhdGUodGhpcy5tYW5pZmVzdC5nZXRFeHRlbnNpb25EYXRhKFBMVUdJTl9UWVBFKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgUGx1Z2luQ29uZmlnfSBpbnN0YW5jZSBmb3IgYSB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdFxuICAgKiBAdGhyb3dzIElmIGBtYW5pZmVzdGAgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBgUGx1Z2luQ29uZmlnYFxuICAgKiBAcmV0dXJucyB7UGx1Z2luQ29uZmlnfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZShtYW5pZmVzdCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFBsdWdpbkNvbmZpZyhtYW5pZmVzdCk7XG4gICAgaWYgKFBsdWdpbkNvbmZpZy5nZXRJbnN0YW5jZShtYW5pZmVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1hbmlmZXN0IHdpdGggQVBQSVVNX0hPTUUgJHttYW5pZmVzdC5hcHBpdW1Ib21lfSBhbHJlYWR5IGhhcyBhIFBsdWdpbkNvbmZpZzsgdXNlIFBsdWdpbkNvbmZpZy5nZXRJbnN0YW5jZSgpIHRvIHJldHJpZXZlIGl0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIFBsdWdpbkNvbmZpZy5faW5zdGFuY2VzLnNldChtYW5pZmVzdCwgaW5zdGFuY2UpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgUGx1Z2luQ29uZmlnIGFzc29jaWF0ZWQgd2l0aCBhIE1hbmlmZXN0XG4gICAqIEBwYXJhbSB7TWFuaWZlc3R9IG1hbmlmZXN0XG4gICAqIEByZXR1cm5zIHtQbHVnaW5Db25maWd8dW5kZWZpbmVkfVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlKG1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIFBsdWdpbkNvbmZpZy5faW5zdGFuY2VzLmdldChtYW5pZmVzdCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpbk5hbWVcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1hbmlmZXN0PFBsdWdpblR5cGU+fSBwbHVnaW5EYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBleHRlbnNpb25EZXNjKHBsdWdpbk5hbWUsIHt2ZXJzaW9ufSkge1xuICAgIHJldHVybiBgJHtwbHVnaW5OYW1lfUAke3ZlcnNpb259YDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyhrZXlvZiBQbHVnaW5SZWNvcmQpW119IGFjdGl2ZU5hbWVzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcHJpbnQoYWN0aXZlTmFtZXMpIHtcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KHBsdWdpbk5hbWVzKSkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGBObyBwbHVnaW5zIGhhdmUgYmVlbiBpbnN0YWxsZWQuIFVzZSB0aGUgXCJhcHBpdW0gcGx1Z2luXCIgYCArXG4gICAgICAgICAgJ2NvbW1hbmQgdG8gaW5zdGFsbCB0aGUgb25lKHMpIHlvdSB3YW50IHRvIHVzZS4nXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKGBBdmFpbGFibGUgcGx1Z2luczpgKTtcbiAgICBmb3IgKGNvbnN0IFtwbHVnaW5OYW1lLCBwbHVnaW5EYXRhXSBvZiBfLnRvUGFpcnModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKSkge1xuICAgICAgY29uc3QgYWN0aXZlVHh0ID0gXy5pbmNsdWRlcyhhY3RpdmVOYW1lcywgcGx1Z2luTmFtZSkgPyAnIChBQ1RJVkUpJyA6ICcnO1xuICAgICAgbG9nLmluZm8oYCAgLSAke3RoaXMuZXh0ZW5zaW9uRGVzYyhwbHVnaW5OYW1lLCBwbHVnaW5EYXRhKX0ke2FjdGl2ZVR4dH1gKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KGFjdGl2ZU5hbWVzKSkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgICdObyBwbHVnaW5zIGFjdGl2YXRlZC4gVXNlIHRoZSAtLXVzZS1wbHVnaW5zIGZsYWcgd2l0aCBuYW1lcyBvZiBwbHVnaW5zIHRvIGFjdGl2YXRlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBQbHVnaW5Db25maWdPcHRpb25zXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi9leHRlbnNpb24tY29uZmlnJykuRXh0ZW5zaW9uTG9nRm59IFtsb2dGbl0gLSBPcHRpb25hbCBsb2dnaW5nIGZ1bmN0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5QbHVnaW5SZWNvcmR9IFBsdWdpblJlY29yZFxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpblR5cGV9IFBsdWdpblR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1ldGFkYXRhPFBsdWdpblR5cGU+
|
|
78
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQbHVnaW5Db25maWciLCJFeHRlbnNpb25Db25maWciLCJfaW5zdGFuY2VzIiwiV2Vha01hcCIsImNvbnN0cnVjdG9yIiwibWFuaWZlc3QiLCJQTFVHSU5fVFlQRSIsInZhbGlkYXRlIiwiX3ZhbGlkYXRlIiwiZ2V0RXh0ZW5zaW9uRGF0YSIsImNyZWF0ZSIsImluc3RhbmNlIiwiZ2V0SW5zdGFuY2UiLCJFcnJvciIsImFwcGl1bUhvbWUiLCJzZXQiLCJnZXQiLCJleHRlbnNpb25EZXNjIiwicGx1Z2luTmFtZSIsInZlcnNpb24iLCJwcmludCIsImFjdGl2ZU5hbWVzIiwicGx1Z2luTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwiaW5zdGFsbGVkRXh0ZW5zaW9ucyIsIl8iLCJpc0VtcHR5IiwibG9nIiwiaW5mbyIsInBsdWdpbkRhdGEiLCJ0b1BhaXJzIiwiYWN0aXZlVHh0IiwiaW5jbHVkZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXh0ZW5zaW9uL3BsdWdpbi1jb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7RXh0ZW5zaW9uQ29uZmlnfSBmcm9tICcuL2V4dGVuc2lvbi1jb25maWcnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtQTFVHSU5fVFlQRX0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZXh0ZW5kcyB7RXh0ZW5zaW9uQ29uZmlnPFBsdWdpblR5cGU+fVxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlcyB0byB7QGxpbmsgUGx1Z2luQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIGBNYW5pZmVzdGAgYW5kIHtAbGluayBFeHRlbnNpb25Db25maWd9IGhhdmUgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXA7IGVhY2ggYE1hbmlmZXN0YCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgYERyaXZlckNvbmZpZ2AgYW5kIGEgYFBsdWdpbkNvbmZpZ2A7IG5vIG1vcmUsIG5vIGxlc3MuXG4gICAqXG4gICAqIFRoaXMgdmFyaWFibGUgdHJhY2tzIHRoZSBgTWFuaWZlc3RgLXRvLWBQbHVnaW5Db25maWdgIHBvcnRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtXZWFrTWFwPE1hbmlmZXN0LFBsdWdpbkNvbmZpZz59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgX2luc3RhbmNlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgLyoqXG4gICAqIENhbGwge0BsaW5rIFBsdWdpbkNvbmZpZy5jcmVhdGV9IGluc3RlYWQuXG4gICAqXG4gICAqIEp1c3QgY2FsbHMgdGhlIHN1cGVyY2xhc3MnIGNvbnN0cnVjdG9yIHdpdGggdGhlIGNvcnJlY3QgZXh0ZW5zaW9uIHR5cGVcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtNYW5pZmVzdH0gbWFuaWZlc3QgLSBJTyBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1hbmlmZXN0KSB7XG4gICAgc3VwZXIoUExVR0lOX1RZUEUsIG1hbmlmZXN0KTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5fdmFsaWRhdGUodGhpcy5tYW5pZmVzdC5nZXRFeHRlbnNpb25EYXRhKFBMVUdJTl9UWVBFKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgUGx1Z2luQ29uZmlnfSBpbnN0YW5jZSBmb3IgYSB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdFxuICAgKiBAdGhyb3dzIElmIGBtYW5pZmVzdGAgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBgUGx1Z2luQ29uZmlnYFxuICAgKiBAcmV0dXJucyB7UGx1Z2luQ29uZmlnfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZShtYW5pZmVzdCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFBsdWdpbkNvbmZpZyhtYW5pZmVzdCk7XG4gICAgaWYgKFBsdWdpbkNvbmZpZy5nZXRJbnN0YW5jZShtYW5pZmVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1hbmlmZXN0IHdpdGggQVBQSVVNX0hPTUUgJHttYW5pZmVzdC5hcHBpdW1Ib21lfSBhbHJlYWR5IGhhcyBhIFBsdWdpbkNvbmZpZzsgdXNlIFBsdWdpbkNvbmZpZy5nZXRJbnN0YW5jZSgpIHRvIHJldHJpZXZlIGl0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIFBsdWdpbkNvbmZpZy5faW5zdGFuY2VzLnNldChtYW5pZmVzdCwgaW5zdGFuY2UpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgUGx1Z2luQ29uZmlnIGFzc29jaWF0ZWQgd2l0aCBhIE1hbmlmZXN0XG4gICAqIEBwYXJhbSB7TWFuaWZlc3R9IG1hbmlmZXN0XG4gICAqIEByZXR1cm5zIHtQbHVnaW5Db25maWd8dW5kZWZpbmVkfVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlKG1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIFBsdWdpbkNvbmZpZy5faW5zdGFuY2VzLmdldChtYW5pZmVzdCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpbk5hbWVcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1hbmlmZXN0PFBsdWdpblR5cGU+fSBwbHVnaW5EYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBleHRlbnNpb25EZXNjKHBsdWdpbk5hbWUsIHt2ZXJzaW9ufSkge1xuICAgIHJldHVybiBgJHtwbHVnaW5OYW1lfUAke3ZlcnNpb259YDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyhrZXlvZiBQbHVnaW5SZWNvcmQpW119IGFjdGl2ZU5hbWVzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcHJpbnQoYWN0aXZlTmFtZXMpIHtcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KHBsdWdpbk5hbWVzKSkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGBObyBwbHVnaW5zIGhhdmUgYmVlbiBpbnN0YWxsZWQuIFVzZSB0aGUgXCJhcHBpdW0gcGx1Z2luXCIgYCArXG4gICAgICAgICAgJ2NvbW1hbmQgdG8gaW5zdGFsbCB0aGUgb25lKHMpIHlvdSB3YW50IHRvIHVzZS4nXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKGBBdmFpbGFibGUgcGx1Z2luczpgKTtcbiAgICBmb3IgKGNvbnN0IFtwbHVnaW5OYW1lLCBwbHVnaW5EYXRhXSBvZiBfLnRvUGFpcnModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKSkge1xuICAgICAgY29uc3QgYWN0aXZlVHh0ID0gXy5pbmNsdWRlcyhhY3RpdmVOYW1lcywgcGx1Z2luTmFtZSkgPyAnIChBQ1RJVkUpJyA6ICcnO1xuICAgICAgbG9nLmluZm8oYCAgLSAke3RoaXMuZXh0ZW5zaW9uRGVzYyhwbHVnaW5OYW1lLCBwbHVnaW5EYXRhKX0ke2FjdGl2ZVR4dH1gKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KGFjdGl2ZU5hbWVzKSkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgICdObyBwbHVnaW5zIGFjdGl2YXRlZC4gVXNlIHRoZSAtLXVzZS1wbHVnaW5zIGZsYWcgd2l0aCBuYW1lcyBvZiBwbHVnaW5zIHRvIGFjdGl2YXRlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBQbHVnaW5Db25maWdPcHRpb25zXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi9leHRlbnNpb24tY29uZmlnJykuRXh0ZW5zaW9uTG9nRm59IFtsb2dGbl0gLSBPcHRpb25hbCBsb2dnaW5nIGZ1bmN0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5QbHVnaW5SZWNvcmR9IFBsdWdpblJlY29yZFxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpblR5cGV9IFBsdWdpblR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1ldGFkYXRhPFBsdWdpblR5cGU+fSBQbHVnaW5NZXRhZGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9tYW5pZmVzdCcpLk1hbmlmZXN0fSBNYW5pZmVzdFxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBS08sTUFBTUEsWUFBTixTQUEyQkMsZ0NBQTNCLENBQTJDO0VBVy9CLE9BQVZDLFVBQVUsR0FBRyxJQUFJQyxPQUFKLEVBQUg7O0VBU2pCQyxXQUFXLENBQUNDLFFBQUQsRUFBVztJQUNwQixNQUFNQyxzQkFBTixFQUFtQkQsUUFBbkI7RUFDRDs7RUFFYSxNQUFSRSxRQUFRLEdBQUc7SUFDZixPQUFPLE1BQU0sTUFBTUMsU0FBTixDQUFnQixLQUFLSCxRQUFMLENBQWNJLGdCQUFkLENBQStCSCxzQkFBL0IsQ0FBaEIsQ0FBYjtFQUNEOztFQVNZLE9BQU5JLE1BQU0sQ0FBQ0wsUUFBRCxFQUFXO0lBQ3RCLE1BQU1NLFFBQVEsR0FBRyxJQUFJWCxZQUFKLENBQWlCSyxRQUFqQixDQUFqQjs7SUFDQSxJQUFJTCxZQUFZLENBQUNZLFdBQWIsQ0FBeUJQLFFBQXpCLENBQUosRUFBd0M7TUFDdEMsTUFBTSxJQUFJUSxLQUFKLENBQ0gsNkJBQTRCUixRQUFRLENBQUNTLFVBQVcsNkVBRDdDLENBQU47SUFHRDs7SUFDRGQsWUFBWSxDQUFDRSxVQUFiLENBQXdCYSxHQUF4QixDQUE0QlYsUUFBNUIsRUFBc0NNLFFBQXRDOztJQUNBLE9BQU9BLFFBQVA7RUFDRDs7RUFPaUIsT0FBWEMsV0FBVyxDQUFDUCxRQUFELEVBQVc7SUFDM0IsT0FBT0wsWUFBWSxDQUFDRSxVQUFiLENBQXdCYyxHQUF4QixDQUE0QlgsUUFBNUIsQ0FBUDtFQUNEOztFQU9EWSxhQUFhLENBQUNDLFVBQUQsRUFBYTtJQUFDQztFQUFELENBQWIsRUFBd0I7SUFDbkMsT0FBUSxHQUFFRCxVQUFXLElBQUdDLE9BQVEsRUFBaEM7RUFDRDs7RUFPREMsS0FBSyxDQUFDQyxXQUFELEVBQWM7SUFDakIsTUFBTUMsV0FBVyxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWSxLQUFLQyxtQkFBakIsQ0FBcEI7O0lBRUEsSUFBSUMsZUFBQSxDQUFFQyxPQUFGLENBQVVMLFdBQVYsQ0FBSixFQUE0QjtNQUMxQk0sZUFBQSxDQUFJQyxJQUFKLENBQ0csMERBQUQsR0FDRSxnREFGSjs7TUFJQTtJQUNEOztJQUVERCxlQUFBLENBQUlDLElBQUosQ0FBVSxvQkFBVjs7SUFDQSxLQUFLLE1BQU0sQ0FBQ1gsVUFBRCxFQUFhWSxVQUFiLENBQVgsSUFBdUNKLGVBQUEsQ0FBRUssT0FBRixDQUFVLEtBQUtOLG1CQUFmLENBQXZDLEVBQTRFO01BQzFFLE1BQU1PLFNBQVMsR0FBR04sZUFBQSxDQUFFTyxRQUFGLENBQVdaLFdBQVgsRUFBd0JILFVBQXhCLElBQXNDLFdBQXRDLEdBQW9ELEVBQXRFOztNQUNBVSxlQUFBLENBQUlDLElBQUosQ0FBVSxPQUFNLEtBQUtaLGFBQUwsQ0FBbUJDLFVBQW5CLEVBQStCWSxVQUEvQixDQUEyQyxHQUFFRSxTQUFVLEVBQXZFO0lBQ0Q7O0lBRUQsSUFBSU4sZUFBQSxDQUFFQyxPQUFGLENBQVVOLFdBQVYsQ0FBSixFQUE0QjtNQUMxQk8sZUFBQSxDQUFJQyxJQUFKLENBQ0Usb0ZBREY7SUFHRDtFQUNGOztBQTNGK0MifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-config.js","names":["PluginConfig","ExtensionConfig","_instances","WeakMap","constructor","manifest","PLUGIN_TYPE","validate","_validate","getExtensionData","create","instance","getInstance","Error","appiumHome","set","get","extensionDesc","pluginName","version","print","activeNames","pluginNames","Object","keys","installedExtensions","_","isEmpty","log","info","pluginData","toPairs","activeTxt","includes"],"sources":["../../../lib/extension/plugin-config.js"],"sourcesContent":["import _ from 'lodash';\nimport {ExtensionConfig} from './extension-config';\nimport log from '../logger';\nimport {PLUGIN_TYPE} from '../constants';\n\n/**\n * @extends {ExtensionConfig<PluginType>}\n */\nexport class PluginConfig extends ExtensionConfig {\n /**\n * A mapping of {@link Manifest} instances to {@link PluginConfig} instances.\n *\n * `Manifest` and {@link ExtensionConfig} have a one-to-many relationship; each `Manifest` should be associated with a `DriverConfig` and a `PluginConfig`; no more, no less.\n *\n * This variable tracks the `Manifest`-to-`PluginConfig` portion.\n *\n * @type {WeakMap<Manifest,PluginConfig>}\n * @private\n */\n static _instances = new WeakMap();\n\n /**\n * Call {@link PluginConfig.create} instead.\n *\n * Just calls the superclass' constructor with the correct extension type\n * @private\n * @param {Manifest} manifest - IO object\n */\n constructor(manifest) {\n super(PLUGIN_TYPE, manifest);\n }\n\n async validate() {\n return await super._validate(this.manifest.getExtensionData(PLUGIN_TYPE));\n }\n\n /**\n * Creates a new {@link PluginConfig} instance for a {@link Manifest} instance.\n *\n * @param {Manifest} manifest\n * @throws If `manifest` already associated with a `PluginConfig`\n * @returns {PluginConfig}\n */\n static create(manifest) {\n const instance = new PluginConfig(manifest);\n if (PluginConfig.getInstance(manifest)) {\n throw new Error(\n `Manifest with APPIUM_HOME ${manifest.appiumHome} already has a PluginConfig; use PluginConfig.getInstance() to retrieve it.`\n );\n }\n PluginConfig._instances.set(manifest, instance);\n return instance;\n }\n\n /**\n * Returns a PluginConfig associated with a Manifest\n * @param {Manifest} manifest\n * @returns {PluginConfig|undefined}\n */\n static getInstance(manifest) {\n return PluginConfig._instances.get(manifest);\n }\n\n /**\n * @param {string} pluginName\n * @param {import('appium/types').ExtManifest<PluginType>} pluginData\n * @returns {string}\n */\n extensionDesc(pluginName, {version}) {\n return `${pluginName}@${version}`;\n }\n\n /**\n *\n * @param {(keyof PluginRecord)[]} activeNames\n * @returns {void}\n */\n print(activeNames) {\n const pluginNames = Object.keys(this.installedExtensions);\n\n if (_.isEmpty(pluginNames)) {\n log.info(\n `No plugins have been installed. Use the \"appium plugin\" ` +\n 'command to install the one(s) you want to use.'\n );\n return;\n }\n\n log.info(`Available plugins:`);\n for (const [pluginName, pluginData] of _.toPairs(this.installedExtensions)) {\n const activeTxt = _.includes(activeNames, pluginName) ? ' (ACTIVE)' : '';\n log.info(` - ${this.extensionDesc(pluginName, pluginData)}${activeTxt}`);\n }\n\n if (_.isEmpty(activeNames)) {\n log.info(\n 'No plugins activated. Use the --use-plugins flag with names of plugins to activate'\n );\n }\n }\n}\n\n/**\n * @typedef PluginConfigOptions\n * @property {import('./extension-config').ExtensionLogFn} [logFn] - Optional logging function\n */\n\n/**\n * @typedef {import('appium/types').PluginRecord} PluginRecord\n * @typedef {import('@appium/types').PluginType} PluginType\n * @typedef {import('appium/types').ExtMetadata<PluginType>} PluginMetadata\n * @typedef {import('./manifest').Manifest} Manifest\n */\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;AAKO,MAAMA,YAAN,SAA2BC,gCAA3B,CAA2C;EAW/B,OAAVC,UAAU,GAAG,IAAIC,OAAJ,EAAH;;EASjBC,WAAW,CAACC,QAAD,EAAW;IACpB,MAAMC,sBAAN,EAAmBD,QAAnB;EACD;;EAEa,MAARE,QAAQ,GAAG;IACf,OAAO,MAAM,MAAMC,SAAN,CAAgB,KAAKH,QAAL,CAAcI,gBAAd,CAA+BH,sBAA/B,CAAhB,CAAb;EACD;;EASY,OAANI,MAAM,CAACL,QAAD,EAAW;IACtB,MAAMM,QAAQ,GAAG,IAAIX,YAAJ,CAAiBK,QAAjB,CAAjB;;IACA,IAAIL,YAAY,CAACY,WAAb,CAAyBP,QAAzB,CAAJ,EAAwC;MACtC,MAAM,IAAIQ,KAAJ,CACH,6BAA4BR,QAAQ,CAACS,UAAW,6EAD7C,CAAN;IAGD;;IACDd,YAAY,CAACE,UAAb,CAAwBa,GAAxB,CAA4BV,QAA5B,EAAsCM,QAAtC;;IACA,OAAOA,QAAP;EACD;;EAOiB,OAAXC,WAAW,CAACP,QAAD,EAAW;IAC3B,OAAOL,YAAY,CAACE,UAAb,CAAwBc,GAAxB,CAA4BX,QAA5B,CAAP;EACD;;EAODY,aAAa,CAACC,UAAD,EAAa;IAACC;EAAD,CAAb,EAAwB;IACnC,OAAQ,GAAED,UAAW,IAAGC,OAAQ,EAAhC;EACD;;EAODC,KAAK,CAACC,WAAD,EAAc;IACjB,MAAMC,WAAW,GAAGC,MAAM,CAACC,IAAP,CAAY,KAAKC,mBAAjB,CAApB;;IAEA,IAAIC,eAAA,CAAEC,OAAF,CAAUL,WAAV,CAAJ,EAA4B;MAC1BM,eAAA,CAAIC,IAAJ,CACG,0DAAD,GACE,gDAFJ;;MAIA;IACD;;IAEDD,eAAA,CAAIC,IAAJ,CAAU,oBAAV;;IACA,KAAK,MAAM,CAACX,UAAD,EAAaY,UAAb,CAAX,IAAuCJ,eAAA,CAAEK,OAAF,CAAU,KAAKN,mBAAf,CAAvC,EAA4E;MAC1E,MAAMO,SAAS,GAAGN,eAAA,CAAEO,QAAF,CAAWZ,WAAX,EAAwBH,UAAxB,IAAsC,WAAtC,GAAoD,EAAtE;;MACAU,eAAA,CAAIC,IAAJ,CAAU,OAAM,KAAKZ,aAAL,CAAmBC,UAAnB,EAA+BY,UAA/B,CAA2C,GAAEE,SAAU,EAAvE;IACD;;IAED,IAAIN,eAAA,CAAEC,OAAF,CAAUN,WAAV,CAAJ,EAA4B;MAC1BO,eAAA,CAAIC,IAAJ,CACE,oFADF;IAGD;EACF;;AA3F+C"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -17,6 +15,8 @@ var _logger = _interopRequireDefault(require("./logger"));
|
|
|
17
15
|
|
|
18
16
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
19
17
|
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
20
|
const hubUri = config => {
|
|
21
21
|
const protocol = config.hubProtocol || 'http';
|
|
22
22
|
return `${protocol}://${config.hubHost}:${config.hubPort}`;
|
|
@@ -150,4 +150,4 @@ async function isAlreadyRegistered(configHolder) {
|
|
|
150
150
|
|
|
151
151
|
var _default = registerNode;
|
|
152
152
|
exports.default = _default;
|
|
153
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodWJVcmkiLCJjb25maWciLCJwcm90b2NvbCIsImh1YlByb3RvY29sIiwiaHViSG9zdCIsImh1YlBvcnQiLCJyZWdpc3Rlck5vZGUiLCJkYXRhIiwiYWRkciIsInBvcnQiLCJiYXNlUGF0aCIsImNvbmZpZ0ZpbGVQYXRoIiwiXyIsImlzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZSIsImVyciIsImxvZ2dlciIsImVycm9yIiwibWVzc2FnZSIsIkpTT04iLCJwYXJzZSIsImVycm9yQW5kVGhyb3ciLCJwb3N0UmVxdWVzdCIsInJlZ2lzdGVyVG9HcmlkIiwicG9zdE9wdGlvbnMiLCJjb25maWdIb2xkZXIiLCJzdGF0dXMiLCJheGlvcyIsIkVycm9yIiwiZGVidWciLCJjb25maWd1cmF0aW9uIiwiaGFzIiwicHJvcGVydHkiLCJ1cmwiLCJob3N0IiwiaWQiLCJyZWdSZXF1ZXN0IiwibWV0aG9kIiwicmVnaXN0ZXIiLCJyZWdpc3RlckN5Y2xlSW50ZXJ2YWwiLCJyZWdpc3RlckN5Y2xlIiwiaXNOYU4iLCJ3YXJuIiwiZmlyc3QiLCJzZXRJbnRlcnZhbCIsInJlZ2lzdGVyUmV0cnkiLCJpc0FscmVhZHlSZWdpc3RlcmVkIiwidGltZW91dCIsInN1Y2Nlc3MiLCJtc2ciXSwic291cmNlcyI6WyIuLi8uLi9saWIvZ3JpZC1yZWdpc3Rlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHtmc30gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgaHViVXJpID0gKGNvbmZpZykgPT4ge1xuICBjb25zdCBwcm90b2NvbCA9IGNvbmZpZy5odWJQcm90b2NvbCB8fCAnaHR0cCc7XG4gIHJldHVybiBgJHtwcm90b2NvbH06Ly8ke2NvbmZpZy5odWJIb3N0fToke2NvbmZpZy5odWJQb3J0fWA7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIG5ldyBub2RlIHdpdGggYSBzZWxlbml1bSBncmlkXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IGRhdGEgLSBQYXRoIG9yIG9iamVjdCByZXByZXNlbnRpbmcgc2VsZW5pdW0gZ3JpZCBub2RlIGNvbmZpZyBmaWxlLiBJZiBhIGBzdHJpbmdgLCBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIVxuICogQHBhcmFtIHtzdHJpbmd9IFthZGRyXSAtIEJpbmQgdG8gdGhpcyBhZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gW3BvcnRdIC0gQmluZCB0byB0aGlzIHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZVBhdGhdIC0gQmFzZSBwYXRoIGZvciB0aGUgZ3JpZFxuICovXG5hc3luYyBmdW5jdGlvbiByZWdpc3Rlck5vZGUoZGF0YSwgYWRkciwgcG9ydCwgYmFzZVBhdGgpIHtcbiAgbGV0IGNvbmZpZ0ZpbGVQYXRoO1xuICBpZiAoXy5pc1N0cmluZyhkYXRhKSkge1xuICAgIGNvbmZpZ0ZpbGVQYXRoID0gZGF0YTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IGF3YWl0IGZzLnJlYWRGaWxlKGRhdGEsICd1dGYtOCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgVW5hYmxlIHRvIGxvYWQgbm9kZSBjb25maWd1cmF0aW9uIGZpbGUgJHtjb25maWdGaWxlUGF0aH0gdG8gcmVnaXN0ZXIgd2l0aCBncmlkOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KFxuICAgICAgICBgU3ludGF4IGVycm9yIGluIG5vZGUgY29uZmlndXJhdGlvbiBmaWxlICR7Y29uZmlnRmlsZVBhdGh9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcG9zdFJlcXVlc3QoZGF0YSwgYWRkciwgcG9ydCwgYmFzZVBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWdpc3RlclRvR3JpZChwb3N0T3B0aW9ucywgY29uZmlnSG9sZGVyKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0YXR1c30gPSBhd2FpdCBheGlvcyhwb3N0T3B0aW9ucyk7XG4gICAgaWYgKHN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVlc3QgZmFpbGVkIHdpdGggY29kZSAke3N0YXR1c31gKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEFwcGl1bSBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSB0aGUgZ3JpZCBvbiBgICsgaHViVXJpKGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uKVxuICAgICk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihgQW4gYXR0ZW1wdCB0byByZWdpc3RlciB3aXRoIHRoZSBncmlkIHdhcyB1bnN1Y2Nlc3NmdWw6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9zdFJlcXVlc3QoY29uZmlnSG9sZGVyLCBhZGRyLCBwb3J0LCBiYXNlUGF0aCkge1xuICAvLyBNb3ZlIFNlbGVuaXVtIDMgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIHRvIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gIGlmICghXy5oYXMoY29uZmlnSG9sZGVyLCAnY29uZmlndXJhdGlvbicpKSB7XG4gICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGNvbmZpZ0hvbGRlcikge1xuICAgICAgaWYgKF8uaGFzKGNvbmZpZ0hvbGRlciwgcHJvcGVydHkpICYmIHByb3BlcnR5ICE9PSAnY2FwYWJpbGl0aWVzJykge1xuICAgICAgICBjb25maWd1cmF0aW9uW3Byb3BlcnR5XSA9IGNvbmZpZ0hvbGRlcltwcm9wZXJ0eV07XG4gICAgICAgIGRlbGV0ZSBjb25maWdIb2xkZXJbcHJvcGVydHldO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICAvLyBpZiB0aGUgbm9kZSBjb25maWcgZG9lcyBub3QgaGF2ZSB0aGUgYXBwaXVtL3dlYmRyaXZlciB1cmwsIGhvc3QsIGFuZCBwb3J0LFxuICAvLyBhdXRvbWF0aWNhbGx5IGFkZCBpdCBiYXNlZCBvbiBob3cgYXBwaXVtIHdhcyBpbml0aWFsaXplZFxuICAvLyBvdGhlcndpc2UsIHdlIHdpbGwgdGFrZSB3aGF0ZXZlciB0aGUgdXNlciBzZXR1cFxuICAvLyBiZWNhdXNlIHdlIHdpbGwgYWx3YXlzIHNldCBsb2NhbGhvc3QvMTI3LjAuMC4xLiB0aGlzIHdvbid0IHdvcmsgaWYgeW91clxuICAvLyBub2RlIGFuZCBncmlkIGFyZW4ndCBpbiB0aGUgc2FtZSBwbGFjZVxuICBpZiAoXG4gICAgIWNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLnVybCB8fFxuICAgICFjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5ob3N0IHx8XG4gICAgIWNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLnBvcnRcbiAgKSB7XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24udXJsID0gYGh0dHA6Ly8ke2FkZHJ9OiR7cG9ydH0ke2Jhc2VQYXRofWA7XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24uaG9zdCA9IGFkZHI7XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucG9ydCA9IHBvcnQ7XG4gIH1cbiAgLy8gaWYgdGhlIG5vZGUgY29uZmlnIGRvZXMgbm90IGhhdmUgaWQgYXV0b21hdGljYWxseSBhZGQgaXRcbiAgaWYgKCFjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5pZCkge1xuICAgIGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmlkID0gYGh0dHA6Ly8ke2NvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmhvc3R9OiR7Y29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucG9ydH1gO1xuICB9XG5cbiAgLy8gdGhlIHBvc3Qgb3B0aW9uc1xuICBjb25zdCByZWdSZXF1ZXN0ID0ge1xuICAgIHVybDogYCR7aHViVXJpKGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uKX0vZ3JpZC9yZWdpc3RlcmAsXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZGF0YTogY29uZmlnSG9sZGVyLFxuICB9O1xuXG4gIGlmIChjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5yZWdpc3RlciAhPT0gdHJ1ZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gcmVnaXN0cmF0aW9uIHNlbnQgKCR7Y29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucmVnaXN0ZXJ9ID0gZmFsc2UpYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVnaXN0ZXJDeWNsZUludGVydmFsID0gY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucmVnaXN0ZXJDeWNsZTtcbiAgaWYgKGlzTmFOKHJlZ2lzdGVyQ3ljbGVJbnRlcnZhbCkgfHwgcmVnaXN0ZXJDeWNsZUludGVydmFsIDw9IDApIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGAncmVnaXN0ZXJDeWNsZScgaXMgbm90IGEgdmFsaWQgcG9zaXRpdmUgbnVtYmVyLiBgICtcbiAgICAgICAgYE5vIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IHdpbGwgYmUgc2VudCB0byB0aGUgZ3JpZC5gXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gaW5pdGlhdGUgYSBuZXcgVGhyZWFkXG4gIGxldCBmaXJzdCA9IHRydWU7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgU3RhcnRpbmcgYXV0byByZWdpc3RlciB0aHJlYWQgZm9yIHRoZSBncmlkLiBgICtcbiAgICAgIGBXaWxsIHRyeSB0byByZWdpc3RlciBldmVyeSAke3JlZ2lzdGVyQ3ljbGVJbnRlcnZhbH0gbXMuYFxuICApO1xuICBzZXRJbnRlcnZhbChhc3luYyBmdW5jdGlvbiByZWdpc3RlclJldHJ5KCkge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgIGF3YWl0IHJlZ2lzdGVyVG9HcmlkKHJlZ1JlcXVlc3QsIGNvbmZpZ0hvbGRlcik7XG4gICAgfSBlbHNlIGlmICghKGF3YWl0IGlzQWxyZWFkeVJlZ2lzdGVyZWQoY29uZmlnSG9sZGVyKSkpIHtcbiAgICAgIC8vIG1ha2UgdGhlIGh0dHAgUE9TVCB0byB0aGUgZ3JpZCBmb3IgcmVnaXN0cmF0aW9uXG4gICAgICBhd2FpdCByZWdpc3RlclRvR3JpZChyZWdSZXF1ZXN0LCBjb25maWdIb2xkZXIpO1xuICAgIH1cbiAgfSwgcmVnaXN0ZXJDeWNsZUludGVydmFsKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNBbHJlYWR5UmVnaXN0ZXJlZChjb25maWdIb2xkZXIpIHtcbiAgLy9jaGVjayBpZiBub2RlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZFxuICBjb25zdCBpZCA9IGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmlkO1xuICB0cnkge1xuICAgIGNvbnN0IHtkYXRhLCBzdGF0dXN9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgdXJsOiBgJHtodWJVcmkoY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24pfS9ncmlkL2FwaS9wcm94eT9pZD0ke2lkfWAsXG4gICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICB9KTtcbiAgICBpZiAoc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBjb2RlICR7c3RhdHVzfWApO1xuICAgIH1cbiAgICBpZiAoIWRhdGEuc3VjY2Vzcykge1xuICAgICAgLy8gaWYgcmVnaXN0ZXIgZmFpbCwgcHJpbnQgdGhlIGRlYnVnIG1zZ1xuICAgICAgbG9nZ2VyLmRlYnVnKGBHcmlkIHJlZ2lzdHJhdGlvbiBlcnJvcjogJHtkYXRhLm1zZ31gKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuc3VjY2VzcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBIdWIgZG93biBvciBub3QgcmVzcG9uZGluZzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCByZWdpc3Rlck5vZGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsTUFBTSxHQUFJQyxNQUFELElBQVk7RUFDekIsTUFBTUMsUUFBUSxHQUFHRCxNQUFNLENBQUNFLFdBQVAsSUFBc0IsTUFBdkM7RUFDQSxPQUFRLEdBQUVELFFBQVMsTUFBS0QsTUFBTSxDQUFDRyxPQUFRLElBQUdILE1BQU0sQ0FBQ0ksT0FBUSxFQUF6RDtBQUNELENBSEQ7O0FBWUEsZUFBZUMsWUFBZixDQUE0QkMsSUFBNUIsRUFBa0NDLElBQWxDLEVBQXdDQyxJQUF4QyxFQUE4Q0MsUUFBOUMsRUFBd0Q7RUFDdEQsSUFBSUMsY0FBSjs7RUFDQSxJQUFJQyxlQUFBLENBQUVDLFFBQUYsQ0FBV04sSUFBWCxDQUFKLEVBQXNCO0lBQ3BCSSxjQUFjLEdBQUdKLElBQWpCOztJQUNBLElBQUk7TUFDRkEsSUFBSSxHQUFHLE1BQU1PLFdBQUEsQ0FBR0MsUUFBSCxDQUFZUixJQUFaLEVBQWtCLE9BQWxCLENBQWI7SUFDRCxDQUZELENBRUUsT0FBT1MsR0FBUCxFQUFZO01BQ1pDLGVBQUEsQ0FBT0MsS0FBUCxDQUNHLDBDQUF5Q1AsY0FBZSwyQkFBMEJLLEdBQUcsQ0FBQ0csT0FBUSxFQURqRzs7TUFHQTtJQUNEOztJQUNELElBQUk7TUFDRlosSUFBSSxHQUFHYSxJQUFJLENBQUNDLEtBQUwsQ0FBV2QsSUFBWCxDQUFQO0lBQ0QsQ0FGRCxDQUVFLE9BQU9TLEdBQVAsRUFBWTtNQUNaQyxlQUFBLENBQU9LLGFBQVAsQ0FDRywyQ0FBMENYLGNBQWUsS0FBSUssR0FBRyxDQUFD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
|
|
153
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodWJVcmkiLCJjb25maWciLCJwcm90b2NvbCIsImh1YlByb3RvY29sIiwiaHViSG9zdCIsImh1YlBvcnQiLCJyZWdpc3Rlck5vZGUiLCJkYXRhIiwiYWRkciIsInBvcnQiLCJiYXNlUGF0aCIsImNvbmZpZ0ZpbGVQYXRoIiwiXyIsImlzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZSIsImVyciIsImxvZ2dlciIsImVycm9yIiwibWVzc2FnZSIsIkpTT04iLCJwYXJzZSIsImVycm9yQW5kVGhyb3ciLCJwb3N0UmVxdWVzdCIsInJlZ2lzdGVyVG9HcmlkIiwicG9zdE9wdGlvbnMiLCJjb25maWdIb2xkZXIiLCJzdGF0dXMiLCJheGlvcyIsIkVycm9yIiwiZGVidWciLCJjb25maWd1cmF0aW9uIiwiaGFzIiwicHJvcGVydHkiLCJ1cmwiLCJob3N0IiwiaWQiLCJyZWdSZXF1ZXN0IiwibWV0aG9kIiwicmVnaXN0ZXIiLCJyZWdpc3RlckN5Y2xlSW50ZXJ2YWwiLCJyZWdpc3RlckN5Y2xlIiwiaXNOYU4iLCJ3YXJuIiwiZmlyc3QiLCJzZXRJbnRlcnZhbCIsInJlZ2lzdGVyUmV0cnkiLCJpc0FscmVhZHlSZWdpc3RlcmVkIiwidGltZW91dCIsInN1Y2Nlc3MiLCJtc2ciXSwic291cmNlcyI6WyIuLi8uLi9saWIvZ3JpZC1yZWdpc3Rlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHtmc30gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgaHViVXJpID0gKGNvbmZpZykgPT4ge1xuICBjb25zdCBwcm90b2NvbCA9IGNvbmZpZy5odWJQcm90b2NvbCB8fCAnaHR0cCc7XG4gIHJldHVybiBgJHtwcm90b2NvbH06Ly8ke2NvbmZpZy5odWJIb3N0fToke2NvbmZpZy5odWJQb3J0fWA7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIG5ldyBub2RlIHdpdGggYSBzZWxlbml1bSBncmlkXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IGRhdGEgLSBQYXRoIG9yIG9iamVjdCByZXByZXNlbnRpbmcgc2VsZW5pdW0gZ3JpZCBub2RlIGNvbmZpZyBmaWxlLiBJZiBhIGBzdHJpbmdgLCBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIVxuICogQHBhcmFtIHtzdHJpbmd9IFthZGRyXSAtIEJpbmQgdG8gdGhpcyBhZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gW3BvcnRdIC0gQmluZCB0byB0aGlzIHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZVBhdGhdIC0gQmFzZSBwYXRoIGZvciB0aGUgZ3JpZFxuICovXG5hc3luYyBmdW5jdGlvbiByZWdpc3Rlck5vZGUoZGF0YSwgYWRkciwgcG9ydCwgYmFzZVBhdGgpIHtcbiAgbGV0IGNvbmZpZ0ZpbGVQYXRoO1xuICBpZiAoXy5pc1N0cmluZyhkYXRhKSkge1xuICAgIGNvbmZpZ0ZpbGVQYXRoID0gZGF0YTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IGF3YWl0IGZzLnJlYWRGaWxlKGRhdGEsICd1dGYtOCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgVW5hYmxlIHRvIGxvYWQgbm9kZSBjb25maWd1cmF0aW9uIGZpbGUgJHtjb25maWdGaWxlUGF0aH0gdG8gcmVnaXN0ZXIgd2l0aCBncmlkOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KFxuICAgICAgICBgU3ludGF4IGVycm9yIGluIG5vZGUgY29uZmlndXJhdGlvbiBmaWxlICR7Y29uZmlnRmlsZVBhdGh9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcG9zdFJlcXVlc3QoZGF0YSwgYWRkciwgcG9ydCwgYmFzZVBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWdpc3RlclRvR3JpZChwb3N0T3B0aW9ucywgY29uZmlnSG9sZGVyKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0YXR1c30gPSBhd2FpdCBheGlvcyhwb3N0T3B0aW9ucyk7XG4gICAgaWYgKHN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVlc3QgZmFpbGVkIHdpdGggY29kZSAke3N0YXR1c31gKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEFwcGl1bSBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSB0aGUgZ3JpZCBvbiBgICsgaHViVXJpKGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uKVxuICAgICk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihgQW4gYXR0ZW1wdCB0byByZWdpc3RlciB3aXRoIHRoZSBncmlkIHdhcyB1bnN1Y2Nlc3NmdWw6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9zdFJlcXVlc3QoY29uZmlnSG9sZGVyLCBhZGRyLCBwb3J0LCBiYXNlUGF0aCkge1xuICAvLyBNb3ZlIFNlbGVuaXVtIDMgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIHRvIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gIGlmICghXy5oYXMoY29uZmlnSG9sZGVyLCAnY29uZmlndXJhdGlvbicpKSB7XG4gICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGNvbmZpZ0hvbGRlcikge1xuICAgICAgaWYgKF8uaGFzKGNvbmZpZ0hvbGRlciwgcHJvcGVydHkpICYmIHByb3BlcnR5ICE9PSAnY2FwYWJpbGl0aWVzJykge1xuICAgICAgICBjb25maWd1cmF0aW9uW3Byb3BlcnR5XSA9IGNvbmZpZ0hvbGRlcltwcm9wZXJ0eV07XG4gICAgICAgIGRlbGV0ZSBjb25maWdIb2xkZXJbcHJvcGVydHldO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICAvLyBpZiB0aGUgbm9kZSBjb25maWcgZG9lcyBub3QgaGF2ZSB0aGUgYXBwaXVtL3dlYmRyaXZlciB1cmwsIGhvc3QsIGFuZCBwb3J0LFxuICAvLyBhdXRvbWF0aWNhbGx5IGFkZCBpdCBiYXNlZCBvbiBob3cgYXBwaXVtIHdhcyBpbml0aWFsaXplZFxuICAvLyBvdGhlcndpc2UsIHdlIHdpbGwgdGFrZSB3aGF0ZXZlciB0aGUgdXNlciBzZXR1cFxuICAvLyBiZWNhdXNlIHdlIHdpbGwgYWx3YXlzIHNldCBsb2NhbGhvc3QvMTI3LjAuMC4xLiB0aGlzIHdvbid0IHdvcmsgaWYgeW91clxuICAvLyBub2RlIGFuZCBncmlkIGFyZW4ndCBpbiB0aGUgc2FtZSBwbGFjZVxuICBpZiAoXG4gICAgIWNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLnVybCB8fFxuICAgICFjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5ob3N0IHx8XG4gICAgIWNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLnBvcnRcbiAgKSB7XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24udXJsID0gYGh0dHA6Ly8ke2FkZHJ9OiR7cG9ydH0ke2Jhc2VQYXRofWA7XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24uaG9zdCA9IGFkZHI7XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucG9ydCA9IHBvcnQ7XG4gIH1cbiAgLy8gaWYgdGhlIG5vZGUgY29uZmlnIGRvZXMgbm90IGhhdmUgaWQgYXV0b21hdGljYWxseSBhZGQgaXRcbiAgaWYgKCFjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5pZCkge1xuICAgIGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmlkID0gYGh0dHA6Ly8ke2NvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmhvc3R9OiR7Y29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucG9ydH1gO1xuICB9XG5cbiAgLy8gdGhlIHBvc3Qgb3B0aW9uc1xuICBjb25zdCByZWdSZXF1ZXN0ID0ge1xuICAgIHVybDogYCR7aHViVXJpKGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uKX0vZ3JpZC9yZWdpc3RlcmAsXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZGF0YTogY29uZmlnSG9sZGVyLFxuICB9O1xuXG4gIGlmIChjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5yZWdpc3RlciAhPT0gdHJ1ZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gcmVnaXN0cmF0aW9uIHNlbnQgKCR7Y29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucmVnaXN0ZXJ9ID0gZmFsc2UpYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVnaXN0ZXJDeWNsZUludGVydmFsID0gY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucmVnaXN0ZXJDeWNsZTtcbiAgaWYgKGlzTmFOKHJlZ2lzdGVyQ3ljbGVJbnRlcnZhbCkgfHwgcmVnaXN0ZXJDeWNsZUludGVydmFsIDw9IDApIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGAncmVnaXN0ZXJDeWNsZScgaXMgbm90IGEgdmFsaWQgcG9zaXRpdmUgbnVtYmVyLiBgICtcbiAgICAgICAgYE5vIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IHdpbGwgYmUgc2VudCB0byB0aGUgZ3JpZC5gXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gaW5pdGlhdGUgYSBuZXcgVGhyZWFkXG4gIGxldCBmaXJzdCA9IHRydWU7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgU3RhcnRpbmcgYXV0byByZWdpc3RlciB0aHJlYWQgZm9yIHRoZSBncmlkLiBgICtcbiAgICAgIGBXaWxsIHRyeSB0byByZWdpc3RlciBldmVyeSAke3JlZ2lzdGVyQ3ljbGVJbnRlcnZhbH0gbXMuYFxuICApO1xuICBzZXRJbnRlcnZhbChhc3luYyBmdW5jdGlvbiByZWdpc3RlclJldHJ5KCkge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgIGF3YWl0IHJlZ2lzdGVyVG9HcmlkKHJlZ1JlcXVlc3QsIGNvbmZpZ0hvbGRlcik7XG4gICAgfSBlbHNlIGlmICghKGF3YWl0IGlzQWxyZWFkeVJlZ2lzdGVyZWQoY29uZmlnSG9sZGVyKSkpIHtcbiAgICAgIC8vIG1ha2UgdGhlIGh0dHAgUE9TVCB0byB0aGUgZ3JpZCBmb3IgcmVnaXN0cmF0aW9uXG4gICAgICBhd2FpdCByZWdpc3RlclRvR3JpZChyZWdSZXF1ZXN0LCBjb25maWdIb2xkZXIpO1xuICAgIH1cbiAgfSwgcmVnaXN0ZXJDeWNsZUludGVydmFsKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNBbHJlYWR5UmVnaXN0ZXJlZChjb25maWdIb2xkZXIpIHtcbiAgLy9jaGVjayBpZiBub2RlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZFxuICBjb25zdCBpZCA9IGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmlkO1xuICB0cnkge1xuICAgIGNvbnN0IHtkYXRhLCBzdGF0dXN9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgdXJsOiBgJHtodWJVcmkoY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24pfS9ncmlkL2FwaS9wcm94eT9pZD0ke2lkfWAsXG4gICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICB9KTtcbiAgICBpZiAoc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBjb2RlICR7c3RhdHVzfWApO1xuICAgIH1cbiAgICBpZiAoIWRhdGEuc3VjY2Vzcykge1xuICAgICAgLy8gaWYgcmVnaXN0ZXIgZmFpbCwgcHJpbnQgdGhlIGRlYnVnIG1zZ1xuICAgICAgbG9nZ2VyLmRlYnVnKGBHcmlkIHJlZ2lzdHJhdGlvbiBlcnJvcjogJHtkYXRhLm1zZ31gKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuc3VjY2VzcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBIdWIgZG93biBvciBub3QgcmVzcG9uZGluZzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCByZWdpc3Rlck5vZGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsTUFBTSxHQUFJQyxNQUFELElBQVk7RUFDekIsTUFBTUMsUUFBUSxHQUFHRCxNQUFNLENBQUNFLFdBQVAsSUFBc0IsTUFBdkM7RUFDQSxPQUFRLEdBQUVELFFBQVMsTUFBS0QsTUFBTSxDQUFDRyxPQUFRLElBQUdILE1BQU0sQ0FBQ0ksT0FBUSxFQUF6RDtBQUNELENBSEQ7O0FBWUEsZUFBZUMsWUFBZixDQUE0QkMsSUFBNUIsRUFBa0NDLElBQWxDLEVBQXdDQyxJQUF4QyxFQUE4Q0MsUUFBOUMsRUFBd0Q7RUFDdEQsSUFBSUMsY0FBSjs7RUFDQSxJQUFJQyxlQUFBLENBQUVDLFFBQUYsQ0FBV04sSUFBWCxDQUFKLEVBQXNCO0lBQ3BCSSxjQUFjLEdBQUdKLElBQWpCOztJQUNBLElBQUk7TUFDRkEsSUFBSSxHQUFHLE1BQU1PLFdBQUEsQ0FBR0MsUUFBSCxDQUFZUixJQUFaLEVBQWtCLE9BQWxCLENBQWI7SUFDRCxDQUZELENBRUUsT0FBT1MsR0FBUCxFQUFZO01BQ1pDLGVBQUEsQ0FBT0MsS0FBUCxDQUNHLDBDQUF5Q1AsY0FBZSwyQkFBMEJLLEdBQUcsQ0FBQ0csT0FBUSxFQURqRzs7TUFHQTtJQUNEOztJQUNELElBQUk7TUFDRlosSUFBSSxHQUFHYSxJQUFJLENBQUNDLEtBQUwsQ0FBV2QsSUFBWCxDQUFQO0lBQ0QsQ0FGRCxDQUVFLE9BQU9TLEdBQVAsRUFBWTtNQUNaQyxlQUFBLENBQU9LLGFBQVAsQ0FDRywyQ0FBMENYLGNBQWUsS0FBSUssR0FBRyxDQUFD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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-register.js","names":["hubUri","config","protocol","hubProtocol","hubHost","hubPort","registerNode","data","addr","port","basePath","configFilePath","_","isString","fs","readFile","err","logger","error","message","JSON","parse","errorAndThrow","postRequest","registerToGrid","postOptions","configHolder","status","axios","Error","debug","configuration","has","property","url","host","id","regRequest","method","register","registerCycleInterval","registerCycle","isNaN","warn","first","setInterval","registerRetry","isAlreadyRegistered","timeout","success","msg"],"sources":["../../lib/grid-register.js"],"sourcesContent":["import axios from 'axios';\nimport {fs} from '@appium/support';\nimport logger from './logger';\nimport _ from 'lodash';\n\nconst hubUri = (config) => {\n const protocol = config.hubProtocol || 'http';\n return `${protocol}://${config.hubHost}:${config.hubPort}`;\n};\n\n/**\n * Registers a new node with a selenium grid\n * @param {string|object} data - Path or object representing selenium grid node config file. If a `string`, all subsequent arguments are required!\n * @param {string} [addr] - Bind to this address\n * @param {number} [port] - Bind to this port\n * @param {string} [basePath] - Base path for the grid\n */\nasync function registerNode(data, addr, port, basePath) {\n let configFilePath;\n if (_.isString(data)) {\n configFilePath = data;\n try {\n data = await fs.readFile(data, 'utf-8');\n } catch (err) {\n logger.error(\n `Unable to load node configuration file ${configFilePath} to register with grid: ${err.message}`\n );\n return;\n }\n try {\n data = JSON.parse(data);\n } catch (err) {\n logger.errorAndThrow(\n `Syntax error in node configuration file ${configFilePath}: ${err.message}`\n );\n return;\n }\n }\n\n postRequest(data, addr, port, basePath);\n}\n\nasync function registerToGrid(postOptions, configHolder) {\n try {\n const {status} = await axios(postOptions);\n if (status !== 200) {\n throw new Error(`Request failed with code ${status}`);\n }\n logger.debug(\n `Appium successfully registered with the the grid on ` + hubUri(configHolder.configuration)\n );\n } catch (err) {\n logger.error(`An attempt to register with the grid was unsuccessful: ${err.message}`);\n }\n}\n\nfunction postRequest(configHolder, addr, port, basePath) {\n // Move Selenium 3 configuration properties to configuration object\n if (!_.has(configHolder, 'configuration')) {\n let configuration = {};\n for (const property in configHolder) {\n if (_.has(configHolder, property) && property !== 'capabilities') {\n configuration[property] = configHolder[property];\n delete configHolder[property];\n }\n }\n configHolder.configuration = configuration;\n }\n\n // if the node config does not have the appium/webdriver url, host, and port,\n // automatically add it based on how appium was initialized\n // otherwise, we will take whatever the user setup\n // because we will always set localhost/127.0.0.1. this won't work if your\n // node and grid aren't in the same place\n if (\n !configHolder.configuration.url ||\n !configHolder.configuration.host ||\n !configHolder.configuration.port\n ) {\n configHolder.configuration.url = `http://${addr}:${port}${basePath}`;\n configHolder.configuration.host = addr;\n configHolder.configuration.port = port;\n }\n // if the node config does not have id automatically add it\n if (!configHolder.configuration.id) {\n configHolder.configuration.id = `http://${configHolder.configuration.host}:${configHolder.configuration.port}`;\n }\n\n // the post options\n const regRequest = {\n url: `${hubUri(configHolder.configuration)}/grid/register`,\n method: 'POST',\n data: configHolder,\n };\n\n if (configHolder.configuration.register !== true) {\n logger.debug(`No registration sent (${configHolder.configuration.register} = false)`);\n return;\n }\n\n const registerCycleInterval = configHolder.configuration.registerCycle;\n if (isNaN(registerCycleInterval) || registerCycleInterval <= 0) {\n logger.warn(\n `'registerCycle' is not a valid positive number. ` +\n `No registration request will be sent to the grid.`\n );\n return;\n }\n // initiate a new Thread\n let first = true;\n logger.debug(\n `Starting auto register thread for the grid. ` +\n `Will try to register every ${registerCycleInterval} ms.`\n );\n setInterval(async function registerRetry() {\n if (first) {\n first = false;\n await registerToGrid(regRequest, configHolder);\n } else if (!(await isAlreadyRegistered(configHolder))) {\n // make the http POST to the grid for registration\n await registerToGrid(regRequest, configHolder);\n }\n }, registerCycleInterval);\n}\n\nasync function isAlreadyRegistered(configHolder) {\n //check if node is already registered\n const id = configHolder.configuration.id;\n try {\n const {data, status} = await axios({\n url: `${hubUri(configHolder.configuration)}/grid/api/proxy?id=${id}`,\n timeout: 10000,\n });\n if (status !== 200) {\n throw new Error(`Request failed with code ${status}`);\n }\n if (!data.success) {\n // if register fail, print the debug msg\n logger.debug(`Grid registration error: ${data.msg}`);\n }\n return data.success;\n } catch (err) {\n logger.debug(`Hub down or not responding: ${err.message}`);\n }\n}\n\nexport default registerNode;\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import {logger} from '@appium/support';\n\nlet log = logger.getLogger('Appium');\n\nexport default log;\n"],"mappings":";;;;;;;;;AAAA;;AAEA,IAAIA,GAAG,GAAGC,eAAA,CAAOC,SAAP,CAAiB,QAAjB,CAAV;;eAEeF,G"}
|