appium 2.0.0-beta.46 → 2.0.0-beta.47

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 (138) hide show
  1. package/README.md +145 -44
  2. package/build/lib/appium.d.ts +3 -103
  3. package/build/lib/appium.d.ts.map +1 -1
  4. package/build/lib/appium.js +679 -549
  5. package/build/lib/appium.js.map +1 -1
  6. package/build/lib/cli/args.js +247 -127
  7. package/build/lib/cli/args.js.map +1 -1
  8. package/build/lib/cli/driver-command.js +63 -88
  9. package/build/lib/cli/driver-command.js.map +1 -1
  10. package/build/lib/cli/extension-command.d.ts +32 -23
  11. package/build/lib/cli/extension-command.d.ts.map +1 -1
  12. package/build/lib/cli/extension-command.js +730 -512
  13. package/build/lib/cli/extension-command.js.map +1 -1
  14. package/build/lib/cli/extension.d.ts +7 -6
  15. package/build/lib/cli/extension.d.ts.map +1 -1
  16. package/build/lib/cli/extension.js +68 -65
  17. package/build/lib/cli/extension.js.map +1 -1
  18. package/build/lib/cli/parser.d.ts +3 -3
  19. package/build/lib/cli/parser.d.ts.map +1 -1
  20. package/build/lib/cli/parser.js +234 -192
  21. package/build/lib/cli/parser.js.map +1 -1
  22. package/build/lib/cli/plugin-command.js +58 -87
  23. package/build/lib/cli/plugin-command.js.map +1 -1
  24. package/build/lib/cli/utils.js +66 -69
  25. package/build/lib/cli/utils.js.map +1 -1
  26. package/build/lib/config-file.d.ts.map +1 -1
  27. package/build/lib/config-file.js +189 -120
  28. package/build/lib/config-file.js.map +1 -1
  29. package/build/lib/config.d.ts.map +1 -1
  30. package/build/lib/config.js +254 -213
  31. package/build/lib/config.js.map +1 -1
  32. package/build/lib/constants.d.ts +5 -5
  33. package/build/lib/constants.d.ts.map +1 -1
  34. package/build/lib/constants.js +64 -59
  35. package/build/lib/constants.js.map +1 -1
  36. package/build/lib/extension/driver-config.js +199 -164
  37. package/build/lib/extension/driver-config.js.map +1 -1
  38. package/build/lib/extension/extension-config.d.ts +18 -16
  39. package/build/lib/extension/extension-config.d.ts.map +1 -1
  40. package/build/lib/extension/extension-config.js +523 -396
  41. package/build/lib/extension/extension-config.js.map +1 -1
  42. package/build/lib/extension/index.js +98 -68
  43. package/build/lib/extension/index.js.map +1 -1
  44. package/build/lib/extension/manifest-migrations.d.ts +27 -0
  45. package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
  46. package/build/lib/extension/manifest-migrations.js +99 -0
  47. package/build/lib/extension/manifest-migrations.js.map +1 -0
  48. package/build/lib/extension/manifest.d.ts +7 -56
  49. package/build/lib/extension/manifest.d.ts.map +1 -1
  50. package/build/lib/extension/manifest.js +432 -240
  51. package/build/lib/extension/manifest.js.map +1 -1
  52. package/build/lib/extension/package-changed.js +57 -61
  53. package/build/lib/extension/package-changed.js.map +1 -1
  54. package/build/lib/extension/plugin-config.d.ts +2 -3
  55. package/build/lib/extension/plugin-config.d.ts.map +1 -1
  56. package/build/lib/extension/plugin-config.js +94 -70
  57. package/build/lib/extension/plugin-config.js.map +1 -1
  58. package/build/lib/grid-register.js +119 -137
  59. package/build/lib/grid-register.js.map +1 -1
  60. package/build/lib/logger.d.ts +1 -1
  61. package/build/lib/logger.d.ts.map +1 -1
  62. package/build/lib/logger.js +5 -15
  63. package/build/lib/logger.js.map +1 -1
  64. package/build/lib/logsink.d.ts.map +1 -1
  65. package/build/lib/logsink.js +189 -183
  66. package/build/lib/logsink.js.map +1 -1
  67. package/build/lib/main.d.ts +19 -12
  68. package/build/lib/main.d.ts.map +1 -1
  69. package/build/lib/main.js +330 -304
  70. package/build/lib/main.js.map +1 -1
  71. package/build/lib/schema/arg-spec.js +153 -108
  72. package/build/lib/schema/arg-spec.js.map +1 -1
  73. package/build/lib/schema/cli-args.js +203 -164
  74. package/build/lib/schema/cli-args.js.map +1 -1
  75. package/build/lib/schema/cli-transformers.js +117 -72
  76. package/build/lib/schema/cli-transformers.js.map +1 -1
  77. package/build/lib/schema/index.js +17 -32
  78. package/build/lib/schema/index.js.map +1 -1
  79. package/build/lib/schema/keywords.js +125 -67
  80. package/build/lib/schema/keywords.js.map +1 -1
  81. package/build/lib/schema/schema.d.ts.map +1 -1
  82. package/build/lib/schema/schema.js +582 -417
  83. package/build/lib/schema/schema.js.map +1 -1
  84. package/build/lib/utils.d.ts +41 -255
  85. package/build/lib/utils.d.ts.map +1 -1
  86. package/build/lib/utils.js +342 -193
  87. package/build/lib/utils.js.map +1 -1
  88. package/build/tsconfig.tsbuildinfo +1 -1
  89. package/build/types/cli.d.ts +45 -34
  90. package/build/types/cli.d.ts.map +1 -1
  91. package/build/types/cli.js +3 -0
  92. package/build/types/cli.js.map +1 -0
  93. package/build/types/index.d.ts +1 -2
  94. package/build/types/index.d.ts.map +1 -1
  95. package/build/types/index.js +19 -0
  96. package/build/types/index.js.map +1 -0
  97. package/build/types/manifest/base.d.ts +135 -0
  98. package/build/types/manifest/base.d.ts.map +1 -0
  99. package/build/types/manifest/base.js +3 -0
  100. package/build/types/manifest/base.js.map +1 -0
  101. package/build/types/manifest/index.d.ts +19 -0
  102. package/build/types/manifest/index.d.ts.map +1 -0
  103. package/build/types/manifest/index.js +40 -0
  104. package/build/types/manifest/index.js.map +1 -0
  105. package/build/types/manifest/v3.d.ts +139 -0
  106. package/build/types/manifest/v3.d.ts.map +1 -0
  107. package/build/types/manifest/v3.js +3 -0
  108. package/build/types/manifest/v3.js.map +1 -0
  109. package/lib/appium.js +1 -1
  110. package/lib/cli/args.js +1 -1
  111. package/lib/cli/extension-command.js +116 -61
  112. package/lib/cli/extension.js +9 -8
  113. package/lib/cli/parser.js +2 -2
  114. package/lib/config-file.js +2 -3
  115. package/lib/config.js +3 -2
  116. package/lib/constants.js +6 -5
  117. package/lib/extension/extension-config.js +24 -25
  118. package/lib/extension/manifest-migrations.js +99 -0
  119. package/lib/extension/manifest.js +79 -72
  120. package/lib/extension/plugin-config.js +1 -2
  121. package/lib/logsink.js +26 -5
  122. package/lib/main.js +58 -50
  123. package/lib/schema/schema.js +6 -1
  124. package/lib/utils.js +62 -0
  125. package/package.json +23 -24
  126. package/scripts/autoinstall-extensions.js +78 -26
  127. package/types/cli.ts +81 -42
  128. package/types/index.ts +1 -2
  129. package/types/manifest/README.md +30 -0
  130. package/types/manifest/base.ts +158 -0
  131. package/types/manifest/index.ts +27 -0
  132. package/types/manifest/v3.ts +161 -0
  133. package/build/types/appium-manifest.d.ts +0 -59
  134. package/build/types/appium-manifest.d.ts.map +0 -1
  135. package/build/types/extension-manifest.d.ts +0 -55
  136. package/build/types/extension-manifest.d.ts.map +0 -1
  137. package/types/appium-manifest.ts +0 -73
  138. package/types/extension-manifest.ts +0 -64
@@ -1,253 +1,294 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.APPIUM_VER = void 0;
7
- exports.checkNodeOk = checkNodeOk;
8
- exports.checkNpmOk = checkNpmOk;
9
- exports.getBuildInfo = getBuildInfo;
10
- exports.getGitRev = getGitRev;
11
- exports.getNonDefaultServerArgs = getNonDefaultServerArgs;
12
- exports.rootDir = void 0;
13
- exports.showBuildInfo = showBuildInfo;
14
- exports.showConfig = showConfig;
15
- exports.updateBuildInfo = updateBuildInfo;
16
- exports.validateTmpDir = validateTmpDir;
17
- exports.warnNodeDeprecations = warnNodeDeprecations;
18
-
19
- require("source-map-support/register");
20
-
21
- var _lodash = _interopRequireDefault(require("lodash"));
22
-
23
- var _support = require("@appium/support");
24
-
25
- var _axios = _interopRequireDefault(require("axios"));
26
-
27
- var _teen_process = require("teen_process");
28
-
29
- var _semver = _interopRequireDefault(require("semver"));
30
-
31
- var _findUp = _interopRequireDefault(require("find-up"));
32
-
33
- var _schema = require("./schema/schema");
34
-
35
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
-
37
- const npmPackage = _support.fs.readPackageJsonFrom(__dirname);
38
-
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);
39
16
  const APPIUM_VER = npmPackage.version;
40
17
  exports.APPIUM_VER = APPIUM_VER;
41
18
  const MIN_NODE_VERSION = npmPackage.engines.node;
42
19
  const MIN_NPM_VERSION = npmPackage.engines.npm;
43
20
  const GIT_META_ROOT = '.git';
44
- const GIT_BINARY = `git${_support.system.isWindows() ? '.exe' : ''}`;
21
+ const GIT_BINARY = `git${support_1.system.isWindows() ? '.exe' : ''}`;
45
22
  const GITHUB_API = 'https://api.github.com/repos/appium/appium';
23
+ /**
24
+ * @type {import('appium/types').BuildInfo}
25
+ */
46
26
  const BUILD_INFO = {
47
- version: APPIUM_VER
27
+ version: APPIUM_VER,
48
28
  };
49
-
50
29
  function getNodeVersion() {
51
- return _semver.default.coerce(process.version);
30
+ return /** @type {import('semver').SemVer} */ (semver_1.default.coerce(process.version));
52
31
  }
53
-
32
+ /**
33
+ * Returns version of `npm`
34
+ * @returns {Promise<string>}
35
+ */
54
36
  async function getNpmVersion() {
55
- const {
56
- stdout
57
- } = await (0, _teen_process.exec)(_support.system.isWindows() ? 'npm.cmd' : 'npm', ['--version']);
58
- return stdout.trim();
37
+ const { stdout } = await (0, teen_process_1.exec)(support_1.system.isWindows() ? 'npm.cmd' : 'npm', ['--version']);
38
+ return stdout.trim();
59
39
  }
60
-
40
+ /**
41
+ * @param {boolean} [useGithubApiFallback]
42
+ */
61
43
  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 buildTimestamp = await getGitTimestamp(sha, useGithubApiFallback);
70
-
71
- if (buildTimestamp) {
72
- BUILD_INFO.built = buildTimestamp;
73
- }
44
+ const sha = await getGitRev(useGithubApiFallback);
45
+ if (!sha) {
46
+ return;
47
+ }
48
+ BUILD_INFO['git-sha'] = sha;
49
+ const buildTimestamp = await getGitTimestamp(sha, useGithubApiFallback);
50
+ if (buildTimestamp) {
51
+ BUILD_INFO.built = buildTimestamp;
52
+ }
74
53
  }
75
-
54
+ exports.updateBuildInfo = updateBuildInfo;
55
+ /**
56
+ * Finds the Git metadata dir (see `GIT_META_ROOT`)
57
+ *
58
+ * This is needed because Appium cannot assume `package.json` and `.git` are in the same
59
+ * directory. Monorepos, see?
60
+ * @returns {Promise<string|undefined>} Path to dir or `undefined` if not found
61
+ */
76
62
  async function findGitRoot() {
77
- return await (0, _findUp.default)(GIT_META_ROOT, {
78
- cwd: rootDir,
79
- type: 'directory'
80
- });
63
+ return await (0, find_up_1.default)(GIT_META_ROOT, { cwd: rootDir, type: 'directory' });
81
64
  }
82
-
65
+ /**
66
+ * @param {boolean} [useGithubApiFallback]
67
+ * @returns {Promise<string?>}
68
+ */
83
69
  async function getGitRev(useGithubApiFallback = false) {
84
- const gitRoot = await findGitRoot();
85
-
86
- if (gitRoot) {
70
+ const gitRoot = await findGitRoot();
71
+ if (gitRoot) {
72
+ try {
73
+ const { stdout } = await (0, teen_process_1.exec)(GIT_BINARY, ['rev-parse', 'HEAD'], {
74
+ cwd: gitRoot,
75
+ });
76
+ return stdout.trim();
77
+ }
78
+ catch (ign) { }
79
+ }
80
+ if (!useGithubApiFallback) {
81
+ return null;
82
+ }
83
+ // If the package folder is not a valid git repository
84
+ // then fetch the corresponding tag info from GitHub
87
85
  try {
88
- const {
89
- stdout
90
- } = await (0, _teen_process.exec)(GIT_BINARY, ['rev-parse', 'HEAD'], {
91
- cwd: gitRoot
92
- });
93
- return stdout.trim();
94
- } catch (ign) {}
95
- }
96
-
97
- if (!useGithubApiFallback) {
86
+ return (await axios_1.default.get(`${GITHUB_API}/git/refs/tags/appium@${APPIUM_VER}`, {
87
+ headers: {
88
+ 'User-Agent': `Appium ${APPIUM_VER}`,
89
+ },
90
+ })).data?.object?.sha;
91
+ }
92
+ catch (ign) { }
98
93
  return null;
99
- }
100
-
101
- try {
102
- var _await$axios$get$data, _await$axios$get$data2;
103
-
104
- return (_await$axios$get$data = (await _axios.default.get(`${GITHUB_API}/git/refs/tags/appium@${APPIUM_VER}`, {
105
- headers: {
106
- 'User-Agent': `Appium ${APPIUM_VER}`
107
- }
108
- })).data) === null || _await$axios$get$data === void 0 ? void 0 : (_await$axios$get$data2 = _await$axios$get$data.object) === null || _await$axios$get$data2 === void 0 ? void 0 : _await$axios$get$data2.sha;
109
- } catch (ign) {}
110
-
111
- return null;
112
94
  }
113
-
95
+ exports.getGitRev = getGitRev;
96
+ /**
97
+ * @param {string} commitSha
98
+ * @param {boolean} [useGithubApiFallback]
99
+ * @returns {Promise<string?>}
100
+ */
114
101
  async function getGitTimestamp(commitSha, useGithubApiFallback = false) {
115
- const gitRoot = await findGitRoot();
116
-
117
- if (gitRoot) {
102
+ const gitRoot = await findGitRoot();
103
+ if (gitRoot) {
104
+ try {
105
+ const { stdout } = await (0, teen_process_1.exec)(GIT_BINARY, ['show', '-s', '--format=%ci', commitSha], {
106
+ cwd: gitRoot,
107
+ });
108
+ return stdout.trim();
109
+ }
110
+ catch (ign) { }
111
+ }
112
+ if (!useGithubApiFallback) {
113
+ return null;
114
+ }
118
115
  try {
119
- const {
120
- stdout
121
- } = await (0, _teen_process.exec)(GIT_BINARY, ['show', '-s', '--format=%ci', commitSha], {
122
- cwd: gitRoot
123
- });
124
- return stdout.trim();
125
- } catch (ign) {}
126
- }
127
-
128
- if (!useGithubApiFallback) {
116
+ return (await axios_1.default.get(`${GITHUB_API}/git/tags/${commitSha}`, {
117
+ headers: {
118
+ 'User-Agent': `Appium ${APPIUM_VER}`,
119
+ },
120
+ })).data?.tagger?.date;
121
+ }
122
+ catch (ign) { }
129
123
  return null;
130
- }
131
-
132
- try {
133
- var _await$axios$get$data3, _await$axios$get$data4;
134
-
135
- return (_await$axios$get$data3 = (await _axios.default.get(`${GITHUB_API}/git/tags/${commitSha}`, {
136
- headers: {
137
- 'User-Agent': `Appium ${APPIUM_VER}`
138
- }
139
- })).data) === null || _await$axios$get$data3 === void 0 ? void 0 : (_await$axios$get$data4 = _await$axios$get$data3.tagger) === null || _await$axios$get$data4 === void 0 ? void 0 : _await$axios$get$data4.date;
140
- } catch (ign) {}
141
-
142
- return null;
143
124
  }
144
-
125
+ /**
126
+ * Mutable object containing Appium build information. By default it
127
+ * only contains the Appium version, but is updated with the build timestamp
128
+ * and git commit hash asynchronously as soon as `updateBuildInfo` is called
129
+ * and succeeds.
130
+ * @returns {import('appium/types').BuildInfo}
131
+ */
145
132
  function getBuildInfo() {
146
- return BUILD_INFO;
133
+ return BUILD_INFO;
147
134
  }
148
-
135
+ exports.getBuildInfo = getBuildInfo;
149
136
  function checkNodeOk() {
150
- const version = getNodeVersion();
151
-
152
- if (!_semver.default.satisfies(version, MIN_NODE_VERSION)) {
153
- throw new Error(`Node version must be at least ${MIN_NODE_VERSION}; current is ${version.version}`);
154
- }
137
+ const version = getNodeVersion();
138
+ if (!semver_1.default.satisfies(version, MIN_NODE_VERSION)) {
139
+ throw new Error(`Node version must be at least ${MIN_NODE_VERSION}; current is ${version.version}`);
140
+ }
155
141
  }
156
-
142
+ exports.checkNodeOk = checkNodeOk;
157
143
  async function checkNpmOk() {
158
- const npmVersion = await getNpmVersion();
159
-
160
- if (!_semver.default.satisfies(npmVersion, MIN_NPM_VERSION)) {
161
- throw new Error(`npm version must be at least ${MIN_NPM_VERSION}; current is ${npmVersion}. Run "npm install -g npm" to upgrade.`);
162
- }
144
+ const npmVersion = await getNpmVersion();
145
+ if (!semver_1.default.satisfies(npmVersion, MIN_NPM_VERSION)) {
146
+ throw new Error(`npm version must be at least ${MIN_NPM_VERSION}; current is ${npmVersion}. Run "npm install -g npm" to upgrade.`);
147
+ }
163
148
  }
164
-
165
- function warnNodeDeprecations() {}
166
-
149
+ exports.checkNpmOk = checkNpmOk;
150
+ function warnNodeDeprecations() {
151
+ /**
152
+ * Uncomment this section to get node version deprecation warnings
153
+ * Also add test cases to config-specs.js to cover the cases added
154
+ **/
155
+ // const version = getNodeVersion();
156
+ // if (version.major < 8) {
157
+ // logger.warn(`Appium support for versions of node < ${version.major} has been ` +
158
+ // 'deprecated and will be removed in a future version. Please ' +
159
+ // 'upgrade!');
160
+ // }
161
+ }
162
+ exports.warnNodeDeprecations = warnNodeDeprecations;
167
163
  async function showBuildInfo() {
168
- await updateBuildInfo(true);
169
- console.log(JSON.stringify(getBuildInfo()));
164
+ await updateBuildInfo(true);
165
+ console.log(JSON.stringify(getBuildInfo())); // eslint-disable-line no-console
170
166
  }
171
-
167
+ exports.showBuildInfo = showBuildInfo;
168
+ /**
169
+ * Returns k/v pairs of server arguments which are _not_ the defaults.
170
+ * @param {Args} parsedArgs
171
+ * @returns {Args}
172
+ */
172
173
  function getNonDefaultServerArgs(parsedArgs) {
173
- const flatten = args => {
174
- const argSpecs = (0, _schema.getAllArgSpecs)();
175
-
176
- const flattened = _lodash.default.reduce([...argSpecs.values()], (acc, argSpec) => {
177
- if (_lodash.default.has(args, argSpec.dest)) {
178
- acc[argSpec.dest] = {
179
- value: _lodash.default.get(args, argSpec.dest),
180
- argSpec
181
- };
182
- }
183
-
184
- return acc;
185
- }, {});
186
-
187
- return flattened;
188
- };
189
-
190
- const args = flatten(parsedArgs);
191
-
192
- const typesDiffer = dest => typeof args[dest].value !== typeof defaultsFromSchema[dest];
193
-
194
- const defaultValueIsArray = dest => _lodash.default.isArray(defaultsFromSchema[dest]);
195
-
196
- const argsValueIsArray = dest => _lodash.default.isArray(args[dest].value);
197
-
198
- const arraysDiffer = dest => _lodash.default.gt(_lodash.default.size(_lodash.default.difference(args[dest].value, defaultsFromSchema[dest])), 0);
199
-
200
- const valuesDiffer = dest => args[dest].value !== defaultsFromSchema[dest];
201
-
202
- const defaultIsDefined = dest => !_lodash.default.isUndefined(defaultsFromSchema[dest]);
203
-
204
- const argValueNotArrayOrArraysDiffer = _lodash.default.overSome([_lodash.default.negate(argsValueIsArray), arraysDiffer]);
205
-
206
- const defaultValueNotArrayAndValuesDiffer = _lodash.default.overEvery([_lodash.default.negate(defaultValueIsArray), valuesDiffer]);
207
-
208
- const isNotDefault = _lodash.default.overEvery([defaultIsDefined, _lodash.default.overSome([typesDiffer, _lodash.default.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]), defaultValueNotArrayAndValuesDiffer])]);
209
-
210
- const defaultsFromSchema = (0, _schema.getDefaultsForSchema)(true);
211
- return _lodash.default.reduce(_lodash.default.pickBy(args, (__, key) => isNotDefault(key)), (acc, {
212
- value,
213
- argSpec
214
- }) => _lodash.default.set(acc, argSpec.dest, value), {});
174
+ /**
175
+ * Flattens parsed args into a single level object for comparison with
176
+ * flattened defaults across server args and extension args.
177
+ * @param {Args} args
178
+ * @returns {Record<string, { value: any, argSpec: ArgSpec }>}
179
+ */
180
+ const flatten = (args) => {
181
+ const argSpecs = (0, schema_1.getAllArgSpecs)();
182
+ const flattened = lodash_1.default.reduce([...argSpecs.values()], (acc, argSpec) => {
183
+ if (lodash_1.default.has(args, argSpec.dest)) {
184
+ acc[argSpec.dest] = { value: lodash_1.default.get(args, argSpec.dest), argSpec };
185
+ }
186
+ return acc;
187
+ },
188
+ /** @type {Record<string, { value: any, argSpec: ArgSpec }>} */ ({}));
189
+ return flattened;
190
+ };
191
+ const args = flatten(parsedArgs);
192
+ // hopefully these function names are descriptive enough
193
+ const typesDiffer = /** @param {string} dest */ (dest) => typeof args[dest].value !== typeof defaultsFromSchema[dest];
194
+ const defaultValueIsArray = /** @param {string} dest */ (dest) => lodash_1.default.isArray(defaultsFromSchema[dest]);
195
+ const argsValueIsArray = /** @param {string} dest */ (dest) => lodash_1.default.isArray(args[dest].value);
196
+ const arraysDiffer = /** @param {string} dest */ (dest) => lodash_1.default.gt(lodash_1.default.size(lodash_1.default.difference(args[dest].value, defaultsFromSchema[dest])), 0);
197
+ const valuesDiffer = /** @param {string} dest */ (dest) => args[dest].value !== defaultsFromSchema[dest];
198
+ const defaultIsDefined = /** @param {string} dest */ (dest) => !lodash_1.default.isUndefined(defaultsFromSchema[dest]);
199
+ // note that `_.overEvery` is like an "AND", and `_.overSome` is like an "OR"
200
+ const argValueNotArrayOrArraysDiffer = lodash_1.default.overSome([lodash_1.default.negate(argsValueIsArray), arraysDiffer]);
201
+ const defaultValueNotArrayAndValuesDiffer = lodash_1.default.overEvery([
202
+ lodash_1.default.negate(defaultValueIsArray),
203
+ valuesDiffer,
204
+ ]);
205
+ /**
206
+ * This used to be a hideous conditional, but it's broken up into a hideous function instead.
207
+ * hopefully this makes things a little more understandable.
208
+ * - checks if the default value is defined
209
+ * - if so, and the default is not an array:
210
+ * - ensures the types are the same
211
+ * - ensures the values are equal
212
+ * - if so, and the default is an array:
213
+ * - ensures the args value is an array
214
+ * - ensures the args values do not differ from the default values
215
+ * @type {(dest: string) => boolean}
216
+ */
217
+ const isNotDefault = lodash_1.default.overEvery([
218
+ defaultIsDefined,
219
+ lodash_1.default.overSome([
220
+ typesDiffer,
221
+ lodash_1.default.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]),
222
+ defaultValueNotArrayAndValuesDiffer,
223
+ ]),
224
+ ]);
225
+ const defaultsFromSchema = (0, schema_1.getDefaultsForSchema)(true);
226
+ return lodash_1.default.reduce(lodash_1.default.pickBy(args, (__, key) => isNotDefault(key)),
227
+ // explodes the flattened object back into nested one
228
+ (acc, { value, argSpec }) => lodash_1.default.set(acc, argSpec.dest, value),
229
+ /** @type {Args} */ ({}));
215
230
  }
216
-
217
- const compactConfig = _lodash.default.partial(_lodash.default.omitBy, _lodash.default, (value, key) => key === 'subcommand' || _lodash.default.isUndefined(value) || _lodash.default.isObject(value) && _lodash.default.isEmpty(value));
218
-
231
+ exports.getNonDefaultServerArgs = getNonDefaultServerArgs;
232
+ /**
233
+ * Compacts an object for {@link showConfig}:
234
+ * 1. Removes `subcommand` key/value
235
+ * 2. Removes `undefined` values
236
+ * 3. Removes empty objects (but not `false` values)
237
+ * Does not operate recursively.
238
+ */
239
+ 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)));
240
+ /**
241
+ * Shows a breakdown of the current config after CLI params, config file loaded & defaults applied.
242
+ *
243
+ * The actual shape of `preConfigParsedArgs` and `defaults` does not matter for the purposes of this function,
244
+ * but it's intended to be called with values of type {@link ParsedArgs} and `DefaultValues<true>`, respectively.
245
+ *
246
+ * @param {Partial<ParsedArgs>} nonDefaultPreConfigParsedArgs - Parsed CLI args (or param to `init()`) before config & defaults applied
247
+ * @param {import('./config-file').ReadConfigFileResult} configResult - Result of attempting to load a config file. _Must_ be normalized
248
+ * @param {Partial<ParsedArgs>} defaults - Configuration defaults from schemas
249
+ * @param {ParsedArgs} parsedArgs - Entire parsed args object
250
+ */
219
251
  function showConfig(nonDefaultPreConfigParsedArgs, configResult, defaults, parsedArgs) {
220
- console.log('Appium Configuration\n');
221
- console.log('from defaults:\n');
222
- console.dir(compactConfig(defaults));
223
-
224
- if (configResult.config) {
225
- console.log(`\nfrom config file at ${configResult.filepath}:\n`);
226
- console.dir(compactConfig(configResult.config));
227
- } else {
228
- console.log(`\n(no configuration file loaded)`);
229
- }
230
-
231
- if (_lodash.default.isEmpty(nonDefaultPreConfigParsedArgs)) {
232
- console.log(`\n(no CLI parameters provided)`);
233
- } else {
234
- console.log('\nvia CLI or function call:\n');
235
- console.dir(compactConfig(nonDefaultPreConfigParsedArgs));
236
- }
237
-
238
- console.log('\nfinal configuration:\n');
239
- console.dir(compactConfig(parsedArgs));
252
+ console.log('Appium Configuration\n');
253
+ console.log('from defaults:\n');
254
+ console.dir(compactConfig(defaults));
255
+ if (configResult.config) {
256
+ console.log(`\nfrom config file at ${configResult.filepath}:\n`);
257
+ console.dir(compactConfig(configResult.config));
258
+ }
259
+ else {
260
+ console.log(`\n(no configuration file loaded)`);
261
+ }
262
+ const compactedNonDefaultPreConfigArgs = compactConfig(nonDefaultPreConfigParsedArgs);
263
+ if (lodash_1.default.isEmpty(compactedNonDefaultPreConfigArgs)) {
264
+ console.log(`\n(no CLI parameters provided)`);
265
+ }
266
+ else {
267
+ console.log('\nvia CLI or function call:\n');
268
+ console.dir(compactedNonDefaultPreConfigArgs);
269
+ }
270
+ console.log('\nfinal configuration:\n');
271
+ console.dir(compactConfig(parsedArgs));
240
272
  }
241
-
273
+ exports.showConfig = showConfig;
274
+ /**
275
+ * @param {string} tmpDir
276
+ */
242
277
  async function validateTmpDir(tmpDir) {
243
- try {
244
- await _support.fs.mkdirp(tmpDir);
245
- } catch (e) {
246
- throw new Error(`We could not ensure that the temp dir you specified ` + `(${tmpDir}) exists. Please make sure it's writeable.`);
247
- }
278
+ try {
279
+ await support_1.fs.mkdirp(tmpDir);
280
+ }
281
+ catch (e) {
282
+ throw new Error(`We could not ensure that the temp dir you specified ` +
283
+ `(${tmpDir}) exists. Please make sure it's writeable.`);
284
+ }
248
285
  }
249
-
250
- const rootDir = _support.fs.findRoot(__dirname);
251
-
286
+ exports.validateTmpDir = validateTmpDir;
287
+ const rootDir = support_1.fs.findRoot(__dirname);
252
288
  exports.rootDir = rootDir;
253
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJucG1QYWNrYWdlIiwiZnMiLCJyZWFkUGFja2FnZUpzb25Gcm9tIiwiX19kaXJuYW1lIiwiQVBQSVVNX1ZFUiIsInZlcnNpb24iLCJNSU5fTk9ERV9WRVJTSU9OIiwiZW5naW5lcyIsIm5vZGUiLCJNSU5fTlBNX1ZFUlNJT04iLCJucG0iLCJHSVRfTUVUQV9ST09UIiwiR0lUX0JJTkFSWSIsInN5c3RlbSIsImlzV2luZG93cyIsIkdJVEhVQl9BUEkiLCJCVUlMRF9JTkZPIiwiZ2V0Tm9kZVZlcnNpb24iLCJzZW12ZXIiLCJjb2VyY2UiLCJwcm9jZXNzIiwiZ2V0TnBtVmVyc2lvbiIsInN0ZG91dCIsImV4ZWMiLCJ0cmltIiwidXBkYXRlQnVpbGRJbmZvIiwidXNlR2l0aHViQXBpRmFsbGJhY2siLCJzaGEiLCJnZXRHaXRSZXYiLCJidWlsZFRpbWVzdGFtcCIsImdldEdpdFRpbWVzdGFtcCIsImJ1aWx0IiwiZmluZEdpdFJvb3QiLCJmaW5kVXAiLCJjd2QiLCJyb290RGlyIiwidHlwZSIsImdpdFJvb3QiLCJpZ24iLCJheGlvcyIsImdldCIsImhlYWRlcnMiLCJkYXRhIiwib2JqZWN0IiwiY29tbWl0U2hhIiwidGFnZ2VyIiwiZGF0ZSIsImdldEJ1aWxkSW5mbyIsImNoZWNrTm9kZU9rIiwic2F0aXNmaWVzIiwiRXJyb3IiLCJjaGVja05wbU9rIiwibnBtVmVyc2lvbiIsIndhcm5Ob2RlRGVwcmVjYXRpb25zIiwic2hvd0J1aWxkSW5mbyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MiLCJwYXJzZWRBcmdzIiwiZmxhdHRlbiIsImFyZ3MiLCJhcmdTcGVjcyIsImdldEFsbEFyZ1NwZWNzIiwiZmxhdHRlbmVkIiwiXyIsInJlZHVjZSIsInZhbHVlcyIsImFjYyIsImFyZ1NwZWMiLCJoYXMiLCJkZXN0IiwidmFsdWUiLCJ0eXBlc0RpZmZlciIsImRlZmF1bHRzRnJvbVNjaGVtYSIsImRlZmF1bHRWYWx1ZUlzQXJyYXkiLCJpc0FycmF5IiwiYXJnc1ZhbHVlSXNBcnJheSIsImFycmF5c0RpZmZlciIsImd0Iiwic2l6ZSIsImRpZmZlcmVuY2UiLCJ2YWx1ZXNEaWZmZXIiLCJkZWZhdWx0SXNEZWZpbmVkIiwiaXNVbmRlZmluZWQiLCJhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXIiLCJvdmVyU29tZSIsIm5lZ2F0ZSIsImRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzRGlmZmVyIiwib3ZlckV2ZXJ5IiwiaXNOb3REZWZhdWx0IiwiZ2V0RGVmYXVsdHNGb3JTY2hlbWEiLCJwaWNrQnkiLCJfXyIsImtleSIsInNldCIsImNvbXBhY3RDb25maWciLCJwYXJ0aWFsIiwib21pdEJ5IiwiaXNPYmplY3QiLCJpc0VtcHR5Iiwic2hvd0NvbmZpZyIsIm5vbkRlZmF1bHRQcmVDb25maWdQYXJzZWRBcmdzIiwiY29uZmlnUmVzdWx0IiwiZGVmYXVsdHMiLCJkaXIiLCJjb25maWciLCJmaWxlcGF0aCIsInZhbGlkYXRlVG1wRGlyIiwidG1wRGlyIiwibWtkaXJwIiwiZSIsImZpbmRSb290Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtzeXN0ZW0sIGZzfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7ZXhlY30gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBmaW5kVXAgZnJvbSAnZmluZC11cCc7XG5pbXBvcnQge2dldERlZmF1bHRzRm9yU2NoZW1hLCBnZXRBbGxBcmdTcGVjc30gZnJvbSAnLi9zY2hlbWEvc2NoZW1hJztcblxuY29uc3QgbnBtUGFja2FnZSA9IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oX19kaXJuYW1lKTtcblxuY29uc3QgQVBQSVVNX1ZFUiA9IG5wbVBhY2thZ2UudmVyc2lvbjtcbmNvbnN0IE1JTl9OT0RFX1ZFUlNJT04gPSBucG1QYWNrYWdlLmVuZ2luZXMubm9kZTtcbmNvbnN0IE1JTl9OUE1fVkVSU0lPTiA9IG5wbVBhY2thZ2UuZW5naW5lcy5ucG07XG5cbmNvbnN0IEdJVF9NRVRBX1JPT1QgPSAnLmdpdCc7XG5jb25zdCBHSVRfQklOQVJZID0gYGdpdCR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbmNvbnN0IEdJVEhVQl9BUEkgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hcHBpdW0vYXBwaXVtJztcblxuLyoqXG4gKiBAdHlwZSB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5CdWlsZEluZm99XG4gKi9cbmNvbnN0IEJVSUxEX0lORk8gPSB7XG4gIHZlcnNpb246IEFQUElVTV9WRVIsXG59O1xuXG5mdW5jdGlvbiBnZXROb2RlVmVyc2lvbigpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KCdzZW12ZXInKS5TZW1WZXJ9ICovIChzZW12ZXIuY29lcmNlKHByb2Nlc3MudmVyc2lvbikpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdmVyc2lvbiBvZiBgbnBtYFxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TnBtVmVyc2lvbigpIHtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKHN5c3RlbS5pc1dpbmRvd3MoKSA/ICducG0uY21kJyA6ICducG0nLCBbJy0tdmVyc2lvbiddKTtcbiAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBbdXNlR2l0aHViQXBpRmFsbGJhY2tdXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUJ1aWxkSW5mbyh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IHNoYSA9IGF3YWl0IGdldEdpdFJldih1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmICghc2hhKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEJVSUxEX0lORk9bJ2dpdC1zaGEnXSA9IHNoYTtcbiAgY29uc3QgYnVpbGRUaW1lc3RhbXAgPSBhd2FpdCBnZXRHaXRUaW1lc3RhbXAoc2hhLCB1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmIChidWlsZFRpbWVzdGFtcCkge1xuICAgIEJVSUxEX0lORk8uYnVpbHQgPSBidWlsZFRpbWVzdGFtcDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBHaXQgbWV0YWRhdGEgZGlyIChzZWUgYEdJVF9NRVRBX1JPT1RgKVxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgQXBwaXVtIGNhbm5vdCBhc3N1bWUgYHBhY2thZ2UuanNvbmAgYW5kIGAuZ2l0YCBhcmUgaW4gdGhlIHNhbWVcbiAqIGRpcmVjdG9yeS4gIE1vbm9yZXBvcywgc2VlP1xuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nfHVuZGVmaW5lZD59IFBhdGggdG8gZGlyIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kR2l0Um9vdCgpIHtcbiAgcmV0dXJuIGF3YWl0IGZpbmRVcChHSVRfTUVUQV9ST09ULCB7Y3dkOiByb290RGlyLCB0eXBlOiAnZGlyZWN0b3J5J30pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VzZUdpdGh1YkFwaUZhbGxiYWNrXVxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEdpdFJldih1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBmaW5kR2l0Um9vdCgpO1xuICBpZiAoZ2l0Um9vdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgaWYgKCF1c2VHaXRodWJBcGlGYWxsYmFjaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gSWYgdGhlIHBhY2thZ2UgZm9sZGVyIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvc2l0b3J5XG4gIC8vIHRoZW4gZmV0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgdGFnIGluZm8gZnJvbSBHaXRIdWJcbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2dpdC9yZWZzL3RhZ3MvYXBwaXVtQCR7QVBQSVVNX1ZFUn1gLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICkuZGF0YT8ub2JqZWN0Py5zaGE7XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbW1pdFNoYVxuICogQHBhcmFtIHtib29sZWFufSBbdXNlR2l0aHViQXBpRmFsbGJhY2tdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc/Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0VGltZXN0YW1wKGNvbW1pdFNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBnaXRSb290ID0gYXdhaXQgZmluZEdpdFJvb3QoKTtcbiAgaWYgKGdpdFJvb3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsnc2hvdycsICctcycsICctLWZvcm1hdD0lY2knLCBjb21taXRTaGFdLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgaWYgKCF1c2VHaXRodWJBcGlGYWxsYmFjaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2dpdC90YWdzLyR7Y29tbWl0U2hhfWAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS5kYXRhPy50YWdnZXI/LmRhdGU7XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTXV0YWJsZSBvYmplY3QgY29udGFpbmluZyBBcHBpdW0gYnVpbGQgaW5mb3JtYXRpb24uIEJ5IGRlZmF1bHQgaXRcbiAqIG9ubHkgY29udGFpbnMgdGhlIEFwcGl1bSB2ZXJzaW9uLCBidXQgaXMgdXBkYXRlZCB3aXRoIHRoZSBidWlsZCB0aW1lc3RhbXBcbiAqIGFuZCBnaXQgY29tbWl0IGhhc2ggYXN5bmNocm9ub3VzbHkgYXMgc29vbiBhcyBgdXBkYXRlQnVpbGRJbmZvYCBpcyBjYWxsZWRcbiAqIGFuZCBzdWNjZWVkcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkJ1aWxkSW5mb31cbiAqL1xuZnVuY3Rpb24gZ2V0QnVpbGRJbmZvKCkge1xuICByZXR1cm4gQlVJTERfSU5GTztcbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlT2soKSB7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXROb2RlVmVyc2lvbigpO1xuICBpZiAoIXNlbXZlci5zYXRpc2ZpZXModmVyc2lvbiwgTUlOX05PREVfVkVSU0lPTikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTm9kZSB2ZXJzaW9uIG11c3QgYmUgYXQgbGVhc3QgJHtNSU5fTk9ERV9WRVJTSU9OfTsgY3VycmVudCBpcyAke3ZlcnNpb24udmVyc2lvbn1gXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tOcG1PaygpIHtcbiAgY29uc3QgbnBtVmVyc2lvbiA9IGF3YWl0IGdldE5wbVZlcnNpb24oKTtcbiAgaWYgKCFzZW12ZXIuc2F0aXNmaWVzKG5wbVZlcnNpb24sIE1JTl9OUE1fVkVSU0lPTikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgbnBtIHZlcnNpb24gbXVzdCBiZSBhdCBsZWFzdCAke01JTl9OUE1fVkVSU0lPTn07IGN1cnJlbnQgaXMgJHtucG1WZXJzaW9ufS4gUnVuIFwibnBtIGluc3RhbGwgLWcgbnBtXCIgdG8gdXBncmFkZS5gXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9kZURlcHJlY2F0aW9ucygpIHtcbiAgLyoqXG4gICAqIFVuY29tbWVudCB0aGlzIHNlY3Rpb24gdG8gZ2V0IG5vZGUgdmVyc2lvbiBkZXByZWNhdGlvbiB3YXJuaW5nc1xuICAgKiBBbHNvIGFkZCB0ZXN0IGNhc2VzIHRvIGNvbmZpZy1zcGVjcy5qcyB0byBjb3ZlciB0aGUgY2FzZXMgYWRkZWRcbiAgICoqL1xuICAvLyBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgLy8gaWYgKHZlcnNpb24ubWFqb3IgPCA4KSB7XG4gIC8vICAgbG9nZ2VyLndhcm4oYEFwcGl1bSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZiBub2RlIDwgJHt2ZXJzaW9uLm1ham9yfSBoYXMgYmVlbiBgICtcbiAgLy8gICAgICAgICAgICAgICAnZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFBsZWFzZSAnICtcbiAgLy8gICAgICAgICAgICAgICAndXBncmFkZSEnKTtcbiAgLy8gfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93QnVpbGRJbmZvKCkge1xuICBhd2FpdCB1cGRhdGVCdWlsZEluZm8odHJ1ZSk7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGdldEJ1aWxkSW5mbygpKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxufVxuXG4vKipcbiAqIFJldHVybnMgay92IHBhaXJzIG9mIHNlcnZlciBhcmd1bWVudHMgd2hpY2ggYXJlIF9ub3RfIHRoZSBkZWZhdWx0cy5cbiAqIEBwYXJhbSB7QXJnc30gcGFyc2VkQXJnc1xuICogQHJldHVybnMge0FyZ3N9XG4gKi9cbmZ1bmN0aW9uIGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzKHBhcnNlZEFyZ3MpIHtcbiAgLyoqXG4gICAqIEZsYXR0ZW5zIHBhcnNlZCBhcmdzIGludG8gYSBzaW5nbGUgbGV2ZWwgb2JqZWN0IGZvciBjb21wYXJpc29uIHdpdGhcbiAgICogZmxhdHRlbmVkIGRlZmF1bHRzIGFjcm9zcyBzZXJ2ZXIgYXJncyBhbmQgZXh0ZW5zaW9uIGFyZ3MuXG4gICAqIEBwYXJhbSB7QXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgeyB2YWx1ZTogYW55LCBhcmdTcGVjOiBBcmdTcGVjIH0+fVxuICAgKi9cbiAgY29uc3QgZmxhdHRlbiA9IChhcmdzKSA9PiB7XG4gICAgY29uc3QgYXJnU3BlY3MgPSBnZXRBbGxBcmdTcGVjcygpO1xuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IF8ucmVkdWNlKFxuICAgICAgWy4uLmFyZ1NwZWNzLnZhbHVlcygpXSxcbiAgICAgIChhY2MsIGFyZ1NwZWMpID0+IHtcbiAgICAgICAgaWYgKF8uaGFzKGFyZ3MsIGFyZ1NwZWMuZGVzdCkpIHtcbiAgICAgICAgICBhY2NbYXJnU3BlYy5kZXN0XSA9IHt2YWx1ZTogXy5nZXQoYXJncywgYXJnU3BlYy5kZXN0KSwgYXJnU3BlY307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHsgdmFsdWU6IGFueSwgYXJnU3BlYzogQXJnU3BlYyB9Pn0gKi8gKHt9KVxuICAgICk7XG5cbiAgICByZXR1cm4gZmxhdHRlbmVkO1xuICB9O1xuXG4gIGNvbnN0IGFyZ3MgPSBmbGF0dGVuKHBhcnNlZEFyZ3MpO1xuXG4gIC8vIGhvcGVmdWxseSB0aGVzZSBmdW5jdGlvbiBuYW1lcyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoXG4gIGNvbnN0IHR5cGVzRGlmZmVyID0gLyoqIEBwYXJhbSB7c3RyaW5nfSBkZXN0ICovIChkZXN0KSA9PlxuICAgIHR5cGVvZiBhcmdzW2Rlc3RdLnZhbHVlICE9PSB0eXBlb2YgZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdO1xuXG4gIGNvbnN0IGRlZmF1bHRWYWx1ZUlzQXJyYXkgPSAvKiogQHBhcmFtIHtzdHJpbmd9IGRlc3QgKi8gKGRlc3QpID0+XG4gICAgXy5pc0FycmF5KGRlZmF1bHRzRnJvbVNjaGVtYVtkZXN0XSk7XG5cbiAgY29uc3QgYXJnc1ZhbHVlSXNBcnJheSA9IC8qKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAqLyAoZGVzdCkgPT4gXy5pc0FycmF5KGFyZ3NbZGVzdF0udmFsdWUpO1xuXG4gIGNvbnN0IGFycmF5c0RpZmZlciA9IC8qKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAqLyAoZGVzdCkgPT5cbiAgICBfLmd0KF8uc2l6ZShfLmRpZmZlcmVuY2UoYXJnc1tkZXN0XS52YWx1ZSwgZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKSksIDApO1xuXG4gIGNvbnN0IHZhbHVlc0RpZmZlciA9IC8qKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAqLyAoZGVzdCkgPT5cbiAgICBhcmdzW2Rlc3RdLnZhbHVlICE9PSBkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF07XG5cbiAgY29uc3QgZGVmYXVsdElzRGVmaW5lZCA9IC8qKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAqLyAoZGVzdCkgPT5cbiAgICAhXy5pc1VuZGVmaW5lZChkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF0pO1xuXG4gIC8vIG5vdGUgdGhhdCBgXy5vdmVyRXZlcnlgIGlzIGxpa2UgYW4gXCJBTkRcIiwgYW5kIGBfLm92ZXJTb21lYCBpcyBsaWtlIGFuIFwiT1JcIlxuXG4gIGNvbnN0IGFyZ1ZhbHVlTm90QXJyYXlPckFycmF5c0RpZmZlciA9IF8ub3ZlclNvbWUoW18ubmVnYXRlKGFyZ3NWYWx1ZUlzQXJyYXkpLCBhcnJheXNEaWZmZXJdKTtcblxuICBjb25zdCBkZWZhdWx0VmFsdWVOb3RBcnJheUFuZFZhbHVlc0RpZmZlciA9IF8ub3ZlckV2ZXJ5KFtcbiAgICBfLm5lZ2F0ZShkZWZhdWx0VmFsdWVJc0FycmF5KSxcbiAgICB2YWx1ZXNEaWZmZXIsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBUaGlzIHVzZWQgdG8gYmUgYSBoaWRlb3VzIGNvbmRpdGlvbmFsLCBidXQgaXQncyBicm9rZW4gdXAgaW50byBhIGhpZGVvdXMgZnVuY3Rpb24gaW5zdGVhZC5cbiAgICogaG9wZWZ1bGx5IHRoaXMgbWFrZXMgdGhpbmdzIGEgbGl0dGxlIG1vcmUgdW5kZXJzdGFuZGFibGUuXG4gICAqIC0gY2hlY2tzIGlmIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGRlZmluZWRcbiAgICogLSBpZiBzbywgYW5kIHRoZSBkZWZhdWx0IGlzIG5vdCBhbiBhcnJheTpcbiAgICogICAtIGVuc3VyZXMgdGhlIHR5cGVzIGFyZSB0aGUgc2FtZVxuICAgKiAgIC0gZW5zdXJlcyB0aGUgdmFsdWVzIGFyZSBlcXVhbFxuICAgKiAtIGlmIHNvLCBhbmQgdGhlIGRlZmF1bHQgaXMgYW4gYXJyYXk6XG4gICAqICAgLSBlbnN1cmVzIHRoZSBhcmdzIHZhbHVlIGlzIGFuIGFycmF5XG4gICAqICAgLSBlbnN1cmVzIHRoZSBhcmdzIHZhbHVlcyBkbyBub3QgZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgdmFsdWVzXG4gICAqIEB0eXBlIHsoZGVzdDogc3RyaW5nKSA9PiBib29sZWFufVxuICAgKi9cbiAgY29uc3QgaXNOb3REZWZhdWx0ID0gXy5vdmVyRXZlcnkoW1xuICAgIGRlZmF1bHRJc0RlZmluZWQsXG4gICAgXy5vdmVyU29tZShbXG4gICAgICB0eXBlc0RpZmZlcixcbiAgICAgIF8ub3ZlckV2ZXJ5KFtkZWZhdWx0VmFsdWVJc0FycmF5LCBhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXJdKSxcbiAgICAgIGRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzRGlmZmVyLFxuICAgIF0pLFxuICBdKTtcblxuICBjb25zdCBkZWZhdWx0c0Zyb21TY2hlbWEgPSBnZXREZWZhdWx0c0ZvclNjaGVtYSh0cnVlKTtcblxuICByZXR1cm4gXy5yZWR1Y2UoXG4gICAgXy5waWNrQnkoYXJncywgKF9fLCBrZXkpID0+IGlzTm90RGVmYXVsdChrZXkpKSxcbiAgICAvLyBleHBsb2RlcyB0aGUgZmxhdHRlbmVkIG9iamVjdCBiYWNrIGludG8gbmVzdGVkIG9uZVxuICAgIChhY2MsIHt2YWx1ZSwgYXJnU3BlY30pID0+IF8uc2V0KGFjYywgYXJnU3BlYy5kZXN0LCB2YWx1ZSksXG4gICAgLyoqIEB0eXBlIHtBcmdzfSAqLyAoe30pXG4gICk7XG59XG5cbi8qKlxuICogQ29tcGFjdHMgYW4gb2JqZWN0IGZvciB7QGxpbmsgc2hvd0NvbmZpZ306XG4gKiAxLiBSZW1vdmVzIGBzdWJjb21tYW5kYCBrZXkvdmFsdWVcbiAqIDIuIFJlbW92ZXMgYHVuZGVmaW5lZGAgdmFsdWVzXG4gKiAzLiBSZW1vdmVzIGVtcHR5IG9iamVjdHMgKGJ1dCBub3QgYGZhbHNlYCB2YWx1ZXMpXG4gKiBEb2VzIG5vdCBvcGVyYXRlIHJlY3Vyc2l2ZWx5LlxuICovXG5jb25zdCBjb21wYWN0Q29uZmlnID0gXy5wYXJ0aWFsKFxuICBfLm9taXRCeSxcbiAgXyxcbiAgKHZhbHVlLCBrZXkpID0+XG4gICAga2V5ID09PSAnc3ViY29tbWFuZCcgfHwgXy5pc1VuZGVmaW5lZCh2YWx1ZSkgfHwgKF8uaXNPYmplY3QodmFsdWUpICYmIF8uaXNFbXB0eSh2YWx1ZSkpXG4pO1xuXG4vKipcbiAqIFNob3dzIGEgYnJlYWtkb3duIG9mIHRoZSBjdXJyZW50IGNvbmZpZyBhZnRlciBDTEkgcGFyYW1zLCBjb25maWcgZmlsZSBsb2FkZWQgJiBkZWZhdWx0cyBhcHBsaWVkLlxuICpcbiAqIFRoZSBhY3R1YWwgc2hhcGUgb2YgYHByZUNvbmZpZ1BhcnNlZEFyZ3NgIGFuZCBgZGVmYXVsdHNgIGRvZXMgbm90IG1hdHRlciBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZnVuY3Rpb24sXG4gKiBidXQgaXQncyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgd2l0aCB2YWx1ZXMgb2YgdHlwZSB7QGxpbmsgUGFyc2VkQXJnc30gYW5kIGBEZWZhdWx0VmFsdWVzPHRydWU+YCwgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIEBwYXJhbSB7UGFydGlhbDxQYXJzZWRBcmdzPn0gbm9uRGVmYXVsdFByZUNvbmZpZ1BhcnNlZEFyZ3MgLSBQYXJzZWQgQ0xJIGFyZ3MgKG9yIHBhcmFtIHRvIGBpbml0KClgKSBiZWZvcmUgY29uZmlnICYgZGVmYXVsdHMgYXBwbGllZFxuICogQHBhcmFtIHtpbXBvcnQoJy4vY29uZmlnLWZpbGUnKS5SZWFkQ29uZmlnRmlsZVJlc3VsdH0gY29uZmlnUmVzdWx0IC0gUmVzdWx0IG9mIGF0dGVtcHRpbmcgdG8gbG9hZCBhIGNvbmZpZyBmaWxlLiAgX011c3RfIGJlIG5vcm1hbGl6ZWRcbiAqIEBwYXJhbSB7UGFydGlhbDxQYXJzZWRBcmdzPn0gZGVmYXVsdHMgLSBDb25maWd1cmF0aW9uIGRlZmF1bHRzIGZyb20gc2NoZW1hc1xuICogQHBhcmFtIHtQYXJzZWRBcmdzfSBwYXJzZWRBcmdzIC0gRW50aXJlIHBhcnNlZCBhcmdzIG9iamVjdFxuICovXG5mdW5jdGlvbiBzaG93Q29uZmlnKG5vbkRlZmF1bHRQcmVDb25maWdQYXJzZWRBcmdzLCBjb25maWdSZXN1bHQsIGRlZmF1bHRzLCBwYXJzZWRBcmdzKSB7XG4gIGNvbnNvbGUubG9nKCdBcHBpdW0gQ29uZmlndXJhdGlvblxcbicpO1xuICBjb25zb2xlLmxvZygnZnJvbSBkZWZhdWx0czpcXG4nKTtcbiAgY29uc29sZS5kaXIoY29tcGFjdENvbmZpZyhkZWZhdWx0cykpO1xuICBpZiAoY29uZmlnUmVzdWx0LmNvbmZpZykge1xuICAgIGNvbnNvbGUubG9nKGBcXG5mcm9tIGNvbmZpZyBmaWxlIGF0ICR7Y29uZmlnUmVzdWx0LmZpbGVwYXRofTpcXG5gKTtcbiAgICBjb25zb2xlLmRpcihjb21wYWN0Q29uZmlnKGNvbmZpZ1Jlc3VsdC5jb25maWcpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhgXFxuKG5vIGNvbmZpZ3VyYXRpb24gZmlsZSBsb2FkZWQpYCk7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShub25EZWZhdWx0UHJlQ29uZmlnUGFyc2VkQXJncykpIHtcbiAgICBjb25zb2xlLmxvZyhgXFxuKG5vIENMSSBwYXJhbWV0ZXJzIHByb3ZpZGVkKWApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCdcXG52aWEgQ0xJIG9yIGZ1bmN0aW9uIGNhbGw6XFxuJyk7XG4gICAgY29uc29sZS5kaXIoY29tcGFjdENvbmZpZyhub25EZWZhdWx0UHJlQ29uZmlnUGFyc2VkQXJncykpO1xuICB9XG4gIGNvbnNvbGUubG9nKCdcXG5maW5hbCBjb25maWd1cmF0aW9uOlxcbicpO1xuICBjb25zb2xlLmRpcihjb21wYWN0Q29uZmlnKHBhcnNlZEFyZ3MpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG1wRGlyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlVG1wRGlyKHRtcERpcikge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLm1rZGlycCh0bXBEaXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFdlIGNvdWxkIG5vdCBlbnN1cmUgdGhhdCB0aGUgdGVtcCBkaXIgeW91IHNwZWNpZmllZCBgICtcbiAgICAgICAgYCgke3RtcERpcn0pIGV4aXN0cy4gUGxlYXNlIG1ha2Ugc3VyZSBpdCdzIHdyaXRlYWJsZS5gXG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCByb290RGlyID0gZnMuZmluZFJvb3QoX19kaXJuYW1lKTtcblxuZXhwb3J0IHtcbiAgZ2V0QnVpbGRJbmZvLFxuICBjaGVja05vZGVPayxcbiAgc2hvd0J1aWxkSW5mbyxcbiAgd2Fybk5vZGVEZXByZWNhdGlvbnMsXG4gIHZhbGlkYXRlVG1wRGlyLFxuICBnZXROb25EZWZhdWx0U2VydmVyQXJncyxcbiAgZ2V0R2l0UmV2LFxuICBBUFBJVU1fVkVSLFxuICB1cGRhdGVCdWlsZEluZm8sXG4gIHNob3dDb25maWcsXG4gIHJvb3REaXIsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLlBhcnNlZEFyZ3N9IFBhcnNlZEFyZ3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkFyZ3N9IEFyZ3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vc2NoZW1hL2FyZy1zcGVjJykuQXJnU3BlY30gQXJnU3BlY1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLFdBQUEsQ0FBR0MsbUJBQUgsQ0FBdUJDLFNBQXZCLENBQW5COztBQUVBLE1BQU1DLFVBQVUsR0FBR0osVUFBVSxDQUFDSyxPQUE5Qjs7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBR04sVUFBVSxDQUFDTyxPQUFYLENBQW1CQyxJQUE1QztBQUNBLE1BQU1DLGVBQWUsR0FBR1QsVUFBVSxDQUFDTyxPQUFYLENBQW1CRyxHQUEzQztBQUVBLE1BQU1DLGFBQWEsR0FBRyxNQUF0QjtBQUNBLE1BQU1DLFVBQVUsR0FBSSxNQUFLQyxlQUFBLENBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFBRyxFQUExRDtBQUNBLE1BQU1DLFVBQVUsR0FBRyw0Q0FBbkI7QUFLQSxNQUFNQyxVQUFVLEdBQUc7RUFDakJYLE9BQU8sRUFBRUQ7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
289
+ /**
290
+ * @typedef {import('appium/types').ParsedArgs} ParsedArgs
291
+ * @typedef {import('appium/types').Args} Args
292
+ * @typedef {import('./schema/arg-spec').ArgSpec} ArgSpec
293
+ */
294
+ //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","names":["npmPackage","fs","readPackageJsonFrom","__dirname","APPIUM_VER","version","MIN_NODE_VERSION","engines","node","MIN_NPM_VERSION","npm","GIT_META_ROOT","GIT_BINARY","system","isWindows","GITHUB_API","BUILD_INFO","getNodeVersion","semver","coerce","process","getNpmVersion","stdout","exec","trim","updateBuildInfo","useGithubApiFallback","sha","getGitRev","buildTimestamp","getGitTimestamp","built","findGitRoot","findUp","cwd","rootDir","type","gitRoot","ign","axios","get","headers","data","object","commitSha","tagger","date","getBuildInfo","checkNodeOk","satisfies","Error","checkNpmOk","npmVersion","warnNodeDeprecations","showBuildInfo","console","log","JSON","stringify","getNonDefaultServerArgs","parsedArgs","flatten","args","argSpecs","getAllArgSpecs","flattened","_","reduce","values","acc","argSpec","has","dest","value","typesDiffer","defaultsFromSchema","defaultValueIsArray","isArray","argsValueIsArray","arraysDiffer","gt","size","difference","valuesDiffer","defaultIsDefined","isUndefined","argValueNotArrayOrArraysDiffer","overSome","negate","defaultValueNotArrayAndValuesDiffer","overEvery","isNotDefault","getDefaultsForSchema","pickBy","__","key","set","compactConfig","partial","omitBy","isObject","isEmpty","showConfig","nonDefaultPreConfigParsedArgs","configResult","defaults","dir","config","filepath","validateTmpDir","tmpDir","mkdirp","e","findRoot"],"sources":["../../lib/config.js"],"sourcesContent":["/* eslint-disable no-console */\nimport _ from 'lodash';\nimport {system, fs} from '@appium/support';\nimport axios from 'axios';\nimport {exec} from 'teen_process';\nimport semver from 'semver';\nimport findUp from 'find-up';\nimport {getDefaultsForSchema, getAllArgSpecs} from './schema/schema';\n\nconst npmPackage = fs.readPackageJsonFrom(__dirname);\n\nconst APPIUM_VER = npmPackage.version;\nconst MIN_NODE_VERSION = npmPackage.engines.node;\nconst MIN_NPM_VERSION = npmPackage.engines.npm;\n\nconst GIT_META_ROOT = '.git';\nconst GIT_BINARY = `git${system.isWindows() ? '.exe' : ''}`;\nconst GITHUB_API = 'https://api.github.com/repos/appium/appium';\n\n/**\n * @type {import('appium/types').BuildInfo}\n */\nconst BUILD_INFO = {\n version: APPIUM_VER,\n};\n\nfunction getNodeVersion() {\n return /** @type {import('semver').SemVer} */ (semver.coerce(process.version));\n}\n\n/**\n * Returns version of `npm`\n * @returns {Promise<string>}\n */\nasync function getNpmVersion() {\n const {stdout} = await exec(system.isWindows() ? 'npm.cmd' : 'npm', ['--version']);\n return stdout.trim();\n}\n\n/**\n * @param {boolean} [useGithubApiFallback]\n */\nasync function updateBuildInfo(useGithubApiFallback = false) {\n const sha = await getGitRev(useGithubApiFallback);\n if (!sha) {\n return;\n }\n BUILD_INFO['git-sha'] = sha;\n const buildTimestamp = await getGitTimestamp(sha, useGithubApiFallback);\n if (buildTimestamp) {\n BUILD_INFO.built = buildTimestamp;\n }\n}\n\n/**\n * Finds the Git metadata dir (see `GIT_META_ROOT`)\n *\n * This is needed because Appium cannot assume `package.json` and `.git` are in the same\n * directory. Monorepos, see?\n * @returns {Promise<string|undefined>} Path to dir or `undefined` if not found\n */\nasync function findGitRoot() {\n return await findUp(GIT_META_ROOT, {cwd: rootDir, type: 'directory'});\n}\n\n/**\n * @param {boolean} [useGithubApiFallback]\n * @returns {Promise<string?>}\n */\nasync function getGitRev(useGithubApiFallback = false) {\n const gitRoot = await findGitRoot();\n if (gitRoot) {\n try {\n const {stdout} = await exec(GIT_BINARY, ['rev-parse', 'HEAD'], {\n cwd: gitRoot,\n });\n return stdout.trim();\n } catch (ign) {}\n }\n\n if (!useGithubApiFallback) {\n return null;\n }\n\n // If the package folder is not a valid git repository\n // then fetch the corresponding tag info from GitHub\n try {\n return (\n await axios.get(`${GITHUB_API}/git/refs/tags/appium@${APPIUM_VER}`, {\n headers: {\n 'User-Agent': `Appium ${APPIUM_VER}`,\n },\n })\n ).data?.object?.sha;\n } catch (ign) {}\n return null;\n}\n\n/**\n * @param {string} commitSha\n * @param {boolean} [useGithubApiFallback]\n * @returns {Promise<string?>}\n */\nasync function getGitTimestamp(commitSha, useGithubApiFallback = false) {\n const gitRoot = await findGitRoot();\n if (gitRoot) {\n try {\n const {stdout} = await exec(GIT_BINARY, ['show', '-s', '--format=%ci', commitSha], {\n cwd: gitRoot,\n });\n return stdout.trim();\n } catch (ign) {}\n }\n\n if (!useGithubApiFallback) {\n return null;\n }\n\n try {\n return (\n await axios.get(`${GITHUB_API}/git/tags/${commitSha}`, {\n headers: {\n 'User-Agent': `Appium ${APPIUM_VER}`,\n },\n })\n ).data?.tagger?.date;\n } catch (ign) {}\n return null;\n}\n\n/**\n * Mutable object containing Appium build information. By default it\n * only contains the Appium version, but is updated with the build timestamp\n * and git commit hash asynchronously as soon as `updateBuildInfo` is called\n * and succeeds.\n * @returns {import('appium/types').BuildInfo}\n */\nfunction getBuildInfo() {\n return BUILD_INFO;\n}\n\nfunction checkNodeOk() {\n const version = getNodeVersion();\n if (!semver.satisfies(version, MIN_NODE_VERSION)) {\n throw new Error(\n `Node version must be at least ${MIN_NODE_VERSION}; current is ${version.version}`\n );\n }\n}\n\nexport async function checkNpmOk() {\n const npmVersion = await getNpmVersion();\n if (!semver.satisfies(npmVersion, MIN_NPM_VERSION)) {\n throw new Error(\n `npm version must be at least ${MIN_NPM_VERSION}; current is ${npmVersion}. Run \"npm install -g npm\" to upgrade.`\n );\n }\n}\n\nfunction warnNodeDeprecations() {\n /**\n * Uncomment this section to get node version deprecation warnings\n * Also add test cases to config-specs.js to cover the cases added\n **/\n // const version = getNodeVersion();\n // if (version.major < 8) {\n // logger.warn(`Appium support for versions of node < ${version.major} has been ` +\n // 'deprecated and will be removed in a future version. Please ' +\n // 'upgrade!');\n // }\n}\n\nasync function showBuildInfo() {\n await updateBuildInfo(true);\n console.log(JSON.stringify(getBuildInfo())); // eslint-disable-line no-console\n}\n\n/**\n * Returns k/v pairs of server arguments which are _not_ the defaults.\n * @param {Args} parsedArgs\n * @returns {Args}\n */\nfunction getNonDefaultServerArgs(parsedArgs) {\n /**\n * Flattens parsed args into a single level object for comparison with\n * flattened defaults across server args and extension args.\n * @param {Args} args\n * @returns {Record<string, { value: any, argSpec: ArgSpec }>}\n */\n const flatten = (args) => {\n const argSpecs = getAllArgSpecs();\n const flattened = _.reduce(\n [...argSpecs.values()],\n (acc, argSpec) => {\n if (_.has(args, argSpec.dest)) {\n acc[argSpec.dest] = {value: _.get(args, argSpec.dest), argSpec};\n }\n return acc;\n },\n /** @type {Record<string, { value: any, argSpec: ArgSpec }>} */ ({})\n );\n\n return flattened;\n };\n\n const args = flatten(parsedArgs);\n\n // hopefully these function names are descriptive enough\n const typesDiffer = /** @param {string} dest */ (dest) =>\n typeof args[dest].value !== typeof defaultsFromSchema[dest];\n\n const defaultValueIsArray = /** @param {string} dest */ (dest) =>\n _.isArray(defaultsFromSchema[dest]);\n\n const argsValueIsArray = /** @param {string} dest */ (dest) => _.isArray(args[dest].value);\n\n const arraysDiffer = /** @param {string} dest */ (dest) =>\n _.gt(_.size(_.difference(args[dest].value, defaultsFromSchema[dest])), 0);\n\n const valuesDiffer = /** @param {string} dest */ (dest) =>\n args[dest].value !== defaultsFromSchema[dest];\n\n const defaultIsDefined = /** @param {string} dest */ (dest) =>\n !_.isUndefined(defaultsFromSchema[dest]);\n\n // note that `_.overEvery` is like an \"AND\", and `_.overSome` is like an \"OR\"\n\n const argValueNotArrayOrArraysDiffer = _.overSome([_.negate(argsValueIsArray), arraysDiffer]);\n\n const defaultValueNotArrayAndValuesDiffer = _.overEvery([\n _.negate(defaultValueIsArray),\n valuesDiffer,\n ]);\n\n /**\n * This used to be a hideous conditional, but it's broken up into a hideous function instead.\n * hopefully this makes things a little more understandable.\n * - checks if the default value is defined\n * - if so, and the default is not an array:\n * - ensures the types are the same\n * - ensures the values are equal\n * - if so, and the default is an array:\n * - ensures the args value is an array\n * - ensures the args values do not differ from the default values\n * @type {(dest: string) => boolean}\n */\n const isNotDefault = _.overEvery([\n defaultIsDefined,\n _.overSome([\n typesDiffer,\n _.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]),\n defaultValueNotArrayAndValuesDiffer,\n ]),\n ]);\n\n const defaultsFromSchema = getDefaultsForSchema(true);\n\n return _.reduce(\n _.pickBy(args, (__, key) => isNotDefault(key)),\n // explodes the flattened object back into nested one\n (acc, {value, argSpec}) => _.set(acc, argSpec.dest, value),\n /** @type {Args} */ ({})\n );\n}\n\n/**\n * Compacts an object for {@link showConfig}:\n * 1. Removes `subcommand` key/value\n * 2. Removes `undefined` values\n * 3. Removes empty objects (but not `false` values)\n * Does not operate recursively.\n */\nconst compactConfig = _.partial(\n _.omitBy,\n _,\n (value, key) =>\n key === 'subcommand' || _.isUndefined(value) || (_.isObject(value) && _.isEmpty(value))\n);\n\n/**\n * Shows a breakdown of the current config after CLI params, config file loaded & defaults applied.\n *\n * The actual shape of `preConfigParsedArgs` and `defaults` does not matter for the purposes of this function,\n * but it's intended to be called with values of type {@link ParsedArgs} and `DefaultValues<true>`, respectively.\n *\n * @param {Partial<ParsedArgs>} nonDefaultPreConfigParsedArgs - Parsed CLI args (or param to `init()`) before config & defaults applied\n * @param {import('./config-file').ReadConfigFileResult} configResult - Result of attempting to load a config file. _Must_ be normalized\n * @param {Partial<ParsedArgs>} defaults - Configuration defaults from schemas\n * @param {ParsedArgs} parsedArgs - Entire parsed args object\n */\nfunction showConfig(nonDefaultPreConfigParsedArgs, configResult, defaults, parsedArgs) {\n console.log('Appium Configuration\\n');\n console.log('from defaults:\\n');\n console.dir(compactConfig(defaults));\n if (configResult.config) {\n console.log(`\\nfrom config file at ${configResult.filepath}:\\n`);\n console.dir(compactConfig(configResult.config));\n } else {\n console.log(`\\n(no configuration file loaded)`);\n }\n if (_.isEmpty(nonDefaultPreConfigParsedArgs)) {\n console.log(`\\n(no CLI parameters provided)`);\n } else {\n console.log('\\nvia CLI or function call:\\n');\n console.dir(compactConfig(nonDefaultPreConfigParsedArgs));\n }\n console.log('\\nfinal configuration:\\n');\n console.dir(compactConfig(parsedArgs));\n}\n\n/**\n * @param {string} tmpDir\n */\nasync function validateTmpDir(tmpDir) {\n try {\n await fs.mkdirp(tmpDir);\n } catch (e) {\n throw new Error(\n `We could not ensure that the temp dir you specified ` +\n `(${tmpDir}) exists. Please make sure it's writeable.`\n );\n }\n}\n\nconst rootDir = fs.findRoot(__dirname);\n\nexport {\n getBuildInfo,\n checkNodeOk,\n showBuildInfo,\n warnNodeDeprecations,\n validateTmpDir,\n getNonDefaultServerArgs,\n getGitRev,\n APPIUM_VER,\n updateBuildInfo,\n showConfig,\n rootDir,\n};\n\n/**\n * @typedef {import('appium/types').ParsedArgs} ParsedArgs\n * @typedef {import('appium/types').Args} Args\n * @typedef {import('./schema/arg-spec').ArgSpec} ArgSpec\n */\n"],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.js"],"names":[],"mappings":"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"}