appium 2.0.0-beta.19 → 2.0.0-beta.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/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-config.schema.json +0 -0
- package/build/lib/appium.js +84 -69
- package/build/lib/cli/args.js +87 -223
- package/build/lib/cli/extension-command.js +2 -2
- package/build/lib/cli/extension.js +14 -6
- package/build/lib/cli/parser.js +146 -106
- package/build/lib/config-file.js +141 -0
- package/build/lib/config.js +28 -77
- package/build/lib/driver-config.js +41 -20
- package/build/lib/ext-config-io.js +165 -0
- package/build/lib/extension-config.js +110 -60
- package/build/lib/grid-register.js +19 -21
- package/build/lib/main.js +135 -72
- package/build/lib/plugin-config.js +18 -9
- package/build/lib/schema/appium-config-schema.js +253 -0
- package/build/lib/schema/arg-spec.js +120 -0
- package/build/lib/schema/cli-args.js +188 -0
- package/build/lib/schema/cli-transformers.js +76 -0
- package/build/lib/schema/index.js +36 -0
- package/build/lib/schema/keywords.js +72 -0
- package/build/lib/schema/schema.js +357 -0
- package/build/lib/utils.js +24 -33
- 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 +209 -0
- package/build/test/config-file-specs.js +281 -0
- package/build/test/config-specs.js +159 -0
- package/build/test/driver-e2e-specs.js +435 -0
- package/build/test/driver-specs.js +321 -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 +504 -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 +314 -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 +431 -0
- package/build/test/schema/schema-specs.js +389 -0
- package/build/test/utils-specs.js +266 -0
- package/index.js +11 -0
- package/lib/appium-config.schema.json +278 -0
- package/lib/appium.js +99 -75
- package/lib/cli/args.js +138 -335
- package/lib/cli/extension-command.js +7 -6
- package/lib/cli/extension.js +12 -4
- package/lib/cli/parser.js +251 -96
- package/lib/config-file.js +227 -0
- package/lib/config.js +63 -79
- package/lib/driver-config.js +66 -11
- package/lib/ext-config-io.js +287 -0
- package/lib/extension-config.js +209 -66
- package/lib/grid-register.js +24 -21
- package/lib/main.js +145 -71
- package/lib/plugin-config.js +33 -3
- package/lib/schema/appium-config-schema.js +287 -0
- package/lib/schema/arg-spec.js +222 -0
- package/lib/schema/cli-args.js +285 -0
- package/lib/schema/cli-transformers.js +123 -0
- package/lib/schema/index.js +2 -0
- package/lib/schema/keywords.js +135 -0
- package/lib/schema/schema.js +577 -0
- package/lib/utils.js +29 -52
- package/package.json +17 -16
- package/types/appium-config.d.ts +197 -0
- package/types/types.d.ts +201 -0
- package/build/lib/cli/argparse-actions.js +0 -104
- package/build/lib/cli/parser-helpers.js +0 -106
- package/lib/cli/argparse-actions.js +0 -77
- package/lib/cli/parser-helpers.js +0 -106
package/build/lib/config.js
CHANGED
|
@@ -7,14 +7,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.APPIUM_VER = void 0;
|
|
9
9
|
exports.checkNodeOk = checkNodeOk;
|
|
10
|
-
exports.checkValidPort = checkValidPort;
|
|
11
10
|
exports.getBuildInfo = getBuildInfo;
|
|
12
|
-
exports.getDeprecatedArgs = getDeprecatedArgs;
|
|
13
11
|
exports.getGitRev = getGitRev;
|
|
14
|
-
exports.
|
|
12
|
+
exports.getNonDefaultServerArgs = getNonDefaultServerArgs;
|
|
15
13
|
exports.showConfig = showConfig;
|
|
16
14
|
exports.updateBuildInfo = updateBuildInfo;
|
|
17
|
-
exports.validateServerArgs = validateServerArgs;
|
|
18
15
|
exports.validateTmpDir = validateTmpDir;
|
|
19
16
|
exports.warnNodeDeprecations = warnNodeDeprecations;
|
|
20
17
|
|
|
@@ -34,10 +31,10 @@ var _logger = _interopRequireDefault(require("./logger"));
|
|
|
34
31
|
|
|
35
32
|
var _semver = _interopRequireDefault(require("semver"));
|
|
36
33
|
|
|
37
|
-
var _argparseActions = require("./cli/argparse-actions");
|
|
38
|
-
|
|
39
34
|
var _findUp = _interopRequireDefault(require("find-up"));
|
|
40
35
|
|
|
36
|
+
var _schema = require("./schema/schema");
|
|
37
|
+
|
|
41
38
|
const npmPackage = _support.fs.readPackageJsonFrom(__dirname);
|
|
42
39
|
|
|
43
40
|
const APPIUM_VER = npmPackage.version;
|
|
@@ -54,10 +51,6 @@ function getNodeVersion() {
|
|
|
54
51
|
return _semver.default.coerce(process.version);
|
|
55
52
|
}
|
|
56
53
|
|
|
57
|
-
function isSubClass(candidateClass, superClass) {
|
|
58
|
-
return _lodash.default.isFunction(superClass) && _lodash.default.isFunction(candidateClass) && (candidateClass.prototype instanceof superClass || candidateClass === superClass);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
54
|
async function updateBuildInfo(useGithubApiFallback = false) {
|
|
62
55
|
const sha = await getGitRev(useGithubApiFallback);
|
|
63
56
|
|
|
@@ -178,81 +171,39 @@ async function showConfig() {
|
|
|
178
171
|
console.log(JSON.stringify(getBuildInfo()));
|
|
179
172
|
}
|
|
180
173
|
|
|
181
|
-
function
|
|
182
|
-
|
|
183
|
-
dest
|
|
184
|
-
|
|
185
|
-
}]) => {
|
|
186
|
-
if (args[dest] && args[dest] !== defaultValue) {
|
|
187
|
-
acc[dest] = args[dest];
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
return acc;
|
|
191
|
-
}, {});
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function getDeprecatedArgs(parser, args) {
|
|
195
|
-
return parser.rawArgs.reduce((acc, [[name], {
|
|
196
|
-
dest,
|
|
197
|
-
default: defaultValue,
|
|
198
|
-
action
|
|
199
|
-
}]) => {
|
|
200
|
-
if (!args[dest] || args[dest] === defaultValue) {
|
|
201
|
-
return acc;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if (action !== null && action !== void 0 && action.deprecated_for) {
|
|
205
|
-
acc[name] = action.deprecated_for;
|
|
206
|
-
} else if (isSubClass(action, _argparseActions.StoreDeprecatedDefaultCapabilityAction)) {
|
|
207
|
-
acc[name] = _argparseActions.DEFAULT_CAPS_ARG;
|
|
208
|
-
}
|
|
174
|
+
function getNonDefaultServerArgs(parser, args) {
|
|
175
|
+
function typesDiffer(dest) {
|
|
176
|
+
return typeof args[dest] !== typeof defaultsFromSchema[dest];
|
|
177
|
+
}
|
|
209
178
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
179
|
+
function defaultValueIsArray(dest) {
|
|
180
|
+
return _lodash.default.isArray(defaultsFromSchema[dest]);
|
|
181
|
+
}
|
|
213
182
|
|
|
214
|
-
function
|
|
215
|
-
|
|
183
|
+
function argsValueIsArray(dest) {
|
|
184
|
+
return _lodash.default.isArray(args[dest]);
|
|
185
|
+
}
|
|
216
186
|
|
|
217
|
-
|
|
187
|
+
function arraysDiffer(dest) {
|
|
188
|
+
return _lodash.default.difference(args[dest], defaultsFromSchema[dest]).length > 0;
|
|
189
|
+
}
|
|
218
190
|
|
|
219
|
-
|
|
220
|
-
|
|
191
|
+
function valuesUnequal(dest) {
|
|
192
|
+
return args[dest] !== defaultsFromSchema[dest];
|
|
193
|
+
}
|
|
221
194
|
|
|
222
|
-
function
|
|
223
|
-
|
|
195
|
+
function defaultIsDefined(dest) {
|
|
196
|
+
return !_lodash.default.isUndefined(defaultsFromSchema[dest]);
|
|
197
|
+
}
|
|
224
198
|
|
|
225
|
-
|
|
226
|
-
let numFoundInArgs = 0;
|
|
199
|
+
const argValueNotArrayOrArraysDiffer = _lodash.default.overSome([_lodash.default.negate(argsValueIsArray), arraysDiffer]);
|
|
227
200
|
|
|
228
|
-
|
|
229
|
-
if (_lodash.default.has(args, opt) && args[opt]) {
|
|
230
|
-
numFoundInArgs++;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
201
|
+
const defaultValueNotArrayAndValuesUnequal = _lodash.default.overEvery([_lodash.default.negate(defaultValueIsArray), valuesUnequal]);
|
|
233
202
|
|
|
234
|
-
|
|
235
|
-
throw new Error(`You can't pass in more than one argument from the ` + `set ${JSON.stringify(exSet)}, since they are ` + `mutually exclusive`);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
203
|
+
const isNotDefault = _lodash.default.overEvery([defaultIsDefined, _lodash.default.overSome([typesDiffer, _lodash.default.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]), defaultValueNotArrayAndValuesUnequal])]);
|
|
238
204
|
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
callbackPort: checkValidPort,
|
|
242
|
-
bootstrapPort: checkValidPort,
|
|
243
|
-
chromedriverPort: checkValidPort,
|
|
244
|
-
robotPort: checkValidPort,
|
|
245
|
-
backendRetries: r => r >= 0
|
|
246
|
-
};
|
|
247
|
-
const nonDefaultArgs = getNonDefaultArgs(parser, args);
|
|
248
|
-
|
|
249
|
-
for (let [arg, validator] of _lodash.default.toPairs(validations)) {
|
|
250
|
-
if (_lodash.default.has(nonDefaultArgs, arg)) {
|
|
251
|
-
if (!validator(args[arg], arg)) {
|
|
252
|
-
throw new Error(`Invalid argument for param ${arg}: ${args[arg]}`);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
205
|
+
const defaultsFromSchema = (0, _schema.getDefaultsFromSchema)();
|
|
206
|
+
return _lodash.default.pickBy(args, (__, key) => isNotDefault(key));
|
|
256
207
|
}
|
|
257
208
|
|
|
258
209
|
async function validateTmpDir(tmpDir) {
|
|
@@ -264,4 +215,4 @@ async function validateTmpDir(tmpDir) {
|
|
|
264
215
|
}require('source-map-support').install();
|
|
265
216
|
|
|
266
217
|
|
|
267
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsImZzIiwicmVhZFBhY2thZ2VKc29uRnJvbSIsIl9fZGlybmFtZSIsIkFQUElVTV9WRVIiLCJ2ZXJzaW9uIiwiTUlOX05PREVfVkVSU0lPTiIsImVuZ2luZXMiLCJub2RlIiwiR0lUX01FVEFfUk9PVCIsIkdJVF9CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJHSVRIVUJfQVBJIiwiQlVJTERfSU5GTyIsImdldE5vZGVWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwicHJvY2VzcyIsImlzU3ViQ2xhc3MiLCJjYW5kaWRhdGVDbGFzcyIsInN1cGVyQ2xhc3MiLCJfIiwiaXNGdW5jdGlvbiIsInByb3RvdHlwZSIsInVwZGF0ZUJ1aWxkSW5mbyIsInVzZUdpdGh1YkFwaUZhbGxiYWNrIiwic2hhIiwiZ2V0R2l0UmV2IiwiYnVpbHQiLCJnZXRHaXRUaW1lc3RhbXAiLCJpc0VtcHR5IiwiZmluZEdpdFJvb3QiLCJjd2QiLCJyb290RGlyIiwidHlwZSIsImdpdFJvb3QiLCJzdGRvdXQiLCJ0cmltIiwiaWduIiwicmVzQm9keU9iaiIsImF4aW9zIiwiZ2V0IiwiaGVhZGVycyIsImRhdGEiLCJpc0FycmF5IiwibmFtZSIsImNvbW1pdCIsImNvbW1pdFNoYSIsImNvbW1pdHRlciIsImRhdGUiLCJhdXRob3IiLCJnZXRCdWlsZEluZm8iLCJjaGVja05vZGVPayIsInNhdGlzZmllcyIsImxvZ2dlciIsImVycm9yQW5kVGhyb3ciLCJ3YXJuTm9kZURlcHJlY2F0aW9ucyIsInNob3dDb25maWciLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldE5vbkRlZmF1bHRBcmdzIiwicGFyc2VyIiwiYXJncyIsInJhd0FyZ3MiLCJyZWR1Y2UiLCJhY2MiLCJkZXN0IiwiZGVmYXVsdCIsImRlZmF1bHRWYWx1ZSIsImdldERlcHJlY2F0ZWRBcmdzIiwiYWN0aW9uIiwiZGVwcmVjYXRlZF9mb3IiLCJTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbiIsIkRFRkFVTFRfQ0FQU19BUkciLCJjaGVja1ZhbGlkUG9ydCIsInBvcnQiLCJwb3J0TmFtZSIsImVycm9yIiwidmFsaWRhdGVTZXJ2ZXJBcmdzIiwiZXhjbHVzaXZlcyIsImV4U2V0IiwibnVtRm91bmRJbkFyZ3MiLCJvcHQiLCJoYXMiLCJFcnJvciIsInZhbGlkYXRpb25zIiwiY2FsbGJhY2tQb3J0IiwiYm9vdHN0cmFwUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJyb2JvdFBvcnQiLCJiYWNrZW5kUmV0cmllcyIsInIiLCJub25EZWZhdWx0QXJncyIsImFyZyIsInZhbGlkYXRvciIsInRvUGFpcnMiLCJ2YWxpZGF0ZVRtcERpciIsInRtcERpciIsImUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLFlBQUdDLG1CQUFILENBQXVCQyxTQUF2QixDQUFuQjs7QUFFQSxNQUFNQyxVQUFVLEdBQUdKLFVBQVUsQ0FBQ0ssT0FBOUI7O0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUdOLFVBQVUsQ0FBQ08sT0FBWCxDQUFtQkMsSUFBNUM7QUFFQSxNQUFNQyxhQUFhLEdBQUcsTUFBdEI7QUFDQSxNQUFNQyxVQUFVLEdBQUksTUFBS0MsZ0JBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFBRyxFQUExRDtBQUNBLE1BQU1DLFVBQVUsR0FBRyw0Q0FBbkI7QUFFQSxNQUFNQyxVQUFVLEdBQUc7QUFDakJULEVBQUFBLE9BQU8sRUFBRUQ7QUFEUSxDQUFuQjs7QUFJQSxTQUFTVyxjQUFULEdBQTJCO0FBQ3pCLFNBQU9DLGdCQUFPQyxNQUFQLENBQWNDLE9BQU8sQ0FBQ2IsT0FBdEIsQ0FBUDtBQUNEOztBQUVELFNBQVNjLFVBQVQsQ0FBcUJDLGNBQXJCLEVBQXFDQyxVQUFyQyxFQUFp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c0RBQUQsR0FDQyxJQUFHYSxNQUFPLDRDQURyQixDQUFOO0FBRUQ7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBta2RpcnAsIHN5c3RlbSwgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcm9vdERpciB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQge1xuICBTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbiwgREVGQVVMVF9DQVBTX0FSRyxcbn0gZnJvbSAnLi9jbGkvYXJncGFyc2UtYWN0aW9ucyc7XG5pbXBvcnQgZmluZFVwIGZyb20gJ2ZpbmQtdXAnO1xuXG5jb25zdCBucG1QYWNrYWdlID0gZnMucmVhZFBhY2thZ2VKc29uRnJvbShfX2Rpcm5hbWUpO1xuXG5jb25zdCBBUFBJVU1fVkVSID0gbnBtUGFja2FnZS52ZXJzaW9uO1xuY29uc3QgTUlOX05PREVfVkVSU0lPTiA9IG5wbVBhY2thZ2UuZW5naW5lcy5ub2RlO1xuXG5jb25zdCBHSVRfTUVUQV9ST09UID0gJy5naXQnO1xuY29uc3QgR0lUX0JJTkFSWSA9IGBnaXQke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG5jb25zdCBHSVRIVUJfQVBJID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bSc7XG5cbmNvbnN0IEJVSUxEX0lORk8gPSB7XG4gIHZlcnNpb246IEFQUElVTV9WRVIsXG59O1xuXG5mdW5jdGlvbiBnZXROb2RlVmVyc2lvbiAoKSB7XG4gIHJldHVybiBzZW12ZXIuY29lcmNlKHByb2Nlc3MudmVyc2lvbik7XG59XG5cbmZ1bmN0aW9uIGlzU3ViQ2xhc3MgKGNhbmRpZGF0ZUNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHJldHVybiBfLmlzRnVuY3Rpb24oc3VwZXJDbGFzcykgJiYgXy5pc0Z1bmN0aW9uKGNhbmRpZGF0ZUNsYXNzKVxuICAgICYmIChjYW5kaWRhdGVDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBzdXBlckNsYXNzIHx8IGNhbmRpZGF0ZUNsYXNzID09PSBzdXBlckNsYXNzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQnVpbGRJbmZvICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IHNoYSA9IGF3YWl0IGdldEdpdFJldih1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmICghc2hhKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEJVSUxEX0lORk9bJ2dpdC1zaGEnXSA9IHNoYTtcbiAgY29uc3QgYnVpbHQgPSBhd2FpdCBnZXRHaXRUaW1lc3RhbXAoc2hhLCB1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmICghXy5pc0VtcHR5KGJ1aWx0KSkge1xuICAgIEJVSUxEX0lORk8uYnVpbHQgPSBidWlsdDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBHaXQgbWV0YWRhdGEgZGlyIChzZWUgYEdJVF9NRVRBX1JPT1RgKVxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgQXBwaXVtIGNhbm5vdCBhc3N1bWUgYHBhY2thZ2UuanNvbmAgYW5kIGAuZ2l0YCBhcmUgaW4gdGhlIHNhbWVcbiAqIGRpcmVjdG9yeS4gIE1vbm9yZXBvcywgc2VlP1xuICogQHJldHVybnMge3N0cmluZ3x2b2lkfSBQYXRoIHRvIGRpciBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZEdpdFJvb3QgKCkge1xuICByZXR1cm4gYXdhaXQgZmluZFVwKEdJVF9NRVRBX1JPT1QsIHtjd2Q6IHJvb3REaXIsIHR5cGU6ICdkaXJlY3RvcnknfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEdpdFJldiAodXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBnaXRSb290ID0gYXdhaXQgZmluZEdpdFJvb3QoKTtcbiAgaWYgKGdpdFJvb3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsncmV2LXBhcnNlJywgJ0hFQUQnXSwge1xuICAgICAgICBjd2Q6IGdpdFJvb3RcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgaWYgKCF1c2VHaXRodWJBcGlGYWxsYmFjaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNCb2R5T2JqID0gKGF3YWl0IGF4aW9zLmdldChgJHtHSVRIVUJfQVBJfS90YWdzYCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWBcbiAgICAgIH1cbiAgICB9KSkuZGF0YTtcbiAgICBpZiAoXy5pc0FycmF5KHJlc0JvZHlPYmopKSB7XG4gICAgICBmb3IgKGNvbnN0IHtuYW1lLCBjb21taXR9IG9mIHJlc0JvZHlPYmopIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IGB2JHtBUFBJVU1fVkVSfWAgJiYgY29tbWl0ICYmIGNvbW1pdC5zaGEpIHtcbiAgICAgICAgICByZXR1cm4gY29tbWl0LnNoYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoaWduKSB7fVxuICByZXR1cm4gbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0VGltZXN0YW1wIChjb21taXRTaGEsIHVzZUdpdGh1YkFwaUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgY29uc3QgZ2l0Um9vdCA9IGF3YWl0IGZpbmRHaXRSb290KCk7XG4gIGlmIChnaXRSb290KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhHSVRfQklOQVJZLCBbJ3Nob3cnLCAnLXMnLCAnLS1mb3JtYXQ9JWNpJywgY29tbWl0U2hhXSwge1xuICAgICAgICBjd2Q6IGdpdFJvb3RcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgaWYgKCF1c2VHaXRodWJBcGlGYWxsYmFjaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNCb2R5T2JqID0gKGF3YWl0IGF4aW9zLmdldChgJHtHSVRIVUJfQVBJfS9jb21taXRzLyR7Y29tbWl0U2hhfWAsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgQXBwaXVtICR7QVBQSVVNX1ZFUn1gXG4gICAgICB9XG4gICAgfSkpLmRhdGE7XG4gICAgaWYgKHJlc0JvZHlPYmogJiYgcmVzQm9keU9iai5jb21taXQpIHtcbiAgICAgIGlmIChyZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIgJiYgcmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyLmRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlci5kYXRlO1xuICAgICAgfVxuICAgICAgaWYgKHJlc0JvZHlPYmouY29tbWl0LmF1dGhvciAmJiByZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IuZGF0ZSkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai5jb21taXQuYXV0aG9yLmRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEByZXR1cm4gTXV0YWJsZSBvYmplY3QgY29udGFpbmluZyBBcHBpdW0gYnVpbGQgaW5mb3JtYXRpb24uIEJ5IGRlZmF1bHQgaXRcbiAqIG9ubHkgY29udGFpbnMgdGhlIEFwcGl1bSB2ZXJzaW9uLCBidXQgaXMgdXBkYXRlZCB3aXRoIHRoZSBidWlsZCB0aW1lc3RhbXBcbiAqIGFuZCBnaXQgY29tbWl0IGhhc2ggYXN5bmNocm9ub3VzbHkgYXMgc29vbiBhcyBgdXBkYXRlQnVpbGRJbmZvYCBpcyBjYWxsZWRcbiAqIGFuZCBzdWNjZWVkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0QnVpbGRJbmZvICgpIHtcbiAgcmV0dXJuIEJVSUxEX0lORk87XG59XG5cbmZ1bmN0aW9uIGNoZWNrTm9kZU9rICgpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGdldE5vZGVWZXJzaW9uKCk7XG4gIGlmICghc2VtdmVyLnNhdGlzZmllcyh2ZXJzaW9uLCBNSU5fTk9ERV9WRVJTSU9OKSkge1xuICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBOb2RlIHZlcnNpb24gbXVzdCBiZSAke01JTl9OT0RFX1ZFUlNJT059LiBDdXJyZW50bHkgJHt2ZXJzaW9uLnZlcnNpb259YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk5vZGVEZXByZWNhdGlvbnMgKCkge1xuICAvKipcbiAgICogVW5jb21tZW50IHRoaXMgc2VjdGlvbiB0byBnZXQgbm9kZSB2ZXJzaW9uIGRlcHJlY2F0aW9uIHdhcm5pbmdzXG4gICAqIEFsc28gYWRkIHRlc3QgY2FzZXMgdG8gY29uZmlnLXNwZWNzLmpzIHRvIGNvdmVyIHRoZSBjYXNlcyBhZGRlZFxuICAgKiovXG5cbiAgLy8gY29uc3QgdmVyc2lvbiA9IGdldE5vZGVWZXJzaW9uKCk7XG4gIC8vIGlmICh2ZXJzaW9uLm1ham9yIDwgOCkge1xuICAvLyAgIGxvZ2dlci53YXJuKGBBcHBpdW0gc3VwcG9ydCBmb3IgdmVyc2lvbnMgb2Ygbm9kZSA8ICR7dmVyc2lvbi5tYWpvcn0gaGFzIGJlZW4gYCArXG4gIC8vICAgICAgICAgICAgICAgJ2RlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBQbGVhc2UgJyArXG4gIC8vICAgICAgICAgICAgICAgJ3VwZ3JhZGUhJyk7XG4gIC8vIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd0NvbmZpZyAoKSB7XG4gIGF3YWl0IHVwZGF0ZUJ1aWxkSW5mbyh0cnVlKTtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZ2V0QnVpbGRJbmZvKCkpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG59XG5cbmZ1bmN0aW9uIGdldE5vbkRlZmF1bHRBcmdzIChwYXJzZXIsIGFyZ3MpIHtcbiAgcmV0dXJuIHBhcnNlci5yYXdBcmdzLnJlZHVjZSgoYWNjLCBbLCB7ZGVzdCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlfV0pID0+IHtcbiAgICBpZiAoYXJnc1tkZXN0XSAmJiBhcmdzW2Rlc3RdICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIGFjY1tkZXN0XSA9IGFyZ3NbZGVzdF07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwcmVjYXRlZEFyZ3MgKHBhcnNlciwgYXJncykge1xuICAvLyBnbyB0aHJvdWdoIHRoZSBzZXJ2ZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgZmlndXJlXG4gIC8vIG91dCB3aGljaCBvZiB0aGUgb25lcyB1c2VkIGFyZSBkZXByZWNhdGVkXG4gIHJldHVybiBwYXJzZXIucmF3QXJncy5yZWR1Y2UoKGFjYywgW1tuYW1lXSwge2Rlc3QsIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSwgYWN0aW9ufV0pID0+IHtcbiAgICBpZiAoIWFyZ3NbZGVzdF0gfHwgYXJnc1tkZXN0XSA9PT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb24/LmRlcHJlY2F0ZWRfZm9yKSB7XG4gICAgICBhY2NbbmFtZV0gPSBhY3Rpb24uZGVwcmVjYXRlZF9mb3I7XG4gICAgfSBlbHNlIGlmIChpc1N1YkNsYXNzKGFjdGlvbiwgU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24pKSB7XG4gICAgICBhY2NbbmFtZV0gPSBERUZBVUxUX0NBUFNfQVJHO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVmFsaWRQb3J0IChwb3J0LCBwb3J0TmFtZSkge1xuICBpZiAocG9ydCA+IDAgJiYgcG9ydCA8IDY1NTM2KSByZXR1cm4gdHJ1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICBsb2dnZXIuZXJyb3IoYFBvcnQgJyR7cG9ydE5hbWV9JyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gNjU1MzYuIEN1cnJlbnRseSAke3BvcnR9YCk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTZXJ2ZXJBcmdzIChwYXJzZXIsIGFyZ3MpIHtcbiAgLy8gYXJndW1lbnRzIHRoYXQgY2Fubm90IGJvdGggYmUgc2V0XG4gIGxldCBleGNsdXNpdmVzID0gW1xuICAgIFsnbm9SZXNldCcsICdmdWxsUmVzZXQnXSxcbiAgICBbJ2lwYScsICdzYWZhcmknXSxcbiAgICBbJ2FwcCcsICdzYWZhcmknXSxcbiAgICBbJ2ZvcmNlSXBob25lJywgJ2ZvcmNlSXBhZCddLFxuICAgIFsnZGV2aWNlTmFtZScsICdkZWZhdWx0RGV2aWNlJ11cbiAgXTtcblxuICBmb3IgKGxldCBleFNldCBvZiBleGNsdXNpdmVzKSB7XG4gICAgbGV0IG51bUZvdW5kSW5BcmdzID0gMDtcbiAgICBmb3IgKGxldCBvcHQgb2YgZXhTZXQpIHtcbiAgICAgIGlmIChfLmhhcyhhcmdzLCBvcHQpICYmIGFyZ3Nbb3B0XSkge1xuICAgICAgICBudW1Gb3VuZEluQXJncysrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVtRm91bmRJbkFyZ3MgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBjYW4ndCBwYXNzIGluIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgZnJvbSB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHNldCAke0pTT04uc3RyaW5naWZ5KGV4U2V0KX0sIHNpbmNlIHRoZXkgYXJlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBtdXR1YWxseSBleGNsdXNpdmVgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB2YWxpZGF0aW9ucyA9IHtcbiAgICBwb3J0OiBjaGVja1ZhbGlkUG9ydCxcbiAgICBjYWxsYmFja1BvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGJvb3RzdHJhcFBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGNocm9tZWRyaXZlclBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIHJvYm90UG9ydDogY2hlY2tWYWxpZFBvcnQsXG4gICAgYmFja2VuZFJldHJpZXM6IChyKSA9PiByID49IDAsXG4gIH07XG5cbiAgY29uc3Qgbm9uRGVmYXVsdEFyZ3MgPSBnZXROb25EZWZhdWx0QXJncyhwYXJzZXIsIGFyZ3MpO1xuXG4gIGZvciAobGV0IFthcmcsIHZhbGlkYXRvcl0gb2YgXy50b1BhaXJzKHZhbGlkYXRpb25zKSkge1xuICAgIGlmIChfLmhhcyhub25EZWZhdWx0QXJncywgYXJnKSkge1xuICAgICAgaWYgKCF2YWxpZGF0b3IoYXJnc1thcmddLCBhcmcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhcmd1bWVudCBmb3IgcGFyYW0gJHthcmd9OiAke2FyZ3NbYXJnXX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVUbXBEaXIgKHRtcERpcikge1xuICB0cnkge1xuICAgIGF3YWl0IG1rZGlycCh0bXBEaXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXZSBjb3VsZCBub3QgZW5zdXJlIHRoYXQgdGhlIHRlbXAgZGlyIHlvdSBzcGVjaWZpZWQgYCArXG4gICAgICAgICAgICAgICAgICAgIGAoJHt0bXBEaXJ9KSBleGlzdHMuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB3cml0ZWFibGUuYCk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZ2V0QnVpbGRJbmZvLCB2YWxpZGF0ZVNlcnZlckFyZ3MsIGNoZWNrTm9kZU9rLCBzaG93Q29uZmlnLFxuICB3YXJuTm9kZURlcHJlY2F0aW9ucywgdmFsaWRhdGVUbXBEaXIsIGdldE5vbkRlZmF1bHRBcmdzLFxuICBnZXRHaXRSZXYsIGNoZWNrVmFsaWRQb3J0LCBBUFBJVU1fVkVSLCB1cGRhdGVCdWlsZEluZm8sXG4gIGdldERlcHJlY2F0ZWRBcmdzLFxufTtcbiJdLCJmaWxlIjoibGliL2NvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
218
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsImZzIiwicmVhZFBhY2thZ2VKc29uRnJvbSIsIl9fZGlybmFtZSIsIkFQUElVTV9WRVIiLCJ2ZXJzaW9uIiwiTUlOX05PREVfVkVSU0lPTiIsImVuZ2luZXMiLCJub2RlIiwiR0lUX01FVEFfUk9PVCIsIkdJVF9CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJHSVRIVUJfQVBJIiwiQlVJTERfSU5GTyIsImdldE5vZGVWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwicHJvY2VzcyIsInVwZGF0ZUJ1aWxkSW5mbyIsInVzZUdpdGh1YkFwaUZhbGxiYWNrIiwic2hhIiwiZ2V0R2l0UmV2IiwiYnVpbHQiLCJnZXRHaXRUaW1lc3RhbXAiLCJfIiwiaXNFbXB0eSIsImZpbmRHaXRSb290IiwiY3dkIiwicm9vdERpciIsInR5cGUiLCJnaXRSb290Iiwic3Rkb3V0IiwidHJpbSIsImlnbiIsInJlc0JvZHlPYmoiLCJheGlvcyIsImdldCIsImhlYWRlcnMiLCJkYXRhIiwiaXNBcnJheSIsIm5hbWUiLCJjb21taXQiLCJjb21taXRTaGEiLCJjb21taXR0ZXIiLCJkYXRlIiwiYXV0aG9yIiwiZ2V0QnVpbGRJbmZvIiwiY2hlY2tOb2RlT2siLCJzYXRpc2ZpZXMiLCJsb2dnZXIiLCJlcnJvckFuZFRocm93Iiwid2Fybk5vZGVEZXByZWNhdGlvbnMiLCJzaG93Q29uZmlnIiwiY29uc29sZSIsImxvZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXROb25EZWZhdWx0U2VydmVyQXJncyIsInBhcnNlciIsImFyZ3MiLCJ0eXBlc0RpZmZlciIsImRlc3QiLCJkZWZhdWx0c0Zyb21TY2hlbWEiLCJkZWZhdWx0VmFsdWVJc0FycmF5IiwiYXJnc1ZhbHVlSXNBcnJheSIsImFycmF5c0RpZmZlciIsImRpZmZlcmVuY2UiLCJsZW5ndGgiLCJ2YWx1ZXNVbmVxdWFsIiwiZGVmYXVsdElzRGVmaW5lZCIsImlzVW5kZWZpbmVkIiwiYXJnVmFsdWVOb3RBcnJheU9yQXJyYXlzRGlmZmVyIiwib3ZlclNvbWUiLCJuZWdhdGUiLCJkZWZhdWx0VmFsdWVOb3RBcnJheUFuZFZhbHVlc1VuZXF1YWwiLCJvdmVyRXZlcnkiLCJpc05vdERlZmF1bHQiLCJwaWNrQnkiLCJfXyIsImtleSIsInZhbGlkYXRlVG1wRGlyIiwidG1wRGlyIiwiZSIsIkVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHQyxZQUFHQyxtQkFBSCxDQUF1QkMsU0FBdkIsQ0FBbkI7O0FBRUEsTUFBTUMsVUFBVSxHQUFHSixVQUFVLENBQUNLLE9BQTlCOztBQUNBLE1BQU1DLGdCQUFnQixHQUFHTixVQUFVLENBQUNPLE9BQVgsQ0FBbUJDLElBQTVDO0FBRUEsTUFBTUMsYUFBYSxHQUFHLE1BQXRCO0FBQ0EsTUFBTUMsVUFBVSxHQUFJLE1BQUtDLGdCQUFPQyxTQUFQLEtBQXFCLE1BQXJCLEdBQThCLEVBQUcsRUFBMUQ7QUFDQSxNQUFNQyxVQUFVLEdBQUcsNENBQW5CO0FBRUEsTUFBTUMsVUFBVSxHQUFHO0FBQ2pCVCxFQUFBQSxPQUFPLEVBQUVEO0FBRFEsQ0FBbkI7O0FBSUEsU0FBU1csY0FBVCxHQUEyQjtBQUN6QixTQUFPQyxnQkFBT0MsTUFBUCxDQUFjQyxPQUFPLENBQUNiLE9BQXRCLENBQVA7QUFDRDs7QUFFRCxlQUFlYyxlQUFmLENBQWdDQyxvQkFBb0IsR0FBRyxLQUF2RCxFQUE4RDtBQUM1RCxRQUFNQyxHQUFHLEdBQUcsTUFBTUMsU0FBUyxDQUFDRixvQkFBRCxDQUEzQjs7QUFDQSxNQUFJLENBQUNDLEdBQUwsRUFBVTtBQUNSO0FBQ0Q7O0FBQ0RQLEVBQUFBLFVBQVUsQ0FBQyxTQUFELENBQVYsR0FBd0JPLEdBQXhCO0FBQ0EsUUFBTUUsS0FBSyxHQUFHLE1BQU1DLGVBQWUsQ0FBQ0gsR0FB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QkFEVSxFQUVWUSw4QkFGVSxDQUFaLENBRlMsRUFNVEcsb0NBTlMsQ0FBWCxDQUYrQixDQUFaLENBQXJCOztBQVlBLFFBQU1aLGtCQUFrQixHQUFHLG9DQUEzQjtBQUVBLFNBQU90QyxnQkFBRXFELE1BQUYsQ0FBU2xCLElBQVQsRUFBZSxDQUFDbUIsRUFBRCxFQUFLQyxHQUFMLEtBQWFILFlBQVksQ0FBQ0csR0FBRCxDQUF4QyxDQUFQO0FBQ0Q7O0FBRUQsZUFBZUMsY0FBZixDQUErQkMsTUFBL0IsRUFBdUM7QUFDckMsTUFBSTtBQUNGLFVBQU0scUJBQU9BLE1BQVAsQ0FBTjtBQUNELEdBRkQsQ0FFRSxPQUFPQyxDQUFQLEVBQVU7QUFDVixVQUFNLElBQUlDLEtBQUosQ0FBVyxzREFBRCxHQUNDLElBQUdGLE1BQU8sNENBRHJCLENBQU47QUFFRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IG1rZGlycCwgc3lzdGVtLCBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyByb290RGlyIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5pbXBvcnQgeyBnZXREZWZhdWx0c0Zyb21TY2hlbWEgfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuXG5jb25zdCBucG1QYWNrYWdlID0gZnMucmVhZFBhY2thZ2VKc29uRnJvbShfX2Rpcm5hbWUpO1xuXG5jb25zdCBBUFBJVU1fVkVSID0gbnBtUGFja2FnZS52ZXJzaW9uO1xuY29uc3QgTUlOX05PREVfVkVSU0lPTiA9IG5wbVBhY2thZ2UuZW5naW5lcy5ub2RlO1xuXG5jb25zdCBHSVRfTUVUQV9ST09UID0gJy5naXQnO1xuY29uc3QgR0lUX0JJTkFSWSA9IGBnaXQke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG5jb25zdCBHSVRIVUJfQVBJID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bSc7XG5cbmNvbnN0IEJVSUxEX0lORk8gPSB7XG4gIHZlcnNpb246IEFQUElVTV9WRVIsXG59O1xuXG5mdW5jdGlvbiBnZXROb2RlVmVyc2lvbiAoKSB7XG4gIHJldHVybiBzZW12ZXIuY29lcmNlKHByb2Nlc3MudmVyc2lvbik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUJ1aWxkSW5mbyAodXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBzaGEgPSBhd2FpdCBnZXRHaXRSZXYodXNlR2l0aHViQXBpRmFsbGJhY2spO1xuICBpZiAoIXNoYSkge1xuICAgIHJldHVybjtcbiAgfVxuICBCVUlMRF9JTkZPWydnaXQtc2hhJ10gPSBzaGE7XG4gIGNvbnN0IGJ1aWx0ID0gYXdhaXQgZ2V0R2l0VGltZXN0YW1wKHNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2spO1xuICBpZiAoIV8uaXNFbXB0eShidWlsdCkpIHtcbiAgICBCVUlMRF9JTkZPLmJ1aWx0ID0gYnVpbHQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgR2l0IG1ldGFkYXRhIGRpciAoc2VlIGBHSVRfTUVUQV9ST09UYClcbiAqXG4gKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIEFwcGl1bSBjYW5ub3QgYXNzdW1lIGBwYWNrYWdlLmpzb25gIGFuZCBgLmdpdGAgYXJlIGluIHRoZSBzYW1lXG4gKiBkaXJlY3RvcnkuICBNb25vcmVwb3MsIHNlZT9cbiAqIEByZXR1cm5zIHtzdHJpbmd8dm9pZH0gUGF0aCB0byBkaXIgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmRHaXRSb290ICgpIHtcbiAgcmV0dXJuIGF3YWl0IGZpbmRVcChHSVRfTUVUQV9ST09ULCB7Y3dkOiByb290RGlyLCB0eXBlOiAnZGlyZWN0b3J5J30pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRHaXRSZXYgKHVzZUdpdGh1YkFwaUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgY29uc3QgZ2l0Um9vdCA9IGF3YWl0IGZpbmRHaXRSb290KCk7XG4gIGlmIChnaXRSb290KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhHSVRfQklOQVJZLCBbJ3Jldi1wYXJzZScsICdIRUFEJ10sIHtcbiAgICAgICAgY3dkOiBnaXRSb290XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdGRvdXQudHJpbSgpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuXG4gIGlmICghdXNlR2l0aHViQXBpRmFsbGJhY2spIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzQm9keU9iaiA9IChhd2FpdCBheGlvcy5nZXQoYCR7R0lUSFVCX0FQSX0vdGFnc2AsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgQXBwaXVtICR7QVBQSVVNX1ZFUn1gXG4gICAgICB9XG4gICAgfSkpLmRhdGE7XG4gICAgaWYgKF8uaXNBcnJheShyZXNCb2R5T2JqKSkge1xuICAgICAgZm9yIChjb25zdCB7bmFtZSwgY29tbWl0fSBvZiByZXNCb2R5T2JqKSB7XG4gICAgICAgIGlmIChuYW1lID09PSBgdiR7QVBQSVVNX1ZFUn1gICYmIGNvbW1pdCAmJiBjb21taXQuc2hhKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1pdC5zaGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEdpdFRpbWVzdGFtcCAoY29tbWl0U2hhLCB1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBmaW5kR2l0Um9vdCgpO1xuICBpZiAoZ2l0Um9vdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydzaG93JywgJy1zJywgJy0tZm9ybWF0PSVjaScsIGNvbW1pdFNoYV0sIHtcbiAgICAgICAgY3dkOiBnaXRSb290XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdGRvdXQudHJpbSgpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuXG4gIGlmICghdXNlR2l0aHViQXBpRmFsbGJhY2spIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzQm9keU9iaiA9IChhd2FpdCBheGlvcy5nZXQoYCR7R0lUSFVCX0FQSX0vY29tbWl0cy8ke2NvbW1pdFNoYX1gLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChyZXNCb2R5T2JqICYmIHJlc0JvZHlPYmouY29tbWl0KSB7XG4gICAgICBpZiAocmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyICYmIHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlci5kYXRlKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIuZGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IgJiYgcmVzQm9keU9iai5jb21taXQuYXV0aG9yLmRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHJlc0JvZHlPYmouY29tbWl0LmF1dGhvci5kYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoaWduKSB7fVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIE11dGFibGUgb2JqZWN0IGNvbnRhaW5pbmcgQXBwaXVtIGJ1aWxkIGluZm9ybWF0aW9uLiBCeSBkZWZhdWx0IGl0XG4gKiBvbmx5IGNvbnRhaW5zIHRoZSBBcHBpdW0gdmVyc2lvbiwgYnV0IGlzIHVwZGF0ZWQgd2l0aCB0aGUgYnVpbGQgdGltZXN0YW1wXG4gKiBhbmQgZ2l0IGNvbW1pdCBoYXNoIGFzeW5jaHJvbm91c2x5IGFzIHNvb24gYXMgYHVwZGF0ZUJ1aWxkSW5mb2AgaXMgY2FsbGVkXG4gKiBhbmQgc3VjY2VlZHMuXG4gKi9cbmZ1bmN0aW9uIGdldEJ1aWxkSW5mbyAoKSB7XG4gIHJldHVybiBCVUlMRF9JTkZPO1xufVxuXG5mdW5jdGlvbiBjaGVja05vZGVPayAoKSB7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXROb2RlVmVyc2lvbigpO1xuICBpZiAoIXNlbXZlci5zYXRpc2ZpZXModmVyc2lvbiwgTUlOX05PREVfVkVSU0lPTikpIHtcbiAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgTm9kZSB2ZXJzaW9uIG11c3QgYmUgJHtNSU5fTk9ERV9WRVJTSU9OfS4gQ3VycmVudGx5ICR7dmVyc2lvbi52ZXJzaW9ufWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Ob2RlRGVwcmVjYXRpb25zICgpIHtcbiAgLyoqXG4gICAqIFVuY29tbWVudCB0aGlzIHNlY3Rpb24gdG8gZ2V0IG5vZGUgdmVyc2lvbiBkZXByZWNhdGlvbiB3YXJuaW5nc1xuICAgKiBBbHNvIGFkZCB0ZXN0IGNhc2VzIHRvIGNvbmZpZy1zcGVjcy5qcyB0byBjb3ZlciB0aGUgY2FzZXMgYWRkZWRcbiAgICoqL1xuXG4gIC8vIGNvbnN0IHZlcnNpb24gPSBnZXROb2RlVmVyc2lvbigpO1xuICAvLyBpZiAodmVyc2lvbi5tYWpvciA8IDgpIHtcbiAgLy8gICBsb2dnZXIud2FybihgQXBwaXVtIHN1cHBvcnQgZm9yIHZlcnNpb25zIG9mIG5vZGUgPCAke3ZlcnNpb24ubWFqb3J9IGhhcyBiZWVuIGAgK1xuICAvLyAgICAgICAgICAgICAgICdkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gUGxlYXNlICcgK1xuICAvLyAgICAgICAgICAgICAgICd1cGdyYWRlIScpO1xuICAvLyB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dDb25maWcgKCkge1xuICBhd2FpdCB1cGRhdGVCdWlsZEluZm8odHJ1ZSk7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGdldEJ1aWxkSW5mbygpKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxufVxuXG5mdW5jdGlvbiBnZXROb25EZWZhdWx0U2VydmVyQXJncyAocGFyc2VyLCBhcmdzKSB7XG4gIC8vIGhvcGVmdWxseSB0aGVzZSBmdW5jdGlvbiBuYW1lcyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoXG5cbiAgZnVuY3Rpb24gdHlwZXNEaWZmZXIgKGRlc3QpIHtcbiAgICByZXR1cm4gdHlwZW9mIGFyZ3NbZGVzdF0gIT09IHR5cGVvZiBkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF07XG4gIH1cblxuICBmdW5jdGlvbiBkZWZhdWx0VmFsdWVJc0FycmF5IChkZXN0KSB7XG4gICAgcmV0dXJuIF8uaXNBcnJheShkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJnc1ZhbHVlSXNBcnJheSAoZGVzdCkge1xuICAgIHJldHVybiBfLmlzQXJyYXkoYXJnc1tkZXN0XSk7XG4gIH1cblxuICBmdW5jdGlvbiBhcnJheXNEaWZmZXIgKGRlc3QpIHtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFyZ3NbZGVzdF0sIGRlZmF1bHRzRnJvbVNjaGVtYVtkZXN0XSkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbHVlc1VuZXF1YWwgKGRlc3QpIHtcbiAgICByZXR1cm4gYXJnc1tkZXN0XSAhPT0gZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdElzRGVmaW5lZCAoZGVzdCkge1xuICAgIHJldHVybiAhXy5pc1VuZGVmaW5lZChkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF0pO1xuICB9XG5cbiAgLy8gbm90ZSB0aGF0IGBfLm92ZXJFdmVyeWAgaXMgbGlrZSBhbiBcIkFORFwiLCBhbmQgYF8ub3ZlclNvbWVgIGlzIGxpa2UgYW4gXCJPUlwiXG5cbiAgY29uc3QgYXJnVmFsdWVOb3RBcnJheU9yQXJyYXlzRGlmZmVyID0gXy5vdmVyU29tZShbXG4gICAgXy5uZWdhdGUoYXJnc1ZhbHVlSXNBcnJheSksXG4gICAgYXJyYXlzRGlmZmVyXG4gIF0pO1xuXG4gIGNvbnN0IGRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzVW5lcXVhbCA9IF8ub3ZlckV2ZXJ5KFtcbiAgICBfLm5lZ2F0ZShkZWZhdWx0VmFsdWVJc0FycmF5KSwgdmFsdWVzVW5lcXVhbFxuICBdKTtcblxuICAvKipcbiAgICogVGhpcyB1c2VkIHRvIGJlIGEgaGlkZW91cyBjb25kaXRpb25hbCwgYnV0IGl0J3MgYnJva2VuIHVwIGludG8gYSBoaWRlb3VzIGZ1bmN0aW9uIGluc3RlYWQuXG4gICAqIGhvcGVmdWxseSB0aGlzIG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIHVuZGVyc3RhbmRhYmxlLlxuICAgKiAtIGNoZWNrcyBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBkZWZpbmVkXG4gICAqIC0gaWYgc28sIGFuZCB0aGUgZGVmYXVsdCBpcyBub3QgYW4gYXJyYXk6XG4gICAqICAgLSBlbnN1cmVzIHRoZSB0eXBlcyBhcmUgdGhlIHNhbWVcbiAgICogICAtIGVuc3VyZXMgdGhlIHZhbHVlcyBhcmUgZXF1YWxcbiAgICogLSBpZiBzbywgYW5kIHRoZSBkZWZhdWx0IGlzIGFuIGFycmF5OlxuICAgKiAgIC0gZW5zdXJlcyB0aGUgYXJncyB2YWx1ZSBpcyBhbiBhcnJheVxuICAgKiAgIC0gZW5zdXJlcyB0aGUgYXJncyB2YWx1ZXMgZG8gbm90IGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0IHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAtIGFyZ3VtZW50IG5hbWUgKGBkZXN0YCB2YWx1ZSlcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb25zdCBpc05vdERlZmF1bHQgPSBfLm92ZXJFdmVyeShbXG4gICAgZGVmYXVsdElzRGVmaW5lZCxcbiAgICBfLm92ZXJTb21lKFtcbiAgICAgIHR5cGVzRGlmZmVyLFxuICAgICAgXy5vdmVyRXZlcnkoW1xuICAgICAgICBkZWZhdWx0VmFsdWVJc0FycmF5LFxuICAgICAgICBhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXJcbiAgICAgIF0pLFxuICAgICAgZGVmYXVsdFZhbHVlTm90QXJyYXlBbmRWYWx1ZXNVbmVxdWFsXG4gICAgXSlcbiAgXSk7XG5cbiAgY29uc3QgZGVmYXVsdHNGcm9tU2NoZW1hID0gZ2V0RGVmYXVsdHNGcm9tU2NoZW1hKCk7XG5cbiAgcmV0dXJuIF8ucGlja0J5KGFyZ3MsIChfXywga2V5KSA9PiBpc05vdERlZmF1bHQoa2V5KSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlVG1wRGlyICh0bXBEaXIpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBta2RpcnAodG1wRGlyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgV2UgY291bGQgbm90IGVuc3VyZSB0aGF0IHRoZSB0ZW1wIGRpciB5b3Ugc3BlY2lmaWVkIGAgK1xuICAgICAgICAgICAgICAgICAgICBgKCR7dG1wRGlyfSkgZXhpc3RzLiBQbGVhc2UgbWFrZSBzdXJlIGl0J3Mgd3JpdGVhYmxlLmApO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGdldEJ1aWxkSW5mbywgY2hlY2tOb2RlT2ssIHNob3dDb25maWcsXG4gIHdhcm5Ob2RlRGVwcmVjYXRpb25zLCB2YWxpZGF0ZVRtcERpciwgZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MsXG4gIGdldEdpdFJldiwgQVBQSVVNX1ZFUiwgdXBkYXRlQnVpbGRJbmZvXG59O1xuIl0sImZpbGUiOiJsaWIvY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -7,41 +7,61 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
10
12
|
require("source-map-support/register");
|
|
11
13
|
|
|
12
14
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
15
|
|
|
14
|
-
var _extensionConfig =
|
|
15
|
-
|
|
16
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
16
|
+
var _extensionConfig = _interopRequireDefault(require("./extension-config"));
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
var _extConfigIo = require("./ext-config-io");
|
|
19
19
|
|
|
20
20
|
class DriverConfig extends _extensionConfig.default {
|
|
21
|
-
constructor(appiumHome, logFn
|
|
22
|
-
super(appiumHome,
|
|
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;
|
|
23
37
|
}
|
|
24
38
|
|
|
25
|
-
getConfigProblems(
|
|
39
|
+
getConfigProblems(extData, extName) {
|
|
26
40
|
const problems = [];
|
|
27
|
-
const automationNames = [];
|
|
28
41
|
const {
|
|
29
42
|
platformNames,
|
|
30
43
|
automationName
|
|
31
|
-
} =
|
|
44
|
+
} = extData;
|
|
32
45
|
|
|
33
46
|
if (!_lodash.default.isArray(platformNames)) {
|
|
34
47
|
problems.push({
|
|
35
|
-
err: 'Missing or incorrect supported
|
|
48
|
+
err: 'Missing or incorrect supported platformNames list.',
|
|
36
49
|
val: platformNames
|
|
37
50
|
});
|
|
38
51
|
} else {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
+
}
|
|
45
65
|
}
|
|
46
66
|
}
|
|
47
67
|
}
|
|
@@ -53,14 +73,14 @@ class DriverConfig extends _extensionConfig.default {
|
|
|
53
73
|
});
|
|
54
74
|
}
|
|
55
75
|
|
|
56
|
-
if (
|
|
76
|
+
if (this.knownAutomationNames.has(automationName)) {
|
|
57
77
|
problems.push({
|
|
58
78
|
err: 'Multiple drivers claim support for the same automationName',
|
|
59
79
|
val: automationName
|
|
60
80
|
});
|
|
61
81
|
}
|
|
62
82
|
|
|
63
|
-
|
|
83
|
+
this.knownAutomationNames.add(automationName);
|
|
64
84
|
return problems;
|
|
65
85
|
}
|
|
66
86
|
|
|
@@ -73,7 +93,8 @@ class DriverConfig extends _extensionConfig.default {
|
|
|
73
93
|
|
|
74
94
|
}
|
|
75
95
|
|
|
76
|
-
exports.default = DriverConfig;
|
|
96
|
+
exports.default = DriverConfig;
|
|
97
|
+
(0, _defineProperty2.default)(DriverConfig, "_instances", {});require('source-map-support').install();
|
|
77
98
|
|
|
78
99
|
|
|
79
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXItY29uZmlnLmpzIl0sIm5hbWVzIjpbIkRyaXZlckNvbmZpZyIsIkV4dGVuc2lvbkNvbmZpZyIsImNvbnN0cnVjdG9yIiwiYXBwaXVtSG9tZSIsImxvZ0ZuIiwiRFJJVkVSX1RZUEUiLCJrbm93bkF1dG9tYXRpb25OYW1lcyIsIlNldCIsInJlYWQiLCJjbGVhciIsImdldEluc3RhbmNlIiwiaW5zdGFuY2UiLCJfaW5zdGFuY2VzIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJleHREYXRhIiwiZXh0TmFtZSIsInByb2JsZW1zIiwicGxhdGZvcm1OYW1lcyIsImF1dG9tYXRpb25OYW1lIiwiXyIsImlzQXJyYXkiLCJwdXNoIiwiZXJyIiwidmFsIiwiaXNFbXB0eSIsInBOYW1lIiwiaXNTdHJpbmciLCJoYXMiLCJhZGQiLCJleHRlbnNpb25EZXNjIiwiZHJpdmVyTmFtZSIsInZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFZSxNQUFNQSxZQUFOLFNBQTJCQyx3QkFBM0IsQ0FBMkM7QUFleERDLEVBQUFBLFdBQVcsQ0FBRUMsVUFBRixFQUFjQyxLQUFkLEVBQXFCO0FBQzlCLFVBQU1ELFVBQU4sRUFBa0JFLHdCQUFsQixFQUErQkQsS0FBL0I7QUFFQSxTQUFLRSxvQkFBTCxHQUE0QixJQUFJQyxHQUFKLEVBQTVCO0FBQ0Q7O0FBRVMsUUFBSkMsSUFBSSxHQUFJO0FBQ1osU0FBS0Ysb0JBQUwsQ0FBMEJHLEtBQTFCO0FBQ0EsV0FBTyxNQUFNLE1BQU1ELElBQU4sRUFBYjtBQUNEOztBQVFpQixTQUFYRSxXQUFXLENBQUVQLFVBQUYsRUFBY0MsS0FBZCxFQUFxQjtBQUFBOztBQUNyQyxVQUFNTyxRQUFRLDRCQUFHWCxZQUFZLENBQUNZLFVBQWIsQ0FBd0JULFVBQXhCLENBQUgseUVBQTBDLElBQUlILFlBQUosQ0FBaUJHLFVBQWpCLEVBQTZCQyxLQUE3QixDQUF4RDtBQUNBSixJQUFBQSxZQUFZLENBQUNZLFVBQWIsQ0FBd0JULFVBQXhCLElBQXNDUSxRQUF0QztBQUNBLFdBQU9BLFFBQVA7QUFDRDs7QUFTREUsRUFBQUEsaUJBQWlCLENBQUVDLE9BQUYsRUFBV0MsT0FBWCxFQUFvQjtBQUNuQyxVQUFNQyxRQUFRLEdBQUcsRUFBakI7QUFDQSxVQUFNO0FBQUNDLE1BQUFBLGFBQUQ7QUFBZ0JDLE1BQUFBO0FBQWhCLFFBQWtDSixPQUF4Qzs7QUFFQSxRQUFJLENBQUNLLGdCQUFFQyxPQUFGLENBQVVILGFBQVYsQ0FBTCxFQUErQjtBQUM3QkQsTUFBQUEsUUFBUSxDQUFDSyxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLG9EQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRU47QUFGTyxPQUFkO0FBSUQsS0FMRCxNQUtPO0FBQ0wsVUFBSUUsZ0JBQUVLLE9BQUYsQ0FBVVAsYUFBVixDQUFKLEVBQThCO0FBQzVCRCxRQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUNaQyxVQUFBQSxHQUFHLEVBQUUsMkJBRE87QUFFWkMsVUFBQUEsR0FBRyxFQUFFTjtBQUZPLFNBQWQ7QUFJRCxPQUxELE1BS087QUFDTCxhQUFLLE1BQU1RLEtBQVgsSUFBb0JSLGFBQXBCLEVBQW1DO0FBQ2pDLGNBQUksQ0FBQ0UsZ0JBQUVPLFFBQUYsQ0FBV0QsS0FBWCxDQUFMLEVBQXdCO0FBQ3RCVCxZQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUFDQyxjQUFBQSxHQUFHLEVBQUUscUNBQU47QUFBNkNDLGNBQUFBLEdBQUcsRUFBRUU7QUFBbEQsYUFBZDtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUVELFFBQUksQ0FBQ04sZ0JBQUVPLFFBQUYsQ0FBV1IsY0FBWCxDQUFMLEVBQWlDO0FBQy9CRixNQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUFDQyxRQUFBQSxHQUFHLEVBQUUscUNBQU47QUFBNkNDLFFBQUFBLEdBQUcsRUFBRUw7QUFBbEQsT0FBZDtBQUNEOztBQUVELFFBQUksS0FBS1osb0JBQUwsQ0FBMEJxQixHQUExQixDQUE4QlQsY0FBOUIsQ0FBSixFQUFtRDtBQUNqREYsTUFBQUEsUUFBUSxDQUFDSyxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLDREQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRUw7QUFGTyxPQUFkO0FBSUQ7O0FBR0QsU0FBS1osb0JBQUwsQ0FBMEJzQixHQUExQixDQUE4QlYsY0FBOUI7QUFFQSxXQUFPRixRQUFQO0FBQ0Q7O0FBTURhLEVBQUFBLGFBQWEsQ0FBRUMsVUFBRixFQUFjO0FBQUNDLElBQUFBLE9BQUQ7QUFBVWIsSUFBQUE7QUFBVixHQUFkLEVBQXlDO0FBQ3BELFdBQVEsR0FBRVksVUFBVyxJQUFHQyxPQUFRLHFCQUFvQmIsY0FBZSxJQUFuRTtBQUNEOztBQTVGdUQ7Ozs4QkFBckNsQixZLGdCQU9DLEUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db25maWcgZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IERSSVZFUl9UWVBFIH0gZnJvbSAnLi9leHQtY29uZmlnLWlvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVyQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiBgQVBQSVVNX0hPTUVgIHZhbHVlcyB0byB7QGxpbmsgRHJpdmVyQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqIEVhY2ggYEFQUElVTV9IT01FYCBzaG91bGQgb25seSBoYXZlIG9uZSBhc3NvY2lhdGVkIGBEcml2ZXJDb25maWdgIGluc3RhbmNlLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxEcml2ZXJDb25maWc+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW5jZXMgPSB7fTtcblxuICAvKipcbiAgICogQ2FsbCB7QGxpbmsgRHJpdmVyQ29uZmlnLmdldEluc3RhbmNlfSBpbnN0ZWFkLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZVxuICAgKiBAcGFyYW0geyguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZH0gW2xvZ0ZuXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGFwcGl1bUhvbWUsIGxvZ0ZuKSB7XG4gICAgc3VwZXIoYXBwaXVtSG9tZSwgRFJJVkVSX1RZUEUsIGxvZ0ZuKTtcbiAgICAvKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xuICAgIHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICBhc3luYyByZWFkICgpIHtcbiAgICB0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmNsZWFyKCk7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnJlYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG9yIGdldHMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERyaXZlckNvbmZpZ30gYmFzZWQgdmFsdWUgb2YgYGFwcGl1bUhvbWVgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gYEFQUElVTV9IT01FYCBwYXRoXG4gICAqIEBwYXJhbSB7KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkfSBbbG9nRm5dIC0gT3B0aW9uYWwgbG9nZ2luZyBmdW5jdGlvblxuICAgKiBAcmV0dXJucyB7RHJpdmVyQ29uZmlnfVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlIChhcHBpdW1Ib21lLCBsb2dGbikge1xuICAgIGNvbnN0IGluc3RhbmNlID0gRHJpdmVyQ29uZmlnLl9pbnN0YW5jZXNbYXBwaXVtSG9tZV0gPz8gbmV3IERyaXZlckNvbmZpZyhhcHBpdW1Ib21lLCBsb2dGbik7XG4gICAgRHJpdmVyQ29uZmlnLl9pbnN0YW5jZXNbYXBwaXVtSG9tZV0gPSBpbnN0YW5jZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dERhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHJldHVybnMge2ltcG9ydCgnLi9leHRlbnNpb24tY29uZmlnJykuUHJvYmxlbVtdfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldENvbmZpZ1Byb2JsZW1zIChleHREYXRhLCBleHROYW1lKSB7XG4gICAgY29uc3QgcHJvYmxlbXMgPSBbXTtcbiAgICBjb25zdCB7cGxhdGZvcm1OYW1lcywgYXV0b21hdGlvbk5hbWV9ID0gZXh0RGF0YTtcblxuICAgIGlmICghXy5pc0FycmF5KHBsYXRmb3JtTmFtZXMpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3Qgc3VwcG9ydGVkIHBsYXRmb3JtTmFtZXMgbGlzdC4nLFxuICAgICAgICB2YWw6IHBsYXRmb3JtTmFtZXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXy5pc0VtcHR5KHBsYXRmb3JtTmFtZXMpKSB7XG4gICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgIGVycjogJ0VtcHR5IHBsYXRmb3JtTmFtZXMgbGlzdC4nLFxuICAgICAgICAgIHZhbDogcGxhdGZvcm1OYW1lc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcE5hbWUgb2YgcGxhdGZvcm1OYW1lcykge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhwTmFtZSkpIHtcbiAgICAgICAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ0luY29ycmVjdGx5IGZvcm1hdHRlZCBwbGF0Zm9ybU5hbWUuJywgdmFsOiBwTmFtZX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IGF1dG9tYXRpb25OYW1lJywgdmFsOiBhdXRvbWF0aW9uTmFtZX0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmhhcyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBlcnI6ICdNdWx0aXBsZSBkcml2ZXJzIGNsYWltIHN1cHBvcnQgZm9yIHRoZSBzYW1lIGF1dG9tYXRpb25OYW1lJyxcbiAgICAgICAgdmFsOiBhdXRvbWF0aW9uTmFtZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2hvdWxkIHdlIHJldGFpbiB0aGUgbmFtZSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sIG9uY2Ugd2UndmUgY2hlY2tlZCB0aGVyZSBhcmUgbm8gcHJvYmxlbXM/XG4gICAgdGhpcy5rbm93bkF1dG9tYXRpb25OYW1lcy5hZGQoYXV0b21hdGlvbk5hbWUpO1xuXG4gICAgcmV0dXJuIHByb2JsZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXJOYW1lXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHREYXRhXG4gICAqL1xuICBleHRlbnNpb25EZXNjIChkcml2ZXJOYW1lLCB7dmVyc2lvbiwgYXV0b21hdGlvbk5hbWV9KSB7XG4gICAgcmV0dXJuIGAke2RyaXZlck5hbWV9QCR7dmVyc2lvbn0gKGF1dG9tYXRpb25OYW1lICcke2F1dG9tYXRpb25OYW1lfScpYDtcbiAgfVxufVxuXG4iXSwiZmlsZSI6ImxpYi9kcml2ZXItY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.getExtConfigIOInstance = exports.PLUGIN_TYPE = exports.DRIVER_TYPE = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
require("source-map-support/register");
|
|
13
|
+
|
|
14
|
+
var _support = require("@appium/support");
|
|
15
|
+
|
|
16
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
17
|
+
|
|
18
|
+
var _path = _interopRequireDefault(require("path"));
|
|
19
|
+
|
|
20
|
+
var _yaml = _interopRequireDefault(require("yaml"));
|
|
21
|
+
|
|
22
|
+
const CONFIG_FILE_NAME = 'extensions.yaml';
|
|
23
|
+
const CONFIG_SCHEMA_REV = 2;
|
|
24
|
+
const DRIVER_TYPE = 'driver';
|
|
25
|
+
exports.DRIVER_TYPE = DRIVER_TYPE;
|
|
26
|
+
const PLUGIN_TYPE = 'plugin';
|
|
27
|
+
exports.PLUGIN_TYPE = PLUGIN_TYPE;
|
|
28
|
+
const VALID_EXT_TYPES = new Set([DRIVER_TYPE, PLUGIN_TYPE]);
|
|
29
|
+
const CONFIG_DATA_DRIVER_KEY = `${DRIVER_TYPE}s`;
|
|
30
|
+
const CONFIG_DATA_PLUGIN_KEY = `${PLUGIN_TYPE}s`;
|
|
31
|
+
|
|
32
|
+
class ExtConfigIO {
|
|
33
|
+
constructor(appiumHome) {
|
|
34
|
+
(0, _defineProperty2.default)(this, "_dirty", void 0);
|
|
35
|
+
(0, _defineProperty2.default)(this, "_data", void 0);
|
|
36
|
+
(0, _defineProperty2.default)(this, "_extDataByType", new Map());
|
|
37
|
+
(0, _defineProperty2.default)(this, "_filepath", void 0);
|
|
38
|
+
(0, _defineProperty2.default)(this, "_appiumHome", void 0);
|
|
39
|
+
(0, _defineProperty2.default)(this, "_writing", null);
|
|
40
|
+
(0, _defineProperty2.default)(this, "_reading", null);
|
|
41
|
+
this._filepath = _path.default.resolve(appiumHome, CONFIG_FILE_NAME);
|
|
42
|
+
this._appiumHome = appiumHome;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
_createProxy(extensionType, data) {
|
|
46
|
+
return new Proxy(data[`${extensionType}s`], {
|
|
47
|
+
set: (target, prop, value) => {
|
|
48
|
+
if (value !== target[prop]) {
|
|
49
|
+
this._dirty = true;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
target[prop] = value;
|
|
53
|
+
return Reflect.set(target, prop, value);
|
|
54
|
+
},
|
|
55
|
+
deleteProperty: (target, prop) => {
|
|
56
|
+
if (prop in target) {
|
|
57
|
+
this._dirty = true;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return Reflect.deleteProperty(target, prop);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
get filepath() {
|
|
66
|
+
return this._filepath;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async read(extensionType) {
|
|
70
|
+
if (this._reading) {
|
|
71
|
+
await this._reading;
|
|
72
|
+
return this._extDataByType.get(extensionType);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
this._reading = (async () => {
|
|
76
|
+
if (!VALID_EXT_TYPES.has(extensionType)) {
|
|
77
|
+
throw new TypeError(`Invalid extension type: ${extensionType}. Valid values are: ${[...VALID_EXT_TYPES].join(', ')}`);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (this._extDataByType.has(extensionType)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
let data;
|
|
85
|
+
let isNewFile = false;
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
await (0, _support.mkdirp)(this._appiumHome);
|
|
89
|
+
const yaml = await _support.fs.readFile(this.filepath, 'utf8');
|
|
90
|
+
data = _yaml.default.parse(yaml);
|
|
91
|
+
} catch (err) {
|
|
92
|
+
if (err.code === 'ENOENT') {
|
|
93
|
+
data = {
|
|
94
|
+
[CONFIG_DATA_DRIVER_KEY]: {},
|
|
95
|
+
[CONFIG_DATA_PLUGIN_KEY]: {},
|
|
96
|
+
schemaRev: CONFIG_SCHEMA_REV
|
|
97
|
+
};
|
|
98
|
+
isNewFile = true;
|
|
99
|
+
} else {
|
|
100
|
+
throw new Error(`Appium had trouble loading the extension installation ` + `cache file (${this.filepath}). Ensure it exists and is ` + `readable. Specific error: ${err.message}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
this._data = data;
|
|
105
|
+
|
|
106
|
+
this._extDataByType.set(DRIVER_TYPE, this._createProxy(DRIVER_TYPE, data));
|
|
107
|
+
|
|
108
|
+
this._extDataByType.set(PLUGIN_TYPE, this._createProxy(PLUGIN_TYPE, data));
|
|
109
|
+
|
|
110
|
+
if (isNewFile) {
|
|
111
|
+
await this.write(true);
|
|
112
|
+
}
|
|
113
|
+
})();
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
await this._reading;
|
|
117
|
+
return this._extDataByType.get(extensionType);
|
|
118
|
+
} finally {
|
|
119
|
+
this._reading = null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async write(force = false) {
|
|
124
|
+
if (this._writing) {
|
|
125
|
+
return this._writing;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
this._writing = (async () => {
|
|
129
|
+
try {
|
|
130
|
+
if (!this._dirty && !force) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (!this._data) {
|
|
135
|
+
throw new ReferenceError('No data to write. Call `read()` first');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const dataToWrite = { ...this._data,
|
|
139
|
+
[CONFIG_DATA_DRIVER_KEY]: this._extDataByType.get(DRIVER_TYPE),
|
|
140
|
+
[CONFIG_DATA_PLUGIN_KEY]: this._extDataByType.get(PLUGIN_TYPE)
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
try {
|
|
144
|
+
await _support.fs.writeFile(this.filepath, _yaml.default.stringify(dataToWrite), 'utf8');
|
|
145
|
+
this._dirty = false;
|
|
146
|
+
return true;
|
|
147
|
+
} catch {
|
|
148
|
+
throw new Error(`Appium could not parse or write from the Appium Home directory ` + `(${this._appiumHome}). Please ensure it is writable.`);
|
|
149
|
+
}
|
|
150
|
+
} finally {
|
|
151
|
+
this._writing = null;
|
|
152
|
+
}
|
|
153
|
+
})();
|
|
154
|
+
|
|
155
|
+
return await this._writing;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const getExtConfigIOInstance = _lodash.default.memoize(appiumHome => new ExtConfigIO(appiumHome));
|
|
161
|
+
|
|
162
|
+
exports.getExtConfigIOInstance = getExtConfigIOInstance;require('source-map-support').install();
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leHQtY29uZmlnLWlvLmpzIl0sIm5hbWVzIjpbIkNPTkZJR19GSUxFX05BTUUiLCJDT05GSUdfU0NIRU1BX1JFViIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJWQUxJRF9FWFRfVFlQRVMiLCJTZXQiLCJDT05GSUdfREFUQV9EUklWRVJfS0VZIiwiQ09ORklHX0RBVEFfUExVR0lOX0tFWSIsIkV4dENvbmZpZ0lPIiwiY29uc3RydWN0b3IiLCJhcHBpdW1Ib21lIiwiTWFwIiwiX2ZpbGVwYXRoIiwicGF0aCIsInJlc29sdmUiLCJfYXBwaXVtSG9tZSIsIl9jcmVhdGVQcm94eSIsImV4dGVuc2lvblR5cGUiLCJkYXRhIiwiUHJveHkiLCJzZXQiLCJ0YXJnZXQiLCJwcm9wIiwidmFsdWUiLCJfZGlydHkiLCJSZWZsZWN0IiwiZGVsZXRlUHJvcGVydHkiLCJmaWxlcGF0aCIsInJlYWQiLCJfcmVhZGluZyIsIl9leHREYXRhQnlUeXBlIiwiZ2V0IiwiaGFzIiwiVHlwZUVycm9yIiwiam9pbiIsImlzTmV3RmlsZSIsInlhbWwiLCJmcyIsInJlYWRGaWxlIiwiWUFNTCIsInBhcnNlIiwiZXJyIiwiY29kZSIsInNjaGVtYVJldiIsIkVycm9yIiwibWVzc2FnZSIsIl9kYXRhIiwid3JpdGUiLCJmb3JjZSIsIl93cml0aW5nIiwiUmVmZXJlbmNlRXJyb3IiLCJkYXRhVG9Xcml0ZSIsIndyaXRlRmlsZSIsInN0cmluZ2lmeSIsImdldEV4dENvbmZpZ0lPSW5zdGFuY2UiLCJfIiwibWVtb2l6ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU1BOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGdCQUFnQixHQUFHLGlCQUF6QjtBQUtBLE1BQU1DLGlCQUFpQixHQUFHLENBQTFCO0FBRU8sTUFBTUMsV0FBVyxHQUFHLFFBQXBCOztBQUNBLE1BQU1DLFdBQVcsR0FBRyxRQUFwQjs7QUFNUCxNQUFNQyxlQUFlLEdBQUcsSUFBSUMsR0FBSixDQUFRLENBQUNILFdBQUQsRUFBY0MsV0FBZCxDQUFSLENBQXhCO0FBRUEsTUFBTUcsc0JBQXNCLEdBQUksR0FBRUosV0FBWSxHQUE5QztBQUNBLE1BQU1LLHNCQUFzQixHQUFJLEdBQUVKLFdBQVksR0FBOUM7O0FBT0EsTUFBTUssV0FBTixDQUFrQjtBQW9FaEJDLEVBQUFBLFdBQVcsQ0FBRUMsVUFBRixFQUFjO0FBQUE7QUFBQTtBQUFBLDBEQTNDUixJQUFJQyxHQUFKLEVBMkNRO0FBQUE7QUFBQTtBQUFBLG9EQWpCZCxJQWlCYztBQUFBLG9EQUxkLElBS2M7QUFDdkIsU0FBS0MsU0FBTCxHQUFpQkMsY0FBS0MsT0FBTCxDQUFhSixVQUFiLEVBQXlCVixnQkFBekIsQ0FBakI7QUFDQSxTQUFLZSxXQUFMLEdBQW1CTCxVQUFuQjtBQUNEOztBQWNETSxFQUFBQSxZQUFZLENBQUVDLGFBQUYsRUFBaUJDLElBQWpCLEVBQXVCO0FBQ2pDLFdBQU8sSUFBSUMsS0FBSixDQUFVRCxJQUFJLENBQUUsR0FBRUQsYUFBYyxHQUFsQixDQUFkLEVBQXFDO0FBQzFDRyxNQUFBQSxHQUFHLEVBQUUsQ0FBQ0MsTUFBRCxFQUFTQyxJQUFULEVBQWVDLEtBQWYsS0FBeUI7QUFDNUIsWUFBSUEsS0FBSyxLQUFLRixNQUFNLENBQUNDLElBQUQsQ0FBcEIsRUFBNEI7QUFDMUIsZUFBS0UsTUFBTCxHQUFjLElBQWQ7QUFDRDs7QUFDREgsUUFBQUEsTUFBTSxDQUFDQyxJQUFELENBQU4sR0FBZUMsS0FBZjtBQUNBLGVBQU9FLE9BQU8sQ0FBQ0wsR0FBUixDQUFZQyxNQUFaLEVBQW9CQyxJQUFwQixFQUEwQkMsS0FBMUIsQ0FBUDtBQUNELE9BUHlDO0FBUTFDRyxNQUFBQSxjQUFjLEVBQUUsQ0FBQ0wsTUFBRCxFQUFTQyxJQUFULEtBQWtCO0FBQ2hDLFlBQUlBLElBQUksSUFBSUQsTUFBWixFQUFvQjtBQUNsQixlQUFLRyxNQUFMLEdBQWMsSUFBZDtBQUNEOztBQUNELGVBQU9DLE9BQU8sQ0FBQ0MsY0FBUixDQUF1QkwsTUFBdkIsRUFBK0JDLElBQS9CLENBQVA7QUFDRDtBQWJ5QyxLQUFyQyxDQUFQO0FBZUQ7O0FBS1csTUFBUkssUUFBUSxHQUFJO0FBQ2QsV0FBTyxLQUFLZixTQUFaO0FBQ0Q7O0FBY1MsUUFBSmdCLElBQUksQ0FBRVgsYUFBRixFQUFpQjtBQUN6QixRQUFJLEtBQUtZLFFBQVQsRUFBbUI7QUFDakIsWUFBTSxLQUFLQSxRQUFYO0FBQ0EsYUFBTyxLQUFLQyxjQUFMLENBQW9CQyxHQUFwQixDQUF3QmQsYUFBeEIsQ0FBUDtBQUNEOztBQUVELFNBQUtZLFFBQUwsR0FBZ0IsQ0FBQyxZQUFZO0FBQzNCLFVBQUksQ0FBQ3pCLGVBQWUsQ0FBQzRCLEdBQWhCLENBQW9CZixhQUFwQixDQUFMLEVBQXlDO0FBQ3ZDLGNBQU0sSUFBSWdCLFNBQUosQ0FDSCwyQkFBMEJoQixhQUFjLHVCQUFzQixDQUM3RCxHQUFHYixlQUQwRCxFQUU3RDhCLElBRjZELENBRXhELElBRndELENBRWxELEVBSFQsQ0FBTjtBQUtEOztBQUNELFVBQUksS0FBS0osY0FBTCxDQUFvQkUsR0FBcEIsQ0FBd0JmLGFBQXhCLENBQUosRUFBNEM7QUFDMUM7QUFDRDs7QUFFRCxVQUFJQyxJQUFKO0FBQ0EsVUFBSWlCLFNBQVMsR0FBRyxLQUFoQjs7QUFDQSxVQUFJO0FBQ0YsY0FBTSxxQkFBTyxLQUFLcEIsV0FBWixDQUFOO0FBQ0EsY0FBTXFCLElBQUksR0FBRyxNQUFNQyxZQUFHQyxRQUFILENBQVksS0FBS1gsUUFBakIsRUFBMkIsTUFBM0IsQ0FBbkI7QUFDQVQsUUFBQUEsSUFBSSxHQUFHcUIsY0FBS0MsS0FBTCxDQUFXSixJQUFYLENBQVA7QUFDRCxPQUpELENBSUUsT0FBT0ssR0FBUCxFQUFZO0FBQ1osWUFBSUEsR0FBRyxDQUFDQyxJQUFKLEtBQWEsUUFBakIsRUFBMkI7QUFDekJ4QixVQUFBQSxJQUFJLEdBQUc7QUFDTCxhQUFDWixzQkFBRCxHQUEwQixFQURyQjtBQUVMLGFBQUNDLHNCQUFELEdBQTBCLEVBRnJCO0FBR0xvQyxZQUFBQSxTQUFTLEVBQUUxQztBQUhOLFdBQVA7QUFLQWtDLFVBQUFBLFNBQVMsR0FBRyxJQUFaO0FBQ0QsU0FQRCxNQU9PO0FBQ0wsZ0JBQU0sSUFBSVMsS0FBSixDQUNILHdEQUFELEdBQ0csZUFBYyxLQUFLakIsUUFBUyw2QkFEL0IsR0FFRyw2QkFBNEJjLEdBQUcsQ0FBQ0ksT0FBUSxFQUh2QyxDQUFOO0FBS0Q7QUFDRjs7QUFFRCxXQUFLQyxLQUFMLEdBQWE1QixJQUFiOztBQUNBLFdBQUtZLGNBQUwsQ0FBb0JWLEdBQXBCLENBQ0VsQixXQURGLEVBRUUsS0FBS2MsWUFBTCxDQUFrQmQsV0FBbEIsRUFBK0JnQixJQUEvQixDQUZGOztBQUlBLFdBQUtZLGNBQUwsQ0FBb0JWLEdBQXBCLENBQ0VqQixXQURGLEVBRUUsS0FBS2EsWUFBTCxDQUFrQmIsV0FBbEIsRUFBK0JlLElBQS9CLENBRkY7O0FBS0EsVUFBSWlCLFNBQUosRUFBZTtBQUNiLGNBQU0sS0FBS1ksS0FBTCxDQUFXLElBQVgsQ0FBTjtBQUNEO0FBQ0YsS0FoRGUsR0FBaEI7O0FBaURBLFFBQUk7QUFDRixZQUFNLEtBQUtsQixRQUFYO0FBQ0EsYUFBTyxLQUFLQyxjQUFMLENBQW9CQyxHQUFwQixDQUF3QmQsYUFBeEIsQ0FBUDtBQUNELEtBSEQsU0FHVTtBQUNSLFdBQUtZLFFBQUwsR0FBZ0IsSUFBaEI7QUFDRDtBQUNGOztBQVNVLFFBQUxrQixLQUFLLENBQUVDLEtBQUssR0FBRyxLQUFWLEVBQWlCO0FBQzFCLFFBQUksS0FBS0MsUUFBVCxFQUFtQjtBQUNqQixhQUFPLEtBQUtBLFFBQVo7QUFDRDs7QUFDRCxTQUFLQSxRQUFMLEdBQWdCLENBQUMsWUFBWTtBQUMzQixVQUFJO0FBQ0YsWUFBSSxDQUFDLEtBQUt6QixNQUFOLElBQWdCLENBQUN3QixLQUFyQixFQUE0QjtBQUMxQixpQkFBTyxLQUFQO0FBQ0Q7O0FBRUQsWUFBSSxDQUFDLEtBQUtGLEtBQVYsRUFBaUI7QUFDZixnQkFBTSxJQUFJSSxjQUFKLENBQW1CLHVDQUFuQixDQUFOO0FBQ0Q7O0FBRUQsY0FBTUMsV0FBVyxHQUFHLEVBQ2xCLEdBQUcsS0FBS0wsS0FEVTtBQUVsQixXQUFDeEMsc0JBQUQsR0FBMEIsS0FBS3dCLGNBQUwsQ0FBb0JDLEdBQXBCLENBQXdCN0IsV0FBeEIsQ0FGUjtBQUdsQixXQUFDSyxzQkFBRCxHQUEwQixLQUFLdUIsY0FBTCxDQUFvQkMsR0FBcEIsQ0FBd0I1QixXQUF4QjtBQUhSLFNBQXBCOztBQU1BLFlBQUk7QUFDRixnQkFBTWtDLFlBQUdlLFNBQUgsQ0FDSixLQUFLekIsUUFERCxFQUVKWSxjQUFLYyxTQUFMLENBQWVGLFdBQWYsQ0FGSSxFQUdKLE1BSEksQ0FBTjtBQUtBLGVBQUszQixNQUFMLEdBQWMsS0FBZDtBQUNBLGlCQUFPLElBQVA7QUFDRCxTQVJELENBUUUsTUFBTTtBQUNOLGdCQUFNLElBQUlvQixLQUFKLENBQ0gsaUVBQUQsR0FDRyxJQUFHLEtBQUs3QixXQUFZLGtDQUZuQixDQUFOO0FBSUQ7QUFDRixPQTdCRCxTQTZCVTtBQUNSLGFBQUtrQyxRQUFMLEdBQWdCLElBQWhCO0FBQ0Q7QUFDRixLQWpDZSxHQUFoQjs7QUFrQ0EsV0FBTyxNQUFNLEtBQUtBLFFBQWxCO0FBQ0Q7O0FBdk9lOztBQWlQWCxNQUFNSyxzQkFBc0IsR0FBR0MsZ0JBQUVDLE9BQUYsQ0FDbkM5QyxVQUFELElBQWdCLElBQUlGLFdBQUosQ0FBZ0JFLFVBQWhCLENBRG9CLENBQS9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogTW9kdWxlIGNvbnRhaW5pbmcge0BsaW5rIEV4dENvbmZpZ0lPfSB3aGljaCBoYW5kbGVzIHJlYWRpbmcgJiB3cml0aW5nIG9mIGV4dGVuc2lvbiBjb25maWcgZmlsZXMuXG4gKi9cblxuaW1wb3J0IHsgZnMsIG1rZGlycCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgWUFNTCBmcm9tICd5YW1sJztcblxuY29uc3QgQ09ORklHX0ZJTEVfTkFNRSA9ICdleHRlbnNpb25zLnlhbWwnO1xuXG4vKipcbiAqIEN1cnJlbnQgY29uZmlndXJhdGlvbiBzY2hlbWEgcmV2aXNpb24hXG4gKi9cbmNvbnN0IENPTkZJR19TQ0hFTUFfUkVWID0gMjtcblxuZXhwb3J0IGNvbnN0IERSSVZFUl9UWVBFID0gJ2RyaXZlcic7XG5leHBvcnQgY29uc3QgUExVR0lOX1RZUEUgPSAncGx1Z2luJztcblxuLyoqXG4gKiBTZXQgb2YgdmFsaWQgZXh0ZW5zaW9uIHR5cGVzLlxuICogQHR5cGUge1JlYWRvbmx5PFNldDxFeHRlbnNpb25UeXBlPj59XG4gKi9cbmNvbnN0IFZBTElEX0VYVF9UWVBFUyA9IG5ldyBTZXQoW0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRV0pO1xuXG5jb25zdCBDT05GSUdfREFUQV9EUklWRVJfS0VZID0gYCR7RFJJVkVSX1RZUEV9c2A7XG5jb25zdCBDT05GSUdfREFUQV9QTFVHSU5fS0VZID0gYCR7UExVR0lOX1RZUEV9c2A7XG5cbi8qKlxuICogSGFuZGxlcyByZWFkaW5nICYgd3JpdGluZyBvZiBleHRlbnNpb24gY29uZmlnIGZpbGVzLlxuICpcbiAqIE9ubHkgb25lIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZXhpc3RzIHBlciB2YWx1ZSBvZiBgQVBQSVVNX0hPTUVgLlxuICovXG5jbGFzcyBFeHRDb25maWdJTyB7XG4gIC8qKlxuICAgKiBcIkRpcnR5XCIgZmxhZy4gSWYgdHJ1ZSwgdGhlIGRhdGEgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3Qgd3JpdGUuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RpcnR5O1xuXG4gIC8qKlxuICAgKiBUaGUgZW50aXJlIGNvbnRlbnRzIG9mIGEgcGFyc2VkIFlBTUwgZXh0ZW5zaW9uIGNvbmZpZyBmaWxlLlxuICAgKiBAdHlwZSB7b2JqZWN0P31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kYXRhO1xuXG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgb2YgZXh0ZW5zaW9uIHR5cGUgdG8gY29uZmlndXJhdGlvbiBkYXRhLiBDb25maWd1cmF0aW9uIGRhdGEgaXNcbiAgICoga2V5ZWQgb24gZXh0ZW5zaW9uIG5hbWUuXG4gICAqXG4gICAqIENvbnN1bWVycyBnZXQgdGhlIHZhbHVlcyBvZiB0aGlzIGBNYXBgIChjb3JyZXNwb25kaW5nIHRvIHRoZVxuICAgKiBgZXh0ZW5zaW9uVHlwZWAgb2YgdGhlIGNvbnN1bWVyLCB3aGljaCB3aWxsIGJlIGEgc3ViY2xhc3Mgb2ZcbiAgICogYEV4dGVuc2lvbkNvbmZpZ2ApIGFuZCBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGVudGlyZSBkYXRhIG9iamVjdC5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge01hcDxFeHRlbnNpb25UeXBlLG9iamVjdD59XG4gICAqL1xuICBfZXh0RGF0YUJ5VHlwZSA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogUGF0aCB0byBjb25maWcgZmlsZS5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBfZmlsZXBhdGg7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYEFQUElVTV9IT01FYFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIF9hcHBpdW1Ib21lO1xuXG4gIC8qKlxuICAgKiBIZWxwcyBhdm9pZCB3cml0aW5nIG11bHRpcGxlIHRpbWVzLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGBudWxsYCwgY2FsbGluZyB7QGxpbmsgRXh0Q29uZmlnSU8ud3JpdGV9IHdpbGwgY2F1c2UgaXQgdG8gYmVcbiAgICogc2V0IHRvIGEgYFByb21pc2VgLiBXaGVuIHRoZSBjYWxsIHRvIGB3cml0ZSgpYCBpcyBjb21wbGV0ZSwgdGhlIGBQcm9taXNlYFxuICAgKiB3aWxsIHJlc29sdmUgYW5kIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byBgbnVsbGAuICBDb25jdXJyZW50IGNhbGxzXG4gICAqIG1hZGUgd2hpbGUgdGhpcyB2YWx1ZSBpcyBhIGBQcm9taXNlYCB3aWxsIHJldHVybiB0aGUgYFByb21pc2VgIGl0c2VsZi5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1Byb21pc2U8Ym9vbGVhbj4/fVxuICAgKi9cbiAgX3dyaXRpbmcgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBIZWxwcyBhdm9pZCByZWFkaW5nIG11bHRpcGxlIHRpbWVzLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGBudWxsYCwgY2FsbGluZyB7QGxpbmsgRXh0Q29uZmlnSU8ucmVhZH0gd2lsbCBjYXVzZSBpdCB0byBiZVxuICAgKiBzZXQgdG8gYSBgUHJvbWlzZWAuIFdoZW4gdGhlIGNhbGwgdG8gYHJlYWQoKWAgaXMgY29tcGxldGUsIHRoZSBgUHJvbWlzZWBcbiAgICogd2lsbCByZXNvbHZlIGFuZCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYG51bGxgLiAgQ29uY3VycmVudCBjYWxsc1xuICAgKiBtYWRlIHdoaWxlIHRoaXMgdmFsdWUgaXMgYSBgUHJvbWlzZWAgd2lsbCByZXR1cm4gdGhlIGBQcm9taXNlYCBpdHNlbGYuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtQcm9taXNlPHZvaWQ+P31cbiAgICovXG4gIF9yZWFkaW5nID0gbnVsbDtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWVcbiAgICovXG4gIGNvbnN0cnVjdG9yIChhcHBpdW1Ib21lKSB7XG4gICAgdGhpcy5fZmlsZXBhdGggPSBwYXRoLnJlc29sdmUoYXBwaXVtSG9tZSwgQ09ORklHX0ZJTEVfTkFNRSk7XG4gICAgdGhpcy5fYXBwaXVtSG9tZSA9IGFwcGl1bUhvbWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYWVzIGEgYFByb3h5YCB3aGljaCB3YXRjaGVzIGZvciBjaGFuZ2VzIHRvIHRoZSBleHRlbnNpb24tdHlwZS1zcGVjaWZpY1xuICAgKiBjb25maWcgZGF0YS5cbiAgICpcbiAgICogV2hlbiBjaGFuZ2VzIGFyZSBkZXRlY3RlZCwgaXQgc2V0cyBhIGBfZGlydHlgIGZsYWcuICBUaGUgbmV4dCBjYWxsIHRvXG4gICAqIHtAbGluayBFeHRDb25maWdJTy53cml0ZX0gd2lsbCBjaGVjayBpZiB0aGlzIGZsYWcgaXMgYHRydWVgIGJlZm9yZVxuICAgKiBwcm9jZWVkaW5nLlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dGVuc2lvblR5cGVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLG9iamVjdD59IGRhdGEgLSBFeHRlbnNpb24gY29uZmlnIGRhdGEsIGtleWVkIGJ5IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsb2JqZWN0Pn1cbiAgICovXG4gIF9jcmVhdGVQcm94eSAoZXh0ZW5zaW9uVHlwZSwgZGF0YSkge1xuICAgIHJldHVybiBuZXcgUHJveHkoZGF0YVtgJHtleHRlbnNpb25UeXBlfXNgXSwge1xuICAgICAgc2V0OiAodGFyZ2V0LCBwcm9wLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IHRhcmdldFtwcm9wXSkge1xuICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpO1xuICAgICAgfSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5OiAodGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgICAgIGlmIChwcm9wIGluIHRhcmdldCkge1xuICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBjb25maWcgZmlsZS5cbiAgICovXG4gIGdldCBmaWxlcGF0aCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVwYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgZGF0YSBmb3IgYW4gZXh0ZW5zaW9uIHR5cGUuICBSZWFkcyB0aGUgY29uZmlnIGZpbGUgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBGb3JjZS1yZWFkaW5nIGlzIF9ub3RfIHN1cHBvcnRlZCwgYXMgaXQncyBsaWtlbHkgdG8gYmUgYSBzb3VyY2Ugb2ZcbiAgICogYnVncy0taXQncyBlYXN5IHRvIG11dGF0ZSB0aGUgZGF0YSBhbmQgdGhlbiBvdmVyd3JpdGUgbWVtb3J5IHdpdGggdGhlIGZpbGVcbiAgICogY29udGVudHNcbiAgICpcbiAgICogSWRlYWxseSB0aGlzIHdpbGwgb25seSBldmVyIHJlYWQgdGhlIGZpbGUgX29uY2VfLlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dGVuc2lvblR5cGUgLSBXaGljaCBiaXQgb2YgdGhlIGNvbmZpZyBkYXRhIHdlXG4gICAqIHdhbnRcbiAgICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gVGhlIGRhdGFcbiAgICovXG4gIGFzeW5jIHJlYWQgKGV4dGVuc2lvblR5cGUpIHtcbiAgICBpZiAodGhpcy5fcmVhZGluZykge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZGluZztcbiAgICAgIHJldHVybiB0aGlzLl9leHREYXRhQnlUeXBlLmdldChleHRlbnNpb25UeXBlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkaW5nID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghVkFMSURfRVhUX1RZUEVTLmhhcyhleHRlbnNpb25UeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGV4dGVuc2lvbiB0eXBlOiAke2V4dGVuc2lvblR5cGV9LiBWYWxpZCB2YWx1ZXMgYXJlOiAke1tcbiAgICAgICAgICAgIC4uLlZBTElEX0VYVF9UWVBFUyxcbiAgICAgICAgICBdLmpvaW4oJywgJyl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9leHREYXRhQnlUeXBlLmhhcyhleHRlbnNpb25UeXBlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhO1xuICAgICAgbGV0IGlzTmV3RmlsZSA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbWtkaXJwKHRoaXMuX2FwcGl1bUhvbWUpO1xuICAgICAgICBjb25zdCB5YW1sID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy5maWxlcGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgZGF0YSA9IFlBTUwucGFyc2UoeWFtbCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICBbQ09ORklHX0RBVEFfRFJJVkVSX0tFWV06IHt9LFxuICAgICAgICAgICAgW0NPTkZJR19EQVRBX1BMVUdJTl9LRVldOiB7fSxcbiAgICAgICAgICAgIHNjaGVtYVJldjogQ09ORklHX1NDSEVNQV9SRVYsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpc05ld0ZpbGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBcHBpdW0gaGFkIHRyb3VibGUgbG9hZGluZyB0aGUgZXh0ZW5zaW9uIGluc3RhbGxhdGlvbiBgICtcbiAgICAgICAgICAgICAgYGNhY2hlIGZpbGUgKCR7dGhpcy5maWxlcGF0aH0pLiBFbnN1cmUgaXQgZXhpc3RzIGFuZCBpcyBgICtcbiAgICAgICAgICAgICAgYHJlYWRhYmxlLiBTcGVjaWZpYyBlcnJvcjogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICB0aGlzLl9leHREYXRhQnlUeXBlLnNldChcbiAgICAgICAgRFJJVkVSX1RZUEUsXG4gICAgICAgIHRoaXMuX2NyZWF0ZVByb3h5KERSSVZFUl9UWVBFLCBkYXRhKSxcbiAgICAgICk7XG4gICAgICB0aGlzLl9leHREYXRhQnlUeXBlLnNldChcbiAgICAgICAgUExVR0lOX1RZUEUsXG4gICAgICAgIHRoaXMuX2NyZWF0ZVByb3h5KFBMVUdJTl9UWVBFLCBkYXRhKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChpc05ld0ZpbGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53cml0ZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZWFkaW5nO1xuICAgICAgcmV0dXJuIHRoaXMuX2V4dERhdGFCeVR5cGUuZ2V0KGV4dGVuc2lvblR5cGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9yZWFkaW5nID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBkYXRhIGlmIGl0IG5lZWRzIHdyaXRpbmcuXG4gICAqXG4gICAqIElmIHRoZSBgc2NoZW1hUmV2YCBwcm9wIG5lZWRzIHVwZGF0aW5nLCB0aGUgZmlsZSB3aWxsIGJlIHdyaXR0ZW4uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIFdoZXRoZXIgdG8gZm9yY2UgYSB3cml0ZSBldmVuIGlmIHRoZSBkYXRhIGlzIGNsZWFuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBXaGV0aGVyIHRoZSBkYXRhIHdhcyB3cml0dGVuXG4gICAqL1xuICBhc3luYyB3cml0ZSAoZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGluZztcbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXRoaXMuX2RpcnR5ICYmICFmb3JjZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fZGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignTm8gZGF0YSB0byB3cml0ZS4gQ2FsbCBgcmVhZCgpYCBmaXJzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVRvV3JpdGUgPSB7XG4gICAgICAgICAgLi4udGhpcy5fZGF0YSxcbiAgICAgICAgICBbQ09ORklHX0RBVEFfRFJJVkVSX0tFWV06IHRoaXMuX2V4dERhdGFCeVR5cGUuZ2V0KERSSVZFUl9UWVBFKSxcbiAgICAgICAgICBbQ09ORklHX0RBVEFfUExVR0lOX0tFWV06IHRoaXMuX2V4dERhdGFCeVR5cGUuZ2V0KFBMVUdJTl9UWVBFKSxcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgICAgICAgIHRoaXMuZmlsZXBhdGgsXG4gICAgICAgICAgICBZQU1MLnN0cmluZ2lmeShkYXRhVG9Xcml0ZSksXG4gICAgICAgICAgICAndXRmOCcsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQXBwaXVtIGNvdWxkIG5vdCBwYXJzZSBvciB3cml0ZSBmcm9tIHRoZSBBcHBpdW0gSG9tZSBkaXJlY3RvcnkgYCArXG4gICAgICAgICAgICAgIGAoJHt0aGlzLl9hcHBpdW1Ib21lfSkuIFBsZWFzZSBlbnN1cmUgaXQgaXMgd3JpdGFibGUuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl93cml0aW5nID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl93cml0aW5nO1xuICB9XG59XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiBmb3Ige0BsaW5rIEV4dENvbmZpZ0lPfS5cbiAqXG4gKiBNYWludGFpbnMgb25lIGluc3RhbmNlIHBlciB2YWx1ZSBvZiBgQVBQSVVNX0hPTUVgLlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBgQVBQSVVNX0hPTUVgXG4gKiBAcmV0dXJucyB7RXh0Q29uZmlnSU99XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHRDb25maWdJT0luc3RhbmNlID0gXy5tZW1vaXplKFxuICAoYXBwaXVtSG9tZSkgPT4gbmV3IEV4dENvbmZpZ0lPKGFwcGl1bUhvbWUpLFxuKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7RXh0Q29uZmlnSU99IEV4dGVuc2lvbkNvbmZpZ0lPXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7dHlwZW9mIERSSVZFUl9UWVBFIHwgdHlwZW9mIFBMVUdJTl9UWVBFfSBFeHRlbnNpb25UeXBlXG4gKi9cbiJdLCJmaWxlIjoibGliL2V4dC1jb25maWctaW8uanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|