appium 2.0.0-beta.23 → 2.0.0-beta.26
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/README.md +1 -2
- package/build/lib/appium-config.schema.json +278 -0
- package/build/lib/appium.js +62 -71
- package/build/lib/cli/args.js +31 -53
- package/build/lib/cli/driver-command.js +5 -9
- package/build/lib/cli/extension-command.js +73 -64
- package/build/lib/cli/extension.js +10 -23
- package/build/lib/cli/parser.js +10 -20
- package/build/lib/cli/plugin-command.js +5 -9
- package/build/lib/cli/utils.js +2 -4
- package/build/lib/config-file.js +5 -10
- package/build/lib/config.js +67 -30
- package/build/lib/constants.js +60 -0
- package/build/lib/extension/driver-config.js +190 -0
- package/build/lib/extension/extension-config.js +297 -0
- package/build/lib/extension/index.js +77 -0
- package/build/lib/extension/manifest.js +246 -0
- package/build/lib/extension/package-changed.js +68 -0
- package/build/lib/extension/plugin-config.js +87 -0
- package/build/lib/grid-register.js +2 -4
- package/build/lib/logger.js +2 -4
- package/build/lib/logsink.js +2 -4
- package/build/lib/main.js +64 -92
- package/build/lib/schema/appium-config-schema.js +2 -4
- package/build/lib/schema/arg-spec.js +14 -15
- package/build/lib/schema/cli-args.js +8 -16
- package/build/lib/schema/cli-transformers.js +2 -4
- package/build/lib/schema/index.js +2 -4
- package/build/lib/schema/keywords.js +2 -4
- package/build/lib/schema/schema.js +136 -41
- package/build/lib/utils.js +13 -64
- package/lib/appium.js +74 -55
- package/lib/cli/args.js +36 -37
- package/lib/cli/driver-command.js +10 -2
- package/lib/cli/extension-command.js +216 -135
- package/lib/cli/extension.js +7 -15
- package/lib/cli/parser.js +7 -15
- package/lib/cli/plugin-command.js +1 -2
- package/lib/config-file.js +12 -15
- package/lib/config.js +111 -36
- package/lib/constants.js +79 -0
- package/lib/extension/driver-config.js +230 -0
- package/lib/extension/extension-config.js +459 -0
- package/lib/extension/index.js +103 -0
- package/lib/extension/manifest.js +590 -0
- package/lib/extension/package-changed.js +64 -0
- package/lib/extension/plugin-config.js +111 -0
- package/lib/grid-register.js +4 -4
- package/lib/main.js +110 -96
- package/lib/schema/arg-spec.js +11 -5
- package/lib/schema/cli-args.js +7 -30
- package/lib/schema/keywords.js +1 -1
- package/lib/schema/schema.js +206 -48
- package/lib/utils.js +27 -58
- package/package.json +29 -21
- package/{postinstall.js → scripts/postinstall.js} +1 -1
- package/types/types.d.ts +72 -28
- package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
- package/build/check-npm-pack-files.js +0 -23
- package/build/commands-yml/parse.js +0 -319
- package/build/commands-yml/validator.js +0 -130
- package/build/index.js +0 -19
- package/build/lib/cli/npm.js +0 -220
- package/build/lib/driver-config.js +0 -100
- package/build/lib/drivers.js +0 -100
- package/build/lib/ext-config-io.js +0 -165
- package/build/lib/extension-config.js +0 -320
- package/build/lib/plugin-config.js +0 -69
- package/build/lib/plugins.js +0 -16
- package/build/postinstall.js +0 -90
- package/build/test/cli/cli-e2e-specs.js +0 -221
- package/build/test/cli/cli-helpers.js +0 -86
- package/build/test/cli/cli-specs.js +0 -71
- package/build/test/cli/fixtures/test-driver/package.json +0 -27
- package/build/test/cli/schema-args-specs.js +0 -48
- package/build/test/cli/schema-e2e-specs.js +0 -47
- package/build/test/config-e2e-specs.js +0 -112
- package/build/test/config-file-e2e-specs.js +0 -209
- package/build/test/config-file-specs.js +0 -281
- package/build/test/config-specs.js +0 -159
- package/build/test/driver-e2e-specs.js +0 -435
- package/build/test/driver-specs.js +0 -321
- package/build/test/ext-config-io-specs.js +0 -181
- package/build/test/extension-config-specs.js +0 -365
- package/build/test/fixtures/allow-feat.txt +0 -5
- package/build/test/fixtures/caps.json +0 -3
- package/build/test/fixtures/config/allow-insecure.txt +0 -3
- package/build/test/fixtures/config/appium.config.bad-nodeconfig.json +0 -5
- package/build/test/fixtures/config/appium.config.bad.json +0 -32
- package/build/test/fixtures/config/appium.config.ext-good.json +0 -9
- package/build/test/fixtures/config/appium.config.ext-unknown-props.json +0 -10
- package/build/test/fixtures/config/appium.config.good.js +0 -40
- package/build/test/fixtures/config/appium.config.good.json +0 -33
- package/build/test/fixtures/config/appium.config.good.yaml +0 -30
- package/build/test/fixtures/config/appium.config.invalid.json +0 -31
- package/build/test/fixtures/config/appium.config.security-array.json +0 -5
- package/build/test/fixtures/config/appium.config.security-delimited.json +0 -5
- package/build/test/fixtures/config/appium.config.security-path.json +0 -5
- package/build/test/fixtures/config/driver-fake.config.json +0 -8
- package/build/test/fixtures/config/nodeconfig.json +0 -3
- package/build/test/fixtures/config/plugin-fake.config.json +0 -0
- package/build/test/fixtures/default-args.js +0 -35
- package/build/test/fixtures/deny-feat.txt +0 -5
- package/build/test/fixtures/driver.schema.js +0 -20
- package/build/test/fixtures/extensions.yaml +0 -27
- package/build/test/fixtures/flattened-schema.js +0 -504
- package/build/test/fixtures/plugin.schema.js +0 -20
- package/build/test/fixtures/schema-with-extensions.js +0 -28
- package/build/test/grid-register-specs.js +0 -74
- package/build/test/helpers.js +0 -75
- package/build/test/logger-specs.js +0 -76
- package/build/test/npm-specs.js +0 -20
- package/build/test/parser-specs.js +0 -314
- package/build/test/plugin-e2e-specs.js +0 -316
- package/build/test/schema/arg-spec-specs.js +0 -70
- package/build/test/schema/cli-args-specs.js +0 -431
- package/build/test/schema/schema-specs.js +0 -389
- package/build/test/utils-specs.js +0 -266
- package/lib/cli/npm.js +0 -251
- package/lib/driver-config.js +0 -101
- package/lib/drivers.js +0 -84
- package/lib/ext-config-io.js +0 -287
- package/lib/extension-config.js +0 -366
- package/lib/plugin-config.js +0 -63
- package/lib/plugins.js +0 -11
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.validator = exports.default = exports.CLIENT_URL_TYPES = void 0;
|
|
9
|
-
|
|
10
|
-
require("source-map-support/register");
|
|
11
|
-
|
|
12
|
-
var _validate = _interopRequireDefault(require("validate.js"));
|
|
13
|
-
|
|
14
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
|
-
|
|
16
|
-
_validate.default.validators.array = function array(value, options, key, attributes) {
|
|
17
|
-
if (attributes[key] && !_validate.default.isArray(attributes[key])) {
|
|
18
|
-
return `must be an array`;
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
_validate.default.validators.hasAttributes = function hasAttributes(value, options) {
|
|
23
|
-
if (!value) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (!_lodash.default.isArray(value)) {
|
|
28
|
-
value = [value];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
for (const item of value) {
|
|
32
|
-
for (const option of options) {
|
|
33
|
-
if (_lodash.default.isUndefined(item[option])) {
|
|
34
|
-
return `must have attributes: ${options}`;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
_validate.default.validators.hasPossibleAttributes = function hasPossibleAttributes(value, options) {
|
|
41
|
-
if (!value) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (!_lodash.default.isArray(value)) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
for (const item of value) {
|
|
50
|
-
for (const key of _lodash.default.keys(item)) {
|
|
51
|
-
if (!options.includes(key)) {
|
|
52
|
-
return `must not include '${key}'. Available options: ${options}`;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const CLIENT_URL_TYPES = {
|
|
59
|
-
url: 'hostname',
|
|
60
|
-
android: 'Android',
|
|
61
|
-
ios: 'iOS'
|
|
62
|
-
};
|
|
63
|
-
exports.CLIENT_URL_TYPES = CLIENT_URL_TYPES;
|
|
64
|
-
const validator = {
|
|
65
|
-
'name': {
|
|
66
|
-
presence: true
|
|
67
|
-
},
|
|
68
|
-
'short_description': {
|
|
69
|
-
presence: true
|
|
70
|
-
},
|
|
71
|
-
'example_usage': {},
|
|
72
|
-
'example_usage.java': {},
|
|
73
|
-
'example_usage.javascript_wdio': {},
|
|
74
|
-
'example_usage.javascript_wd': {},
|
|
75
|
-
'example_usage.ruby': {},
|
|
76
|
-
'example_usage.ruby_core': {},
|
|
77
|
-
'example_usage.csharp': {},
|
|
78
|
-
'description': {},
|
|
79
|
-
'client_docs.java': {
|
|
80
|
-
hasPossibleAttributes: _lodash.default.keys(CLIENT_URL_TYPES)
|
|
81
|
-
},
|
|
82
|
-
'client_docs.javascript_wdio': {
|
|
83
|
-
hasPossibleAttributes: _lodash.default.keys(CLIENT_URL_TYPES)
|
|
84
|
-
},
|
|
85
|
-
'client_docs.javascript_wd': {
|
|
86
|
-
hasPossibleAttributes: _lodash.default.keys(CLIENT_URL_TYPES)
|
|
87
|
-
},
|
|
88
|
-
'client_docs.ruby': {
|
|
89
|
-
hasPossibleAttributes: _lodash.default.keys(CLIENT_URL_TYPES)
|
|
90
|
-
},
|
|
91
|
-
'client_docs.ruby_core': {
|
|
92
|
-
hasPossibleAttributes: _lodash.default.keys(CLIENT_URL_TYPES)
|
|
93
|
-
},
|
|
94
|
-
'client_docs.csharp': {
|
|
95
|
-
hasPossibleAttributes: _lodash.default.keys(CLIENT_URL_TYPES)
|
|
96
|
-
},
|
|
97
|
-
'endpoint': {
|
|
98
|
-
presence: true
|
|
99
|
-
},
|
|
100
|
-
'driver_support': {
|
|
101
|
-
presence: true
|
|
102
|
-
},
|
|
103
|
-
'endpoint.url': {
|
|
104
|
-
presence: true
|
|
105
|
-
},
|
|
106
|
-
'endpoint.url_parameters': {
|
|
107
|
-
array: true,
|
|
108
|
-
hasAttributes: ['name', 'description']
|
|
109
|
-
},
|
|
110
|
-
'endpoint.json_parameters': {
|
|
111
|
-
array: true,
|
|
112
|
-
hasAttributes: ['name', 'description']
|
|
113
|
-
},
|
|
114
|
-
'endpoint.response': {
|
|
115
|
-
hasAttributes: ['type', 'description']
|
|
116
|
-
},
|
|
117
|
-
'specifications': {
|
|
118
|
-
presence: true
|
|
119
|
-
},
|
|
120
|
-
'links': {
|
|
121
|
-
array: true,
|
|
122
|
-
hasAttributes: ['name', 'url']
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
exports.validator = validator;
|
|
126
|
-
var _default = validator;
|
|
127
|
-
exports.default = _default;require('source-map-support').install();
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbW1hbmRzLXltbC92YWxpZGF0b3IuanMiXSwibmFtZXMiOlsidmFsaWRhdGUiLCJ2YWxpZGF0b3JzIiwiYXJyYXkiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJrZXkiLCJhdHRyaWJ1dGVzIiwiaXNBcnJheSIsImhhc0F0dHJpYnV0ZXMiLCJfIiwiaXRlbSIsIm9wdGlvbiIsImlzVW5kZWZpbmVkIiwiaGFzUG9zc2libGVBdHRyaWJ1dGVzIiwia2V5cyIsImluY2x1ZGVzIiwiQ0xJRU5UX1VSTF9UWVBFUyIsInVybCIsImFuZHJvaWQiLCJpb3MiLCJ2YWxpZGF0b3IiLCJwcmVzZW5jZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQUEsa0JBQVNDLFVBQVQsQ0FBb0JDLEtBQXBCLEdBQTRCLFNBQVNBLEtBQVQsQ0FBZ0JDLEtBQWhCLEVBQXVCQyxPQUF2QixFQUFnQ0MsR0FBaEMsRUFBcUNDLFVBQXJDLEVBQWlEO0FBQzNFLE1BQUlBLFVBQVUsQ0FBQ0QsR0FBRCxDQUFWLElBQW1CLENBQUNMLGtCQUFTTyxPQUFULENBQWlCRCxVQUFVLENBQUNELEdBQUQsQ0FBM0IsQ0FBeEIsRUFBMkQ7QUFDekQsV0FBUSxrQkFBUjtBQUNEO0FBQ0YsQ0FKRDs7QUFNQUwsa0JBQVNDLFVBQVQsQ0FBb0JPLGFBQXBCLEdBQW9DLFNBQVNBLGFBQVQsQ0FBd0JMLEtBQXhCLEVBQStCQyxPQUEvQixFQUF3QztBQUMxRSxNQUFJLENBQUNELEtBQUwsRUFBWTtBQUNWO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDTSxnQkFBRUYsT0FBRixDQUFVSixLQUFWLENBQUwsRUFBdUI7QUFDckJBLElBQUFBLEtBQUssR0FBRyxDQUFDQSxLQUFELENBQVI7QUFDRDs7QUFFRCxPQUFLLE1BQU1PLElBQVgsSUFBbUJQLEtBQW5CLEVBQTBCO0FBQ3hCLFNBQUssTUFBTVEsTUFBWCxJQUFxQlAsT0FBckIsRUFBOEI7QUFDNUIsVUFBSUssZ0JBQUVHLFdBQUYsQ0FBY0YsSUFBSSxD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QUFBQSxhQUFhLEVBQUUsQ0FBQyxNQUFELEVBQVMsS0FBVDtBQUE3QjtBQXhCTyxDQUFsQjs7ZUE2QmVZLFMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdmFsaWRhdGUgZnJvbSAndmFsaWRhdGUuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG52YWxpZGF0ZS52YWxpZGF0b3JzLmFycmF5ID0gZnVuY3Rpb24gYXJyYXkgKHZhbHVlLCBvcHRpb25zLCBrZXksIGF0dHJpYnV0ZXMpIHtcbiAgaWYgKGF0dHJpYnV0ZXNba2V5XSAmJiAhdmFsaWRhdGUuaXNBcnJheShhdHRyaWJ1dGVzW2tleV0pKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlIGFuIGFycmF5YDtcbiAgfVxufTtcblxudmFsaWRhdGUudmFsaWRhdG9ycy5oYXNBdHRyaWJ1dGVzID0gZnVuY3Rpb24gaGFzQXR0cmlidXRlcyAodmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghXy5pc0FycmF5KHZhbHVlKSkge1xuICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgfVxuXG4gIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgIGlmIChfLmlzVW5kZWZpbmVkKGl0ZW1bb3B0aW9uXSkpIHtcbiAgICAgICAgcmV0dXJuIGBtdXN0IGhhdmUgYXR0cmlidXRlczogJHtvcHRpb25zfWA7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG52YWxpZGF0ZS52YWxpZGF0b3JzLmhhc1Bvc3NpYmxlQXR0cmlidXRlcyA9IGZ1bmN0aW9uIGhhc1Bvc3NpYmxlQXR0cmlidXRlcyAodmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGlmIGp1c3QgYSBiYXJlIHZhbHVlLCBhbGxvdyBpdCB0aHJvdWdoXG4gIGlmICghXy5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIF8ua2V5cyhpdGVtKSkge1xuICAgICAgaWYgKCFvcHRpb25zLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGBtdXN0IG5vdCBpbmNsdWRlICcke2tleX0nLiBBdmFpbGFibGUgb3B0aW9uczogJHtvcHRpb25zfWA7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBDTElFTlRfVVJMX1RZUEVTID0ge1xuICB1cmw6ICdob3N0bmFtZScsXG4gIGFuZHJvaWQ6ICdBbmRyb2lkJyxcbiAgaW9zOiAnaU9TJyxcbn07XG5cbmNvbnN0IHZhbGlkYXRvciA9IHtcbiAgJ25hbWUnOiB7cHJlc2VuY2U6IHRydWV9LFxuICAnc2hvcnRfZGVzY3JpcHRpb24nOiB7cHJlc2VuY2U6IHRydWV9LFxuICAnZXhhbXBsZV91c2FnZSc6IHt9LFxuICAnZXhhbXBsZV91c2FnZS5qYXZhJzoge30sXG4gICdleGFtcGxlX3VzYWdlLmphdmFzY3JpcHRfd2Rpbyc6IHt9LFxuICAnZXhhbXBsZV91c2FnZS5qYXZhc2NyaXB0X3dkJzoge30sXG4gICdleGFtcGxlX3VzYWdlLnJ1YnknOiB7fSxcbiAgJ2V4YW1wbGVfdXNhZ2UucnVieV9jb3JlJzoge30sXG4gICdleGFtcGxlX3VzYWdlLmNzaGFycCc6IHt9LFxuICAnZGVzY3JpcHRpb24nOiB7fSxcbiAgJ2NsaWVudF9kb2NzLmphdmEnOiB7aGFzUG9zc2libGVBdHRyaWJ1dGVzOiBfLmtleXMoQ0xJRU5UX1VSTF9UWVBFUyl9LFxuICAnY2xpZW50X2RvY3MuamF2YXNjcmlwdF93ZGlvJzoge2hhc1Bvc3NpYmxlQXR0cmlidXRlczogXy5rZXlzKENMSUVOVF9VUkxfVFlQRVMpfSxcbiAgJ2NsaWVudF9kb2NzLmphdmFzY3JpcHRfd2QnOiB7aGFzUG9zc2libGVBdHRyaWJ1dGVzOiBfLmtleXMoQ0xJRU5UX1VSTF9UWVBFUyl9LFxuICAnY2xpZW50X2RvY3MucnVieSc6IHtoYXNQb3NzaWJsZUF0dHJpYnV0ZXM6IF8ua2V5cyhDTElFTlRfVVJMX1RZUEVTKX0sXG4gICdjbGllbnRfZG9jcy5ydWJ5X2NvcmUnOiB7aGFzUG9zc2libGVBdHRyaWJ1dGVzOiBfLmtleXMoQ0xJRU5UX1VSTF9UWVBFUyl9LFxuICAnY2xpZW50X2RvY3MuY3NoYXJwJzoge2hhc1Bvc3NpYmxlQXR0cmlidXRlczogXy5rZXlzKENMSUVOVF9VUkxfVFlQRVMpfSxcbiAgJ2VuZHBvaW50Jzoge3ByZXNlbmNlOiB0cnVlfSxcbiAgJ2RyaXZlcl9zdXBwb3J0Jzoge3ByZXNlbmNlOiB0cnVlfSxcbiAgJ2VuZHBvaW50LnVybCc6IHtwcmVzZW5jZTogdHJ1ZX0sXG4gICdlbmRwb2ludC51cmxfcGFyYW1ldGVycyc6IHthcnJheTogdHJ1ZSwgaGFzQXR0cmlidXRlczogWyduYW1lJywgJ2Rlc2NyaXB0aW9uJ119LFxuICAnZW5kcG9pbnQuanNvbl9wYXJhbWV0ZXJzJzoge2FycmF5OiB0cnVlLCBoYXNBdHRyaWJ1dGVzOiBbJ25hbWUnLCAnZGVzY3JpcHRpb24nXX0sXG4gICdlbmRwb2ludC5yZXNwb25zZSc6IHtoYXNBdHRyaWJ1dGVzOiBbJ3R5cGUnLCAnZGVzY3JpcHRpb24nXSB9LFxuICAnc3BlY2lmaWNhdGlvbnMnOiB7cHJlc2VuY2U6IHRydWV9LFxuICAnbGlua3MnOiB7YXJyYXk6IHRydWUsIGhhc0F0dHJpYnV0ZXM6IFsnbmFtZScsICd1cmwnXX0sXG59O1xuXG5cbmV4cG9ydCB7IHZhbGlkYXRvciwgQ0xJRU5UX1VSTF9UWVBFUyB9O1xuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdG9yO1xuIl0sImZpbGUiOiJjb21tYW5kcy15bWwvdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
package/build/index.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";
|
|
3
|
-
|
|
4
|
-
require("source-map-support/register");
|
|
5
|
-
|
|
6
|
-
const {
|
|
7
|
-
asyncify
|
|
8
|
-
} = require('asyncbox');
|
|
9
|
-
|
|
10
|
-
const appium = require('./build/lib/main.js');
|
|
11
|
-
|
|
12
|
-
if (require.main === module) {
|
|
13
|
-
asyncify(appium.main);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
module.exports = appium;require('source-map-support').install();
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImFzeW5jaWZ5IiwicmVxdWlyZSIsImFwcGl1bSIsIm1haW4iLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFFQSxNQUFNO0FBQUNBLEVBQUFBO0FBQUQsSUFBYUMsT0FBTyxDQUFDLFVBQUQsQ0FBMUI7O0FBRUEsTUFBTUMsTUFBTSxHQUFHRCxPQUFPLENBQUMscUJBQUQsQ0FBdEI7O0FBRUEsSUFBSUEsT0FBTyxDQUFDRSxJQUFSLEtBQWlCQyxNQUFyQixFQUE2QjtBQUMzQkosRUFBQUEsUUFBUSxDQUFDRSxNQUFNLENBQUNDLElBQVIsQ0FBUjtBQUNEOztBQUVEQyxNQUFNLENBQUNDLE9BQVAsR0FBaUJILE1BQWpCIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5jb25zdCB7YXN5bmNpZnl9ID0gcmVxdWlyZSgnYXN5bmNib3gnKTtcblxuY29uc3QgYXBwaXVtID0gcmVxdWlyZSgnLi9idWlsZC9saWIvbWFpbi5qcycpO1xuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkoYXBwaXVtLm1haW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGl1bTtcbiJdLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4ifQ==
|
package/build/lib/cli/npm.js
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.default = void 0;
|
|
9
|
-
|
|
10
|
-
require("source-map-support/register");
|
|
11
|
-
|
|
12
|
-
var _path = _interopRequireDefault(require("path"));
|
|
13
|
-
|
|
14
|
-
var _semver = _interopRequireDefault(require("semver"));
|
|
15
|
-
|
|
16
|
-
var _teen_process = require("teen_process");
|
|
17
|
-
|
|
18
|
-
var _support = require("@appium/support");
|
|
19
|
-
|
|
20
|
-
const INSTALL_LOCKFILE = '.appium.install.lock';
|
|
21
|
-
const LINK_LOCKFILE = '.appium.link.lock';
|
|
22
|
-
|
|
23
|
-
class NPM {
|
|
24
|
-
constructor(appiumHome) {
|
|
25
|
-
this.appiumHome = appiumHome;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async exec(cmd, args, opts, execOpts = {}) {
|
|
29
|
-
let {
|
|
30
|
-
cwd,
|
|
31
|
-
json,
|
|
32
|
-
lockFile
|
|
33
|
-
} = opts;
|
|
34
|
-
|
|
35
|
-
if (!cwd) {
|
|
36
|
-
cwd = this.appiumHome;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
await (0, _support.mkdirp)(cwd);
|
|
40
|
-
|
|
41
|
-
const dummyPkgJson = _path.default.resolve(cwd, 'package.json');
|
|
42
|
-
|
|
43
|
-
if (!(await _support.fs.exists(dummyPkgJson))) {
|
|
44
|
-
await _support.fs.writeFile(dummyPkgJson, '{}');
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
execOpts = { ...execOpts,
|
|
48
|
-
cwd
|
|
49
|
-
};
|
|
50
|
-
args.unshift(cmd);
|
|
51
|
-
|
|
52
|
-
if (json) {
|
|
53
|
-
args.push('--json');
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const npmCmd = _support.system.isWindows() ? 'npm.cmd' : 'npm';
|
|
57
|
-
|
|
58
|
-
let runner = async () => await (0, _teen_process.exec)(npmCmd, args, execOpts);
|
|
59
|
-
|
|
60
|
-
if (lockFile) {
|
|
61
|
-
const acquireLock = _support.util.getLockFileGuard(_path.default.resolve(cwd, lockFile));
|
|
62
|
-
|
|
63
|
-
const _runner = runner;
|
|
64
|
-
|
|
65
|
-
runner = async () => await acquireLock(_runner);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
let ret;
|
|
69
|
-
|
|
70
|
-
try {
|
|
71
|
-
const {
|
|
72
|
-
stdout,
|
|
73
|
-
stderr,
|
|
74
|
-
code
|
|
75
|
-
} = await runner();
|
|
76
|
-
ret = {
|
|
77
|
-
stdout,
|
|
78
|
-
stderr,
|
|
79
|
-
code
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
try {
|
|
83
|
-
ret.json = JSON.parse(stdout);
|
|
84
|
-
} catch (ign) {}
|
|
85
|
-
} catch (e) {
|
|
86
|
-
const {
|
|
87
|
-
stdout,
|
|
88
|
-
stderr,
|
|
89
|
-
code
|
|
90
|
-
} = e;
|
|
91
|
-
const err = new Error(`npm command '${cmd} ${args.join(' ')}' failed with code ${code}.\n\nSTDOUT:\n${stdout.trim()}\n\nSTDERR:\n${stderr.trim()}`);
|
|
92
|
-
throw err;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return ret;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
async getLatestVersion(pkg) {
|
|
99
|
-
var _await$this$exec$json;
|
|
100
|
-
|
|
101
|
-
return (_await$this$exec$json = (await this.exec('view', [pkg, 'dist-tags'], {
|
|
102
|
-
json: true
|
|
103
|
-
})).json) === null || _await$this$exec$json === void 0 ? void 0 : _await$this$exec$json.latest;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
async getLatestSafeUpgradeVersion(pkg, curVersion) {
|
|
107
|
-
const allVersions = (await this.exec('view', [pkg, 'versions'], {
|
|
108
|
-
json: true
|
|
109
|
-
})).json;
|
|
110
|
-
return this.getLatestSafeUpgradeFromVersions(curVersion, allVersions);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
getLatestSafeUpgradeFromVersions(curVersion, allVersions) {
|
|
114
|
-
let safeUpgradeVer = null;
|
|
115
|
-
|
|
116
|
-
const curSemver = _semver.default.parse(curVersion);
|
|
117
|
-
|
|
118
|
-
if (curSemver === null) {
|
|
119
|
-
throw new Error(`Could not parse current version '${curVersion}'`);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
for (const testVer of allVersions) {
|
|
123
|
-
const testSemver = _semver.default.parse(testVer);
|
|
124
|
-
|
|
125
|
-
if (testSemver === null) {
|
|
126
|
-
throw new Error(`Could not parse version to test against: '${testVer}'`);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (testSemver.prerelease.length > 0) {
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if (curSemver.compare(testSemver) === 1) {
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (testSemver.major > curSemver.major) {
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if (safeUpgradeVer === null || testSemver.compare(safeUpgradeVer) === 1) {
|
|
142
|
-
safeUpgradeVer = testSemver;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (safeUpgradeVer) {
|
|
147
|
-
safeUpgradeVer = safeUpgradeVer.format();
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return safeUpgradeVer;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
async installPackage({
|
|
154
|
-
pkgDir,
|
|
155
|
-
pkgName,
|
|
156
|
-
pkgVer
|
|
157
|
-
}) {
|
|
158
|
-
const res = await this.exec('install', ['--no-save', '--no-package-lock', pkgVer ? `${pkgName}@${pkgVer}` : pkgName], {
|
|
159
|
-
cwd: pkgDir,
|
|
160
|
-
json: true,
|
|
161
|
-
lockFile: INSTALL_LOCKFILE
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
if (res.json) {
|
|
165
|
-
if (res.json.error) {
|
|
166
|
-
throw new Error(res.json.error);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const pkgJson = _path.default.resolve(pkgDir, 'node_modules', pkgName, 'package.json');
|
|
171
|
-
|
|
172
|
-
try {
|
|
173
|
-
return require(pkgJson);
|
|
174
|
-
} catch {
|
|
175
|
-
throw new Error('The package was not downloaded correctly; its package.json ' + 'did not exist or was unreadable. We looked for it at ' + pkgJson);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
async linkPackage(pkgPath) {
|
|
180
|
-
let pkgName;
|
|
181
|
-
|
|
182
|
-
try {
|
|
183
|
-
pkgName = require(_path.default.resolve(pkgPath, 'package.json')).name;
|
|
184
|
-
} catch {
|
|
185
|
-
throw new Error('Could not find package.json inside the package path ' + `provided: ${pkgPath}`);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
pkgPath = _path.default.resolve(process.cwd(), pkgPath);
|
|
189
|
-
|
|
190
|
-
const pkgHome = _path.default.resolve(this.appiumHome, pkgName);
|
|
191
|
-
|
|
192
|
-
const res = await this.exec('link', ['--no-package-lock', pkgPath], {
|
|
193
|
-
cwd: pkgHome,
|
|
194
|
-
lockFile: LINK_LOCKFILE
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
if (res.json && res.json.error) {
|
|
198
|
-
throw new Error(res.json.error);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
try {
|
|
202
|
-
return require(_path.default.resolve(pkgHome, 'node_modules', pkgName, 'package.json'));
|
|
203
|
-
} catch {
|
|
204
|
-
throw new Error('The package was not linked correctly; its package.json ' + 'did not exist or was unreadable');
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
async uninstallPackage(pkgDir, pkg) {
|
|
209
|
-
await this.exec('uninstall', [pkg], {
|
|
210
|
-
cwd: pkgDir,
|
|
211
|
-
lockFile: INSTALL_LOCKFILE
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
exports.default = NPM;require('source-map-support').install();
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvbnBtLmpzIl0sIm5hbWVzIjpbIklOU1RBTExfTE9DS0ZJTEUiLCJMSU5LX0xPQ0tGSUxFIiwiTlBNIiwiY29uc3RydWN0b3IiLCJhcHBpdW1Ib21lIiwiZXhlYyIsImNtZCIsImFyZ3MiLCJvcHRzIiwiZXhlY09wdHMiLCJjd2QiLCJqc29uIiwibG9ja0ZpbGUiLCJkdW1teVBrZ0pzb24iLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwiZXhpc3RzIiwid3JpdGVGaWxlIiwidW5zaGlmdCIsInB1c2giLCJucG1DbWQiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJydW5uZXIiLCJhY3F1aXJlTG9jayIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwiX3J1bm5lciIsInJldCIsInN0ZG91dCIsInN0ZGVyciIsImNvZGUiLCJKU09OIiwicGFyc2UiLCJpZ24iLCJlIiwiZXJyIiwiRXJyb3IiLCJqb2luIiwidHJpbSIsImdldExhdGVzdFZlcnNpb24iLCJwa2ciLCJsYXRlc3QiLCJnZXRMYXRlc3RTYWZlVXBncmFkZVZlcnNpb24iLCJjdXJWZXJzaW9uIiwiYWxsVmVyc2lvbnMiLCJnZXRMYXRlc3RTYWZlVXBncmFkZUZyb21WZXJzaW9ucyIsInNhZmVVcGdyYWRlVmVyIiwiY3VyU2VtdmVyIiwic2VtdmVyIiwidGVzdFZlciIsInRlc3RTZW12ZXIiLCJwcmVyZWxlYXNlIiwibGVuZ3RoIiwiY29tcGFyZSIsIm1ham9yIiwiZm9ybWF0IiwiaW5zdGFsbFBhY2thZ2UiLCJwa2dEaXIiLCJwa2dOYW1lIiwicGtnVmVyIiwicmVzIiwiZXJyb3IiLCJwa2dKc29uIiwicmVxdWlyZSIsImxpbmtQYWNrYWdlIiwicGtnUGF0aCIsIm5hbWUiLCJwcm9jZXNzIiwicGtnSG9tZSIsInVuaW5zdGFsbFBhY2thZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsZ0JBQWdCLEdBQUcsc0JBQXpCO0FBQ0EsTUFB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QUl0QixLQUFKLENBQVUsNERBQ0EsaUNBRFYsQ0FBTjtBQUVEO0FBQ0Y7O0FBTXFCLFFBQWhCaUMsZ0JBQWdCLENBQUVaLE1BQUYsRUFBVWpCLEdBQVYsRUFBZTtBQUNuQyxVQUFNLEtBQUtyQyxJQUFMLENBQVUsV0FBVixFQUF1QixDQUFDcUMsR0FBRCxDQUF2QixFQUE4QjtBQUNsQ2hDLE1BQUFBLEdBQUcsRUFBRWlELE1BRDZCO0FBRWxDL0MsTUFBQUEsUUFBUSxFQUFFWjtBQUZ3QixLQUE5QixDQUFOO0FBSUQ7O0FBdk5zQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIG1rZGlycCwgdXRpbCwgc3lzdGVtIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgSU5TVEFMTF9MT0NLRklMRSA9ICcuYXBwaXVtLmluc3RhbGwubG9jayc7XG5jb25zdCBMSU5LX0xPQ0tGSUxFID0gJy5hcHBpdW0ubGluay5sb2NrJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTlBNIHtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWVcbiAgICovXG4gIGNvbnN0cnVjdG9yIChhcHBpdW1Ib21lKSB7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgdGhpcy5hcHBpdW1Ib21lID0gYXBwaXVtSG9tZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGBucG1gIHdpdGggZ2l2ZW4gYXJncy5cbiAgICpcbiAgICogSWYgdGhlIHByb2Nlc3MgZXhpdHMgd2l0aCBhIG5vbnplcm8gY29kZSwgdGhlIGNvbnRlbnRzIG9mIGBTVERPVVRgIGFuZCBgU1RERVJSYCB3aWxsIGJlIGluIHRoZVxuICAgKiBgbWVzc2FnZWAgb2YgdGhlIHtAbGluayBUZWVuUHJvY2Vzc0V4ZWNFcnJvcn0gcmVqZWN0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJnc1xuICAgKiBAcGFyYW0ge3sganNvbj86IGJvb2xlYW47IGN3ZD86IHN0cmluZzsgbG9ja0ZpbGU/OiBzdHJpbmc7IH19IG9wdHNcbiAgICovXG4gIGFzeW5jIGV4ZWMgKGNtZCwgYXJncywgb3B0cywgZXhlY09wdHMgPSB7fSkge1xuICAgIGxldCB7IGN3ZCwganNvbiwgbG9ja0ZpbGUgfSA9IG9wdHM7XG4gICAgaWYgKCFjd2QpIHtcbiAgICAgIGN3ZCA9IHRoaXMuYXBwaXVtSG9tZTtcbiAgICB9XG4gICAgLy8gZW5zdXJlIHRoZSBkaXJlY3Rvcnkgd2Ugd2FudCB0byBpbnN0YWxsIGluc2lkZSBvZiBleGlzdHNcbiAgICBhd2FpdCBta2RpcnAoY3dkKTtcblxuICAgIC8vIG5vdCBvbmx5IHRoaXMsIHRoaXMgZGlyZWN0b3J5IG5lZWRzIGEgJ3BhY2thZ2UuanNvbicgaW5zaWRlIG9mIGl0LCBvdGhlcndpc2UsIGlmIGFueVxuICAgIC8vIGRpcmVjdG9yeSBpbiB0aGUgZmlsZXN5c3RlbSB0cmVlIEFCT1ZFIGN3ZCBoYXBwZW5zIHRvIGhhdmUgYSBwYWNrYWdlLmpzb24gb3IgYSBub2RlX21vZHVsZXNcbiAgICAvLyBkaXIgaW4gaXQsIE5QTSB3aWxsIGluc3RhbGwgdGhlIG1vZHVsZSB1cCB0aGVyZSBpbnN0ZWFkIChzaWxseSBOUE0pXG4gICAgY29uc3QgZHVtbXlQa2dKc29uID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGR1bW15UGtnSnNvbikpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShkdW1teVBrZ0pzb24sICd7fScpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBwZXJmb3JtIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBjd2RcbiAgICBleGVjT3B0cyA9IHsuLi5leGVjT3B0cywgY3dkfTtcblxuICAgIGFyZ3MudW5zaGlmdChjbWQpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICBhcmdzLnB1c2goJy0tanNvbicpO1xuICAgIH1cbiAgICBjb25zdCBucG1DbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnbnBtLmNtZCcgOiAnbnBtJztcbiAgICBsZXQgcnVubmVyID0gYXN5bmMgKCkgPT4gYXdhaXQgZXhlYyhucG1DbWQsIGFyZ3MsIGV4ZWNPcHRzKTtcbiAgICBpZiAobG9ja0ZpbGUpIHtcbiAgICAgIGNvbnN0IGFjcXVpcmVMb2NrID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKHBhdGgucmVzb2x2ZShjd2QsIGxvY2tGaWxlKSk7XG4gICAgICBjb25zdCBfcnVubmVyID0gcnVubmVyO1xuICAgICAgcnVubmVyID0gYXN5bmMgKCkgPT4gYXdhaXQgYWNxdWlyZUxvY2soX3J1bm5lcik7XG4gICAgfVxuXG4gICAgbGV0IHJldDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IGF3YWl0IHJ1bm5lcigpO1xuICAgICAgcmV0ID0gLyoqIEB0eXBlIHtUZWVuUHJvY2Vzc0V4ZWNSZXN1bHR9ICovKHtzdGRvdXQsIHN0ZGVyciwgY29kZX0pO1xuICAgICAgLy8gaWYgcG9zc2libGUsIHBhcnNlIE5QTSdzIGpzb24gb3V0cHV0LiBEdXJpbmcgTlBNIGluc3RhbGwgM3JkLXBhcnR5XG4gICAgICAvLyBwYWNrYWdlcyBjYW4gd3JpdGUgdG8gc3Rkb3V0LCBzbyBzb21ldGltZXMgdGhlIGpzb24gb3V0cHV0IGNhbid0IGJlXG4gICAgICAvLyBndWFyYW50ZWVkIHRvIGJlIHBhcnNlYWJsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0Lmpzb24gPSBKU09OLnBhcnNlKHN0ZG91dCk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IC8qKiBAdHlwZSB7VGVlblByb2Nlc3NFeGVjRXJyb3J9ICovKGUpO1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBucG0gY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0uXFxuXFxuU1RET1VUOlxcbiR7c3Rkb3V0LnRyaW0oKX1cXG5cXG5TVERFUlI6XFxuJHtzdGRlcnIudHJpbSgpfWApO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdFZlcnNpb24gKHBrZykge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5leGVjKCd2aWV3JywgW3BrZywgJ2Rpc3QtdGFncyddLCB7XG4gICAgICBqc29uOiB0cnVlXG4gICAgfSkpLmpzb24/LmxhdGVzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJWZXJzaW9uXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RTYWZlVXBncmFkZVZlcnNpb24gKHBrZywgY3VyVmVyc2lvbikge1xuICAgIGNvbnN0IGFsbFZlcnNpb25zID0gKGF3YWl0IHRoaXMuZXhlYygndmlldycsIFtwa2csICd2ZXJzaW9ucyddLCB7XG4gICAgICBqc29uOiB0cnVlXG4gICAgfSkpLmpzb247XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgY3VycmVudCB2ZXJzaW9uIGFuZCBhIGxpc3Qgb2YgYWxsIHZlcnNpb25zIGZvciBhIHBhY2thZ2UsIHJldHVybiB0aGUgdmVyc2lvbiB3aGljaCBpc1xuICAgKiB0aGUgaGlnaGVzdCBzYWZlbHktdXBncmFkYWJsZSB2ZXJzaW9uIChtZWFuaW5nIG5vdCBjcm9zc2luZyBhbnkgbWFqb3IgcmV2aXNpb24gYm91bmRhcmllcywgYW5kXG4gICAqIG5vdCBpbmNsdWRpbmcgYW55IGFscGhhL2JldGEvcmMgdmVyc2lvbnMpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJWZXJzaW9uIC0gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBhIHBhY2thZ2VcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhbGxWZXJzaW9ucyAtIGEgbGlzdCBvZiB2ZXJzaW9uIHN0cmluZ3NcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfG51bGx9IC0gdGhlIGhpZ2hlc3Qgc2FmZWx5LXVwZ3JhZGFibGUgdmVyc2lvbiwgb3IgbnVsbCBpZiB0aGVyZSBpc24ndCBvbmVcbiAgICovXG4gIGdldExhdGVzdFNhZmVVcGdyYWRlRnJvbVZlcnNpb25zIChjdXJWZXJzaW9uLCBhbGxWZXJzaW9ucykge1xuICAgIGxldCBzYWZlVXBncmFkZVZlciA9IG51bGw7XG4gICAgY29uc3QgY3VyU2VtdmVyID0gc2VtdmVyLnBhcnNlKGN1clZlcnNpb24pO1xuICAgIGlmIChjdXJTZW12ZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIGN1cnJlbnQgdmVyc2lvbiAnJHtjdXJWZXJzaW9ufSdgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB0ZXN0VmVyIG9mIGFsbFZlcnNpb25zKSB7XG4gICAgICBjb25zdCB0ZXN0U2VtdmVyID0gc2VtdmVyLnBhcnNlKHRlc3RWZXIpO1xuICAgICAgaWYgKHRlc3RTZW12ZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgdmVyc2lvbiB0byB0ZXN0IGFnYWluc3Q6ICcke3Rlc3RWZXJ9J2ApO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHRlc3QgdmVyc2lvbiBpcyBhIHByZXJlbGVhc2UsIGlnbm9yZSBpdFxuICAgICAgaWYgKHRlc3RTZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgdmVyc2lvbiBpcyBsYXRlciB0aGFuIHRoZSB0ZXN0IHZlcnNpb24sIHNraXAgdGhpcyB0ZXN0IHZlcnNpb25cbiAgICAgIGlmIChjdXJTZW12ZXIuY29tcGFyZSh0ZXN0U2VtdmVyKSA9PT0gMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSB0ZXN0IHZlcnNpb24gaXMgbmV3ZXIsIGJ1dCBjcm9zc2VzIGEgbWFqb3IgcmV2aXNpb24gYm91bmRhcnksIGFsc28gc2tpcCBpdFxuICAgICAgaWYgKHRlc3RTZW12ZXIubWFqb3IgPiBjdXJTZW12ZXIubWFqb3IpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBvdGhlcndpc2UgdGhpcyB2ZXJzaW9uIGlzIHNhZmUgdG8gdXBncmFkZSB0by4gQnV0IHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIG9uZXMgb2YgdGhpc1xuICAgICAgLy8ga2luZCwgc28ga2VlcCBpdGVyYXRpbmcgYW5kIGtlZXBpbmcgdGhlIGhpZ2hlc3RcbiAgICAgIGlmIChzYWZlVXBncmFkZVZlciA9PT0gbnVsbCB8fCB0ZXN0U2VtdmVyLmNvbXBhcmUoc2FmZVVwZ3JhZGVWZXIpID09PSAxKSB7XG4gICAgICAgIHNhZmVVcGdyYWRlVmVyID0gdGVzdFNlbXZlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNhZmVVcGdyYWRlVmVyKSB7XG4gICAgICBzYWZlVXBncmFkZVZlciA9IHNhZmVVcGdyYWRlVmVyLmZvcm1hdCgpO1xuICAgIH1cbiAgICByZXR1cm4gc2FmZVVwZ3JhZGVWZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHt7cGtnRGlyOiBzdHJpbmcsIHBrZ05hbWU6IHN0cmluZywgcGtnVmVyPzogc3RyaW5nfX0gcGFyYW0wXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgndHlwZS1mZXN0JykuUGFja2FnZUpzb24+fVxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbFBhY2thZ2UgKHtwa2dEaXIsIHBrZ05hbWUsIHBrZ1Zlcn0pIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWMoJ2luc3RhbGwnLCBbXG4gICAgICAnLS1uby1zYXZlJyxcbiAgICAgICctLW5vLXBhY2thZ2UtbG9jaycsXG4gICAgICBwa2dWZXIgPyBgJHtwa2dOYW1lfUAke3BrZ1Zlcn1gIDogcGtnTmFtZVxuICAgIF0sIHtcbiAgICAgIGN3ZDogcGtnRGlyLFxuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGxvY2tGaWxlOiBJTlNUQUxMX0xPQ0tGSUxFXG4gICAgfSk7XG5cbiAgICBpZiAocmVzLmpzb24pIHtcbiAgICAgIC8vIHdlIHBhcnNlZCBhIHZhbGlkIGpzb24gcmVzcG9uc2UsIHNvIGlmIHdlIGdvdCBhbiBlcnJvciBoZXJlLCByZXR1cm4gdGhhdFxuICAgICAgLy8gbWVzc2FnZSBzdHJhaWdodGF3YXlcbiAgICAgIGlmIChyZXMuanNvbi5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmpzb24uZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdyByZWFkIHBhY2thZ2UgZGF0YSBmcm9tIHRoZSBpbnN0YWxsZWQgcGFja2FnZSB0byByZXR1cm4sIGFuZCBtYWtlIHN1cmVcbiAgICAvLyBldmVyeXRoaW5nIGdvdCBpbnN0YWxsZWQgb2suIFJlbWVtYmVyLCBwa2dOYW1lIG1pZ2h0IGVuZCB1cCB3aXRoIGEgLyBpbiBpdCBkdWUgdG8gYW4gbnBtXG4gICAgLy8gb3JnLCBzbyBpZiBzbywgdGhhdCB3aWxsIGdldCBjb3JyZWN0bHkgZXhwbG9kZWQgaW50byBtdWx0aXBsZSBkaXJlY3RvcmllcywgYnkgcGF0aC5yZXNvbHZlIGhlcmVcbiAgICAvLyAoZXZlbiBvbiBXaW5kb3dzISlcbiAgICBjb25zdCBwa2dKc29uID0gcGF0aC5yZXNvbHZlKHBrZ0RpciwgJ25vZGVfbW9kdWxlcycsIHBrZ05hbWUsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGtnSnNvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYWNrYWdlIHdhcyBub3QgZG93bmxvYWRlZCBjb3JyZWN0bHk7IGl0cyBwYWNrYWdlLmpzb24gJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2RpZCBub3QgZXhpc3Qgb3Igd2FzIHVucmVhZGFibGUuIFdlIGxvb2tlZCBmb3IgaXQgYXQgJyArXG4gICAgICAgICAgICAgICAgICAgICAgcGtnSnNvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dQYXRoXG4gICAqL1xuICBhc3luYyBsaW5rUGFja2FnZSAocGtnUGF0aCkge1xuICAgIC8vIGZyb20gdGhlIHBhdGggYWxvbmUgd2UgZG9uJ3Qga25vdyB0aGUgbnBtIHBhY2thZ2UgbmFtZSwgc28gd2UgbmVlZCB0b1xuICAgIC8vIGxvb2sgaW4gcGFja2FnZS5qc29uXG4gICAgbGV0IHBrZ05hbWU7XG4gICAgdHJ5IHtcbiAgICAgIHBrZ05hbWUgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShwa2dQYXRoLCAncGFja2FnZS5qc29uJykpLm5hbWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHBhY2thZ2UuanNvbiBpbnNpZGUgdGhlIHBhY2thZ2UgcGF0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICBgcHJvdmlkZWQ6ICR7cGtnUGF0aH1gKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIGFkZGVkIHRvIGhhbmRsZSBjb21tYW5kcyB3aXRoIHJlbGF0aXZlIHBhdGhzXG4gICAgLy8gaWU6IFwibm9kZSAuIGRyaXZlciBpbnN0YWxsIC0tc291cmNlPWxvY2FsIC4uL2Zha2UtZHJpdmVyXCJcbiAgICBwa2dQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHBrZ1BhdGgpO1xuXG4gICAgY29uc3QgcGtnSG9tZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmFwcGl1bUhvbWUsIHBrZ05hbWUpO1xuXG4gICAgLy8gY2FsbCBsaW5rIHdpdGggLS1uby1wYWNrYWdlLWxvY2sgdG8gZW5zdXJlIG5vIGNvcnJ1cHRpb24gd2hpbGUgaW5zdGFsbGluZyBsb2NhbCBwYWNrYWdlc1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZXhlYygnbGluaycsIFsnLS1uby1wYWNrYWdlLWxvY2snLCBwa2dQYXRoXSwge2N3ZDogcGtnSG9tZSwgbG9ja0ZpbGU6IExJTktfTE9DS0ZJTEV9KTtcbiAgICBpZiAocmVzLmpzb24gJiYgcmVzLmpzb24uZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuanNvbi5lcnJvcik7XG4gICAgfVxuXG4gICAgLy8gbm93IGVuc3VyZSBpdCB3YXMgbGlua2VkIHRvIHRoZSBjb3JyZWN0IHBsYWNlXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXF1aXJlKHBhdGgucmVzb2x2ZShwa2dIb21lLCAnbm9kZV9tb2R1bGVzJywgcGtnTmFtZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhY2thZ2Ugd2FzIG5vdCBsaW5rZWQgY29ycmVjdGx5OyBpdHMgcGFja2FnZS5qc29uICcgK1xuICAgICAgICAgICAgICAgICAgICAgICdkaWQgbm90IGV4aXN0IG9yIHdhcyB1bnJlYWRhYmxlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dEaXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBrZ1xuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsUGFja2FnZSAocGtnRGlyLCBwa2cpIHtcbiAgICBhd2FpdCB0aGlzLmV4ZWMoJ3VuaW5zdGFsbCcsIFtwa2ddLCB7XG4gICAgICBjd2Q6IHBrZ0RpcixcbiAgICAgIGxvY2tGaWxlOiBJTlNUQUxMX0xPQ0tGSUxFXG4gICAgfSk7XG4gIH1cbn1cblxuXG4vKipcbiAqIFJlc3VsdCBmcm9tIGEgbm9uLXplcm8tZXhpdCBleGVjdXRpb24gb2YgYGFwcGl1bWBcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlZW5Qcm9jZXNzRXhlY1Jlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZG91dCAtIFN0ZG91dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZGVyciAtIFN0ZGVyclxuICogQHByb3BlcnR5IHtudW1iZXI/fSBjb2RlIC0gRXhpdCBjb2RlXG4gKiBAcHJvcGVydHkge2FueX0ganNvbiAtIEpTT04gcGFyc2VkIGZyb20gc3Rkb3V0XG4gKi9cblxuLyoqXG4gKiBFeHRyYSBwcm9wcyBgdGVlbl9wcm9jZXNzLmV4ZWNgIGFkZHMgdG8gaXRzIGVycm9yIG9iamVjdHNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlZW5Qcm9jZXNzRXhlY0Vycm9yUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRvdXQgLSBTVERPVVRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRlcnIgLSBTVERFUlJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyP30gY29kZSAtIEV4aXQgY29kZVxuICovXG5cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gYnkgYHRlZW5fcHJvY2Vzcy5leGVjYFxuICogQHR5cGVkZWYge0Vycm9yICYgVGVlblByb2Nlc3NFeGVjRXJyb3JQcm9wc30gVGVlblByb2Nlc3NFeGVjRXJyb3JcbiAqL1xuIl0sImZpbGUiOiJsaWIvY2xpL25wbS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.default = void 0;
|
|
9
|
-
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
|
-
require("source-map-support/register");
|
|
13
|
-
|
|
14
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
|
-
|
|
16
|
-
var _extensionConfig = _interopRequireDefault(require("./extension-config"));
|
|
17
|
-
|
|
18
|
-
var _extConfigIo = require("./ext-config-io");
|
|
19
|
-
|
|
20
|
-
class DriverConfig extends _extensionConfig.default {
|
|
21
|
-
constructor(appiumHome, logFn) {
|
|
22
|
-
super(appiumHome, _extConfigIo.DRIVER_TYPE, logFn);
|
|
23
|
-
this.knownAutomationNames = new Set();
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
async read() {
|
|
27
|
-
this.knownAutomationNames.clear();
|
|
28
|
-
return await super.read();
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
static getInstance(appiumHome, logFn) {
|
|
32
|
-
var _DriverConfig$_instan;
|
|
33
|
-
|
|
34
|
-
const instance = (_DriverConfig$_instan = DriverConfig._instances[appiumHome]) !== null && _DriverConfig$_instan !== void 0 ? _DriverConfig$_instan : new DriverConfig(appiumHome, logFn);
|
|
35
|
-
DriverConfig._instances[appiumHome] = instance;
|
|
36
|
-
return instance;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
getConfigProblems(extData, extName) {
|
|
40
|
-
const problems = [];
|
|
41
|
-
const {
|
|
42
|
-
platformNames,
|
|
43
|
-
automationName
|
|
44
|
-
} = extData;
|
|
45
|
-
|
|
46
|
-
if (!_lodash.default.isArray(platformNames)) {
|
|
47
|
-
problems.push({
|
|
48
|
-
err: 'Missing or incorrect supported platformNames list.',
|
|
49
|
-
val: platformNames
|
|
50
|
-
});
|
|
51
|
-
} else {
|
|
52
|
-
if (_lodash.default.isEmpty(platformNames)) {
|
|
53
|
-
problems.push({
|
|
54
|
-
err: 'Empty platformNames list.',
|
|
55
|
-
val: platformNames
|
|
56
|
-
});
|
|
57
|
-
} else {
|
|
58
|
-
for (const pName of platformNames) {
|
|
59
|
-
if (!_lodash.default.isString(pName)) {
|
|
60
|
-
problems.push({
|
|
61
|
-
err: 'Incorrectly formatted platformName.',
|
|
62
|
-
val: pName
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (!_lodash.default.isString(automationName)) {
|
|
70
|
-
problems.push({
|
|
71
|
-
err: 'Missing or incorrect automationName',
|
|
72
|
-
val: automationName
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
if (this.knownAutomationNames.has(automationName)) {
|
|
77
|
-
problems.push({
|
|
78
|
-
err: 'Multiple drivers claim support for the same automationName',
|
|
79
|
-
val: automationName
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
this.knownAutomationNames.add(automationName);
|
|
84
|
-
return problems;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
extensionDesc(driverName, {
|
|
88
|
-
version,
|
|
89
|
-
automationName
|
|
90
|
-
}) {
|
|
91
|
-
return `${driverName}@${version} (automationName '${automationName}')`;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
exports.default = DriverConfig;
|
|
97
|
-
(0, _defineProperty2.default)(DriverConfig, "_instances", {});require('source-map-support').install();
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXItY29uZmlnLmpzIl0sIm5hbWVzIjpbIkRyaXZlckNvbmZpZyIsIkV4dGVuc2lvbkNvbmZpZyIsImNvbnN0cnVjdG9yIiwiYXBwaXVtSG9tZSIsImxvZ0ZuIiwiRFJJVkVSX1RZUEUiLCJrbm93bkF1dG9tYXRpb25OYW1lcyIsIlNldCIsInJlYWQiLCJjbGVhciIsImdldEluc3RhbmNlIiwiaW5zdGFuY2UiLCJfaW5zdGFuY2VzIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJleHREYXRhIiwiZXh0TmFtZSIsInByb2JsZW1zIiwicGxhdGZvcm1OYW1lcyIsImF1dG9tYXRpb25OYW1lIiwiXyIsImlzQXJyYXkiLCJwdXNoIiwiZXJyIiwidmFsIiwiaXNFbXB0eSIsInBOYW1lIiwiaXNTdHJpbmciLCJoYXMiLCJhZGQiLCJleHRlbnNpb25EZXNjIiwiZHJpdmVyTmFtZSIsInZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFZSxNQUFNQSxZQUFOLFNBQTJCQyx3QkFBM0IsQ0FBMkM7QUFleERDLEVBQUFBLFdBQVcsQ0FBRUMsVUFBRixFQUFjQyxLQUFkLEVBQXFCO0FBQzlCLFVBQU1ELFVBQU4sRUFBa0JFLHdCQUFsQixFQUErQkQsS0FBL0I7QUFFQSxTQUFLRSxvQkFBTCxHQUE0QixJQUFJQyxHQUFKLEVBQTVCO0FBQ0Q7O0FBRVMsUUFBSkMsSUFBSSxHQUFJO0FBQ1osU0FBS0Ysb0JBQUwsQ0FBMEJHLEtBQTFCO0FBQ0EsV0FBTyxNQUFNLE1BQU1ELElBQU4sRUFBYjtBQUNEOztBQVFpQixTQUFYRSxXQUFXLENBQUVQLFVBQUYsRUFBY0MsS0FBZCxFQUFxQjtBQUFBOztBQUNyQyxVQUFNTyxRQUFRLDRCQUFHWCxZQUFZLENBQUNZLFVBQWIsQ0FBd0JULFVBQXhCLENBQUgseUVBQTBDLElBQUlILFlBQUosQ0FBaUJHLFVBQWpCLEVBQTZCQyxLQUE3QixDQUF4RDtBQUNBSixJQUFBQSxZQUFZLENBQUNZLFVBQWIsQ0FBd0JULFVBQXhCLElBQXNDUSxRQUF0QztBQUNBLFdBQU9BLFFBQVA7QUFDRDs7QUFTREUsRUFBQUEsaUJBQWlCLENBQUVDLE9BQUYsRUFBV0MsT0FBWCxFQUFvQjtBQUNuQyxVQUFNQyxRQUFRLEdBQUcsRUFBakI7QUFDQSxVQUFNO0FBQUNDLE1BQUFBLGFBQUQ7QUFBZ0JDLE1BQUFBO0FBQWhCLFFBQWtDSixPQUF4Qzs7QUFFQSxRQUFJLENBQUNLLGdCQUFFQyxPQUFGLENBQVVILGFBQVYsQ0FBTCxFQUErQjtBQUM3QkQsTUFBQUEsUUFBUSxDQUFDSyxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLG9EQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRU47QUFGTyxPQUFkO0FBSUQsS0FMRCxNQUtPO0FBQ0wsVUFBSUUsZ0JBQUVLLE9BQUYsQ0FBVVAsYUFBVixDQUFKLEVBQThCO0FBQzVCRCxRQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUNaQyxVQUFBQSxHQUFHLEVBQUUsMkJBRE87QUFFWkMsVUFBQUEsR0FBRyxFQUFFTjtBQUZPLFNBQWQ7QUFJRCxPQUxELE1BS087QUFDTCxhQUFLLE1BQU1RLEtBQVgsSUFBb0JSLGFBQXBCLEVBQW1DO0FBQ2pDLGNBQUksQ0FBQ0UsZ0JBQUVPLFFBQUYsQ0FBV0QsS0FBWCxDQUFMLEVBQXdCO0FBQ3RCVCxZQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUFDQyxjQUFBQSxHQUFHLEVBQUUscUNBQU47QUFBNkNDLGNBQUFBLEdBQUcsRUFBRUU7QUFBbEQsYUFBZDtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUVELFFBQUksQ0FBQ04sZ0JBQUVPLFFBQUYsQ0FBV1IsY0FBWCxDQUFMLEVBQWlDO0FBQy9CRixNQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUFDQyxRQUFBQSxHQUFHLEVBQUUscUNBQU47QUFBNkNDLFFBQUFBLEdBQUcsRUFBRUw7QUFBbEQsT0FBZDtBQUNEOztBQUVELFFBQUksS0FBS1osb0JBQUwsQ0FBMEJxQixHQUExQixDQUE4QlQsY0FBOUIsQ0FBSixFQUFtRDtBQUNqREYsTUFBQUEsUUFBUSxDQUFDSyxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLDREQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRUw7QUFGTyxPQUFkO0FBSUQ7O0FBR0QsU0FBS1osb0JBQUwsQ0FBMEJzQixHQUExQixDQUE4QlYsY0FBOUI7QUFFQSxXQUFPRixRQUFQO0FBQ0Q7O0FBTURhLEVBQUFBLGFBQWEsQ0FBRUMsVUFBRixFQUFjO0FBQUNDLElBQUFBLE9BQUQ7QUFBVWIsSUFBQUE7QUFBVixHQUFkLEVBQXlDO0FBQ3BELFdBQVEsR0FBRVksVUFBVyxJQUFHQyxPQUFRLHFCQUFvQmIsY0FBZSxJQUFuRTtBQUNEOztBQTVGdUQ7Ozs4QkFBckNsQixZLGdCQU9DLEUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db25maWcgZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IERSSVZFUl9UWVBFIH0gZnJvbSAnLi9leHQtY29uZmlnLWlvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVyQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiBgQVBQSVVNX0hPTUVgIHZhbHVlcyB0byB7QGxpbmsgRHJpdmVyQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqIEVhY2ggYEFQUElVTV9IT01FYCBzaG91bGQgb25seSBoYXZlIG9uZSBhc3NvY2lhdGVkIGBEcml2ZXJDb25maWdgIGluc3RhbmNlLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxEcml2ZXJDb25maWc+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW5jZXMgPSB7fTtcblxuICAvKipcbiAgICogQ2FsbCB7QGxpbmsgRHJpdmVyQ29uZmlnLmdldEluc3RhbmNlfSBpbnN0ZWFkLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZVxuICAgKiBAcGFyYW0geyguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZH0gW2xvZ0ZuXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGFwcGl1bUhvbWUsIGxvZ0ZuKSB7XG4gICAgc3VwZXIoYXBwaXVtSG9tZSwgRFJJVkVSX1RZUEUsIGxvZ0ZuKTtcbiAgICAvKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xuICAgIHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICBhc3luYyByZWFkICgpIHtcbiAgICB0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmNsZWFyKCk7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnJlYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG9yIGdldHMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERyaXZlckNvbmZpZ30gYmFzZWQgdmFsdWUgb2YgYGFwcGl1bUhvbWVgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gYEFQUElVTV9IT01FYCBwYXRoXG4gICAqIEBwYXJhbSB7KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkfSBbbG9nRm5dIC0gT3B0aW9uYWwgbG9nZ2luZyBmdW5jdGlvblxuICAgKiBAcmV0dXJucyB7RHJpdmVyQ29uZmlnfVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlIChhcHBpdW1Ib21lLCBsb2dGbikge1xuICAgIGNvbnN0IGluc3RhbmNlID0gRHJpdmVyQ29uZmlnLl9pbnN0YW5jZXNbYXBwaXVtSG9tZV0gPz8gbmV3IERyaXZlckNvbmZpZyhhcHBpdW1Ib21lLCBsb2dGbik7XG4gICAgRHJpdmVyQ29uZmlnLl9pbnN0YW5jZXNbYXBwaXVtSG9tZV0gPSBpbnN0YW5jZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dERhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHJldHVybnMge2ltcG9ydCgnLi9leHRlbnNpb24tY29uZmlnJykuUHJvYmxlbVtdfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldENvbmZpZ1Byb2JsZW1zIChleHREYXRhLCBleHROYW1lKSB7XG4gICAgY29uc3QgcHJvYmxlbXMgPSBbXTtcbiAgICBjb25zdCB7cGxhdGZvcm1OYW1lcywgYXV0b21hdGlvbk5hbWV9ID0gZXh0RGF0YTtcblxuICAgIGlmICghXy5pc0FycmF5KHBsYXRmb3JtTmFtZXMpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3Qgc3VwcG9ydGVkIHBsYXRmb3JtTmFtZXMgbGlzdC4nLFxuICAgICAgICB2YWw6IHBsYXRmb3JtTmFtZXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXy5pc0VtcHR5KHBsYXRmb3JtTmFtZXMpKSB7XG4gICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgIGVycjogJ0VtcHR5IHBsYXRmb3JtTmFtZXMgbGlzdC4nLFxuICAgICAgICAgIHZhbDogcGxhdGZvcm1OYW1lc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcE5hbWUgb2YgcGxhdGZvcm1OYW1lcykge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhwTmFtZSkpIHtcbiAgICAgICAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ0luY29ycmVjdGx5IGZvcm1hdHRlZCBwbGF0Zm9ybU5hbWUuJywgdmFsOiBwTmFtZX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IGF1dG9tYXRpb25OYW1lJywgdmFsOiBhdXRvbWF0aW9uTmFtZX0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmhhcyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBlcnI6ICdNdWx0aXBsZSBkcml2ZXJzIGNsYWltIHN1cHBvcnQgZm9yIHRoZSBzYW1lIGF1dG9tYXRpb25OYW1lJyxcbiAgICAgICAgdmFsOiBhdXRvbWF0aW9uTmFtZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2hvdWxkIHdlIHJldGFpbiB0aGUgbmFtZSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sIG9uY2Ugd2UndmUgY2hlY2tlZCB0aGVyZSBhcmUgbm8gcHJvYmxlbXM/XG4gICAgdGhpcy5rbm93bkF1dG9tYXRpb25OYW1lcy5hZGQoYXV0b21hdGlvbk5hbWUpO1xuXG4gICAgcmV0dXJuIHByb2JsZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXJOYW1lXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHREYXRhXG4gICAqL1xuICBleHRlbnNpb25EZXNjIChkcml2ZXJOYW1lLCB7dmVyc2lvbiwgYXV0b21hdGlvbk5hbWV9KSB7XG4gICAgcmV0dXJuIGAke2RyaXZlck5hbWV9QCR7dmVyc2lvbn0gKGF1dG9tYXRpb25OYW1lICcke2F1dG9tYXRpb25OYW1lfScpYDtcbiAgfVxufVxuXG4iXSwiZmlsZSI6ImxpYi9kcml2ZXItY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
package/build/lib/drivers.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.KNOWN_DRIVERS = void 0;
|
|
9
|
-
exports.findMatchingDriver = findMatchingDriver;
|
|
10
|
-
|
|
11
|
-
require("source-map-support/register");
|
|
12
|
-
|
|
13
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
14
|
-
|
|
15
|
-
var _logger = _interopRequireDefault(require("./logger"));
|
|
16
|
-
|
|
17
|
-
const KNOWN_DRIVERS = {
|
|
18
|
-
uiautomator2: 'appium-uiautomator2-driver',
|
|
19
|
-
xcuitest: 'appium-xcuitest-driver',
|
|
20
|
-
youiengine: 'appium-youiengine-driver',
|
|
21
|
-
windows: 'appium-windows-driver',
|
|
22
|
-
mac: 'appium-mac-driver',
|
|
23
|
-
mac2: 'appium-mac2-driver',
|
|
24
|
-
espresso: 'appium-espresso-driver',
|
|
25
|
-
tizen: 'appium-tizen-driver',
|
|
26
|
-
flutter: 'appium-flutter-driver',
|
|
27
|
-
safari: 'appium-safari-driver',
|
|
28
|
-
gecko: 'appium-geckodriver'
|
|
29
|
-
};
|
|
30
|
-
exports.KNOWN_DRIVERS = KNOWN_DRIVERS;
|
|
31
|
-
|
|
32
|
-
function getDriverBySupport(drivers, matchAutomationName, matchPlatformName) {
|
|
33
|
-
for (const [driverName, driverData] of _lodash.default.toPairs(drivers)) {
|
|
34
|
-
const {
|
|
35
|
-
automationName,
|
|
36
|
-
platformNames
|
|
37
|
-
} = driverData;
|
|
38
|
-
const aNameMatches = automationName.toLowerCase() === matchAutomationName.toLowerCase();
|
|
39
|
-
|
|
40
|
-
const pNameMatches = _lodash.default.includes(platformNames.map(_lodash.default.toLower), matchPlatformName.toLowerCase());
|
|
41
|
-
|
|
42
|
-
if (aNameMatches && pNameMatches) {
|
|
43
|
-
return {
|
|
44
|
-
driverName,
|
|
45
|
-
...driverData
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (aNameMatches) {
|
|
50
|
-
throw new Error(`Driver '${driverName}' supports automationName ` + `'${automationName}', but Appium could not find ` + `support for platformName '${matchPlatformName}'. Supported ` + `platformNames are: ` + JSON.stringify(platformNames));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
throw new Error(`Could not find installed driver to support given caps`);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function findMatchingDriver(config, {
|
|
58
|
-
automationName,
|
|
59
|
-
platformName
|
|
60
|
-
}) {
|
|
61
|
-
if (!_lodash.default.isString(platformName)) {
|
|
62
|
-
throw new Error('You must include a platformName capability');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (!_lodash.default.isString(automationName)) {
|
|
66
|
-
throw new Error('You must include an automationName capability');
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
_logger.default.info(`Attempting to find matching driver for automationName ` + `'${automationName}' and platformName '${platformName}'`);
|
|
70
|
-
|
|
71
|
-
try {
|
|
72
|
-
const {
|
|
73
|
-
driverName,
|
|
74
|
-
mainClass,
|
|
75
|
-
version
|
|
76
|
-
} = getDriverBySupport(config.installedExtensions, automationName, platformName);
|
|
77
|
-
|
|
78
|
-
_logger.default.info(`The '${driverName}' driver was installed and matched caps.`);
|
|
79
|
-
|
|
80
|
-
_logger.default.info(`Will require it at ${config.getExtensionRequirePath(driverName)}`);
|
|
81
|
-
|
|
82
|
-
const driver = config.require(driverName);
|
|
83
|
-
|
|
84
|
-
if (!driver) {
|
|
85
|
-
throw new Error(`MainClass ${mainClass} did not result in a driver object`);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return {
|
|
89
|
-
driver,
|
|
90
|
-
version,
|
|
91
|
-
driverName
|
|
92
|
-
};
|
|
93
|
-
} catch (err) {
|
|
94
|
-
const msg = `Could not find a driver for automationName ` + `'${automationName}' and platformName ${platformName}'. ` + `Have you installed a driver that supports those ` + `capabilities? Run 'appium driver list --installed' to see. ` + `(Lower-level error: ${err.message})`;
|
|
95
|
-
throw new Error(msg);
|
|
96
|
-
}
|
|
97
|
-
}require('source-map-support').install();
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXJzLmpzIl0sIm5hbWVzIjpbIktOT1dOX0RSSVZFUlMiLCJ1aWF1dG9tYXRvcjIiLCJ4Y3VpdGVzdCIsInlvdWllbmdpbmUiLCJ3aW5kb3dzIiwibWFjIiwibWFjMiIsImVzcHJlc3NvIiwidGl6ZW4iLCJmbHV0dGVyIiwic2FmYXJpIiwiZ2Vja28iLCJnZXREcml2ZXJCeVN1cHBvcnQiLCJkcml2ZXJzIiwibWF0Y2hBdXRvbWF0aW9uTmFtZSIsIm1hdGNoUGxhdGZvcm1OYW1lIiwiZHJpdmVyTmFtZSIsImRyaXZlckRhdGEiLCJfIiwidG9QYWlycyIsImF1dG9tYXRpb25OYW1lIiwicGxhdGZvcm1OYW1lcyIsImFOYW1lTWF0Y2hlcyIsInRvTG93ZXJDYXNlIiwicE5hbWVNYXRjaGVzIiwiaW5jbHVkZXMiLCJtYXAiLCJ0b0xvd2VyIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZmluZE1hdGNoaW5nRHJpdmVyIiwiY29uZmlnIiwicGxhdGZvcm1OYW1lIiwiaXNTdHJpbmciLCJsb2ciLCJpbmZvIiwibWFpbkNsYXNzIiwidmVyc2lvbiIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJnZXRFeHRlbnNpb25SZXF1aXJlUGF0aCIsImRyaXZlciIsInJlcXVpcmUiLCJlcnIiLCJtc2ciLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFPQSxNQUFNQSxhQUFhLEdBQUc7QUFDcEJDLEVBQUFBLFlBQVksRUFBRSw0QkFETTtBQUVwQkMsRUFBQUEsUUFBUSxFQUFFLHdCQUZVO0FBR3BCQyxFQUFBQSxVQUFVLEVBQUUsMEJBSFE7QUFJcEJDLEVBQUFBLE9BQU8sRUFBRSx1QkFKVztBQUtwQkMsRUFBQUEsR0FBRyxFQUFFLG1CQUxlO0FBTXBCQyxFQUFBQSxJQUFJLEVBQUUsb0JBTmM7QUFPcEJDLEVBQUFBLFFBQVEsRUFBRSx3QkFQVTtBQVFwQkMsRUFBQUEsS0FBSyxFQUFFLHFCQVJhO0FBU3BCQyxFQUFB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QUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cblxuLy8gVGhpcyBpcyBhIG1hcCBvZiBkcml2ZXIgbmFtZXMgdG8gbnBtIHBhY2thZ2VzIHJlcHJlc2VudGluZyB0aG9zZSBkcml2ZXJzLlxuLy8gVGhlIGRyaXZlcnMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBDTEkgc28gdXNlcnMgY2FuIGp1c3Rcbi8vIHR5cGUgJ2FwcGl1bSBkcml2ZXIgaW5zdGFsbCAnbmFtZScnLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgZnVsbFxuLy8gbnBtIHBhY2thZ2UuIEkuZS4sIHRoZXNlIGFyZSB0aGUgb2ZmaWNpYWxseSByZWNvZ25pemVkIGRyaXZlcnMuXG5jb25zdCBLTk9XTl9EUklWRVJTID0ge1xuICB1aWF1dG9tYXRvcjI6ICdhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcicsXG4gIHhjdWl0ZXN0OiAnYXBwaXVtLXhjdWl0ZXN0LWRyaXZlcicsXG4gIHlvdWllbmdpbmU6ICdhcHBpdW0teW91aWVuZ2luZS1kcml2ZXInLFxuICB3aW5kb3dzOiAnYXBwaXVtLXdpbmRvd3MtZHJpdmVyJyxcbiAgbWFjOiAnYXBwaXVtLW1hYy1kcml2ZXInLFxuICBtYWMyOiAnYXBwaXVtLW1hYzItZHJpdmVyJyxcbiAgZXNwcmVzc286ICdhcHBpdW0tZXNwcmVzc28tZHJpdmVyJyxcbiAgdGl6ZW46ICdhcHBpdW0tdGl6ZW4tZHJpdmVyJyxcbiAgZmx1dHRlcjogJ2FwcGl1bS1mbHV0dGVyLWRyaXZlcicsXG4gIHNhZmFyaTogJ2FwcGl1bS1zYWZhcmktZHJpdmVyJyxcbiAgZ2Vja286ICdhcHBpdW0tZ2Vja29kcml2ZXInLFxufTtcblxuZnVuY3Rpb24gZ2V0RHJpdmVyQnlTdXBwb3J0IChkcml2ZXJzLCBtYXRjaEF1dG9tYXRpb25OYW1lLCBtYXRjaFBsYXRmb3JtTmFtZSkge1xuICBmb3IgKGNvbnN0IFtkcml2ZXJOYW1lLCBkcml2ZXJEYXRhXSBvZiBfLnRvUGFpcnMoZHJpdmVycykpIHtcbiAgICBjb25zdCB7YXV0b21hdGlvbk5hbWUsIHBsYXRmb3JtTmFtZXN9ID0gZHJpdmVyRGF0YTtcbiAgICBjb25zdCBhTmFtZU1hdGNoZXMgPSBhdXRvbWF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpID09PSBtYXRjaEF1dG9tYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcE5hbWVNYXRjaGVzID0gXy5pbmNsdWRlcyhwbGF0Zm9ybU5hbWVzLm1hcChfLnRvTG93ZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hQbGF0Zm9ybU5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBpZiAoYU5hbWVNYXRjaGVzICYmIHBOYW1lTWF0Y2hlcykge1xuICAgICAgcmV0dXJuIHtkcml2ZXJOYW1lLCAuLi5kcml2ZXJEYXRhfTtcbiAgICB9XG5cbiAgICBpZiAoYU5hbWVNYXRjaGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERyaXZlciAnJHtkcml2ZXJOYW1lfScgc3VwcG9ydHMgYXV0b21hdGlvbk5hbWUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke2F1dG9tYXRpb25OYW1lfScsIGJ1dCBBcHBpdW0gY291bGQgbm90IGZpbmQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHN1cHBvcnQgZm9yIHBsYXRmb3JtTmFtZSAnJHttYXRjaFBsYXRmb3JtTmFtZX0nLiBTdXBwb3J0ZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHBsYXRmb3JtTmFtZXMgYXJlOiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShwbGF0Zm9ybU5hbWVzKSk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBpbnN0YWxsZWQgZHJpdmVyIHRvIHN1cHBvcnQgZ2l2ZW4gY2Fwc2ApO1xufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hpbmdEcml2ZXIgKGNvbmZpZywge2F1dG9tYXRpb25OYW1lLCBwbGF0Zm9ybU5hbWV9KSB7XG4gIGlmICghXy5pc1N0cmluZyhwbGF0Zm9ybU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBpbmNsdWRlIGEgcGxhdGZvcm1OYW1lIGNhcGFiaWxpdHknKTtcbiAgfVxuXG4gIGlmICghXy5pc1N0cmluZyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGluY2x1ZGUgYW4gYXV0b21hdGlvbk5hbWUgY2FwYWJpbGl0eScpO1xuICB9XG5cbiAgbG9nLmluZm8oYEF0dGVtcHRpbmcgdG8gZmluZCBtYXRjaGluZyBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lICcke3BsYXRmb3JtTmFtZX0nYCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7XG4gICAgICBkcml2ZXJOYW1lLFxuICAgICAgbWFpbkNsYXNzLFxuICAgICAgdmVyc2lvbixcbiAgICB9ID0gZ2V0RHJpdmVyQnlTdXBwb3J0KGNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zLCBhdXRvbWF0aW9uTmFtZSwgcGxhdGZvcm1OYW1lKTtcbiAgICBsb2cuaW5mbyhgVGhlICcke2RyaXZlck5hbWV9JyBkcml2ZXIgd2FzIGluc3RhbGxlZCBhbmQgbWF0Y2hlZCBjYXBzLmApO1xuICAgIGxvZy5pbmZvKGBXaWxsIHJlcXVpcmUgaXQgYXQgJHtjb25maWcuZ2V0RXh0ZW5zaW9uUmVxdWlyZVBhdGgoZHJpdmVyTmFtZSl9YCk7XG4gICAgY29uc3QgZHJpdmVyID0gY29uZmlnLnJlcXVpcmUoZHJpdmVyTmFtZSk7XG4gICAgaWYgKCFkcml2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWFpbkNsYXNzICR7bWFpbkNsYXNzfSBkaWQgbm90IHJlc3VsdCBpbiBhIGRyaXZlciBvYmplY3RgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtkcml2ZXIsIHZlcnNpb24sIGRyaXZlck5hbWV9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCBtc2cgPSBgQ291bGQgbm90IGZpbmQgYSBkcml2ZXIgZm9yIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICAgICAgICAgIGAnJHthdXRvbWF0aW9uTmFtZX0nIGFuZCBwbGF0Zm9ybU5hbWUgJHtwbGF0Zm9ybU5hbWV9Jy4gYCArXG4gICAgICAgICAgICAgICAgYEhhdmUgeW91IGluc3RhbGxlZCBhIGRyaXZlciB0aGF0IHN1cHBvcnRzIHRob3NlIGAgK1xuICAgICAgICAgICAgICAgIGBjYXBhYmlsaXRpZXM/IFJ1biAnYXBwaXVtIGRyaXZlciBsaXN0IC0taW5zdGFsbGVkJyB0byBzZWUuIGAgK1xuICAgICAgICAgICAgICAgIGAoTG93ZXItbGV2ZWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9KWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZmluZE1hdGNoaW5nRHJpdmVyLFxuICBLTk9XTl9EUklWRVJTLFxufTtcbiJdLCJmaWxlIjoibGliL2RyaXZlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|