appium 2.0.0-beta.9 → 2.0.0-rc.2

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 (208) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +149 -58
  3. package/build/lib/appium.d.ts +229 -0
  4. package/build/lib/appium.d.ts.map +1 -0
  5. package/build/lib/appium.js +677 -449
  6. package/build/lib/appium.js.map +1 -0
  7. package/build/lib/cli/args.d.ts +17 -0
  8. package/build/lib/cli/args.d.ts.map +1 -0
  9. package/build/lib/cli/args.js +263 -300
  10. package/build/lib/cli/args.js.map +1 -0
  11. package/build/lib/cli/driver-command.d.ts +102 -0
  12. package/build/lib/cli/driver-command.d.ts.map +1 -0
  13. package/build/lib/cli/driver-command.js +131 -81
  14. package/build/lib/cli/driver-command.js.map +1 -0
  15. package/build/lib/cli/extension-command.d.ts +402 -0
  16. package/build/lib/cli/extension-command.d.ts.map +1 -0
  17. package/build/lib/cli/extension-command.js +799 -383
  18. package/build/lib/cli/extension-command.js.map +1 -0
  19. package/build/lib/cli/extension.d.ts +23 -0
  20. package/build/lib/cli/extension.d.ts.map +1 -0
  21. package/build/lib/cli/extension.js +70 -68
  22. package/build/lib/cli/extension.js.map +1 -0
  23. package/build/lib/cli/parser.d.ts +84 -0
  24. package/build/lib/cli/parser.d.ts.map +1 -0
  25. package/build/lib/cli/parser.js +252 -148
  26. package/build/lib/cli/parser.js.map +1 -0
  27. package/build/lib/cli/plugin-command.d.ts +99 -0
  28. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  29. package/build/lib/cli/plugin-command.js +125 -81
  30. package/build/lib/cli/plugin-command.js.map +1 -0
  31. package/build/lib/cli/utils.d.ts +29 -0
  32. package/build/lib/cli/utils.d.ts.map +1 -0
  33. package/build/lib/cli/utils.js +72 -51
  34. package/build/lib/cli/utils.js.map +1 -0
  35. package/build/lib/config-file.d.ts +100 -0
  36. package/build/lib/config-file.d.ts.map +1 -0
  37. package/build/lib/config-file.js +207 -0
  38. package/build/lib/config-file.js.map +1 -0
  39. package/build/lib/config.d.ts +49 -0
  40. package/build/lib/config.d.ts.map +1 -0
  41. package/build/lib/config.js +262 -223
  42. package/build/lib/config.js.map +1 -0
  43. package/build/lib/constants.d.ts +56 -0
  44. package/build/lib/constants.d.ts.map +1 -0
  45. package/build/lib/constants.js +73 -0
  46. package/build/lib/constants.js.map +1 -0
  47. package/build/lib/extension/driver-config.d.ts +82 -0
  48. package/build/lib/extension/driver-config.d.ts.map +1 -0
  49. package/build/lib/extension/driver-config.js +210 -0
  50. package/build/lib/extension/driver-config.js.map +1 -0
  51. package/build/lib/extension/extension-config.d.ts +270 -0
  52. package/build/lib/extension/extension-config.d.ts.map +1 -0
  53. package/build/lib/extension/extension-config.js +601 -0
  54. package/build/lib/extension/extension-config.js.map +1 -0
  55. package/build/lib/extension/index.d.ts +48 -0
  56. package/build/lib/extension/index.d.ts.map +1 -0
  57. package/build/lib/extension/index.js +105 -0
  58. package/build/lib/extension/index.js.map +1 -0
  59. package/build/lib/extension/manifest-migrations.d.ts +27 -0
  60. package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
  61. package/build/lib/extension/manifest-migrations.js +134 -0
  62. package/build/lib/extension/manifest-migrations.js.map +1 -0
  63. package/build/lib/extension/manifest.d.ts +145 -0
  64. package/build/lib/extension/manifest.d.ts.map +1 -0
  65. package/build/lib/extension/manifest.js +528 -0
  66. package/build/lib/extension/manifest.js.map +1 -0
  67. package/build/lib/extension/package-changed.d.ts +11 -0
  68. package/build/lib/extension/package-changed.d.ts.map +1 -0
  69. package/build/lib/extension/package-changed.js +62 -0
  70. package/build/lib/extension/package-changed.js.map +1 -0
  71. package/build/lib/extension/plugin-config.d.ts +56 -0
  72. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  73. package/build/lib/extension/plugin-config.js +102 -0
  74. package/build/lib/extension/plugin-config.js.map +1 -0
  75. package/build/lib/grid-register.d.ts +10 -0
  76. package/build/lib/grid-register.d.ts.map +1 -0
  77. package/build/lib/grid-register.js +122 -144
  78. package/build/lib/grid-register.js.map +1 -0
  79. package/build/lib/logger.d.ts +3 -0
  80. package/build/lib/logger.d.ts.map +1 -0
  81. package/build/lib/logger.js +5 -17
  82. package/build/lib/logger.js.map +1 -0
  83. package/build/lib/logsink.d.ts +4 -0
  84. package/build/lib/logsink.d.ts.map +1 -0
  85. package/build/lib/logsink.js +189 -184
  86. package/build/lib/logsink.js.map +1 -0
  87. package/build/lib/main.d.ts +62 -0
  88. package/build/lib/main.d.ts.map +1 -0
  89. package/build/lib/main.js +406 -234
  90. package/build/lib/main.js.map +1 -0
  91. package/build/lib/schema/arg-spec.d.ts +143 -0
  92. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  93. package/build/lib/schema/arg-spec.js +164 -0
  94. package/build/lib/schema/arg-spec.js.map +1 -0
  95. package/build/lib/schema/cli-args.d.ts +19 -0
  96. package/build/lib/schema/cli-args.d.ts.map +1 -0
  97. package/build/lib/schema/cli-args.js +220 -0
  98. package/build/lib/schema/cli-args.js.map +1 -0
  99. package/build/lib/schema/cli-transformers.d.ts +5 -0
  100. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  101. package/build/lib/schema/cli-transformers.js +124 -0
  102. package/build/lib/schema/cli-transformers.js.map +1 -0
  103. package/build/lib/schema/index.d.ts +3 -0
  104. package/build/lib/schema/index.d.ts.map +1 -0
  105. package/build/lib/schema/index.js +19 -0
  106. package/build/lib/schema/index.js.map +1 -0
  107. package/build/lib/schema/keywords.d.ts +24 -0
  108. package/build/lib/schema/keywords.d.ts.map +1 -0
  109. package/build/lib/schema/keywords.js +128 -0
  110. package/build/lib/schema/keywords.js.map +1 -0
  111. package/build/lib/schema/schema.d.ts +260 -0
  112. package/build/lib/schema/schema.d.ts.map +1 -0
  113. package/build/lib/schema/schema.js +640 -0
  114. package/build/lib/schema/schema.js.map +1 -0
  115. package/build/lib/utils.d.ts +276 -0
  116. package/build/lib/utils.d.ts.map +1 -0
  117. package/build/lib/utils.js +372 -192
  118. package/build/lib/utils.js.map +1 -0
  119. package/build/types/cli.d.ts +134 -0
  120. package/build/types/cli.d.ts.map +1 -0
  121. package/build/types/cli.js +3 -0
  122. package/build/types/cli.js.map +1 -0
  123. package/build/types/index.d.ts +15 -0
  124. package/build/types/index.d.ts.map +1 -0
  125. package/build/types/index.js +19 -0
  126. package/build/types/index.js.map +1 -0
  127. package/build/types/manifest/base.d.ts +135 -0
  128. package/build/types/manifest/base.d.ts.map +1 -0
  129. package/build/types/manifest/base.js +3 -0
  130. package/build/types/manifest/base.js.map +1 -0
  131. package/build/types/manifest/index.d.ts +21 -0
  132. package/build/types/manifest/index.d.ts.map +1 -0
  133. package/build/types/manifest/index.js +42 -0
  134. package/build/types/manifest/index.js.map +1 -0
  135. package/build/types/manifest/v3.d.ts +139 -0
  136. package/build/types/manifest/v3.d.ts.map +1 -0
  137. package/build/types/manifest/v3.js +3 -0
  138. package/build/types/manifest/v3.js.map +1 -0
  139. package/build/types/manifest/v4.d.ts +139 -0
  140. package/build/types/manifest/v4.d.ts.map +1 -0
  141. package/build/types/manifest/v4.js +3 -0
  142. package/build/types/manifest/v4.js.map +1 -0
  143. package/driver.d.ts +1 -0
  144. package/driver.js +14 -0
  145. package/index.js +11 -0
  146. package/lib/appium.js +545 -188
  147. package/lib/cli/args.js +275 -407
  148. package/lib/cli/driver-command.js +132 -24
  149. package/lib/cli/extension-command.js +751 -272
  150. package/lib/cli/extension.js +38 -19
  151. package/lib/cli/parser.js +267 -95
  152. package/lib/cli/plugin-command.js +122 -22
  153. package/lib/cli/utils.js +24 -10
  154. package/lib/config-file.js +220 -0
  155. package/lib/config.js +243 -132
  156. package/lib/constants.js +79 -0
  157. package/lib/extension/driver-config.js +247 -0
  158. package/lib/extension/extension-config.js +709 -0
  159. package/lib/extension/index.js +116 -0
  160. package/lib/extension/manifest-migrations.js +136 -0
  161. package/lib/extension/manifest.js +580 -0
  162. package/lib/extension/package-changed.js +64 -0
  163. package/lib/extension/plugin-config.js +112 -0
  164. package/lib/grid-register.js +49 -35
  165. package/lib/logger.js +1 -2
  166. package/lib/logsink.js +59 -36
  167. package/lib/main.js +392 -104
  168. package/lib/schema/arg-spec.js +229 -0
  169. package/lib/schema/cli-args.js +241 -0
  170. package/lib/schema/cli-transformers.js +119 -0
  171. package/lib/schema/index.js +2 -0
  172. package/lib/schema/keywords.js +136 -0
  173. package/lib/schema/schema.js +725 -0
  174. package/lib/utils.js +310 -89
  175. package/package.json +84 -84
  176. package/plugin.d.ts +1 -0
  177. package/plugin.js +13 -0
  178. package/scripts/autoinstall-extensions.js +243 -0
  179. package/support.d.ts +1 -0
  180. package/support.js +13 -0
  181. package/tsconfig.json +25 -0
  182. package/types/cli.ts +193 -0
  183. package/types/index.ts +20 -0
  184. package/types/manifest/README.md +30 -0
  185. package/types/manifest/base.ts +158 -0
  186. package/types/manifest/index.ts +28 -0
  187. package/types/manifest/v3.ts +161 -0
  188. package/types/manifest/v4.ts +161 -0
  189. package/CHANGELOG.md +0 -3669
  190. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  191. package/build/lib/cli/argparse-actions.js +0 -104
  192. package/build/lib/cli/npm.js +0 -207
  193. package/build/lib/cli/parser-helpers.js +0 -93
  194. package/build/lib/driver-config.js +0 -77
  195. package/build/lib/drivers.js +0 -99
  196. package/build/lib/extension-config.js +0 -253
  197. package/build/lib/plugin-config.js +0 -59
  198. package/build/lib/plugins.js +0 -16
  199. package/build/postinstall.js +0 -90
  200. package/lib/cli/argparse-actions.js +0 -77
  201. package/lib/cli/npm.js +0 -183
  202. package/lib/cli/parser-helpers.js +0 -91
  203. package/lib/driver-config.js +0 -46
  204. package/lib/drivers.js +0 -84
  205. package/lib/extension-config.js +0 -209
  206. package/lib/plugin-config.js +0 -34
  207. package/lib/plugins.js +0 -11
  208. package/postinstall.js +0 -71
@@ -1,256 +1,295 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.getBuildInfo = getBuildInfo;
9
- exports.validateServerArgs = validateServerArgs;
10
- exports.checkNodeOk = checkNodeOk;
11
- exports.showConfig = showConfig;
12
- exports.warnNodeDeprecations = warnNodeDeprecations;
13
- exports.validateTmpDir = validateTmpDir;
14
- exports.getNonDefaultArgs = getNonDefaultArgs;
15
- exports.getGitRev = getGitRev;
16
- exports.checkValidPort = checkValidPort;
17
- exports.updateBuildInfo = updateBuildInfo;
18
- exports.getDeprecatedArgs = getDeprecatedArgs;
19
- exports.APPIUM_VER = void 0;
20
-
21
- require("source-map-support/register");
22
-
23
- var _lodash = _interopRequireDefault(require("lodash"));
24
-
25
- var _path = _interopRequireDefault(require("path"));
26
-
27
- var _appiumSupport = require("appium-support");
28
-
29
- var _axios = _interopRequireDefault(require("axios"));
30
-
31
- var _teen_process = require("teen_process");
32
-
33
- var _utils = require("./utils");
34
-
35
- var _logger = _interopRequireDefault(require("./logger"));
36
-
37
- var _semver = _interopRequireDefault(require("semver"));
38
-
39
- var _argparseActions = require("./cli/argparse-actions");
40
-
41
- const npmPackage = require(_path.default.resolve(_utils.rootDir, 'package.json'));
42
-
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.rootDir = exports.showConfig = exports.updateBuildInfo = exports.APPIUM_VER = exports.getGitRev = exports.getNonDefaultServerArgs = exports.validateTmpDir = exports.warnNodeDeprecations = exports.showBuildInfo = exports.checkNodeOk = exports.getBuildInfo = exports.checkNpmOk = void 0;
7
+ /* eslint-disable no-console */
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const support_1 = require("@appium/support");
10
+ const axios_1 = __importDefault(require("axios"));
11
+ const teen_process_1 = require("teen_process");
12
+ const semver_1 = __importDefault(require("semver"));
13
+ const find_up_1 = __importDefault(require("find-up"));
14
+ const schema_1 = require("./schema/schema");
15
+ const npmPackage = support_1.fs.readPackageJsonFrom(__dirname);
43
16
  const APPIUM_VER = npmPackage.version;
44
17
  exports.APPIUM_VER = APPIUM_VER;
45
- const MIN_NODE_VERSION = npmPackage.engines.node;
18
+ const ENGINES = /** @type {Record<string,string>} */ (npmPackage.engines);
19
+ const MIN_NODE_VERSION = ENGINES.node;
20
+ const MIN_NPM_VERSION = ENGINES.npm;
46
21
  const GIT_META_ROOT = '.git';
47
- const GIT_BINARY = `git${_appiumSupport.system.isWindows() ? '.exe' : ''}`;
22
+ const GIT_BINARY = `git${support_1.system.isWindows() ? '.exe' : ''}`;
48
23
  const GITHUB_API = 'https://api.github.com/repos/appium/appium';
24
+ /**
25
+ * @type {import('appium/types').BuildInfo}
26
+ */
49
27
  const BUILD_INFO = {
50
- version: APPIUM_VER
28
+ version: APPIUM_VER,
51
29
  };
52
-
53
30
  function getNodeVersion() {
54
- return _semver.default.coerce(process.version);
31
+ return /** @type {import('semver').SemVer} */ (semver_1.default.coerce(process.version));
55
32
  }
56
-
57
- function isSubClass(candidateClass, superClass) {
58
- return _lodash.default.isFunction(superClass) && _lodash.default.isFunction(candidateClass) && (candidateClass.prototype instanceof superClass || candidateClass === superClass);
33
+ /**
34
+ * Returns version of `npm`
35
+ * @returns {Promise<string>}
36
+ */
37
+ async function getNpmVersion() {
38
+ const { stdout } = await (0, teen_process_1.exec)(support_1.system.isWindows() ? 'npm.cmd' : 'npm', ['--version']);
39
+ return stdout.trim();
59
40
  }
60
-
41
+ /**
42
+ * @param {boolean} [useGithubApiFallback]
43
+ */
61
44
  async function updateBuildInfo(useGithubApiFallback = false) {
62
- const sha = await getGitRev(useGithubApiFallback);
63
-
64
- if (!sha) {
65
- return;
66
- }
67
-
68
- BUILD_INFO['git-sha'] = sha;
69
- const built = await getGitTimestamp(sha, useGithubApiFallback);
70
-
71
- if (!_lodash.default.isEmpty(built)) {
72
- BUILD_INFO.built = built;
73
- }
45
+ const sha = await getGitRev(useGithubApiFallback);
46
+ if (!sha) {
47
+ return;
48
+ }
49
+ BUILD_INFO['git-sha'] = sha;
50
+ const buildTimestamp = await getGitTimestamp(sha, useGithubApiFallback);
51
+ if (buildTimestamp) {
52
+ BUILD_INFO.built = buildTimestamp;
53
+ }
74
54
  }
75
-
55
+ exports.updateBuildInfo = updateBuildInfo;
56
+ /**
57
+ * Finds the Git metadata dir (see `GIT_META_ROOT`)
58
+ *
59
+ * This is needed because Appium cannot assume `package.json` and `.git` are in the same
60
+ * directory. Monorepos, see?
61
+ * @returns {Promise<string|undefined>} Path to dir or `undefined` if not found
62
+ */
63
+ async function findGitRoot() {
64
+ return await (0, find_up_1.default)(GIT_META_ROOT, { cwd: rootDir, type: 'directory' });
65
+ }
66
+ /**
67
+ * @param {boolean} [useGithubApiFallback]
68
+ * @returns {Promise<string?>}
69
+ */
76
70
  async function getGitRev(useGithubApiFallback = false) {
77
- if (await _appiumSupport.fs.exists(_path.default.resolve(_utils.rootDir, GIT_META_ROOT))) {
78
- try {
79
- const {
80
- stdout
81
- } = await (0, _teen_process.exec)(GIT_BINARY, ['rev-parse', 'HEAD'], {
82
- cwd: _utils.rootDir
83
- });
84
- return stdout.trim();
85
- } catch (ign) {}
86
- }
87
-
88
- if (!useGithubApiFallback) {
89
- return null;
90
- }
91
-
92
- try {
93
- const resBodyObj = (await _axios.default.get(`${GITHUB_API}/tags`, {
94
- headers: {
95
- 'User-Agent': `Appium ${APPIUM_VER}`
96
- }
97
- })).data;
98
-
99
- if (_lodash.default.isArray(resBodyObj)) {
100
- for (const {
101
- name,
102
- commit
103
- } of resBodyObj) {
104
- if (name === `v${APPIUM_VER}` && commit && commit.sha) {
105
- return commit.sha;
71
+ const gitRoot = await findGitRoot();
72
+ if (gitRoot) {
73
+ try {
74
+ const { stdout } = await (0, teen_process_1.exec)(GIT_BINARY, ['rev-parse', 'HEAD'], {
75
+ cwd: gitRoot,
76
+ });
77
+ return stdout.trim();
106
78
  }
107
- }
79
+ catch (ign) { }
80
+ }
81
+ if (!useGithubApiFallback) {
82
+ return null;
108
83
  }
109
- } catch (ign) {}
110
-
111
- return null;
84
+ // If the package folder is not a valid git repository
85
+ // then fetch the corresponding tag info from GitHub
86
+ try {
87
+ return (await axios_1.default.get(`${GITHUB_API}/git/refs/tags/appium@${APPIUM_VER}`, {
88
+ headers: {
89
+ 'User-Agent': `Appium ${APPIUM_VER}`,
90
+ },
91
+ })).data?.object?.sha;
92
+ }
93
+ catch (ign) { }
94
+ return null;
112
95
  }
113
-
96
+ exports.getGitRev = getGitRev;
97
+ /**
98
+ * @param {string} commitSha
99
+ * @param {boolean} [useGithubApiFallback]
100
+ * @returns {Promise<string?>}
101
+ */
114
102
  async function getGitTimestamp(commitSha, useGithubApiFallback = false) {
115
- if (await _appiumSupport.fs.exists(_path.default.resolve(_utils.rootDir, GIT_META_ROOT))) {
103
+ const gitRoot = await findGitRoot();
104
+ if (gitRoot) {
105
+ try {
106
+ const { stdout } = await (0, teen_process_1.exec)(GIT_BINARY, ['show', '-s', '--format=%ci', commitSha], {
107
+ cwd: gitRoot,
108
+ });
109
+ return stdout.trim();
110
+ }
111
+ catch (ign) { }
112
+ }
113
+ if (!useGithubApiFallback) {
114
+ return null;
115
+ }
116
116
  try {
117
- const {
118
- stdout
119
- } = await (0, _teen_process.exec)(GIT_BINARY, ['show', '-s', '--format=%ci', commitSha], {
120
- cwd: _utils.rootDir
121
- });
122
- return stdout.trim();
123
- } catch (ign) {}
124
- }
125
-
126
- if (!useGithubApiFallback) {
127
- return null;
128
- }
129
-
130
- try {
131
- const resBodyObj = (await _axios.default.get(`${GITHUB_API}/commits/${commitSha}`, {
132
- headers: {
133
- 'User-Agent': `Appium ${APPIUM_VER}`
134
- }
135
- })).data;
136
-
137
- if (resBodyObj && resBodyObj.commit) {
138
- if (resBodyObj.commit.committer && resBodyObj.commit.committer.date) {
139
- return resBodyObj.commit.committer.date;
140
- }
141
-
142
- if (resBodyObj.commit.author && resBodyObj.commit.author.date) {
143
- return resBodyObj.commit.author.date;
144
- }
117
+ return (await axios_1.default.get(`${GITHUB_API}/git/tags/${commitSha}`, {
118
+ headers: {
119
+ 'User-Agent': `Appium ${APPIUM_VER}`,
120
+ },
121
+ })).data?.tagger?.date;
145
122
  }
146
- } catch (ign) {}
147
-
148
- return null;
123
+ catch (ign) { }
124
+ return null;
149
125
  }
150
-
126
+ /**
127
+ * Mutable object containing Appium build information. By default it
128
+ * only contains the Appium version, but is updated with the build timestamp
129
+ * and git commit hash asynchronously as soon as `updateBuildInfo` is called
130
+ * and succeeds.
131
+ * @returns {import('appium/types').BuildInfo}
132
+ */
151
133
  function getBuildInfo() {
152
- return BUILD_INFO;
134
+ return BUILD_INFO;
153
135
  }
154
-
136
+ exports.getBuildInfo = getBuildInfo;
155
137
  function checkNodeOk() {
156
- const version = getNodeVersion();
157
-
158
- if (!_semver.default.satisfies(version, MIN_NODE_VERSION)) {
159
- _logger.default.errorAndThrow(`Node version must be ${MIN_NODE_VERSION}. Currently ${version.version}`);
160
- }
161
- }
162
-
163
- function warnNodeDeprecations() {}
164
-
165
- async function showConfig() {
166
- await updateBuildInfo(true);
167
- console.log(JSON.stringify(getBuildInfo()));
168
- }
169
-
170
- function getNonDefaultArgs(parser, args) {
171
- return parser.rawArgs.reduce((acc, [, {
172
- dest,
173
- default: defaultValue
174
- }]) => {
175
- if (args[dest] && args[dest] !== defaultValue) {
176
- acc[dest] = args[dest];
138
+ const version = getNodeVersion();
139
+ if (!semver_1.default.satisfies(version, MIN_NODE_VERSION)) {
140
+ throw new Error(`Node version must be at least ${MIN_NODE_VERSION}; current is ${version.version}`);
177
141
  }
178
-
179
- return acc;
180
- }, {});
181
142
  }
182
-
183
- function getDeprecatedArgs(parser, args) {
184
- return parser.rawArgs.reduce((acc, [[name], {
185
- dest,
186
- default: defaultValue,
187
- action
188
- }]) => {
189
- if (!args[dest] || args[dest] === defaultValue) {
190
- return acc;
191
- }
192
-
193
- if (action !== null && action !== void 0 && action.deprecated_for) {
194
- acc[name] = action.deprecated_for;
195
- } else if (isSubClass(action, _argparseActions.StoreDeprecatedDefaultCapabilityAction)) {
196
- acc[name] = _argparseActions.DEFAULT_CAPS_ARG;
143
+ exports.checkNodeOk = checkNodeOk;
144
+ async function checkNpmOk() {
145
+ const npmVersion = await getNpmVersion();
146
+ if (!semver_1.default.satisfies(npmVersion, MIN_NPM_VERSION)) {
147
+ throw new Error(`npm version must be at least ${MIN_NPM_VERSION}; current is ${npmVersion}. Run "npm install -g npm" to upgrade.`);
197
148
  }
198
-
199
- return acc;
200
- }, {});
201
149
  }
202
-
203
- function checkValidPort(port, portName) {
204
- if (port > 0 && port < 65536) return true;
205
-
206
- _logger.default.error(`Port '${portName}' must be greater than 0 and less than 65536. Currently ${port}`);
207
-
208
- return false;
150
+ exports.checkNpmOk = checkNpmOk;
151
+ function warnNodeDeprecations() {
152
+ /**
153
+ * Uncomment this section to get node version deprecation warnings
154
+ * Also add test cases to config-specs.js to cover the cases added
155
+ **/
156
+ // const version = getNodeVersion();
157
+ // if (version.major < 8) {
158
+ // logger.warn(`Appium support for versions of node < ${version.major} has been ` +
159
+ // 'deprecated and will be removed in a future version. Please ' +
160
+ // 'upgrade!');
161
+ // }
209
162
  }
210
-
211
- function validateServerArgs(parser, args) {
212
- let exclusives = [['noReset', 'fullReset'], ['ipa', 'safari'], ['app', 'safari'], ['forceIphone', 'forceIpad'], ['deviceName', 'defaultDevice']];
213
-
214
- for (let exSet of exclusives) {
215
- let numFoundInArgs = 0;
216
-
217
- for (let opt of exSet) {
218
- if (_lodash.default.has(args, opt) && args[opt]) {
219
- numFoundInArgs++;
220
- }
163
+ exports.warnNodeDeprecations = warnNodeDeprecations;
164
+ async function showBuildInfo() {
165
+ await updateBuildInfo(true);
166
+ console.log(JSON.stringify(getBuildInfo())); // eslint-disable-line no-console
167
+ }
168
+ exports.showBuildInfo = showBuildInfo;
169
+ /**
170
+ * Returns k/v pairs of server arguments which are _not_ the defaults.
171
+ * @param {Args} parsedArgs
172
+ * @returns {Args}
173
+ */
174
+ function getNonDefaultServerArgs(parsedArgs) {
175
+ /**
176
+ * Flattens parsed args into a single level object for comparison with
177
+ * flattened defaults across server args and extension args.
178
+ * @param {Args} args
179
+ * @returns {Record<string, { value: any, argSpec: ArgSpec }>}
180
+ */
181
+ const flatten = (args) => {
182
+ const argSpecs = (0, schema_1.getAllArgSpecs)();
183
+ const flattened = lodash_1.default.reduce([...argSpecs.values()], (acc, argSpec) => {
184
+ if (lodash_1.default.has(args, argSpec.dest)) {
185
+ acc[argSpec.dest] = { value: lodash_1.default.get(args, argSpec.dest), argSpec };
186
+ }
187
+ return acc;
188
+ },
189
+ /** @type {Record<string, { value: any, argSpec: ArgSpec }>} */ ({}));
190
+ return flattened;
191
+ };
192
+ const args = flatten(parsedArgs);
193
+ // hopefully these function names are descriptive enough
194
+ const typesDiffer = /** @param {string} dest */ (dest) => typeof args[dest].value !== typeof defaultsFromSchema[dest];
195
+ const defaultValueIsArray = /** @param {string} dest */ (dest) => lodash_1.default.isArray(defaultsFromSchema[dest]);
196
+ const argsValueIsArray = /** @param {string} dest */ (dest) => lodash_1.default.isArray(args[dest].value);
197
+ const arraysDiffer = /** @param {string} dest */ (dest) => lodash_1.default.gt(lodash_1.default.size(lodash_1.default.difference(args[dest].value, defaultsFromSchema[dest])), 0);
198
+ const valuesDiffer = /** @param {string} dest */ (dest) => args[dest].value !== defaultsFromSchema[dest];
199
+ const defaultIsDefined = /** @param {string} dest */ (dest) => !lodash_1.default.isUndefined(defaultsFromSchema[dest]);
200
+ // note that `_.overEvery` is like an "AND", and `_.overSome` is like an "OR"
201
+ const argValueNotArrayOrArraysDiffer = lodash_1.default.overSome([lodash_1.default.negate(argsValueIsArray), arraysDiffer]);
202
+ const defaultValueNotArrayAndValuesDiffer = lodash_1.default.overEvery([
203
+ lodash_1.default.negate(defaultValueIsArray),
204
+ valuesDiffer,
205
+ ]);
206
+ /**
207
+ * This used to be a hideous conditional, but it's broken up into a hideous function instead.
208
+ * hopefully this makes things a little more understandable.
209
+ * - checks if the default value is defined
210
+ * - if so, and the default is not an array:
211
+ * - ensures the types are the same
212
+ * - ensures the values are equal
213
+ * - if so, and the default is an array:
214
+ * - ensures the args value is an array
215
+ * - ensures the args values do not differ from the default values
216
+ * @type {(dest: string) => boolean}
217
+ */
218
+ const isNotDefault = lodash_1.default.overEvery([
219
+ defaultIsDefined,
220
+ lodash_1.default.overSome([
221
+ typesDiffer,
222
+ lodash_1.default.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]),
223
+ defaultValueNotArrayAndValuesDiffer,
224
+ ]),
225
+ ]);
226
+ const defaultsFromSchema = (0, schema_1.getDefaultsForSchema)(true);
227
+ return lodash_1.default.reduce(lodash_1.default.pickBy(args, (__, key) => isNotDefault(key)),
228
+ // explodes the flattened object back into nested one
229
+ (acc, { value, argSpec }) => lodash_1.default.set(acc, argSpec.dest, value),
230
+ /** @type {Args} */ ({}));
231
+ }
232
+ exports.getNonDefaultServerArgs = getNonDefaultServerArgs;
233
+ /**
234
+ * Compacts an object for {@link showConfig}:
235
+ * 1. Removes `subcommand` key/value
236
+ * 2. Removes `undefined` values
237
+ * 3. Removes empty objects (but not `false` values)
238
+ * Does not operate recursively.
239
+ */
240
+ const compactConfig = lodash_1.default.partial(lodash_1.default.omitBy, lodash_1.default, (value, key) => key === 'subcommand' || lodash_1.default.isUndefined(value) || (lodash_1.default.isObject(value) && lodash_1.default.isEmpty(value)));
241
+ /**
242
+ * Shows a breakdown of the current config after CLI params, config file loaded & defaults applied.
243
+ *
244
+ * The actual shape of `preConfigParsedArgs` and `defaults` does not matter for the purposes of this function,
245
+ * but it's intended to be called with values of type {@link ParsedArgs} and `DefaultValues<true>`, respectively.
246
+ *
247
+ * @param {Partial<ParsedArgs>} nonDefaultPreConfigParsedArgs - Parsed CLI args (or param to `init()`) before config & defaults applied
248
+ * @param {import('./config-file').ReadConfigFileResult} configResult - Result of attempting to load a config file. _Must_ be normalized
249
+ * @param {Partial<ParsedArgs>} defaults - Configuration defaults from schemas
250
+ * @param {ParsedArgs} parsedArgs - Entire parsed args object
251
+ */
252
+ function showConfig(nonDefaultPreConfigParsedArgs, configResult, defaults, parsedArgs) {
253
+ console.log('Appium Configuration\n');
254
+ console.log('from defaults:\n');
255
+ console.dir(compactConfig(defaults));
256
+ if (configResult.config) {
257
+ console.log(`\nfrom config file at ${configResult.filepath}:\n`);
258
+ console.dir(compactConfig(configResult.config));
259
+ }
260
+ else {
261
+ console.log(`\n(no configuration file loaded)`);
221
262
  }
222
-
223
- if (numFoundInArgs > 1) {
224
- throw new Error(`You can't pass in more than one argument from the ` + `set ${JSON.stringify(exSet)}, since they are ` + `mutually exclusive`);
263
+ const compactedNonDefaultPreConfigArgs = compactConfig(nonDefaultPreConfigParsedArgs);
264
+ if (lodash_1.default.isEmpty(compactedNonDefaultPreConfigArgs)) {
265
+ console.log(`\n(no CLI parameters provided)`);
225
266
  }
226
- }
227
-
228
- const validations = {
229
- port: checkValidPort,
230
- callbackPort: checkValidPort,
231
- bootstrapPort: checkValidPort,
232
- chromedriverPort: checkValidPort,
233
- robotPort: checkValidPort,
234
- backendRetries: r => r >= 0
235
- };
236
- const nonDefaultArgs = getNonDefaultArgs(parser, args);
237
-
238
- for (let [arg, validator] of _lodash.default.toPairs(validations)) {
239
- if (_lodash.default.has(nonDefaultArgs, arg)) {
240
- if (!validator(args[arg], arg)) {
241
- throw new Error(`Invalid argument for param ${arg}: ${args[arg]}`);
242
- }
267
+ else {
268
+ console.log('\nvia CLI or function call:\n');
269
+ console.dir(compactedNonDefaultPreConfigArgs);
243
270
  }
244
- }
271
+ console.log('\nfinal configuration:\n');
272
+ console.dir(compactConfig(parsedArgs));
245
273
  }
246
-
274
+ exports.showConfig = showConfig;
275
+ /**
276
+ * @param {string} tmpDir
277
+ */
247
278
  async function validateTmpDir(tmpDir) {
248
- try {
249
- await (0, _appiumSupport.mkdirp)(tmpDir);
250
- } catch (e) {
251
- throw new Error(`We could not ensure that the temp dir you specified ` + `(${tmpDir}) exists. Please make sure it's writeable.`);
252
- }
253
- }require('source-map-support').install();
254
-
255
-
256
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsInJlcXVpcmUiLCJwYXRoIiwicmVzb2x2ZSIsInJvb3REaXIiLCJBUFBJVU1fVkVSIiwidmVyc2lvbiIsIk1JTl9OT0RFX1ZFUlNJT04iLCJlbmdpbmVzIiwibm9kZSIsIkdJVF9NRVRBX1JPT1QiLCJHSVRfQklOQVJZIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiR0lUSFVCX0FQSSIsIkJVSUxEX0lORk8iLCJnZXROb2RlVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInByb2Nlc3MiLCJpc1N1YkNsYXNzIiwiY2FuZGlkYXRlQ2xhc3MiLCJzdXBlckNsYXNzIiwiXyIsImlzRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJ1cGRhdGVCdWlsZEluZm8iLCJ1c2VHaXRodWJBcGlGYWxsYmFjayIsInNoYSIsImdldEdpdFJldiIsImJ1aWx0IiwiZ2V0R2l0VGltZXN0YW1wIiwiaXNFbXB0eSIsImZzIiwiZXhpc3RzIiwic3Rkb3V0IiwiY3dkIiwidHJpbSIsImlnbiIsInJlc0JvZHlPYmoiLCJheGlvcyIsImdldCIsImhlYWRlcnMiLCJkYXRhIiwiaXNBcnJheSIsIm5hbWUiLCJjb21taXQiLCJjb21taXRTaGEiLCJjb21taXR0ZXIiLCJkYXRlIiwiYXV0aG9yIiwiZ2V0QnVpbGRJbmZvIiwiY2hlY2tOb2RlT2siLCJzYXRpc2ZpZXMiLCJsb2dnZXIiLCJlcnJvckFuZFRocm93Iiwid2Fybk5vZGVEZXByZWNhdGlvbnMiLCJzaG93Q29uZmlnIiwiY29uc29sZSIsImxvZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXROb25EZWZhdWx0QXJncyIsInBhcnNlciIsImFyZ3MiLCJyYXdBcmdzIiwicmVkdWNlIiwiYWNjIiwiZGVzdCIsImRlZmF1bHQiLCJkZWZhdWx0VmFsdWUiLCJnZXREZXByZWNhdGVkQXJncyIsImFjdGlvbiIsImRlcHJlY2F0ZWRfZm9yIiwiU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24iLCJERUZBVUxUX0NBUFNfQVJHIiwiY2hlY2tWYWxpZFBvcnQiLCJwb3J0IiwicG9ydE5hbWUiLCJlcnJvciIsInZhbGlkYXRlU2VydmVyQXJncyIsImV4Y2x1c2l2ZXMiLCJleFNldCIsIm51bUZvdW5kSW5BcmdzIiwib3B0IiwiaGFzIiwiRXJyb3IiLCJ2YWxpZGF0aW9ucyIsImNhbGxiYWNrUG9ydCIsImJvb3RzdHJhcFBvcnQiLCJjaHJvbWVkcml2ZXJQb3J0Iiwicm9ib3RQb3J0IiwiYmFja2VuZFJldHJpZXMiLCJyIiwibm9uRGVmYXVsdEFyZ3MiLCJhcmciLCJ2YWxpZGF0b3IiLCJ0b1BhaXJzIiwidmFsaWRhdGVUbXBEaXIiLCJ0bXBEaXIiLCJlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsVUFBVSxHQUFHQyxPQUFPLENBQUNDLGNBQUtDLE9BQUwsQ0FBYUMsY0FBYixFQUFzQixjQUF0QixDQUFELENBQTFCOztBQUNBLE1BQU1DLFVBQVUsR0FBR0wsVUFBVSxDQUFDTSxPQUE5Qjs7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBR1AsVUFBVSxDQUFDUSxPQUFYLENBQW1CQyxJQUE1QztBQUVBLE1BQU1DLGFBQWEsR0FBRyxNQUF0QjtBQUNBLE1BQU1DLFVBQVUsR0FBSSxNQUFLQyxzQkFBT0MsU0FBUCxLQUFxQixNQUFyQixHQUE4QixFQUFHLEVBQTFEO0FBQ0EsTUFBTUMsVUFBVSxHQUFHLDRDQUFuQjtBQUVBLE1BQU1DLFVBQVUsR0FBRztBQUNqQlQsRUFBQUEsT0FBTyxFQUFFRDtBQURRLENBQW5COztBQUlBLFNBQVNXLGNBQVQsR0FBMkI7QUFDekIsU0FBT0MsZ0JBQU9DLE1BQVAsQ0FBY0MsT0FBTyxDQUFDYixPQUF0QixDQUFQO0FBQ0Q7O0FBRUQsU0FBU2MsVUFBVCxDQUFxQkMsY0FBckIsRUFBcUNDLFVBQXJDLEVBQWlEO0FB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b20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IG1rZGlycCwgZnMsIHN5c3RlbSB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHtcbiAgU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24sIERFRkFVTFRfQ0FQU19BUkcsXG59IGZyb20gJy4vY2xpL2FyZ3BhcnNlLWFjdGlvbnMnO1xuXG5cbmNvbnN0IG5wbVBhY2thZ2UgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShyb290RGlyLCAncGFja2FnZS5qc29uJykpO1xuY29uc3QgQVBQSVVNX1ZFUiA9IG5wbVBhY2thZ2UudmVyc2lvbjtcbmNvbnN0IE1JTl9OT0RFX1ZFUlNJT04gPSBucG1QYWNrYWdlLmVuZ2luZXMubm9kZTtcblxuY29uc3QgR0lUX01FVEFfUk9PVCA9ICcuZ2l0JztcbmNvbnN0IEdJVF9CSU5BUlkgPSBgZ2l0JHtzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJ31gO1xuY29uc3QgR0lUSFVCX0FQSSA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2FwcGl1bS9hcHBpdW0nO1xuXG5jb25zdCBCVUlMRF9JTkZPID0ge1xuICB2ZXJzaW9uOiBBUFBJVU1fVkVSLFxufTtcblxuZnVuY3Rpb24gZ2V0Tm9kZVZlcnNpb24gKCkge1xuICByZXR1cm4gc2VtdmVyLmNvZXJjZShwcm9jZXNzLnZlcnNpb24pO1xufVxuXG5mdW5jdGlvbiBpc1N1YkNsYXNzIChjYW5kaWRhdGVDbGFzcywgc3VwZXJDbGFzcykge1xuICByZXR1cm4gXy5pc0Z1bmN0aW9uKHN1cGVyQ2xhc3MpICYmIF8uaXNGdW5jdGlvbihjYW5kaWRhdGVDbGFzcylcbiAgICAmJiAoY2FuZGlkYXRlQ2xhc3MucHJvdG90eXBlIGluc3RhbmNlb2Ygc3VwZXJDbGFzcyB8fCBjYW5kaWRhdGVDbGFzcyA9PT0gc3VwZXJDbGFzcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUJ1aWxkSW5mbyAodXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBzaGEgPSBhd2FpdCBnZXRHaXRSZXYodXNlR2l0aHViQXBpRmFsbGJhY2spO1xuICBpZiAoIXNoYSkge1xuICAgIHJldHVybjtcbiAgfVxuICBCVUlMRF9JTkZPWydnaXQtc2hhJ10gPSBzaGE7XG4gIGNvbnN0IGJ1aWx0ID0gYXdhaXQgZ2V0R2l0VGltZXN0YW1wKHNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2spO1xuICBpZiAoIV8uaXNFbXB0eShidWlsdCkpIHtcbiAgICBCVUlMRF9JTkZPLmJ1aWx0ID0gYnVpbHQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0UmV2ICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGlmIChhd2FpdCBmcy5leGlzdHMocGF0aC5yZXNvbHZlKHJvb3REaXIsIEdJVF9NRVRBX1JPT1QpKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogcm9vdERpclxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L3RhZ3NgLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChfLmlzQXJyYXkocmVzQm9keU9iaikpIHtcbiAgICAgIGZvciAoY29uc3Qge25hbWUsIGNvbW1pdH0gb2YgcmVzQm9keU9iaikge1xuICAgICAgICBpZiAobmFtZSA9PT0gYHYke0FQUElVTV9WRVJ9YCAmJiBjb21taXQgJiYgY29tbWl0LnNoYSkge1xuICAgICAgICAgIHJldHVybiBjb21taXQuc2hhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRHaXRUaW1lc3RhbXAgKGNvbW1pdFNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHBhdGgucmVzb2x2ZShyb290RGlyLCBHSVRfTUVUQV9ST09UKSkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsnc2hvdycsICctcycsICctLWZvcm1hdD0lY2knLCBjb21taXRTaGFdLCB7XG4gICAgICAgIGN3ZDogcm9vdERpclxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2NvbW1pdHMvJHtjb21taXRTaGF9YCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWBcbiAgICAgIH1cbiAgICB9KSkuZGF0YTtcbiAgICBpZiAocmVzQm9keU9iaiAmJiByZXNCb2R5T2JqLmNvbW1pdCkge1xuICAgICAgaWYgKHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlciAmJiByZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIuZGF0ZSkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyLmRhdGU7XG4gICAgICB9XG4gICAgICBpZiAocmVzQm9keU9iai5jb21taXQuYXV0aG9yICYmIHJlc0JvZHlPYmouY29tbWl0LmF1dGhvci5kYXRlKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IuZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybiBNdXRhYmxlIG9iamVjdCBjb250YWluaW5nIEFwcGl1bSBidWlsZCBpbmZvcm1hdGlvbi4gQnkgZGVmYXVsdCBpdFxuICogb25seSBjb250YWlucyB0aGUgQXBwaXVtIHZlcnNpb24sIGJ1dCBpcyB1cGRhdGVkIHdpdGggdGhlIGJ1aWxkIHRpbWVzdGFtcFxuICogYW5kIGdpdCBjb21taXQgaGFzaCBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIGB1cGRhdGVCdWlsZEluZm9gIGlzIGNhbGxlZFxuICogYW5kIHN1Y2NlZWRzLlxuICovXG5mdW5jdGlvbiBnZXRCdWlsZEluZm8gKCkge1xuICByZXR1cm4gQlVJTERfSU5GTztcbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlT2sgKCkge1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgaWYgKCFzZW12ZXIuc2F0aXNmaWVzKHZlcnNpb24sIE1JTl9OT0RFX1ZFUlNJT04pKSB7XG4gICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYE5vZGUgdmVyc2lvbiBtdXN0IGJlICR7TUlOX05PREVfVkVSU0lPTn0uIEN1cnJlbnRseSAke3ZlcnNpb24udmVyc2lvbn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9kZURlcHJlY2F0aW9ucyAoKSB7XG4gIC8qKlxuICAgKiBVbmNvbW1lbnQgdGhpcyBzZWN0aW9uIHRvIGdldCBub2RlIHZlcnNpb24gZGVwcmVjYXRpb24gd2FybmluZ3NcbiAgICogQWxzbyBhZGQgdGVzdCBjYXNlcyB0byBjb25maWctc3BlY3MuanMgdG8gY292ZXIgdGhlIGNhc2VzIGFkZGVkXG4gICAqKi9cblxuICAvLyBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgLy8gaWYgKHZlcnNpb24ubWFqb3IgPCA4KSB7XG4gIC8vICAgbG9nZ2VyLndhcm4oYEFwcGl1bSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZiBub2RlIDwgJHt2ZXJzaW9uLm1ham9yfSBoYXMgYmVlbiBgICtcbiAgLy8gICAgICAgICAgICAgICAnZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFBsZWFzZSAnICtcbiAgLy8gICAgICAgICAgICAgICAndXBncmFkZSEnKTtcbiAgLy8gfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93Q29uZmlnICgpIHtcbiAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKHRydWUpO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShnZXRCdWlsZEluZm8oKSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uRGVmYXVsdEFyZ3MgKHBhcnNlciwgYXJncykge1xuICByZXR1cm4gcGFyc2VyLnJhd0FyZ3MucmVkdWNlKChhY2MsIFssIHtkZXN0LCBkZWZhdWx0OiBkZWZhdWx0VmFsdWV9XSkgPT4ge1xuICAgIGlmIChhcmdzW2Rlc3RdICYmIGFyZ3NbZGVzdF0gIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgYWNjW2Rlc3RdID0gYXJnc1tkZXN0XTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBnZXREZXByZWNhdGVkQXJncyAocGFyc2VyLCBhcmdzKSB7XG4gIC8vIGdvIHRocm91Z2ggdGhlIHNlcnZlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBmaWd1cmVcbiAgLy8gb3V0IHdoaWNoIG9mIHRoZSBvbmVzIHVzZWQgYXJlIGRlcHJlY2F0ZWRcbiAgcmV0dXJuIHBhcnNlci5yYXdBcmdzLnJlZHVjZSgoYWNjLCBbW25hbWVdLCB7ZGVzdCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCBhY3Rpb259XSkgPT4ge1xuICAgIGlmICghYXJnc1tkZXN0XSB8fCBhcmdzW2Rlc3RdID09PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbj8uZGVwcmVjYXRlZF9mb3IpIHtcbiAgICAgIGFjY1tuYW1lXSA9IGFjdGlvbi5kZXByZWNhdGVkX2ZvcjtcbiAgICB9IGVsc2UgaWYgKGlzU3ViQ2xhc3MoYWN0aW9uLCBTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbikpIHtcbiAgICAgIGFjY1tuYW1lXSA9IERFRkFVTFRfQ0FQU19BUkc7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gY2hlY2tWYWxpZFBvcnQgKHBvcnQsIHBvcnROYW1lKSB7XG4gIGlmIChwb3J0ID4gMCAmJiBwb3J0IDwgNjU1MzYpIHJldHVybiB0cnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gIGxvZ2dlci5lcnJvcihgUG9ydCAnJHtwb3J0TmFtZX0nIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiA2NTUzNi4gQ3VycmVudGx5ICR7cG9ydH1gKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNlcnZlckFyZ3MgKHBhcnNlciwgYXJncykge1xuICAvLyBhcmd1bWVudHMgdGhhdCBjYW5ub3QgYm90aCBiZSBzZXRcbiAgbGV0IGV4Y2x1c2l2ZXMgPSBbXG4gICAgWydub1Jlc2V0JywgJ2Z1bGxSZXNldCddLFxuICAgIFsnaXBhJywgJ3NhZmFyaSddLFxuICAgIFsnYXBwJywgJ3NhZmFyaSddLFxuICAgIFsnZm9yY2VJcGhvbmUnLCAnZm9yY2VJcGFkJ10sXG4gICAgWydkZXZpY2VOYW1lJywgJ2RlZmF1bHREZXZpY2UnXVxuICBdO1xuXG4gIGZvciAobGV0IGV4U2V0IG9mIGV4Y2x1c2l2ZXMpIHtcbiAgICBsZXQgbnVtRm91bmRJbkFyZ3MgPSAwO1xuICAgIGZvciAobGV0IG9wdCBvZiBleFNldCkge1xuICAgICAgaWYgKF8uaGFzKGFyZ3MsIG9wdCkgJiYgYXJnc1tvcHRdKSB7XG4gICAgICAgIG51bUZvdW5kSW5BcmdzKys7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChudW1Gb3VuZEluQXJncyA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IGNhbid0IHBhc3MgaW4gbW9yZSB0aGFuIG9uZSBhcmd1bWVudCBmcm9tIHRoZSBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgc2V0ICR7SlNPTi5zdHJpbmdpZnkoZXhTZXQpfSwgc2luY2UgdGhleSBhcmUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYG11dHVhbGx5IGV4Y2x1c2l2ZWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRpb25zID0ge1xuICAgIHBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGNhbGxiYWNrUG9ydDogY2hlY2tWYWxpZFBvcnQsXG4gICAgYm9vdHN0cmFwUG9ydDogY2hlY2tWYWxpZFBvcnQsXG4gICAgY2hyb21lZHJpdmVyUG9ydDogY2hlY2tWYWxpZFBvcnQsXG4gICAgcm9ib3RQb3J0OiBjaGVja1ZhbGlkUG9ydCxcbiAgICBiYWNrZW5kUmV0cmllczogKHIpID0+IHIgPj0gMCxcbiAgfTtcblxuICBjb25zdCBub25EZWZhdWx0QXJncyA9IGdldE5vbkRlZmF1bHRBcmdzKHBhcnNlciwgYXJncyk7XG5cbiAgZm9yIChsZXQgW2FyZywgdmFsaWRhdG9yXSBvZiBfLnRvUGFpcnModmFsaWRhdGlvbnMpKSB7XG4gICAgaWYgKF8uaGFzKG5vbkRlZmF1bHRBcmdzLCBhcmcpKSB7XG4gICAgICBpZiAoIXZhbGlkYXRvcihhcmdzW2FyZ10sIGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IGZvciBwYXJhbSAke2FyZ306ICR7YXJnc1thcmddfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVRtcERpciAodG1wRGlyKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXJwKHRtcERpcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFdlIGNvdWxkIG5vdCBlbnN1cmUgdGhhdCB0aGUgdGVtcCBkaXIgeW91IHNwZWNpZmllZCBgICtcbiAgICAgICAgICAgICAgICAgICAgYCgke3RtcERpcn0pIGV4aXN0cy4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHdyaXRlYWJsZS5gKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBnZXRCdWlsZEluZm8sIHZhbGlkYXRlU2VydmVyQXJncywgY2hlY2tOb2RlT2ssIHNob3dDb25maWcsXG4gIHdhcm5Ob2RlRGVwcmVjYXRpb25zLCB2YWxpZGF0ZVRtcERpciwgZ2V0Tm9uRGVmYXVsdEFyZ3MsXG4gIGdldEdpdFJldiwgY2hlY2tWYWxpZFBvcnQsIEFQUElVTV9WRVIsIHVwZGF0ZUJ1aWxkSW5mbyxcbiAgZ2V0RGVwcmVjYXRlZEFyZ3MsXG59O1xuIl0sImZpbGUiOiJsaWIvY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
279
+ try {
280
+ await support_1.fs.mkdirp(tmpDir);
281
+ }
282
+ catch (e) {
283
+ throw new Error(`We could not ensure that the temp dir you specified ` +
284
+ `(${tmpDir}) exists. Please make sure it's writeable.`);
285
+ }
286
+ }
287
+ exports.validateTmpDir = validateTmpDir;
288
+ const rootDir = support_1.fs.findRoot(__dirname);
289
+ exports.rootDir = rootDir;
290
+ /**
291
+ * @typedef {import('appium/types').ParsedArgs} ParsedArgs
292
+ * @typedef {import('appium/types').Args} Args
293
+ * @typedef {import('./schema/arg-spec').ArgSpec} ArgSpec
294
+ */
295
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
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
+ readonly 'universal-xml': "@appium/universal-xml-plugin";
22
+ }>;
23
+ export const KNOWN_DRIVERS: Readonly<{
24
+ readonly uiautomator2: "appium-uiautomator2-driver";
25
+ readonly xcuitest: "appium-xcuitest-driver";
26
+ readonly mac2: "appium-mac2-driver";
27
+ readonly espresso: "appium-espresso-driver";
28
+ readonly safari: "appium-safari-driver";
29
+ readonly gecko: "appium-geckodriver";
30
+ readonly chromium: "appium-chromium-driver";
31
+ }>;
32
+ /**
33
+ * Relative path to directory containing any Appium internal files
34
+ */
35
+ export const CACHE_DIR_RELATIVE_PATH: string;
36
+ /**
37
+ * Relative path to hashfile (from `APPIUM_HOME`) of consuming project's `package.json` (if it exists)
38
+ */
39
+ export const PKG_HASHFILE_RELATIVE_PATH: string;
40
+ export const EXT_SUBCOMMAND_LIST: "list";
41
+ export const EXT_SUBCOMMAND_INSTALL: "install";
42
+ export const EXT_SUBCOMMAND_UNINSTALL: "uninstall";
43
+ export const EXT_SUBCOMMAND_UPDATE: "update";
44
+ export const EXT_SUBCOMMAND_RUN: "run";
45
+ /**
46
+ * Current revision of the manifest (`extensions.yaml`) schema
47
+ */
48
+ export const CURRENT_SCHEMA_REV: 4;
49
+ /**
50
+ * The default number of stack frames to show in a "long" stack trace, when enabled via `--long-stacktrace`
51
+ * @remarks This value may be increased in the future.
52
+ * @privateRemarks A value like `Infinity` may provide to have deleterious effects on
53
+ * memory usage, perf, and/or log output, and higher limits may be difficult to scan.
54
+ */
55
+ export const LONG_STACKTRACE_LIMIT: 100;
56
+ //# 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;;;;;GAOE;AAMF;;;;;;;;GAUE;AAEF;;GAEG;AACH,6CAAqF;AAErF;;GAEG;AACH,gDAA6F;AAE7F,yCAA0C;AAC1C,+CAAgD;AAChD,mDAAoD;AACpD,6CAA8C;AAC9C,uCAAwC;AAExC;;GAEG;AACH,mCAAoC;AAEpC;;;;;GAKG;AACH,wCAAyC"}