appium 2.0.0-beta.21 → 2.0.0-beta.25
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/LICENSE +201 -0
- package/README.md +1 -2
- package/build/check-npm-pack-files.js +23 -0
- package/build/commands-yml/parse.js +319 -0
- package/build/commands-yml/validator.js +130 -0
- package/build/index.js +19 -0
- package/build/lib/appium.js +22 -7
- package/build/lib/cli/args.js +13 -15
- package/build/lib/cli/npm.js +27 -16
- package/build/lib/cli/parser.js +7 -3
- package/build/lib/config-file.js +4 -7
- package/build/lib/config.js +57 -48
- package/build/lib/extension-config.js +1 -1
- package/build/lib/main.js +28 -28
- package/build/lib/plugin-config.js +2 -2
- package/build/lib/plugins.js +4 -2
- package/build/lib/schema/appium-config-schema.js +3 -2
- package/build/lib/schema/arg-spec.js +5 -3
- package/build/lib/schema/cli-args.js +25 -16
- package/build/lib/schema/keywords.js +14 -4
- package/build/lib/schema/schema.js +86 -9
- package/build/lib/utils.js +16 -36
- package/build/postinstall.js +90 -0
- package/build/test/cli/cli-e2e-specs.js +221 -0
- package/build/test/cli/cli-helpers.js +86 -0
- package/build/test/cli/cli-specs.js +71 -0
- package/build/test/cli/fixtures/test-driver/package.json +27 -0
- package/build/test/cli/schema-args-specs.js +48 -0
- package/build/test/cli/schema-e2e-specs.js +47 -0
- package/build/test/config-e2e-specs.js +112 -0
- package/build/test/config-file-e2e-specs.js +191 -0
- package/build/test/config-file-specs.js +281 -0
- package/build/test/config-specs.js +258 -0
- package/build/test/driver-e2e-specs.js +435 -0
- package/build/test/driver-specs.js +386 -0
- package/build/test/ext-config-io-specs.js +181 -0
- package/build/test/extension-config-specs.js +365 -0
- package/build/test/fixtures/allow-feat.txt +5 -0
- package/build/test/fixtures/caps.json +3 -0
- package/build/test/fixtures/config/allow-insecure.txt +3 -0
- package/build/test/fixtures/config/appium.config.bad-nodeconfig.json +5 -0
- package/build/test/fixtures/config/appium.config.bad.json +32 -0
- package/build/test/fixtures/config/appium.config.ext-good.json +9 -0
- package/build/test/fixtures/config/appium.config.ext-unknown-props.json +10 -0
- package/build/test/fixtures/config/appium.config.good.js +40 -0
- package/build/test/fixtures/config/appium.config.good.json +33 -0
- package/build/test/fixtures/config/appium.config.good.yaml +30 -0
- package/build/test/fixtures/config/appium.config.invalid.json +31 -0
- package/build/test/fixtures/config/appium.config.security-array.json +5 -0
- package/build/test/fixtures/config/appium.config.security-delimited.json +5 -0
- package/build/test/fixtures/config/appium.config.security-path.json +5 -0
- package/build/test/fixtures/config/driver-fake.config.json +8 -0
- package/build/test/fixtures/config/nodeconfig.json +3 -0
- package/build/test/fixtures/config/plugin-fake.config.json +0 -0
- package/build/test/fixtures/default-args.js +35 -0
- package/build/test/fixtures/deny-feat.txt +5 -0
- package/build/test/fixtures/driver.schema.js +20 -0
- package/build/test/fixtures/extensions.yaml +27 -0
- package/build/test/fixtures/flattened-schema.js +532 -0
- package/build/test/fixtures/plugin.schema.js +20 -0
- package/build/test/fixtures/schema-with-extensions.js +28 -0
- package/build/test/grid-register-specs.js +74 -0
- package/build/test/helpers.js +75 -0
- package/build/test/logger-specs.js +76 -0
- package/build/test/npm-specs.js +20 -0
- package/build/test/parser-specs.js +319 -0
- package/build/test/plugin-e2e-specs.js +316 -0
- package/build/test/schema/arg-spec-specs.js +70 -0
- package/build/test/schema/cli-args-specs.js +408 -0
- package/build/test/schema/schema-specs.js +407 -0
- package/build/test/utils-specs.js +288 -0
- package/index.js +11 -0
- package/lib/appium-config.schema.json +2 -1
- package/lib/appium.js +51 -8
- package/lib/cli/args.js +17 -14
- package/lib/cli/npm.js +68 -6
- package/lib/cli/parser.js +5 -2
- package/lib/config-file.js +9 -12
- package/lib/config.js +104 -56
- package/lib/extension-config.js +1 -1
- package/lib/main.js +94 -40
- package/lib/plugin-config.js +1 -1
- package/lib/plugins.js +2 -0
- package/lib/schema/appium-config-schema.js +1 -0
- package/lib/schema/arg-spec.js +13 -3
- package/lib/schema/cli-args.js +22 -34
- package/lib/schema/keywords.js +20 -4
- package/lib/schema/schema.js +150 -24
- package/lib/utils.js +28 -29
- package/package.json +9 -14
- package/types/types.d.ts +5 -0
- package/build/lib/cli/argparse-actions.js +0 -104
- package/lib/cli/argparse-actions.js +0 -77
package/build/lib/utils.js
CHANGED
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.ReadonlyMap = void 0;
|
|
9
9
|
exports.getPackageVersion = getPackageVersion;
|
|
10
10
|
exports.insertAppiumPrefixes = insertAppiumPrefixes;
|
|
11
|
-
exports.
|
|
11
|
+
exports.inspect = void 0;
|
|
12
12
|
exports.parseCapsForInnerDriver = parseCapsForInnerDriver;
|
|
13
13
|
exports.pullSettings = pullSettings;
|
|
14
14
|
exports.removeAppiumPrefixes = removeAppiumPrefixes;
|
|
@@ -24,40 +24,20 @@ var _baseDriver = require("@appium/base-driver");
|
|
|
24
24
|
|
|
25
25
|
var _support = require("@appium/support");
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
function inspectObject(args) {
|
|
30
|
-
function getValueArray(obj, indent = ' ') {
|
|
31
|
-
if (!_lodash.default.isObject(obj)) {
|
|
32
|
-
return [obj];
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
let strArr = ['{'];
|
|
27
|
+
var _util = require("util");
|
|
36
28
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
strArr.push(`${indent}}`);
|
|
48
|
-
return strArr;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
for (let [arg, value] of _lodash.default.toPairs(args)) {
|
|
52
|
-
value = getValueArray(value);
|
|
53
|
-
|
|
54
|
-
_logger.default.info(` ${arg}: ${value.shift()}`);
|
|
29
|
+
const W3C_APPIUM_PREFIX = 'appium';
|
|
30
|
+
const isStdoutTTY = process.stdout.isTTY;
|
|
31
|
+
|
|
32
|
+
const inspect = _lodash.default.flow(_lodash.default.partialRight(_util.inspect, {
|
|
33
|
+
colors: true,
|
|
34
|
+
depth: null,
|
|
35
|
+
compact: !isStdoutTTY
|
|
36
|
+
}), (...args) => {
|
|
37
|
+
_logger.default.info(...args);
|
|
38
|
+
});
|
|
55
39
|
|
|
56
|
-
|
|
57
|
-
_logger.default.info(val);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
40
|
+
exports.inspect = inspect;
|
|
61
41
|
|
|
62
42
|
function parseCapsForInnerDriver(jsonwpCapabilities, w3cCapabilities, constraints = {}, defaultCapabilities = {}) {
|
|
63
43
|
const hasW3CCaps = _lodash.default.isPlainObject(w3cCapabilities) && (_lodash.default.has(w3cCapabilities, 'alwaysMatch') || _lodash.default.has(w3cCapabilities, 'firstMatch'));
|
|
@@ -224,8 +204,8 @@ class ReadonlyMap extends Map {
|
|
|
224
204
|
return super.set(key, value);
|
|
225
205
|
}
|
|
226
206
|
|
|
227
|
-
delete(
|
|
228
|
-
|
|
207
|
+
delete() {
|
|
208
|
+
return false;
|
|
229
209
|
}
|
|
230
210
|
|
|
231
211
|
clear() {
|
|
@@ -237,4 +217,4 @@ class ReadonlyMap extends Map {
|
|
|
237
217
|
exports.ReadonlyMap = ReadonlyMap;require('source-map-support').install();
|
|
238
218
|
|
|
239
219
|
|
|
240
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImluc3BlY3RPYmplY3QiLCJhcmdzIiwiZ2V0VmFsdWVBcnJheSIsIm9iaiIsImluZGVudCIsIl8iLCJpc09iamVjdCIsInN0ckFyciIsImFyZyIsInZhbHVlIiwidG9QYWlycyIsInB1c2giLCJzaGlmdCIsImxvZ2dlciIsImluZm8iLCJ2YWwiLCJwYXJzZUNhcHNGb3JJbm5lckRyaXZlciIsImpzb253cENhcGFiaWxpdGllcyIsInczY0NhcGFiaWxpdGllcyIsImNvbnN0cmFpbnRzIiwiZGVmYXVsdENhcGFiaWxpdGllcyIsImhhc1czQ0NhcHMiLCJpc1BsYWluT2JqZWN0IiwiaGFzIiwiaGFzSlNPTldQQ2FwcyIsImRlc2lyZWRDYXBzIiwicHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzIiwicHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzIiwicHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJXM0MiLCJlcnJvciIsIkVycm9yIiwiY2xvbmVEZWVwIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBLZXkiLCJkZWZhdWx0Q2FwVmFsdWUiLCJpc0NhcEFscmVhZHlTZXQiLCJmaXJzdE1hdGNoRW50cnkiLCJmaXJzdE1hdGNoIiwicmVtb3ZlQXBwaXVtUHJlZml4ZXMiLCJyZW1vdmVBcHBpdW1QcmVmaXgiLCJhbHdheXNNYXRjaCIsIk9iamVjdCIsImFzc2lnbiIsIm1lc3NhZ2UiLCJpbnNlcnRBcHBpdW1QcmVmaXhlcyIsImNhcHMiLCJTVEFOREFSRF9DQVBTIiwicHJlZml4ZWRDYXBzIiwibmFtZSIsImluY2x1ZGVzIiwiZml4ZWRDYXBzIiwia2V5IiwicHJlZml4Iiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsImxlbmd0aCIsImdldFBhY2thZ2VWZXJzaW9uIiwicGtnTmFtZSIsInBrZ0luZm8iLCJyZXF1aXJlIiwidmVyc2lvbiIsInB1bGxTZXR0aW5ncyIsInJlc3VsdCIsIm1hdGNoIiwiZXhlYyIsInJvb3REaXIiLCJmcyIsImZpbmRSb290IiwiX19kaXJuYW1lIiwiUmVhZG9ubHlNYXAiLCJNYXAiLCJzZXQiLCJkZWxldGUiLCJjbGVhciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsUUFBMUI7O0FBRUEsU0FBU0MsYUFBVCxDQUF3QkMsSUFBeEIsRUFBOEI7QUFDNUIsV0FBU0MsYUFBVCxDQUF3QkMsR0FBeEIsRUFBNkJDLE1BQU0sR0FBRyxJQUF0QyxFQUE0QztBQUMxQyxRQUFJLENBQUNDLGdCQUFFQyxRQUFGLENBQVdILEdBQVgsQ0FBTCxFQUFzQjtBQUNwQixhQUFPLENBQUNBLEdBQUQsQ0FBUDtBQUNEOztBQUVELFFBQUlJLE1BQU0sR0FBRyxDQUFDLEdBQUQsQ0FBYjs7QUFDQSxTQUFLLElBQUksQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLENBQVQsSUFBeUJKLGdCQUFFSyxPQUFGLENBQVVQLEdBQVYsQ0FBekIsRUFBeUM7QUFDdkMsVUFBSSxDQUFDRSxnQkFBRUMsUUFBRixDQUFXRyxLQUFYLENBQUwsRUFBd0I7QUFDdEJGLFFBQUFBLE1BQU0sQ0FBQ0ksSUFBUCxDQUFhLEdBQUVQLE1BQU8sS0FBSUksR0FBSSxLQUFJQyxLQUFNLEVBQXhDO0FBQ0QsT0FGRCxNQUVPO0FBQ0xBLFFBQUFBLEtBQUssR0FBR1AsYUFBYSxDQUFDTyxLQUFELEVBQVMsR0FBRUwsTUFBTyxJQUFsQixDQUFyQjtBQUNBRyxRQUFBQSxNQUFNLENBQUNJLElBQVAsQ0FBYSxHQUFFUCxNQUFPLEtBQUlJLEdBQUksS0FBSUMsS0FBSyxDQUFDRyxLQUFOLEVBQWMsRUFBaEQ7QUFDQUwsUUFBQUEsTUFBTSxDQUFDSSxJQUFQLENBQVksR0FBR0YsS0FBZjtBQUNEO0FBQ0Y7O0FBQ0RGLElBQUFBLE1BQU0sQ0FBQ0ksSUFBUCxDQUFhLEdBQUVQLE1BQU8sR0FBdEI7QUFDQSxXQUFPRyxNQUFQO0FBQ0Q7O0FBQ0QsT0FB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QUtjLEdBQUwsQ0FBUzhCLEdBQVQsQ0FBSixFQUFtQjtBQUNqQixZQUFNLElBQUlyQixLQUFKLENBQVcsR0FBRXFCLEdBQUksaUJBQWpCLENBQU47QUFDRDs7QUFDRCxXQUFPLE1BQU1vQixHQUFOLENBQVVwQixHQUFWLEVBQWU1QyxLQUFmLENBQVA7QUFDRDs7QUFFRGlFLEVBQUFBLE1BQU0sQ0FBRXJCLEdBQUYsRUFBTztBQUNYLFVBQU0sSUFBSXJCLEtBQUosQ0FBVyxHQUFFcUIsR0FBSSxvQkFBakIsQ0FBTjtBQUNEOztBQUVEc0IsRUFBQUEsS0FBSyxHQUFJO0FBQ1AsVUFBTSxJQUFJM0MsS0FBSixDQUFXLDBCQUFYLENBQU47QUFDRDs7QUFsQjJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgcHJvY2Vzc0NhcGFiaWxpdGllcywgUFJPVE9DT0xTIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IFczQ19BUFBJVU1fUFJFRklYID0gJ2FwcGl1bSc7XG5cbmZ1bmN0aW9uIGluc3BlY3RPYmplY3QgKGFyZ3MpIHtcbiAgZnVuY3Rpb24gZ2V0VmFsdWVBcnJheSAob2JqLCBpbmRlbnQgPSAnICAnKSB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgIHJldHVybiBbb2JqXTtcbiAgICB9XG5cbiAgICBsZXQgc3RyQXJyID0gWyd7J107XG4gICAgZm9yIChsZXQgW2FyZywgdmFsdWVdIG9mIF8udG9QYWlycyhvYmopKSB7XG4gICAgICBpZiAoIV8uaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHN0ckFyci5wdXNoKGAke2luZGVudH0gICR7YXJnfTogJHt2YWx1ZX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWVBcnJheSh2YWx1ZSwgYCR7aW5kZW50fSAgYCk7XG4gICAgICAgIHN0ckFyci5wdXNoKGAke2luZGVudH0gICR7YXJnfTogJHt2YWx1ZS5zaGlmdCgpfWApO1xuICAgICAgICBzdHJBcnIucHVzaCguLi52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN0ckFyci5wdXNoKGAke2luZGVudH19YCk7XG4gICAgcmV0dXJuIHN0ckFycjtcbiAgfVxuICBmb3IgKGxldCBbYXJnLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGFyZ3MpKSB7XG4gICAgdmFsdWUgPSBnZXRWYWx1ZUFycmF5KHZhbHVlKTtcbiAgICBsb2dnZXIuaW5mbyhgICAke2FyZ306ICR7dmFsdWUuc2hpZnQoKX1gKTtcbiAgICBmb3IgKGxldCB2YWwgb2YgdmFsdWUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKHZhbCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGFrZXMgdGhlIGNhcHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGFuZCB0cmFuc2xhdGVzIHRoZW1cbiAqIGludG8gY2FwcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBpbm5lciBkcml2ZXJzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBqc29ud3BDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSB3M2NDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25zdHJhaW50c1xuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDYXBhYmlsaXRpZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIgKGpzb253cENhcGFiaWxpdGllcywgdzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cyA9IHt9LCBkZWZhdWx0Q2FwYWJpbGl0aWVzID0ge30pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID0gXy5pc1BsYWluT2JqZWN0KHczY0NhcGFiaWxpdGllcykgJiZcbiAgICAoXy5oYXModzNjQ2FwYWJpbGl0aWVzLCAnYWx3YXlzTWF0Y2gnKSB8fCBfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdmaXJzdE1hdGNoJykpO1xuICBjb25zdCBoYXNKU09OV1BDYXBzID0gXy5pc1BsYWluT2JqZWN0KGpzb253cENhcGFiaWxpdGllcyk7XG4gIGxldCBkZXNpcmVkQ2FwcyA9IHt9O1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzID0gbnVsbDtcbiAgbGV0IHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyA9IG51bGw7XG5cbiAgaWYgKCFoYXNXM0NDYXBzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sOiBQUk9UT0NPTFMuVzNDLFxuICAgICAgZXJyb3I6IG5ldyBFcnJvcignVzNDIGNhcGFiaWxpdGllcyBzaG91bGQgYmUgcHJvdmlkZWQnKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qge1czQ30gPSBQUk9UT0NPTFM7XG4gIGNvbnN0IHByb3RvY29sID0gVzNDO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuICBqc29ud3BDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBhYmlsaXRpZXMpO1xuICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoZGVmYXVsdENhcGFiaWxpdGllcyk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgICAgZm9yIChjb25zdCBbZGVmYXVsdENhcEtleSwgZGVmYXVsdENhcFZhbHVlXSBvZiBfLnRvUGFpcnMoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbGV0IGlzQ2FwQWxyZWFkeVNldCA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBmaXJzdE1hdGNoIGVudHJpZXNcbiAgICAgICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgKHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoIHx8IFtdKSkge1xuICAgICAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZmlyc3RNYXRjaEVudHJ5KVxuICAgICAgICAgICAgICAmJiBfLmhhcyhyZW1vdmVBcHBpdW1QcmVmaXhlcyhmaXJzdE1hdGNoRW50cnkpLCByZW1vdmVBcHBpdW1QcmVmaXgoZGVmYXVsdENhcEtleSkpKSB7XG4gICAgICAgICAgICBpc0NhcEFscmVhZHlTZXQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIGFsd2F5c01hdGNoIGVudHJpZXNcbiAgICAgICAgaXNDYXBBbHJlYWR5U2V0ID0gaXNDYXBBbHJlYWR5U2V0IHx8IChfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKVxuICAgICAgICAgICYmIF8uaGFzKHJlbW92ZUFwcGl1bVByZWZpeGVzKHczY0NhcGFiaWxpdGllcy5hbHdheXNNYXRjaCksIHJlbW92ZUFwcGl1bVByZWZpeChkZWZhdWx0Q2FwS2V5KSkpO1xuICAgICAgICBpZiAoaXNDYXBBbHJlYWR5U2V0KSB7XG4gICAgICAgICAgLy8gU2tpcCBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcHJvdmlkZWQgY2Fwc1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBhZGQgdGhlIGRlZmF1bHQgY2FwYWJpbGl0eSBpZiBpdCBpcyBub3Qgb3ZlcnJpZGRlblxuICAgICAgICBpZiAoXy5pc0VtcHR5KHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoKSkge1xuICAgICAgICAgIHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoID0gW3tbZGVmYXVsdENhcEtleV06IGRlZmF1bHRDYXBWYWx1ZX1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHczY0NhcGFiaWxpdGllcy5maXJzdE1hdGNoWzBdW2RlZmF1bHRDYXBLZXldID0gZGVmYXVsdENhcFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgICBqc29ud3BDYXBhYmlsaXRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCByZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSwganNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVzaXJlZENhcHMsXG4gICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIG5ldyB3M2MgY2FwYWJpbGl0aWVzIHBheWxvYWQgdGhhdCBjb250YWlucyBvbmx5IHRoZSBtYXRjaGluZyBjYXBzIGluIGBhbHdheXNNYXRjaGBcbiAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMgPSB7XG4gICAgICBhbHdheXNNYXRjaDogey4uLmluc2VydEFwcGl1bVByZWZpeGVzKGRlc2lyZWRDYXBzKX0sXG4gICAgICBmaXJzdE1hdGNoOiBbe31dLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge2Rlc2lyZWRDYXBzLCBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcywgcHJvdG9jb2x9O1xufVxuXG4vKipcbiAqIFRha2VzIGEgY2FwYWJpbGl0aWVzIG9iamVjdHMgYW5kIHByZWZpeGVzIGNhcGFiaWxpdGllcyB3aXRoIGBhcHBpdW06YFxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgRGVzaXJlZCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGluc2VydEFwcGl1bVByZWZpeGVzIChjYXBzKSB7XG4gIC8vIFN0YW5kYXJkLCBub24tcHJlZml4ZWQgY2FwYWJpbGl0aWVzIChzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jZGZuLXRhYmxlLW9mLXN0YW5kYXJkLWNhcGFiaWxpdGllcylcbiAgY29uc3QgU1RBTkRBUkRfQ0FQUyA9IFtcbiAgICAnYnJvd3Nlck5hbWUnLFxuICAgICdicm93c2VyVmVyc2lvbicsXG4gICAgJ3BsYXRmb3JtTmFtZScsXG4gICAgJ2FjY2VwdEluc2VjdXJlQ2VydHMnLFxuICAgICdwYWdlTG9hZFN0cmF0ZWd5JyxcbiAgICAncHJveHknLFxuICAgICdzZXRXaW5kb3dSZWN0JyxcbiAgICAndGltZW91dHMnLFxuICAgICd1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcidcbiAgXTtcblxuICBsZXQgcHJlZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgaWYgKFNUQU5EQVJEX0NBUFMuaW5jbHVkZXMobmFtZSkgfHwgbmFtZS5pbmNsdWRlcygnOicpKSB7XG4gICAgICBwcmVmaXhlZENhcHNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZWRDYXBzW2Ake1czQ19BUFBJVU1fUFJFRklYfToke25hbWV9YF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByZWZpeGVkQ2Fwcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIGNvbnN0IGZpeGVkQ2FwcyA9IHt9O1xuICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhjYXBzKSkge1xuICAgIGZpeGVkQ2Fwc1tyZW1vdmVBcHBpdW1QcmVmaXgobmFtZSldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGZpeGVkQ2Fwcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4IChrZXkpIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7VzNDX0FQUElVTV9QUkVGSVh9OmA7XG4gIHJldHVybiBfLnN0YXJ0c1dpdGgoa2V5LCBwcmVmaXgpID8ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSA6IGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb24gKHBrZ05hbWUpIHtcbiAgY29uc3QgcGtnSW5mbyA9IHJlcXVpcmUoYCR7cGtnTmFtZX0vcGFja2FnZS5qc29uYCkgfHwge307XG4gIHJldHVybiBwa2dJbmZvLnZlcnNpb247XG59XG5cbi8qKlxuICogUHVsbHMgdGhlIGluaXRpYWwgdmFsdWVzIG9mIEFwcGl1bSBzZXR0aW5ncyBmcm9tIHRoZSBnaXZlbiBjYXBhYmlsaXRpZXMgYXJndW1lbnQuXG4gKiBFYWNoIHNldHRpbmcgaXRlbSBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gKiBgc2V0dGluZ1tzZXR0aW5nX25hbWVdOiBzZXR0aW5nX3ZhbHVlYFxuICogVGhlIGNhcGFiaWxpdGllcyBhcmd1bWVudCBpdHNlbGYgZ2V0cyBtdXRhdGVkLCBzbyBpdCBkb2VzIG5vdCBjb250YWluIHBhcnNlZFxuICogc2V0dGluZ3MgYW55bW9yZSB0byBhdm9pZCBmdXJ0aGVyIHBhcnNpbmcgaXNzdWVzLlxuICogQ2hlY2tcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vYWR2YW5jZWQtY29uY2VwdHMvc2V0dGluZ3MubWRcbiAqIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGF2YWlsYWJsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gez9PYmplY3R9IGNhcHMgLSBDYXBhYmlsaXRpZXMgZGljdGlvbmFyeS4gSXQgaXMgbXV0YXRlZCBpZlxuICogb25lIG9yIG1vcmUgc2V0dGluZ3MgaGF2ZSBiZWVuIHB1bGxlZCBmcm9tIGl0XG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gQW4gZW1wdHkgZGljdGlvbmFyeSBpZiB0aGUgZ2l2ZW4gY2FwcyBjb250YWlucyBub1xuICogc2V0dGluZyBpdGVtcyBvciBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBwYXJzZWQgQXBwaXVtIHNldHRpbmcgbmFtZXMgYWxvbmcgd2l0aFxuICogdGhlaXIgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBwdWxsU2V0dGluZ3MgKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykgfHwgXy5pc0VtcHR5KGNhcHMpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhjYXBzKSkge1xuICAgIGNvbnN0IG1hdGNoID0gL1xcYnNldHRpbmdzXFxbKFxcUyspXFxdJC8uZXhlYyhrZXkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc3VsdFttYXRjaFsxXV0gPSB2YWx1ZTtcbiAgICBkZWxldGUgY2Fwc1trZXldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IHJvb3REaXIgPSBmcy5maW5kUm9vdChfX2Rpcm5hbWUpO1xuXG5cbi8qKlxuICogQSBNYXAgd2hlcmUgeW91IGNhbiBzZXQgcHJvcGVydGllcywgYnV0IG9ubHkgb25jZS4gQW5kIHlvdSBjYW4ndCByZW1vdmUgYW55dGhpbmcuIFNvIHRoZXJlLlxuICogQHRlbXBsYXRlIEssVlxuICogQGV4dGVuZHMge01hcDxLLFY+fVxuICovXG5jbGFzcyBSZWFkb25seU1hcCBleHRlbmRzIE1hcCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0t9IGtleVxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlXG4gICAqL1xuICBzZXQgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2tleX0gaXMgYWxyZWFkeSBzZXRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNldChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIGRlbGV0ZSAoa2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2tleX0gY2Fubm90IGJlIGRlbGV0ZWRgKTtcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciBSZWFkb25seU1hcGApO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGluc3BlY3RPYmplY3QsIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBpbnNlcnRBcHBpdW1QcmVmaXhlcywgcm9vdERpcixcbiAgZ2V0UGFja2FnZVZlcnNpb24sIHB1bGxTZXR0aW5ncywgcmVtb3ZlQXBwaXVtUHJlZml4ZXMsIFJlYWRvbmx5TWFwXG59O1xuIl0sImZpbGUiOiJsaWIvdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
220
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImlzU3Rkb3V0VFRZIiwicHJvY2VzcyIsInN0ZG91dCIsImlzVFRZIiwiaW5zcGVjdCIsIl8iLCJmbG93IiwicGFydGlhbFJpZ2h0IiwiZHVtcCIsImNvbG9ycyIsImRlcHRoIiwiY29tcGFjdCIsImFyZ3MiLCJsb2dnZXIiLCJpbmZvIiwicGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIiLCJqc29ud3BDYXBhYmlsaXRpZXMiLCJ3M2NDYXBhYmlsaXRpZXMiLCJjb25zdHJhaW50cyIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJoYXNXM0NDYXBzIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJFcnJvciIsImNsb25lRGVlcCIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwidG9QYWlycyIsImlzQ2FwQWxyZWFkeVNldCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJyZW1vdmVBcHBpdW1QcmVmaXhlcyIsInJlbW92ZUFwcGl1bVByZWZpeCIsImFsd2F5c01hdGNoIiwiT2JqZWN0IiwiYXNzaWduIiwibWVzc2FnZSIsImluc2VydEFwcGl1bVByZWZpeGVzIiwiY2FwcyIsIlNUQU5EQVJEX0NBUFMiLCJwcmVmaXhlZENhcHMiLCJuYW1lIiwidmFsdWUiLCJpbmNsdWRlcyIsImZpeGVkQ2FwcyIsImtleSIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJnZXRQYWNrYWdlVmVyc2lvbiIsInBrZ05hbWUiLCJwa2dJbmZvIiwicmVxdWlyZSIsInZlcnNpb24iLCJwdWxsU2V0dGluZ3MiLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiLCJyb290RGlyIiwiZnMiLCJmaW5kUm9vdCIsIl9fZGlybmFtZSIsIlJlYWRvbmx5TWFwIiwiTWFwIiwic2V0IiwiZGVsZXRlIiwiY2xlYXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLFFBQTFCO0FBU0EsTUFBTUMsV0FBVyxHQUFHQyxPQUFPLENBQUNDLE1BQVIsQ0FBZUMsS0FBbkM7O0FBT0EsTUFBTUMsT0FBTyxHQUFHQyxnQkFBRUMsSUFBRixDQUNkRCxnQkFBRUUsWUFBRixDQUNpRkMsYUFEakYsRUFFRTtBQUFDQyxFQUFBQSxNQUFNLEVBQUUsSUFBVDtBQUFlQyxFQUFBQSxLQUFLLEVBQUUsSUFBdEI7QUFBNEJDLEVBQUFBLE9BQU8sRUFBRSxDQUFDWDtBQUF0QyxDQUZGLENBRGMsRUFLZCxDQUFDLEdBQUdZLElBQUosS0FBYTtBQUNYQyxrQkFBT0MsSUFBUCxDQUFZLEdBQUdGLElBQWY7QUFDRCxDQVBhLENBQWhCOzs7O0FBa0JBLFNBQVNHLHVCQUFULENBQWtDQyxrQkFBbEMsRUFBc0RDLGVBQXRELEVBQXVFQyxXQUFXLEdBQUcsRUFBckYsRUFBeUZDLG1CQUFtQixHQUFHLEVBQS9HLEVBQW1IO0FBRWpILFFBQU1DLFVBQVUsR0FBR2YsZ0JBQUVnQixhQUFGLENBQWdCSixlQUFoQixNQUNoQlosZ0JBQUVpQixHQUFGLENBQU1MLGVBQU4sRUFBdUIsYUFBdkIsS0FBeUNaLGdCQUFFaUIsR0FBRixDQUFNTCxlQUFOLEVBQXVCLFlBQXZCLENBRHpCLENBQW5COztBQUVBLFFBQU1NLGFBQWEsR0FBR2xCLGdCQUFFZ0IsYUFBRixDQUFnQkwsa0JBQWhCLENBQXRCOztBQUNBLE1BQUlRLFdBQVcsR0FBRyxFQUFsQjtBQUNBLE1BQUlDLHdCQUF3QixHQUFHLElBQS9CO0FBQ0EsTUFBSUMsMkJBQTJCLEdBQUcsSUFBbEM7O0FBRUEsTUFBSSxDQUFDTixVQUFM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QUFDQSxXQUFPSixJQUFJLENBQUNPLEdBQUQsQ0FBWDtBQUNEOztBQUNELFNBQU9XLE1BQVA7QUFDRDs7QUFFRCxNQUFNRyxPQUFPLEdBQUdDLFlBQUdDLFFBQUgsQ0FBWUMsU0FBWixDQUFoQjs7OztBQVFBLE1BQU1DLFdBQU4sU0FBMEJDLEdBQTFCLENBQThCO0FBSzVCQyxFQUFBQSxHQUFHLENBQUVwQixHQUFGLEVBQU9ILEtBQVAsRUFBYztBQUNmLFFBQUksS0FBSzdCLEdBQUwsQ0FBU2dDLEdBQVQsQ0FBSixFQUFtQjtBQUNqQixZQUFNLElBQUl2QixLQUFKLENBQVcsR0FBRXVCLEdBQUksaUJBQWpCLENBQU47QUFDRDs7QUFDRCxXQUFPLE1BQU1vQixHQUFOLENBQVVwQixHQUFWLEVBQWVILEtBQWYsQ0FBUDtBQUNEOztBQUVEd0IsRUFBQUEsTUFBTSxHQUFJO0FBQ1IsV0FBTyxLQUFQO0FBQ0Q7O0FBRURDLEVBQUFBLEtBQUssR0FBSTtBQUNQLFVBQU0sSUFBSTdDLEtBQUosQ0FBVywwQkFBWCxDQUFOO0FBQ0Q7O0FBbEIyQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBwcm9jZXNzQ2FwYWJpbGl0aWVzLCBQUk9UT0NPTFMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGluc3BlY3QgYXMgZHVtcCB9IGZyb20gJ3V0aWwnO1xuXG5jb25zdCBXM0NfQVBQSVVNX1BSRUZJWCA9ICdhcHBpdW0nO1xuXG4vKipcbiAqXG4gKiBJZiBgc3Rkb3V0YCBpcyBhIFRUWSwgdGhpcyBpcyBgdHJ1ZWAuXG4gKlxuICogVXNlZCBmb3IgdGlnaHRlciBjb250cm9sIG92ZXIgbG9nIG91dHB1dC5cbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5jb25zdCBpc1N0ZG91dFRUWSA9IHByb2Nlc3Muc3Rkb3V0LmlzVFRZO1xuXG4vKipcbiAqIER1bXBzIHRvIHZhbHVlIHRvIHRoZSBjb25zb2xlIHVzaW5nIGBpbmZvYCBsb2dnZXIuXG4gKlxuICogQHRvZG8gTWF5IHdhbnQgdG8gZm9yY2UgY29sb3IgdG8gYmUgYGZhbHNlYCBpZiB7QGxpbmsgaXNTdGRvdXRUVFl9IGlzIGBmYWxzZWAuXG4gKi9cbmNvbnN0IGluc3BlY3QgPSBfLmZsb3coXG4gIF8ucGFydGlhbFJpZ2h0KFxuICAgIC8qKiBAdHlwZSB7KG9iamVjdDogYW55LCBvcHRpb25zOiBpbXBvcnQoJ3V0aWwnKS5JbnNwZWN0T3B0aW9ucykgPT4gc3RyaW5nfSAqLyhkdW1wKSxcbiAgICB7Y29sb3JzOiB0cnVlLCBkZXB0aDogbnVsbCwgY29tcGFjdDogIWlzU3Rkb3V0VFRZfVxuICApLFxuICAoLi4uYXJncykgPT4ge1xuICAgIGxvZ2dlci5pbmZvKC4uLmFyZ3MpO1xuICB9KTtcblxuLyoqXG4gKiBUYWtlcyB0aGUgY2FwcyB0aGF0IHdlcmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYW5kIHRyYW5zbGF0ZXMgdGhlbVxuICogaW50byBjYXBzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGlubmVyIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGpzb253cENhcGFiaWxpdGllc1xuICogQHBhcmFtIHtPYmplY3R9IHczY0NhcGFiaWxpdGllc1xuICogQHBhcmFtIHtPYmplY3R9IGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENhcGFiaWxpdGllc1xuICovXG5mdW5jdGlvbiBwYXJzZUNhcHNGb3JJbm5lckRyaXZlciAoanNvbndwQ2FwYWJpbGl0aWVzLCB3M2NDYXBhYmlsaXRpZXMsIGNvbnN0cmFpbnRzID0ge30sIGRlZmF1bHRDYXBhYmlsaXRpZXMgPSB7fSkge1xuICAvLyBDaGVjayBpZiB0aGUgY2FsbGVyIHNlbnQgSlNPTldQIGNhcHMsIFczQyBjYXBzLCBvciBib3RoXG4gIGNvbnN0IGhhc1czQ0NhcHMgPSBfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSAmJlxuICAgIChfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdhbHdheXNNYXRjaCcpIHx8IF8uaGFzKHczY0NhcGFiaWxpdGllcywgJ2ZpcnN0TWF0Y2gnKSk7XG4gIGNvbnN0IGhhc0pTT05XUENhcHMgPSBfLmlzUGxhaW5PYmplY3QoanNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgbGV0IGRlc2lyZWRDYXBzID0ge307XG4gIGxldCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMgPSBudWxsO1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gbnVsbDtcblxuICBpZiAoIWhhc1czQ0NhcHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvdG9jb2w6IFBST1RPQ09MUy5XM0MsXG4gICAgICBlcnJvcjogbmV3IEVycm9yKCdXM0MgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBwcm92aWRlZCcpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCB7VzNDfSA9IFBST1RPQ09MUztcbiAgY29uc3QgcHJvdG9jb2wgPSBXM0M7XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG4gIGpzb253cENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcGFiaWxpdGllcyk7XG4gIHczY0NhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHczY0NhcGFiaWxpdGllcyk7XG4gIGRlZmF1bHRDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChkZWZhdWx0Q2FwYWJpbGl0aWVzKTtcblxuICBpZiAoIV8uaXNFbXB0eShkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGlmIChoYXNXM0NDYXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtkZWZhdWx0Q2FwS2V5LCBkZWZhdWx0Q2FwVmFsdWVdIG9mIF8udG9QYWlycyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgICAgICBsZXQgaXNDYXBBbHJlYWR5U2V0ID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIGZpcnN0TWF0Y2ggZW50cmllc1xuICAgICAgICBmb3IgKGNvbnN0IGZpcnN0TWF0Y2hFbnRyeSBvZiAodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pKSB7XG4gICAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChmaXJzdE1hdGNoRW50cnkpXG4gICAgICAgICAgICAgICYmIF8uaGFzKHJlbW92ZUFwcGl1bVByZWZpeGVzKGZpcnN0TWF0Y2hFbnRyeSksIHJlbW92ZUFwcGl1bVByZWZpeChkZWZhdWx0Q2FwS2V5KSkpIHtcbiAgICAgICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gYWx3YXlzTWF0Y2ggZW50cmllc1xuICAgICAgICBpc0NhcEFscmVhZHlTZXQgPSBpc0NhcEFscmVhZHlTZXQgfHwgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpXG4gICAgICAgICAgJiYgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKSk7XG4gICAgICAgIGlmIChpc0NhcEFscmVhZHlTZXQpIHtcbiAgICAgICAgICAvLyBTa2lwIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwcm92aWRlZCBjYXBzXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IGFkZCB0aGUgZGVmYXVsdCBjYXBhYmlsaXR5IGlmIGl0IGlzIG5vdCBvdmVycmlkZGVuXG4gICAgICAgIGlmIChfLmlzRW1wdHkodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2gpKSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggPSBbe1tkZWZhdWx0Q2FwS2V5XTogZGVmYXVsdENhcFZhbHVlfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2hbMF1bZGVmYXVsdENhcEtleV0gPSBkZWZhdWx0Q2FwVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICAgIGpzb253cENhcGFiaWxpdGllcyA9IE9iamVjdC5hc3NpZ24oe30sIHJlbW92ZUFwcGl1bVByZWZpeGVzKGRlZmF1bHRDYXBhYmlsaXRpZXMpLCBqc29ud3BDYXBhYmlsaXRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBNSlNPTldQIGNhcHNcbiAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMgPSB7Li4uanNvbndwQ2FwYWJpbGl0aWVzfTtcbiAgfVxuXG4gIC8vIEdldCBXM0MgY2Fwc1xuICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgIC8vIENhbGwgdGhlIHByb2Nlc3MgY2FwYWJpbGl0aWVzIGFsZ29yaXRobSB0byBmaW5kIG1hdGNoaW5nIGNhcHMgb24gdGhlIFczQ1xuICAgIC8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qbGlwcHMvc2ltcGxlLXdkLXNwZWMjcHJvY2Vzc2luZy1jYXBhYmlsaXRpZXMpXG4gICAgdHJ5IHtcbiAgICAgIGRlc2lyZWRDYXBzID0gcHJvY2Vzc0NhcGFiaWxpdGllcyh3M2NDYXBhYmlsaXRpZXMsIGNvbnN0cmFpbnRzLCB0cnVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmluZm8oYENvdWxkIG5vdCBwYXJzZSBXM0MgY2FwYWJpbGl0aWVzOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXNpcmVkQ2FwcyxcbiAgICAgICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBlcnJvcixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHczYyBjYXBhYmlsaXRpZXMgcGF5bG9hZCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1hdGNoaW5nIGNhcHMgaW4gYGFsd2F5c01hdGNoYFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyA9IHtcbiAgICAgIGFsd2F5c01hdGNoOiB7Li4uaW5zZXJ0QXBwaXVtUHJlZml4ZXMoZGVzaXJlZENhcHMpfSxcbiAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7ZGVzaXJlZENhcHMsIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcywgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLCBwcm90b2NvbH07XG59XG5cbi8qKlxuICogVGFrZXMgYSBjYXBhYmlsaXRpZXMgb2JqZWN0cyBhbmQgcHJlZml4ZXMgY2FwYWJpbGl0aWVzIHdpdGggYGFwcGl1bTpgXG4gKiBAcGFyYW0ge09iamVjdH0gY2FwcyBEZXNpcmVkIGNhcGFiaWxpdGllcyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaW5zZXJ0QXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJ1xuICBdO1xuXG4gIGxldCBwcmVmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBpZiAoU1RBTkRBUkRfQ0FQUy5pbmNsdWRlcyhuYW1lKSB8fCBuYW1lLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgIHByZWZpeGVkQ2Fwc1tuYW1lXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXhlZENhcHNbYCR7VzNDX0FQUElVTV9QUkVGSVh9OiR7bmFtZX1gXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJlZml4ZWRDYXBzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBcHBpdW1QcmVmaXhlcyAoY2Fwcykge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSkge1xuICAgIHJldHVybiBjYXBzO1xuICB9XG5cbiAgY29uc3QgZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgZml4ZWRDYXBzW3JlbW92ZUFwcGl1bVByZWZpeChuYW1lKV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZml4ZWRDYXBzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBcHBpdW1QcmVmaXggKGtleSkge1xuICBjb25zdCBwcmVmaXggPSBgJHtXM0NfQVBQSVVNX1BSRUZJWH06YDtcbiAgcmV0dXJuIF8uc3RhcnRzV2l0aChrZXksIHByZWZpeCkgPyBrZXkuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpIDoga2V5O1xufVxuXG5mdW5jdGlvbiBnZXRQYWNrYWdlVmVyc2lvbiAocGtnTmFtZSkge1xuICBjb25zdCBwa2dJbmZvID0gcmVxdWlyZShgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKSB8fCB7fTtcbiAgcmV0dXJuIHBrZ0luZm8udmVyc2lvbjtcbn1cblxuLyoqXG4gKiBQdWxscyB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgQXBwaXVtIHNldHRpbmdzIGZyb20gdGhlIGdpdmVuIGNhcGFiaWxpdGllcyBhcmd1bWVudC5cbiAqIEVhY2ggc2V0dGluZyBpdGVtIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAqIGBzZXR0aW5nW3NldHRpbmdfbmFtZV06IHNldHRpbmdfdmFsdWVgXG4gKiBUaGUgY2FwYWJpbGl0aWVzIGFyZ3VtZW50IGl0c2VsZiBnZXRzIG11dGF0ZWQsIHNvIGl0IGRvZXMgbm90IGNvbnRhaW4gcGFyc2VkXG4gKiBzZXR0aW5ncyBhbnltb3JlIHRvIGF2b2lkIGZ1cnRoZXIgcGFyc2luZyBpc3N1ZXMuXG4gKiBDaGVja1xuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi9hZHZhbmNlZC1jb25jZXB0cy9zZXR0aW5ncy5tZFxuICogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSB7P09iamVjdH0gY2FwcyAtIENhcGFiaWxpdGllcyBkaWN0aW9uYXJ5LiBJdCBpcyBtdXRhdGVkIGlmXG4gKiBvbmUgb3IgbW9yZSBzZXR0aW5ncyBoYXZlIGJlZW4gcHVsbGVkIGZyb20gaXRcbiAqIEByZXR1cm4ge09iamVjdH0gLSBBbiBlbXB0eSBkaWN0aW9uYXJ5IGlmIHRoZSBnaXZlbiBjYXBzIGNvbnRhaW5zIG5vXG4gKiBzZXR0aW5nIGl0ZW1zIG9yIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHBhcnNlZCBBcHBpdW0gc2V0dGluZyBuYW1lcyBhbG9uZyB3aXRoXG4gKiB0aGVpciB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHB1bGxTZXR0aW5ncyAoY2Fwcykge1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSB8fCBfLmlzRW1wdHkoY2FwcykpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgY29uc3QgbWF0Y2ggPSAvXFxic2V0dGluZ3NcXFsoXFxTKylcXF0kLy5leGVjKGtleSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzdWx0W21hdGNoWzFdXSA9IHZhbHVlO1xuICAgIGRlbGV0ZSBjYXBzW2tleV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3Qgcm9vdERpciA9IGZzLmZpbmRSb290KF9fZGlybmFtZSk7XG5cblxuLyoqXG4gKiBBIE1hcCB3aGVyZSB5b3UgY2FuIHNldCBwcm9wZXJ0aWVzLCBidXQgb25seSBvbmNlLiBBbmQgeW91IGNhbid0IHJlbW92ZSBhbnl0aGluZy4gU28gdGhlcmUuXG4gKiBAdGVtcGxhdGUgSyxWXG4gKiBAZXh0ZW5kcyB7TWFwPEssVj59XG4gKi9cbmNsYXNzIFJlYWRvbmx5TWFwIGV4dGVuZHMgTWFwIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7S30ga2V5XG4gICAqIEBwYXJhbSB7Vn0gdmFsdWVcbiAgICovXG4gIHNldCAoa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5fSBpcyBhbHJlYWR5IHNldGApO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgZGVsZXRlICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgUmVhZG9ubHlNYXBgKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBpbnNwZWN0LCBwYXJzZUNhcHNGb3JJbm5lckRyaXZlciwgaW5zZXJ0QXBwaXVtUHJlZml4ZXMsIHJvb3REaXIsXG4gIGdldFBhY2thZ2VWZXJzaW9uLCBwdWxsU2V0dGluZ3MsIHJlbW92ZUFwcGl1bVByZWZpeGVzLCBSZWFkb25seU1hcFxufTtcbiJdLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
require("source-map-support/register");
|
|
5
|
+
|
|
6
|
+
async function main() {
|
|
7
|
+
const driverEnv = process.env.npm_config_drivers;
|
|
8
|
+
const pluginEnv = process.env.npm_config_plugins;
|
|
9
|
+
|
|
10
|
+
if (!driverEnv && !pluginEnv) {
|
|
11
|
+
console.log('Not auto-installing any drivers or plugins');
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let extension;
|
|
16
|
+
|
|
17
|
+
try {
|
|
18
|
+
extension = require('./build/lib/cli/extension');
|
|
19
|
+
} catch (e) {
|
|
20
|
+
throw new Error(`Could not load extension CLI file; has the project been transpiled? ` + `(${e.message})`);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const {
|
|
24
|
+
DEFAULT_APPIUM_HOME,
|
|
25
|
+
DRIVER_TYPE,
|
|
26
|
+
PLUGIN_TYPE
|
|
27
|
+
} = require('./build/lib/extension-config');
|
|
28
|
+
|
|
29
|
+
const {
|
|
30
|
+
runExtensionCommand
|
|
31
|
+
} = extension;
|
|
32
|
+
const appiumHome = process.env.npm_config_appium_home || DEFAULT_APPIUM_HOME;
|
|
33
|
+
const specs = [[DRIVER_TYPE, driverEnv], [PLUGIN_TYPE, pluginEnv]];
|
|
34
|
+
|
|
35
|
+
for (const [type, extEnv] of specs) {
|
|
36
|
+
if (extEnv) {
|
|
37
|
+
for (const ext of extEnv.split(',')) {
|
|
38
|
+
try {
|
|
39
|
+
await checkAndInstallExtension({
|
|
40
|
+
runExtensionCommand,
|
|
41
|
+
appiumHome,
|
|
42
|
+
type,
|
|
43
|
+
ext
|
|
44
|
+
});
|
|
45
|
+
} catch (e) {
|
|
46
|
+
console.log(`There was an error checking and installing ${type} ${ext}: ${e.message}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async function checkAndInstallExtension({
|
|
54
|
+
runExtensionCommand,
|
|
55
|
+
appiumHome,
|
|
56
|
+
type,
|
|
57
|
+
ext
|
|
58
|
+
}) {
|
|
59
|
+
const extList = await runExtensionCommand({
|
|
60
|
+
appiumHome,
|
|
61
|
+
[`${type}Command`]: 'list',
|
|
62
|
+
showInstalled: true,
|
|
63
|
+
suppressOutput: true
|
|
64
|
+
}, type);
|
|
65
|
+
|
|
66
|
+
if (extList[ext]) {
|
|
67
|
+
console.log(`The ${type} ${ext} was already installed, skipping...`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
console.log(`Installing the ${type} ${ext}...`);
|
|
72
|
+
await runExtensionCommand({
|
|
73
|
+
appiumHome,
|
|
74
|
+
[`${type}Command`]: 'install',
|
|
75
|
+
[type]: ext,
|
|
76
|
+
suppressOutput: true
|
|
77
|
+
}, type);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (require.main === module) {
|
|
81
|
+
main().then(() => {
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}).catch(e => {
|
|
84
|
+
console.error(e);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
});
|
|
87
|
+
}require('source-map-support').install();
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBvc3RpbnN0YWxsLmpzIl0sIm5hbWVzIjpbIm1haW4iLCJkcml2ZXJFbnYiLCJwcm9jZXNzIiwiZW52IiwibnBtX2NvbmZpZ19kcml2ZXJzIiwicGx1Z2luRW52IiwibnBtX2NvbmZpZ19wbHVnaW5zIiwiY29uc29sZSIsImxvZyIsImV4dGVuc2lvbiIsInJlcXVpcmUiLCJlIiwiRXJyb3IiLCJtZXNzYWdlIiwiREVGQVVMVF9BUFBJVU1fSE9NRSIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJydW5FeHRlbnNpb25Db21tYW5kIiwiYXBwaXVtSG9tZSIsIm5wbV9jb25maWdfYXBwaXVtX2hvbWUiLCJzcGVjcyIsInR5cGUiLCJleHRFbnYiLCJleHQiLCJzcGxpdCIsImNoZWNrQW5kSW5zdGFsbEV4dGVuc2lvbiIsImV4dExpc3QiLCJzaG93SW5zdGFsbGVkIiwic3VwcHJlc3NPdXRwdXQiLCJtb2R1bGUiLCJ0aGVuIiwiZXhpdCIsImNhdGNoIiwiZXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBOzs7OztBQUdBLGVBQWVBLElBQWYsR0FBdUI7QUFDckIsUUFBTUMsU0FBUyxHQUFHQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsa0JBQTlCO0FBQ0EsUUFBTUMsU0FBUyxHQUFHSCxPQUFPLENBQUNDLEdBQVIsQ0FBWUcsa0JBQTlCOztBQUVBLE1BQUksQ0FBQ0wsU0FBRCxJQUFjLENBQUNJLFNBQW5CLEVBQThCO0FBQzVCRSxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSw0Q0FBWjtBQUNBO0FBQ0Q7O0FBRUQsTUFBSUMsU0FBSjs7QUFDQSxNQUFJO0FBQ0ZBLElBQUFBLFNBQVMsR0FBR0MsT0FBTyxDQUFDLDJCQUFELENBQW5CO0FBQ0QsR0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVTtBQUNWLFVBQU0sSUFBSUMsS0FBSixDQUFXLHNFQUFELEdBQ0MsSUFBR0QsQ0FBQyxDQUFDRSxPQUFRLEdBRHhCLENBQU47QUFFRDs7QUFFRCxRQUFNO0FBQUNDLElBQUFBLG1CQUFEO0FBQXNCQyxJQUFBQSxXQUF0QjtBQUFtQ0MsSUFBQUE7QUFBbkMsTUFBa0ROLE9BQU8sQ0FBQyw4QkFBRCxDQUEvRDs7QUFDQSxRQUFNO0FBQUNPLElBQUFBO0FBQUQsTUFBd0JSLFNBQTlCO0FBQ0EsUUFBTVMsVUFBVSxHQUFHaEIsT0FBTyxDQUFDQyxHQUFSLENBQVlnQixzQkFBWixJQUFzQ0wsbUJBQXpEO0FBQ0EsUUFBTU0sS0FBSyxHQUFHLENBQUMsQ0FBQ0wsV0FBRCxFQUFjZCxTQUFkLENBQUQsRUFBMkIsQ0FBQ2UsV0FBRCxFQUFjWCxTQUFkLENBQTNCLENBQWQ7O0FBRUEsT0FBSyxNQUFNLENBQUNnQixJQUFELEVBQU9DLE1BQVAsQ0FBWCxJQUE2QkYsS0FBN0IsRUFBb0M7QUFDbEMsUUFBSUUsTUFBSixFQUFZO0FBQ1YsV0FBSyxNQUFNQyxHQUFYLElBQWtCRCxNQUFNLENBQUNFLEtBQVAsQ0FBYSxHQUFiLENBQWxCLEVBQXFDO0FBQ25DLFlBQUk7QUFDRixnQkFBTUMsd0JBQXdCLENBQUM7QUFBQ1IsWUFBQUEsbUJBQUQ7QUFBc0JDLFlBQUFBLFVBQXRCO0FBQWtDRyxZQUFBQSxJQUFsQztBQUF3Q0UsWUFBQUE7QUFBeEMsV0FBRCxDQUE5QjtBQUNELFNBRkQsQ0FFRSxPQUFPWixDQUFQLEVBQVU7QUFDVkosVUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQWEsOENBQTZDYSxJQUFLLElBQUdFLEdBQUksS0FBSVosQ0FBQyxDQUFDRSxPQUFRLEVBQXBGO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7QUFDRjs7QUFFRCxlQUFlWSx3QkFBZixDQUF5QztBQUN2Q1IsRUFBQUEsbUJBRHVDO0FBRXZDQyxFQUFBQSxVQUZ1QztBQUd2Q0csRUFBQUEsSUFIdUM7QUFJdkNFLEVBQUFBO0FBSnVDLENBQXpDLEVBS0c7QUFDRCxRQUFNRyxPQUFPLEdBQUcsTUFBTVQsbUJBQW1CLENBQUM7QUFDeENDLElBQUFBLFVBRHdDO0FBRXhDLEtBQUUsR0FBRUcsSUFBSyxTQUFULEdBQW9CLE1BRm9CO0FBR3hDTSxJQUFBQSxhQUFhLEVBQUUsSUFIeUI7QUFJeENDLElBQUFBLGNBQWMsRUFBRTtBQUp3QixHQUFELEVBS3RDUCxJQUxzQyxDQUF6Qzs7QUFNQSxNQUFJSyxPQUFPLENBQUNILEdBQUQsQ0FBWCxFQUFrQjtBQUNoQmhCLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFhLE9BQU1hLElBQUssSUFBR0UsR0FBSSxxQ0FBL0I7QUFDQTtBQUNEOztBQUNEaEIsRUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQWEsa0JBQWlCYSxJQUFLLElBQUdFLEdBQUksS0FBMUM7QUFDQSxRQUFNTixtQkFBbUIsQ0FBQztBQUN4QkMsSUFBQUEsVUFEd0I7QUFFeEIsS0FBRSxHQUFFRyxJQUFLLFNBQVQsR0FBb0IsU0FGSTtBQUd4QixLQUFDQSxJQUFELEdBQVFFLEdBSGdCO0FBSXhCSyxJQUFBQSxjQUFjLEVBQUU7QUFKUSxHQUFELEVBS3RCUCxJQUxzQixDQUF6QjtBQU1EOztBQUVELElBQUlYLE9BQU8sQ0FBQ1YsSUFBUixLQUFpQjZCLE1BQXJCLEVBQTZCO0FBQzNCN0IsRUFBQUEsSUFBSSxHQUFHOEIsSUFBUCxDQUFZLE1BQU07QUFDaEI1QixJQUFBQSxPQUFPLENBQUM2QixJQUFSLENBQWEsQ0FBYjtBQUNELEdBRkQsRUFFR0MsS0FGSCxDQUVVckIsQ0FBRCxJQUFPO0FBQ2RKLElBQUFBLE9BQU8sQ0FBQzBCLEtBQVIsQ0FBY3RCLENBQWQ7QUFDQVQsSUFBQUEsT0FBTyxDQUFDNkIsSUFBUixDQUFhLENBQWI7QUFDRCxHQUxEO0FBTUQiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlLCBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuICovXG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4gKCkge1xuICBjb25zdCBkcml2ZXJFbnYgPSBwcm9jZXNzLmVudi5ucG1fY29uZmlnX2RyaXZlcnM7XG4gIGNvbnN0IHBsdWdpbkVudiA9IHByb2Nlc3MuZW52Lm5wbV9jb25maWdfcGx1Z2lucztcblxuICBpZiAoIWRyaXZlckVudiAmJiAhcGx1Z2luRW52KSB7XG4gICAgY29uc29sZS5sb2coJ05vdCBhdXRvLWluc3RhbGxpbmcgYW55IGRyaXZlcnMgb3IgcGx1Z2lucycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBleHRlbnNpb247XG4gIHRyeSB7XG4gICAgZXh0ZW5zaW9uID0gcmVxdWlyZSgnLi9idWlsZC9saWIvY2xpL2V4dGVuc2lvbicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgbG9hZCBleHRlbnNpb24gQ0xJIGZpbGU7IGhhcyB0aGUgcHJvamVjdCBiZWVuIHRyYW5zcGlsZWQ/IGAgK1xuICAgICAgICAgICAgICAgICAgICBgKCR7ZS5tZXNzYWdlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IHtERUZBVUxUX0FQUElVTV9IT01FLCBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEV9ID0gcmVxdWlyZSgnLi9idWlsZC9saWIvZXh0ZW5zaW9uLWNvbmZpZycpO1xuICBjb25zdCB7cnVuRXh0ZW5zaW9uQ29tbWFuZH0gPSBleHRlbnNpb247XG4gIGNvbnN0IGFwcGl1bUhvbWUgPSBwcm9jZXNzLmVudi5ucG1fY29uZmlnX2FwcGl1bV9ob21lIHx8IERFRkFVTFRfQVBQSVVNX0hPTUU7XG4gIGNvbnN0IHNwZWNzID0gW1tEUklWRVJfVFlQRSwgZHJpdmVyRW52XSwgW1BMVUdJTl9UWVBFLCBwbHVnaW5FbnZdXTtcblxuICBmb3IgKGNvbnN0IFt0eXBlLCBleHRFbnZdIG9mIHNwZWNzKSB7XG4gICAgaWYgKGV4dEVudikge1xuICAgICAgZm9yIChjb25zdCBleHQgb2YgZXh0RW52LnNwbGl0KCcsJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBjaGVja0FuZEluc3RhbGxFeHRlbnNpb24oe3J1bkV4dGVuc2lvbkNvbW1hbmQsIGFwcGl1bUhvbWUsIHR5cGUsIGV4dH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFRoZXJlIHdhcyBhbiBlcnJvciBjaGVja2luZyBhbmQgaW5zdGFsbGluZyAke3R5cGV9ICR7ZXh0fTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tBbmRJbnN0YWxsRXh0ZW5zaW9uICh7XG4gIHJ1bkV4dGVuc2lvbkNvbW1hbmQsXG4gIGFwcGl1bUhvbWUsXG4gIHR5cGUsXG4gIGV4dCxcbn0pIHtcbiAgY29uc3QgZXh0TGlzdCA9IGF3YWl0IHJ1bkV4dGVuc2lvbkNvbW1hbmQoe1xuICAgIGFwcGl1bUhvbWUsXG4gICAgW2Ake3R5cGV9Q29tbWFuZGBdOiAnbGlzdCcsXG4gICAgc2hvd0luc3RhbGxlZDogdHJ1ZSxcbiAgICBzdXBwcmVzc091dHB1dDogdHJ1ZSxcbiAgfSwgdHlwZSk7XG4gIGlmIChleHRMaXN0W2V4dF0pIHtcbiAgICBjb25zb2xlLmxvZyhgVGhlICR7dHlwZX0gJHtleHR9IHdhcyBhbHJlYWR5IGluc3RhbGxlZCwgc2tpcHBpbmcuLi5gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc29sZS5sb2coYEluc3RhbGxpbmcgdGhlICR7dHlwZX0gJHtleHR9Li4uYCk7XG4gIGF3YWl0IHJ1bkV4dGVuc2lvbkNvbW1hbmQoe1xuICAgIGFwcGl1bUhvbWUsXG4gICAgW2Ake3R5cGV9Q29tbWFuZGBdOiAnaW5zdGFsbCcsXG4gICAgW3R5cGVdOiBleHQsXG4gICAgc3VwcHJlc3NPdXRwdXQ6IHRydWUsXG4gIH0sIHR5cGUpO1xufVxuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgbWFpbigpLnRoZW4oKCkgPT4ge1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfSk7XG59XG4iXSwiZmlsZSI6InBvc3RpbnN0YWxsLmpzIiwic291cmNlUm9vdCI6Ii4uIn0=
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
require("source-map-support/register");
|
|
6
|
+
|
|
7
|
+
var _path = _interopRequireDefault(require("path"));
|
|
8
|
+
|
|
9
|
+
var _support = require("@appium/support");
|
|
10
|
+
|
|
11
|
+
var _drivers = require("../../lib/drivers");
|
|
12
|
+
|
|
13
|
+
var _helpers = require("../helpers");
|
|
14
|
+
|
|
15
|
+
var _cliHelpers = require("./cli-helpers");
|
|
16
|
+
|
|
17
|
+
describe('CLI', function () {
|
|
18
|
+
let appiumHome;
|
|
19
|
+
let run;
|
|
20
|
+
before(async function () {
|
|
21
|
+
appiumHome = await _support.tempDir.openDir();
|
|
22
|
+
const runner = (0, _cliHelpers.runAppium)(appiumHome);
|
|
23
|
+
|
|
24
|
+
run = async (extCommand, args = [], raw = false, ext = 'driver') => await runner([ext, extCommand, ...args], {
|
|
25
|
+
raw
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
after(async function () {
|
|
29
|
+
await _support.fs.rimraf(appiumHome);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
async function clear() {
|
|
33
|
+
await _support.fs.rimraf(appiumHome);
|
|
34
|
+
await (0, _support.mkdirp)(appiumHome);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
describe('Driver CLI', function () {
|
|
38
|
+
const localFakeDriverPath = _path.default.join(_helpers.PROJECT_ROOT, 'packages', 'fake-driver');
|
|
39
|
+
|
|
40
|
+
describe('list', function () {
|
|
41
|
+
it('should list available drivers', async function () {
|
|
42
|
+
const stdout = await run('list');
|
|
43
|
+
|
|
44
|
+
for (const d of Object.keys(_drivers.KNOWN_DRIVERS)) {
|
|
45
|
+
stdout.should.match(new RegExp(`${d}.+[not installed]`));
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
it('should list available drivers in json format', async function () {
|
|
49
|
+
const driverData = JSON.parse(await run('list', ['--json']));
|
|
50
|
+
|
|
51
|
+
for (const d of Object.keys(_drivers.KNOWN_DRIVERS)) {
|
|
52
|
+
driverData[d].should.eql({
|
|
53
|
+
installed: false,
|
|
54
|
+
pkgName: _drivers.KNOWN_DRIVERS[d]
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
it('should allow filtering by installed drivers', async function () {
|
|
59
|
+
const out = await run('list', ['--installed', '--json']);
|
|
60
|
+
JSON.parse(out).should.eql({});
|
|
61
|
+
});
|
|
62
|
+
it('should show updates for installed drivers with --updates', async function () {
|
|
63
|
+
const penultimateFakeDriverVersionAsOfRightNow = '3.0.4';
|
|
64
|
+
await clear();
|
|
65
|
+
await run('install', [`@appium/fake-driver@${penultimateFakeDriverVersionAsOfRightNow}`, '--source', 'npm', '--json']);
|
|
66
|
+
const {
|
|
67
|
+
fake
|
|
68
|
+
} = JSON.parse(await run('list', ['--updates', '--json']));
|
|
69
|
+
_support.util.compareVersions(fake.updateVersion, '>', penultimateFakeDriverVersionAsOfRightNow).should.be.true;
|
|
70
|
+
const stdout = await run('list', ['--updates']);
|
|
71
|
+
stdout.should.match(new RegExp(`fake.+[${fake.updateVersion} available]`));
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('install', function () {
|
|
75
|
+
it('should install a driver from the list of known drivers', async function () {
|
|
76
|
+
await clear();
|
|
77
|
+
const ret = JSON.parse(await run('install', ['uiautomator2', '--json']));
|
|
78
|
+
ret.uiautomator2.pkgName.should.eql('appium-uiautomator2-driver');
|
|
79
|
+
ret.uiautomator2.installType.should.eql('npm');
|
|
80
|
+
ret.uiautomator2.installSpec.should.eql('uiautomator2');
|
|
81
|
+
const list = JSON.parse(await run('list', ['--installed', '--json']));
|
|
82
|
+
delete list.uiautomator2.installed;
|
|
83
|
+
list.should.eql(ret);
|
|
84
|
+
});
|
|
85
|
+
it('should install a driver from npm', async function () {
|
|
86
|
+
await clear();
|
|
87
|
+
const ret = JSON.parse(await run('install', ['@appium/fake-driver', '--source', 'npm', '--json']));
|
|
88
|
+
ret.fake.pkgName.should.eql('@appium/fake-driver');
|
|
89
|
+
ret.fake.installType.should.eql('npm');
|
|
90
|
+
ret.fake.installSpec.should.eql('@appium/fake-driver');
|
|
91
|
+
const list = JSON.parse(await run('list', ['--installed', '--json']));
|
|
92
|
+
delete list.fake.installed;
|
|
93
|
+
list.should.eql(ret);
|
|
94
|
+
});
|
|
95
|
+
it('should install a driver from npm with a specific version/tag', async function () {
|
|
96
|
+
const currentFakeDriverVersionAsOfRightNow = '3.0.5';
|
|
97
|
+
await clear();
|
|
98
|
+
const installSpec = `@appium/fake-driver@${currentFakeDriverVersionAsOfRightNow}`;
|
|
99
|
+
const ret = JSON.parse(await run('install', [installSpec, '--source', 'npm', '--json']));
|
|
100
|
+
ret.fake.pkgName.should.eql('@appium/fake-driver');
|
|
101
|
+
ret.fake.installType.should.eql('npm');
|
|
102
|
+
ret.fake.installSpec.should.eql(installSpec);
|
|
103
|
+
const list = JSON.parse(await run('list', ['--installed', '--json']));
|
|
104
|
+
delete list.fake.installed;
|
|
105
|
+
list.should.eql(ret);
|
|
106
|
+
});
|
|
107
|
+
it('should install a driver from github', async function () {
|
|
108
|
+
await clear();
|
|
109
|
+
const ret = JSON.parse(await run('install', ['appium/appium-fake-driver', '--source', 'github', '--package', 'appium-fake-driver', '--json']));
|
|
110
|
+
ret.fake.pkgName.should.eql('appium-fake-driver');
|
|
111
|
+
ret.fake.installType.should.eql('github');
|
|
112
|
+
ret.fake.installSpec.should.eql('appium/appium-fake-driver');
|
|
113
|
+
const list = JSON.parse(await run('list', ['--installed', '--json']));
|
|
114
|
+
delete list.fake.installed;
|
|
115
|
+
list.should.eql(ret);
|
|
116
|
+
});
|
|
117
|
+
it('should install a driver from a local git repo', async function () {
|
|
118
|
+
await clear();
|
|
119
|
+
const ret = JSON.parse(await run('install', [localFakeDriverPath, '--source', 'git', '--package', '@appium/fake-driver', '--json']));
|
|
120
|
+
ret.fake.pkgName.should.eql('@appium/fake-driver');
|
|
121
|
+
ret.fake.installType.should.eql('git');
|
|
122
|
+
ret.fake.installSpec.should.eql(localFakeDriverPath);
|
|
123
|
+
const list = JSON.parse(await run('list', ['--installed', '--json']));
|
|
124
|
+
delete list.fake.installed;
|
|
125
|
+
list.should.eql(ret);
|
|
126
|
+
});
|
|
127
|
+
it('should install a driver from a remote git repo', async function () {
|
|
128
|
+
await clear();
|
|
129
|
+
const ret = JSON.parse(await run('install', ['git+https://github.com/appium/appium-fake-driver.git', '--source', 'git', '--package', 'appium-fake-driver', '--json']));
|
|
130
|
+
ret.fake.pkgName.should.eql('appium-fake-driver');
|
|
131
|
+
ret.fake.installType.should.eql('git');
|
|
132
|
+
ret.fake.installSpec.should.eql('git+https://github.com/appium/appium-fake-driver');
|
|
133
|
+
const list = JSON.parse(await run('list', ['--installed', '--json']));
|
|
134
|
+
delete list.fake.installed;
|
|
135
|
+
list.should.eql(ret);
|
|
136
|
+
});
|
|
137
|
+
it('should install a driver from a local npm module', async function () {
|
|
138
|
+
await clear();
|
|
139
|
+
const ret = JSON.parse(await run('install', [localFakeDriverPath, '--source', 'local', '--json']));
|
|
140
|
+
ret.fake.pkgName.should.eql('@appium/fake-driver');
|
|
141
|
+
ret.fake.installType.should.eql('local');
|
|
142
|
+
ret.fake.installSpec.should.eql(localFakeDriverPath);
|
|
143
|
+
const list = JSON.parse(await run('list', ['--installed', '--json']));
|
|
144
|
+
delete list.fake.installed;
|
|
145
|
+
list.should.eql(ret);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
describe('uninstall', function () {
|
|
149
|
+
it('should uninstall a driver based on its driver name', async function () {
|
|
150
|
+
await clear();
|
|
151
|
+
const ret = JSON.parse(await run('install', ['@appium/fake-driver', '--source', 'npm', '--json']));
|
|
152
|
+
|
|
153
|
+
const installPath = _path.default.resolve(appiumHome, ret.fake.installPath);
|
|
154
|
+
|
|
155
|
+
await _support.fs.exists(installPath).should.eventually.be.true;
|
|
156
|
+
let list = JSON.parse(await run('list', ['--installed', '--json']));
|
|
157
|
+
list.fake.installed.should.be.true;
|
|
158
|
+
const uninstall = JSON.parse(await run('uninstall', ['fake', '--json']));
|
|
159
|
+
uninstall.should.not.have.key('fake');
|
|
160
|
+
await _support.fs.exists(installPath).should.eventually.be.false;
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('run', function () {
|
|
164
|
+
before(async function () {
|
|
165
|
+
await clear();
|
|
166
|
+
await run('install', [localFakeDriverPath, '--source', 'local', '--json']);
|
|
167
|
+
});
|
|
168
|
+
it('should run a valid driver, valid script, and result in success', async function () {
|
|
169
|
+
const driverName = 'fake';
|
|
170
|
+
const scriptName = 'fake-success';
|
|
171
|
+
const out = JSON.parse(await run('run', [driverName, scriptName, '--json']));
|
|
172
|
+
out.should.not.include.key('error');
|
|
173
|
+
});
|
|
174
|
+
it('should run a valid driver, valid error prone script, and return error in json', async function () {
|
|
175
|
+
const driverName = 'fake';
|
|
176
|
+
const out = JSON.parse(await run('run', [driverName, 'fake-error', '--json']));
|
|
177
|
+
out.should.include.key('error');
|
|
178
|
+
});
|
|
179
|
+
it('should take a valid driver, invalid script, and throw an error', async function () {
|
|
180
|
+
const driverName = 'fake';
|
|
181
|
+
await chai.expect(run('run', [driverName, 'foo', '--json'])).to.eventually.be.rejectedWith(Error);
|
|
182
|
+
});
|
|
183
|
+
it('should take an invalid driver, invalid script, and throw an error', async function () {
|
|
184
|
+
const driverName = 'foo';
|
|
185
|
+
await chai.expect(run('run', [driverName, 'bar', '--json'])).to.eventually.be.rejectedWith(Error);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe('Plugin CLI', function () {
|
|
190
|
+
const fakePluginDir = _path.default.dirname(require.resolve('@appium/fake-plugin/package.json'));
|
|
191
|
+
|
|
192
|
+
const ext = 'plugin';
|
|
193
|
+
describe('run', function () {
|
|
194
|
+
before(async function () {
|
|
195
|
+
await clear();
|
|
196
|
+
await run('install', [fakePluginDir, '--source', 'local', '--json'], false, ext);
|
|
197
|
+
});
|
|
198
|
+
it('should run a valid plugin, valid script, and result in success', async function () {
|
|
199
|
+
const pluginName = 'fake';
|
|
200
|
+
const scriptName = 'fake-success';
|
|
201
|
+
const out = JSON.parse(await run('run', [pluginName, scriptName, '--json'], false, ext));
|
|
202
|
+
out.should.not.include.key('error');
|
|
203
|
+
});
|
|
204
|
+
it('should run a valid plugin, valid error prone script, and return error in json', async function () {
|
|
205
|
+
const pluginName = 'fake';
|
|
206
|
+
const out = JSON.parse(await run('run', [pluginName, 'fake-error', '--json'], false, ext));
|
|
207
|
+
out.should.include.key('error');
|
|
208
|
+
});
|
|
209
|
+
it('should take a valid plugin, invalid script, and throw an error', async function () {
|
|
210
|
+
const pluginName = 'fake';
|
|
211
|
+
await chai.expect(run('run', [pluginName, 'foo', '--json'], false, ext)).to.eventually.be.rejectedWith(Error);
|
|
212
|
+
});
|
|
213
|
+
it('should take an invalid plugin, invalid script, and throw an error', async function () {
|
|
214
|
+
await chai.expect(run('run', ['foo', 'bar', '--json'], false, ext)).to.eventually.be.rejectedWith(Error);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
});require('source-map-support').install();
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL2NsaS1lMmUtc3BlY3MuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJhcHBpdW1Ib21lIiwicnVuIiwiYmVmb3JlIiwidGVtcERpciIsIm9wZW5EaXIiLCJydW5uZXIiLCJleHRDb21tYW5kIiwiYXJncyIsInJhdyIsImV4dCIsImFmdGVyIiwiZnMiLCJyaW1yYWYiLCJjbGVhciIsImxvY2FsRmFrZURyaXZlclBhdGgiLCJwYXRoIiwiam9pbiIsIlBST0pFQ1RfUk9PVCIsIml0Iiwic3Rkb3V0IiwiZCIsIk9iamVjdCIsImtleXMiLCJLTk9XTl9EUklWRVJTIiwic2hvdWxkIiwibWF0Y2giLCJSZWdFeHAiLCJkcml2ZXJEYXRhIiwiSlNPTiIsInBhcnNlIiwiZXFsIiwiaW5zdGFsbGVkIiwicGtnTmFtZSIsIm91dCIsInBlbnVsdGltYXRlRmFrZURyaXZlclZlcnNpb25Bc09mUmlnaHROb3ciLCJmYWtlIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsInVwZGF0ZVZlcnNpb24iLCJiZSIsInRydWUiLCJyZXQiLCJ1aWF1dG9tYXRvcjIiLCJpbnN0YWxsVHlwZSIsImluc3RhbGxTcGVjIiwibGlzdCIsImN1cnJlbnRGYWtlRHJpdmVyVmVyc2lvbkFzT2ZSaWdodE5vdyIsImluc3RhbGxQYXRoIiwicmVzb2x2ZSIsImV4aXN0cyIsImV2ZW50dWFsbHkiLCJ1bmluc3RhbGwiLCJub3QiLCJoYXZlIiwia2V5IiwiZmFsc2UiLCJkcml2ZXJOYW1lIiwic2NyaXB0TmFtZSIsImluY2x1ZGUiLCJjaGFpIiwiZXhwZWN0IiwidG8iLCJyZWplY3RlZFdpdGgiLCJFcnJvciIsImZha2VQbHVnaW5EaXIiLCJkaXJuYW1lIiwicmVxdWlyZSIsInBsdWdpbk5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBQSxRQUFRLENBQUMsS0FBRCxFQUFRLFlBQVk7QUFJMUIsTUFBSUMsVUFBSjtBQUtBLE1BQUlD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QUFDQSxjQUFNbEMsR0FBRyxHQUFHTCxJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNNUIsR0FBRyxDQUFDLEtBQUQsRUFBUSxDQUFDa0UsVUFBRCxFQUFhLFlBQWIsRUFBMkIsUUFBM0IsQ0FBUixFQUE4QyxLQUE5QyxFQUFxRDFELEdBQXJELENBQXBCLENBQVo7QUFDQXdCLFFBQUFBLEdBQUcsQ0FBQ1QsTUFBSixDQUFXa0MsT0FBWCxDQUFtQkosR0FBbkIsQ0FBdUIsT0FBdkI7QUFDRCxPQUpDLENBQUY7QUFLQXBDLE1BQUFBLEVBQUUsQ0FBQyxnRUFBRCxFQUFtRSxrQkFBa0I7QUFDckYsY0FBTWlELFVBQVUsR0FBRyxNQUFuQjtBQUNBLGNBQU1SLElBQUksQ0FBQ0MsTUFBTCxDQUFZM0QsR0FBRyxDQUFDLEtBQUQsRUFBUSxDQUFDa0UsVUFBRCxFQUFhLEtBQWIsRUFBb0IsUUFBcEIsQ0FBUixFQUF1QyxLQUF2QyxFQUE4QzFELEdBQTlDLENBQWYsRUFBbUVvRCxFQUFuRSxDQUFzRVgsVUFBdEUsQ0FBaUZYLEVBQWpGLENBQW9GdUIsWUFBcEYsQ0FBaUdDLEtBQWpHLENBQU47QUFDRCxPQUhDLENBQUY7QUFJQTdDLE1BQUFBLEVBQUUsQ0FBQyxtRUFBRCxFQUFzRSxrQkFBa0I7QUFDeEYsY0FBTXlDLElBQUksQ0FBQ0MsTUFBTCxDQUFZM0QsR0FBRyxDQUFDLEtBQUQsRUFBUSxDQUFDLEtBQUQsRUFBUSxLQUFSLEVBQWUsUUFBZixDQUFSLEVBQWtDLEtBQWxDLEVBQXlDUSxHQUF6QyxDQUFmLEVBQThEb0QsRUFBOUQsQ0FBaUVYLFVBQWpFLENBQTRFWCxFQUE1RSxDQUErRXVCLFlBQS9FLENBQTRGQyxLQUE1RixDQUFOO0FBQ0QsT0FGQyxDQUFGO0FBR0QsS0F2Qk8sQ0FBUjtBQXdCRCxHQTNCTyxDQUFSO0FBNEJELENBN01PLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgdGVtcERpciwgZnMsIG1rZGlycCwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBLTk9XTl9EUklWRVJTIH0gZnJvbSAnLi4vLi4vbGliL2RyaXZlcnMnO1xuaW1wb3J0IHsgUFJPSkVDVF9ST09UIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBydW5BcHBpdW0gfSBmcm9tICcuL2NsaS1oZWxwZXJzJztcblxuZGVzY3JpYmUoJ0NMSScsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBsZXQgYXBwaXVtSG9tZTtcblxuICAvKipcbiAgICogQHR5cGUgeyhleHRDb21tYW5kOiBzdHJpbmcsIGFyZ3M/OiBzdHJpbmdbXSwgcmF3PzogYm9vbGVhbiwgZXh0PzogRXh0ZW5zaW9uVHlwZSkgPT4gUHJvbWlzZTxzdHJpbmd8aW1wb3J0KCcuL2NsaS1oZWxwZXJzJykuVGVlblByb2Nlc3NFeGVjUmVzdWx0Pn1cbiAgICovXG4gIGxldCBydW47XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhcHBpdW1Ib21lID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgY29uc3QgcnVubmVyID0gcnVuQXBwaXVtKGFwcGl1bUhvbWUpO1xuICAgIHJ1biA9IGFzeW5jIChleHRDb21tYW5kLCBhcmdzID0gW10sIHJhdyA9IGZhbHNlLCBleHQgPSAnZHJpdmVyJykgPT4gYXdhaXQgcnVubmVyKFtleHQsIGV4dENvbW1hbmQsIC4uLmFyZ3NdLCB7cmF3fSk7XG4gIH0pO1xuXG4gIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoYXBwaXVtSG9tZSk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoYXBwaXVtSG9tZSk7XG4gICAgYXdhaXQgbWtkaXJwKGFwcGl1bUhvbWUpO1xuICB9XG5cbiAgZGVzY3JpYmUoJ0RyaXZlciBDTEknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbG9jYWxGYWtlRHJpdmVyUGF0aCA9IHBhdGguam9pbihQUk9KRUNUX1JPT1QsICdwYWNrYWdlcycsICdmYWtlLWRyaXZlcicpO1xuICAgIGRlc2NyaWJlKCdsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBsaXN0IGF2YWlsYWJsZSBkcml2ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBydW4oJ2xpc3QnKTtcbiAgICAgICAgZm9yIChjb25zdCBkIG9mIE9iamVjdC5rZXlzKEtOT1dOX0RSSVZFUlMpKSB7XG4gICAgICAgICAgc3Rkb3V0LnNob3VsZC5tYXRjaChuZXcgUmVnRXhwKGAke2R9Litbbm90IGluc3RhbGxlZF1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBsaXN0IGF2YWlsYWJsZSBkcml2ZXJzIGluIGpzb24gZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkcml2ZXJEYXRhID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0tanNvbiddKSk7XG4gICAgICAgIGZvciAoY29uc3QgZCBvZiBPYmplY3Qua2V5cyhLTk9XTl9EUklWRVJTKSkge1xuICAgICAgICAgIGRyaXZlckRhdGFbZF0uc2hvdWxkLmVxbCh7aW5zdGFsbGVkOiBmYWxzZSwgcGtnTmFtZTogS05PV05fRFJJVkVSU1tkXX0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWxsb3cgZmlsdGVyaW5nIGJ5IGluc3RhbGxlZCBkcml2ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBvdXQgPSBhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKTtcbiAgICAgICAgSlNPTi5wYXJzZShvdXQpLnNob3VsZC5lcWwoe30pO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHNob3cgdXBkYXRlcyBmb3IgaW5zdGFsbGVkIGRyaXZlcnMgd2l0aCAtLXVwZGF0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBlbnVsdGltYXRlRmFrZURyaXZlclZlcnNpb25Bc09mUmlnaHROb3cgPSAnMy4wLjQnO1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBhd2FpdCBydW4oJ2luc3RhbGwnLCBbYEBhcHBpdW0vZmFrZS1kcml2ZXJAJHtwZW51bHRpbWF0ZUZha2VEcml2ZXJWZXJzaW9uQXNPZlJpZ2h0Tm93fWAsICctLXNvdXJjZScsICducG0nLCAnLS1qc29uJ10pO1xuICAgICAgICBjb25zdCB7ZmFrZX0gPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignbGlzdCcsIFsnLS11cGRhdGVzJywgJy0tanNvbiddKSk7XG4gICAgICAgIHV0aWwuY29tcGFyZVZlcnNpb25zKGZha2UudXBkYXRlVmVyc2lvbiwgJz4nLCBwZW51bHRpbWF0ZUZha2VEcml2ZXJWZXJzaW9uQXNPZlJpZ2h0Tm93KS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgcnVuKCdsaXN0JywgWyctLXVwZGF0ZXMnXSk7XG4gICAgICAgIHN0ZG91dC5zaG91bGQubWF0Y2gobmV3IFJlZ0V4cChgZmFrZS4rWyR7ZmFrZS51cGRhdGVWZXJzaW9ufSBhdmFpbGFibGVdYCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgaW5zdGFsbCBhIGRyaXZlciBmcm9tIHRoZSBsaXN0IG9mIGtub3duIGRyaXZlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyKCk7XG4gICAgICAgIGNvbnN0IHJldCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdpbnN0YWxsJywgWyd1aWF1dG9tYXRvcjInLCAnLS1qc29uJ10pKTtcbiAgICAgICAgcmV0LnVpYXV0b21hdG9yMi5wa2dOYW1lLnNob3VsZC5lcWwoJ2FwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyJyk7XG4gICAgICAgIHJldC51aWF1dG9tYXRvcjIuaW5zdGFsbFR5cGUuc2hvdWxkLmVxbCgnbnBtJyk7XG4gICAgICAgIHJldC51aWF1dG9tYXRvcjIuaW5zdGFsbFNwZWMuc2hvdWxkLmVxbCgndWlhdXRvbWF0b3IyJyk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignbGlzdCcsIFsnLS1pbnN0YWxsZWQnLCAnLS1qc29uJ10pKTtcbiAgICAgICAgZGVsZXRlIGxpc3QudWlhdXRvbWF0b3IyLmluc3RhbGxlZDtcbiAgICAgICAgbGlzdC5zaG91bGQuZXFsKHJldCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgaW5zdGFsbCBhIGRyaXZlciBmcm9tIG5wbScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcmV0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2luc3RhbGwnLCBbJ0BhcHBpdW0vZmFrZS1kcml2ZXInLCAnLS1zb3VyY2UnLCAnbnBtJywgJy0tanNvbiddKSk7XG4gICAgICAgIHJldC5mYWtlLnBrZ05hbWUuc2hvdWxkLmVxbCgnQGFwcGl1bS9mYWtlLWRyaXZlcicpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsVHlwZS5zaG91bGQuZXFsKCducG0nKTtcbiAgICAgICAgcmV0LmZha2UuaW5zdGFsbFNwZWMuc2hvdWxkLmVxbCgnQGFwcGl1bS9mYWtlLWRyaXZlcicpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gbnBtIHdpdGggYSBzcGVjaWZpYyB2ZXJzaW9uL3RhZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEZha2VEcml2ZXJWZXJzaW9uQXNPZlJpZ2h0Tm93ID0gJzMuMC41JztcbiAgICAgICAgYXdhaXQgY2xlYXIoKTtcbiAgICAgICAgY29uc3QgaW5zdGFsbFNwZWMgPSBgQGFwcGl1bS9mYWtlLWRyaXZlckAke2N1cnJlbnRGYWtlRHJpdmVyVmVyc2lvbkFzT2ZSaWdodE5vd31gO1xuICAgICAgICBjb25zdCByZXQgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignaW5zdGFsbCcsIFtpbnN0YWxsU3BlYywgJy0tc291cmNlJywgJ25wbScsICctLWpzb24nXSkpO1xuICAgICAgICByZXQuZmFrZS5wa2dOYW1lLnNob3VsZC5lcWwoJ0BhcHBpdW0vZmFrZS1kcml2ZXInKTtcbiAgICAgICAgcmV0LmZha2UuaW5zdGFsbFR5cGUuc2hvdWxkLmVxbCgnbnBtJyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxTcGVjLnNob3VsZC5lcWwoaW5zdGFsbFNwZWMpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gZ2l0aHViJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBjb25zdCByZXQgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignaW5zdGFsbCcsIFsnYXBwaXVtL2FwcGl1bS1mYWtlLWRyaXZlcicsICctLXNvdXJjZScsXG4gICAgICAgICAgJ2dpdGh1YicsICctLXBhY2thZ2UnLCAnYXBwaXVtLWZha2UtZHJpdmVyJywgJy0tanNvbiddKSk7XG4gICAgICAgIHJldC5mYWtlLnBrZ05hbWUuc2hvdWxkLmVxbCgnYXBwaXVtLWZha2UtZHJpdmVyJyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxUeXBlLnNob3VsZC5lcWwoJ2dpdGh1YicpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsU3BlYy5zaG91bGQuZXFsKCdhcHBpdW0vYXBwaXVtLWZha2UtZHJpdmVyJyk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignbGlzdCcsIFsnLS1pbnN0YWxsZWQnLCAnLS1qc29uJ10pKTtcbiAgICAgICAgZGVsZXRlIGxpc3QuZmFrZS5pbnN0YWxsZWQ7XG4gICAgICAgIGxpc3Quc2hvdWxkLmVxbChyZXQpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGluc3RhbGwgYSBkcml2ZXIgZnJvbSBhIGxvY2FsIGdpdCByZXBvJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBjb25zdCByZXQgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignaW5zdGFsbCcsIFtsb2NhbEZha2VEcml2ZXJQYXRoLFxuICAgICAgICAgICctLXNvdXJjZScsICdnaXQnLCAnLS1wYWNrYWdlJywgJ0BhcHBpdW0vZmFrZS1kcml2ZXInLCAnLS1qc29uJ10pKTtcbiAgICAgICAgcmV0LmZha2UucGtnTmFtZS5zaG91bGQuZXFsKCdAYXBwaXVtL2Zha2UtZHJpdmVyJyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxUeXBlLnNob3VsZC5lcWwoJ2dpdCcpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsU3BlYy5zaG91bGQuZXFsKGxvY2FsRmFrZURyaXZlclBhdGgpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gYSByZW1vdGUgZ2l0IHJlcG8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyKCk7XG4gICAgICAgIGNvbnN0IHJldCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdpbnN0YWxsJywgWydnaXQraHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tZmFrZS1kcml2ZXIuZ2l0JyxcbiAgICAgICAgICAnLS1zb3VyY2UnLCAnZ2l0JywgJy0tcGFja2FnZScsICdhcHBpdW0tZmFrZS1kcml2ZXInLCAnLS1qc29uJ10pKTtcbiAgICAgICAgcmV0LmZha2UucGtnTmFtZS5zaG91bGQuZXFsKCdhcHBpdW0tZmFrZS1kcml2ZXInKTtcbiAgICAgICAgcmV0LmZha2UuaW5zdGFsbFR5cGUuc2hvdWxkLmVxbCgnZ2l0Jyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxTcGVjLnNob3VsZC5lcWwoJ2dpdCtodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1mYWtlLWRyaXZlcicpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gYSBsb2NhbCBucG0gbW9kdWxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICAvLyB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdlIGtub3cgd2UgaGF2ZSBmYWtlIGRyaXZlciBpbnN0YWxsZWQgYXMgYSBkZXBlbmRlbmN5IGluXG4gICAgICAgIC8vIHRoaXMgbW9kdWxlLCBzbyB3ZSBrbm93IGl0cyBsb2NhbCBwYXRoIG9uIGRpc2tcbiAgICAgICAgY29uc3QgcmV0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2luc3RhbGwnLCBbbG9jYWxGYWtlRHJpdmVyUGF0aCwgJy0tc291cmNlJywgJ2xvY2FsJywgJy0tanNvbiddKSk7XG4gICAgICAgIHJldC5mYWtlLnBrZ05hbWUuc2hvdWxkLmVxbCgnQGFwcGl1bS9mYWtlLWRyaXZlcicpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsVHlwZS5zaG91bGQuZXFsKCdsb2NhbCcpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsU3BlYy5zaG91bGQuZXFsKGxvY2FsRmFrZURyaXZlclBhdGgpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3VuaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdW5pbnN0YWxsIGEgZHJpdmVyIGJhc2VkIG9uIGl0cyBkcml2ZXIgbmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcmV0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2luc3RhbGwnLCBbJ0BhcHBpdW0vZmFrZS1kcml2ZXInLCAnLS1zb3VyY2UnLCAnbnBtJywgJy0tanNvbiddKSk7XG4gICAgICAgIGNvbnN0IGluc3RhbGxQYXRoID0gcGF0aC5yZXNvbHZlKGFwcGl1bUhvbWUsIHJldC5mYWtlLmluc3RhbGxQYXRoKTtcbiAgICAgICAgYXdhaXQgZnMuZXhpc3RzKGluc3RhbGxQYXRoKS5zaG91bGQuZXZlbnR1YWxseS5iZS50cnVlO1xuICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdsaXN0JywgWyctLWluc3RhbGxlZCcsICctLWpzb24nXSkpO1xuICAgICAgICBsaXN0LmZha2UuaW5zdGFsbGVkLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBjb25zdCB1bmluc3RhbGwgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bigndW5pbnN0YWxsJywgWydmYWtlJywgJy0tanNvbiddKSk7XG4gICAgICAgIHVuaW5zdGFsbC5zaG91bGQubm90LmhhdmUua2V5KCdmYWtlJyk7XG4gICAgICAgIGF3YWl0IGZzLmV4aXN0cyhpbnN0YWxsUGF0aCkuc2hvdWxkLmV2ZW50dWFsbHkuYmUuZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBhd2FpdCBydW4oJ2luc3RhbGwnLCBbbG9jYWxGYWtlRHJpdmVyUGF0aCwgJy0tc291cmNlJywgJ2xvY2FsJywgJy0tanNvbiddKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBydW4gYSB2YWxpZCBkcml2ZXIsIHZhbGlkIHNjcmlwdCwgYW5kIHJlc3VsdCBpbiBzdWNjZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkcml2ZXJOYW1lID0gJ2Zha2UnO1xuICAgICAgICBjb25zdCBzY3JpcHROYW1lID0gJ2Zha2Utc3VjY2Vzcyc7XG4gICAgICAgIGNvbnN0IG91dCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdydW4nLCBbZHJpdmVyTmFtZSwgc2NyaXB0TmFtZSwgJy0tanNvbiddKSk7XG4gICAgICAgIG91dC5zaG91bGQubm90LmluY2x1ZGUua2V5KCdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJ1biBhIHZhbGlkIGRyaXZlciwgdmFsaWQgZXJyb3IgcHJvbmUgc2NyaXB0LCBhbmQgcmV0dXJuIGVycm9yIGluIGpzb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRyaXZlck5hbWUgPSAnZmFrZSc7XG4gICAgICAgIGNvbnN0IG91dCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdydW4nLCBbZHJpdmVyTmFtZSwgJ2Zha2UtZXJyb3InLCAnLS1qc29uJ10pKTtcbiAgICAgICAgb3V0LnNob3VsZC5pbmNsdWRlLmtleSgnZXJyb3InKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0YWtlIGEgdmFsaWQgZHJpdmVyLCBpbnZhbGlkIHNjcmlwdCwgYW5kIHRocm93IGFuIGVycm9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkcml2ZXJOYW1lID0gJ2Zha2UnO1xuICAgICAgICBhd2FpdCBjaGFpLmV4cGVjdChydW4oJ3J1bicsIFtkcml2ZXJOYW1lLCAnZm9vJywgJy0tanNvbiddKSkudG8uZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoRXJyb3IpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRha2UgYW4gaW52YWxpZCBkcml2ZXIsIGludmFsaWQgc2NyaXB0LCBhbmQgdGhyb3cgYW4gZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRyaXZlck5hbWUgPSAnZm9vJztcbiAgICAgICAgYXdhaXQgY2hhaS5leHBlY3QocnVuKCdydW4nLCBbZHJpdmVyTmFtZSwgJ2JhcicsICctLWpzb24nXSkpLnRvLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKEVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGx1Z2luIENMSScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBmYWtlUGx1Z2luRGlyID0gcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZSgnQGFwcGl1bS9mYWtlLXBsdWdpbi9wYWNrYWdlLmpzb24nKSk7XG4gICAgY29uc3QgZXh0ID0gJ3BsdWdpbic7XG4gICAgZGVzY3JpYmUoJ3J1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyKCk7XG4gICAgICAgIGF3YWl0IHJ1bignaW5zdGFsbCcsIFtmYWtlUGx1Z2luRGlyLCAnLS1zb3VyY2UnLCAnbG9jYWwnLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJ1biBhIHZhbGlkIHBsdWdpbiwgdmFsaWQgc2NyaXB0LCBhbmQgcmVzdWx0IGluIHN1Y2Nlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbk5hbWUgPSAnZmFrZSc7XG4gICAgICAgIGNvbnN0IHNjcmlwdE5hbWUgPSAnZmFrZS1zdWNjZXNzJztcbiAgICAgICAgY29uc3Qgb3V0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ3J1bicsIFtwbHVnaW5OYW1lLCBzY3JpcHROYW1lLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpKTtcbiAgICAgICAgb3V0LnNob3VsZC5ub3QuaW5jbHVkZS5rZXkoJ2Vycm9yJyk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgcnVuIGEgdmFsaWQgcGx1Z2luLCB2YWxpZCBlcnJvciBwcm9uZSBzY3JpcHQsIGFuZCByZXR1cm4gZXJyb3IgaW4ganNvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGx1Z2luTmFtZSA9ICdmYWtlJztcbiAgICAgICAgY29uc3Qgb3V0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ3J1bicsIFtwbHVnaW5OYW1lLCAnZmFrZS1lcnJvcicsICctLWpzb24nXSwgZmFsc2UsIGV4dCkpO1xuICAgICAgICBvdXQuc2hvdWxkLmluY2x1ZGUua2V5KCdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRha2UgYSB2YWxpZCBwbHVnaW4sIGludmFsaWQgc2NyaXB0LCBhbmQgdGhyb3cgYW4gZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbk5hbWUgPSAnZmFrZSc7XG4gICAgICAgIGF3YWl0IGNoYWkuZXhwZWN0KHJ1bigncnVuJywgW3BsdWdpbk5hbWUsICdmb28nLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpKS50by5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aChFcnJvcik7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGFrZSBhbiBpbnZhbGlkIHBsdWdpbiwgaW52YWxpZCBzY3JpcHQsIGFuZCB0aHJvdyBhbiBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgY2hhaS5leHBlY3QocnVuKCdydW4nLCBbJ2ZvbycsICdiYXInLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpKS50by5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aChFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL2xpYi9leHQtY29uZmlnLWlvJykuRXh0ZW5zaW9uVHlwZX0gRXh0ZW5zaW9uVHlwZVxuICovXG4iXSwiZmlsZSI6InRlc3QvY2xpL2NsaS1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|