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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +145 -44
  2. package/build/lib/appium.d.ts +3 -103
  3. package/build/lib/appium.d.ts.map +1 -1
  4. package/build/lib/appium.js +679 -549
  5. package/build/lib/appium.js.map +1 -1
  6. package/build/lib/cli/args.js +247 -127
  7. package/build/lib/cli/args.js.map +1 -1
  8. package/build/lib/cli/driver-command.js +63 -88
  9. package/build/lib/cli/driver-command.js.map +1 -1
  10. package/build/lib/cli/extension-command.d.ts +32 -23
  11. package/build/lib/cli/extension-command.d.ts.map +1 -1
  12. package/build/lib/cli/extension-command.js +730 -512
  13. package/build/lib/cli/extension-command.js.map +1 -1
  14. package/build/lib/cli/extension.d.ts +7 -6
  15. package/build/lib/cli/extension.d.ts.map +1 -1
  16. package/build/lib/cli/extension.js +68 -65
  17. package/build/lib/cli/extension.js.map +1 -1
  18. package/build/lib/cli/parser.d.ts +3 -3
  19. package/build/lib/cli/parser.d.ts.map +1 -1
  20. package/build/lib/cli/parser.js +234 -192
  21. package/build/lib/cli/parser.js.map +1 -1
  22. package/build/lib/cli/plugin-command.js +58 -87
  23. package/build/lib/cli/plugin-command.js.map +1 -1
  24. package/build/lib/cli/utils.js +66 -69
  25. package/build/lib/cli/utils.js.map +1 -1
  26. package/build/lib/config-file.d.ts.map +1 -1
  27. package/build/lib/config-file.js +189 -120
  28. package/build/lib/config-file.js.map +1 -1
  29. package/build/lib/config.d.ts.map +1 -1
  30. package/build/lib/config.js +254 -213
  31. package/build/lib/config.js.map +1 -1
  32. package/build/lib/constants.d.ts +5 -5
  33. package/build/lib/constants.d.ts.map +1 -1
  34. package/build/lib/constants.js +64 -59
  35. package/build/lib/constants.js.map +1 -1
  36. package/build/lib/extension/driver-config.js +199 -164
  37. package/build/lib/extension/driver-config.js.map +1 -1
  38. package/build/lib/extension/extension-config.d.ts +18 -16
  39. package/build/lib/extension/extension-config.d.ts.map +1 -1
  40. package/build/lib/extension/extension-config.js +523 -396
  41. package/build/lib/extension/extension-config.js.map +1 -1
  42. package/build/lib/extension/index.js +98 -68
  43. package/build/lib/extension/index.js.map +1 -1
  44. package/build/lib/extension/manifest-migrations.d.ts +27 -0
  45. package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
  46. package/build/lib/extension/manifest-migrations.js +99 -0
  47. package/build/lib/extension/manifest-migrations.js.map +1 -0
  48. package/build/lib/extension/manifest.d.ts +7 -56
  49. package/build/lib/extension/manifest.d.ts.map +1 -1
  50. package/build/lib/extension/manifest.js +432 -240
  51. package/build/lib/extension/manifest.js.map +1 -1
  52. package/build/lib/extension/package-changed.js +57 -61
  53. package/build/lib/extension/package-changed.js.map +1 -1
  54. package/build/lib/extension/plugin-config.d.ts +2 -3
  55. package/build/lib/extension/plugin-config.d.ts.map +1 -1
  56. package/build/lib/extension/plugin-config.js +94 -70
  57. package/build/lib/extension/plugin-config.js.map +1 -1
  58. package/build/lib/grid-register.js +119 -137
  59. package/build/lib/grid-register.js.map +1 -1
  60. package/build/lib/logger.d.ts +1 -1
  61. package/build/lib/logger.d.ts.map +1 -1
  62. package/build/lib/logger.js +5 -15
  63. package/build/lib/logger.js.map +1 -1
  64. package/build/lib/logsink.d.ts.map +1 -1
  65. package/build/lib/logsink.js +189 -183
  66. package/build/lib/logsink.js.map +1 -1
  67. package/build/lib/main.d.ts +19 -12
  68. package/build/lib/main.d.ts.map +1 -1
  69. package/build/lib/main.js +330 -304
  70. package/build/lib/main.js.map +1 -1
  71. package/build/lib/schema/arg-spec.js +153 -108
  72. package/build/lib/schema/arg-spec.js.map +1 -1
  73. package/build/lib/schema/cli-args.js +203 -164
  74. package/build/lib/schema/cli-args.js.map +1 -1
  75. package/build/lib/schema/cli-transformers.js +117 -72
  76. package/build/lib/schema/cli-transformers.js.map +1 -1
  77. package/build/lib/schema/index.js +17 -32
  78. package/build/lib/schema/index.js.map +1 -1
  79. package/build/lib/schema/keywords.js +125 -67
  80. package/build/lib/schema/keywords.js.map +1 -1
  81. package/build/lib/schema/schema.d.ts.map +1 -1
  82. package/build/lib/schema/schema.js +582 -417
  83. package/build/lib/schema/schema.js.map +1 -1
  84. package/build/lib/utils.d.ts +41 -255
  85. package/build/lib/utils.d.ts.map +1 -1
  86. package/build/lib/utils.js +342 -193
  87. package/build/lib/utils.js.map +1 -1
  88. package/build/tsconfig.tsbuildinfo +1 -1
  89. package/build/types/cli.d.ts +45 -34
  90. package/build/types/cli.d.ts.map +1 -1
  91. package/build/types/cli.js +3 -0
  92. package/build/types/cli.js.map +1 -0
  93. package/build/types/index.d.ts +1 -2
  94. package/build/types/index.d.ts.map +1 -1
  95. package/build/types/index.js +19 -0
  96. package/build/types/index.js.map +1 -0
  97. package/build/types/manifest/base.d.ts +135 -0
  98. package/build/types/manifest/base.d.ts.map +1 -0
  99. package/build/types/manifest/base.js +3 -0
  100. package/build/types/manifest/base.js.map +1 -0
  101. package/build/types/manifest/index.d.ts +19 -0
  102. package/build/types/manifest/index.d.ts.map +1 -0
  103. package/build/types/manifest/index.js +40 -0
  104. package/build/types/manifest/index.js.map +1 -0
  105. package/build/types/manifest/v3.d.ts +139 -0
  106. package/build/types/manifest/v3.d.ts.map +1 -0
  107. package/build/types/manifest/v3.js +3 -0
  108. package/build/types/manifest/v3.js.map +1 -0
  109. package/lib/appium.js +1 -1
  110. package/lib/cli/args.js +1 -1
  111. package/lib/cli/extension-command.js +116 -61
  112. package/lib/cli/extension.js +9 -8
  113. package/lib/cli/parser.js +2 -2
  114. package/lib/config-file.js +2 -3
  115. package/lib/config.js +3 -2
  116. package/lib/constants.js +6 -5
  117. package/lib/extension/extension-config.js +24 -25
  118. package/lib/extension/manifest-migrations.js +99 -0
  119. package/lib/extension/manifest.js +79 -72
  120. package/lib/extension/plugin-config.js +1 -2
  121. package/lib/logsink.js +26 -5
  122. package/lib/main.js +58 -50
  123. package/lib/schema/schema.js +6 -1
  124. package/lib/utils.js +62 -0
  125. package/package.json +23 -24
  126. package/scripts/autoinstall-extensions.js +78 -26
  127. package/types/cli.ts +81 -42
  128. package/types/index.ts +1 -2
  129. package/types/manifest/README.md +30 -0
  130. package/types/manifest/base.ts +158 -0
  131. package/types/manifest/index.ts +27 -0
  132. package/types/manifest/v3.ts +161 -0
  133. package/build/types/appium-manifest.d.ts +0 -59
  134. package/build/types/appium-manifest.d.ts.map +0 -1
  135. package/build/types/extension-manifest.d.ts +0 -55
  136. package/build/types/extension-manifest.d.ts.map +0 -1
  137. package/types/appium-manifest.ts +0 -73
  138. package/types/extension-manifest.ts +0 -64
@@ -1,204 +1,246 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.EXTRA_ARGS = exports.ArgParser = void 0;
7
- exports.getParser = getParser;
8
-
9
- require("source-map-support/register");
10
-
11
- var _support = require("@appium/support");
12
-
13
- var _argparse = require("argparse");
14
-
15
- var _lodash = _interopRequireDefault(require("lodash"));
16
-
17
- var _path = _interopRequireDefault(require("path"));
18
-
19
- var _constants = require("../constants");
20
-
21
- var _schema = require("../schema");
22
-
23
- var _config = require("../config");
24
-
25
- var _args = require("./args");
26
-
27
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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
- constructor(debug = false) {
37
- const prog = process.argv[1] ? _path.default.basename(process.argv[1]) : 'appium';
38
- const parser = new _argparse.ArgumentParser({
39
- add_help: true,
40
- description: 'A webdriver-compatible server that facilitates automation of web, mobile, and other types of apps across various platforms.',
41
- prog
42
- });
43
-
44
- ArgParser._patchExit(parser);
45
-
46
- this.prog = prog;
47
- this.debug = debug;
48
- this.parser = parser;
49
- parser.add_argument('-v', '--version', {
50
- action: 'version',
51
- version
52
- });
53
- const subParsers = parser.add_subparsers({
54
- dest: 'subcommand'
55
- });
56
-
57
- const serverArgs = ArgParser._addServerToParser(subParsers);
58
-
59
- this.rawArgs = serverArgs;
60
-
61
- ArgParser._addExtensionCommandsToParser(subParsers);
62
-
63
- this.parse_args = this.parseArgs;
64
- }
65
-
66
- parseArgs(args = process.argv.slice(2)) {
67
- if (!NON_SERVER_ARGS.has(args[0])) {
68
- args.unshift(_constants.SERVER_SUBCOMMAND);
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
- try {
72
- const parsed = this.parser.parse_known_args(args);
73
- const [knownArgs, unknownArgs] = parsed;
74
-
75
- if (unknownArgs !== null && unknownArgs !== void 0 && unknownArgs.length && (knownArgs.driverCommand === 'run' || knownArgs.pluginCommand === 'run')) {
76
- return ArgParser._transformParsedArgs(knownArgs, unknownArgs);
77
- } else if (unknownArgs !== null && unknownArgs !== void 0 && unknownArgs.length) {
78
- throw new Error(`[ERROR] Unrecognized arguments: ${unknownArgs.join(' ')}`);
79
- }
80
-
81
- return ArgParser._transformParsedArgs(knownArgs);
82
- } catch (err) {
83
- if (this.debug) {
84
- throw err;
85
- }
86
-
87
- {
88
- console.error();
89
- console.error(err.message);
90
- process.exit(1);
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
- static _transformParsedArgs(args, unknownArgs = []) {
96
- const result = _lodash.default.reduce(args, (unpacked, value, key) => {
97
- if (!_lodash.default.isUndefined(value) && (0, _schema.hasArgSpec)(key)) {
98
- const {
99
- dest
100
- } = (0, _schema.getArgSpec)(key);
101
-
102
- _lodash.default.set(unpacked, dest, value);
103
- } else {
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
- return serverArgs;
140
- }
141
-
142
- static _addExtensionCommandsToParser(subParsers) {
143
- for (const type of [_constants.DRIVER_TYPE, _constants.PLUGIN_TYPE]) {
144
- const extParser = subParsers.add_parser(type, {
145
- add_help: true,
146
- help: `Access the ${type} management CLI commands`
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
- ArgParser._patchExit(parser);
187
-
188
- for (const [flagsOrNames, opts] of args) {
189
- parser.add_argument(...flagsOrNames, { ...opts
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
- (0, _schema.finalizeSchema)();
202
- return new ArgParser(debug);
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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"}