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.
Files changed (139) hide show
  1. package/README.md +10 -11
  2. package/build/lib/appium.d.ts +215 -0
  3. package/build/lib/appium.d.ts.map +1 -0
  4. package/build/lib/appium.js +238 -132
  5. package/build/lib/cli/args.d.ts +20 -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 +36 -0
  9. package/build/lib/cli/driver-command.d.ts.map +1 -0
  10. package/build/lib/cli/driver-command.js +19 -12
  11. package/build/lib/cli/extension-command.d.ts +345 -0
  12. package/build/lib/cli/extension-command.d.ts.map +1 -0
  13. package/build/lib/cli/extension-command.js +171 -96
  14. package/build/lib/cli/extension.d.ts +14 -0
  15. package/build/lib/cli/extension.d.ts.map +1 -0
  16. package/build/lib/cli/extension.js +31 -16
  17. package/build/lib/cli/parser.d.ts +79 -0
  18. package/build/lib/cli/parser.d.ts.map +1 -0
  19. package/build/lib/cli/parser.js +152 -95
  20. package/build/lib/cli/plugin-command.d.ts +39 -0
  21. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  22. package/build/lib/cli/plugin-command.js +18 -13
  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 +40 -0
  30. package/build/lib/config.d.ts.map +1 -0
  31. package/build/lib/config.js +92 -67
  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 +84 -0
  36. package/build/lib/extension/driver-config.d.ts.map +1 -0
  37. package/build/lib/extension/driver-config.js +190 -0
  38. package/build/lib/extension/extension-config.d.ts +170 -0
  39. package/build/lib/extension/extension-config.d.ts.map +1 -0
  40. package/build/lib/extension/extension-config.js +297 -0
  41. package/build/lib/extension/index.d.ts +39 -0
  42. package/build/lib/extension/index.d.ts.map +1 -0
  43. package/build/lib/extension/index.js +77 -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 +246 -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 +68 -0
  50. package/build/lib/extension/plugin-config.d.ts +62 -0
  51. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  52. package/build/lib/extension/plugin-config.js +87 -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 +12 -16
  62. package/build/lib/main.d.ts +51 -0
  63. package/build/lib/main.d.ts.map +1 -0
  64. package/build/lib/main.js +174 -82
  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 +180 -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 +452 -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/index.js +11 -0
  88. package/lib/appium-config.schema.json +278 -0
  89. package/lib/appium.js +398 -155
  90. package/lib/cli/args.js +174 -377
  91. package/lib/cli/driver-command.js +22 -7
  92. package/lib/cli/extension-command.js +372 -177
  93. package/lib/cli/extension.js +32 -10
  94. package/lib/cli/parser.js +252 -83
  95. package/lib/cli/plugin-command.js +19 -6
  96. package/lib/cli/utils.js +22 -2
  97. package/lib/config-file.js +223 -0
  98. package/lib/config.js +169 -69
  99. package/lib/constants.js +78 -0
  100. package/lib/extension/driver-config.js +249 -0
  101. package/lib/extension/extension-config.js +458 -0
  102. package/lib/extension/index.js +102 -0
  103. package/lib/extension/manifest.js +486 -0
  104. package/lib/extension/package-changed.js +63 -0
  105. package/lib/extension/plugin-config.js +113 -0
  106. package/lib/grid-register.js +25 -22
  107. package/lib/logger.js +1 -1
  108. package/lib/logsink.js +14 -7
  109. package/lib/main.js +233 -83
  110. package/lib/schema/arg-spec.js +232 -0
  111. package/lib/schema/cli-args.js +261 -0
  112. package/lib/schema/cli-transformers.js +122 -0
  113. package/lib/schema/index.js +2 -0
  114. package/lib/schema/keywords.js +134 -0
  115. package/lib/schema/schema.js +734 -0
  116. package/lib/utils.js +85 -129
  117. package/package.json +62 -85
  118. package/scripts/postinstall.js +71 -0
  119. package/types/appium-manifest.d.ts +61 -0
  120. package/types/cli.d.ts +134 -0
  121. package/types/extension.d.ts +56 -0
  122. package/types/external-manifest.d.ts +58 -0
  123. package/types/index.d.ts +7 -0
  124. package/CHANGELOG.md +0 -3515
  125. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  126. package/build/lib/cli/npm.js +0 -206
  127. package/build/lib/cli/parser-helpers.js +0 -82
  128. package/build/lib/driver-config.js +0 -77
  129. package/build/lib/drivers.js +0 -96
  130. package/build/lib/extension-config.js +0 -251
  131. package/build/lib/plugin-config.js +0 -59
  132. package/build/lib/plugins.js +0 -14
  133. package/lib/cli/npm.js +0 -183
  134. package/lib/cli/parser-helpers.js +0 -79
  135. package/lib/driver-config.js +0 -46
  136. package/lib/drivers.js +0 -81
  137. package/lib/extension-config.js +0 -208
  138. package/lib/plugin-config.js +0 -34
  139. package/lib/plugins.js +0 -10
@@ -1,71 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /* eslint no-console:0 */
4
-
5
- /*
6
- * Small tool, launching and monitoring ios-web-kit-proxy, and relaunching
7
- * on predefined errors.
8
- *
9
- * Usage:
10
- * ./bin/ios-webkit-debug-proxy-launcher.js [args]
11
- * args: ios-webkit-debug-proxy args (they will be passed over)
12
- *
13
- * Example:
14
- * ./bin/ios-webkit-debug-proxy-launcher.js -c <UDID>:27753 -d
15
- *
16
- * Note:
17
- * For iOS8.1 try this first:
18
- * brew install --HEAD ideviceinstaller
19
- */
20
-
21
- 'use strict';
22
-
23
- const spawn = require('child_process').spawn;
24
- const _ = require('lodash');
25
-
26
- const args = process.argv.slice(2);
27
-
28
- const RESTART_ON_MESSAGES = [
29
- 'Invalid message _rpc_applicationUpdated',
30
- 'Invalid message _rpc_applicationSentListing'];
31
-
32
- const PROXY_CMD = 'ios_webkit_debug_proxy';
33
- let proxy;
34
-
35
- const handleKillProcess = function (exitCode) {
36
- console.log('\nKilling proxy process!');
37
- proxy.kill('SIGTERM');
38
- process.exit((exitCode || 0));
39
- };
40
-
41
- const startProxy = function () {
42
- console.log(`RUNNING: ${PROXY_CMD} ${args.join(' ')}`);
43
-
44
- proxy = spawn(PROXY_CMD, args);
45
-
46
- proxy.stdout.on('data', function onStdout (data) {
47
- console.log(`stdout: ${data}`);
48
- });
49
-
50
- proxy.stderr.on('data', function onStderr (data) {
51
- console.log(`stderr: ${data}`);
52
- const restartMessage = _(RESTART_ON_MESSAGES).find(function findMessage (message) {
53
- return ('' + data).indexOf(message) >= 0;
54
- });
55
- if (restartMessage) {
56
- console.log(`Detected error message: ${restartMessage}`);
57
- console.log('Killing proxy!');
58
- proxy.kill('SIGTERM');
59
- process.nextTick(startProxy);
60
- }
61
- });
62
-
63
- proxy.on('close', function onClose (code) {
64
- console.log(`Child process exited with code ${code}`);
65
- });
66
- };
67
-
68
- process.on('SIGINT', handleKillProcess);
69
- process.on('SIGTERM', handleKillProcess);
70
-
71
- startProxy();
@@ -1,206 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
-
10
- require("source-map-support/register");
11
-
12
- var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
- var _path = _interopRequireDefault(require("path"));
15
-
16
- var _semver = _interopRequireDefault(require("semver"));
17
-
18
- var _teen_process = require("teen_process");
19
-
20
- var _appiumSupport = require("appium-support");
21
-
22
- const INSTALL_LOCKFILE = '.appium.install.lock';
23
- const LINK_LOCKFILE = '.appium.link.lock';
24
-
25
- class NPM {
26
- constructor(appiumHome) {
27
- this.appiumHome = appiumHome;
28
- }
29
-
30
- async exec(cmd, args, opts, execOpts = {}) {
31
- let {
32
- cwd,
33
- json,
34
- lockFile
35
- } = opts;
36
-
37
- if (!cwd) {
38
- cwd = this.appiumHome;
39
- }
40
-
41
- await (0, _appiumSupport.mkdirp)(cwd);
42
- execOpts = { ...execOpts,
43
- cwd
44
- };
45
- args.unshift(cmd);
46
-
47
- if (json) {
48
- args.push('-json');
49
- }
50
-
51
- let runner = async () => await (0, _teen_process.exec)('npm', args, execOpts);
52
-
53
- if (lockFile) {
54
- const acquireLock = _appiumSupport.util.getLockFileGuard(_path.default.resolve(cwd, lockFile));
55
-
56
- const _runner = runner;
57
-
58
- runner = async () => await acquireLock(_runner);
59
- }
60
-
61
- const {
62
- stdout,
63
- stderr,
64
- code
65
- } = await runner();
66
- const ret = {
67
- stdout,
68
- stderr,
69
- code,
70
- json: null
71
- };
72
-
73
- if (json) {
74
- try {
75
- ret.json = JSON.parse(stdout);
76
- } catch (ign) {}
77
- }
78
-
79
- return ret;
80
- }
81
-
82
- async getLatestVersion(pkg) {
83
- return (await this.exec('view', [pkg, 'dist-tags'], {
84
- json: true
85
- })).json.latest;
86
- }
87
-
88
- async getLatestSafeUpgradeVersion(pkg, curVersion) {
89
- const allVersions = (await this.exec('view', [pkg, 'versions'], {
90
- json: true
91
- })).json;
92
- return this.getLatestSafeUpgradeFromVersions(curVersion, allVersions);
93
- }
94
-
95
- getLatestSafeUpgradeFromVersions(curVersion, allVersions) {
96
- let safeUpgradeVer = null;
97
-
98
- const curSemver = _semver.default.parse(curVersion);
99
-
100
- if (curSemver === null) {
101
- throw new Error(`Could not parse current version '${curVersion}'`);
102
- }
103
-
104
- for (const testVer of allVersions) {
105
- const testSemver = _semver.default.parse(testVer);
106
-
107
- if (testSemver === null) {
108
- throw new Error(`Could not parse version to test against: '${testVer}'`);
109
- }
110
-
111
- if (testSemver.prerelease.length > 0) {
112
- continue;
113
- }
114
-
115
- if (curSemver.compare(testSemver) === 1) {
116
- continue;
117
- }
118
-
119
- if (testSemver.major > curSemver.major) {
120
- continue;
121
- }
122
-
123
- if (safeUpgradeVer === null || testSemver.compare(safeUpgradeVer) === 1) {
124
- safeUpgradeVer = testSemver;
125
- }
126
- }
127
-
128
- if (safeUpgradeVer) {
129
- safeUpgradeVer = safeUpgradeVer.format();
130
- }
131
-
132
- return safeUpgradeVer;
133
- }
134
-
135
- async installPackage({
136
- pkgDir,
137
- pkgName,
138
- pkgVer
139
- }) {
140
- const res = await this.exec('install', ['--no-save', '--no-package-lock', pkgVer ? `${pkgName}@${pkgVer}` : pkgName], {
141
- cwd: pkgDir,
142
- json: true,
143
- lockFile: INSTALL_LOCKFILE
144
- });
145
-
146
- if (res.json) {
147
- if (res.json.error) {
148
- throw new Error(res.json.error);
149
- }
150
-
151
- const names = _lodash.default.uniq([...res.json.added, ...res.json.updated].map(x => x.name));
152
-
153
- if (names.length === 1) {
154
- pkgName = names[0];
155
- }
156
- }
157
-
158
- const pkgJson = _path.default.resolve(pkgDir, 'node_modules', pkgName, 'package.json');
159
-
160
- try {
161
- return require(pkgJson);
162
- } catch {
163
- throw new Error('The package was not downloaded correctly; its package.json ' + 'did not exist or was unreadable. We looked for it at ' + pkgJson);
164
- }
165
- }
166
-
167
- async linkPackage(pkgPath) {
168
- let pkgName;
169
-
170
- try {
171
- pkgName = require(_path.default.resolve(pkgPath, 'package.json')).name;
172
- } catch {
173
- throw new Error('Could not find package.json inside the package path ' + `provided: ${pkgPath}`);
174
- }
175
-
176
- const pkgHome = _path.default.resolve(this.appiumHome, pkgName);
177
-
178
- const res = await this.exec('link', [pkgPath], {
179
- cwd: pkgHome,
180
- lockFile: LINK_LOCKFILE
181
- });
182
-
183
- if (res.json && res.json.error) {
184
- throw new Error(res.json.error);
185
- }
186
-
187
- try {
188
- return require(_path.default.resolve(pkgHome, 'node_modules', pkgName, 'package.json'));
189
- } catch {
190
- throw new Error('The package was not linked correctly; its package.json ' + 'did not exist or was unreadable');
191
- }
192
- }
193
-
194
- async uninstallPackage(pkgDir, pkg) {
195
- await this.exec('uninstall', [pkg], {
196
- cwd: pkgDir,
197
- lockFile: INSTALL_LOCKFILE
198
- });
199
- }
200
-
201
- }
202
-
203
- exports.default = NPM;require('source-map-support').install();
204
-
205
-
206
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvbnBtLmpzIl0sIm5hbWVzIjpbIklOU1RBTExfTE9DS0ZJTEUiLCJMSU5LX0xPQ0tGSUxFIiwiTlBNIiwiY29uc3RydWN0b3IiLCJhcHBpdW1Ib21lIiwiZXhlYyIsImNtZCIsImFyZ3MiLCJvcHRzIiwiZXhlY09wdHMiLCJjd2QiLCJqc29uIiwibG9ja0ZpbGUiLCJ1bnNoaWZ0IiwicHVzaCIsInJ1bm5lciIsImFjcXVpcmVMb2NrIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIl9ydW5uZXIiLCJzdGRvdXQiLCJzdGRlcnIiLCJjb2RlIiwicmV0IiwiSlNPTiIsInBhcnNlIiwiaWduIiwiZ2V0TGF0ZXN0VmVyc2lvbiIsInBrZyIsImxhdGVzdCIsImdldExhdGVzdFNhZmVVcGdyYWRlVmVyc2lvbiIsImN1clZlcnNpb24iLCJhbGxWZXJzaW9ucyIsImdldExhdGVzdFNhZmVVcGdyYWRlRnJvbVZlcnNpb25zIiwic2FmZVVwZ3JhZGVWZXIiLCJjdXJTZW12ZXIiLCJzZW12ZXIiLCJFcnJvciIsInRlc3RWZXIiLCJ0ZXN0U2VtdmVyIiwicHJlcmVsZWFzZSIsImxlbmd0aCIsImNvbXBhcmUiLCJtYWpvciIsImZvcm1hdCIsImluc3RhbGxQYWNrYWdlIiwicGtnRGlyIiwicGtnTmFtZSIsInBrZ1ZlciIsInJlcyIsImVycm9yIiwibmFtZXMiLCJfIiwidW5pcSIsImFkZGVkIiwidXBkYXRlZCIsIm1hcCIsIngiLCJuYW1lIiwicGtnSnNvbiIsInJlcXVpcmUiLCJsaW5rUGFja2FnZSIsInBrZ1BhdGgiLCJwa2dIb21lIiwidW5pbnN0YWxsUGFja2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxnQkFBZ0IsR0FBRyxzQkFBekI7QUFDQSxNQUFNQyxhQUFhLEdBQUcsbUJBQXRCOztBQUVlLE1BQU1DLEdBQU4sQ0FBVTtBQUV2QkMsRUFB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QUFFRCxVQUFNQyxPQUFPLEdBQUc5QyxjQUFLQyxPQUFMLENBQWEsS0FBS2hCLFVBQWxCLEVBQThCNkMsT0FBOUIsQ0FBaEI7O0FBQ0EsVUFBTUUsR0FBRyxHQUFHLE1BQU0sS0FBSzlDLElBQUwsQ0FBVSxNQUFWLEVBQWtCLENBQUMyRCxPQUFELENBQWxCLEVBQTZCO0FBQUN0RCxNQUFBQSxHQUFHLEVBQUV1RCxPQUFOO0FBQWVyRCxNQUFBQSxRQUFRLEVBQUVYO0FBQXpCLEtBQTdCLENBQWxCOztBQUNBLFFBQUlrRCxHQUFHLENBQUN4QyxJQUFKLElBQVl3QyxHQUFHLENBQUN4QyxJQUFKLENBQVN5QyxLQUF6QixFQUFnQztBQUM5QixZQUFNLElBQUliLEtBQUosQ0FBVVksR0FBRyxDQUFDeEMsSUFBSixDQUFTeUMsS0FBbkIsQ0FBTjtBQUNEOztBQUdELFFBQUk7QUFDRixhQUFPVSxPQUFPLENBQUMzQyxjQUFLQyxPQUFMLENBQWE2QyxPQUFiLEVBQXNCLGNBQXRCLEVBQXNDaEIsT0FBdEMsRUFBK0MsY0FBL0MsQ0FBRCxDQUFkO0FBQ0QsS0FGRCxDQUVFLE1BQU07QUFDTixZQUFNLElBQUlWLEtBQUosQ0FBVSw0REFDQSxpQ0FEVixDQUFOO0FBRUQ7QUFDRjs7QUFFRCxRQUFNMkIsZ0JBQU4sQ0FBd0JsQixNQUF4QixFQUFnQ2xCLEdBQWhDLEVBQXFDO0FBQ25DLFVBQU0sS0FBS3pCLElBQUwsQ0FBVSxXQUFWLEVBQXVCLENBQUN5QixHQUFELENBQXZCLEVBQThCO0FBQ2xDcEIsTUFBQUEsR0FBRyxFQUFFc0MsTUFENkI7QUFFbENwQyxNQUFBQSxRQUFRLEVBQUVaO0FBRndCLEtBQTlCLENBQU47QUFJRDs7QUE1S3NCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBta2RpcnAsIHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cbmNvbnN0IElOU1RBTExfTE9DS0ZJTEUgPSAnLmFwcGl1bS5pbnN0YWxsLmxvY2snO1xuY29uc3QgTElOS19MT0NLRklMRSA9ICcuYXBwaXVtLmxpbmsubG9jayc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5QTSB7XG5cbiAgY29uc3RydWN0b3IgKGFwcGl1bUhvbWUpIHtcbiAgICB0aGlzLmFwcGl1bUhvbWUgPSBhcHBpdW1Ib21lO1xuICB9XG5cbiAgYXN5bmMgZXhlYyAoY21kLCBhcmdzLCBvcHRzLCBleGVjT3B0cyA9IHt9KSB7XG4gICAgbGV0IHsgY3dkLCBqc29uLCBsb2NrRmlsZSB9ID0gb3B0cztcbiAgICBpZiAoIWN3ZCkge1xuICAgICAgY3dkID0gdGhpcy5hcHBpdW1Ib21lO1xuICAgIH1cbiAgICAvLyBlbnN1cmUgdGhlIGRpcmVjdG9yeSB3ZSB3YW50IHRvIGluc3RhbGwgaW5zaWRlIG9mIGV4aXN0c1xuICAgIGF3YWl0IG1rZGlycChjd2QpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHdlIHBlcmZvcm0gdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGluIGN3ZFxuICAgIGV4ZWNPcHRzID0gey4uLmV4ZWNPcHRzLCBjd2R9O1xuXG4gICAgYXJncy51bnNoaWZ0KGNtZCk7XG4gICAgaWYgKGpzb24pIHtcbiAgICAgIGFyZ3MucHVzaCgnLWpzb24nKTtcbiAgICB9XG4gICAgbGV0IHJ1bm5lciA9IGFzeW5jICgpID0+IGF3YWl0IGV4ZWMoJ25wbScsIGFyZ3MsIGV4ZWNPcHRzKTtcbiAgICBpZiAobG9ja0ZpbGUpIHtcbiAgICAgIGNvbnN0IGFjcXVpcmVMb2NrID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKHBhdGgucmVzb2x2ZShjd2QsIGxvY2tGaWxlKSk7XG4gICAgICBjb25zdCBfcnVubmVyID0gcnVubmVyO1xuICAgICAgcnVubmVyID0gYXN5bmMgKCkgPT4gYXdhaXQgYWNxdWlyZUxvY2soX3J1bm5lcik7XG4gICAgfVxuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVyciwgY29kZX0gPSBhd2FpdCBydW5uZXIoKTtcbiAgICBjb25zdCByZXQgPSB7c3Rkb3V0LCBzdGRlcnIsIGNvZGUsIGpzb246IG51bGx9O1xuXG4gICAgaWYgKGpzb24pIHtcbiAgICAgIC8vIGlmIHBvc3NpYmxlLCBwYXJzZSBOUE0ncyBqc29uIG91dHB1dC4gRHVyaW5nIE5QTSBpbnN0YWxsIDNyZC1wYXJ0eVxuICAgICAgLy8gcGFja2FnZXMgY2FuIHdyaXRlIHRvIHN0ZG91dCwgc28gc29tZXRpbWVzIHRoZSBqc29uIG91dHB1dCBjYW4ndCBiZVxuICAgICAgLy8gZ3VhcmFudGVlZCB0byBiZSBwYXJzZWFibGVcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldC5qc29uID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBhc3luYyBnZXRMYXRlc3RWZXJzaW9uIChwa2cpIHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZXhlYygndmlldycsIFtwa2csICdkaXN0LXRhZ3MnXSwge1xuICAgICAganNvbjogdHJ1ZVxuICAgIH0pKS5qc29uLmxhdGVzdDtcbiAgfVxuXG4gIGFzeW5jIGdldExhdGVzdFNhZmVVcGdyYWRlVmVyc2lvbiAocGtnLCBjdXJWZXJzaW9uKSB7XG4gICAgY29uc3QgYWxsVmVyc2lvbnMgPSAoYXdhaXQgdGhpcy5leGVjKCd2aWV3JywgW3BrZywgJ3ZlcnNpb25zJ10sIHtcbiAgICAgIGpzb246IHRydWVcbiAgICB9KSkuanNvbjtcbiAgICByZXR1cm4gdGhpcy5nZXRMYXRlc3RTYWZlVXBncmFkZUZyb21WZXJzaW9ucyhjdXJWZXJzaW9uLCBhbGxWZXJzaW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBjdXJyZW50IHZlcnNpb24gYW5kIGEgbGlzdCBvZiBhbGwgdmVyc2lvbnMgZm9yIGEgcGFja2FnZSwgcmV0dXJuIHRoZSB2ZXJzaW9uIHdoaWNoIGlzXG4gICAqIHRoZSBoaWdoZXN0IHNhZmVseS11cGdyYWRhYmxlIHZlcnNpb24gKG1lYW5pbmcgbm90IGNyb3NzaW5nIGFueSBtYWpvciByZXZpc2lvbiBib3VuZGFyaWVzLCBhbmRcbiAgICogbm90IGluY2x1ZGluZyBhbnkgYWxwaGEvYmV0YS9yYyB2ZXJzaW9ucylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1clZlcnNpb24gLSB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGEgcGFja2FnZVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFsbFZlcnNpb25zIC0gYSBsaXN0IG9mIHZlcnNpb24gc3RyaW5nc1xuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gLSB0aGUgaGlnaGVzdCBzYWZlbHktdXBncmFkYWJsZSB2ZXJzaW9uLCBvciBudWxsIGlmIHRoZXJlIGlzbid0IG9uZVxuICAgKi9cbiAgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMgKGN1clZlcnNpb24sIGFsbFZlcnNpb25zKSB7XG4gICAgbGV0IHNhZmVVcGdyYWRlVmVyID0gbnVsbDtcbiAgICBjb25zdCBjdXJTZW12ZXIgPSBzZW12ZXIucGFyc2UoY3VyVmVyc2lvbik7XG4gICAgaWYgKGN1clNlbXZlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgY3VycmVudCB2ZXJzaW9uICcke2N1clZlcnNpb259J2ApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHRlc3RWZXIgb2YgYWxsVmVyc2lvbnMpIHtcbiAgICAgIGNvbnN0IHRlc3RTZW12ZXIgPSBzZW12ZXIucGFyc2UodGVzdFZlcik7XG4gICAgICBpZiAodGVzdFNlbXZlciA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSB2ZXJzaW9uIHRvIHRlc3QgYWdhaW5zdDogJyR7dGVzdFZlcn0nYCk7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgdGVzdCB2ZXJzaW9uIGlzIGEgcHJlcmVsZWFzZSwgaWdub3JlIGl0XG4gICAgICBpZiAodGVzdFNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgY3VycmVudCB2ZXJzaW9uIGlzIGxhdGVyIHRoYW4gdGhlIHRlc3QgdmVyc2lvbiwgc2tpcCB0aGlzIHRlc3QgdmVyc2lvblxuICAgICAgaWYgKGN1clNlbXZlci5jb21wYXJlKHRlc3RTZW12ZXIpID09PSAxKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHRlc3QgdmVyc2lvbiBpcyBuZXdlciwgYnV0IGNyb3NzZXMgYSBtYWpvciByZXZpc2lvbiBib3VuZGFyeSwgYWxzbyBza2lwIGl0XG4gICAgICBpZiAodGVzdFNlbXZlci5tYWpvciA+IGN1clNlbXZlci5tYWpvcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIG90aGVyd2lzZSB0aGlzIHZlcnNpb24gaXMgc2FmZSB0byB1cGdyYWRlIHRvLiBCdXQgdGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgb25lcyBvZiB0aGlzXG4gICAgICAvLyBraW5kLCBzbyBrZWVwIGl0ZXJhdGluZyBhbmQga2VlcGluZyB0aGUgaGlnaGVzdFxuICAgICAgaWYgKHNhZmVVcGdyYWRlVmVyID09PSBudWxsIHx8IHRlc3RTZW12ZXIuY29tcGFyZShzYWZlVXBncmFkZVZlcikgPT09IDEpIHtcbiAgICAgICAgc2FmZVVwZ3JhZGVWZXIgPSB0ZXN0U2VtdmVyO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2FmZVVwZ3JhZGVWZXIpIHtcbiAgICAgIHNhZmVVcGdyYWRlVmVyID0gc2FmZVVwZ3JhZGVWZXIuZm9ybWF0KCk7XG4gICAgfVxuICAgIHJldHVybiBzYWZlVXBncmFkZVZlcjtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxQYWNrYWdlICh7cGtnRGlyLCBwa2dOYW1lLCBwa2dWZXJ9KSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5leGVjKCdpbnN0YWxsJywgW1xuICAgICAgJy0tbm8tc2F2ZScsXG4gICAgICAnLS1uby1wYWNrYWdlLWxvY2snLFxuICAgICAgcGtnVmVyID8gYCR7cGtnTmFtZX1AJHtwa2dWZXJ9YCA6IHBrZ05hbWVcbiAgICBdLCB7XG4gICAgICBjd2Q6IHBrZ0RpcixcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBsb2NrRmlsZTogSU5TVEFMTF9MT0NLRklMRVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcy5qc29uKSB7XG4gICAgICAvLyB3ZSBwYXJzZWQgYSB2YWxpZCBqc29uIHJlc3BvbnNlLCBzbyBpZiB3ZSBnb3QgYW4gZXJyb3IgaGVyZSwgcmV0dXJuIHRoYXRcbiAgICAgIC8vIG1lc3NhZ2Ugc3RyYWlnaHRhd2F5XG4gICAgICBpZiAocmVzLmpzb24uZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5qc29uLmVycm9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgd2UgdHJpZWQgdG8gaW5zdGFsbCBhIHBhY2thZ2UgdmlhIGdpdC9naXRodWIsIHdlIG1pZ2h0IG5vdCBoYXZlIGJlZW5cbiAgICAgIC8vIGNlcnRhaW4gb2YgdGhlIHBhY2thZ2UgbmFtZSwgc28gaWYgd2UgY2FuIHJldHJpZXZlIGl0IHVuYW1iaWd1b3VzbHkgZnJvbVxuICAgICAgLy8gdGhlIGpzb24gcmVwb3J0IG9mIHRoZSBpbnN0YWxsLCBkbyBzb1xuICAgICAgY29uc3QgbmFtZXMgPSBfLnVuaXEoWy4uLnJlcy5qc29uLmFkZGVkLCAuLi5yZXMuanNvbi51cGRhdGVkXS5tYXAoKHgpID0+IHgubmFtZSkpO1xuICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBwa2dOYW1lID0gbmFtZXNbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm93IHJlYWQgcGFja2FnZSBkYXRhIGZyb20gdGhlIGluc3RhbGxlZCBwYWNrYWdlIHRvIHJldHVybiwgYW5kIG1ha2Ugc3VyZVxuICAgIC8vIGV2ZXJ5dGhpbmcgZ290IGluc3RhbGxlZCBvay4gUmVtZW1iZXIsIHBrZ05hbWUgbWlnaHQgZW5kIHVwIHdpdGggYSAvIGluIGl0IGR1ZSB0byBhbiBucG1cbiAgICAvLyBvcmcsIHNvIGlmIHNvLCB0aGF0IHdpbGwgZ2V0IGNvcnJlY3RseSBleHBsb2RlZCBpbnRvIG11bHRpcGxlIGRpcmVjdG9yaWVzLCBieSBwYXRoLnJlc29sdmUgaGVyZVxuICAgIC8vIChldmVuIG9uIFdpbmRvd3MhKVxuICAgIGNvbnN0IHBrZ0pzb24gPSBwYXRoLnJlc29sdmUocGtnRGlyLCAnbm9kZV9tb2R1bGVzJywgcGtnTmFtZSwgJ3BhY2thZ2UuanNvbicpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVxdWlyZShwa2dKc29uKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhY2thZ2Ugd2FzIG5vdCBkb3dubG9hZGVkIGNvcnJlY3RseTsgaXRzIHBhY2thZ2UuanNvbiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAnZGlkIG5vdCBleGlzdCBvciB3YXMgdW5yZWFkYWJsZS4gV2UgbG9va2VkIGZvciBpdCBhdCAnICtcbiAgICAgICAgICAgICAgICAgICAgICBwa2dKc29uKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaW5rUGFja2FnZSAocGtnUGF0aCkge1xuICAgIC8vIGZyb20gdGhlIHBhdGggYWxvbmUgd2UgZG9uJ3Qga25vdyB0aGUgbnBtIHBhY2thZ2UgbmFtZSwgc28gd2UgbmVlZCB0b1xuICAgIC8vIGxvb2sgaW4gcGFja2FnZS5qc29uXG4gICAgbGV0IHBrZ05hbWU7XG4gICAgdHJ5IHtcbiAgICAgIHBrZ05hbWUgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShwa2dQYXRoLCAncGFja2FnZS5qc29uJykpLm5hbWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHBhY2thZ2UuanNvbiBpbnNpZGUgdGhlIHBhY2thZ2UgcGF0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICBgcHJvdmlkZWQ6ICR7cGtnUGF0aH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBwa2dIb21lID0gcGF0aC5yZXNvbHZlKHRoaXMuYXBwaXVtSG9tZSwgcGtnTmFtZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5leGVjKCdsaW5rJywgW3BrZ1BhdGhdLCB7Y3dkOiBwa2dIb21lLCBsb2NrRmlsZTogTElOS19MT0NLRklMRX0pO1xuICAgIGlmIChyZXMuanNvbiAmJiByZXMuanNvbi5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5qc29uLmVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBub3cgZW5zdXJlIGl0IHdhcyBsaW5rZWQgdG8gdGhlIGNvcnJlY3QgcGxhY2VcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGF0aC5yZXNvbHZlKHBrZ0hvbWUsICdub2RlX21vZHVsZXMnLCBwa2dOYW1lLCAncGFja2FnZS5qc29uJykpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGFja2FnZSB3YXMgbm90IGxpbmtlZCBjb3JyZWN0bHk7IGl0cyBwYWNrYWdlLmpzb24gJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2RpZCBub3QgZXhpc3Qgb3Igd2FzIHVucmVhZGFibGUnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1bmluc3RhbGxQYWNrYWdlIChwa2dEaXIsIHBrZykge1xuICAgIGF3YWl0IHRoaXMuZXhlYygndW5pbnN0YWxsJywgW3BrZ10sIHtcbiAgICAgIGN3ZDogcGtnRGlyLFxuICAgICAgbG9ja0ZpbGU6IElOU1RBTExfTE9DS0ZJTEVcbiAgICB9KTtcbiAgfVxufVxuIl0sImZpbGUiOiJsaWIvY2xpL25wbS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -1,82 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.parseSecurityFeatures = parseSecurityFeatures;
9
- exports.parseDefaultCaps = parseDefaultCaps;
10
- exports.parseInstallTypes = parseInstallTypes;
11
- exports.parsePluginNames = parsePluginNames;
12
-
13
- require("source-map-support/register");
14
-
15
- var _fs = _interopRequireDefault(require("fs"));
16
-
17
- var _lodash = _interopRequireDefault(require("lodash"));
18
-
19
- var _extensionConfig = require("../extension-config");
20
-
21
- function parseSecurityFeatures(features) {
22
- const splitter = (splitOn, str) => `${str}`.split(splitOn).map(s => s.trim()).filter(Boolean);
23
-
24
- let parsedFeatures;
25
-
26
- try {
27
- parsedFeatures = splitter(',', features);
28
- } catch (err) {
29
- throw new Error('Could not parse value of --allow/deny-insecure. Should be ' + 'a list of strings separated by commas, or a path to a file ' + 'listing one feature name per line.');
30
- }
31
-
32
- if (parsedFeatures.length === 1 && _fs.default.existsSync(parsedFeatures[0])) {
33
- try {
34
- const fileFeatures = _fs.default.readFileSync(parsedFeatures[0], 'utf8');
35
-
36
- parsedFeatures = splitter('\n', fileFeatures);
37
- } catch (err) {
38
- throw new Error(`Attempted to read --allow/deny-insecure feature names ` + `from file ${parsedFeatures[0]} but got error: ${err.message}`);
39
- }
40
- }
41
-
42
- return parsedFeatures;
43
- }
44
-
45
- function parsePluginNames(names) {
46
- if (!_lodash.default.isString(names)) {
47
- throw new Error('To parse plugin names, names must be a CSV string');
48
- }
49
-
50
- try {
51
- return names.split(',').map(s => s.trim()).filter(Boolean);
52
- } catch (err) {
53
- throw new Error('Could not parse value of --plugins. Should be a list of plugin names ' + 'separated by commas. Plugin names are those found when running `appium ' + 'plugin list`');
54
- }
55
- }
56
-
57
- function parseDefaultCaps(caps) {
58
- try {
59
- if (_fs.default.statSync(caps).isFile()) {
60
- caps = _fs.default.readFileSync(caps, 'utf8');
61
- }
62
- } catch (err) {}
63
-
64
- caps = JSON.parse(caps);
65
-
66
- if (!_lodash.default.isPlainObject(caps)) {
67
- throw 'Invalid format for default capabilities';
68
- }
69
-
70
- return caps;
71
- }
72
-
73
- function parseInstallTypes(source) {
74
- if (!_lodash.default.includes(_extensionConfig.INSTALL_TYPES, source)) {
75
- throw `Argument to --source was '${source}', which is not a valid ` + `driver source type. It must be one of ${JSON.stringify(_extensionConfig.INSTALL_TYPES)}`;
76
- }
77
-
78
- return source;
79
- }require('source-map-support').install();
80
-
81
-
82
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvcGFyc2VyLWhlbHBlcnMuanMiXSwibmFtZXMiOlsicGFyc2VTZWN1cml0eUZlYXR1cmVzIiwiZmVhdHVyZXMiLCJzcGxpdHRlciIsInNwbGl0T24iLCJzdHIiLCJzcGxpdCIsIm1hcCIsInMiLCJ0cmltIiwiZmlsdGVyIiwiQm9vbGVhbiIsInBhcnNlZEZlYXR1cmVzIiwiZXJyIiwiRXJyb3IiLCJsZW5ndGgiLCJmcyIsImV4aXN0c1N5bmMiLCJmaWxlRmVhdHVyZXMiLCJyZWFkRmlsZVN5bmMiLCJtZXNzYWdlIiwicGFyc2VQbHVnaW5OYW1lcyIsIm5hbWVzIiwiXyIsImlzU3RyaW5nIiwicGFyc2VEZWZhdWx0Q2FwcyIsImNhcHMiLCJzdGF0U3luYyIsImlzRmlsZSIsIkpTT04iLCJwYXJzZSIsImlzUGxhaW5PYmplY3QiLCJwYXJzZUluc3RhbGxUeXBlcyIsInNvdXJjZSIsImluY2x1ZGVzIiwiSU5TVEFMTF9UWVBFUyIsInN0cmluZ2lmeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFHQSxTQUFTQSxxQkFBVCxDQUFnQ0MsUUFBaEMsRUFBMEM7QUFDeEMsUUFBTUMsUUFBUSxHQUFHLENBQUNDLE9BQUQsRUFBVUMsR0FBVixLQUFtQixHQUFFQSxHQUFJLEVBQVAsQ0FBU0MsS0FBVCxDQUFlRixPQUFmLEVBQXdCRyxHQUF4QixDQUE2QkMsQ0FBRCxJQUFPQSxDQUFDLENBQUNDLElBQUYsRUFBbkMsRUFBNkNDLE1BQTdDLENBQW9EQyxPQUFwRCxDQUFuQzs7QUFDQSxNQUFJQyxjQUFKOztBQUNBLE1BQUk7QUFDRkEsSUFBQUEsY0FBYyxHQUFHVCxRQUFRLENBQUMsR0FBRCxFQUFNRCxRQUFOLENBQXpCO0FBQ0QsR0FGRCxDQUVFLE9BQU9XLEdBQVAsRUFBWTtBQUNaLFVBQU0sSUFBSUMsS0FBSixDQUFVLCtEQUNBLDZEQURBLEdBRUEsb0NBRlYsQ0FBTjtBQUdEOztBQUVELE1BQUlGLGNBQWMsQ0FBQ0csTUFBZixLQUEwQixDQUExQixJQUErQkMsWUFBR0MsVUFBSCxDQUFjTCxjQUFjLENBQUMsQ0FBRCxDQUE1QixDQUFuQyxFQUFxRTtBQUVuRSxRQUFJO0FBQ0YsWUFBTU0sWUFBWSxHQUFHRixZQUFHRyxZQUFILENBQWdCUCxjQUFjLENBQUMsQ0FBRCxDQUE5QixFQUFtQyxNQUFuQyxDQUFyQjs7QUFDQUEsTUFBQUEsY0FBYyxHQUFHVCxRQUFRLENBQUMsSUFBRCxFQUFPZSxZQUFQLENBQXpCO0FBQ0QsS0FIRCxDQUdFLE9BQU9MLEdBQVAsRUFBWTtBQUNaLFlBQU0sSUFBSUMsS0FBSixDQUFXLHdEQUFELEdBQ0MsYUFBWUYsY0FBYyxDQUFDLENBQUQsQ0FBSSxtQkFBa0JDLEdBQUcsQ0FBQ08sT0FBUSxFQUR2RSxDQUFOO0FBRUQ7QUFDRjs7QUFFRCxTQUFPUixjQUFQO0FBQ0Q7O0FBRUQsU0FBU1MsZ0JBQVQsQ0FBMkJDLEtBQTNCLEVBQWtDO0FBQ2hDLE1BQUksQ0FBQ0MsZ0JBQUVDLFFBQUYsQ0FBV0YsS0FBWCxDQUFMLEVBQXdCO0FBQ3RCLFVBQU0sSUFBSVIsS0FBSixDQUFVLG1EQUFWLENBQU47QUFDRDs7QUFFRCxNQUFJO0FBQ0YsV0FBT1EsS0FBSyxDQUFDaEIsS0FBTixDQUFZLEdBQVosRUFBaUJDLEdBQWpCLENBQXNCQyxDQUFELElBQU9BLENBQUMsQ0FBQ0MsSUFBRixFQUE1QixFQUFzQ0MsTUFBdEMsQ0FBNkNDLE9BQTdDLENBQVA7QUFDRCxHQUZELENBRUUsT0FBT0UsR0FBUCxFQUFZO0FBQ1osVUFBTSxJQUFJQyxLQUFKLENBQVUsMEVBQ0EseUVBREEsR0FFQSxjQUZWLENBQU47QUFHRDtBQUNGOztBQUVELFNBQVNXLGdCQUFULENBQTJCQyxJQUEzQixFQUFpQztBQUMvQixNQUFJO0FBTUYsUUFBSVYsWUFBR1csUUFBSCxDQUFZRCxJQUFaLEVBQWtCRSxNQUFsQixFQUFKLEVBQWdDO0FBQzlCRixNQUFBQSxJQUFJLEdBQUdWLFlBQUdHLFlBQUgsQ0FBZ0JPLElBQWhCLEVBQXNCLE1BQXRCLENBQVA7QUFDRDtBQUNGLEdBVEQsQ0FTRSxPQUFPYixHQUFQLEVBQVksQ0FFYjs7QUFDRGEsRUFBQUEsSUFBSSxHQUFHRyxJQUFJLENBQUNDLEtBQUwsQ0FBV0osSUFBWCxDQUFQOztBQUNBLE1BQUksQ0FBQ0gsZ0JBQUVRLGFBQUYsQ0FBZ0JMLElBQWhCLENBQUwsRUFBNEI7QUFDMUIsVUFBTSx5Q0FBTjtBQUNEOztBQUNELFNBQU9BLElBQVA7QUFDRDs7QUFFRCxTQUFTTSxpQkFBVCxDQUE0QkMsTUFBNUIsRUFBb0M7QUFDbEMsTUFBSSxDQUFDVixnQkFBRVcsUUFBRixDQUFXQyw4QkFBWCxFQUEwQkYsTUFBMUIsQ0FBTCxFQUF3QztBQUN0QyxVQUFPLDZCQUE0QkEsTUFBTywwQkFBcEMsR0FDQyx5Q0FBd0NKLElBQUksQ0FBQ08sU0FBTCxDQUFlRCw4QkFBZixDQUE4QixFQUQ3RTtBQUVEOztBQUVELFNBQU9GLE1BQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSU5TVEFMTF9UWVBFUyB9IGZyb20gJy4uL2V4dGVuc2lvbi1jb25maWcnO1xuXG4vLyBzZXJ2ZXJBcmdzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGBzZXJ2ZXJgIChkZWZhdWx0KSBzdWJjb21tYW5kXG5mdW5jdGlvbiBwYXJzZVNlY3VyaXR5RmVhdHVyZXMgKGZlYXR1cmVzKSB7XG4gIGNvbnN0IHNwbGl0dGVyID0gKHNwbGl0T24sIHN0cikgPT4gYCR7c3RyfWAuc3BsaXQoc3BsaXRPbikubWFwKChzKSA9PiBzLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xuICBsZXQgcGFyc2VkRmVhdHVyZXM7XG4gIHRyeSB7XG4gICAgcGFyc2VkRmVhdHVyZXMgPSBzcGxpdHRlcignLCcsIGZlYXR1cmVzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcGFyc2UgdmFsdWUgb2YgLS1hbGxvdy9kZW55LWluc2VjdXJlLiBTaG91bGQgYmUgJyArXG4gICAgICAgICAgICAgICAgICAgICdhIGxpc3Qgb2Ygc3RyaW5ncyBzZXBhcmF0ZWQgYnkgY29tbWFzLCBvciBhIHBhdGggdG8gYSBmaWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAnbGlzdGluZyBvbmUgZmVhdHVyZSBuYW1lIHBlciBsaW5lLicpO1xuICB9XG5cbiAgaWYgKHBhcnNlZEZlYXR1cmVzLmxlbmd0aCA9PT0gMSAmJiBmcy5leGlzdHNTeW5jKHBhcnNlZEZlYXR1cmVzWzBdKSkge1xuICAgIC8vIHdlIG1pZ2h0IGhhdmUgYSBmaWxlIHdoaWNoIGlzIGEgbGlzdCBvZiBmZWF0dXJlc1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlRmVhdHVyZXMgPSBmcy5yZWFkRmlsZVN5bmMocGFyc2VkRmVhdHVyZXNbMF0sICd1dGY4Jyk7XG4gICAgICBwYXJzZWRGZWF0dXJlcyA9IHNwbGl0dGVyKCdcXG4nLCBmaWxlRmVhdHVyZXMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0ZWQgdG8gcmVhZCAtLWFsbG93L2RlbnktaW5zZWN1cmUgZmVhdHVyZSBuYW1lcyBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgZnJvbSBmaWxlICR7cGFyc2VkRmVhdHVyZXNbMF19IGJ1dCBnb3QgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZEZlYXR1cmVzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBsdWdpbk5hbWVzIChuYW1lcykge1xuICBpZiAoIV8uaXNTdHJpbmcobmFtZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUbyBwYXJzZSBwbHVnaW4gbmFtZXMsIG5hbWVzIG11c3QgYmUgYSBDU1Ygc3RyaW5nJyk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBuYW1lcy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcGFyc2UgdmFsdWUgb2YgLS1wbHVnaW5zLiBTaG91bGQgYmUgYSBsaXN0IG9mIHBsdWdpbiBuYW1lcyAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3NlcGFyYXRlZCBieSBjb21tYXMuIFBsdWdpbiBuYW1lcyBhcmUgdGhvc2UgZm91bmQgd2hlbiBydW5uaW5nIGBhcHBpdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICdwbHVnaW4gbGlzdGAnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZURlZmF1bHRDYXBzIChjYXBzKSB7XG4gIHRyeSB7XG4gICAgLy8gdXNlIHN5bmNocm9ub3VzIGZpbGUgYWNjZXNzLCBhcyBgYXJncGFyc2VgIHByb3ZpZGVzIG5vIHdheSBvZiBlaXRoZXJcbiAgICAvLyBhd2FpdGluZyBvciB1c2luZyBjYWxsYmFja3MuIFRoaXMgc3RlcCBoYXBwZW5zIGluIHN0YXJ0dXAsIGluIHdoYXQgaXNcbiAgICAvLyBlZmZlY3RpdmVseSBjb21tYW5kLWxpbmUgY29kZSwgc28gbm90aGluZyBpcyBibG9ja2VkIGluIHRlcm1zIG9mXG4gICAgLy8gc2Vzc2lvbnMsIHNvIGhvbGRpbmcgdXAgdGhlIGV2ZW50IGxvb3AgZG9lcyBub3QgaW5jdXIgdGhlIHVzdWFsXG4gICAgLy8gZHJhd2JhY2tzLlxuICAgIGlmIChmcy5zdGF0U3luYyhjYXBzKS5pc0ZpbGUoKSkge1xuICAgICAgY2FwcyA9IGZzLnJlYWRGaWxlU3luYyhjYXBzLCAndXRmOCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gbm90IGEgZmlsZSwgb3Igbm90IHJlYWRhYmxlXG4gIH1cbiAgY2FwcyA9IEpTT04ucGFyc2UoY2Fwcyk7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGNhcHMpKSB7XG4gICAgdGhyb3cgJ0ludmFsaWQgZm9ybWF0IGZvciBkZWZhdWx0IGNhcGFiaWxpdGllcyc7XG4gIH1cbiAgcmV0dXJuIGNhcHM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW5zdGFsbFR5cGVzIChzb3VyY2UpIHtcbiAgaWYgKCFfLmluY2x1ZGVzKElOU1RBTExfVFlQRVMsIHNvdXJjZSkpIHtcbiAgICB0aHJvdyBgQXJndW1lbnQgdG8gLS1zb3VyY2Ugd2FzICcke3NvdXJjZX0nLCB3aGljaCBpcyBub3QgYSB2YWxpZCBgICtcbiAgICAgICAgICBgZHJpdmVyIHNvdXJjZSB0eXBlLiBJdCBtdXN0IGJlIG9uZSBvZiAke0pTT04uc3RyaW5naWZ5KElOU1RBTExfVFlQRVMpfWA7XG4gIH1cblxuICByZXR1cm4gc291cmNlO1xufVxuXG5leHBvcnQge1xuICBwYXJzZVNlY3VyaXR5RmVhdHVyZXMsXG4gIHBhcnNlRGVmYXVsdENhcHMsXG4gIHBhcnNlSW5zdGFsbFR5cGVzLFxuICBwYXJzZVBsdWdpbk5hbWVzLFxufTtcbiJdLCJmaWxlIjoibGliL2NsaS9wYXJzZXItaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -1,77 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.default = void 0;
11
-
12
- require("source-map-support/register");
13
-
14
- var _lodash = _interopRequireDefault(require("lodash"));
15
-
16
- var _extensionConfig = _interopRequireWildcard(require("./extension-config"));
17
-
18
- class DriverConfig extends _extensionConfig.default {
19
- constructor(appiumHome, logFn = null) {
20
- super(appiumHome, _extensionConfig.DRIVER_TYPE, logFn);
21
- }
22
-
23
- getConfigProblems(driver) {
24
- const problems = [];
25
- const automationNames = [];
26
- const {
27
- platformNames,
28
- automationName
29
- } = driver;
30
-
31
- if (!_lodash.default.isArray(platformNames)) {
32
- problems.push({
33
- err: 'Missing or incorrect supported platformName list.',
34
- val: platformNames
35
- });
36
- } else {
37
- for (const pName of platformNames) {
38
- if (!_lodash.default.isString(pName)) {
39
- problems.push({
40
- err: 'Incorrectly formatted platformName.',
41
- val: pName
42
- });
43
- }
44
- }
45
- }
46
-
47
- if (!_lodash.default.isString(automationName)) {
48
- problems.push({
49
- err: 'Missing or incorrect automationName',
50
- val: automationName
51
- });
52
- }
53
-
54
- if (_lodash.default.includes(automationNames, automationName)) {
55
- problems.push({
56
- err: 'Multiple drivers claim support for the same automationName',
57
- val: automationName
58
- });
59
- }
60
-
61
- automationNames.push(automationName);
62
- return problems;
63
- }
64
-
65
- extensionDesc(driverName, {
66
- version,
67
- automationName
68
- }) {
69
- return `${driverName}@${version} (automationName '${automationName}')`;
70
- }
71
-
72
- }
73
-
74
- exports.default = DriverConfig;require('source-map-support').install();
75
-
76
-
77
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXItY29uZmlnLmpzIl0sIm5hbWVzIjpbIkRyaXZlckNvbmZpZyIsIkV4dGVuc2lvbkNvbmZpZyIsImNvbnN0cnVjdG9yIiwiYXBwaXVtSG9tZSIsImxvZ0ZuIiwiRFJJVkVSX1RZUEUiLCJnZXRDb25maWdQcm9ibGVtcyIsImRyaXZlciIsInByb2JsZW1zIiwiYXV0b21hdGlvbk5hbWVzIiwicGxhdGZvcm1OYW1lcyIsImF1dG9tYXRpb25OYW1lIiwiXyIsImlzQXJyYXkiLCJwdXNoIiwiZXJyIiwidmFsIiwicE5hbWUiLCJpc1N0cmluZyIsImluY2x1ZGVzIiwiZXh0ZW5zaW9uRGVzYyIsImRyaXZlck5hbWUiLCJ2ZXJzaW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRWUsTUFBTUEsWUFBTixTQUEyQkMsd0JBQTNCLENBQTJDO0FBQ3hEQyxFQUFBQSxXQUFXLENBQUVDLFVBQUYsRUFBY0MsS0FBSyxHQUFHLElBQXRCLEVBQTRCO0FBQ3JDLFVBQU1ELFVBQU4sRUFBa0JFLDRCQUFsQixFQUErQkQsS0FBL0I7QUFDRDs7QUFFREUsRUFBQUEsaUJBQWlCLENBQUVDLE1BQUYsRUFBVTtBQUN6QixVQUFNQyxRQUFRLEdBQUcsRUFBakI7QUFDQSxVQUFNQyxlQUFlLEdBQUcsRUFBeEI7QUFDQSxVQUFNO0FBQUNDLE1BQUFBLGFBQUQ7QUFBZ0JDLE1BQUFBO0FBQWhCLFFBQWtDSixNQUF4Qzs7QUFFQSxRQUFJLENBQUNLLGdCQUFFQyxPQUFGLENBQVVILGFBQVYsQ0FBTCxFQUErQjtBQUM3QkYsTUFBQUEsUUFBUSxDQUFDTSxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLG1EQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRU47QUFGTyxPQUFkO0FBSUQsS0FMRCxNQUtPO0FBQ0wsV0FBSyxNQUFNTyxLQUFYLElBQW9CUCxhQUFwQixFQUFtQztBQUNqQyxZQUFJLENBQUNFLGdCQUFFTSxRQUFGLENBQVdELEtBQVgsQ0FBTCxFQUF3QjtBQUN0QlQsVUFBQUEsUUFBUSxDQUFDTSxJQUFULENBQWM7QUFBQ0MsWUFBQUEsR0FBRyxFQUFFLHFDQUFOO0FBQTZDQyxZQUFBQSxHQUFHLEVBQUVDO0FBQWxELFdBQWQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsUUFBSSxDQUFDTCxnQkFBRU0sUUFBRixDQUFXUCxjQUFYLENBQUwsRUFBaUM7QUFDL0JILE1BQUFBLFFBQVEsQ0FBQ00sSUFBVCxDQUFjO0FBQUNDLFFBQUFBLEdBQUcsRUFBRSxxQ0FBTjtBQUE2Q0MsUUFBQUEsR0FBRyxFQUFFTDtBQUFsRCxPQUFkO0FBQ0Q7O0FBRUQsUUFBSUMsZ0JBQUVPLFFBQUYsQ0FBV1YsZUFBWCxFQUE0QkUsY0FBNUIsQ0FBSixFQUFpRDtBQUMvQ0gsTUFBQUEsUUFBUSxDQUFDTSxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLDREQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRUw7QUFGTyxPQUFkO0FBSUQ7O0FBQ0RGLElBQUFBLGVBQWUsQ0FBQ0ssSUFBaEIsQ0FBcUJILGNBQXJCO0FBRUEsV0FBT0gsUUFBUDtBQUNEOztBQUVEWSxFQUFBQSxhQUFhLENBQUVDLFVBQUYsRUFBYztBQUFDQyxJQUFBQSxPQUFEO0FBQVVYLElBQUFBO0FBQVYsR0FBZCxFQUF5QztBQUNwRCxXQUFRLEdBQUVVLFVBQVcsSUFBR0MsT0FBUSxxQkFBb0JYLGNBQWUsSUFBbkU7QUFDRDs7QUF4Q3VEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db25maWcsIHsgRFJJVkVSX1RZUEUgfSBmcm9tICcuL2V4dGVuc2lvbi1jb25maWcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZXJDb25maWcgZXh0ZW5kcyBFeHRlbnNpb25Db25maWcge1xuICBjb25zdHJ1Y3RvciAoYXBwaXVtSG9tZSwgbG9nRm4gPSBudWxsKSB7XG4gICAgc3VwZXIoYXBwaXVtSG9tZSwgRFJJVkVSX1RZUEUsIGxvZ0ZuKTtcbiAgfVxuXG4gIGdldENvbmZpZ1Byb2JsZW1zIChkcml2ZXIpIHtcbiAgICBjb25zdCBwcm9ibGVtcyA9IFtdO1xuICAgIGNvbnN0IGF1dG9tYXRpb25OYW1lcyA9IFtdO1xuICAgIGNvbnN0IHtwbGF0Zm9ybU5hbWVzLCBhdXRvbWF0aW9uTmFtZX0gPSBkcml2ZXI7XG5cbiAgICBpZiAoIV8uaXNBcnJheShwbGF0Zm9ybU5hbWVzKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7XG4gICAgICAgIGVycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IHN1cHBvcnRlZCBwbGF0Zm9ybU5hbWUgbGlzdC4nLFxuICAgICAgICB2YWw6IHBsYXRmb3JtTmFtZXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHBOYW1lIG9mIHBsYXRmb3JtTmFtZXMpIHtcbiAgICAgICAgaWYgKCFfLmlzU3RyaW5nKHBOYW1lKSkge1xuICAgICAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ0luY29ycmVjdGx5IGZvcm1hdHRlZCBwbGF0Zm9ybU5hbWUuJywgdmFsOiBwTmFtZX0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKGF1dG9tYXRpb25OYW1lKSkge1xuICAgICAgcHJvYmxlbXMucHVzaCh7ZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3QgYXV0b21hdGlvbk5hbWUnLCB2YWw6IGF1dG9tYXRpb25OYW1lfSk7XG4gICAgfVxuXG4gICAgaWYgKF8uaW5jbHVkZXMoYXV0b21hdGlvbk5hbWVzLCBhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBlcnI6ICdNdWx0aXBsZSBkcml2ZXJzIGNsYWltIHN1cHBvcnQgZm9yIHRoZSBzYW1lIGF1dG9tYXRpb25OYW1lJyxcbiAgICAgICAgdmFsOiBhdXRvbWF0aW9uTmFtZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGF1dG9tYXRpb25OYW1lcy5wdXNoKGF1dG9tYXRpb25OYW1lKTtcblxuICAgIHJldHVybiBwcm9ibGVtcztcbiAgfVxuXG4gIGV4dGVuc2lvbkRlc2MgKGRyaXZlck5hbWUsIHt2ZXJzaW9uLCBhdXRvbWF0aW9uTmFtZX0pIHtcbiAgICByZXR1cm4gYCR7ZHJpdmVyTmFtZX1AJHt2ZXJzaW9ufSAoYXV0b21hdGlvbk5hbWUgJyR7YXV0b21hdGlvbk5hbWV9JylgO1xuICB9XG59XG5cbiJdLCJmaWxlIjoibGliL2RyaXZlci1jb25maWcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -1,96 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.findMatchingDriver = findMatchingDriver;
9
- exports.KNOWN_DRIVERS = void 0;
10
-
11
- require("source-map-support/register");
12
-
13
- var _lodash = _interopRequireDefault(require("lodash"));
14
-
15
- var _logger = _interopRequireDefault(require("./logger"));
16
-
17
- const KNOWN_DRIVERS = {
18
- uiautomator2: 'appium-uiautomator2-driver',
19
- xcuitest: 'appium-xcuitest-driver',
20
- youiengine: 'appium-youiengine-driver',
21
- windows: 'appium-windows-driver',
22
- mac: 'appium-mac-driver',
23
- espresso: 'appium-espresso-driver',
24
- tizen: 'appium-tizen-driver',
25
- flutter: 'appium-flutter-driver'
26
- };
27
- exports.KNOWN_DRIVERS = KNOWN_DRIVERS;
28
-
29
- function getDriverBySupport(drivers, matchAutomationName, matchPlatformName) {
30
- for (const [driverName, driverData] of _lodash.default.toPairs(drivers)) {
31
- const {
32
- automationName,
33
- platformNames
34
- } = driverData;
35
- const aNameMatches = automationName.toLowerCase() === matchAutomationName.toLowerCase();
36
-
37
- const pNameMatches = _lodash.default.includes(platformNames.map(_lodash.default.toLower), matchPlatformName.toLowerCase());
38
-
39
- if (aNameMatches && pNameMatches) {
40
- return {
41
- driverName,
42
- ...driverData
43
- };
44
- }
45
-
46
- if (aNameMatches) {
47
- throw new Error(`Driver '${driverName}' supports automationName ` + `'${automationName}', but Appium could not find ` + `support for platformName '${matchPlatformName}'. Supported ` + `platformNames are: ` + JSON.stringify(platformNames));
48
- }
49
- }
50
-
51
- throw new Error(`Could not find installed driver to support given caps`);
52
- }
53
-
54
- function findMatchingDriver(config, {
55
- automationName,
56
- platformName
57
- }) {
58
- if (!_lodash.default.isString(platformName)) {
59
- throw new Error('You must include a platformName capability');
60
- }
61
-
62
- if (!_lodash.default.isString(automationName)) {
63
- throw new Error('You must include an automationName capability');
64
- }
65
-
66
- _logger.default.info(`Attempting to find matching driver for automationName ` + `'${automationName}' and platformName '${platformName}'`);
67
-
68
- try {
69
- const {
70
- driverName,
71
- mainClass,
72
- version
73
- } = getDriverBySupport(config.installedExtensions, automationName, platformName);
74
-
75
- _logger.default.info(`The '${driverName}' driver was installed and matched caps.`);
76
-
77
- _logger.default.info(`Will require it at ${config.getExtensionRequirePath(driverName)}`);
78
-
79
- const driver = config.require(driverName);
80
-
81
- if (!driver) {
82
- throw new Error(`MainClass ${mainClass} did not result in a driver object`);
83
- }
84
-
85
- return {
86
- driver,
87
- version
88
- };
89
- } catch (err) {
90
- const msg = `Could not find a driver for automationName ` + `'${automationName}' and platformName ${platformName}'. ` + `Have you installed a driver that supports those ` + `capabilities? Run 'appium driver list --installed' to see. ` + `(Lower-level error: ${err.message})`;
91
- throw new Error(msg);
92
- }
93
- }require('source-map-support').install();
94
-
95
-
96
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXJzLmpzIl0sIm5hbWVzIjpbIktOT1dOX0RSSVZFUlMiLCJ1aWF1dG9tYXRvcjIiLCJ4Y3VpdGVzdCIsInlvdWllbmdpbmUiLCJ3aW5kb3dzIiwibWFjIiwiZXNwcmVzc28iLCJ0aXplbiIsImZsdXR0ZXIiLCJnZXREcml2ZXJCeVN1cHBvcnQiLCJkcml2ZXJzIiwibWF0Y2hBdXRvbWF0aW9uTmFtZSIsIm1hdGNoUGxhdGZvcm1OYW1lIiwiZHJpdmVyTmFtZSIsImRyaXZlckRhdGEiLCJfIiwidG9QYWlycyIsImF1dG9tYXRpb25OYW1lIiwicGxhdGZvcm1OYW1lcyIsImFOYW1lTWF0Y2hlcyIsInRvTG93ZXJDYXNlIiwicE5hbWVNYXRjaGVzIiwiaW5jbHVkZXMiLCJtYXAiLCJ0b0xvd2VyIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZmluZE1hdGNoaW5nRHJpdmVyIiwiY29uZmlnIiwicGxhdGZvcm1OYW1lIiwiaXNTdHJpbmciLCJsb2ciLCJpbmZvIiwibWFpbkNsYXNzIiwidmVyc2lvbiIsImluc3RhbGxlZEV4dGVuc2lvbnMiLCJnZXRFeHRlbnNpb25SZXF1aXJlUGF0aCIsImRyaXZlciIsInJlcXVpcmUiLCJlcnIiLCJtc2ciLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFPQSxNQUFNQSxhQUFhLEdBQUc7QUFDcEJDLEVBQUFBLFlBQVksRUFBRSw0QkFETTtBQUVwQkMsRUFBQUEsUUFBUSxFQUFFLHdCQUZVO0FBR3BCQyxFQUFBQSxVQUFVLEVBQUUsMEJBSFE7QUFJcEJDLEVBQUFBLE9BQU8sRUFBRSx1QkFKVztBQUtwQkMsRUFBQUEsR0FBRyxFQUFFLG1CQUxlO0FBTXBCQyxFQUFBQSxRQUFRLEVBQUUsd0JBTlU7QUFPcEJDLEVBQUFBLEtBQUssRUFBRSxxQkFQYTtBQVFwQkMsRUFBQUEsT0FBTyxFQUFFO0FBUlcsQ0FBdEI7OztBQVdBLFNBQVNDLGtCQUFULENBQTZCQyxPQUE3QixFQUFzQ0MsbUJBQXRDLEVBQTJEQyxpQkFBM0QsRUFBOEU7QUFDNUUsT0FBSyxNQUFNLENBQUNDLFVBQUQsRUFBYUMsVUFBYixDQUFYLElBQXVDQyxnQkFBRUMsT0FBRixDQUFVTixPQUFWLENBQXZDLEVBQTJEO0FBQ3pELFVBQU07QUFBQ08sTUFBQUEsY0FBRDtBQUFpQkMsTUFBQUE7QUFBakIsUUFBa0NKLFVBQXhDO0FBQ0EsVUFBTUssWUFBWSxHQUFHRixjQUFjLENBQUNHLFdBQWYsT0FBaUNULG1CQUFtQixDQUFDUyxXQUFwQixFQUF0RDs7QUFDQSxVQUFNQyxZQUFZLEdBQUdOLGdCQUFFTyxRQUFGLENBQVdKLGFBQWEsQ0FBQ0ssR0FBZCxDQUFrQlIsZ0JBQUVTLE9BQXBCLENBQVgsRUFDV1osaUJBQWlCLENBQUNRLFdBQWxCLEVBRFgsQ0FBckI7O0FBR0EsUUFBSUQsWUFBWSxJQUFJRSxZQUFwQixFQUFrQztBQUNoQyxhQUFPO0FBQUNSLFFBQUFBLFVBQUQ7QUFBYSxXQUFHQztBQUFoQixPQUFQO0FBQ0Q7O0FBRUQsUUFBSUssWUFBSixFQUFrQjtBQUNoQixZQUFNLElBQUlNLEtBQUosQ0FBVyxXQUFVWixVQUFXLDRCQUF0QixHQUNDLElBQUdJLGNBQWUsK0JBRG5CLEdBRUMsNkJBQTRCTCxpQkFBa0IsZUFGL0MsR0FHQyxxQkFIRCxHQUlBYyxJQUFJLENBQUNDLFNBQUwsQ0FBZVQsYUFBZixDQUpWLENBQU47QUFLRDtBQUNGOztBQUVELFFBQU0sSUFBSU8sS0FBSixDQUFXLHVEQUFYLENBQU47QUFDRDs7QUFFRCxTQUFTRyxrQkFBVCxDQUE2QkMsTUFBN0IsRUFBcUM7QUFBQ1osRUFBQUEsY0FBRDtBQUFpQmEsRUFBQUE7QUFBakIsQ0FBckMsRUFBcUU7QUFDbkUsTUFBSSxDQUFDZixnQkFBRWdCLFFBQUYsQ0FBV0QsWUFBWCxDQUFMLEVBQStCO0FBQzdCLFVBQU0sSUFBSUwsS0FBSixDQUFVLDRDQUFWLENBQU47QUFDRDs7QUFFRCxNQUFJLENBQUNWLGdCQUFFZ0IsUUFBRixDQUFXZCxjQUFYLENBQUwsRUFBaUM7QUFDL0IsVUFBTSxJQUFJUSxLQUFKLENBQVUsK0NBQVYsQ0FBTjtBQUNEOztBQUVETyxrQkFBSUMsSUFBSixDQUFVLHdEQUFELEdBQ0MsSUFBR2hCLGNBQWUsdUJBQXNCYSxZQUFhLEdBRC9EOztBQUdBLE1BQUk7QUFDRixVQUFNO0FBQ0pqQixNQUFBQSxVQURJO0FBRUpxQixNQUFBQSxTQUZJO0FBR0pDLE1BQUFBO0FBSEksUUFJRjFCLGtCQUFrQixDQUFDb0IsTUFBTSxDQUFDTyxtQkFBUixFQUE2Qm5CLGNBQTdCLEVBQTZDYSxZQUE3QyxDQUp0Qjs7QUFLQUUsb0JBQUlDLElBQUosQ0FBVSxRQUFPcEIsVUFBVywwQ0FBNUI7O0FBQ0FtQixvQkFBSUMsSUFBSixDQUFVLHNCQUFxQkosTUFBTSxDQUFDUSx1QkFBUCxDQUErQnhCLFVBQS9CLENBQTJDLEVBQTFFOztBQUNBLFVBQU15QixNQUFNLEdBQUdULE1BQU0sQ0FBQ1UsT0FBUCxDQUFlMUIsVUFBZixDQUFmOztBQUNBLFFBQUksQ0FBQ3lCLE1BQUwsRUFBYTtBQUNYLFlBQU0sSUFBSWIsS0FBSixDQUFXLGFBQVlTLFNBQVUsb0NBQWpDLENBQU47QUFDRDs7QUFDRCxXQUFPO0FBQUNJLE1BQUFBLE1BQUQ7QUFBU0gsTUFBQUE7QUFBVCxLQUFQO0FBQ0QsR0FiRCxDQWFFLE9BQU9LLEdBQVAsRUFBWTtBQUNaLFVBQU1DLEdBQUcsR0FBSSw2Q0FBRCxHQUNDLElBQUd4QixjQUFlLHNCQUFxQmEsWUFBYSxLQURyRCxHQUVDLGtEQUZELEdBR0MsNkRBSEQsR0FJQyx1QkFBc0JVLEdBQUcsQ0FBQ0UsT0FBUSxHQUovQztBQUtBLFVBQU0sSUFBSWpCLEtBQUosQ0FBVWdCLEdBQVYsQ0FBTjtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cblxuLy8gVGhpcyBpcyBhIG1hcCBvZiBkcml2ZXIgbmFtZXMgdG8gbnBtIHBhY2thZ2VzIHJlcHJlc2VudGluZyB0aG9zZSBkcml2ZXJzLlxuLy8gVGhlIGRyaXZlcnMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBDTEkgc28gdXNlcnMgY2FuIGp1c3Rcbi8vIHR5cGUgJ2FwcGl1bSBkcml2ZXIgaW5zdGFsbCAnbmFtZScnLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgZnVsbFxuLy8gbnBtIHBhY2thZ2UuIEkuZS4sIHRoZXNlIGFyZSB0aGUgb2ZmaWNpYWxseSByZWNvZ25pemVkIGRyaXZlcnMuXG5jb25zdCBLTk9XTl9EUklWRVJTID0ge1xuICB1aWF1dG9tYXRvcjI6ICdhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcicsXG4gIHhjdWl0ZXN0OiAnYXBwaXVtLXhjdWl0ZXN0LWRyaXZlcicsXG4gIHlvdWllbmdpbmU6ICdhcHBpdW0teW91aWVuZ2luZS1kcml2ZXInLFxuICB3aW5kb3dzOiAnYXBwaXVtLXdpbmRvd3MtZHJpdmVyJyxcbiAgbWFjOiAnYXBwaXVtLW1hYy1kcml2ZXInLFxuICBlc3ByZXNzbzogJ2FwcGl1bS1lc3ByZXNzby1kcml2ZXInLFxuICB0aXplbjogJ2FwcGl1bS10aXplbi1kcml2ZXInLFxuICBmbHV0dGVyOiAnYXBwaXVtLWZsdXR0ZXItZHJpdmVyJyxcbn07XG5cbmZ1bmN0aW9uIGdldERyaXZlckJ5U3VwcG9ydCAoZHJpdmVycywgbWF0Y2hBdXRvbWF0aW9uTmFtZSwgbWF0Y2hQbGF0Zm9ybU5hbWUpIHtcbiAgZm9yIChjb25zdCBbZHJpdmVyTmFtZSwgZHJpdmVyRGF0YV0gb2YgXy50b1BhaXJzKGRyaXZlcnMpKSB7XG4gICAgY29uc3Qge2F1dG9tYXRpb25OYW1lLCBwbGF0Zm9ybU5hbWVzfSA9IGRyaXZlckRhdGE7XG4gICAgY29uc3QgYU5hbWVNYXRjaGVzID0gYXV0b21hdGlvbk5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2hBdXRvbWF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHBOYW1lTWF0Y2hlcyA9IF8uaW5jbHVkZXMocGxhdGZvcm1OYW1lcy5tYXAoXy50b0xvd2VyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoUGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgaWYgKGFOYW1lTWF0Y2hlcyAmJiBwTmFtZU1hdGNoZXMpIHtcbiAgICAgIHJldHVybiB7ZHJpdmVyTmFtZSwgLi4uZHJpdmVyRGF0YX07XG4gICAgfVxuXG4gICAgaWYgKGFOYW1lTWF0Y2hlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEcml2ZXIgJyR7ZHJpdmVyTmFtZX0nIHN1cHBvcnRzIGF1dG9tYXRpb25OYW1lIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAnJHthdXRvbWF0aW9uTmFtZX0nLCBidXQgQXBwaXVtIGNvdWxkIG5vdCBmaW5kIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBzdXBwb3J0IGZvciBwbGF0Zm9ybU5hbWUgJyR7bWF0Y2hQbGF0Zm9ybU5hbWV9Jy4gU3VwcG9ydGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBwbGF0Zm9ybU5hbWVzIGFyZTogYCArXG4gICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkocGxhdGZvcm1OYW1lcykpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgaW5zdGFsbGVkIGRyaXZlciB0byBzdXBwb3J0IGdpdmVuIGNhcHNgKTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nRHJpdmVyIChjb25maWcsIHthdXRvbWF0aW9uTmFtZSwgcGxhdGZvcm1OYW1lfSkge1xuICBpZiAoIV8uaXNTdHJpbmcocGxhdGZvcm1OYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgaW5jbHVkZSBhIHBsYXRmb3JtTmFtZSBjYXBhYmlsaXR5Jyk7XG4gIH1cblxuICBpZiAoIV8uaXNTdHJpbmcoYXV0b21hdGlvbk5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBpbmNsdWRlIGFuIGF1dG9tYXRpb25OYW1lIGNhcGFiaWxpdHknKTtcbiAgfVxuXG4gIGxvZy5pbmZvKGBBdHRlbXB0aW5nIHRvIGZpbmQgbWF0Y2hpbmcgZHJpdmVyIGZvciBhdXRvbWF0aW9uTmFtZSBgICtcbiAgICAgICAgICAgYCcke2F1dG9tYXRpb25OYW1lfScgYW5kIHBsYXRmb3JtTmFtZSAnJHtwbGF0Zm9ybU5hbWV9J2ApO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge1xuICAgICAgZHJpdmVyTmFtZSxcbiAgICAgIG1haW5DbGFzcyxcbiAgICAgIHZlcnNpb24sXG4gICAgfSA9IGdldERyaXZlckJ5U3VwcG9ydChjb25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucywgYXV0b21hdGlvbk5hbWUsIHBsYXRmb3JtTmFtZSk7XG4gICAgbG9nLmluZm8oYFRoZSAnJHtkcml2ZXJOYW1lfScgZHJpdmVyIHdhcyBpbnN0YWxsZWQgYW5kIG1hdGNoZWQgY2Fwcy5gKTtcbiAgICBsb2cuaW5mbyhgV2lsbCByZXF1aXJlIGl0IGF0ICR7Y29uZmlnLmdldEV4dGVuc2lvblJlcXVpcmVQYXRoKGRyaXZlck5hbWUpfWApO1xuICAgIGNvbnN0IGRyaXZlciA9IGNvbmZpZy5yZXF1aXJlKGRyaXZlck5hbWUpO1xuICAgIGlmICghZHJpdmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1haW5DbGFzcyAke21haW5DbGFzc30gZGlkIG5vdCByZXN1bHQgaW4gYSBkcml2ZXIgb2JqZWN0YCk7XG4gICAgfVxuICAgIHJldHVybiB7ZHJpdmVyLCB2ZXJzaW9ufTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbXNnID0gYENvdWxkIG5vdCBmaW5kIGEgZHJpdmVyIGZvciBhdXRvbWF0aW9uTmFtZSBgICtcbiAgICAgICAgICAgICAgICBgJyR7YXV0b21hdGlvbk5hbWV9JyBhbmQgcGxhdGZvcm1OYW1lICR7cGxhdGZvcm1OYW1lfScuIGAgK1xuICAgICAgICAgICAgICAgIGBIYXZlIHlvdSBpbnN0YWxsZWQgYSBkcml2ZXIgdGhhdCBzdXBwb3J0cyB0aG9zZSBgICtcbiAgICAgICAgICAgICAgICBgY2FwYWJpbGl0aWVzPyBSdW4gJ2FwcGl1bSBkcml2ZXIgbGlzdCAtLWluc3RhbGxlZCcgdG8gc2VlLiBgICtcbiAgICAgICAgICAgICAgICBgKExvd2VyLWxldmVsIGVycm9yOiAke2Vyci5tZXNzYWdlfSlgO1xuICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGZpbmRNYXRjaGluZ0RyaXZlcixcbiAgS05PV05fRFJJVkVSUyxcbn07XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=