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/cli/parser.js
CHANGED
|
@@ -1,204 +1,246 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
require("
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const EXTRA_ARGS = 'extraArgs';
|
|
30
|
-
exports.EXTRA_ARGS = EXTRA_ARGS;
|
|
31
|
-
const NON_SERVER_ARGS = Object.freeze(new Set([_constants.DRIVER_TYPE, _constants.PLUGIN_TYPE, _constants.SERVER_SUBCOMMAND, '-h', '--help', '-v', '--version']));
|
|
32
|
-
|
|
33
|
-
const version = _support.fs.readPackageJsonFrom(_config.rootDir).version;
|
|
34
|
-
|
|
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.ArgParser = exports.getParser = exports.EXTRA_ARGS = void 0;
|
|
7
|
+
const support_1 = require("@appium/support");
|
|
8
|
+
const argparse_1 = require("argparse");
|
|
9
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const constants_1 = require("../constants");
|
|
12
|
+
const schema_1 = require("../schema");
|
|
13
|
+
const config_1 = require("../config");
|
|
14
|
+
const args_1 = require("./args");
|
|
15
|
+
exports.EXTRA_ARGS = 'extraArgs';
|
|
16
|
+
/**
|
|
17
|
+
* If the parsed args do not contain any of these values, then we
|
|
18
|
+
* will automatially inject the `server` subcommand.
|
|
19
|
+
*/
|
|
20
|
+
const NON_SERVER_ARGS = Object.freeze(new Set([constants_1.DRIVER_TYPE, constants_1.PLUGIN_TYPE, constants_1.SERVER_SUBCOMMAND, '-h', '--help', '-v', '--version']));
|
|
21
|
+
const version = support_1.fs.readPackageJsonFrom(config_1.rootDir).version;
|
|
22
|
+
/**
|
|
23
|
+
* A wrapper around `argparse`
|
|
24
|
+
*
|
|
25
|
+
* - Handles instantiation, configuration, and monkeypatching of an
|
|
26
|
+
* `ArgumentParser` instance for Appium server and its extensions
|
|
27
|
+
* - Handles error conditions, messages, and exit behavior
|
|
28
|
+
*/
|
|
35
29
|
class ArgParser {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
30
|
+
/**
|
|
31
|
+
* @param {boolean} [debug] - If true, throw instead of exit on error.
|
|
32
|
+
*/
|
|
33
|
+
constructor(debug = false) {
|
|
34
|
+
const prog = process.argv[1] ? path_1.default.basename(process.argv[1]) : 'appium';
|
|
35
|
+
const parser = new argparse_1.ArgumentParser({
|
|
36
|
+
add_help: true,
|
|
37
|
+
description: 'A webdriver-compatible server that facilitates automation of web, mobile, and other types of apps across various platforms.',
|
|
38
|
+
prog,
|
|
39
|
+
});
|
|
40
|
+
ArgParser._patchExit(parser);
|
|
41
|
+
/**
|
|
42
|
+
* Program name (typically `appium`)
|
|
43
|
+
* @type {string}
|
|
44
|
+
*/
|
|
45
|
+
this.prog = prog;
|
|
46
|
+
/**
|
|
47
|
+
* If `true`, throw an error on parse failure instead of printing help
|
|
48
|
+
* @type {boolean}
|
|
49
|
+
*/
|
|
50
|
+
this.debug = debug;
|
|
51
|
+
/**
|
|
52
|
+
* Wrapped `ArgumentParser` instance
|
|
53
|
+
* @type {ArgumentParser}
|
|
54
|
+
*/
|
|
55
|
+
this.parser = parser;
|
|
56
|
+
parser.add_argument('-v', '--version', {
|
|
57
|
+
action: 'version',
|
|
58
|
+
version,
|
|
59
|
+
});
|
|
60
|
+
const subParsers = parser.add_subparsers({ dest: 'subcommand' });
|
|
61
|
+
// add the 'server' subcommand, and store the raw arguments on the parser
|
|
62
|
+
// object as a way for other parts of the code to work with the arguments
|
|
63
|
+
// conceptually rather than just through argparse
|
|
64
|
+
const serverArgs = ArgParser._addServerToParser(subParsers);
|
|
65
|
+
this.rawArgs = serverArgs;
|
|
66
|
+
// add the 'driver' and 'plugin' subcommands
|
|
67
|
+
ArgParser._addExtensionCommandsToParser(subParsers);
|
|
68
|
+
// backwards compatibility / drop-in wrapper
|
|
69
|
+
/**
|
|
70
|
+
* @type {ArgParser['parseArgs']}
|
|
71
|
+
*/
|
|
72
|
+
this.parse_args = this.parseArgs;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Parse arguments from the command line.
|
|
76
|
+
*
|
|
77
|
+
* If no subcommand is passed in, this method will inject the `server` subcommand.
|
|
78
|
+
*
|
|
79
|
+
* `ArgParser.prototype.parse_args` is an alias of this method.
|
|
80
|
+
* @template {import('appium/types').CliCommand} [Cmd=import('appium/types').ServerCommand]
|
|
81
|
+
* @param {string[]} [args] - Array of arguments, ostensibly from `process.argv`. Gathers args from `process.argv` if not provided.
|
|
82
|
+
* @returns {import('appium/types').Args<Cmd>} - The parsed arguments
|
|
83
|
+
*/
|
|
84
|
+
parseArgs(args = process.argv.slice(2)) {
|
|
85
|
+
if (!NON_SERVER_ARGS.has(args[0])) {
|
|
86
|
+
args.unshift(constants_1.SERVER_SUBCOMMAND);
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const parsed = this.parser.parse_known_args(args);
|
|
90
|
+
const [knownArgs, unknownArgs] = parsed;
|
|
91
|
+
if (unknownArgs?.length &&
|
|
92
|
+
(knownArgs.driverCommand === 'run' || knownArgs.pluginCommand === 'run')) {
|
|
93
|
+
return ArgParser._transformParsedArgs(knownArgs, unknownArgs);
|
|
94
|
+
}
|
|
95
|
+
else if (unknownArgs?.length) {
|
|
96
|
+
throw new Error(`[ERROR] Unrecognized arguments: ${unknownArgs.join(' ')}`);
|
|
97
|
+
}
|
|
98
|
+
return ArgParser._transformParsedArgs(knownArgs);
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
if (this.debug) {
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
// this isn't tested via unit tests (we use `debug: true`) so may escape coverage.
|
|
105
|
+
/* istanbul ignore next */
|
|
106
|
+
{
|
|
107
|
+
// eslint-disable-next-line no-console
|
|
108
|
+
console.error(); // need an extra space since argparse prints usage.
|
|
109
|
+
// eslint-disable-next-line no-console
|
|
110
|
+
console.error(err.message);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
69
114
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Given an object full of arguments as returned by `argparser.parse_args`,
|
|
117
|
+
* expand the ones for extensions into a nested object structure and rename
|
|
118
|
+
* keys to match the intended destination.
|
|
119
|
+
*
|
|
120
|
+
* E.g., `{'driver-foo-bar': baz}` becomes `{driver: {foo: {bar: 'baz'}}}`
|
|
121
|
+
* @param {object} args
|
|
122
|
+
* @param {string[]} [unknownArgs]
|
|
123
|
+
* @returns {object}
|
|
124
|
+
*/
|
|
125
|
+
static _transformParsedArgs(args, unknownArgs = []) {
|
|
126
|
+
const result = lodash_1.default.reduce(args, (unpacked, value, key) => {
|
|
127
|
+
if (!lodash_1.default.isUndefined(value) && (0, schema_1.hasArgSpec)(key)) {
|
|
128
|
+
const { dest } = /** @type {import('../schema/arg-spec').ArgSpec} */ ((0, schema_1.getArgSpec)(key));
|
|
129
|
+
lodash_1.default.set(unpacked, dest, value);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// this could be anything that _isn't_ a server arg
|
|
133
|
+
unpacked[key] = value;
|
|
134
|
+
}
|
|
135
|
+
return unpacked;
|
|
136
|
+
}, {});
|
|
137
|
+
result[exports.EXTRA_ARGS] = unknownArgs;
|
|
138
|
+
return result;
|
|
92
139
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
unpacked[key] = value;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return unpacked;
|
|
108
|
-
}, {});
|
|
109
|
-
|
|
110
|
-
result[EXTRA_ARGS] = unknownArgs;
|
|
111
|
-
return result;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
static _patchExit(parser) {
|
|
115
|
-
parser.exit = (code, msg) => {
|
|
116
|
-
if (code) {
|
|
117
|
-
throw new Error(msg);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
process.exit();
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
static _addServerToParser(subParser) {
|
|
125
|
-
const serverParser = subParser.add_parser('server', {
|
|
126
|
-
add_help: true,
|
|
127
|
-
help: 'Run an Appium server'
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
ArgParser._patchExit(serverParser);
|
|
131
|
-
|
|
132
|
-
const serverArgs = (0, _args.getServerArgs)();
|
|
133
|
-
|
|
134
|
-
for (const [flagsOrNames, opts] of serverArgs) {
|
|
135
|
-
serverParser.add_argument(...flagsOrNames, { ...opts
|
|
136
|
-
});
|
|
140
|
+
/**
|
|
141
|
+
* Patches the `exit()` method of the parser to throw an error, so we can handle it manually.
|
|
142
|
+
* @param {ArgumentParser} parser
|
|
143
|
+
*/
|
|
144
|
+
static _patchExit(parser) {
|
|
145
|
+
parser.exit = (code, msg) => {
|
|
146
|
+
if (code) {
|
|
147
|
+
throw new Error(msg);
|
|
148
|
+
}
|
|
149
|
+
process.exit();
|
|
150
|
+
};
|
|
137
151
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
ArgParser._patchExit(extParser);
|
|
150
|
-
|
|
151
|
-
const extSubParsers = extParser.add_subparsers({
|
|
152
|
-
dest: `${type}Command`
|
|
153
|
-
});
|
|
154
|
-
const extensionArgs = (0, _args.getExtensionArgs)();
|
|
155
|
-
const parserSpecs = [{
|
|
156
|
-
command: 'list',
|
|
157
|
-
args: extensionArgs[type].list,
|
|
158
|
-
help: `List available and installed ${type}s`
|
|
159
|
-
}, {
|
|
160
|
-
command: 'install',
|
|
161
|
-
args: extensionArgs[type].install,
|
|
162
|
-
help: `Install a ${type}`
|
|
163
|
-
}, {
|
|
164
|
-
command: 'uninstall',
|
|
165
|
-
args: extensionArgs[type].uninstall,
|
|
166
|
-
help: `Uninstall a ${type}`
|
|
167
|
-
}, {
|
|
168
|
-
command: 'update',
|
|
169
|
-
args: extensionArgs[type].update,
|
|
170
|
-
help: `Update installed ${type}s to the latest version`
|
|
171
|
-
}, {
|
|
172
|
-
command: 'run',
|
|
173
|
-
args: extensionArgs[type].run,
|
|
174
|
-
help: `Run a script (defined inside the ${type}'s package.json under the ` + `“scripts” field inside the “appium” field) from an installed ${type}`
|
|
175
|
-
}];
|
|
176
|
-
|
|
177
|
-
for (const {
|
|
178
|
-
command,
|
|
179
|
-
args,
|
|
180
|
-
help
|
|
181
|
-
} of parserSpecs) {
|
|
182
|
-
const parser = extSubParsers.add_parser(command, {
|
|
183
|
-
help
|
|
152
|
+
/**
|
|
153
|
+
*
|
|
154
|
+
* @param {import('argparse').SubParser} subParser
|
|
155
|
+
* @returns {import('./args').ArgumentDefinitions}
|
|
156
|
+
*/
|
|
157
|
+
static _addServerToParser(subParser) {
|
|
158
|
+
const serverParser = subParser.add_parser('server', {
|
|
159
|
+
add_help: true,
|
|
160
|
+
help: 'Run an Appium server',
|
|
184
161
|
});
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
162
|
+
ArgParser._patchExit(serverParser);
|
|
163
|
+
const serverArgs = (0, args_1.getServerArgs)();
|
|
164
|
+
for (const [flagsOrNames, opts] of serverArgs) {
|
|
165
|
+
// TS doesn't like the spread operator here.
|
|
166
|
+
// @ts-ignore
|
|
167
|
+
serverParser.add_argument(...flagsOrNames, { ...opts });
|
|
168
|
+
}
|
|
169
|
+
return serverArgs;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Adds extension sub-sub-commands to `driver`/`plugin` subcommands
|
|
173
|
+
* @param {import('argparse').SubParser} subParsers
|
|
174
|
+
*/
|
|
175
|
+
static _addExtensionCommandsToParser(subParsers) {
|
|
176
|
+
for (const type of /** @type {[DriverType, PluginType]} */ ([constants_1.DRIVER_TYPE, constants_1.PLUGIN_TYPE])) {
|
|
177
|
+
const extParser = subParsers.add_parser(type, {
|
|
178
|
+
add_help: true,
|
|
179
|
+
help: `Access the ${type} management CLI commands`,
|
|
180
|
+
});
|
|
181
|
+
ArgParser._patchExit(extParser);
|
|
182
|
+
const extSubParsers = extParser.add_subparsers({
|
|
183
|
+
dest: `${type}Command`,
|
|
184
|
+
});
|
|
185
|
+
const extensionArgs = (0, args_1.getExtensionArgs)();
|
|
186
|
+
/**
|
|
187
|
+
* @type { {command: import('appium/types').CliExtensionSubcommand, args: import('./args').ArgumentDefinitions, help: string}[] }
|
|
188
|
+
*/
|
|
189
|
+
const parserSpecs = [
|
|
190
|
+
{
|
|
191
|
+
command: 'list',
|
|
192
|
+
args: extensionArgs[type].list,
|
|
193
|
+
help: `List available and installed ${type}s`,
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
command: 'install',
|
|
197
|
+
args: extensionArgs[type].install,
|
|
198
|
+
help: `Install a ${type}`,
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
command: 'uninstall',
|
|
202
|
+
args: extensionArgs[type].uninstall,
|
|
203
|
+
help: `Uninstall a ${type}`,
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
command: 'update',
|
|
207
|
+
args: extensionArgs[type].update,
|
|
208
|
+
help: `Update installed ${type}s to the latest version`,
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
command: 'run',
|
|
212
|
+
args: extensionArgs[type].run,
|
|
213
|
+
help: `Run a script (defined inside the ${type}'s package.json under the ` +
|
|
214
|
+
`“scripts” field inside the “appium” field) from an installed ${type}`,
|
|
215
|
+
},
|
|
216
|
+
];
|
|
217
|
+
for (const { command, args, help } of parserSpecs) {
|
|
218
|
+
const parser = extSubParsers.add_parser(command, { help });
|
|
219
|
+
ArgParser._patchExit(parser);
|
|
220
|
+
for (const [flagsOrNames, opts] of args) {
|
|
221
|
+
// add_argument mutates params so make sure to send in copies instead
|
|
222
|
+
// @ts-ignore
|
|
223
|
+
parser.add_argument(...flagsOrNames, { ...opts });
|
|
224
|
+
}
|
|
225
|
+
}
|
|
191
226
|
}
|
|
192
|
-
}
|
|
193
227
|
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
228
|
}
|
|
197
|
-
|
|
198
229
|
exports.ArgParser = ArgParser;
|
|
199
|
-
|
|
230
|
+
/**
|
|
231
|
+
* Creates a {@link ArgParser} instance; finalizes the config schema.
|
|
232
|
+
*
|
|
233
|
+
* @constructs ArgParser
|
|
234
|
+
* @param {boolean} [debug] - If `true`, throw instead of exit upon parsing error
|
|
235
|
+
* @returns {ArgParser}
|
|
236
|
+
*/
|
|
200
237
|
function getParser(debug) {
|
|
201
|
-
|
|
202
|
-
|
|
238
|
+
(0, schema_1.finalizeSchema)();
|
|
239
|
+
return new ArgParser(debug);
|
|
203
240
|
}
|
|
204
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFWFRSQV9BUkdTIiwiTk9OX1NFUlZFUl9BUkdTIiwiT2JqZWN0IiwiZnJlZXplIiwiU2V0IiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsIlNFUlZFUl9TVUJDT01NQU5EIiwidmVyc2lvbiIsImZzIiwicmVhZFBhY2thZ2VKc29uRnJvbSIsInJvb3REaXIiLCJBcmdQYXJzZXIiLCJjb25zdHJ1Y3RvciIsImRlYnVnIiwicHJvZyIsInByb2Nlc3MiLCJhcmd2IiwicGF0aCIsImJhc2VuYW1lIiwicGFyc2VyIiwiQXJndW1lbnRQYXJzZXIiLCJhZGRfaGVscCIsImRlc2NyaXB0aW9uIiwiX3BhdGNoRXhpdCIsImFkZF9hcmd1bWVudCIsImFjdGlvbiIsInN1YlBhcnNlcnMiLCJhZGRfc3VicGFyc2VycyIsImRlc3QiLCJzZXJ2ZXJBcmdzIiwiX2FkZFNlcnZlclRvUGFyc2VyIiwicmF3QXJncyIsIl9hZGRFeHRlbnNpb25Db21tYW5kc1RvUGFyc2VyIiwicGFyc2VfYXJncyIsInBhcnNlQXJncyIsImFyZ3MiLCJzbGljZSIsImhhcyIsInVuc2hpZnQiLCJwYXJzZWQiLCJwYXJzZV9rbm93bl9hcmdzIiwia25vd25BcmdzIiwidW5rbm93bkFyZ3MiLCJsZW5ndGgiLCJkcml2ZXJDb21tYW5kIiwicGx1Z2luQ29tbWFuZCIsIl90cmFuc2Zvcm1QYXJzZWRBcmdzIiwiRXJyb3IiLCJqb2luIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwibWVzc2FnZSIsImV4aXQiLCJyZXN1bHQiLCJfIiwicmVkdWNlIiwidW5wYWNrZWQiLCJ2YWx1ZSIsImtleSIsImlzVW5kZWZpbmVkIiwiaGFzQXJnU3BlYyIsImdldEFyZ1NwZWMiLCJzZXQiLCJjb2RlIiwibXNnIiwic3ViUGFyc2VyIiwic2VydmVyUGFyc2VyIiwiYWRkX3BhcnNlciIsImhlbHAiLCJnZXRTZXJ2ZXJBcmdzIiwiZmxhZ3NPck5hbWVzIiwib3B0cyIsInR5cGUiLCJleHRQYXJzZXIiLCJleHRTdWJQYXJzZXJzIiwiZXh0ZW5zaW9uQXJncyIsImdldEV4dGVuc2lvbkFyZ3MiLCJwYXJzZXJTcGVjcyIsImNvbW1hbmQiLCJsaXN0IiwiaW5zdGFsbCIsInVuaW5zdGFsbCIsInVwZGF0ZSIsInJ1biIsImdldFBhcnNlciIsImZpbmFsaXplU2NoZW1hIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NsaS9wYXJzZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmc30gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7QXJndW1lbnRQYXJzZXJ9IGZyb20gJ2FyZ3BhcnNlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7RFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFLCBTRVJWRVJfU1VCQ09NTUFORH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7ZmluYWxpemVTY2hlbWEsIGdldEFyZ1NwZWMsIGhhc0FyZ1NwZWN9IGZyb20gJy4uL3NjaGVtYSc7XG5pbXBvcnQge3Jvb3REaXJ9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge2dldEV4dGVuc2lvbkFyZ3MsIGdldFNlcnZlckFyZ3N9IGZyb20gJy4vYXJncyc7XG5cbmV4cG9ydCBjb25zdCBFWFRSQV9BUkdTID0gJ2V4dHJhQXJncyc7XG5cbi8qKlxuICogSWYgdGhlIHBhcnNlZCBhcmdzIGRvIG5vdCBjb250YWluIGFueSBvZiB0aGVzZSB2YWx1ZXMsIHRoZW4gd2VcbiAqIHdpbGwgYXV0b21hdGlhbGx5IGluamVjdCB0aGUgYHNlcnZlcmAgc3ViY29tbWFuZC5cbiAqL1xuY29uc3QgTk9OX1NFUlZFUl9BUkdTID0gT2JqZWN0LmZyZWV6ZShcbiAgbmV3IFNldChbRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFLCBTRVJWRVJfU1VCQ09NTUFORCwgJy1oJywgJy0taGVscCcsICctdicsICctLXZlcnNpb24nXSlcbik7XG5cbmNvbnN0IHZlcnNpb24gPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKHJvb3REaXIpLnZlcnNpb247XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBgYXJncGFyc2VgXG4gKlxuICogLSBIYW5kbGVzIGluc3RhbnRpYXRpb24sIGNvbmZpZ3VyYXRpb24sIGFuZCBtb25rZXlwYXRjaGluZyBvZiBhblxuICogICAgYEFyZ3VtZW50UGFyc2VyYCBpbnN0YW5jZSBmb3IgQXBwaXVtIHNlcnZlciBhbmQgaXRzIGV4dGVuc2lvbnNcbiAqIC0gSGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCBtZXNzYWdlcywgYW5kIGV4aXQgYmVoYXZpb3JcbiAqL1xuY2xhc3MgQXJnUGFyc2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlYnVnXSAtIElmIHRydWUsIHRocm93IGluc3RlYWQgb2YgZXhpdCBvbiBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRlYnVnID0gZmFsc2UpIHtcbiAgICBjb25zdCBwcm9nID0gcHJvY2Vzcy5hcmd2WzFdID8gcGF0aC5iYXNlbmFtZShwcm9jZXNzLmFyZ3ZbMV0pIDogJ2FwcGl1bSc7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IEFyZ3VtZW50UGFyc2VyKHtcbiAgICAgIGFkZF9oZWxwOiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdBIHdlYmRyaXZlci1jb21wYXRpYmxlIHNlcnZlciB0aGF0IGZhY2lsaXRhdGVzIGF1dG9tYXRpb24gb2Ygd2ViLCBtb2JpbGUsIGFuZCBvdGhlciB0eXBlcyBvZiBhcHBzIGFjcm9zcyB2YXJpb3VzIHBsYXRmb3Jtcy4nLFxuICAgICAgcHJvZyxcbiAgICB9KTtcblxuICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KHBhcnNlcik7XG5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtIG5hbWUgKHR5cGljYWxseSBgYXBwaXVtYClcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMucHJvZyA9IHByb2c7XG5cbiAgICAvKipcbiAgICAgKiBJZiBgdHJ1ZWAsIHRocm93IGFuIGVycm9yIG9uIHBhcnNlIGZhaWx1cmUgaW5zdGVhZCBvZiBwcmludGluZyBoZWxwXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5kZWJ1ZyA9IGRlYnVnO1xuXG4gICAgLyoqXG4gICAgICogV3JhcHBlZCBgQXJndW1lbnRQYXJzZXJgIGluc3RhbmNlXG4gICAgICogQHR5cGUge0FyZ3VtZW50UGFyc2VyfVxuICAgICAqL1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuXG4gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJzaW9uJywge1xuICAgICAgYWN0aW9uOiAndmVyc2lvbicsXG4gICAgICB2ZXJzaW9uLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3ViUGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyh7ZGVzdDogJ3N1YmNvbW1hbmQnfSk7XG5cbiAgICAvLyBhZGQgdGhlICdzZXJ2ZXInIHN1YmNvbW1hbmQsIGFuZCBzdG9yZSB0aGUgcmF3IGFyZ3VtZW50cyBvbiB0aGUgcGFyc2VyXG4gICAgLy8gb2JqZWN0IGFzIGEgd2F5IGZvciBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0byB3b3JrIHdpdGggdGhlIGFyZ3VtZW50c1xuICAgIC8vIGNvbmNlcHR1YWxseSByYXRoZXIgdGhhbiBqdXN0IHRocm91Z2ggYXJncGFyc2VcbiAgICBjb25zdCBzZXJ2ZXJBcmdzID0gQXJnUGFyc2VyLl9hZGRTZXJ2ZXJUb1BhcnNlcihzdWJQYXJzZXJzKTtcblxuICAgIHRoaXMucmF3QXJncyA9IHNlcnZlckFyZ3M7XG5cbiAgICAvLyBhZGQgdGhlICdkcml2ZXInIGFuZCAncGx1Z2luJyBzdWJjb21tYW5kc1xuICAgIEFyZ1BhcnNlci5fYWRkRXh0ZW5zaW9uQ29tbWFuZHNUb1BhcnNlcihzdWJQYXJzZXJzKTtcblxuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IC8gZHJvcC1pbiB3cmFwcGVyXG4gICAgLyoqXG4gICAgICogQHR5cGUge0FyZ1BhcnNlclsncGFyc2VBcmdzJ119XG4gICAgICovXG4gICAgdGhpcy5wYXJzZV9hcmdzID0gdGhpcy5wYXJzZUFyZ3M7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYXJndW1lbnRzIGZyb20gdGhlIGNvbW1hbmQgbGluZS5cbiAgICpcbiAgICogSWYgbm8gc3ViY29tbWFuZCBpcyBwYXNzZWQgaW4sIHRoaXMgbWV0aG9kIHdpbGwgaW5qZWN0IHRoZSBgc2VydmVyYCBzdWJjb21tYW5kLlxuICAgKlxuICAgKiBgQXJnUGFyc2VyLnByb3RvdHlwZS5wYXJzZV9hcmdzYCBpcyBhbiBhbGlhcyBvZiB0aGlzIG1ldGhvZC5cbiAgICogQHRlbXBsYXRlIFtUPWltcG9ydCgnYXBwaXVtL3R5cGVzJykuV2l0aFNlcnZlclN1YmNvbW1hbmRdXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzXSAtIEFycmF5IG9mIGFyZ3VtZW50cywgb3N0ZW5zaWJseSBmcm9tIGBwcm9jZXNzLmFyZ3ZgLiBHYXRoZXJzIGFyZ3MgZnJvbSBgcHJvY2Vzcy5hcmd2YCBpZiBub3QgcHJvdmlkZWQuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkFyZ3M8VD59IC0gVGhlIHBhcnNlZCBhcmd1bWVudHNcbiAgICovXG4gIHBhcnNlQXJncyhhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpKSB7XG4gICAgaWYgKCFOT05fU0VSVkVSX0FSR1MuaGFzKGFyZ3NbMF0pKSB7XG4gICAgICBhcmdzLnVuc2hpZnQoU0VSVkVSX1NVQkNPTU1BTkQpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3MpO1xuICAgICAgY29uc3QgW2tub3duQXJncywgdW5rbm93bkFyZ3NdID0gcGFyc2VkO1xuICAgICAgaWYgKFxuICAgICAgICB1bmtub3duQXJncz8ubGVuZ3RoICYmXG4gICAgICAgIChrbm93bkFyZ3MuZHJpdmVyQ29tbWFuZCA9PT0gJ3J1bicgfHwga25vd25BcmdzLnBsdWdpbkNvbW1hbmQgPT09ICdydW4nKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBBcmdQYXJzZXIuX3RyYW5zZm9ybVBhcnNlZEFyZ3Moa25vd25BcmdzLCB1bmtub3duQXJncyk7XG4gICAgICB9IGVsc2UgaWYgKHVua25vd25BcmdzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbRVJST1JdIFVucmVjb2duaXplZCBhcmd1bWVudHM6ICR7dW5rbm93bkFyZ3Muam9pbignICcpfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEFyZ1BhcnNlci5fdHJhbnNmb3JtUGFyc2VkQXJncyhrbm93bkFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgLy8gdGhpcyBpc24ndCB0ZXN0ZWQgdmlhIHVuaXQgdGVzdHMgKHdlIHVzZSBgZGVidWc6IHRydWVgKSBzbyBtYXkgZXNjYXBlIGNvdmVyYWdlLlxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCk7IC8vIG5lZWQgYW4gZXh0cmEgc3BhY2Ugc2luY2UgYXJncGFyc2UgcHJpbnRzIHVzYWdlLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QgZnVsbCBvZiBhcmd1bWVudHMgYXMgcmV0dXJuZWQgYnkgYGFyZ3BhcnNlci5wYXJzZV9hcmdzYCxcbiAgICogZXhwYW5kIHRoZSBvbmVzIGZvciBleHRlbnNpb25zIGludG8gYSBuZXN0ZWQgb2JqZWN0IHN0cnVjdHVyZSBhbmQgcmVuYW1lXG4gICAqIGtleXMgdG8gbWF0Y2ggdGhlIGludGVuZGVkIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBFLmcuLCBgeydkcml2ZXItZm9vLWJhcic6IGJhen1gIGJlY29tZXMgYHtkcml2ZXI6IHtmb286IHtiYXI6ICdiYXonfX19YFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbdW5rbm93bkFyZ3NdXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdGF0aWMgX3RyYW5zZm9ybVBhcnNlZEFyZ3MoYXJncywgdW5rbm93bkFyZ3MgPSBbXSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IF8ucmVkdWNlKFxuICAgICAgYXJncyxcbiAgICAgICh1bnBhY2tlZCwgdmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodmFsdWUpICYmIGhhc0FyZ1NwZWMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IHtkZXN0fSA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuLi9zY2hlbWEvYXJnLXNwZWMnKS5BcmdTcGVjfSAqLyAoZ2V0QXJnU3BlYyhrZXkpKTtcbiAgICAgICAgICBfLnNldCh1bnBhY2tlZCwgZGVzdCwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRoaXMgY291bGQgYmUgYW55dGhpbmcgdGhhdCBfaXNuJ3RfIGEgc2VydmVyIGFyZ1xuICAgICAgICAgIHVucGFja2VkW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5wYWNrZWQ7XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICAgIHJlc3VsdFtFWFRSQV9BUkdTXSA9IHVua25vd25BcmdzO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgYGV4aXQoKWAgbWV0aG9kIG9mIHRoZSBwYXJzZXIgdG8gdGhyb3cgYW4gZXJyb3IsIHNvIHdlIGNhbiBoYW5kbGUgaXQgbWFudWFsbHkuXG4gICAqIEBwYXJhbSB7QXJndW1lbnRQYXJzZXJ9IHBhcnNlclxuICAgKi9cbiAgc3RhdGljIF9wYXRjaEV4aXQocGFyc2VyKSB7XG4gICAgcGFyc2VyLmV4aXQgPSAoY29kZSwgbXNnKSA9PiB7XG4gICAgICBpZiAoY29kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3MuZXhpdCgpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2FyZ3BhcnNlJykuU3ViUGFyc2VyfSBzdWJQYXJzZXJcbiAgICogQHJldHVybnMge2ltcG9ydCgnLi9hcmdzJykuQXJndW1lbnREZWZpbml0aW9uc31cbiAgICovXG4gIHN0YXRpYyBfYWRkU2VydmVyVG9QYXJzZXIoc3ViUGFyc2VyKSB7XG4gICAgY29uc3Qgc2VydmVyUGFyc2VyID0gc3ViUGFyc2VyLmFkZF9wYXJzZXIoJ3NlcnZlcicsIHtcbiAgICAgIGFkZF9oZWxwOiB0cnVlLFxuICAgICAgaGVscDogJ1J1biBhbiBBcHBpdW0gc2VydmVyJyxcbiAgICB9KTtcblxuICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KHNlcnZlclBhcnNlcik7XG5cbiAgICBjb25zdCBzZXJ2ZXJBcmdzID0gZ2V0U2VydmVyQXJncygpO1xuICAgIGZvciAoY29uc3QgW2ZsYWdzT3JOYW1lcywgb3B0c10gb2Ygc2VydmVyQXJncykge1xuICAgICAgLy8gVFMgZG9lc24ndCBsaWtlIHRoZSBzcHJlYWQgb3BlcmF0b3IgaGVyZS5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHNlcnZlclBhcnNlci5hZGRfYXJndW1lbnQoLi4uZmxhZ3NPck5hbWVzLCB7Li4ub3B0c30pO1xuICAgIH1cblxuICAgIHJldHVybiBzZXJ2ZXJBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZXh0ZW5zaW9uIHN1Yi1zdWItY29tbWFuZHMgdG8gYGRyaXZlcmAvYHBsdWdpbmAgc3ViY29tbWFuZHNcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2FyZ3BhcnNlJykuU3ViUGFyc2VyfSBzdWJQYXJzZXJzXG4gICAqL1xuICBzdGF0aWMgX2FkZEV4dGVuc2lvbkNvbW1hbmRzVG9QYXJzZXIoc3ViUGFyc2Vycykge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiAvKiogQHR5cGUge1tEcml2ZXJUeXBlLCBQbHVnaW5UeXBlXX0gKi8gKFtEUklWRVJfVFlQRSwgUExVR0lOX1RZUEVdKSkge1xuICAgICAgY29uc3QgZXh0UGFyc2VyID0gc3ViUGFyc2Vycy5hZGRfcGFyc2VyKHR5cGUsIHtcbiAgICAgICAgYWRkX2hlbHA6IHRydWUsXG4gICAgICAgIGhlbHA6IGBBY2Nlc3MgdGhlICR7dHlwZX0gbWFuYWdlbWVudCBDTEkgY29tbWFuZHNgLFxuICAgICAgfSk7XG5cbiAgICAgIEFyZ1BhcnNlci5fcGF0Y2hFeGl0KGV4dFBhcnNlcik7XG5cbiAgICAgIGNvbnN0IGV4dFN1YlBhcnNlcnMgPSBleHRQYXJzZXIuYWRkX3N1YnBhcnNlcnMoe1xuICAgICAgICBkZXN0OiBgJHt0eXBlfUNvbW1hbmRgLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBleHRlbnNpb25BcmdzID0gZ2V0RXh0ZW5zaW9uQXJncygpO1xuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSB7IHtjb21tYW5kOiBpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkNsaUV4dGVuc2lvblN1YmNvbW1hbmQsIGFyZ3M6IGltcG9ydCgnLi9hcmdzJykuQXJndW1lbnREZWZpbml0aW9ucywgaGVscDogc3RyaW5nfVtdIH1cbiAgICAgICAqL1xuICAgICAgY29uc3QgcGFyc2VyU3BlY3MgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAnbGlzdCcsXG4gICAgICAgICAgYXJnczogZXh0ZW5zaW9uQXJnc1t0eXBlXS5saXN0LFxuICAgICAgICAgIGhlbHA6IGBMaXN0IGF2YWlsYWJsZSBhbmQgaW5zdGFsbGVkICR7dHlwZX1zYCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1hbmQ6ICdpbnN0YWxsJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLmluc3RhbGwsXG4gICAgICAgICAgaGVscDogYEluc3RhbGwgYSAke3R5cGV9YCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1hbmQ6ICd1bmluc3RhbGwnLFxuICAgICAgICAgIGFyZ3M6IGV4dGVuc2lvbkFyZ3NbdHlwZV0udW5pbnN0YWxsLFxuICAgICAgICAgIGhlbHA6IGBVbmluc3RhbGwgYSAke3R5cGV9YCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1hbmQ6ICd1cGRhdGUnLFxuICAgICAgICAgIGFyZ3M6IGV4dGVuc2lvbkFyZ3NbdHlwZV0udXBkYXRlLFxuICAgICAgICAgIGhlbHA6IGBVcGRhdGUgaW5zdGFsbGVkICR7dHlwZX1zIHRvIHRoZSBsYXRlc3QgdmVyc2lvbmAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21tYW5kOiAncnVuJyxcbiAgICAgICAgICBhcmdzOiBleHRlbnNpb25BcmdzW3R5cGVdLnJ1bixcbiAgICAgICAgICBoZWxwOlxuICAgICAgICAgICAgYFJ1biBhIHNjcmlwdCAoZGVmaW5lZCBpbnNpZGUgdGhlICR7dHlwZX0ncyBwYWNrYWdlLmpzb24gdW5kZXIgdGhlIGAgK1xuICAgICAgICAgICAgYOKAnHNjcmlwdHPigJ0gZmllbGQgaW5zaWRlIHRoZSDigJxhcHBpdW3igJ0gZmllbGQpIGZyb20gYW4gaW5zdGFsbGVkICR7dHlwZX1gLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCB7Y29tbWFuZCwgYXJncywgaGVscH0gb2YgcGFyc2VyU3BlY3MpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gZXh0U3ViUGFyc2Vycy5hZGRfcGFyc2VyKGNvbW1hbmQsIHtoZWxwfSk7XG5cbiAgICAgICAgQXJnUGFyc2VyLl9wYXRjaEV4aXQocGFyc2VyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtmbGFnc09yTmFtZXMsIG9wdHNdIG9mIGFyZ3MpIHtcbiAgICAgICAgICAvLyBhZGRfYXJndW1lbnQgbXV0YXRlcyBwYXJhbXMgc28gbWFrZSBzdXJlIHRvIHNlbmQgaW4gY29waWVzIGluc3RlYWRcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCguLi5mbGFnc09yTmFtZXMsIHsuLi5vcHRzfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEFyZ1BhcnNlcn0gaW5zdGFuY2U7IGZpbmFsaXplcyB0aGUgY29uZmlnIHNjaGVtYS5cbiAqXG4gKiBAY29uc3RydWN0cyBBcmdQYXJzZXJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlYnVnXSAtIElmIGB0cnVlYCwgdGhyb3cgaW5zdGVhZCBvZiBleGl0IHVwb24gcGFyc2luZyBlcnJvclxuICogQHJldHVybnMge0FyZ1BhcnNlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UGFyc2VyKGRlYnVnKSB7XG4gIGZpbmFsaXplU2NoZW1hKCk7XG5cbiAgcmV0dXJuIG5ldyBBcmdQYXJzZXIoZGVidWcpO1xufVxuXG5leHBvcnQge2dldFBhcnNlciwgQXJnUGFyc2VyfTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyVHlwZX0gRHJpdmVyVHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpblR5cGV9IFBsdWdpblR5cGVcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FB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
|
|
241
|
+
exports.getParser = getParser;
|
|
242
|
+
/**
|
|
243
|
+
* @typedef {import('@appium/types').DriverType} DriverType
|
|
244
|
+
* @typedef {import('@appium/types').PluginType} PluginType
|
|
245
|
+
*/
|
|
246
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","names":["EXTRA_ARGS","NON_SERVER_ARGS","Object","freeze","Set","DRIVER_TYPE","PLUGIN_TYPE","SERVER_SUBCOMMAND","version","fs","readPackageJsonFrom","rootDir","ArgParser","constructor","debug","prog","process","argv","path","basename","parser","ArgumentParser","add_help","description","_patchExit","add_argument","action","subParsers","add_subparsers","dest","serverArgs","_addServerToParser","rawArgs","_addExtensionCommandsToParser","parse_args","parseArgs","args","slice","has","unshift","parsed","parse_known_args","knownArgs","unknownArgs","length","driverCommand","pluginCommand","_transformParsedArgs","Error","join","err","console","error","message","exit","result","_","reduce","unpacked","value","key","isUndefined","hasArgSpec","getArgSpec","set","code","msg","subParser","serverParser","add_parser","help","getServerArgs","flagsOrNames","opts","type","extParser","extSubParsers","extensionArgs","getExtensionArgs","parserSpecs","command","list","install","uninstall","update","run","getParser","finalizeSchema"],"sources":["../../../lib/cli/parser.js"],"sourcesContent":["import {fs} from '@appium/support';\nimport {ArgumentParser} from 'argparse';\nimport _ from 'lodash';\nimport path from 'path';\nimport {DRIVER_TYPE, PLUGIN_TYPE, SERVER_SUBCOMMAND} from '../constants';\nimport {finalizeSchema, getArgSpec, hasArgSpec} from '../schema';\nimport {rootDir} from '../config';\nimport {getExtensionArgs, getServerArgs} from './args';\n\nexport const EXTRA_ARGS = 'extraArgs';\n\n/**\n * If the parsed args do not contain any of these values, then we\n * will automatially inject the `server` subcommand.\n */\nconst NON_SERVER_ARGS = Object.freeze(\n new Set([DRIVER_TYPE, PLUGIN_TYPE, SERVER_SUBCOMMAND, '-h', '--help', '-v', '--version'])\n);\n\nconst version = fs.readPackageJsonFrom(rootDir).version;\n\n/**\n * A wrapper around `argparse`\n *\n * - Handles instantiation, configuration, and monkeypatching of an\n * `ArgumentParser` instance for Appium server and its extensions\n * - Handles error conditions, messages, and exit behavior\n */\nclass ArgParser {\n /**\n * @param {boolean} [debug] - If true, throw instead of exit on error.\n */\n constructor(debug = false) {\n const prog = process.argv[1] ? path.basename(process.argv[1]) : 'appium';\n const parser = new ArgumentParser({\n add_help: true,\n description:\n 'A webdriver-compatible server that facilitates automation of web, mobile, and other types of apps across various platforms.',\n prog,\n });\n\n ArgParser._patchExit(parser);\n\n /**\n * Program name (typically `appium`)\n * @type {string}\n */\n this.prog = prog;\n\n /**\n * If `true`, throw an error on parse failure instead of printing help\n * @type {boolean}\n */\n this.debug = debug;\n\n /**\n * Wrapped `ArgumentParser` instance\n * @type {ArgumentParser}\n */\n this.parser = parser;\n\n parser.add_argument('-v', '--version', {\n action: 'version',\n version,\n });\n\n const subParsers = parser.add_subparsers({dest: 'subcommand'});\n\n // add the 'server' subcommand, and store the raw arguments on the parser\n // object as a way for other parts of the code to work with the arguments\n // conceptually rather than just through argparse\n const serverArgs = ArgParser._addServerToParser(subParsers);\n\n this.rawArgs = serverArgs;\n\n // add the 'driver' and 'plugin' subcommands\n ArgParser._addExtensionCommandsToParser(subParsers);\n\n // backwards compatibility / drop-in wrapper\n /**\n * @type {ArgParser['parseArgs']}\n */\n this.parse_args = this.parseArgs;\n }\n\n /**\n * Parse arguments from the command line.\n *\n * If no subcommand is passed in, this method will inject the `server` subcommand.\n *\n * `ArgParser.prototype.parse_args` is an alias of this method.\n * @template [T=import('appium/types').WithServerSubcommand]\n * @param {string[]} [args] - Array of arguments, ostensibly from `process.argv`. Gathers args from `process.argv` if not provided.\n * @returns {import('appium/types').Args<T>} - The parsed arguments\n */\n parseArgs(args = process.argv.slice(2)) {\n if (!NON_SERVER_ARGS.has(args[0])) {\n args.unshift(SERVER_SUBCOMMAND);\n }\n\n try {\n const parsed = this.parser.parse_known_args(args);\n const [knownArgs, unknownArgs] = parsed;\n if (\n unknownArgs?.length &&\n (knownArgs.driverCommand === 'run' || knownArgs.pluginCommand === 'run')\n ) {\n return ArgParser._transformParsedArgs(knownArgs, unknownArgs);\n } else if (unknownArgs?.length) {\n throw new Error(`[ERROR] Unrecognized arguments: ${unknownArgs.join(' ')}`);\n }\n return ArgParser._transformParsedArgs(knownArgs);\n } catch (err) {\n if (this.debug) {\n throw err;\n }\n // this isn't tested via unit tests (we use `debug: true`) so may escape coverage.\n\n /* istanbul ignore next */\n {\n // eslint-disable-next-line no-console\n console.error(); // need an extra space since argparse prints usage.\n // eslint-disable-next-line no-console\n console.error(err.message);\n process.exit(1);\n }\n }\n }\n\n /**\n * Given an object full of arguments as returned by `argparser.parse_args`,\n * expand the ones for extensions into a nested object structure and rename\n * keys to match the intended destination.\n *\n * E.g., `{'driver-foo-bar': baz}` becomes `{driver: {foo: {bar: 'baz'}}}`\n * @param {object} args\n * @param {string[]} [unknownArgs]\n * @returns {object}\n */\n static _transformParsedArgs(args, unknownArgs = []) {\n const result = _.reduce(\n args,\n (unpacked, value, key) => {\n if (!_.isUndefined(value) && hasArgSpec(key)) {\n const {dest} = /** @type {import('../schema/arg-spec').ArgSpec} */ (getArgSpec(key));\n _.set(unpacked, dest, value);\n } else {\n // this could be anything that _isn't_ a server arg\n unpacked[key] = value;\n }\n return unpacked;\n },\n {}\n );\n result[EXTRA_ARGS] = unknownArgs;\n return result;\n }\n\n /**\n * Patches the `exit()` method of the parser to throw an error, so we can handle it manually.\n * @param {ArgumentParser} parser\n */\n static _patchExit(parser) {\n parser.exit = (code, msg) => {\n if (code) {\n throw new Error(msg);\n }\n process.exit();\n };\n }\n\n /**\n *\n * @param {import('argparse').SubParser} subParser\n * @returns {import('./args').ArgumentDefinitions}\n */\n static _addServerToParser(subParser) {\n const serverParser = subParser.add_parser('server', {\n add_help: true,\n help: 'Run an Appium server',\n });\n\n ArgParser._patchExit(serverParser);\n\n const serverArgs = getServerArgs();\n for (const [flagsOrNames, opts] of serverArgs) {\n // TS doesn't like the spread operator here.\n // @ts-ignore\n serverParser.add_argument(...flagsOrNames, {...opts});\n }\n\n return serverArgs;\n }\n\n /**\n * Adds extension sub-sub-commands to `driver`/`plugin` subcommands\n * @param {import('argparse').SubParser} subParsers\n */\n static _addExtensionCommandsToParser(subParsers) {\n for (const type of /** @type {[DriverType, PluginType]} */ ([DRIVER_TYPE, PLUGIN_TYPE])) {\n const extParser = subParsers.add_parser(type, {\n add_help: true,\n help: `Access the ${type} management CLI commands`,\n });\n\n ArgParser._patchExit(extParser);\n\n const extSubParsers = extParser.add_subparsers({\n dest: `${type}Command`,\n });\n const extensionArgs = getExtensionArgs();\n /**\n * @type { {command: import('appium/types').CliExtensionSubcommand, args: import('./args').ArgumentDefinitions, help: string}[] }\n */\n const parserSpecs = [\n {\n command: 'list',\n args: extensionArgs[type].list,\n help: `List available and installed ${type}s`,\n },\n {\n command: 'install',\n args: extensionArgs[type].install,\n help: `Install a ${type}`,\n },\n {\n command: 'uninstall',\n args: extensionArgs[type].uninstall,\n help: `Uninstall a ${type}`,\n },\n {\n command: 'update',\n args: extensionArgs[type].update,\n help: `Update installed ${type}s to the latest version`,\n },\n {\n command: 'run',\n args: extensionArgs[type].run,\n help:\n `Run a script (defined inside the ${type}'s package.json under the ` +\n `“scripts” field inside the “appium” field) from an installed ${type}`,\n },\n ];\n\n for (const {command, args, help} of parserSpecs) {\n const parser = extSubParsers.add_parser(command, {help});\n\n ArgParser._patchExit(parser);\n\n for (const [flagsOrNames, opts] of args) {\n // add_argument mutates params so make sure to send in copies instead\n // @ts-ignore\n parser.add_argument(...flagsOrNames, {...opts});\n }\n }\n }\n }\n}\n\n/**\n * Creates a {@link ArgParser} instance; finalizes the config schema.\n *\n * @constructs ArgParser\n * @param {boolean} [debug] - If `true`, throw instead of exit upon parsing error\n * @returns {ArgParser}\n */\nfunction getParser(debug) {\n finalizeSchema();\n\n return new ArgParser(debug);\n}\n\nexport {getParser, ArgParser};\n\n/**\n * @typedef {import('@appium/types').DriverType} DriverType\n * @typedef {import('@appium/types').PluginType} PluginType\n */\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../lib/cli/parser.js"],"names":[],"mappings":"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"}
|