appium 2.0.0-beta.45 → 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.
- package/README.md +145 -44
- package/build/lib/appium.d.ts +3 -103
- package/build/lib/appium.d.ts.map +1 -1
- package/build/lib/appium.js +679 -549
- package/build/lib/appium.js.map +1 -1
- package/build/lib/cli/args.js +247 -127
- package/build/lib/cli/args.js.map +1 -1
- package/build/lib/cli/driver-command.js +63 -88
- package/build/lib/cli/driver-command.js.map +1 -1
- package/build/lib/cli/extension-command.d.ts +32 -23
- package/build/lib/cli/extension-command.d.ts.map +1 -1
- package/build/lib/cli/extension-command.js +730 -512
- package/build/lib/cli/extension-command.js.map +1 -1
- package/build/lib/cli/extension.d.ts +5 -4
- package/build/lib/cli/extension.d.ts.map +1 -1
- package/build/lib/cli/extension.js +68 -65
- package/build/lib/cli/extension.js.map +1 -1
- package/build/lib/cli/parser.d.ts +3 -3
- package/build/lib/cli/parser.d.ts.map +1 -1
- package/build/lib/cli/parser.js +234 -192
- package/build/lib/cli/parser.js.map +1 -1
- package/build/lib/cli/plugin-command.js +58 -87
- package/build/lib/cli/plugin-command.js.map +1 -1
- package/build/lib/cli/utils.js +66 -69
- package/build/lib/cli/utils.js.map +1 -1
- package/build/lib/config-file.d.ts.map +1 -1
- package/build/lib/config-file.js +189 -120
- package/build/lib/config-file.js.map +1 -1
- package/build/lib/config.d.ts.map +1 -1
- package/build/lib/config.js +254 -213
- package/build/lib/config.js.map +1 -1
- package/build/lib/constants.d.ts +5 -5
- package/build/lib/constants.d.ts.map +1 -1
- package/build/lib/constants.js +64 -59
- package/build/lib/constants.js.map +1 -1
- package/build/lib/extension/driver-config.js +199 -164
- package/build/lib/extension/driver-config.js.map +1 -1
- package/build/lib/extension/extension-config.d.ts +18 -16
- package/build/lib/extension/extension-config.d.ts.map +1 -1
- package/build/lib/extension/extension-config.js +523 -396
- package/build/lib/extension/extension-config.js.map +1 -1
- package/build/lib/extension/index.js +98 -68
- package/build/lib/extension/index.js.map +1 -1
- package/build/lib/extension/manifest-migrations.d.ts +27 -0
- package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
- package/build/lib/extension/manifest-migrations.js +99 -0
- package/build/lib/extension/manifest-migrations.js.map +1 -0
- package/build/lib/extension/manifest.d.ts +7 -56
- package/build/lib/extension/manifest.d.ts.map +1 -1
- package/build/lib/extension/manifest.js +432 -240
- package/build/lib/extension/manifest.js.map +1 -1
- package/build/lib/extension/package-changed.js +57 -61
- package/build/lib/extension/package-changed.js.map +1 -1
- package/build/lib/extension/plugin-config.d.ts +2 -3
- package/build/lib/extension/plugin-config.d.ts.map +1 -1
- package/build/lib/extension/plugin-config.js +94 -70
- package/build/lib/extension/plugin-config.js.map +1 -1
- package/build/lib/grid-register.js +119 -137
- package/build/lib/grid-register.js.map +1 -1
- package/build/lib/logger.d.ts +1 -1
- package/build/lib/logger.d.ts.map +1 -1
- package/build/lib/logger.js +5 -15
- package/build/lib/logger.js.map +1 -1
- package/build/lib/logsink.d.ts.map +1 -1
- package/build/lib/logsink.js +189 -183
- package/build/lib/logsink.js.map +1 -1
- package/build/lib/main.d.ts +19 -12
- package/build/lib/main.d.ts.map +1 -1
- package/build/lib/main.js +330 -304
- package/build/lib/main.js.map +1 -1
- package/build/lib/schema/arg-spec.js +153 -108
- package/build/lib/schema/arg-spec.js.map +1 -1
- package/build/lib/schema/cli-args.js +203 -164
- package/build/lib/schema/cli-args.js.map +1 -1
- package/build/lib/schema/cli-transformers.js +117 -72
- package/build/lib/schema/cli-transformers.js.map +1 -1
- package/build/lib/schema/index.js +17 -32
- package/build/lib/schema/index.js.map +1 -1
- package/build/lib/schema/keywords.js +125 -67
- package/build/lib/schema/keywords.js.map +1 -1
- package/build/lib/schema/schema.d.ts.map +1 -1
- package/build/lib/schema/schema.js +582 -417
- package/build/lib/schema/schema.js.map +1 -1
- package/build/lib/utils.d.ts +41 -255
- package/build/lib/utils.d.ts.map +1 -1
- package/build/lib/utils.js +342 -193
- package/build/lib/utils.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/cli.d.ts +45 -34
- package/build/types/cli.d.ts.map +1 -1
- package/build/types/cli.js +3 -0
- package/build/types/cli.js.map +1 -0
- package/build/types/index.d.ts +1 -2
- package/build/types/index.d.ts.map +1 -1
- package/build/types/index.js +19 -0
- package/build/types/index.js.map +1 -0
- package/build/types/manifest/base.d.ts +135 -0
- package/build/types/manifest/base.d.ts.map +1 -0
- package/build/types/manifest/base.js +3 -0
- package/build/types/manifest/base.js.map +1 -0
- package/build/types/manifest/index.d.ts +19 -0
- package/build/types/manifest/index.d.ts.map +1 -0
- package/build/types/manifest/index.js +40 -0
- package/build/types/manifest/index.js.map +1 -0
- package/build/types/manifest/v3.d.ts +139 -0
- package/build/types/manifest/v3.d.ts.map +1 -0
- package/build/types/manifest/v3.js +3 -0
- package/build/types/manifest/v3.js.map +1 -0
- package/lib/appium.js +1 -1
- package/lib/cli/args.js +1 -1
- package/lib/cli/extension-command.js +116 -61
- package/lib/cli/extension.js +9 -8
- package/lib/cli/parser.js +2 -2
- package/lib/config-file.js +2 -3
- package/lib/config.js +3 -2
- package/lib/constants.js +6 -5
- package/lib/extension/extension-config.js +24 -25
- package/lib/extension/manifest-migrations.js +99 -0
- package/lib/extension/manifest.js +79 -72
- package/lib/extension/plugin-config.js +1 -2
- package/lib/logsink.js +26 -5
- package/lib/main.js +58 -50
- package/lib/schema/schema.js +6 -1
- package/lib/utils.js +62 -0
- package/package.json +23 -24
- package/scripts/autoinstall-extensions.js +78 -26
- package/types/cli.ts +81 -42
- package/types/index.ts +1 -2
- package/types/manifest/README.md +30 -0
- package/types/manifest/base.ts +158 -0
- package/types/manifest/index.ts +27 -0
- package/types/manifest/v3.ts +161 -0
- package/build/types/appium-manifest.d.ts +0 -59
- package/build/types/appium-manifest.d.ts.map +0 -1
- package/build/types/extension-manifest.d.ts +0 -55
- package/build/types/extension-manifest.d.ts.map +0 -1
- package/types/appium-manifest.ts +0 -73
- package/types/extension-manifest.ts +0 -64
package/build/lib/config.js
CHANGED
|
@@ -1,253 +1,294 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.APPIUM_VER = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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${
|
|
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
|
-
|
|
27
|
+
version: APPIUM_VER,
|
|
48
28
|
};
|
|
49
|
-
|
|
50
29
|
function getNodeVersion() {
|
|
51
|
-
|
|
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
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
|
|
133
|
+
return BUILD_INFO;
|
|
147
134
|
}
|
|
148
|
-
|
|
135
|
+
exports.getBuildInfo = getBuildInfo;
|
|
149
136
|
function checkNodeOk() {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
|
|
169
|
-
|
|
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
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
-
|
|
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
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
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
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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 =
|
|
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
|
package/build/lib/config.js.map
CHANGED
|
@@ -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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"}
|