appium 2.0.0-beta.4 → 2.0.0-beta.42

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.
Files changed (153) hide show
  1. package/README.md +10 -11
  2. package/build/lib/appium.d.ts +204 -0
  3. package/build/lib/appium.d.ts.map +1 -0
  4. package/build/lib/appium.js +256 -131
  5. package/build/lib/cli/args.d.ts +17 -0
  6. package/build/lib/cli/args.d.ts.map +1 -0
  7. package/build/lib/cli/args.js +96 -282
  8. package/build/lib/cli/driver-command.d.ts +37 -0
  9. package/build/lib/cli/driver-command.d.ts.map +1 -0
  10. package/build/lib/cli/driver-command.js +27 -18
  11. package/build/lib/cli/extension-command.d.ts +376 -0
  12. package/build/lib/cli/extension-command.d.ts.map +1 -0
  13. package/build/lib/cli/extension-command.js +287 -156
  14. package/build/lib/cli/extension.d.ts +22 -0
  15. package/build/lib/cli/extension.d.ts.map +1 -0
  16. package/build/lib/cli/extension.js +31 -17
  17. package/build/lib/cli/parser.d.ts +84 -0
  18. package/build/lib/cli/parser.d.ts.map +1 -0
  19. package/build/lib/cli/parser.js +164 -94
  20. package/build/lib/cli/plugin-command.d.ts +34 -0
  21. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  22. package/build/lib/cli/plugin-command.js +26 -19
  23. package/build/lib/cli/utils.d.ts +29 -0
  24. package/build/lib/cli/utils.d.ts.map +1 -0
  25. package/build/lib/cli/utils.js +27 -3
  26. package/build/lib/config-file.d.ts +100 -0
  27. package/build/lib/config-file.d.ts.map +1 -0
  28. package/build/lib/config-file.js +136 -0
  29. package/build/lib/config.d.ts +49 -0
  30. package/build/lib/config.d.ts.map +1 -0
  31. package/build/lib/config.js +119 -96
  32. package/build/lib/constants.d.ts +48 -0
  33. package/build/lib/constants.d.ts.map +1 -0
  34. package/build/lib/constants.js +60 -0
  35. package/build/lib/extension/driver-config.d.ts +81 -0
  36. package/build/lib/extension/driver-config.d.ts.map +1 -0
  37. package/build/lib/extension/driver-config.js +177 -0
  38. package/build/lib/extension/extension-config.d.ts +242 -0
  39. package/build/lib/extension/extension-config.d.ts.map +1 -0
  40. package/build/lib/extension/extension-config.js +436 -0
  41. package/build/lib/extension/index.d.ts +48 -0
  42. package/build/lib/extension/index.d.ts.map +1 -0
  43. package/build/lib/extension/index.js +75 -0
  44. package/build/lib/extension/manifest.d.ts +174 -0
  45. package/build/lib/extension/manifest.d.ts.map +1 -0
  46. package/build/lib/extension/manifest.js +256 -0
  47. package/build/lib/extension/package-changed.d.ts +11 -0
  48. package/build/lib/extension/package-changed.d.ts.map +1 -0
  49. package/build/lib/extension/package-changed.js +66 -0
  50. package/build/lib/extension/plugin-config.d.ts +57 -0
  51. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  52. package/build/lib/extension/plugin-config.js +78 -0
  53. package/build/lib/grid-register.d.ts +10 -0
  54. package/build/lib/grid-register.d.ts.map +1 -0
  55. package/build/lib/grid-register.js +21 -25
  56. package/build/lib/logger.d.ts +3 -0
  57. package/build/lib/logger.d.ts.map +1 -0
  58. package/build/lib/logger.js +4 -6
  59. package/build/lib/logsink.d.ts +4 -0
  60. package/build/lib/logsink.d.ts.map +1 -0
  61. package/build/lib/logsink.js +14 -17
  62. package/build/lib/main.d.ts +55 -0
  63. package/build/lib/main.d.ts.map +1 -0
  64. package/build/lib/main.js +183 -91
  65. package/build/lib/schema/arg-spec.d.ts +143 -0
  66. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  67. package/build/lib/schema/arg-spec.js +119 -0
  68. package/build/lib/schema/cli-args.d.ts +19 -0
  69. package/build/lib/schema/cli-args.d.ts.map +1 -0
  70. package/build/lib/schema/cli-args.js +178 -0
  71. package/build/lib/schema/cli-transformers.d.ts +5 -0
  72. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  73. package/build/lib/schema/cli-transformers.js +74 -0
  74. package/build/lib/schema/index.d.ts +3 -0
  75. package/build/lib/schema/index.d.ts.map +1 -0
  76. package/build/lib/schema/index.js +34 -0
  77. package/build/lib/schema/keywords.d.ts +24 -0
  78. package/build/lib/schema/keywords.d.ts.map +1 -0
  79. package/build/lib/schema/keywords.js +70 -0
  80. package/build/lib/schema/schema.d.ts +259 -0
  81. package/build/lib/schema/schema.d.ts.map +1 -0
  82. package/build/lib/schema/schema.js +450 -0
  83. package/build/lib/utils.d.ts +66 -0
  84. package/build/lib/utils.d.ts.map +1 -0
  85. package/build/lib/utils.js +35 -139
  86. package/build/tsconfig.tsbuildinfo +1 -0
  87. package/build/types/appium-manifest.d.ts +59 -0
  88. package/build/types/appium-manifest.d.ts.map +1 -0
  89. package/build/types/cli.d.ts +123 -0
  90. package/build/types/cli.d.ts.map +1 -0
  91. package/build/types/extension-manifest.d.ts +55 -0
  92. package/build/types/extension-manifest.d.ts.map +1 -0
  93. package/build/types/index.d.ts +16 -0
  94. package/build/types/index.d.ts.map +1 -0
  95. package/driver.d.ts +1 -0
  96. package/driver.js +14 -0
  97. package/index.js +11 -0
  98. package/lib/appium.js +520 -186
  99. package/lib/cli/args.js +267 -422
  100. package/lib/cli/driver-command.js +58 -23
  101. package/lib/cli/extension-command.js +613 -260
  102. package/lib/cli/extension.js +47 -17
  103. package/lib/cli/parser.js +263 -83
  104. package/lib/cli/plugin-command.js +48 -20
  105. package/lib/cli/utils.js +24 -10
  106. package/lib/config-file.js +219 -0
  107. package/lib/config.js +243 -110
  108. package/lib/constants.js +69 -0
  109. package/lib/extension/driver-config.js +249 -0
  110. package/lib/extension/extension-config.js +677 -0
  111. package/lib/extension/index.js +116 -0
  112. package/lib/extension/manifest.js +475 -0
  113. package/lib/extension/package-changed.js +64 -0
  114. package/lib/extension/plugin-config.js +113 -0
  115. package/lib/grid-register.js +49 -35
  116. package/lib/logger.js +1 -2
  117. package/lib/logsink.js +38 -33
  118. package/lib/main.js +308 -100
  119. package/lib/schema/arg-spec.js +229 -0
  120. package/lib/schema/cli-args.js +238 -0
  121. package/lib/schema/cli-transformers.js +115 -0
  122. package/lib/schema/index.js +2 -0
  123. package/lib/schema/keywords.js +136 -0
  124. package/lib/schema/schema.js +717 -0
  125. package/lib/utils.js +121 -140
  126. package/package.json +85 -85
  127. package/plugin.d.ts +1 -0
  128. package/plugin.js +13 -0
  129. package/scripts/autoinstall-extensions.js +185 -0
  130. package/support.d.ts +1 -0
  131. package/support.js +13 -0
  132. package/test.d.ts +7 -0
  133. package/test.js +13 -0
  134. package/types/appium-manifest.ts +73 -0
  135. package/types/cli.ts +150 -0
  136. package/types/extension-manifest.ts +64 -0
  137. package/types/index.ts +21 -0
  138. package/CHANGELOG.md +0 -3515
  139. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  140. package/build/lib/cli/npm.js +0 -206
  141. package/build/lib/cli/parser-helpers.js +0 -82
  142. package/build/lib/driver-config.js +0 -77
  143. package/build/lib/drivers.js +0 -96
  144. package/build/lib/extension-config.js +0 -253
  145. package/build/lib/plugin-config.js +0 -59
  146. package/build/lib/plugins.js +0 -14
  147. package/lib/cli/npm.js +0 -183
  148. package/lib/cli/parser-helpers.js +0 -79
  149. package/lib/driver-config.js +0 -46
  150. package/lib/drivers.js +0 -81
  151. package/lib/extension-config.js +0 -209
  152. package/lib/plugin-config.js +0 -34
  153. package/lib/plugins.js +0 -10
@@ -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.getBuildInfo = getBuildInfo;
9
- exports.validateServerArgs = validateServerArgs;
8
+ exports.APPIUM_VER = void 0;
10
9
  exports.checkNodeOk = checkNodeOk;
11
- exports.showConfig = showConfig;
12
- exports.warnNodeDeprecations = warnNodeDeprecations;
13
- exports.validateTmpDir = validateTmpDir;
14
- exports.getNonDefaultArgs = getNonDefaultArgs;
10
+ exports.checkNpmOk = checkNpmOk;
11
+ exports.getBuildInfo = getBuildInfo;
15
12
  exports.getGitRev = getGitRev;
16
- exports.checkValidPort = checkValidPort;
13
+ exports.getNonDefaultServerArgs = getNonDefaultServerArgs;
14
+ exports.rootDir = void 0;
15
+ exports.showBuildInfo = showBuildInfo;
16
+ exports.showConfig = showConfig;
17
17
  exports.updateBuildInfo = updateBuildInfo;
18
- exports.APPIUM_VER = void 0;
18
+ exports.validateTmpDir = validateTmpDir;
19
+ exports.warnNodeDeprecations = warnNodeDeprecations;
19
20
 
20
21
  require("source-map-support/register");
21
22
 
22
23
  var _lodash = _interopRequireDefault(require("lodash"));
23
24
 
24
- var _path = _interopRequireDefault(require("path"));
25
-
26
- var _appiumSupport = require("appium-support");
25
+ var _support = require("@appium/support");
27
26
 
28
27
  var _axios = _interopRequireDefault(require("axios"));
29
28
 
30
29
  var _teen_process = require("teen_process");
31
30
 
32
- var _utils = require("./utils");
31
+ var _semver = _interopRequireDefault(require("semver"));
33
32
 
34
- var _logger = _interopRequireDefault(require("./logger"));
33
+ var _findUp = _interopRequireDefault(require("find-up"));
35
34
 
36
- var _semver = _interopRequireDefault(require("semver"));
35
+ var _schema = require("./schema/schema");
37
36
 
38
- const npmPackage = require(_path.default.resolve(_utils.rootDir, 'package.json'));
37
+ const npmPackage = _support.fs.readPackageJsonFrom(__dirname);
39
38
 
40
39
  const APPIUM_VER = npmPackage.version;
41
40
  exports.APPIUM_VER = APPIUM_VER;
42
41
  const MIN_NODE_VERSION = npmPackage.engines.node;
42
+ const MIN_NPM_VERSION = npmPackage.engines.npm;
43
43
  const GIT_META_ROOT = '.git';
44
- const GIT_BINARY = `git${_appiumSupport.system.isWindows() ? '.exe' : ''}`;
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
@@ -51,6 +51,13 @@ function getNodeVersion() {
51
51
  return _semver.default.coerce(process.version);
52
52
  }
53
53
 
54
+ async function getNpmVersion() {
55
+ const {
56
+ stdout
57
+ } = await (0, _teen_process.exec)(_support.system.isWindows() ? 'npm.cmd' : 'npm', ['--version']);
58
+ return stdout.trim();
59
+ }
60
+
54
61
  async function updateBuildInfo(useGithubApiFallback = false) {
55
62
  const sha = await getGitRev(useGithubApiFallback);
56
63
 
@@ -59,20 +66,29 @@ async function updateBuildInfo(useGithubApiFallback = false) {
59
66
  }
60
67
 
61
68
  BUILD_INFO['git-sha'] = sha;
62
- const built = await getGitTimestamp(sha, useGithubApiFallback);
69
+ const buildTimestamp = await getGitTimestamp(sha, useGithubApiFallback);
63
70
 
64
- if (!_lodash.default.isEmpty(built)) {
65
- BUILD_INFO.built = built;
71
+ if (buildTimestamp) {
72
+ BUILD_INFO.built = buildTimestamp;
66
73
  }
67
74
  }
68
75
 
76
+ async function findGitRoot() {
77
+ return await (0, _findUp.default)(GIT_META_ROOT, {
78
+ cwd: rootDir,
79
+ type: 'directory'
80
+ });
81
+ }
82
+
69
83
  async function getGitRev(useGithubApiFallback = false) {
70
- if (await _appiumSupport.fs.exists(_path.default.resolve(_utils.rootDir, GIT_META_ROOT))) {
84
+ const gitRoot = await findGitRoot();
85
+
86
+ if (gitRoot) {
71
87
  try {
72
88
  const {
73
89
  stdout
74
90
  } = await (0, _teen_process.exec)(GIT_BINARY, ['rev-parse', 'HEAD'], {
75
- cwd: _utils.rootDir
91
+ cwd: gitRoot
76
92
  });
77
93
  return stdout.trim();
78
94
  } catch (ign) {}
@@ -83,34 +99,27 @@ async function getGitRev(useGithubApiFallback = false) {
83
99
  }
84
100
 
85
101
  try {
86
- const resBodyObj = (await _axios.default.get(`${GITHUB_API}/tags`, {
102
+ var _await$axios$get$data, _await$axios$get$data2;
103
+
104
+ return (_await$axios$get$data = (await _axios.default.get(`${GITHUB_API}/git/refs/tags/appium@${APPIUM_VER}`, {
87
105
  headers: {
88
106
  'User-Agent': `Appium ${APPIUM_VER}`
89
107
  }
90
- })).data;
91
-
92
- if (_lodash.default.isArray(resBodyObj)) {
93
- for (const {
94
- name,
95
- commit
96
- } of resBodyObj) {
97
- if (name === `v${APPIUM_VER}` && commit && commit.sha) {
98
- return commit.sha;
99
- }
100
- }
101
- }
108
+ })).data) === null || _await$axios$get$data === void 0 ? void 0 : (_await$axios$get$data2 = _await$axios$get$data.object) === null || _await$axios$get$data2 === void 0 ? void 0 : _await$axios$get$data2.sha;
102
109
  } catch (ign) {}
103
110
 
104
111
  return null;
105
112
  }
106
113
 
107
114
  async function getGitTimestamp(commitSha, useGithubApiFallback = false) {
108
- if (await _appiumSupport.fs.exists(_path.default.resolve(_utils.rootDir, GIT_META_ROOT))) {
115
+ const gitRoot = await findGitRoot();
116
+
117
+ if (gitRoot) {
109
118
  try {
110
119
  const {
111
120
  stdout
112
121
  } = await (0, _teen_process.exec)(GIT_BINARY, ['show', '-s', '--format=%ci', commitSha], {
113
- cwd: _utils.rootDir
122
+ cwd: gitRoot
114
123
  });
115
124
  return stdout.trim();
116
125
  } catch (ign) {}
@@ -121,21 +130,13 @@ async function getGitTimestamp(commitSha, useGithubApiFallback = false) {
121
130
  }
122
131
 
123
132
  try {
124
- const resBodyObj = (await _axios.default.get(`${GITHUB_API}/commits/${commitSha}`, {
133
+ var _await$axios$get$data3, _await$axios$get$data4;
134
+
135
+ return (_await$axios$get$data3 = (await _axios.default.get(`${GITHUB_API}/git/tags/${commitSha}`, {
125
136
  headers: {
126
137
  'User-Agent': `Appium ${APPIUM_VER}`
127
138
  }
128
- })).data;
129
-
130
- if (resBodyObj && resBodyObj.commit) {
131
- if (resBodyObj.commit.committer && resBodyObj.commit.committer.date) {
132
- return resBodyObj.commit.committer.date;
133
- }
134
-
135
- if (resBodyObj.commit.author && resBodyObj.commit.author.date) {
136
- return resBodyObj.commit.author.date;
137
- }
138
- }
139
+ })).data) === null || _await$axios$get$data3 === void 0 ? void 0 : (_await$axios$get$data4 = _await$axios$get$data3.tagger) === null || _await$axios$get$data4 === void 0 ? void 0 : _await$axios$get$data4.date;
139
140
  } catch (ign) {}
140
141
 
141
142
  return null;
@@ -149,82 +150,104 @@ function checkNodeOk() {
149
150
  const version = getNodeVersion();
150
151
 
151
152
  if (!_semver.default.satisfies(version, MIN_NODE_VERSION)) {
152
- _logger.default.errorAndThrow(`Node version must be ${MIN_NODE_VERSION}. Currently ${version.version}`);
153
+ throw new Error(`Node version must be at least ${MIN_NODE_VERSION}; current is ${version.version}`);
154
+ }
155
+ }
156
+
157
+ async function checkNpmOk() {
158
+ const npmVersion = await getNpmVersion();
159
+
160
+ if (!_semver.default.satisfies(npmVersion, MIN_NPM_VERSION)) {
161
+ throw new Error(`npm version must be at least ${MIN_NPM_VERSION}; current is ${npmVersion}. Run "npm install -g npm" to upgrade.`);
153
162
  }
154
163
  }
155
164
 
156
165
  function warnNodeDeprecations() {}
157
166
 
158
- async function showConfig() {
167
+ async function showBuildInfo() {
159
168
  await updateBuildInfo(true);
160
169
  console.log(JSON.stringify(getBuildInfo()));
161
170
  }
162
171
 
163
- function getNonDefaultArgs(parser, args) {
164
- let nonDefaults = {};
172
+ function getNonDefaultServerArgs(parsedArgs) {
173
+ const flatten = args => {
174
+ const argSpecs = (0, _schema.getAllArgSpecs)();
165
175
 
166
- for (let rawArg of parser.rawArgs) {
167
- let arg = rawArg[1].dest;
176
+ const flattened = _lodash.default.reduce([...argSpecs.values()], (acc, argSpec) => {
177
+ if (_lodash.default.has(args, argSpec.dest)) {
178
+ acc[argSpec.dest] = {
179
+ value: _lodash.default.get(args, argSpec.dest),
180
+ argSpec
181
+ };
182
+ }
168
183
 
169
- if (args[arg] && args[arg] !== rawArg[1].defaultValue) {
170
- nonDefaults[arg] = args[arg];
171
- }
172
- }
184
+ return acc;
185
+ }, {});
173
186
 
174
- return nonDefaults;
175
- }
187
+ return flattened;
188
+ };
176
189
 
177
- function checkValidPort(port, portName) {
178
- if (port > 0 && port < 65536) return true;
190
+ const args = flatten(parsedArgs);
179
191
 
180
- _logger.default.error(`Port '${portName}' must be greater than 0 and less than 65536. Currently ${port}`);
192
+ const typesDiffer = dest => typeof args[dest].value !== typeof defaultsFromSchema[dest];
181
193
 
182
- return false;
183
- }
194
+ const defaultValueIsArray = dest => _lodash.default.isArray(defaultsFromSchema[dest]);
184
195
 
185
- function validateServerArgs(parser, args) {
186
- let exclusives = [['noReset', 'fullReset'], ['ipa', 'safari'], ['app', 'safari'], ['forceIphone', 'forceIpad'], ['deviceName', 'defaultDevice']];
196
+ const argsValueIsArray = dest => _lodash.default.isArray(args[dest].value);
187
197
 
188
- for (let exSet of exclusives) {
189
- let numFoundInArgs = 0;
198
+ const arraysDiffer = dest => _lodash.default.gt(_lodash.default.size(_lodash.default.difference(args[dest].value, defaultsFromSchema[dest])), 0);
190
199
 
191
- for (let opt of exSet) {
192
- if (_lodash.default.has(args, opt) && args[opt]) {
193
- numFoundInArgs++;
194
- }
195
- }
200
+ const valuesDiffer = dest => args[dest].value !== defaultsFromSchema[dest];
196
201
 
197
- if (numFoundInArgs > 1) {
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
- }
202
+ const defaultIsDefined = dest => !_lodash.default.isUndefined(defaultsFromSchema[dest]);
201
203
 
202
- const validations = {
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);
204
+ const argValueNotArrayOrArraysDiffer = _lodash.default.overSome([_lodash.default.negate(argsValueIsArray), arraysDiffer]);
211
205
 
212
- for (let [arg, validator] of _lodash.default.toPairs(validations)) {
213
- if (_lodash.default.has(nonDefaultArgs, arg)) {
214
- if (!validator(args[arg], arg)) {
215
- throw new Error(`Invalid argument for param ${arg}: ${args[arg]}`);
216
- }
217
- }
206
+ const defaultValueNotArrayAndValuesDiffer = _lodash.default.overEvery([_lodash.default.negate(defaultValueIsArray), valuesDiffer]);
207
+
208
+ const isNotDefault = _lodash.default.overEvery([defaultIsDefined, _lodash.default.overSome([typesDiffer, _lodash.default.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]), defaultValueNotArrayAndValuesDiffer])]);
209
+
210
+ const defaultsFromSchema = (0, _schema.getDefaultsForSchema)(true);
211
+ return _lodash.default.reduce(_lodash.default.pickBy(args, (__, key) => isNotDefault(key)), (acc, {
212
+ value,
213
+ argSpec
214
+ }) => _lodash.default.set(acc, argSpec.dest, value), {});
215
+ }
216
+
217
+ 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));
218
+
219
+ function showConfig(nonDefaultPreConfigParsedArgs, configResult, defaults, parsedArgs) {
220
+ console.log('Appium Configuration\n');
221
+ console.log('from defaults:\n');
222
+ console.dir(compactConfig(defaults));
223
+
224
+ if (configResult.config) {
225
+ console.log(`\nfrom config file at ${configResult.filepath}:\n`);
226
+ console.dir(compactConfig(configResult.config));
227
+ } else {
228
+ console.log(`\n(no configuration file loaded)`);
229
+ }
230
+
231
+ if (_lodash.default.isEmpty(nonDefaultPreConfigParsedArgs)) {
232
+ console.log(`\n(no CLI parameters provided)`);
233
+ } else {
234
+ console.log('\nvia CLI or function call:\n');
235
+ console.dir(compactConfig(nonDefaultPreConfigParsedArgs));
218
236
  }
237
+
238
+ console.log('\nfinal configuration:\n');
239
+ console.dir(compactConfig(parsedArgs));
219
240
  }
220
241
 
221
242
  async function validateTmpDir(tmpDir) {
222
243
  try {
223
- await (0, _appiumSupport.mkdirp)(tmpDir);
244
+ await _support.fs.mkdirp(tmpDir);
224
245
  } catch (e) {
225
246
  throw new Error(`We could not ensure that the temp dir you specified ` + `(${tmpDir}) exists. Please make sure it's writeable.`);
226
247
  }
227
- }require('source-map-support').install();
248
+ }
228
249
 
250
+ const rootDir = _support.fs.findRoot(__dirname);
229
251
 
230
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsInJlcXVpcmUiLCJwYXRoIiwicmVzb2x2ZSIsInJvb3REaXIiLCJBUFBJVU1fVkVSIiwidmVyc2lvbiIsIk1JTl9OT0RFX1ZFUlNJT04iLCJlbmdpbmVzIiwibm9kZSIsIkdJVF9NRVRBX1JPT1QiLCJHSVRfQklOQVJZIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiR0lUSFVCX0FQSSIsIkJVSUxEX0lORk8iLCJnZXROb2RlVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInByb2Nlc3MiLCJ1cGRhdGVCdWlsZEluZm8iLCJ1c2VHaXRodWJBcGlGYWxsYmFjayIsInNoYSIsImdldEdpdFJldiIsImJ1aWx0IiwiZ2V0R2l0VGltZXN0YW1wIiwiXyIsImlzRW1wdHkiLCJmcyIsImV4aXN0cyIsInN0ZG91dCIsImN3ZCIsInRyaW0iLCJpZ24iLCJyZXNCb2R5T2JqIiwiYXhpb3MiLCJnZXQiLCJoZWFkZXJzIiwiZGF0YSIsImlzQXJyYXkiLCJuYW1lIiwiY29tbWl0IiwiY29tbWl0U2hhIiwiY29tbWl0dGVyIiwiZGF0ZSIsImF1dGhvciIsImdldEJ1aWxkSW5mbyIsImNoZWNrTm9kZU9rIiwic2F0aXNmaWVzIiwibG9nZ2VyIiwiZXJyb3JBbmRUaHJvdyIsIndhcm5Ob2RlRGVwcmVjYXRpb25zIiwic2hvd0NvbmZpZyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0Tm9uRGVmYXVsdEFyZ3MiLCJwYXJzZXIiLCJhcmdzIiwibm9uRGVmYXVsdHMiLCJyYXdBcmciLCJyYXdBcmdzIiwiYXJnIiwiZGVzdCIsImRlZmF1bHRWYWx1ZSIsImNoZWNrVmFsaWRQb3J0IiwicG9ydCIsInBvcnROYW1lIiwiZXJyb3IiLCJ2YWxpZGF0ZVNlcnZlckFyZ3MiLCJleGNsdXNpdmVzIiwiZXhTZXQiLCJudW1Gb3VuZEluQXJncyIsIm9wdCIsImhhcyIsIkVycm9yIiwidmFsaWRhdGlvbnMiLCJjYWxsYmFja1BvcnQiLCJib290c3RyYXBQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsInJvYm90UG9ydCIsImJhY2tlbmRSZXRyaWVzIiwiciIsIm5vbkRlZmF1bHRBcmdzIiwidmFsaWRhdG9yIiwidG9QYWlycyIsInZhbGlkYXRlVG1wRGlyIiwidG1wRGlyIiwiZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsVUFBVSxHQUFHQyxPQUFPLENBQUNDLGNBQUtDLE9BQUwsQ0FBYUMsY0FBYixFQUFzQixjQUF0QixDQUFELENBQTFCOztBQUNBLE1BQU1DLFVBQVUsR0FBR0wsVUFBVSxDQUFDTSxPQUE5Qjs7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBR1AsVUFBVSxDQUFDUSxPQUFYLENBQW1CQyxJQUE1QztBQUVBLE1BQU1DLGFBQWEsR0FBRyxNQUF0QjtBQUNBLE1BQU1DLFVBQVUsR0FBSSxNQUFLQyxzQkFBT0MsU0FBUCxLQUFxQixNQUFyQixHQUE4QixFQUFHLEVBQTFEO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLDRDQUFuQjtBQUVBLE1BQU1DLFVBQVUsR0FBRztBQUNqQlQsRUFBQUEsT0FBTyxFQUFFRDtBQURRLENBQW5COztBQUlBLFNBQVNXLGNBQVQsR0FBMkI7QUFDekIsU0FBT0MsZ0JBQU9DLE1BQVAsQ0FBY0MsT0FBTyxDQUFDYixPQUF0QixDQUFQO0FBQ0Q7O0FBRUQsZUFBZWMsZUFBZixDQUFnQ0Msb0JBQW9CLEdBQUcsS0FBdkQsRUFBOEQ7QUFDNUQsUUFBTUMsR0FBRyxHQUFHLE1BQU1DLFNBQVMsQ0FBQ0Ysb0JBQUQsQ0FBM0I7O0FBQ0EsTUFBSSxDQUFDQyxHQUFMLEVBQVU7QUFDUjtBQUNEOztBQUNEUCxFQUFBQSxVQUFVLENBQUMsU0FBRCxDQUFWLEdBQXdCTyxHQUF4QjtBQUNBLFFBQU1FLEtBQUssR0FBRyxNQUFNQyxlQUFlLENBQUNILEdBQUQsRUFBTUQsb0JB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b0JBRlgsQ0FBTjtBQUdEO0FBQ0Y7O0FBRUQsUUFBTUssV0FBVyxHQUFHO0FBQ2xCVixJQUFBQSxJQUFJLEVBQUVELGNBRFk7QUFFbEJZLElBQUFBLFlBQVksRUFBRVosY0FGSTtBQUdsQmEsSUFBQUEsYUFBYSxFQUFFYixjQUhHO0FBSWxCYyxJQUFBQSxnQkFBZ0IsRUFBRWQsY0FKQTtBQUtsQmUsSUFBQUEsU0FBUyxFQUFFZixjQUxPO0FBTWxCZ0IsSUFBQUEsY0FBYyxFQUFHQyxDQUFELElBQU9BLENBQUMsSUFBSTtBQU5WLEdBQXBCO0FBU0EsUUFBTUMsY0FBYyxHQUFHM0IsaUJBQWlCLENBQUNDLE1BQUQsRUFBU0MsSUFBVCxDQUF4Qzs7QUFFQSxPQUFLLElBQUksQ0FBQ0ksR0FBRCxFQUFNc0IsU0FBTixDQUFULElBQTZCM0QsZ0JBQUU0RCxPQUFGLENBQVVULFdBQVYsQ0FBN0IsRUFBcUQ7QUFDbkQsUUFBSW5ELGdCQUFFaUQsR0FBRixDQUFNUyxjQUFOLEVBQXNCckIsR0FBdEIsQ0FBSixFQUFnQztBQUM5QixVQUFJLENBQUNzQixTQUFTLENBQUMxQixJQUFJLENBQUNJLEdBQUQsQ0FBTCxFQUFZQSxHQUFaLENBQWQsRUFBZ0M7QUFDOUIsY0FBTSxJQUFJYSxLQUFKLENBQVcsOEJBQTZCYixHQUFJLEtBQUlKLElBQUksQ0FBQ0ksR0FBRCxDQUFNLEVBQTFELENBQU47QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7QUFFRCxlQUFld0IsY0FBZixDQUErQkMsTUFBL0IsRUFBdUM7QUFDckMsTUFBSTtBQUNGLFVBQU0sMkJBQU9BLE1BQVAsQ0FBTjtBQUNELEdBRkQsQ0FFRSxPQUFPQyxDQUFQLEVBQVU7QUFDVixVQUFNLElBQUliLEtBQUosQ0FBVyxzREFBRCxHQUNDLElBQUdZLE1BQU8sNENBRHJCLENBQU47QUFFRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbWtkaXJwLCBmcywgc3lzdGVtIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcm9vdERpciB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cblxuY29uc3QgbnBtUGFja2FnZSA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKHJvb3REaXIsICdwYWNrYWdlLmpzb24nKSk7XG5jb25zdCBBUFBJVU1fVkVSID0gbnBtUGFja2FnZS52ZXJzaW9uO1xuY29uc3QgTUlOX05PREVfVkVSU0lPTiA9IG5wbVBhY2thZ2UuZW5naW5lcy5ub2RlO1xuXG5jb25zdCBHSVRfTUVUQV9ST09UID0gJy5naXQnO1xuY29uc3QgR0lUX0JJTkFSWSA9IGBnaXQke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG5jb25zdCBHSVRIVUJfQVBJID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bSc7XG5cbmNvbnN0IEJVSUxEX0lORk8gPSB7XG4gIHZlcnNpb246IEFQUElVTV9WRVIsXG59O1xuXG5mdW5jdGlvbiBnZXROb2RlVmVyc2lvbiAoKSB7XG4gIHJldHVybiBzZW12ZXIuY29lcmNlKHByb2Nlc3MudmVyc2lvbik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUJ1aWxkSW5mbyAodXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBzaGEgPSBhd2FpdCBnZXRHaXRSZXYodXNlR2l0aHViQXBpRmFsbGJhY2spO1xuICBpZiAoIXNoYSkge1xuICAgIHJldHVybjtcbiAgfVxuICBCVUlMRF9JTkZPWydnaXQtc2hhJ10gPSBzaGE7XG4gIGNvbnN0IGJ1aWx0ID0gYXdhaXQgZ2V0R2l0VGltZXN0YW1wKHNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2spO1xuICBpZiAoIV8uaXNFbXB0eShidWlsdCkpIHtcbiAgICBCVUlMRF9JTkZPLmJ1aWx0ID0gYnVpbHQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0UmV2ICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMocGF0aC5yZXNvbHZlKHJvb3REaXIsIEdJVF9NRVRBX1JPT1QpKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogcm9vdERpclxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L3RhZ3NgLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChfLmlzQXJyYXkocmVzQm9keU9iaikpIHtcbiAgICAgIGZvciAoY29uc3Qge25hbWUsIGNvbW1pdH0gb2YgcmVzQm9keU9iaikge1xuICAgICAgICBpZiAobmFtZSA9PT0gYHYke0FQUElVTV9WRVJ9YCAmJiBjb21taXQgJiYgY29tbWl0LnNoYSkge1xuICAgICAgICAgIHJldHVybiBjb21taXQuc2hhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRHaXRUaW1lc3RhbXAgKGNvbW1pdFNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHBhdGgucmVzb2x2ZShyb290RGlyLCBHSVRfTUVUQV9ST09UKSkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsnc2hvdycsICctcycsICctLWZvcm1hdD0lY2knLCBjb21taXRTaGFdLCB7XG4gICAgICAgIGN3ZDogcm9vdERpclxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2NvbW1pdHMvJHtjb21taXRTaGF9YCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWBcbiAgICAgIH1cbiAgICB9KSkuZGF0YTtcbiAgICBpZiAocmVzQm9keU9iaiAmJiByZXNCb2R5T2JqLmNvbW1pdCkge1xuICAgICAgaWYgKHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlciAmJiByZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIuZGF0ZSkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyLmRhdGU7XG4gICAgICB9XG4gICAgICBpZiAocmVzQm9keU9iai5jb21taXQuYXV0aG9yICYmIHJlc0JvZHlPYmouY29tbWl0LmF1dGhvci5kYXRlKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IuZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybiBNdXRhYmxlIG9iamVjdCBjb250YWluaW5nIEFwcGl1bSBidWlsZCBpbmZvcm1hdGlvbi4gQnkgZGVmYXVsdCBpdFxuICogb25seSBjb250YWlucyB0aGUgQXBwaXVtIHZlcnNpb24sIGJ1dCBpcyB1cGRhdGVkIHdpdGggdGhlIGJ1aWxkIHRpbWVzdGFtcFxuICogYW5kIGdpdCBjb21taXQgaGFzaCBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIGB1cGRhdGVCdWlsZEluZm9gIGlzIGNhbGxlZFxuICogYW5kIHN1Y2NlZWRzLlxuICovXG5mdW5jdGlvbiBnZXRCdWlsZEluZm8gKCkge1xuICByZXR1cm4gQlVJTERfSU5GTztcbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlT2sgKCkge1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgaWYgKCFzZW12ZXIuc2F0aXNmaWVzKHZlcnNpb24sIE1JTl9OT0RFX1ZFUlNJT04pKSB7XG4gICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYE5vZGUgdmVyc2lvbiBtdXN0IGJlICR7TUlOX05PREVfVkVSU0lPTn0uIEN1cnJlbnRseSAke3ZlcnNpb24udmVyc2lvbn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9kZURlcHJlY2F0aW9ucyAoKSB7XG4gIC8qKlxuICAgKiBVbmNvbW1lbnQgdGhpcyBzZWN0aW9uIHRvIGdldCBub2RlIHZlcnNpb24gZGVwcmVjYXRpb24gd2FybmluZ3NcbiAgICogQWxzbyBhZGQgdGVzdCBjYXNlcyB0byBjb25maWctc3BlY3MuanMgdG8gY292ZXIgdGhlIGNhc2VzIGFkZGVkXG4gICAqKi9cblxuICAvLyBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgLy8gaWYgKHZlcnNpb24ubWFqb3IgPCA4KSB7XG4gIC8vICAgbG9nZ2VyLndhcm4oYEFwcGl1bSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZiBub2RlIDwgJHt2ZXJzaW9uLm1ham9yfSBoYXMgYmVlbiBgICtcbiAgLy8gICAgICAgICAgICAgICAnZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFBsZWFzZSAnICtcbiAgLy8gICAgICAgICAgICAgICAndXBncmFkZSEnKTtcbiAgLy8gfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93Q29uZmlnICgpIHtcbiAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKHRydWUpO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShnZXRCdWlsZEluZm8oKSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uRGVmYXVsdEFyZ3MgKHBhcnNlciwgYXJncykge1xuICBsZXQgbm9uRGVmYXVsdHMgPSB7fTtcbiAgZm9yIChsZXQgcmF3QXJnIG9mIHBhcnNlci5yYXdBcmdzKSB7XG4gICAgbGV0IGFyZyA9IHJhd0FyZ1sxXS5kZXN0O1xuICAgIGlmIChhcmdzW2FyZ10gJiYgYXJnc1thcmddICE9PSByYXdBcmdbMV0uZGVmYXVsdFZhbHVlKSB7XG4gICAgICBub25EZWZhdWx0c1thcmddID0gYXJnc1thcmddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm9uRGVmYXVsdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVmFsaWRQb3J0IChwb3J0LCBwb3J0TmFtZSkge1xuICBpZiAocG9ydCA+IDAgJiYgcG9ydCA8IDY1NTM2KSByZXR1cm4gdHJ1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICBsb2dnZXIuZXJyb3IoYFBvcnQgJyR7cG9ydE5hbWV9JyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gNjU1MzYuIEN1cnJlbnRseSAke3BvcnR9YCk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTZXJ2ZXJBcmdzIChwYXJzZXIsIGFyZ3MpIHtcbiAgLy8gYXJndW1lbnRzIHRoYXQgY2Fubm90IGJvdGggYmUgc2V0XG4gIGxldCBleGNsdXNpdmVzID0gW1xuICAgIFsnbm9SZXNldCcsICdmdWxsUmVzZXQnXSxcbiAgICBbJ2lwYScsICdzYWZhcmknXSxcbiAgICBbJ2FwcCcsICdzYWZhcmknXSxcbiAgICBbJ2ZvcmNlSXBob25lJywgJ2ZvcmNlSXBhZCddLFxuICAgIFsnZGV2aWNlTmFtZScsICdkZWZhdWx0RGV2aWNlJ11cbiAgXTtcblxuICBmb3IgKGxldCBleFNldCBvZiBleGNsdXNpdmVzKSB7XG4gICAgbGV0IG51bUZvdW5kSW5BcmdzID0gMDtcbiAgICBmb3IgKGxldCBvcHQgb2YgZXhTZXQpIHtcbiAgICAgIGlmIChfLmhhcyhhcmdzLCBvcHQpICYmIGFyZ3Nbb3B0XSkge1xuICAgICAgICBudW1Gb3VuZEluQXJncysrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVtRm91bmRJbkFyZ3MgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBjYW4ndCBwYXNzIGluIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgZnJvbSB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHNldCAke0pTT04uc3RyaW5naWZ5KGV4U2V0KX0sIHNpbmNlIHRoZXkgYXJlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBtdXR1YWxseSBleGNsdXNpdmVgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB2YWxpZGF0aW9ucyA9IHtcbiAgICBwb3J0OiBjaGVja1ZhbGlkUG9ydCxcbiAgICBjYWxsYmFja1BvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGJvb3RzdHJhcFBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGNocm9tZWRyaXZlclBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIHJvYm90UG9ydDogY2hlY2tWYWxpZFBvcnQsXG4gICAgYmFja2VuZFJldHJpZXM6IChyKSA9PiByID49IDBcbiAgfTtcblxuICBjb25zdCBub25EZWZhdWx0QXJncyA9IGdldE5vbkRlZmF1bHRBcmdzKHBhcnNlciwgYXJncyk7XG5cbiAgZm9yIChsZXQgW2FyZywgdmFsaWRhdG9yXSBvZiBfLnRvUGFpcnModmFsaWRhdGlvbnMpKSB7XG4gICAgaWYgKF8uaGFzKG5vbkRlZmF1bHRBcmdzLCBhcmcpKSB7XG4gICAgICBpZiAoIXZhbGlkYXRvcihhcmdzW2FyZ10sIGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IGZvciBwYXJhbSAke2FyZ306ICR7YXJnc1thcmddfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVRtcERpciAodG1wRGlyKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXJwKHRtcERpcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdlIGNvdWxkIG5vdCBlbnN1cmUgdGhhdCB0aGUgdGVtcCBkaXIgeW91IHNwZWNpZmllZCBgICtcbiAgICAgICAgICAgICAgICAgICAgYCgke3RtcERpcn0pIGV4aXN0cy4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHdyaXRlYWJsZS5gKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBnZXRCdWlsZEluZm8sIHZhbGlkYXRlU2VydmVyQXJncywgY2hlY2tOb2RlT2ssIHNob3dDb25maWcsXG4gIHdhcm5Ob2RlRGVwcmVjYXRpb25zLCB2YWxpZGF0ZVRtcERpciwgZ2V0Tm9uRGVmYXVsdEFyZ3MsXG4gIGdldEdpdFJldiwgY2hlY2tWYWxpZFBvcnQsIEFQUElVTV9WRVIsIHVwZGF0ZUJ1aWxkSW5mbyxcbn07XG4iXSwiZmlsZSI6ImxpYi9jb25maWcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
252
+ exports.rootDir = rootDir;
253
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJucG1QYWNrYWdlIiwiZnMiLCJyZWFkUGFja2FnZUpzb25Gcm9tIiwiX19kaXJuYW1lIiwiQVBQSVVNX1ZFUiIsInZlcnNpb24iLCJNSU5fTk9ERV9WRVJTSU9OIiwiZW5naW5lcyIsIm5vZGUiLCJNSU5fTlBNX1ZFUlNJT04iLCJucG0iLCJHSVRfTUVUQV9ST09UIiwiR0lUX0JJTkFSWSIsInN5c3RlbSIsImlzV2luZG93cyIsIkdJVEhVQl9BUEkiLCJCVUlMRF9JTkZPIiwiZ2V0Tm9kZVZlcnNpb24iLCJzZW12ZXIiLCJjb2VyY2UiLCJwcm9jZXNzIiwiZ2V0TnBtVmVyc2lvbiIsInN0ZG91dCIsImV4ZWMiLCJ0cmltIiwidXBkYXRlQnVpbGRJbmZvIiwidXNlR2l0aHViQXBpRmFsbGJhY2siLCJzaGEiLCJnZXRHaXRSZXYiLCJidWlsZFRpbWVzdGFtcCIsImdldEdpdFRpbWVzdGFtcCIsImJ1aWx0IiwiZmluZEdpdFJvb3QiLCJmaW5kVXAiLCJjd2QiLCJyb290RGlyIiwidHlwZSIsImdpdFJvb3QiLCJpZ24iLCJheGlvcyIsImdldCIsImhlYWRlcnMiLCJkYXRhIiwib2JqZWN0IiwiY29tbWl0U2hhIiwidGFnZ2VyIiwiZGF0ZSIsImdldEJ1aWxkSW5mbyIsImNoZWNrTm9kZU9rIiwic2F0aXNmaWVzIiwiRXJyb3IiLCJjaGVja05wbU9rIiwibnBtVmVyc2lvbiIsIndhcm5Ob2RlRGVwcmVjYXRpb25zIiwic2hvd0J1aWxkSW5mbyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MiLCJwYXJzZWRBcmdzIiwiZmxhdHRlbiIsImFyZ3MiLCJhcmdTcGVjcyIsImdldEFsbEFyZ1NwZWNzIiwiZmxhdHRlbmVkIiwiXyIsInJlZHVjZSIsInZhbHVlcyIsImFjYyIsImFyZ1NwZWMiLCJoYXMiLCJkZXN0IiwidmFsdWUiLCJ0eXBlc0RpZmZlciIsImRlZmF1bHRzRnJvbVNjaGVtYSIsImRlZmF1bHRWYWx1ZUlzQXJyYXkiLCJpc0FycmF5IiwiYXJnc1ZhbHVlSXNBcnJheSIsImFycmF5c0RpZmZlciIsImd0Iiwic2l6ZSIsImRpZmZlcmVuY2UiLCJ2YWx1ZXNEaWZmZXIiLCJkZWZhdWx0SXNEZWZpbmVkIiwiaXNVbmRlZmluZWQiLCJhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXIiLCJvdmVyU29tZSIsIm5lZ2F0ZSIsImRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzRGlmZmVyIiwib3ZlckV2ZXJ5IiwiaXNOb3REZWZhdWx0IiwiZ2V0RGVmYXVsdHNGb3JTY2hlbWEiLCJwaWNrQnkiLCJfXyIsImtleSIsInNldCIsImNvbXBhY3RDb25maWciLCJwYXJ0aWFsIiwib21pdEJ5IiwiaXNPYmplY3QiLCJpc0VtcHR5Iiwic2hvd0NvbmZpZyIsIm5vbkRlZmF1bHRQcmVDb25maWdQYXJzZWRBcmdzIiwiY29uZmlnUmVzdWx0IiwiZGVmYXVsdHMiLCJkaXIiLCJjb25maWciLCJmaWxlcGF0aCIsInZhbGlkYXRlVG1wRGlyIiwidG1wRGlyIiwibWtkaXJwIiwiZSIsImZpbmRSb290Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtzeXN0ZW0sIGZzfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7ZXhlY30gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5pbXBvcnQge2dldERlZmF1bHRzRm9yU2NoZW1hLCBnZXRBbGxBcmdTcGVjc30gZnJvbSAnLi9zY2hlbWEvc2NoZW1hJztcblxuY29uc3QgbnBtUGFja2FnZSA9IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oX19kaXJuYW1lKTtcblxuY29uc3QgQVBQSVVNX1ZFUiA9IG5wbVBhY2thZ2UudmVyc2lvbjtcbmNvbnN0IE1JTl9OT0RFX1ZFUlNJT04gPSBucG1QYWNrYWdlLmVuZ2luZXMubm9kZTtcbmNvbnN0IE1JTl9OUE1fVkVSU0lPTiA9IG5wbVBhY2thZ2UuZW5naW5lcy5ucG07XG5cbmNvbnN0IEdJVF9NRVRBX1JPT1QgPSAnLmdpdCc7XG5jb25zdCBHSVRfQklOQVJZID0gYGdpdCR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbmNvbnN0IEdJVEhVQl9BUEkgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hcHBpdW0vYXBwaXVtJztcblxuLyoqXG4gKiBAdHlwZSB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5CdWlsZEluZm99XG4gKi9cbmNvbnN0IEJVSUxEX0lORk8gPSB7XG4gIHZlcnNpb246IEFQUElVTV9WRVIsXG59O1xuXG5mdW5jdGlvbiBnZXROb2RlVmVyc2lvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KCdzZW12ZXInKS5TZW1WZXJ9ICovIChzZW12ZXIuY29lcmNlKHByb2Nlc3MudmVyc2lvbikpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdmVyc2lvbiBvZiBgbnBtYFxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TnBtVmVyc2lvbigpIHtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKHN5c3RlbS5pc1dpbmRvd3MoKSA/ICducG0uY21kJyA6ICducG0nLCBbJy0tdmVyc2lvbiddKTtcbiAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBbdXNlR2l0aHViQXBpRmFsbGJhY2tdXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUJ1aWxkSW5mbyh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IHNoYSA9IGF3YWl0IGdldEdpdFJldih1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmICghc2hhKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEJVSUxEX0lORk9bJ2dpdC1zaGEnXSA9IHNoYTtcbiAgY29uc3QgYnVpbGRUaW1lc3RhbXAgPSBhd2FpdCBnZXRHaXRUaW1lc3RhbXAoc2hhLCB1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmIChidWlsZFRpbWVzdGFtcCkge1xuICAgIEJVSUxEX0lORk8uYnVpbHQgPSBidWlsZFRpbWVzdGFtcDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBHaXQgbWV0YWRhdGEgZGlyIChzZWUgYEdJVF9NRVRBX1JPT1RgKVxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgQXBwaXVtIGNhbm5vdCBhc3N1bWUgYHBhY2thZ2UuanNvbmAgYW5kIGAuZ2l0YCBhcmUgaW4gdGhlIHNhbWVcbiAqIGRpcmVjdG9yeS4gIE1vbm9yZXBvcywgc2VlP1xuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nfHVuZGVmaW5lZD59IFBhdGggdG8gZGlyIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kR2l0Um9vdCgpIHtcbiAgcmV0dXJuIGF3YWl0IGZpbmRVcChHSVRfTUVUQV9ST09ULCB7Y3dkOiByb290RGlyLCB0eXBlOiAnZGlyZWN0b3J5J30pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VzZUdpdGh1YkFwaUZhbGxiYWNrXVxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEdpdFJldih1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBmaW5kR2l0Um9vdCgpO1xuICBpZiAoZ2l0Um9vdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgaWYgKCF1c2VHaXRodWJBcGlGYWxsYmFjaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gSWYgdGhlIHBhY2thZ2UgZm9sZGVyIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvc2l0b3J5XG4gIC8vIHRoZW4gZmV0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgdGFnIGluZm8gZnJvbSBHaXRIdWJcbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2dpdC9yZWZzL3RhZ3MvYXBwaXVtQCR7QVBQSVVNX1ZFUn1gLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICkuZGF0YT8ub2JqZWN0Py5zaGE7XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbW1pdFNoYVxuICogQHBhcmFtIHtib29sZWFufSBbdXNlR2l0aHViQXBpRmFsbGJhY2tdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc/Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0VGltZXN0YW1wKGNvbW1pdFNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBnaXRSb290ID0gYXdhaXQgZmluZEdpdFJvb3QoKTtcbiAgaWYgKGdpdFJvb3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsnc2hvdycsICctcycsICctLWZvcm1hdD0lY2knLCBjb21taXRTaGFdLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgaWYgKCF1c2VHaXRodWJBcGlGYWxsYmFjaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2dpdC90YWdzLyR7Y29tbWl0U2hhfWAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS5kYXRhPy50YWdnZXI/LmRhdGU7XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTXV0YWJsZSBvYmplY3QgY29udGFpbmluZyBBcHBpdW0gYnVpbGQgaW5mb3JtYXRpb24uIEJ5IGRlZmF1bHQgaXRcbiAqIG9ubHkgY29udGFpbnMgdGhlIEFwcGl1bSB2ZXJzaW9uLCBidXQgaXMgdXBkYXRlZCB3aXRoIHRoZSBidWlsZCB0aW1lc3RhbXBcbiAqIGFuZCBnaXQgY29tbWl0IGhhc2ggYXN5bmNocm9ub3VzbHkgYXMgc29vbiBhcyBgdXBkYXRlQnVpbGRJbmZvYCBpcyBjYWxsZWRcbiAqIGFuZCBzdWNjZWVkcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkJ1aWxkSW5mb31cbiAqL1xuZnVuY3Rpb24gZ2V0QnVpbGRJbmZvKCkge1xuICByZXR1cm4gQlVJTERfSU5GTztcbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlT2soKSB7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXROb2RlVmVyc2lvbigpO1xuICBpZiAoIXNlbXZlci5zYXRpc2ZpZXModmVyc2lvbiwgTUlOX05PREVfVkVSU0lPTikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTm9kZSB2ZXJzaW9uIG11c3QgYmUgYXQgbGVhc3QgJHtNSU5fTk9ERV9WRVJTSU9OfTsgY3VycmVudCBpcyAke3ZlcnNpb24udmVyc2lvbn1gXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tOcG1PaygpIHtcbiAgY29uc3QgbnBtVmVyc2lvbiA9IGF3YWl0IGdldE5wbVZlcnNpb24oKTtcbiAgaWYgKCFzZW12ZXIuc2F0aXNmaWVzKG5wbVZlcnNpb24sIE1JTl9OUE1fVkVSU0lPTikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgbnBtIHZlcnNpb24gbXVzdCBiZSBhdCBsZWFzdCAke01JTl9OUE1fVkVSU0lPTn07IGN1cnJlbnQgaXMgJHtucG1WZXJzaW9ufS4gUnVuIFwibnBtIGluc3RhbGwgLWcgbnBtXCIgdG8gdXBncmFkZS5gXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9kZURlcHJlY2F0aW9ucygpIHtcbiAgLyoqXG4gICAqIFVuY29tbWVudCB0aGlzIHNlY3Rpb24gdG8gZ2V0IG5vZGUgdmVyc2lvbiBkZXByZWNhdGlvbiB3YXJuaW5nc1xuICAgKiBBbHNvIGFkZCB0ZXN0IGNhc2VzIHRvIGNvbmZpZy1zcGVjcy5qcyB0byBjb3ZlciB0aGUgY2FzZXMgYWRkZWRcbiAgICoqL1xuICAvLyBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgLy8gaWYgKHZlcnNpb24ubWFqb3IgPCA4KSB7XG4gIC8vICAgbG9nZ2VyLndhcm4oYEFwcGl1bSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZiBub2RlIDwgJHt2ZXJzaW9uLm1ham9yfSBoYXMgYmVlbiBgICtcbiAgLy8gICAgICAgICAgICAgICAnZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFBsZWFzZSAnICtcbiAgLy8gICAgICAgICAgICAgICAndXBncmFkZSEnKTtcbiAgLy8gfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93QnVpbGRJbmZvKCkge1xuICBhd2FpdCB1cGRhdGVCdWlsZEluZm8odHJ1ZSk7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGdldEJ1aWxkSW5mbygpKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxufVxuXG4vKipcbiAqIFJldHVybnMgay92IHBhaXJzIG9mIHNlcnZlciBhcmd1bWVudHMgd2hpY2ggYXJlIF9ub3RfIHRoZSBkZWZhdWx0cy5cbiAqIEBwYXJhbSB7QXJnc30gcGFyc2VkQXJnc1xuICogQHJldHVybnMge0FyZ3N9XG4gKi9cbmZ1bmN0aW9uIGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzKHBhcnNlZEFyZ3MpIHtcbiAgLyoqXG4gICAqIEZsYXR0ZW5zIHBhcnNlZCBhcmdzIGludG8gYSBzaW5nbGUgbGV2ZWwgb2JqZWN0IGZvciBjb21wYXJpc29uIHdpdGhcbiAgICogZmxhdHRlbmVkIGRlZmF1bHRzIGFjcm9zcyBzZXJ2ZXIgYXJncyBhbmQgZXh0ZW5zaW9uIGFyZ3MuXG4gICAqIEBwYXJhbSB7QXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgeyB2YWx1ZTogYW55LCBhcmdTcGVjOiBBcmdTcGVjIH0+fVxuICAgKi9cbiAgY29uc3QgZmxhdHRlbiA9IChhcmdzKSA9PiB7XG4gICAgY29uc3QgYXJnU3BlY3MgPSBnZXRBbGxBcmdTcGVjcygpO1xuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IF8ucmVkdWNlKFxuICAgICAgWy4uLmFyZ1NwZWNzLnZhbHVlcygpXSxcbiAgICAgIChhY2MsIGFyZ1NwZWMpID0+IHtcbiAgICAgICAgaWYgKF8uaGFzKGFyZ3MsIGFyZ1NwZWMuZGVzdCkpIHtcbiAgICAgICAgICBhY2NbYXJnU3BlYy5kZXN0XSA9IHt2YWx1ZTogXy5nZXQoYXJncywgYXJnU3BlYy5kZXN0KSwgYXJnU3BlY307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHsgdmFsdWU6IGFueSwgYXJnU3BlYzogQXJnU3BlYyB9Pn0gKi8gKHt9KVxuICAgICk7XG5cbiAgICByZXR1cm4gZmxhdHRlbmVkO1xuICB9O1xuXG4gIGNvbnN0IGFyZ3MgPSBmbGF0dGVuKHBhcnNlZEFyZ3MpO1xuXG4gIC8vIGhvcGVmdWxseSB0aGVzZSBmdW5jdGlvbiBuYW1lcyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoXG4gIGNvbnN0IHR5cGVzRGlmZmVyID0gLyoqIEBwYXJhbSB7c3RyaW5nfSBkZXN0ICovIChkZXN0KSA9PlxuICAgIHR5cGVvZiBhcmdzW2Rlc3RdLnZhbHVlICE9PSB0eXBlb2YgZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdO1xuXG4gIGNvbnN0IGRlZmF1bHRWYWx1ZUlzQXJyYXkgPSAvKiogQHBhcmFtIHtzdHJpbmd9IGRlc3QgKi8gKGRlc3QpID0+XG4gICAgXy5pc0FycmF5KGRlZmF1bHRzRnJvbVNjaGVtYVtkZXN0XSk7XG5cbiAgY29uc3QgYXJnc1ZhbHVlSXNBcnJheSA9IC8qKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAqLyAoZGVzdCkgPT4gXy5pc0FycmF5KGFyZ3NbZGVzdF0udmFsdWUpO1xuXG4gIGNvbnN0IGFycmF5c0RpZmZlciA9IC8qKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAqLyAoZGVzdCkgPT5cbiAgICBfLmd0KF8uc2l6ZShfLmRpZmZlcmVuY2UoYXJnc1tkZXN0XS52YWx1ZSwgZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKSksIDApO1xuXG4gIGNvbnN0IHZhbHVlc0RpZmZlciA9IC8qKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAqLyAoZGVzdCkgPT5cbiAgICBhcmdzW2Rlc3RdLnZhbHVlICE9PSBkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF07XG5cbiAgY29uc3QgZGVmYXVsdElzRGVmaW5lZCA9IC8qKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAqLyAoZGVzdCkgPT5cbiAgICAhXy5pc1VuZGVmaW5lZChkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF0pO1xuXG4gIC8vIG5vdGUgdGhhdCBgXy5vdmVyRXZlcnlgIGlzIGxpa2UgYW4gXCJBTkRcIiwgYW5kIGBfLm92ZXJTb21lYCBpcyBsaWtlIGFuIFwiT1JcIlxuXG4gIGNvbnN0IGFyZ1ZhbHVlTm90QXJyYXlPckFycmF5c0RpZmZlciA9IF8ub3ZlclNvbWUoW18ubmVnYXRlKGFyZ3NWYWx1ZUlzQXJyYXkpLCBhcnJheXNEaWZmZXJdKTtcblxuICBjb25zdCBkZWZhdWx0VmFsdWVOb3RBcnJheUFuZFZhbHVlc0RpZmZlciA9IF8ub3ZlckV2ZXJ5KFtcbiAgICBfLm5lZ2F0ZShkZWZhdWx0VmFsdWVJc0FycmF5KSxcbiAgICB2YWx1ZXNEaWZmZXIsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBUaGlzIHVzZWQgdG8gYmUgYSBoaWRlb3VzIGNvbmRpdGlvbmFsLCBidXQgaXQncyBicm9rZW4gdXAgaW50byBhIGhpZGVvdXMgZnVuY3Rpb24gaW5zdGVhZC5cbiAgICogaG9wZWZ1bGx5IHRoaXMgbWFrZXMgdGhpbmdzIGEgbGl0dGxlIG1vcmUgdW5kZXJzdGFuZGFibGUuXG4gICAqIC0gY2hlY2tzIGlmIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGRlZmluZWRcbiAgICogLSBpZiBzbywgYW5kIHRoZSBkZWZhdWx0IGlzIG5vdCBhbiBhcnJheTpcbiAgICogICAtIGVuc3VyZXMgdGhlIHR5cGVzIGFyZSB0aGUgc2FtZVxuICAgKiAgIC0gZW5zdXJlcyB0aGUgdmFsdWVzIGFyZSBlcXVhbFxuICAgKiAtIGlmIHNvLCBhbmQgdGhlIGRlZmF1bHQgaXMgYW4gYXJyYXk6XG4gICAqICAgLSBlbnN1cmVzIHRoZSBhcmdzIHZhbHVlIGlzIGFuIGFycmF5XG4gICAqICAgLSBlbnN1cmVzIHRoZSBhcmdzIHZhbHVlcyBkbyBub3QgZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgdmFsdWVzXG4gICAqIEB0eXBlIHsoZGVzdDogc3RyaW5nKSA9PiBib29sZWFufVxuICAgKi9cbiAgY29uc3QgaXNOb3REZWZhdWx0ID0gXy5vdmVyRXZlcnkoW1xuICAgIGRlZmF1bHRJc0RlZmluZWQsXG4gICAgXy5vdmVyU29tZShbXG4gICAgICB0eXBlc0RpZmZlcixcbiAgICAgIF8ub3ZlckV2ZXJ5KFtkZWZhdWx0VmFsdWVJc0FycmF5LCBhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXJdKSxcbiAgICAgIGRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzRGlmZmVyLFxuICAgIF0pLFxuICBdKTtcblxuICBjb25zdCBkZWZhdWx0c0Zyb21TY2hlbWEgPSBnZXREZWZhdWx0c0ZvclNjaGVtYSh0cnVlKTtcblxuICByZXR1cm4gXy5yZWR1Y2UoXG4gICAgXy5waWNrQnkoYXJncywgKF9fLCBrZXkpID0+IGlzTm90RGVmYXVsdChrZXkpKSxcbiAgICAvLyBleHBsb2RlcyB0aGUgZmxhdHRlbmVkIG9iamVjdCBiYWNrIGludG8gbmVzdGVkIG9uZVxuICAgIChhY2MsIHt2YWx1ZSwgYXJnU3BlY30pID0+IF8uc2V0KGFjYywgYXJnU3BlYy5kZXN0LCB2YWx1ZSksXG4gICAgLyoqIEB0eXBlIHtBcmdzfSAqLyAoe30pXG4gICk7XG59XG5cbi8qKlxuICogQ29tcGFjdHMgYW4gb2JqZWN0IGZvciB7QGxpbmsgc2hvd0NvbmZpZ306XG4gKiAxLiBSZW1vdmVzIGBzdWJjb21tYW5kYCBrZXkvdmFsdWVcbiAqIDIuIFJlbW92ZXMgYHVuZGVmaW5lZGAgdmFsdWVzXG4gKiAzLiBSZW1vdmVzIGVtcHR5IG9iamVjdHMgKGJ1dCBub3QgYGZhbHNlYCB2YWx1ZXMpXG4gKiBEb2VzIG5vdCBvcGVyYXRlIHJlY3Vyc2l2ZWx5LlxuICovXG5jb25zdCBjb21wYWN0Q29uZmlnID0gXy5wYXJ0aWFsKFxuICBfLm9taXRCeSxcbiAgXyxcbiAgKHZhbHVlLCBrZXkpID0+XG4gICAga2V5ID09PSAnc3ViY29tbWFuZCcgfHwgXy5pc1VuZGVmaW5lZCh2YWx1ZSkgfHwgKF8uaXNPYmplY3QodmFsdWUpICYmIF8uaXNFbXB0eSh2YWx1ZSkpXG4pO1xuXG4vKipcbiAqIFNob3dzIGEgYnJlYWtkb3duIG9mIHRoZSBjdXJyZW50IGNvbmZpZyBhZnRlciBDTEkgcGFyYW1zLCBjb25maWcgZmlsZSBsb2FkZWQgJiBkZWZhdWx0cyBhcHBsaWVkLlxuICpcbiAqIFRoZSBhY3R1YWwgc2hhcGUgb2YgYHByZUNvbmZpZ1BhcnNlZEFyZ3NgIGFuZCBgZGVmYXVsdHNgIGRvZXMgbm90IG1hdHRlciBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZnVuY3Rpb24sXG4gKiBidXQgaXQncyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgd2l0aCB2YWx1ZXMgb2YgdHlwZSB7QGxpbmsgUGFyc2VkQXJnc30gYW5kIGBEZWZhdWx0VmFsdWVzPHRydWU+YCwgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIEBwYXJhbSB7UGFydGlhbDxQYXJzZWRBcmdzPn0gbm9uRGVmYXVsdFByZUNvbmZpZ1BhcnNlZEFyZ3MgLSBQYXJzZWQgQ0xJIGFyZ3MgKG9yIHBhcmFtIHRvIGBpbml0KClgKSBiZWZvcmUgY29uZmlnICYgZGVmYXVsdHMgYXBwbGllZFxuICogQHBhcmFtIHtpbXBvcnQoJy4vY29uZmlnLWZpbGUnKS5SZWFkQ29uZmlnRmlsZVJlc3VsdH0gY29uZmlnUmVzdWx0IC0gUmVzdWx0IG9mIGF0dGVtcHRpbmcgdG8gbG9hZCBhIGNvbmZpZyBmaWxlLiAgX011c3RfIGJlIG5vcm1hbGl6ZWRcbiAqIEBwYXJhbSB7UGFydGlhbDxQYXJzZWRBcmdzPn0gZGVmYXVsdHMgLSBDb25maWd1cmF0aW9uIGRlZmF1bHRzIGZyb20gc2NoZW1hc1xuICogQHBhcmFtIHtQYXJzZWRBcmdzfSBwYXJzZWRBcmdzIC0gRW50aXJlIHBhcnNlZCBhcmdzIG9iamVjdFxuICovXG5mdW5jdGlvbiBzaG93Q29uZmlnKG5vbkRlZmF1bHRQcmVDb25maWdQYXJzZWRBcmdzLCBjb25maWdSZXN1bHQsIGRlZmF1bHRzLCBwYXJzZWRBcmdzKSB7XG4gIGNvbnNvbGUubG9nKCdBcHBpdW0gQ29uZmlndXJhdGlvblxcbicpO1xuICBjb25zb2xlLmxvZygnZnJvbSBkZWZhdWx0czpcXG4nKTtcbiAgY29uc29sZS5kaXIoY29tcGFjdENvbmZpZyhkZWZhdWx0cykpO1xuICBpZiAoY29uZmlnUmVzdWx0LmNvbmZpZykge1xuICAgIGNvbnNvbGUubG9nKGBcXG5mcm9tIGNvbmZpZyBmaWxlIGF0ICR7Y29uZmlnUmVzdWx0LmZpbGVwYXRofTpcXG5gKTtcbiAgICBjb25zb2xlLmRpcihjb21wYWN0Q29uZmlnKGNvbmZpZ1Jlc3VsdC5jb25maWcpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhgXFxuKG5vIGNvbmZpZ3VyYXRpb24gZmlsZSBsb2FkZWQpYCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShub25EZWZhdWx0UHJlQ29uZmlnUGFyc2VkQXJncykpIHtcbiAgICBjb25zb2xlLmxvZyhgXFxuKG5vIENMSSBwYXJhbWV0ZXJzIHByb3ZpZGVkKWApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCdcXG52aWEgQ0xJIG9yIGZ1bmN0aW9uIGNhbGw6XFxuJyk7XG4gICAgY29uc29sZS5kaXIoY29tcGFjdENvbmZpZyhub25EZWZhdWx0UHJlQ29uZmlnUGFyc2VkQXJncykpO1xuICB9XG4gIGNvbnNvbGUubG9nKCdcXG5maW5hbCBjb25maWd1cmF0aW9uOlxcbicpO1xuICBjb25zb2xlLmRpcihjb21wYWN0Q29uZmlnKHBhcnNlZEFyZ3MpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG1wRGlyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlVG1wRGlyKHRtcERpcikge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLm1rZGlycCh0bXBEaXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFdlIGNvdWxkIG5vdCBlbnN1cmUgdGhhdCB0aGUgdGVtcCBkaXIgeW91IHNwZWNpZmllZCBgICtcbiAgICAgICAgYCgke3RtcERpcn0pIGV4aXN0cy4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHdyaXRlYWJsZS5gXG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCByb290RGlyID0gZnMuZmluZFJvb3QoX19kaXJuYW1lKTtcblxuZXhwb3J0IHtcbiAgZ2V0QnVpbGRJbmZvLFxuICBjaGVja05vZGVPayxcbiAgc2hvd0J1aWxkSW5mbyxcbiAgd2Fybk5vZGVEZXByZWNhdGlvbnMsXG4gIHZhbGlkYXRlVG1wRGlyLFxuICBnZXROb25EZWZhdWx0U2VydmVyQXJncyxcbiAgZ2V0R2l0UmV2LFxuICBBUFBJVU1fVkVSLFxuICB1cGRhdGVCdWlsZEluZm8sXG4gIHNob3dDb25maWcsXG4gIHJvb3REaXIsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLlBhcnNlZEFyZ3N9IFBhcnNlZEFyZ3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkFyZ3N9IEFyZ3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vc2NoZW1hL2FyZy1zcGVjJykuQXJnU3BlY30gQXJnU3BlY1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLFdBQUEsQ0FBR0MsbUJBQUgsQ0FBdUJDLFNBQXZCLENBQW5COztBQUVBLE1BQU1DLFVBQVUsR0FBR0osVUFBVSxDQUFDSyxPQUE5Qjs7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBR04sVUFBVSxDQUFDTyxPQUFYLENBQW1CQyxJQUE1QztBQUNBLE1BQU1DLGVBQWUsR0FBR1QsVUFBVSxDQUFDTyxPQUFYLENBQW1CRyxHQUEzQztBQUVBLE1BQU1DLGFBQWEsR0FBRyxNQUF0QjtBQUNBLE1BQU1DLFVBQVUsR0FBSSxNQUFLQyxlQUFBLENBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFBRyxFQUExRDtBQUNBLE1BQU1DLFVBQVUsR0FBRyw0Q0FBbkI7QUFLQSxNQUFNQyxVQUFVLEdBQUc7RUFDakJYLE9BQU8sRUFBRUQ7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
@@ -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":"AAEA;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,mCAAoC;AAEpC;;GAEG;AACH,yCAA0C;AAE1C;;GAEG;AACH,oCAAqC;AAMrC;;;;GAME;AAMF;;;;;;;;;;;;GAcE;AAEF;;GAEG;AACH,6CAAqF;AAErF;;GAEG;AACH,gDAA6F;AAE7F,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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEUklWRVJfVFlQRSIsIlBMVUdJTl9UWVBFIiwiU0VSVkVSX1NVQkNPTU1BTkQiLCJVU0VfQUxMX1BMVUdJTlMiLCJLTk9XTl9QTFVHSU5TIiwiT2JqZWN0IiwiZnJlZXplIiwiaW1hZ2VzIiwiS05PV05fRFJJVkVSUyIsInVpYXV0b21hdG9yMiIsInhjdWl0ZXN0IiwieW91aWVuZ2luZSIsIndpbmRvd3MiLCJtYWMiLCJtYWMyIiwiZXNwcmVzc28iLCJ0aXplbiIsImZsdXR0ZXIiLCJzYWZhcmkiLCJnZWNrbyIsIkNBQ0hFX0RJUl9SRUxBVElWRV9QQVRIIiwicGF0aCIsImpvaW4iLCJQS0dfSEFTSEZJTEVfUkVMQVRJVkVfUEFUSCIsIkVYVF9TVUJDT01NQU5EX0xJU1QiLCJFWFRfU1VCQ09NTUFORF9JTlNUQUxMIiwiRVhUX1NVQkNPTU1BTkRfVU5JTlNUQUxMIiwiRVhUX1NVQkNPTU1BTkRfVVBEQVRFIiwiRVhUX1NVQkNPTU1BTkRfUlVOIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHR5cGUgZm9yIGRyaXZlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IERSSVZFUl9UWVBFID0gJ2RyaXZlcic7XG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0eXBlIGZvciBwbHVnaW5zXG4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fVFlQRSA9ICdwbHVnaW4nO1xuXG4vKipcbiAqIFRoZSBgc2VydmVyYCBjb21tYW5kIG9mIHRoZSBgYXBwaXVtYCBDTElcbiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZFUl9TVUJDT01NQU5EID0gJ3NlcnZlcic7XG5cbi8qKlxuICogVGhlIHZhbHVlIG9mIGAtLXVzZS1wbHVnaW5zYCBpZiBfYWxsXyBwbHVnaW5zIHNob3VsZCBiZSBsb2FkZWRcbiAqL1xuZXhwb3J0IGNvbnN0IFVTRV9BTExfUExVR0lOUyA9ICdhbGwnO1xuXG4vLyBUaGlzIGlzIGEgbWFwIG9mIHBsdWdpbiBuYW1lcyB0byBucG0gcGFja2FnZXMgcmVwcmVzZW50aW5nIHRob3NlIHBsdWdpbnMuXG4vLyBUaGUgcGx1Z2lucyBpbiB0aGlzIGxpc3Qgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIENMSSBzbyB1c2VycyBjYW4ganVzdFxuLy8gdHlwZSAnYXBwaXVtIHBsdWdpbiBpbnN0YWxsICduYW1lJycsIHJhdGhlciB0aGFuIGhhdmluZyB0byBzcGVjaWZ5IHRoZSBmdWxsXG4vLyBucG0gcGFja2FnZS4gSS5lLiwgdGhlc2UgYXJlIHRoZSBvZmZpY2lhbGx5IHJlY29nbml6ZWQgcGx1Z2lucy5cbmV4cG9ydCBjb25zdCBLTk9XTl9QTFVHSU5TID0gT2JqZWN0LmZyZWV6ZShcbiAgLyoqIEB0eXBlIHtjb25zdH0gKi8gKHtcbiAgICBpbWFnZXM6ICdAYXBwaXVtL2ltYWdlcy1wbHVnaW4nLFxuICAgICdleGVjdXRlLWRyaXZlcic6ICdAYXBwaXVtL2V4ZWN1dGUtZHJpdmVyLXBsdWdpbicsXG4gICAgJ3JlbGF4ZWQtY2Fwcyc6ICdAYXBwaXVtL3JlbGF4ZWQtY2Fwcy1wbHVnaW4nLFxuICB9KVxuKTtcblxuLy8gVGhpcyBpcyBhIG1hcCBvZiBkcml2ZXIgbmFtZXMgdG8gbnBtIHBhY2thZ2VzIHJlcHJlc2VudGluZyB0aG9zZSBkcml2ZXJzLlxuLy8gVGhlIGRyaXZlcnMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBDTEkgc28gdXNlcnMgY2FuIGp1c3Rcbi8vIHR5cGUgJ2FwcGl1bSBkcml2ZXIgaW5zdGFsbCAnbmFtZScnLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgZnVsbFxuLy8gbnBtIHBhY2thZ2UuIEkuZS4sIHRoZXNlIGFyZSB0aGUgb2ZmaWNpYWxseSByZWNvZ25pemVkIGRyaXZlcnMuXG5leHBvcnQgY29uc3QgS05PV05fRFJJVkVSUyA9IE9iamVjdC5mcmVlemUoXG4gIC8qKiBAdHlwZSB7Y29uc3R9ICovICh7XG4gICAgdWlhdXRvbWF0b3IyOiAnYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXInLFxuICAgIHhjdWl0ZXN0OiAnYXBwaXVtLXhjdWl0ZXN0LWRyaXZlcicsXG4gICAgeW91aWVuZ2luZTogJ2FwcGl1bS15b3VpZW5naW5lLWRyaXZlcicsXG4gICAgd2luZG93czogJ2FwcGl1bS13aW5kb3dzLWRyaXZlcicsXG4gICAgbWFjOiAnYXBwaXVtLW1hYy1kcml2ZXInLFxuICAgIG1hYzI6ICdhcHBpdW0tbWFjMi1kcml2ZXInLFxuICAgIGVzcHJlc3NvOiAnYXBwaXVtLWVzcHJlc3NvLWRyaXZlcicsXG4gICAgdGl6ZW46ICdhcHBpdW0tdGl6ZW4tZHJpdmVyJyxcbiAgICBmbHV0dGVyOiAnYXBwaXVtLWZsdXR0ZXItZHJpdmVyJyxcbiAgICBzYWZhcmk6ICdhcHBpdW0tc2FmYXJpLWRyaXZlcicsXG4gICAgZ2Vja286ICdhcHBpdW0tZ2Vja29kcml2ZXInLFxuICB9KVxuKTtcblxuLyoqXG4gKiBSZWxhdGl2ZSBwYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIGFueSBBcHBpdW0gaW50ZXJuYWwgZmlsZXNcbiAqL1xuZXhwb3J0IGNvbnN0IENBQ0hFX0RJUl9SRUxBVElWRV9QQVRIID0gcGF0aC5qb2luKCdub2RlX21vZHVsZXMnLCAnLmNhY2hlJywgJ2FwcGl1bScpO1xuXG4vKipcbiAqIFJlbGF0aXZlIHBhdGggdG8gaGFzaGZpbGUgKGZyb20gYEFQUElVTV9IT01FYCkgb2YgY29uc3VtaW5nIHByb2plY3QncyBgcGFja2FnZS5qc29uYCAoaWYgaXQgZXhpc3RzKVxuICovXG5leHBvcnQgY29uc3QgUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEggPSBwYXRoLmpvaW4oQ0FDSEVfRElSX1JFTEFUSVZFX1BBVEgsICdwYWNrYWdlLmhhc2gnKTtcblxuZXhwb3J0IGNvbnN0IEVYVF9TVUJDT01NQU5EX0xJU1QgPSAnbGlzdCc7XG5leHBvcnQgY29uc3QgRVhUX1NVQkNPTU1BTkRfSU5TVEFMTCA9ICdpbnN0YWxsJztcbmV4cG9ydCBjb25zdCBFWFRfU1VCQ09NTUFORF9VTklOU1RBTEwgPSAndW5pbnN0YWxsJztcbmV4cG9ydCBjb25zdCBFWFRfU1VCQ09NTUFORF9VUERBVEUgPSAndXBkYXRlJztcbmV4cG9ydCBjb25zdCBFWFRfU1VCQ09NTUFORF9SVU4gPSAncnVuJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFLTyxNQUFNQSxXQUFXLEdBQUcsUUFBcEI7O0FBS0EsTUFBTUMsV0FBVyxHQUFHLFFBQXBCOztBQUtBLE1BQU1DLGlCQUFpQixHQUFHLFFBQTFCOztBQUtBLE1BQU1DLGVBQWUsR0FBRyxLQUF4Qjs7QUFNQSxNQUFNQyxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUNMO0VBQ3BCQyxNQUFNLEVBQUUsdUJBRFk7RUFFcEIsa0JBQWtCLCtCQUZFO0VBR3BCLGdCQUFnQjtBQUhJLENBREssQ0FBdEI7O0FBWUEsTUFBTUMsYUFBYSxHQUFHSCxNQUFNLENBQUNDLE1BQVAsQ0FDTDtFQUNwQkcsWUFBWSxFQUFFLDRCQURNO0VBRXBCQyxRQUFRLEVBQUUsd0JBRlU7RUFHcEJDLFVBQVUsRUFBRSwwQkFIUTtFQUlwQkMsT0FBTyxFQUFFLHVCQUpXO0VBS3BCQyxHQUFHLEVBQUUsbUJBTGU7RUFNcEJDLElBQUksRUFBRSxvQkFOYztFQU9wQkMsUUFBUSxFQUFFLHdCQVBVO0VBUXBCQyxLQUFLLEVBQUUscUJBUmE7RUFTcEJDLE9BQU8sRUFBRSx1QkFUVztFQVVwQkMsTUFBTSxFQUFFLHNCQVZZO0VBV3BCQyxLQUFLLEVBQUU7QUFYYSxDQURLLENBQXRCOzs7QUFtQkEsTUFBTUMsdUJBQXVCLEdBQUdDLGFBQUEsQ0FBS0MsSUFBTCxDQUFVLGNBQVYsRUFBMEIsUUFBMUIsRUFBb0MsUUFBcEMsQ0FBaEM7Ozs7QUFLQSxNQUFNQywwQkFBMEIsR0FBR0YsYUFBQSxDQUFLQyxJQUFMLENBQVVGLHVCQUFWLEVBQW1DLGNBQW5DLENBQW5DOzs7QUFFQSxNQUFNSSxtQkFBbUIsR0FBRyxNQUE1Qjs7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxTQUEvQjs7QUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxXQUFqQzs7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxRQUE5Qjs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxLQUEzQiJ9
@@ -0,0 +1,81 @@
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
+ * @throws If `manifest` already associated with a `DriverConfig`
21
+ * @returns {DriverConfig}
22
+ */
23
+ static create(manifest: Manifest): DriverConfig;
24
+ /**
25
+ * Returns a DriverConfig associated with a Manifest
26
+ * @param {Manifest} manifest
27
+ * @returns {DriverConfig|undefined}
28
+ */
29
+ static getInstance(manifest: Manifest): DriverConfig | undefined;
30
+ /**
31
+ * Call {@link DriverConfig.create} instead.
32
+ * @private
33
+ * @param {import('./manifest').Manifest} manifest - Manifest instance
34
+ */
35
+ private constructor();
36
+ /**
37
+ * A set of unique automation names used by drivers.
38
+ * @type {Set<string>}
39
+ */
40
+ knownAutomationNames: Set<string>;
41
+ /**
42
+ * Checks extensions for problems
43
+ */
44
+ validate(): Promise<import("./extension-config").ExtRecord<"driver">>;
45
+ /**
46
+ * @param {ExtManifest<DriverType>} extData
47
+ * @returns {import('./extension-config').ExtManifestProblem[]}
48
+ */
49
+ getConfigProblems(extData: ExtManifest<DriverType>): import('./extension-config').ExtManifestProblem[];
50
+ /**
51
+ * Given capabilities, find a matching driver within the config. Load its class and return it along with version and driver name.
52
+ * @param {Capabilities} caps
53
+ * @returns {MatchedDriver}
54
+ */
55
+ findMatchingDriver({ automationName, platformName }: Capabilities): MatchedDriver;
56
+ /**
57
+ * Given an automation name and platform name, find a suitable driver and return its extension data.
58
+ * @param {string} matchAutomationName
59
+ * @param {string} matchPlatformName
60
+ * @returns {ExtMetadata<DriverType> & import('appium/types').InternalMetadata & import('appium/types').CommonExtMetadata}
61
+ */
62
+ _getDriverBySupport(matchAutomationName: string, matchPlatformName: string): ExtMetadata<DriverType> & import('appium/types').InternalMetadata & import('appium/types').CommonExtMetadata;
63
+ }
64
+ export type ExtMetadata<T> = import('appium/types').ExtMetadata<T>;
65
+ export type ExtManifest<T> = import('appium/types').ExtManifest<T>;
66
+ export type ManifestData = import('appium/types').ManifestData;
67
+ export type DriverType = import('@appium/types').DriverType;
68
+ export type Manifest = import('./manifest').Manifest;
69
+ export type ExtRecord<T> = import('appium/types').ExtRecord<T>;
70
+ export type ExtName<T> = import('appium/types').ExtName<T>;
71
+ /**
72
+ * Return value of {@linkcode DriverConfig.findMatchingDriver }
73
+ */
74
+ export type MatchedDriver = {
75
+ driver: import('@appium/types').DriverClass;
76
+ version: string;
77
+ driverName: string;
78
+ };
79
+ export type Capabilities = import('@appium/types').Capabilities;
80
+ import { ExtensionConfig } from "./extension-config";
81
+ //# 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":"AAKA;;GAEG;AACH;IAOE;;;;;;;;;OASG;IACH,0BAAkC;IAalC;;;;;;OAMG;IACH,wBAJW,QAAQ,GAEN,YAAY,CAWxB;IAED;;;;OAIG;IACH,6BAHW,QAAQ,GACN,YAAY,GAAC,SAAS,CAIlC;IApCD;;;;OAIG;IACH,sBAIC;IA3BD;;;OAGG;IACH,sBAFU,IAAI,MAAM,CAAC,CAEA;IAoDrB;;OAEG;IACH,sEAGC;IAED;;;OAGG;IACH,2BAHW,YAAY,UAAU,CAAC,GACrB,OAAO,oBAAoB,EAAE,kBAAkB,EAAE,CA+C7D;IAWD;;;;OAIG;IACH,qDAHW,YAAY,GACV,aAAa,CAuCzB;IAED;;;;;OAKG;IACH,yCAJW,MAAM,qBACN,MAAM,GACJ,YAAY,UAAU,CAAC,GAAG,OAAO,cAAc,EAAE,gBAAgB,GAAG,OAAO,cAAc,EAAE,iBAAiB,CA4BxH;CACF;6BAIY,OAAO,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;6BAKrC,OAAO,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;2BAIrC,OAAO,cAAc,EAAE,YAAY;yBACnC,OAAO,eAAe,EAAE,UAAU;uBAClC,OAAO,YAAY,EAAE,QAAQ;2BAK7B,OAAO,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;yBAKnC,OAAO,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;;;;;YAMhC,OAAO,eAAe,EAAE,WAAW;aACnC,MAAM;gBACN,MAAM;;2BAIP,OAAO,eAAe,EAAE,YAAY"}