appium 2.0.0-beta.3 → 2.0.0-beta.30
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 +10 -11
- package/build/lib/appium.d.ts +215 -0
- package/build/lib/appium.d.ts.map +1 -0
- package/build/lib/appium.js +238 -132
- package/build/lib/cli/args.d.ts +20 -0
- package/build/lib/cli/args.d.ts.map +1 -0
- package/build/lib/cli/args.js +96 -282
- package/build/lib/cli/driver-command.d.ts +36 -0
- package/build/lib/cli/driver-command.d.ts.map +1 -0
- package/build/lib/cli/driver-command.js +19 -12
- package/build/lib/cli/extension-command.d.ts +345 -0
- package/build/lib/cli/extension-command.d.ts.map +1 -0
- package/build/lib/cli/extension-command.js +171 -96
- package/build/lib/cli/extension.d.ts +14 -0
- package/build/lib/cli/extension.d.ts.map +1 -0
- package/build/lib/cli/extension.js +31 -16
- package/build/lib/cli/parser.d.ts +79 -0
- package/build/lib/cli/parser.d.ts.map +1 -0
- package/build/lib/cli/parser.js +152 -95
- package/build/lib/cli/plugin-command.d.ts +39 -0
- package/build/lib/cli/plugin-command.d.ts.map +1 -0
- package/build/lib/cli/plugin-command.js +18 -13
- package/build/lib/cli/utils.d.ts +29 -0
- package/build/lib/cli/utils.d.ts.map +1 -0
- package/build/lib/cli/utils.js +27 -3
- package/build/lib/config-file.d.ts +100 -0
- package/build/lib/config-file.d.ts.map +1 -0
- package/build/lib/config-file.js +136 -0
- package/build/lib/config.d.ts +40 -0
- package/build/lib/config.d.ts.map +1 -0
- package/build/lib/config.js +92 -67
- package/build/lib/constants.d.ts +48 -0
- package/build/lib/constants.d.ts.map +1 -0
- package/build/lib/constants.js +60 -0
- package/build/lib/extension/driver-config.d.ts +84 -0
- package/build/lib/extension/driver-config.d.ts.map +1 -0
- package/build/lib/extension/driver-config.js +190 -0
- package/build/lib/extension/extension-config.d.ts +170 -0
- package/build/lib/extension/extension-config.d.ts.map +1 -0
- package/build/lib/extension/extension-config.js +297 -0
- package/build/lib/extension/index.d.ts +39 -0
- package/build/lib/extension/index.d.ts.map +1 -0
- package/build/lib/extension/index.js +77 -0
- package/build/lib/extension/manifest.d.ts +174 -0
- package/build/lib/extension/manifest.d.ts.map +1 -0
- package/build/lib/extension/manifest.js +246 -0
- package/build/lib/extension/package-changed.d.ts +11 -0
- package/build/lib/extension/package-changed.d.ts.map +1 -0
- package/build/lib/extension/package-changed.js +68 -0
- package/build/lib/extension/plugin-config.d.ts +62 -0
- package/build/lib/extension/plugin-config.d.ts.map +1 -0
- package/build/lib/extension/plugin-config.js +87 -0
- package/build/lib/grid-register.d.ts +10 -0
- package/build/lib/grid-register.d.ts.map +1 -0
- package/build/lib/grid-register.js +21 -25
- package/build/lib/logger.d.ts +3 -0
- package/build/lib/logger.d.ts.map +1 -0
- package/build/lib/logger.js +4 -6
- package/build/lib/logsink.d.ts +4 -0
- package/build/lib/logsink.d.ts.map +1 -0
- package/build/lib/logsink.js +12 -16
- package/build/lib/main.d.ts +51 -0
- package/build/lib/main.d.ts.map +1 -0
- package/build/lib/main.js +174 -82
- package/build/lib/schema/arg-spec.d.ts +143 -0
- package/build/lib/schema/arg-spec.d.ts.map +1 -0
- package/build/lib/schema/arg-spec.js +119 -0
- package/build/lib/schema/cli-args.d.ts +19 -0
- package/build/lib/schema/cli-args.d.ts.map +1 -0
- package/build/lib/schema/cli-args.js +180 -0
- package/build/lib/schema/cli-transformers.d.ts +5 -0
- package/build/lib/schema/cli-transformers.d.ts.map +1 -0
- package/build/lib/schema/cli-transformers.js +74 -0
- package/build/lib/schema/index.d.ts +3 -0
- package/build/lib/schema/index.d.ts.map +1 -0
- package/build/lib/schema/index.js +34 -0
- package/build/lib/schema/keywords.d.ts +24 -0
- package/build/lib/schema/keywords.d.ts.map +1 -0
- package/build/lib/schema/keywords.js +70 -0
- package/build/lib/schema/schema.d.ts +259 -0
- package/build/lib/schema/schema.d.ts.map +1 -0
- package/build/lib/schema/schema.js +452 -0
- package/build/lib/utils.d.ts +66 -0
- package/build/lib/utils.d.ts.map +1 -0
- package/build/lib/utils.js +35 -139
- package/build/tsconfig.tsbuildinfo +1 -0
- package/index.js +11 -0
- package/lib/appium-config.schema.json +278 -0
- package/lib/appium.js +398 -155
- package/lib/cli/args.js +174 -377
- package/lib/cli/driver-command.js +22 -7
- package/lib/cli/extension-command.js +372 -177
- package/lib/cli/extension.js +32 -10
- package/lib/cli/parser.js +252 -83
- package/lib/cli/plugin-command.js +19 -6
- package/lib/cli/utils.js +22 -2
- package/lib/config-file.js +223 -0
- package/lib/config.js +169 -69
- package/lib/constants.js +78 -0
- package/lib/extension/driver-config.js +249 -0
- package/lib/extension/extension-config.js +458 -0
- package/lib/extension/index.js +102 -0
- package/lib/extension/manifest.js +486 -0
- package/lib/extension/package-changed.js +63 -0
- package/lib/extension/plugin-config.js +113 -0
- package/lib/grid-register.js +25 -22
- package/lib/logger.js +1 -1
- package/lib/logsink.js +14 -7
- package/lib/main.js +233 -83
- package/lib/schema/arg-spec.js +232 -0
- package/lib/schema/cli-args.js +261 -0
- package/lib/schema/cli-transformers.js +122 -0
- package/lib/schema/index.js +2 -0
- package/lib/schema/keywords.js +134 -0
- package/lib/schema/schema.js +734 -0
- package/lib/utils.js +85 -129
- package/package.json +62 -85
- package/scripts/postinstall.js +71 -0
- package/types/appium-manifest.d.ts +61 -0
- package/types/cli.d.ts +134 -0
- package/types/extension.d.ts +56 -0
- package/types/external-manifest.d.ts +58 -0
- package/types/index.d.ts +7 -0
- package/CHANGELOG.md +0 -3515
- package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
- package/build/lib/cli/npm.js +0 -206
- package/build/lib/cli/parser-helpers.js +0 -82
- package/build/lib/driver-config.js +0 -77
- package/build/lib/drivers.js +0 -96
- package/build/lib/extension-config.js +0 -251
- package/build/lib/plugin-config.js +0 -59
- package/build/lib/plugins.js +0 -14
- package/lib/cli/npm.js +0 -183
- package/lib/cli/parser-helpers.js +0 -79
- package/lib/driver-config.js +0 -46
- package/lib/drivers.js +0 -81
- package/lib/extension-config.js +0 -208
- package/lib/plugin-config.js +0 -34
- package/lib/plugins.js +0 -10
package/build/lib/config.js
CHANGED
|
@@ -5,43 +5,43 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
9
|
-
exports.validateServerArgs = validateServerArgs;
|
|
8
|
+
exports.APPIUM_VER = void 0;
|
|
10
9
|
exports.checkNodeOk = checkNodeOk;
|
|
11
|
-
exports.
|
|
12
|
-
exports.warnNodeDeprecations = warnNodeDeprecations;
|
|
13
|
-
exports.validateTmpDir = validateTmpDir;
|
|
14
|
-
exports.getNonDefaultArgs = getNonDefaultArgs;
|
|
10
|
+
exports.getBuildInfo = getBuildInfo;
|
|
15
11
|
exports.getGitRev = getGitRev;
|
|
16
|
-
exports.
|
|
12
|
+
exports.getNonDefaultServerArgs = getNonDefaultServerArgs;
|
|
13
|
+
exports.rootDir = void 0;
|
|
14
|
+
exports.showBuildInfo = showBuildInfo;
|
|
15
|
+
exports.showConfig = showConfig;
|
|
17
16
|
exports.updateBuildInfo = updateBuildInfo;
|
|
18
|
-
exports.
|
|
17
|
+
exports.validateTmpDir = validateTmpDir;
|
|
18
|
+
exports.warnNodeDeprecations = warnNodeDeprecations;
|
|
19
19
|
|
|
20
20
|
require("source-map-support/register");
|
|
21
21
|
|
|
22
22
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
23
23
|
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
var _appiumSupport = require("appium-support");
|
|
24
|
+
var _support = require("@appium/support");
|
|
27
25
|
|
|
28
26
|
var _axios = _interopRequireDefault(require("axios"));
|
|
29
27
|
|
|
30
28
|
var _teen_process = require("teen_process");
|
|
31
29
|
|
|
32
|
-
var _utils = require("./utils");
|
|
33
|
-
|
|
34
30
|
var _logger = _interopRequireDefault(require("./logger"));
|
|
35
31
|
|
|
36
32
|
var _semver = _interopRequireDefault(require("semver"));
|
|
37
33
|
|
|
38
|
-
|
|
34
|
+
var _findUp = _interopRequireDefault(require("find-up"));
|
|
35
|
+
|
|
36
|
+
var _schema = require("./schema/schema");
|
|
37
|
+
|
|
38
|
+
const npmPackage = _support.fs.readPackageJsonFrom(__dirname);
|
|
39
39
|
|
|
40
40
|
const APPIUM_VER = npmPackage.version;
|
|
41
41
|
exports.APPIUM_VER = APPIUM_VER;
|
|
42
42
|
const MIN_NODE_VERSION = npmPackage.engines.node;
|
|
43
43
|
const GIT_META_ROOT = '.git';
|
|
44
|
-
const GIT_BINARY = `git${
|
|
44
|
+
const GIT_BINARY = `git${_support.system.isWindows() ? '.exe' : ''}`;
|
|
45
45
|
const GITHUB_API = 'https://api.github.com/repos/appium/appium';
|
|
46
46
|
const BUILD_INFO = {
|
|
47
47
|
version: APPIUM_VER
|
|
@@ -61,18 +61,27 @@ async function updateBuildInfo(useGithubApiFallback = false) {
|
|
|
61
61
|
BUILD_INFO['git-sha'] = sha;
|
|
62
62
|
const built = await getGitTimestamp(sha, useGithubApiFallback);
|
|
63
63
|
|
|
64
|
-
if (
|
|
64
|
+
if (built) {
|
|
65
65
|
BUILD_INFO.built = built;
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
async function findGitRoot() {
|
|
70
|
+
return await (0, _findUp.default)(GIT_META_ROOT, {
|
|
71
|
+
cwd: rootDir,
|
|
72
|
+
type: 'directory'
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
69
76
|
async function getGitRev(useGithubApiFallback = false) {
|
|
70
|
-
|
|
77
|
+
const gitRoot = await findGitRoot();
|
|
78
|
+
|
|
79
|
+
if (gitRoot) {
|
|
71
80
|
try {
|
|
72
81
|
const {
|
|
73
82
|
stdout
|
|
74
83
|
} = await (0, _teen_process.exec)(GIT_BINARY, ['rev-parse', 'HEAD'], {
|
|
75
|
-
cwd:
|
|
84
|
+
cwd: gitRoot
|
|
76
85
|
});
|
|
77
86
|
return stdout.trim();
|
|
78
87
|
} catch (ign) {}
|
|
@@ -105,12 +114,14 @@ async function getGitRev(useGithubApiFallback = false) {
|
|
|
105
114
|
}
|
|
106
115
|
|
|
107
116
|
async function getGitTimestamp(commitSha, useGithubApiFallback = false) {
|
|
108
|
-
|
|
117
|
+
const gitRoot = await findGitRoot();
|
|
118
|
+
|
|
119
|
+
if (gitRoot) {
|
|
109
120
|
try {
|
|
110
121
|
const {
|
|
111
122
|
stdout
|
|
112
123
|
} = await (0, _teen_process.exec)(GIT_BINARY, ['show', '-s', '--format=%ci', commitSha], {
|
|
113
|
-
cwd:
|
|
124
|
+
cwd: gitRoot
|
|
114
125
|
});
|
|
115
126
|
return stdout.trim();
|
|
116
127
|
} catch (ign) {}
|
|
@@ -155,76 +166,90 @@ function checkNodeOk() {
|
|
|
155
166
|
|
|
156
167
|
function warnNodeDeprecations() {}
|
|
157
168
|
|
|
158
|
-
async function
|
|
169
|
+
async function showBuildInfo() {
|
|
159
170
|
await updateBuildInfo(true);
|
|
160
171
|
console.log(JSON.stringify(getBuildInfo()));
|
|
161
172
|
}
|
|
162
173
|
|
|
163
|
-
function
|
|
164
|
-
|
|
174
|
+
function getNonDefaultServerArgs(parsedArgs) {
|
|
175
|
+
const flatten = args => {
|
|
176
|
+
const argSpecs = (0, _schema.getAllArgSpecs)();
|
|
165
177
|
|
|
166
|
-
|
|
167
|
-
|
|
178
|
+
const flattened = _lodash.default.reduce([...argSpecs.values()], (acc, argSpec) => {
|
|
179
|
+
if (_lodash.default.has(args, argSpec.dest)) {
|
|
180
|
+
acc[argSpec.dest] = {
|
|
181
|
+
value: _lodash.default.get(args, argSpec.dest),
|
|
182
|
+
argSpec
|
|
183
|
+
};
|
|
184
|
+
}
|
|
168
185
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
}
|
|
186
|
+
return acc;
|
|
187
|
+
}, {});
|
|
173
188
|
|
|
174
|
-
|
|
175
|
-
}
|
|
189
|
+
return flattened;
|
|
190
|
+
};
|
|
176
191
|
|
|
177
|
-
|
|
178
|
-
if (port > 0 && port < 65536) return true;
|
|
192
|
+
const args = flatten(parsedArgs);
|
|
179
193
|
|
|
180
|
-
|
|
194
|
+
const typesDiffer = dest => typeof args[dest].value !== typeof defaultsFromSchema[dest];
|
|
181
195
|
|
|
182
|
-
|
|
183
|
-
}
|
|
196
|
+
const defaultValueIsArray = dest => _lodash.default.isArray(defaultsFromSchema[dest]);
|
|
184
197
|
|
|
185
|
-
|
|
186
|
-
let exclusives = [['noReset', 'fullReset'], ['ipa', 'safari'], ['app', 'safari'], ['forceIphone', 'forceIpad'], ['deviceName', 'defaultDevice']];
|
|
198
|
+
const argsValueIsArray = dest => _lodash.default.isArray(args[dest].value);
|
|
187
199
|
|
|
188
|
-
|
|
189
|
-
let numFoundInArgs = 0;
|
|
200
|
+
const arraysDiffer = dest => _lodash.default.gt(_lodash.default.size(_lodash.default.difference(args[dest].value, defaultsFromSchema[dest])), 0);
|
|
190
201
|
|
|
191
|
-
|
|
192
|
-
if (_lodash.default.has(args, opt) && args[opt]) {
|
|
193
|
-
numFoundInArgs++;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
202
|
+
const valuesDiffer = dest => args[dest].value !== defaultsFromSchema[dest];
|
|
196
203
|
|
|
197
|
-
|
|
198
|
-
throw new Error(`You can't pass in more than one argument from the ` + `set ${JSON.stringify(exSet)}, since they are ` + `mutually exclusive`);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
204
|
+
const defaultIsDefined = dest => !_lodash.default.isUndefined(defaultsFromSchema[dest]);
|
|
201
205
|
|
|
202
|
-
const
|
|
203
|
-
port: checkValidPort,
|
|
204
|
-
callbackPort: checkValidPort,
|
|
205
|
-
bootstrapPort: checkValidPort,
|
|
206
|
-
chromedriverPort: checkValidPort,
|
|
207
|
-
robotPort: checkValidPort,
|
|
208
|
-
backendRetries: r => r >= 0
|
|
209
|
-
};
|
|
210
|
-
const nonDefaultArgs = getNonDefaultArgs(parser, args);
|
|
206
|
+
const argValueNotArrayOrArraysDiffer = _lodash.default.overSome([_lodash.default.negate(argsValueIsArray), arraysDiffer]);
|
|
211
207
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
208
|
+
const defaultValueNotArrayAndValuesDiffer = _lodash.default.overEvery([_lodash.default.negate(defaultValueIsArray), valuesDiffer]);
|
|
209
|
+
|
|
210
|
+
const isNotDefault = _lodash.default.overEvery([defaultIsDefined, _lodash.default.overSome([typesDiffer, _lodash.default.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]), defaultValueNotArrayAndValuesDiffer])]);
|
|
211
|
+
|
|
212
|
+
const defaultsFromSchema = (0, _schema.getDefaultsForSchema)(true);
|
|
213
|
+
return _lodash.default.reduce(_lodash.default.pickBy(args, (__, key) => isNotDefault(key)), (acc, {
|
|
214
|
+
value,
|
|
215
|
+
argSpec
|
|
216
|
+
}) => _lodash.default.set(acc, argSpec.dest, value), {});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const compactConfig = _lodash.default.partial(_lodash.default.omitBy, _lodash.default, (value, key) => key === 'subcommand' || _lodash.default.isUndefined(value) || _lodash.default.isObject(value) && _lodash.default.isEmpty(value));
|
|
220
|
+
|
|
221
|
+
function showConfig(nonDefaultPreConfigParsedArgs, configResult, defaults, parsedArgs) {
|
|
222
|
+
console.log('Appium Configuration\n');
|
|
223
|
+
console.log('from defaults:\n');
|
|
224
|
+
console.dir(compactConfig(defaults));
|
|
225
|
+
|
|
226
|
+
if (configResult.config) {
|
|
227
|
+
console.log(`\nfrom config file at ${configResult.filepath}:\n`);
|
|
228
|
+
console.dir(compactConfig(configResult.config));
|
|
229
|
+
} else {
|
|
230
|
+
console.log(`\n(no configuration file loaded)`);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
if (_lodash.default.isEmpty(nonDefaultPreConfigParsedArgs)) {
|
|
234
|
+
console.log(`\n(no CLI parameters provided)`);
|
|
235
|
+
} else {
|
|
236
|
+
console.log('\nvia CLI or function call:\n');
|
|
237
|
+
console.dir(compactConfig(nonDefaultPreConfigParsedArgs));
|
|
218
238
|
}
|
|
239
|
+
|
|
240
|
+
console.log('\nfinal configuration:\n');
|
|
241
|
+
console.dir(compactConfig(parsedArgs));
|
|
219
242
|
}
|
|
220
243
|
|
|
221
244
|
async function validateTmpDir(tmpDir) {
|
|
222
245
|
try {
|
|
223
|
-
await
|
|
246
|
+
await _support.fs.mkdirp(tmpDir);
|
|
224
247
|
} catch (e) {
|
|
225
248
|
throw new Error(`We could not ensure that the temp dir you specified ` + `(${tmpDir}) exists. Please make sure it's writeable.`);
|
|
226
249
|
}
|
|
227
|
-
}
|
|
250
|
+
}
|
|
228
251
|
|
|
252
|
+
const rootDir = _support.fs.findRoot(__dirname);
|
|
229
253
|
|
|
230
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsInJlcXVpcmUiLCJwYXRoIiwicmVzb2x2ZSIsInJvb3REaXIiLCJBUFBJVU1fVkVSIiwidmVyc2lvbiIsIk1JTl9OT0RFX1ZFUlNJT04iLCJlbmdpbmVzIiwibm9kZSIsIkdJVF9NRVRBX1JPT1QiLCJHSVRfQklOQVJZIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiR0lUSFVCX0FQSSIsIkJVSUxEX0lORk8iLCJnZXROb2RlVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInByb2Nlc3MiLCJ1cGRhdGVCdWlsZEluZm8iLCJ1c2VHaXRodWJBcGlGYWxsYmFjayIsInNoYSIsImdldEdpdFJldiIsImJ1aWx0IiwiZ2V0R2l0VGltZXN0YW1wIiwiXyIsImlzRW1wdHkiLCJmcyIsImV4aXN0cyIsInN0ZG91dCIsImN3ZCIsInRyaW0iLCJpZ24iLCJyZXNCb2R5T2JqIiwiYXhpb3MiLCJnZXQiLCJoZWFkZXJzIiwiZGF0YSIsImlzQXJyYXkiLCJuYW1lIiwiY29tbWl0IiwiY29tbWl0U2hhIiwiY29tbWl0dGVyIiwiZGF0ZSIsImF1dGhvciIsImdldEJ1aWxkSW5mbyIsImNoZWNrTm9kZU9rIiwic2F0aXNmaWVzIiwibG9nZ2VyIiwiZXJyb3JBbmRUaHJvdyIsIndhcm5Ob2RlRGVwcmVjYXRpb25zIiwic2hvd0NvbmZpZyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0Tm9uRGVmYXVsdEFyZ3MiLCJwYXJzZXIiLCJhcmdzIiwibm9uRGVmYXVsdHMiLCJyYXdBcmciLCJyYXdBcmdzIiwiYXJnIiwiZGVzdCIsImRlZmF1bHRWYWx1ZSIsImNoZWNrVmFsaWRQb3J0IiwicG9ydCIsInBvcnROYW1lIiwiZXJyb3IiLCJ2YWxpZGF0ZVNlcnZlckFyZ3MiLCJleGNsdXNpdmVzIiwiZXhTZXQiLCJudW1Gb3VuZEluQXJncyIsIm9wdCIsImhhcyIsIkVycm9yIiwidmFsaWRhdGlvbnMiLCJjYWxsYmFja1BvcnQiLCJib290c3RyYXBQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsInJvYm90UG9ydCIsImJhY2tlbmRSZXRyaWVzIiwiciIsIm5vbkRlZmF1bHRBcmdzIiwidmFsaWRhdG9yIiwidG9QYWlycyIsInZhbGlkYXRlVG1wRGlyIiwidG1wRGlyIiwiZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsVUFBVSxHQUFHQyxPQUFPLENBQUNDLGNBQUtDLE9BQUwsQ0FBYUMsY0FBYixFQUFzQixjQUF0QixDQUFELENBQTFCOztBQUNBLE1BQU1DLFVBQVUsR0FBR0wsVUFBVSxDQUFDTSxPQUE5Qjs7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBR1AsVUFBVSxDQUFDUSxPQUFYLENBQW1CQyxJQUE1QztBQUVBLE1BQU1DLGFBQWEsR0FBRyxNQUF0QjtBQUNBLE1BQU1DLFVBQVUsR0FBSSxNQUFLQyxzQkFBT0MsU0FBUCxLQUFxQixNQUFyQixHQUE4QixFQUFHLEVBQTFEO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLDRDQUFuQjtBQUVBLE1BQU1DLFVBQVUsR0FBRztBQUNqQlQsRUFBQUEsT0FBTyxFQUFFRDtBQURRLENBQW5COztBQUlBLFNBQVNXLGNBQVQsR0FBMkI7QUFDekIsU0FBT0MsZ0JBQU9DLE1BQVAsQ0FBY0MsT0FBTyxDQUFDYixPQUF0QixDQUFQO0FBQ0Q7O0FBRUQsZUFBZWMsZUFBZixDQUFnQ0Msb0JBQW9CLEdBQUcsS0FBdkQsRUFBOEQ7QUFDNUQsUUFBTUMsR0FBRyxHQUFHLE1BQU1DLFNBQVMsQ0FBQ0Ysb0JBQUQsQ0FBM0I7O0FBQ0EsTUFBSSxDQUFDQyxHQUFMLEVBQVU7QUFDUjtBQUNEOztBQUNEUCxFQUFBQSxVQUFVLENBQUMsU0FBRCxDQUFWLEdBQXdCTyxHQUF4QjtBQUNBLFFBQU1FLEtBQUssR0FBRyxNQUFNQyxlQUFlLENBQUNILEdBQUQsRUFBTUQsb0JB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b0JBRlgsQ0FBTjtBQUdEO0FBQ0Y7O0FBRUQsUUFBTUssV0FBVyxHQUFHO0FBQ2xCVixJQUFBQSxJQUFJLEVBQUVELGNBRFk7QUFFbEJZLElBQUFBLFlBQVksRUFBRVosY0FGSTtBQUdsQmEsSUFBQUEsYUFBYSxFQUFFYixjQUhHO0FBSWxCYyxJQUFBQSxnQkFBZ0IsRUFBRWQsY0FKQTtBQUtsQmUsSUFBQUEsU0FBUyxFQUFFZixjQUxPO0FBTWxCZ0IsSUFBQUEsY0FBYyxFQUFHQyxDQUFELElBQU9BLENBQUMsSUFBSTtBQU5WLEdBQXBCO0FBU0EsUUFBTUMsY0FBYyxHQUFHM0IsaUJBQWlCLENBQUNDLE1BQUQsRUFBU0MsSUFBVCxDQUF4Qzs7QUFFQSxPQUFLLElBQUksQ0FBQ0ksR0FBRCxFQUFNc0IsU0FBTixDQUFULElBQTZCM0QsZ0JBQUU0RCxPQUFGLENBQVVULFdBQVYsQ0FBN0IsRUFBcUQ7QUFDbkQsUUFBSW5ELGdCQUFFaUQsR0FBRixDQUFNUyxjQUFOLEVBQXNCckIsR0FBdEIsQ0FBSixFQUFnQztBQUM5QixVQUFJLENBQUNzQixTQUFTLENBQUMxQixJQUFJLENBQUNJLEdBQUQsQ0FBTCxFQUFZQSxHQUFaLENBQWQsRUFBZ0M7QUFDOUIsY0FBTSxJQUFJYSxLQUFKLENBQVcsOEJBQTZCYixHQUFJLEtBQUlKLElBQUksQ0FBQ0ksR0FBRCxDQUFNLEVBQTFELENBQU47QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7QUFFRCxlQUFld0IsY0FBZixDQUErQkMsTUFBL0IsRUFBdUM7QUFDckMsTUFBSTtBQUNGLFVBQU0sMkJBQU9BLE1BQVAsQ0FBTjtBQUNELEdBRkQsQ0FFRSxPQUFPQyxDQUFQLEVBQVU7QUFDVixVQUFNLElBQUliLEtBQUosQ0FBVyxzREFBRCxHQUNDLElBQUdZLE1BQU8sNENBRHJCLENBQU47QUFFRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbWtkaXJwLCBmcywgc3lzdGVtIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcm9vdERpciB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cblxuY29uc3QgbnBtUGFja2FnZSA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKHJvb3REaXIsICdwYWNrYWdlLmpzb24nKSk7XG5jb25zdCBBUFBJVU1fVkVSID0gbnBtUGFja2FnZS52ZXJzaW9uO1xuY29uc3QgTUlOX05PREVfVkVSU0lPTiA9IG5wbVBhY2thZ2UuZW5naW5lcy5ub2RlO1xuXG5jb25zdCBHSVRfTUVUQV9ST09UID0gJy5naXQnO1xuY29uc3QgR0lUX0JJTkFSWSA9IGBnaXQke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG5jb25zdCBHSVRIVUJfQVBJID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bSc7XG5cbmNvbnN0IEJVSUxEX0lORk8gPSB7XG4gIHZlcnNpb246IEFQUElVTV9WRVIsXG59O1xuXG5mdW5jdGlvbiBnZXROb2RlVmVyc2lvbiAoKSB7XG4gIHJldHVybiBzZW12ZXIuY29lcmNlKHByb2Nlc3MudmVyc2lvbik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUJ1aWxkSW5mbyAodXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBzaGEgPSBhd2FpdCBnZXRHaXRSZXYodXNlR2l0aHViQXBpRmFsbGJhY2spO1xuICBpZiAoIXNoYSkge1xuICAgIHJldHVybjtcbiAgfVxuICBCVUlMRF9JTkZPWydnaXQtc2hhJ10gPSBzaGE7XG4gIGNvbnN0IGJ1aWx0ID0gYXdhaXQgZ2V0R2l0VGltZXN0YW1wKHNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2spO1xuICBpZiAoIV8uaXNFbXB0eShidWlsdCkpIHtcbiAgICBCVUlMRF9JTkZPLmJ1aWx0ID0gYnVpbHQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0UmV2ICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMocGF0aC5yZXNvbHZlKHJvb3REaXIsIEdJVF9NRVRBX1JPT1QpKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogcm9vdERpclxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L3RhZ3NgLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChfLmlzQXJyYXkocmVzQm9keU9iaikpIHtcbiAgICAgIGZvciAoY29uc3Qge25hbWUsIGNvbW1pdH0gb2YgcmVzQm9keU9iaikge1xuICAgICAgICBpZiAobmFtZSA9PT0gYHYke0FQUElVTV9WRVJ9YCAmJiBjb21taXQgJiYgY29tbWl0LnNoYSkge1xuICAgICAgICAgIHJldHVybiBjb21taXQuc2hhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRHaXRUaW1lc3RhbXAgKGNvbW1pdFNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHBhdGgucmVzb2x2ZShyb290RGlyLCBHSVRfTUVUQV9ST09UKSkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsnc2hvdycsICctcycsICctLWZvcm1hdD0lY2knLCBjb21taXRTaGFdLCB7XG4gICAgICAgIGN3ZDogcm9vdERpclxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2NvbW1pdHMvJHtjb21taXRTaGF9YCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWBcbiAgICAgIH1cbiAgICB9KSkuZGF0YTtcbiAgICBpZiAocmVzQm9keU9iaiAmJiByZXNCb2R5T2JqLmNvbW1pdCkge1xuICAgICAgaWYgKHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlciAmJiByZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIuZGF0ZSkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyLmRhdGU7XG4gICAgICB9XG4gICAgICBpZiAocmVzQm9keU9iai5jb21taXQuYXV0aG9yICYmIHJlc0JvZHlPYmouY29tbWl0LmF1dGhvci5kYXRlKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IuZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybiBNdXRhYmxlIG9iamVjdCBjb250YWluaW5nIEFwcGl1bSBidWlsZCBpbmZvcm1hdGlvbi4gQnkgZGVmYXVsdCBpdFxuICogb25seSBjb250YWlucyB0aGUgQXBwaXVtIHZlcnNpb24sIGJ1dCBpcyB1cGRhdGVkIHdpdGggdGhlIGJ1aWxkIHRpbWVzdGFtcFxuICogYW5kIGdpdCBjb21taXQgaGFzaCBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIGB1cGRhdGVCdWlsZEluZm9gIGlzIGNhbGxlZFxuICogYW5kIHN1Y2NlZWRzLlxuICovXG5mdW5jdGlvbiBnZXRCdWlsZEluZm8gKCkge1xuICByZXR1cm4gQlVJTERfSU5GTztcbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlT2sgKCkge1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgaWYgKCFzZW12ZXIuc2F0aXNmaWVzKHZlcnNpb24sIE1JTl9OT0RFX1ZFUlNJT04pKSB7XG4gICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYE5vZGUgdmVyc2lvbiBtdXN0IGJlICR7TUlOX05PREVfVkVSU0lPTn0uIEN1cnJlbnRseSAke3ZlcnNpb24udmVyc2lvbn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9kZURlcHJlY2F0aW9ucyAoKSB7XG4gIC8qKlxuICAgKiBVbmNvbW1lbnQgdGhpcyBzZWN0aW9uIHRvIGdldCBub2RlIHZlcnNpb24gZGVwcmVjYXRpb24gd2FybmluZ3NcbiAgICogQWxzbyBhZGQgdGVzdCBjYXNlcyB0byBjb25maWctc3BlY3MuanMgdG8gY292ZXIgdGhlIGNhc2VzIGFkZGVkXG4gICAqKi9cblxuICAvLyBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgLy8gaWYgKHZlcnNpb24ubWFqb3IgPCA4KSB7XG4gIC8vICAgbG9nZ2VyLndhcm4oYEFwcGl1bSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZiBub2RlIDwgJHt2ZXJzaW9uLm1ham9yfSBoYXMgYmVlbiBgICtcbiAgLy8gICAgICAgICAgICAgICAnZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFBsZWFzZSAnICtcbiAgLy8gICAgICAgICAgICAgICAndXBncmFkZSEnKTtcbiAgLy8gfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93Q29uZmlnICgpIHtcbiAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKHRydWUpO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShnZXRCdWlsZEluZm8oKSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uRGVmYXVsdEFyZ3MgKHBhcnNlciwgYXJncykge1xuICBsZXQgbm9uRGVmYXVsdHMgPSB7fTtcbiAgZm9yIChsZXQgcmF3QXJnIG9mIHBhcnNlci5yYXdBcmdzKSB7XG4gICAgbGV0IGFyZyA9IHJhd0FyZ1sxXS5kZXN0O1xuICAgIGlmIChhcmdzW2FyZ10gJiYgYXJnc1thcmddICE9PSByYXdBcmdbMV0uZGVmYXVsdFZhbHVlKSB7XG4gICAgICBub25EZWZhdWx0c1thcmddID0gYXJnc1thcmddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm9uRGVmYXVsdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVmFsaWRQb3J0IChwb3J0LCBwb3J0TmFtZSkge1xuICBpZiAocG9ydCA+IDAgJiYgcG9ydCA8IDY1NTM2KSByZXR1cm4gdHJ1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICBsb2dnZXIuZXJyb3IoYFBvcnQgJyR7cG9ydE5hbWV9JyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gNjU1MzYuIEN1cnJlbnRseSAke3BvcnR9YCk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTZXJ2ZXJBcmdzIChwYXJzZXIsIGFyZ3MpIHtcbiAgLy8gYXJndW1lbnRzIHRoYXQgY2Fubm90IGJvdGggYmUgc2V0XG4gIGxldCBleGNsdXNpdmVzID0gW1xuICAgIFsnbm9SZXNldCcsICdmdWxsUmVzZXQnXSxcbiAgICBbJ2lwYScsICdzYWZhcmknXSxcbiAgICBbJ2FwcCcsICdzYWZhcmknXSxcbiAgICBbJ2ZvcmNlSXBob25lJywgJ2ZvcmNlSXBhZCddLFxuICAgIFsnZGV2aWNlTmFtZScsICdkZWZhdWx0RGV2aWNlJ11cbiAgXTtcblxuICBmb3IgKGxldCBleFNldCBvZiBleGNsdXNpdmVzKSB7XG4gICAgbGV0IG51bUZvdW5kSW5BcmdzID0gMDtcbiAgICBmb3IgKGxldCBvcHQgb2YgZXhTZXQpIHtcbiAgICAgIGlmIChfLmhhcyhhcmdzLCBvcHQpICYmIGFyZ3Nbb3B0XSkge1xuICAgICAgICBudW1Gb3VuZEluQXJncysrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVtRm91bmRJbkFyZ3MgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBjYW4ndCBwYXNzIGluIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgZnJvbSB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHNldCAke0pTT04uc3RyaW5naWZ5KGV4U2V0KX0sIHNpbmNlIHRoZXkgYXJlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBtdXR1YWxseSBleGNsdXNpdmVgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB2YWxpZGF0aW9ucyA9IHtcbiAgICBwb3J0OiBjaGVja1ZhbGlkUG9ydCxcbiAgICBjYWxsYmFja1BvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGJvb3RzdHJhcFBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGNocm9tZWRyaXZlclBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIHJvYm90UG9ydDogY2hlY2tWYWxpZFBvcnQsXG4gICAgYmFja2VuZFJldHJpZXM6IChyKSA9PiByID49IDBcbiAgfTtcblxuICBjb25zdCBub25EZWZhdWx0QXJncyA9IGdldE5vbkRlZmF1bHRBcmdzKHBhcnNlciwgYXJncyk7XG5cbiAgZm9yIChsZXQgW2FyZywgdmFsaWRhdG9yXSBvZiBfLnRvUGFpcnModmFsaWRhdGlvbnMpKSB7XG4gICAgaWYgKF8uaGFzKG5vbkRlZmF1bHRBcmdzLCBhcmcpKSB7XG4gICAgICBpZiAoIXZhbGlkYXRvcihhcmdzW2FyZ10sIGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IGZvciBwYXJhbSAke2FyZ306ICR7YXJnc1thcmddfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVRtcERpciAodG1wRGlyKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXJwKHRtcERpcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdlIGNvdWxkIG5vdCBlbnN1cmUgdGhhdCB0aGUgdGVtcCBkaXIgeW91IHNwZWNpZmllZCBgICtcbiAgICAgICAgICAgICAgICAgICAgYCgke3RtcERpcn0pIGV4aXN0cy4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHdyaXRlYWJsZS5gKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBnZXRCdWlsZEluZm8sIHZhbGlkYXRlU2VydmVyQXJncywgY2hlY2tOb2RlT2ssIHNob3dDb25maWcsXG4gIHdhcm5Ob2RlRGVwcmVjYXRpb25zLCB2YWxpZGF0ZVRtcERpciwgZ2V0Tm9uRGVmYXVsdEFyZ3MsXG4gIGdldEdpdFJldiwgY2hlY2tWYWxpZFBvcnQsIEFQUElVTV9WRVIsIHVwZGF0ZUJ1aWxkSW5mbyxcbn07XG4iXSwiZmlsZSI6ImxpYi9jb25maWcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
254
|
+
exports.rootDir = rootDir;
|
|
255
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsImZzIiwicmVhZFBhY2thZ2VKc29uRnJvbSIsIl9fZGlybmFtZSIsIkFQUElVTV9WRVIiLCJ2ZXJzaW9uIiwiTUlOX05PREVfVkVSU0lPTiIsImVuZ2luZXMiLCJub2RlIiwiR0lUX01FVEFfUk9PVCIsIkdJVF9CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJHSVRIVUJfQVBJIiwiQlVJTERfSU5GTyIsImdldE5vZGVWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwicHJvY2VzcyIsInVwZGF0ZUJ1aWxkSW5mbyIsInVzZUdpdGh1YkFwaUZhbGxiYWNrIiwic2hhIiwiZ2V0R2l0UmV2IiwiYnVpbHQiLCJnZXRHaXRUaW1lc3RhbXAiLCJmaW5kR2l0Um9vdCIsImN3ZCIsInJvb3REaXIiLCJ0eXBlIiwiZ2l0Um9vdCIsInN0ZG91dCIsInRyaW0iLCJpZ24iLCJyZXNCb2R5T2JqIiwiYXhpb3MiLCJnZXQiLCJoZWFkZXJzIiwiZGF0YSIsIl8iLCJpc0FycmF5IiwibmFtZSIsImNvbW1pdCIsImNvbW1pdFNoYSIsImNvbW1pdHRlciIsImRhdGUiLCJhdXRob3IiLCJnZXRCdWlsZEluZm8iLCJjaGVja05vZGVPayIsInNhdGlzZmllcyIsImxvZ2dlciIsImVycm9yQW5kVGhyb3ciLCJ3YXJuTm9kZURlcHJlY2F0aW9ucyIsInNob3dCdWlsZEluZm8iLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzIiwicGFyc2VkQXJncyIsImZsYXR0ZW4iLCJhcmdzIiwiYXJnU3BlY3MiLCJmbGF0dGVuZWQiLCJyZWR1Y2UiLCJ2YWx1ZXMiLCJhY2MiLCJhcmdTcGVjIiwiaGFzIiwiZGVzdCIsInZhbHVlIiwidHlwZXNEaWZmZXIiLCJkZWZhdWx0c0Zyb21TY2hlbWEiLCJkZWZhdWx0VmFsdWVJc0FycmF5IiwiYXJnc1ZhbHVlSXNBcnJheSIsImFycmF5c0RpZmZlciIsImd0Iiwic2l6ZSIsImRpZmZlcmVuY2UiLCJ2YWx1ZXNEaWZmZXIiLCJkZWZhdWx0SXNEZWZpbmVkIiwiaXNVbmRlZmluZWQiLCJhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXIiLCJvdmVyU29tZSIsIm5lZ2F0ZSIsImRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzRGlmZmVyIiwib3ZlckV2ZXJ5IiwiaXNOb3REZWZhdWx0IiwicGlja0J5IiwiX18iLCJrZXkiLCJzZXQiLCJjb21wYWN0Q29uZmlnIiwicGFydGlhbCIsIm9taXRCeSIsImlzT2JqZWN0IiwiaXNFbXB0eSIsInNob3dDb25maWciLCJub25EZWZhdWx0UHJlQ29uZmlnUGFyc2VkQXJncyIsImNvbmZpZ1Jlc3VsdCIsImRlZmF1bHRzIiwiZGlyIiwiY29uZmlnIiwiZmlsZXBhdGgiLCJ2YWxpZGF0ZVRtcERpciIsInRtcERpciIsIm1rZGlycCIsImUiLCJFcnJvciIsImZpbmRSb290Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLFlBQUdDLG1CQUFILENBQXVCQyxTQUF2QixDQUFuQjs7QUFFQSxNQUFNQyxVQUFVLEdBQUdKLFVBQVUsQ0FBQ0ssT0FBOUI7O0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUdOLFVBQVUsQ0FBQ08sT0FBWCxDQUFtQkMsSUFBNUM7QUFFQSxNQUFNQyxhQUFhLEdBQUcsTUFBdEI7QUFDQSxNQUFNQyxVQUFVLEdBQUksTUFBS0MsZ0JBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFBRyxFQUExRDtBQUNBLE1BQU1DLFVBQVUsR0FBRyw0Q0FBbkI7QUFLQSxNQUFNQyxVQUFVLEdBQUc7QUFDakJULEVBQUFBLE9BQU8sRUFBRUQ7QUFEUSxDQUFuQjs7QUFJQSxTQUFTVyxjQUFULEdBQTJCO0FBQ3pCLFNBQThDQyxnQkFBT0Ms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Q0QsTUFBSWhCLGdCQUFFeUQsT0FBRixDQUFVRSw2QkFBVixDQUFKLEVBQThDO0FBQzVDNUMsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQWEsZ0NBQWI7QUFDRCxHQUZELE1BRU87QUFDTEQsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksK0JBQVo7QUFDQUQsSUFBQUEsT0FBTyxDQUFDK0MsR0FBUixDQUFZVCxhQUFhLENBQUNNLDZCQUFELENBQXpCO0FBQ0Q7O0FBQ0Q1QyxFQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSwwQkFBWjtBQUNBRCxFQUFBQSxPQUFPLENBQUMrQyxHQUFSLENBQVlULGFBQWEsQ0FBQ2pDLFVBQUQsQ0FBekI7QUFDRDs7QUFLRCxlQUFlNkMsY0FBZixDQUErQkMsTUFBL0IsRUFBdUM7QUFDckMsTUFBSTtBQUNGLFVBQU12RyxZQUFHd0csTUFBSCxDQUFVRCxNQUFWLENBQU47QUFDRCxHQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1YsVUFBTSxJQUFJQyxLQUFKLENBQVcsc0RBQUQsR0FDQyxJQUFHSCxNQUFPLDRDQURyQixDQUFOO0FBRUQ7QUFDRjs7QUFFRCxNQUFNN0UsT0FBTyxHQUFHMUIsWUFBRzJHLFFBQUgsQ0FBWXpHLFNBQVosQ0FBaEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgc3lzdGVtLCBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5pbXBvcnQgeyBnZXREZWZhdWx0c0ZvclNjaGVtYSwgZ2V0QWxsQXJnU3BlY3MgfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuXG5jb25zdCBucG1QYWNrYWdlID0gZnMucmVhZFBhY2thZ2VKc29uRnJvbShfX2Rpcm5hbWUpO1xuXG5jb25zdCBBUFBJVU1fVkVSID0gbnBtUGFja2FnZS52ZXJzaW9uO1xuY29uc3QgTUlOX05PREVfVkVSU0lPTiA9IG5wbVBhY2thZ2UuZW5naW5lcy5ub2RlO1xuXG5jb25zdCBHSVRfTUVUQV9ST09UID0gJy5naXQnO1xuY29uc3QgR0lUX0JJTkFSWSA9IGBnaXQke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG5jb25zdCBHSVRIVUJfQVBJID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bSc7XG5cbi8qKlxuICogQHR5cGUge2ltcG9ydCgnLi4vdHlwZXMvY2xpJykuQnVpbGRJbmZvfVxuICovXG5jb25zdCBCVUlMRF9JTkZPID0ge1xuICB2ZXJzaW9uOiBBUFBJVU1fVkVSLFxufTtcblxuZnVuY3Rpb24gZ2V0Tm9kZVZlcnNpb24gKCkge1xuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoJ3NlbXZlcicpLlNlbVZlcn0gKi8oc2VtdmVyLmNvZXJjZShwcm9jZXNzLnZlcnNpb24pKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQnVpbGRJbmZvICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IHNoYSA9IGF3YWl0IGdldEdpdFJldih1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmICghc2hhKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEJVSUxEX0lORk9bJ2dpdC1zaGEnXSA9IHNoYTtcbiAgY29uc3QgYnVpbHQgPSBhd2FpdCBnZXRHaXRUaW1lc3RhbXAoc2hhLCB1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmIChidWlsdCkge1xuICAgIEJVSUxEX0lORk8uYnVpbHQgPSBidWlsdDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBHaXQgbWV0YWRhdGEgZGlyIChzZWUgYEdJVF9NRVRBX1JPT1RgKVxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgQXBwaXVtIGNhbm5vdCBhc3N1bWUgYHBhY2thZ2UuanNvbmAgYW5kIGAuZ2l0YCBhcmUgaW4gdGhlIHNhbWVcbiAqIGRpcmVjdG9yeS4gIE1vbm9yZXBvcywgc2VlP1xuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nfHVuZGVmaW5lZD59IFBhdGggdG8gZGlyIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kR2l0Um9vdCAoKSB7XG4gIHJldHVybiBhd2FpdCBmaW5kVXAoR0lUX01FVEFfUk9PVCwge2N3ZDogcm9vdERpciwgdHlwZTogJ2RpcmVjdG9yeSd9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0UmV2ICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBmaW5kR2l0Um9vdCgpO1xuICBpZiAoZ2l0Um9vdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L3RhZ3NgLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChfLmlzQXJyYXkocmVzQm9keU9iaikpIHtcbiAgICAgIGZvciAoY29uc3Qge25hbWUsIGNvbW1pdH0gb2YgcmVzQm9keU9iaikge1xuICAgICAgICBpZiAobmFtZSA9PT0gYHYke0FQUElVTV9WRVJ9YCAmJiBjb21taXQgJiYgY29tbWl0LnNoYSkge1xuICAgICAgICAgIHJldHVybiBjb21taXQuc2hhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21taXRTaGFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VzZUdpdGh1YkFwaUZhbGxiYWNrXVxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEdpdFRpbWVzdGFtcCAoY29tbWl0U2hhLCB1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBmaW5kR2l0Um9vdCgpO1xuICBpZiAoZ2l0Um9vdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydzaG93JywgJy1zJywgJy0tZm9ybWF0PSVjaScsIGNvbW1pdFNoYV0sIHtcbiAgICAgICAgY3dkOiBnaXRSb290XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdGRvdXQudHJpbSgpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuXG4gIGlmICghdXNlR2l0aHViQXBpRmFsbGJhY2spIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzQm9keU9iaiA9IChhd2FpdCBheGlvcy5nZXQoYCR7R0lUSFVCX0FQSX0vY29tbWl0cy8ke2NvbW1pdFNoYX1gLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChyZXNCb2R5T2JqICYmIHJlc0JvZHlPYmouY29tbWl0KSB7XG4gICAgICBpZiAocmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyICYmIHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlci5kYXRlKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIuZGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IgJiYgcmVzQm9keU9iai5jb21taXQuYXV0aG9yLmRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHJlc0JvZHlPYmouY29tbWl0LmF1dGhvci5kYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoaWduKSB7fVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBNdXRhYmxlIG9iamVjdCBjb250YWluaW5nIEFwcGl1bSBidWlsZCBpbmZvcm1hdGlvbi4gQnkgZGVmYXVsdCBpdFxuICogb25seSBjb250YWlucyB0aGUgQXBwaXVtIHZlcnNpb24sIGJ1dCBpcyB1cGRhdGVkIHdpdGggdGhlIGJ1aWxkIHRpbWVzdGFtcFxuICogYW5kIGdpdCBjb21taXQgaGFzaCBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIGB1cGRhdGVCdWlsZEluZm9gIGlzIGNhbGxlZFxuICogYW5kIHN1Y2NlZWRzLlxuICogQHJldHVybnMge2ltcG9ydCgnLi4vdHlwZXMvY2xpJykuQnVpbGRJbmZvfVxuICovXG5mdW5jdGlvbiBnZXRCdWlsZEluZm8gKCkge1xuICByZXR1cm4gQlVJTERfSU5GTztcbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlT2sgKCkge1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgaWYgKCFzZW12ZXIuc2F0aXNmaWVzKHZlcnNpb24sIE1JTl9OT0RFX1ZFUlNJT04pKSB7XG4gICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYE5vZGUgdmVyc2lvbiBtdXN0IGJlICR7TUlOX05PREVfVkVSU0lPTn0uIEN1cnJlbnRseSAke3ZlcnNpb24udmVyc2lvbn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9kZURlcHJlY2F0aW9ucyAoKSB7XG4gIC8qKlxuICAgKiBVbmNvbW1lbnQgdGhpcyBzZWN0aW9uIHRvIGdldCBub2RlIHZlcnNpb24gZGVwcmVjYXRpb24gd2FybmluZ3NcbiAgICogQWxzbyBhZGQgdGVzdCBjYXNlcyB0byBjb25maWctc3BlY3MuanMgdG8gY292ZXIgdGhlIGNhc2VzIGFkZGVkXG4gICAqKi9cblxuICAvLyBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgLy8gaWYgKHZlcnNpb24ubWFqb3IgPCA4KSB7XG4gIC8vICAgbG9nZ2VyLndhcm4oYEFwcGl1bSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZiBub2RlIDwgJHt2ZXJzaW9uLm1ham9yfSBoYXMgYmVlbiBgICtcbiAgLy8gICAgICAgICAgICAgICAnZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFBsZWFzZSAnICtcbiAgLy8gICAgICAgICAgICAgICAndXBncmFkZSEnKTtcbiAgLy8gfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93QnVpbGRJbmZvICgpIHtcbiAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKHRydWUpO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShnZXRCdWlsZEluZm8oKSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGsvdiBwYWlycyBvZiBzZXJ2ZXIgYXJndW1lbnRzIHdoaWNoIGFyZSBfbm90XyB0aGUgZGVmYXVsdHMuXG4gKiBAcGFyYW0ge1BhcnNlZEFyZ3N9IHBhcnNlZEFyZ3NcbiAqIEByZXR1cm5zIHtQYXJ0aWFsPFBhcnNlZEFyZ3M+fVxuICovXG5mdW5jdGlvbiBnZXROb25EZWZhdWx0U2VydmVyQXJncyAocGFyc2VkQXJncykge1xuICAvKipcbiAgICogRmxhdHRlbnMgcGFyc2VkIGFyZ3MgaW50byBhIHNpbmdsZSBsZXZlbCBvYmplY3QgZm9yIGNvbXBhcmlzb24gd2l0aFxuICAgKiBmbGF0dGVuZWQgZGVmYXVsdHMgYWNyb3NzIHNlcnZlciBhcmdzIGFuZCBleHRlbnNpb24gYXJncy5cbiAgICogQHBhcmFtIHtQYXJzZWRBcmdzfSBhcmdzXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBhbnksIGFyZ1NwZWM6IEFyZ1NwZWMgfT59XG4gICAqL1xuICBjb25zdCBmbGF0dGVuID0gKGFyZ3MpID0+IHtcbiAgICBjb25zdCBhcmdTcGVjcyA9IGdldEFsbEFyZ1NwZWNzKCk7XG4gICAgY29uc3QgZmxhdHRlbmVkID0gXy5yZWR1Y2UoWy4uLmFyZ1NwZWNzLnZhbHVlcygpXSwgKGFjYywgYXJnU3BlYykgPT4ge1xuICAgICAgaWYgKF8uaGFzKGFyZ3MsIGFyZ1NwZWMuZGVzdCkpIHtcbiAgICAgICAgYWNjW2FyZ1NwZWMuZGVzdF0gPSB7dmFsdWU6IF8uZ2V0KGFyZ3MsIGFyZ1NwZWMuZGVzdCksIGFyZ1NwZWN9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHsgdmFsdWU6IGFueSwgYXJnU3BlYzogQXJnU3BlYyB9Pn0gKi8oe30pKTtcblxuICAgIHJldHVybiBmbGF0dGVuZWQ7XG4gIH07XG5cbiAgY29uc3QgYXJncyA9IGZsYXR0ZW4ocGFyc2VkQXJncyk7XG5cbiAgLy8gaG9wZWZ1bGx5IHRoZXNlIGZ1bmN0aW9uIG5hbWVzIGFyZSBkZXNjcmlwdGl2ZSBlbm91Z2hcbiAgY29uc3QgdHlwZXNEaWZmZXIgPSAvKiogQHBhcmFtIHtzdHJpbmd9IGRlc3QgKi8oZGVzdCkgPT4gdHlwZW9mIGFyZ3NbZGVzdF0udmFsdWUgIT09IHR5cGVvZiBkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF07XG5cbiAgY29uc3QgZGVmYXVsdFZhbHVlSXNBcnJheSA9IC8qKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAqLyhkZXN0KSA9PiBfLmlzQXJyYXkoZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKTtcblxuICBjb25zdCBhcmdzVmFsdWVJc0FycmF5ID0gLyoqIEBwYXJhbSB7c3RyaW5nfSBkZXN0ICovKGRlc3QpID0+IF8uaXNBcnJheShhcmdzW2Rlc3RdLnZhbHVlKTtcblxuICBjb25zdCBhcnJheXNEaWZmZXIgPSAvKiogQHBhcmFtIHtzdHJpbmd9IGRlc3QgKi8oZGVzdCkgPT4gXy5ndChfLnNpemUoXy5kaWZmZXJlbmNlKGFyZ3NbZGVzdF0udmFsdWUsIGRlZmF1bHRzRnJvbVNjaGVtYVtkZXN0XSkpLCAwKTtcblxuICBjb25zdCB2YWx1ZXNEaWZmZXIgPSAvKiogQHBhcmFtIHtzdHJpbmd9IGRlc3QgKi8oZGVzdCkgPT4gYXJnc1tkZXN0XS52YWx1ZSAhPT0gZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdO1xuXG4gIGNvbnN0IGRlZmF1bHRJc0RlZmluZWQgPSAvKiogQHBhcmFtIHtzdHJpbmd9IGRlc3QgKi8oZGVzdCkgPT4gIV8uaXNVbmRlZmluZWQoZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKTtcblxuICAvLyBub3RlIHRoYXQgYF8ub3ZlckV2ZXJ5YCBpcyBsaWtlIGFuIFwiQU5EXCIsIGFuZCBgXy5vdmVyU29tZWAgaXMgbGlrZSBhbiBcIk9SXCJcblxuICBjb25zdCBhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXIgPSBfLm92ZXJTb21lKFtcbiAgICBfLm5lZ2F0ZShhcmdzVmFsdWVJc0FycmF5KSxcbiAgICBhcnJheXNEaWZmZXJcbiAgXSk7XG5cbiAgY29uc3QgZGVmYXVsdFZhbHVlTm90QXJyYXlBbmRWYWx1ZXNEaWZmZXIgPSBfLm92ZXJFdmVyeShbXG4gICAgXy5uZWdhdGUoZGVmYXVsdFZhbHVlSXNBcnJheSksIHZhbHVlc0RpZmZlclxuICBdKTtcblxuICAvKipcbiAgICogVGhpcyB1c2VkIHRvIGJlIGEgaGlkZW91cyBjb25kaXRpb25hbCwgYnV0IGl0J3MgYnJva2VuIHVwIGludG8gYSBoaWRlb3VzIGZ1bmN0aW9uIGluc3RlYWQuXG4gICAqIGhvcGVmdWxseSB0aGlzIG1ha2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIHVuZGVyc3RhbmRhYmxlLlxuICAgKiAtIGNoZWNrcyBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBkZWZpbmVkXG4gICAqIC0gaWYgc28sIGFuZCB0aGUgZGVmYXVsdCBpcyBub3QgYW4gYXJyYXk6XG4gICAqICAgLSBlbnN1cmVzIHRoZSB0eXBlcyBhcmUgdGhlIHNhbWVcbiAgICogICAtIGVuc3VyZXMgdGhlIHZhbHVlcyBhcmUgZXF1YWxcbiAgICogLSBpZiBzbywgYW5kIHRoZSBkZWZhdWx0IGlzIGFuIGFycmF5OlxuICAgKiAgIC0gZW5zdXJlcyB0aGUgYXJncyB2YWx1ZSBpcyBhbiBhcnJheVxuICAgKiAgIC0gZW5zdXJlcyB0aGUgYXJncyB2YWx1ZXMgZG8gbm90IGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0IHZhbHVlc1xuICAgKiBAdHlwZSB7KGRlc3Q6IHN0cmluZykgPT4gYm9vbGVhbn1cbiAgICovXG4gIGNvbnN0IGlzTm90RGVmYXVsdCA9IF8ub3ZlckV2ZXJ5KFtcbiAgICBkZWZhdWx0SXNEZWZpbmVkLFxuICAgIF8ub3ZlclNvbWUoW1xuICAgICAgdHlwZXNEaWZmZXIsXG4gICAgICBfLm92ZXJFdmVyeShbXG4gICAgICAgIGRlZmF1bHRWYWx1ZUlzQXJyYXksXG4gICAgICAgIGFyZ1ZhbHVlTm90QXJyYXlPckFycmF5c0RpZmZlclxuICAgICAgXSksXG4gICAgICBkZWZhdWx0VmFsdWVOb3RBcnJheUFuZFZhbHVlc0RpZmZlclxuICAgIF0pXG4gIF0pO1xuXG4gIGNvbnN0IGRlZmF1bHRzRnJvbVNjaGVtYSA9IGdldERlZmF1bHRzRm9yU2NoZW1hKHRydWUpO1xuXG4gIHJldHVybiBfLnJlZHVjZShcbiAgICBfLnBpY2tCeShhcmdzLCAoX18sIGtleSkgPT4gaXNOb3REZWZhdWx0KGtleSkpLFxuICAgIC8vIGV4cGxvZGVzIHRoZSBmbGF0dGVuZWQgb2JqZWN0IGJhY2sgaW50byBuZXN0ZWQgb25lXG4gICAgKGFjYywge3ZhbHVlLCBhcmdTcGVjfSkgPT4gXy5zZXQoYWNjLCBhcmdTcGVjLmRlc3QsIHZhbHVlKSwgLyoqIEB0eXBlIHtQYXJ0aWFsPFBhcnNlZEFyZ3M+fSAqLyh7fSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDb21wYWN0cyBhbiBvYmplY3QgZm9yIHtAbGluayBzaG93Q29uZmlnfTpcbiAqIDEuIFJlbW92ZXMgYHN1YmNvbW1hbmRgIGtleS92YWx1ZVxuICogMi4gUmVtb3ZlcyBgdW5kZWZpbmVkYCB2YWx1ZXNcbiAqIDMuIFJlbW92ZXMgZW1wdHkgb2JqZWN0cyAoYnV0IG5vdCBgZmFsc2VgIHZhbHVlcylcbiAqIERvZXMgbm90IG9wZXJhdGUgcmVjdXJzaXZlbHkuXG4gKi9cbmNvbnN0IGNvbXBhY3RDb25maWcgPSBfLnBhcnRpYWwoXG4gIF8ub21pdEJ5LFxuICBfLFxuICAodmFsdWUsIGtleSkgPT4ga2V5ID09PSAnc3ViY29tbWFuZCcgfHwgXy5pc1VuZGVmaW5lZCh2YWx1ZSkgfHwgKF8uaXNPYmplY3QodmFsdWUpICYmIF8uaXNFbXB0eSh2YWx1ZSkpXG4pO1xuXG4vKipcbiAqIFNob3dzIGEgYnJlYWtkb3duIG9mIHRoZSBjdXJyZW50IGNvbmZpZyBhZnRlciBDTEkgcGFyYW1zLCBjb25maWcgZmlsZSBsb2FkZWQgJiBkZWZhdWx0cyBhcHBsaWVkLlxuICpcbiAqIFRoZSBhY3R1YWwgc2hhcGUgb2YgYHByZUNvbmZpZ1BhcnNlZEFyZ3NgIGFuZCBgZGVmYXVsdHNgIGRvZXMgbm90IG1hdHRlciBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZnVuY3Rpb24sXG4gKiBidXQgaXQncyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgd2l0aCB2YWx1ZXMgb2YgdHlwZSB7QGxpbmsgUGFyc2VkQXJnc30gYW5kIGBEZWZhdWx0VmFsdWVzPHRydWU+YCwgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIEBwYXJhbSB7UGFydGlhbDxQYXJzZWRBcmdzPn0gbm9uRGVmYXVsdFByZUNvbmZpZ1BhcnNlZEFyZ3MgLSBQYXJzZWQgQ0xJIGFyZ3MgKG9yIHBhcmFtIHRvIGBpbml0KClgKSBiZWZvcmUgY29uZmlnICYgZGVmYXVsdHMgYXBwbGllZFxuICogQHBhcmFtIHtpbXBvcnQoJy4vY29uZmlnLWZpbGUnKS5SZWFkQ29uZmlnRmlsZVJlc3VsdH0gY29uZmlnUmVzdWx0IC0gUmVzdWx0IG9mIGF0dGVtcHRpbmcgdG8gbG9hZCBhIGNvbmZpZyBmaWxlLiAgX011c3RfIGJlIG5vcm1hbGl6ZWRcbiAqIEBwYXJhbSB7UGFydGlhbDxQYXJzZWRBcmdzPn0gZGVmYXVsdHMgLSBDb25maWd1cmF0aW9uIGRlZmF1bHRzIGZyb20gc2NoZW1hc1xuICogQHBhcmFtIHtQYXJzZWRBcmdzfSBwYXJzZWRBcmdzIC0gRW50aXJlIHBhcnNlZCBhcmdzIG9iamVjdFxuICovXG5mdW5jdGlvbiBzaG93Q29uZmlnIChub25EZWZhdWx0UHJlQ29uZmlnUGFyc2VkQXJncywgY29uZmlnUmVzdWx0LCBkZWZhdWx0cywgcGFyc2VkQXJncykge1xuICBjb25zb2xlLmxvZygnQXBwaXVtIENvbmZpZ3VyYXRpb25cXG4nKTtcbiAgY29uc29sZS5sb2coJ2Zyb20gZGVmYXVsdHM6XFxuJyk7XG4gIGNvbnNvbGUuZGlyKGNvbXBhY3RDb25maWcoZGVmYXVsdHMpKTtcbiAgaWYgKGNvbmZpZ1Jlc3VsdC5jb25maWcpIHtcbiAgICBjb25zb2xlLmxvZyhgXFxuZnJvbSBjb25maWcgZmlsZSBhdCAke2NvbmZpZ1Jlc3VsdC5maWxlcGF0aH06XFxuYCk7XG4gICAgY29uc29sZS5kaXIoY29tcGFjdENvbmZpZyhjb25maWdSZXN1bHQuY29uZmlnKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coYFxcbihubyBjb25maWd1cmF0aW9uIGZpbGUgbG9hZGVkKWApO1xuICB9XG4gIGlmIChfLmlzRW1wdHkobm9uRGVmYXVsdFByZUNvbmZpZ1BhcnNlZEFyZ3MpKSB7XG4gICAgY29uc29sZS5sb2coYFxcbihubyBDTEkgcGFyYW1ldGVycyBwcm92aWRlZClgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZygnXFxudmlhIENMSSBvciBmdW5jdGlvbiBjYWxsOlxcbicpO1xuICAgIGNvbnNvbGUuZGlyKGNvbXBhY3RDb25maWcobm9uRGVmYXVsdFByZUNvbmZpZ1BhcnNlZEFyZ3MpKTtcbiAgfVxuICBjb25zb2xlLmxvZygnXFxuZmluYWwgY29uZmlndXJhdGlvbjpcXG4nKTtcbiAgY29uc29sZS5kaXIoY29tcGFjdENvbmZpZyhwYXJzZWRBcmdzKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRtcERpclxuICovXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVRtcERpciAodG1wRGlyKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMubWtkaXJwKHRtcERpcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdlIGNvdWxkIG5vdCBlbnN1cmUgdGhhdCB0aGUgdGVtcCBkaXIgeW91IHNwZWNpZmllZCBgICtcbiAgICAgICAgICAgICAgICAgICAgYCgke3RtcERpcn0pIGV4aXN0cy4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHdyaXRlYWJsZS5gKTtcbiAgfVxufVxuXG5jb25zdCByb290RGlyID0gZnMuZmluZFJvb3QoX19kaXJuYW1lKTtcblxuZXhwb3J0IHtcbiAgZ2V0QnVpbGRJbmZvLCBjaGVja05vZGVPaywgc2hvd0J1aWxkSW5mbyxcbiAgd2Fybk5vZGVEZXByZWNhdGlvbnMsIHZhbGlkYXRlVG1wRGlyLCBnZXROb25EZWZhdWx0U2VydmVyQXJncyxcbiAgZ2V0R2l0UmV2LCBBUFBJVU1fVkVSLCB1cGRhdGVCdWlsZEluZm8sIHNob3dDb25maWcsIHJvb3REaXJcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vdHlwZXMvY2xpJykuUGFyc2VkQXJnc30gUGFyc2VkQXJnc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9zY2hlbWEvYXJnLXNwZWMnKS5BcmdTcGVjfSBBcmdTcGVjXG4gKi9cblxuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The name of the extension type for drivers
|
|
3
|
+
*/
|
|
4
|
+
export const DRIVER_TYPE: "driver";
|
|
5
|
+
/**
|
|
6
|
+
* The name of the extension type for plugins
|
|
7
|
+
*/
|
|
8
|
+
export const PLUGIN_TYPE: "plugin";
|
|
9
|
+
/**
|
|
10
|
+
* The `server` command of the `appium` CLI
|
|
11
|
+
*/
|
|
12
|
+
export const SERVER_SUBCOMMAND: "server";
|
|
13
|
+
/**
|
|
14
|
+
* The value of `--use-plugins` if _all_ plugins should be loaded
|
|
15
|
+
*/
|
|
16
|
+
export const USE_ALL_PLUGINS: "all";
|
|
17
|
+
export const KNOWN_PLUGINS: Readonly<{
|
|
18
|
+
readonly images: "@appium/images-plugin";
|
|
19
|
+
readonly 'execute-driver': "@appium/execute-driver-plugin";
|
|
20
|
+
readonly 'relaxed-caps': "@appium/relaxed-caps-plugin";
|
|
21
|
+
}>;
|
|
22
|
+
export const KNOWN_DRIVERS: Readonly<{
|
|
23
|
+
readonly uiautomator2: "appium-uiautomator2-driver";
|
|
24
|
+
readonly xcuitest: "appium-xcuitest-driver";
|
|
25
|
+
readonly youiengine: "appium-youiengine-driver";
|
|
26
|
+
readonly windows: "appium-windows-driver";
|
|
27
|
+
readonly mac: "appium-mac-driver";
|
|
28
|
+
readonly mac2: "appium-mac2-driver";
|
|
29
|
+
readonly espresso: "appium-espresso-driver";
|
|
30
|
+
readonly tizen: "appium-tizen-driver";
|
|
31
|
+
readonly flutter: "appium-flutter-driver";
|
|
32
|
+
readonly safari: "appium-safari-driver";
|
|
33
|
+
readonly gecko: "appium-geckodriver";
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Relative path to directory containing any Appium internal files
|
|
37
|
+
*/
|
|
38
|
+
export const CACHE_DIR_RELATIVE_PATH: string;
|
|
39
|
+
/**
|
|
40
|
+
* Relative path to hashfile (from `APPIUM_HOME`) of consuming project's `package.json` (if it exists)
|
|
41
|
+
*/
|
|
42
|
+
export const PKG_HASHFILE_RELATIVE_PATH: string;
|
|
43
|
+
export const EXT_SUBCOMMAND_LIST: "list";
|
|
44
|
+
export const EXT_SUBCOMMAND_INSTALL: "install";
|
|
45
|
+
export const EXT_SUBCOMMAND_UNINSTALL: "uninstall";
|
|
46
|
+
export const EXT_SUBCOMMAND_UPDATE: "update";
|
|
47
|
+
export const EXT_SUBCOMMAND_RUN: "run";
|
|
48
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../lib/constants.js"],"names":[],"mappings":"AAGA;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,yCAA0C;AAE1C;;GAEG;AACH,oCAAqC;AAMrC;;;;GAME;AAMF;;;;;;;;;;;;GAcE;AAEF;;GAEG;AACH,6CAIE;AAEF;;GAEG;AACH,gDAGE;AAGF,yCAA0C;AAC1C,+CAAgD;AAChD,mDAAoD;AACpD,6CAA8C;AAC9C,uCAAwC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.USE_ALL_PLUGINS = exports.SERVER_SUBCOMMAND = exports.PLUGIN_TYPE = exports.PKG_HASHFILE_RELATIVE_PATH = exports.KNOWN_PLUGINS = exports.KNOWN_DRIVERS = exports.EXT_SUBCOMMAND_UPDATE = exports.EXT_SUBCOMMAND_UNINSTALL = exports.EXT_SUBCOMMAND_RUN = exports.EXT_SUBCOMMAND_LIST = exports.EXT_SUBCOMMAND_INSTALL = exports.DRIVER_TYPE = exports.CACHE_DIR_RELATIVE_PATH = void 0;
|
|
9
|
+
|
|
10
|
+
require("source-map-support/register");
|
|
11
|
+
|
|
12
|
+
var _path = _interopRequireDefault(require("path"));
|
|
13
|
+
|
|
14
|
+
const DRIVER_TYPE = 'driver';
|
|
15
|
+
exports.DRIVER_TYPE = DRIVER_TYPE;
|
|
16
|
+
const PLUGIN_TYPE = 'plugin';
|
|
17
|
+
exports.PLUGIN_TYPE = PLUGIN_TYPE;
|
|
18
|
+
const SERVER_SUBCOMMAND = 'server';
|
|
19
|
+
exports.SERVER_SUBCOMMAND = SERVER_SUBCOMMAND;
|
|
20
|
+
const USE_ALL_PLUGINS = 'all';
|
|
21
|
+
exports.USE_ALL_PLUGINS = USE_ALL_PLUGINS;
|
|
22
|
+
const KNOWN_PLUGINS = Object.freeze({
|
|
23
|
+
images: '@appium/images-plugin',
|
|
24
|
+
'execute-driver': '@appium/execute-driver-plugin',
|
|
25
|
+
'relaxed-caps': '@appium/relaxed-caps-plugin'
|
|
26
|
+
});
|
|
27
|
+
exports.KNOWN_PLUGINS = KNOWN_PLUGINS;
|
|
28
|
+
const KNOWN_DRIVERS = Object.freeze({
|
|
29
|
+
uiautomator2: 'appium-uiautomator2-driver',
|
|
30
|
+
xcuitest: 'appium-xcuitest-driver',
|
|
31
|
+
youiengine: 'appium-youiengine-driver',
|
|
32
|
+
windows: 'appium-windows-driver',
|
|
33
|
+
mac: 'appium-mac-driver',
|
|
34
|
+
mac2: 'appium-mac2-driver',
|
|
35
|
+
espresso: 'appium-espresso-driver',
|
|
36
|
+
tizen: 'appium-tizen-driver',
|
|
37
|
+
flutter: 'appium-flutter-driver',
|
|
38
|
+
safari: 'appium-safari-driver',
|
|
39
|
+
gecko: 'appium-geckodriver'
|
|
40
|
+
});
|
|
41
|
+
exports.KNOWN_DRIVERS = KNOWN_DRIVERS;
|
|
42
|
+
|
|
43
|
+
const CACHE_DIR_RELATIVE_PATH = _path.default.join('node_modules', '.cache', 'appium');
|
|
44
|
+
|
|
45
|
+
exports.CACHE_DIR_RELATIVE_PATH = CACHE_DIR_RELATIVE_PATH;
|
|
46
|
+
|
|
47
|
+
const PKG_HASHFILE_RELATIVE_PATH = _path.default.join(CACHE_DIR_RELATIVE_PATH, 'package.hash');
|
|
48
|
+
|
|
49
|
+
exports.PKG_HASHFILE_RELATIVE_PATH = PKG_HASHFILE_RELATIVE_PATH;
|
|
50
|
+
const EXT_SUBCOMMAND_LIST = 'list';
|
|
51
|
+
exports.EXT_SUBCOMMAND_LIST = EXT_SUBCOMMAND_LIST;
|
|
52
|
+
const EXT_SUBCOMMAND_INSTALL = 'install';
|
|
53
|
+
exports.EXT_SUBCOMMAND_INSTALL = EXT_SUBCOMMAND_INSTALL;
|
|
54
|
+
const EXT_SUBCOMMAND_UNINSTALL = 'uninstall';
|
|
55
|
+
exports.EXT_SUBCOMMAND_UNINSTALL = EXT_SUBCOMMAND_UNINSTALL;
|
|
56
|
+
const EXT_SUBCOMMAND_UPDATE = 'update';
|
|
57
|
+
exports.EXT_SUBCOMMAND_UPDATE = EXT_SUBCOMMAND_UPDATE;
|
|
58
|
+
const EXT_SUBCOMMAND_RUN = 'run';
|
|
59
|
+
exports.EXT_SUBCOMMAND_RUN = EXT_SUBCOMMAND_RUN;
|
|
60
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb25zdGFudHMuanMiXSwibmFtZXMiOlsiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsIlNFUlZFUl9TVUJDT01NQU5EIiwiVVNFX0FMTF9QTFVHSU5TIiwiS05PV05fUExVR0lOUyIsIk9iamVjdCIsImZyZWV6ZSIsImltYWdlcyIsIktOT1dOX0RSSVZFUlMiLCJ1aWF1dG9tYXRvcjIiLCJ4Y3VpdGVzdCIsInlvdWllbmdpbmUiLCJ3aW5kb3dzIiwibWFjIiwibWFjMiIsImVzcHJlc3NvIiwidGl6ZW4iLCJmbHV0dGVyIiwic2FmYXJpIiwiZ2Vja28iLCJDQUNIRV9ESVJfUkVMQVRJVkVfUEFUSCIsInBhdGgiLCJqb2luIiwiUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgiLCJFWFRfU1VCQ09NTUFORF9MSVNUIiwiRVhUX1NVQkNPTU1BTkRfSU5TVEFMTCIsIkVYVF9TVUJDT01NQU5EX1VOSU5TVEFMTCIsIkVYVF9TVUJDT01NQU5EX1VQREFURSIsIkVYVF9TVUJDT01NQU5EX1JVTiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQTs7QUFLTyxNQUFNQSxXQUFXLEdBQUcsUUFBcEI7O0FBS0EsTUFBTUMsV0FBVyxHQUFHLFFBQXBCOztBQUtBLE1BQU1DLGlCQUFpQixHQUFHLFFBQTFCOztBQUtBLE1BQU1DLGVBQWUsR0FBRyxLQUF4Qjs7QUFNQSxNQUFNQyxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUNMO0FBQ3BCQyxFQUFBQSxNQUFNLEVBQUUsdUJBRFk7QUFFcEIsb0JBQWtCLCtCQUZFO0FBR3BCLGtCQUFnQjtBQUhJLENBREssQ0FBdEI7O0FBWUEsTUFBTUMsYUFBYSxHQUFHSCxNQUFNLENBQUNDLE1BQVAsQ0FDTDtBQUNwQkcsRUFBQUEsWUFBWSxFQUFFLDRCQURNO0FBRXBCQyxFQUFBQSxRQUFRLEVBQUUsd0JBRlU7QUFHcEJDLEVBQUFBLFVBQVUsRUFBRSwwQkFIUTtBQUlwQkMsRUFBQUEsT0FBTyxFQUFFLHVCQUpXO0FBS3BCQyxFQUFBQSxHQUFHLEVBQUUsbUJBTGU7QUFNcEJDLEVBQUFBLElBQUksRUFBRSxvQkFOYztBQU9wQkMsRUFBQUEsUUFBUSxFQUFFLHdCQVBVO0FBUXBCQyxFQUFBQSxLQUFLLEVBQUUscUJBUmE7QUFTcEJDLEVBQUFBLE9BQU8sRUFBRSx1QkFUVztBQVVwQkMsRUFBQUEsTUFBTSxFQUFFLHNCQVZZO0FBV3BCQyxFQUFBQSxLQUFLLEVBQUU7QUFYYSxDQURLLENBQXRCOzs7QUFtQkEsTUFBTUMsdUJBQXVCLEdBQUdDLGNBQUtDLElBQUwsQ0FDckMsY0FEcUMsRUFFckMsUUFGcUMsRUFHckMsUUFIcUMsQ0FBaEM7Ozs7QUFTQSxNQUFNQywwQkFBMEIsR0FBR0YsY0FBS0MsSUFBTCxDQUN4Q0YsdUJBRHdDLEVBRXhDLGNBRndDLENBQW5DOzs7QUFNQSxNQUFNSSxtQkFBbUIsR0FBRyxNQUE1Qjs7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxTQUEvQjs7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxXQUFqQzs7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxRQUE5Qjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxLQUEzQiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0eXBlIGZvciBkcml2ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBEUklWRVJfVFlQRSA9ICdkcml2ZXInO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gdHlwZSBmb3IgcGx1Z2luc1xuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1RZUEUgPSAncGx1Z2luJztcblxuLyoqXG4gKiBUaGUgYHNlcnZlcmAgY29tbWFuZCBvZiB0aGUgYGFwcGl1bWAgQ0xJXG4gKi9cbmV4cG9ydCBjb25zdCBTRVJWRVJfU1VCQ09NTUFORCA9ICdzZXJ2ZXInO1xuXG4vKipcbiAqIFRoZSB2YWx1ZSBvZiBgLS11c2UtcGx1Z2luc2AgaWYgX2FsbF8gcGx1Z2lucyBzaG91bGQgYmUgbG9hZGVkXG4gKi9cbmV4cG9ydCBjb25zdCBVU0VfQUxMX1BMVUdJTlMgPSAnYWxsJztcblxuLy8gVGhpcyBpcyBhIG1hcCBvZiBwbHVnaW4gbmFtZXMgdG8gbnBtIHBhY2thZ2VzIHJlcHJlc2VudGluZyB0aG9zZSBwbHVnaW5zLlxuLy8gVGhlIHBsdWdpbnMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBDTEkgc28gdXNlcnMgY2FuIGp1c3Rcbi8vIHR5cGUgJ2FwcGl1bSBwbHVnaW4gaW5zdGFsbCAnbmFtZScnLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgZnVsbFxuLy8gbnBtIHBhY2thZ2UuIEkuZS4sIHRoZXNlIGFyZSB0aGUgb2ZmaWNpYWxseSByZWNvZ25pemVkIHBsdWdpbnMuXG5leHBvcnQgY29uc3QgS05PV05fUExVR0lOUyA9IE9iamVjdC5mcmVlemUoXG4gIC8qKiBAdHlwZSB7Y29uc3R9ICovICh7XG4gICAgaW1hZ2VzOiAnQGFwcGl1bS9pbWFnZXMtcGx1Z2luJyxcbiAgICAnZXhlY3V0ZS1kcml2ZXInOiAnQGFwcGl1bS9leGVjdXRlLWRyaXZlci1wbHVnaW4nLFxuICAgICdyZWxheGVkLWNhcHMnOiAnQGFwcGl1bS9yZWxheGVkLWNhcHMtcGx1Z2luJyxcbiAgfSksXG4pO1xuXG4vLyBUaGlzIGlzIGEgbWFwIG9mIGRyaXZlciBuYW1lcyB0byBucG0gcGFja2FnZXMgcmVwcmVzZW50aW5nIHRob3NlIGRyaXZlcnMuXG4vLyBUaGUgZHJpdmVycyBpbiB0aGlzIGxpc3Qgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIENMSSBzbyB1c2VycyBjYW4ganVzdFxuLy8gdHlwZSAnYXBwaXVtIGRyaXZlciBpbnN0YWxsICduYW1lJycsIHJhdGhlciB0aGFuIGhhdmluZyB0byBzcGVjaWZ5IHRoZSBmdWxsXG4vLyBucG0gcGFja2FnZS4gSS5lLiwgdGhlc2UgYXJlIHRoZSBvZmZpY2lhbGx5IHJlY29nbml6ZWQgZHJpdmVycy5cbmV4cG9ydCBjb25zdCBLTk9XTl9EUklWRVJTID0gT2JqZWN0LmZyZWV6ZShcbiAgLyoqIEB0eXBlIHtjb25zdH0gKi8gKHtcbiAgICB1aWF1dG9tYXRvcjI6ICdhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcicsXG4gICAgeGN1aXRlc3Q6ICdhcHBpdW0teGN1aXRlc3QtZHJpdmVyJyxcbiAgICB5b3VpZW5naW5lOiAnYXBwaXVtLXlvdWllbmdpbmUtZHJpdmVyJyxcbiAgICB3aW5kb3dzOiAnYXBwaXVtLXdpbmRvd3MtZHJpdmVyJyxcbiAgICBtYWM6ICdhcHBpdW0tbWFjLWRyaXZlcicsXG4gICAgbWFjMjogJ2FwcGl1bS1tYWMyLWRyaXZlcicsXG4gICAgZXNwcmVzc286ICdhcHBpdW0tZXNwcmVzc28tZHJpdmVyJyxcbiAgICB0aXplbjogJ2FwcGl1bS10aXplbi1kcml2ZXInLFxuICAgIGZsdXR0ZXI6ICdhcHBpdW0tZmx1dHRlci1kcml2ZXInLFxuICAgIHNhZmFyaTogJ2FwcGl1bS1zYWZhcmktZHJpdmVyJyxcbiAgICBnZWNrbzogJ2FwcGl1bS1nZWNrb2RyaXZlcicsXG4gIH0pLFxuKTtcblxuLyoqXG4gKiBSZWxhdGl2ZSBwYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGFueSBBcHBpdW0gaW50ZXJuYWwgZmlsZXNcbiAqL1xuZXhwb3J0IGNvbnN0IENBQ0hFX0RJUl9SRUxBVElWRV9QQVRIID0gcGF0aC5qb2luKFxuICAnbm9kZV9tb2R1bGVzJyxcbiAgJy5jYWNoZScsXG4gICdhcHBpdW0nLFxuKTtcblxuLyoqXG4gKiBSZWxhdGl2ZSBwYXRoIHRvIGhhc2hmaWxlIChmcm9tIGBBUFBJVU1fSE9NRWApIG9mIGNvbnN1bWluZyBwcm9qZWN0J3MgYHBhY2thZ2UuanNvbmAgKGlmIGl0IGV4aXN0cylcbiAqL1xuZXhwb3J0IGNvbnN0IFBLR19IQVNIRklMRV9SRUxBVElWRV9QQVRIID0gcGF0aC5qb2luKFxuICBDQUNIRV9ESVJfUkVMQVRJVkVfUEFUSCxcbiAgJ3BhY2thZ2UuaGFzaCcsXG4pO1xuXG5cbmV4cG9ydCBjb25zdCBFWFRfU1VCQ09NTUFORF9MSVNUID0gJ2xpc3QnO1xuZXhwb3J0IGNvbnN0IEVYVF9TVUJDT01NQU5EX0lOU1RBTEwgPSAnaW5zdGFsbCc7XG5leHBvcnQgY29uc3QgRVhUX1NVQkNPTU1BTkRfVU5JTlNUQUxMID0gJ3VuaW5zdGFsbCc7XG5leHBvcnQgY29uc3QgRVhUX1NVQkNPTU1BTkRfVVBEQVRFID0gJ3VwZGF0ZSc7XG5leHBvcnQgY29uc3QgRVhUX1NVQkNPTU1BTkRfUlVOID0gJ3J1bic7XG4iXX0=
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @extends {ExtensionConfig<DriverType>}
|
|
3
|
+
*/
|
|
4
|
+
export class DriverConfig extends ExtensionConfig<"driver"> {
|
|
5
|
+
/**
|
|
6
|
+
* A mapping of {@link Manifest} instances to {@link DriverConfig} instances.
|
|
7
|
+
*
|
|
8
|
+
* `Manifest` and `ExtensionConfig` have a one-to-many relationship; each `Manifest` should be associated with a `DriverConfig` and a `PluginConfig`; no more, no less.
|
|
9
|
+
*
|
|
10
|
+
* This variable tracks the `Manifest`-to-`DriverConfig` portion.
|
|
11
|
+
*
|
|
12
|
+
* @type {WeakMap<Manifest,DriverConfig>}
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
private static _instances;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new {@link DriverConfig} instance for a {@link Manifest} instance.
|
|
18
|
+
*
|
|
19
|
+
* @param {Manifest} manifest
|
|
20
|
+
* @param {DriverConfigOptions} [opts]
|
|
21
|
+
* @throws If `manifest` already associated with a `DriverConfig`
|
|
22
|
+
* @returns {DriverConfig}
|
|
23
|
+
*/
|
|
24
|
+
static create(manifest: Manifest, { extData, logFn }?: DriverConfigOptions | undefined): DriverConfig;
|
|
25
|
+
/**
|
|
26
|
+
* Returns a DriverConfig associated with a Manifest
|
|
27
|
+
* @param {Manifest} manifest
|
|
28
|
+
* @returns {DriverConfig|undefined}
|
|
29
|
+
*/
|
|
30
|
+
static getInstance(manifest: Manifest): DriverConfig | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Call {@link DriverConfig.create} instead.
|
|
33
|
+
* @private
|
|
34
|
+
* @param {import('./manifest').Manifest} manifest - Manifest instance
|
|
35
|
+
* @param {DriverConfigOptions} [opts]
|
|
36
|
+
*/
|
|
37
|
+
private constructor();
|
|
38
|
+
/**
|
|
39
|
+
* A set of unique automation names used by drivers.
|
|
40
|
+
* @type {Set<string>}
|
|
41
|
+
*/
|
|
42
|
+
knownAutomationNames: Set<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Given capabilities, find a matching driver within the config. Load its class and return it along with version and driver name.
|
|
45
|
+
* @param {Capabilities} caps
|
|
46
|
+
* @returns {MatchedDriver}
|
|
47
|
+
*/
|
|
48
|
+
findMatchingDriver({ automationName, platformName }: Capabilities): MatchedDriver;
|
|
49
|
+
/**
|
|
50
|
+
* Given an automation name and platform name, find a suitable driver and return its extension data.
|
|
51
|
+
* @param {string} matchAutomationName
|
|
52
|
+
* @param {string} matchPlatformName
|
|
53
|
+
* @returns {ExtMetadata<DriverType> & import('../../types/appium-manifest').InternalMetadata & import('../../types/external-manifest').CommonMetadata}
|
|
54
|
+
*/
|
|
55
|
+
_getDriverBySupport(matchAutomationName: string, matchPlatformName: string): ExtMetadata<DriverType> & import('../../types/appium-manifest').InternalMetadata & import('../../types/external-manifest').CommonMetadata;
|
|
56
|
+
}
|
|
57
|
+
export type DriverConfigOptions = {
|
|
58
|
+
/**
|
|
59
|
+
* - Optional logging function
|
|
60
|
+
*/
|
|
61
|
+
logFn?: import("./extension-config").ExtensionLogFn | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* - Extension data
|
|
64
|
+
*/
|
|
65
|
+
extData?: import("../../types").DriverRecord | undefined;
|
|
66
|
+
};
|
|
67
|
+
export type ExtMetadata<T> = import('../../types').ExtMetadata<T>;
|
|
68
|
+
export type ExtManifest<T> = import('../../types').ExtManifest<T>;
|
|
69
|
+
export type ManifestData = import('../../types').ManifestData;
|
|
70
|
+
export type DriverType = import('../../types').DriverType;
|
|
71
|
+
export type Manifest = import('./manifest').Manifest;
|
|
72
|
+
export type ExtRecord<T> = import('../../types').ExtRecord<T>;
|
|
73
|
+
export type ExtName<T> = import('../../types').ExtName<T>;
|
|
74
|
+
/**
|
|
75
|
+
* Return value of {@linkcode DriverConfig.findMatchingDriver }
|
|
76
|
+
*/
|
|
77
|
+
export type MatchedDriver = {
|
|
78
|
+
driver: BaseDriverBase<import("@appium/types").ExternalDriver, import("../../types").ExternalDriverStatic>;
|
|
79
|
+
version: string;
|
|
80
|
+
driverName: string;
|
|
81
|
+
};
|
|
82
|
+
export type Capabilities = import('@appium/types').Capabilities;
|
|
83
|
+
import { ExtensionConfig } from "./extension-config";
|
|
84
|
+
//# sourceMappingURL=driver-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-config.d.ts","sourceRoot":"","sources":["../../../lib/extension/driver-config.js"],"names":[],"mappings":"AAMA;;GAEG;AACH;IAQE;;;;;;;;;OASG;IACF,0BAAkC;IAkBlC;;;;;;;OAOG;IACH,wBALW,QAAQ,yDAGN,YAAY,CASxB;IAED;;;;OAIG;IACH,6BAHW,QAAQ,GACN,YAAY,GAAC,SAAS,CAIlC;IAxCD;;;;;MAKE;IACF,sBAQC;IAhCF;;;OAGG;IACH,sBAFU,IAAI,MAAM,CAAC,CAEA;IAuHpB;;;;MAIE;IACF,qDAHU,YAAY,GACV,aAAa,CAmCxB;IAED;;;;;MAKE;IACF,yCAJU,MAAM,qBACN,MAAM,GACJ,YAAY,UAAU,CAAC,GAAG,OAAO,6BAA6B,EAAE,gBAAgB,GAAG,OAAO,+BAA+B,EAAE,cAAc,CAwBpJ;CACH;;;;;;;;;;;6BAUY,OAAO,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;6BAKpC,OAAO,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;2BAIpC,OAAO,aAAa,EAAE,YAAY;yBAClC,OAAO,aAAa,EAAE,UAAU;uBAChC,OAAO,YAAY,EAAE,QAAQ;2BAK7B,OAAO,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;yBAKlC,OAAO,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;;;;;;aAQ/B,MAAM;gBACN,MAAM;;2BAIP,OAAO,eAAe,EAAE,YAAY"}
|