@rushstack/ts-command-line 4.9.1 → 4.10.3
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/CHANGELOG.json +53 -0
- package/CHANGELOG.md +25 -1
- package/dist/ts-command-line.d.ts +5 -0
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/providers/CommandLineParameterProvider.d.ts +5 -0
- package/lib/providers/CommandLineParameterProvider.d.ts.map +1 -1
- package/lib/providers/CommandLineParameterProvider.js +12 -1
- package/lib/providers/CommandLineParameterProvider.js.map +1 -1
- package/lib/providers/CommandLineParserExitError.js +1 -1
- package/lib/providers/TabCompletionAction.js +1 -1
- package/lib/providers/TabCompletionAction.js.map +1 -1
- package/package.json +6 -5
package/CHANGELOG.json
CHANGED
|
@@ -1,6 +1,59 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rushstack/ts-command-line",
|
|
3
3
|
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"version": "4.10.3",
|
|
6
|
+
"tag": "@rushstack/ts-command-line_v4.10.3",
|
|
7
|
+
"date": "Wed, 27 Oct 2021 00:08:15 GMT",
|
|
8
|
+
"comments": {
|
|
9
|
+
"patch": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "Update the package.json repository field to include the directory property."
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"dependency": [
|
|
15
|
+
{
|
|
16
|
+
"comment": "Updating dependency \"@rushstack/eslint-config\" to `2.4.4`"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"version": "4.10.2",
|
|
23
|
+
"tag": "@rushstack/ts-command-line_v4.10.2",
|
|
24
|
+
"date": "Wed, 13 Oct 2021 15:09:54 GMT",
|
|
25
|
+
"comments": {
|
|
26
|
+
"dependency": [
|
|
27
|
+
{
|
|
28
|
+
"comment": "Updating dependency \"@rushstack/eslint-config\" to `2.4.3`"
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"version": "4.10.1",
|
|
35
|
+
"tag": "@rushstack/ts-command-line_v4.10.1",
|
|
36
|
+
"date": "Thu, 07 Oct 2021 07:13:35 GMT",
|
|
37
|
+
"comments": {
|
|
38
|
+
"dependency": [
|
|
39
|
+
{
|
|
40
|
+
"comment": "Updating dependency \"@rushstack/eslint-config\" to `2.4.2`"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"version": "4.10.0",
|
|
47
|
+
"tag": "@rushstack/ts-command-line_v4.10.0",
|
|
48
|
+
"date": "Mon, 04 Oct 2021 15:10:18 GMT",
|
|
49
|
+
"comments": {
|
|
50
|
+
"minor": [
|
|
51
|
+
{
|
|
52
|
+
"comment": "Add safety check parametersProcessed to CommandLineParameterProvider"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
},
|
|
4
57
|
{
|
|
5
58
|
"version": "4.9.1",
|
|
6
59
|
"tag": "@rushstack/ts-command-line_v4.9.1",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
# Change Log - @rushstack/ts-command-line
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 27 Oct 2021 00:08:15 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 4.10.3
|
|
6
|
+
Wed, 27 Oct 2021 00:08:15 GMT
|
|
7
|
+
|
|
8
|
+
### Patches
|
|
9
|
+
|
|
10
|
+
- Update the package.json repository field to include the directory property.
|
|
11
|
+
|
|
12
|
+
## 4.10.2
|
|
13
|
+
Wed, 13 Oct 2021 15:09:54 GMT
|
|
14
|
+
|
|
15
|
+
_Version update only_
|
|
16
|
+
|
|
17
|
+
## 4.10.1
|
|
18
|
+
Thu, 07 Oct 2021 07:13:35 GMT
|
|
19
|
+
|
|
20
|
+
_Version update only_
|
|
21
|
+
|
|
22
|
+
## 4.10.0
|
|
23
|
+
Mon, 04 Oct 2021 15:10:18 GMT
|
|
24
|
+
|
|
25
|
+
### Minor changes
|
|
26
|
+
|
|
27
|
+
- Add safety check parametersProcessed to CommandLineParameterProvider
|
|
4
28
|
|
|
5
29
|
## 4.9.1
|
|
6
30
|
Thu, 23 Sep 2021 00:10:41 GMT
|
|
@@ -273,12 +273,17 @@ export declare abstract class CommandLineParameterProvider {
|
|
|
273
273
|
private static _keyCounter;
|
|
274
274
|
private _parameters;
|
|
275
275
|
private _parametersByLongName;
|
|
276
|
+
private _parametersProcessed;
|
|
276
277
|
private _remainder;
|
|
277
278
|
/* Excluded from this release type: __constructor */
|
|
278
279
|
/**
|
|
279
280
|
* Returns a collection of the parameters that were defined for this object.
|
|
280
281
|
*/
|
|
281
282
|
get parameters(): ReadonlyArray<CommandLineParameter>;
|
|
283
|
+
/**
|
|
284
|
+
* Informs the caller if the argparse data has been processed into parameters.
|
|
285
|
+
*/
|
|
286
|
+
get parametersProcessed(): boolean;
|
|
282
287
|
/**
|
|
283
288
|
* If {@link CommandLineParameterProvider.defineCommandLineRemainder} was called,
|
|
284
289
|
* this object captures any remaining command line arguments after the recognized portion.
|
package/dist/tsdoc-metadata.json
CHANGED
package/lib/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
|
3
3
|
// See LICENSE in the project root for license information.
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.CommandLineHelper = exports.DynamicCommandLineParser = exports.DynamicCommandLineAction = exports.CommandLineParser = exports.CommandLineParameterProvider = exports.CommandLineRemainder = exports.CommandLineChoiceListParameter = exports.CommandLineChoiceParameter = exports.CommandLineIntegerListParameter = exports.CommandLineIntegerParameter = exports.CommandLineStringListParameter = exports.CommandLineStringParameter = exports.CommandLineFlagParameter = exports.CommandLineParameterWithArgument = exports.CommandLineParameter = exports.CommandLineParameterKind = exports.CommandLineAction = void 0;
|
|
5
6
|
/**
|
|
6
7
|
* An object-oriented command-line parser for TypeScript projects.
|
|
7
8
|
*
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D;;;;GAIG;AAEH,mEAA6F;AAApF,sHAAA,iBAAiB,OAAA;AAe1B,wDAIkC;AAHhC,uHAAA,wBAAwB,OAAA;AACxB,mHAAA,oBAAoB,OAAA;AACpB,+HAAA,gCAAgC,OAAA;AAGlC,kFAAiF;AAAxE,oIAAA,wBAAwB,OAAA;AACjC,sFAAqF;AAA5E,wIAAA,0BAA0B,OAAA;AACnC,8FAA6F;AAApF,gJAAA,8BAA8B,OAAA;AACvC,wFAAuF;AAA9E,0IAAA,2BAA2B,OAAA;AACpC,gGAA+F;AAAtF,kJAAA,+BAA+B,OAAA;AACxC,sFAAqF;AAA5E,wIAAA,0BAA0B,OAAA;AACnC,8FAA6F;AAApF,gJAAA,8BAA8B,OAAA;AACvC,0EAAyE;AAAhE,4HAAA,oBAAoB,OAAA;AAE7B,yFAGkD;AAFhD,4IAAA,4BAA4B,OAAA;AAI9B,mEAA6F;AAAzD,sHAAA,iBAAiB,OAAA;AAErD,iFAAgF;AAAvE,oIAAA,wBAAwB,OAAA;AAEjC,iFAAgF;AAAvE,oIAAA,wBAAwB,OAAA;AAIjC,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\n/**\r\n * An object-oriented command-line parser for TypeScript projects.\r\n *\r\n * @packageDocumentation\r\n */\r\n\r\nexport { CommandLineAction, ICommandLineActionOptions } from './providers/CommandLineAction';\r\n\r\nexport {\r\n IBaseCommandLineDefinition,\r\n IBaseCommandLineDefinitionWithArgument,\r\n ICommandLineFlagDefinition,\r\n ICommandLineStringDefinition,\r\n ICommandLineStringListDefinition,\r\n ICommandLineIntegerDefinition,\r\n ICommandLineIntegerListDefinition,\r\n ICommandLineChoiceDefinition,\r\n ICommandLineChoiceListDefinition,\r\n ICommandLineRemainderDefinition\r\n} from './parameters/CommandLineDefinition';\r\n\r\nexport {\r\n CommandLineParameterKind,\r\n CommandLineParameter,\r\n CommandLineParameterWithArgument\r\n} from './parameters/BaseClasses';\r\n\r\nexport { CommandLineFlagParameter } from './parameters/CommandLineFlagParameter';\r\nexport { CommandLineStringParameter } from './parameters/CommandLineStringParameter';\r\nexport { CommandLineStringListParameter } from './parameters/CommandLineStringListParameter';\r\nexport { CommandLineIntegerParameter } from './parameters/CommandLineIntegerParameter';\r\nexport { CommandLineIntegerListParameter } from './parameters/CommandLineIntegerListParameter';\r\nexport { CommandLineChoiceParameter } from './parameters/CommandLineChoiceParameter';\r\nexport { CommandLineChoiceListParameter } from './parameters/CommandLineChoiceListParameter';\r\nexport { CommandLineRemainder } from './parameters/CommandLineRemainder';\r\n\r\nexport {\r\n CommandLineParameterProvider,\r\n ICommandLineParserData as _ICommandLineParserData\r\n} from './providers/CommandLineParameterProvider';\r\n\r\nexport { ICommandLineParserOptions, CommandLineParser } from './providers/CommandLineParser';\r\n\r\nexport { DynamicCommandLineAction } from './providers/DynamicCommandLineAction';\r\n\r\nexport { DynamicCommandLineParser } from './providers/DynamicCommandLineParser';\r\n\r\nexport { CommandLineConstants } from './Constants';\r\n\r\nexport { CommandLineHelper } from './CommandLineHelper';\r\n"]}
|
|
@@ -27,6 +27,7 @@ export declare abstract class CommandLineParameterProvider {
|
|
|
27
27
|
private static _keyCounter;
|
|
28
28
|
private _parameters;
|
|
29
29
|
private _parametersByLongName;
|
|
30
|
+
private _parametersProcessed;
|
|
30
31
|
private _remainder;
|
|
31
32
|
/** @internal */
|
|
32
33
|
constructor();
|
|
@@ -34,6 +35,10 @@ export declare abstract class CommandLineParameterProvider {
|
|
|
34
35
|
* Returns a collection of the parameters that were defined for this object.
|
|
35
36
|
*/
|
|
36
37
|
get parameters(): ReadonlyArray<CommandLineParameter>;
|
|
38
|
+
/**
|
|
39
|
+
* Informs the caller if the argparse data has been processed into parameters.
|
|
40
|
+
*/
|
|
41
|
+
get parametersProcessed(): boolean;
|
|
37
42
|
/**
|
|
38
43
|
* If {@link CommandLineParameterProvider.defineCommandLineRemainder} was called,
|
|
39
44
|
* this object captures any remaining command line arguments after the recognized portion.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineParameterProvider.d.ts","sourceRoot":"","sources":["../../src/providers/CommandLineParameterProvider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,6BAA6B,EAC7B,iCAAiC,EACjC,0BAA0B,EAC1B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAChC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,oBAAoB,EAGrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,+BAA+B,EAAE,MAAM,+CAA+C,CAAC;AAChG,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;GAKG;AACH,8BAAsB,4BAA4B;IAChD,OAAO,CAAC,MAAM,CAAC,WAAW,CAAa;IAEvC,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,qBAAqB,CAAoC;
|
|
1
|
+
{"version":3,"file":"CommandLineParameterProvider.d.ts","sourceRoot":"","sources":["../../src/providers/CommandLineParameterProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
16
16
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
17
17
|
if (mod && mod.__esModule) return mod;
|
|
18
18
|
var result = {};
|
|
19
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
19
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
20
20
|
__setModuleDefault(result, mod);
|
|
21
21
|
return result;
|
|
22
22
|
};
|
|
@@ -44,6 +44,7 @@ class CommandLineParameterProvider {
|
|
|
44
44
|
constructor() {
|
|
45
45
|
this._parameters = [];
|
|
46
46
|
this._parametersByLongName = new Map();
|
|
47
|
+
this._parametersProcessed = false;
|
|
47
48
|
}
|
|
48
49
|
/**
|
|
49
50
|
* Returns a collection of the parameters that were defined for this object.
|
|
@@ -51,6 +52,12 @@ class CommandLineParameterProvider {
|
|
|
51
52
|
get parameters() {
|
|
52
53
|
return this._parameters;
|
|
53
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Informs the caller if the argparse data has been processed into parameters.
|
|
57
|
+
*/
|
|
58
|
+
get parametersProcessed() {
|
|
59
|
+
return this._parametersProcessed;
|
|
60
|
+
}
|
|
54
61
|
/**
|
|
55
62
|
* If {@link CommandLineParameterProvider.defineCommandLineRemainder} was called,
|
|
56
63
|
* this object captures any remaining command line arguments after the recognized portion.
|
|
@@ -279,6 +286,9 @@ class CommandLineParameterProvider {
|
|
|
279
286
|
}
|
|
280
287
|
/** @internal */
|
|
281
288
|
_processParsedData(data) {
|
|
289
|
+
if (this._parametersProcessed) {
|
|
290
|
+
throw new Error('Command Line Parser Data was already processed');
|
|
291
|
+
}
|
|
282
292
|
// Fill in the values for the parameters
|
|
283
293
|
for (const parameter of this._parameters) {
|
|
284
294
|
const value = data[parameter._parserKey]; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
@@ -287,6 +297,7 @@ class CommandLineParameterProvider {
|
|
|
287
297
|
if (this.remainder) {
|
|
288
298
|
this.remainder._setValue(data[argparse.Const.REMAINDER]);
|
|
289
299
|
}
|
|
300
|
+
this._parametersProcessed = true;
|
|
290
301
|
}
|
|
291
302
|
_generateKey() {
|
|
292
303
|
return 'key_' + (CommandLineParameterProvider._keyCounter++).toString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineParameterProvider.js","sourceRoot":"","sources":["../../src/providers/CommandLineParameterProvider.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport * as argparse from 'argparse';\r\nimport {\r\n ICommandLineChoiceDefinition,\r\n ICommandLineChoiceListDefinition,\r\n ICommandLineIntegerDefinition,\r\n ICommandLineIntegerListDefinition,\r\n ICommandLineFlagDefinition,\r\n ICommandLineStringDefinition,\r\n ICommandLineStringListDefinition,\r\n ICommandLineRemainderDefinition\r\n} from '../parameters/CommandLineDefinition';\r\nimport {\r\n CommandLineParameter,\r\n CommandLineParameterWithArgument,\r\n CommandLineParameterKind\r\n} from '../parameters/BaseClasses';\r\nimport { CommandLineChoiceParameter } from '../parameters/CommandLineChoiceParameter';\r\nimport { CommandLineChoiceListParameter } from '../parameters/CommandLineChoiceListParameter';\r\nimport { CommandLineIntegerParameter } from '../parameters/CommandLineIntegerParameter';\r\nimport { CommandLineIntegerListParameter } from '../parameters/CommandLineIntegerListParameter';\r\nimport { CommandLineFlagParameter } from '../parameters/CommandLineFlagParameter';\r\nimport { CommandLineStringParameter } from '../parameters/CommandLineStringParameter';\r\nimport { CommandLineStringListParameter } from '../parameters/CommandLineStringListParameter';\r\nimport { CommandLineRemainder } from '../parameters/CommandLineRemainder';\r\n\r\n/**\r\n * This is the argparse result data object\r\n * @internal\r\n */\r\nexport interface ICommandLineParserData {\r\n action: string;\r\n [key: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n}\r\n\r\n/**\r\n * This is the common base class for CommandLineAction and CommandLineParser\r\n * that provides functionality for defining command-line parameters.\r\n *\r\n * @public\r\n */\r\nexport abstract class CommandLineParameterProvider {\r\n private static _keyCounter: number = 0;\r\n\r\n private _parameters: CommandLineParameter[];\r\n private _parametersByLongName: Map<string, CommandLineParameter>;\r\n\r\n private _remainder: CommandLineRemainder | undefined;\r\n\r\n /** @internal */\r\n // Third party code should not inherit subclasses or call this constructor\r\n public constructor() {\r\n this._parameters = [];\r\n this._parametersByLongName = new Map<string, CommandLineParameter>();\r\n }\r\n\r\n /**\r\n * Returns a collection of the parameters that were defined for this object.\r\n */\r\n public get parameters(): ReadonlyArray<CommandLineParameter> {\r\n return this._parameters;\r\n }\r\n\r\n /**\r\n * If {@link CommandLineParameterProvider.defineCommandLineRemainder} was called,\r\n * this object captures any remaining command line arguments after the recognized portion.\r\n */\r\n public get remainder(): CommandLineRemainder | undefined {\r\n return this._remainder;\r\n }\r\n\r\n /**\r\n * Defines a command-line parameter whose value must be a string from a fixed set of\r\n * allowable choices (similar to an enum).\r\n *\r\n * @remarks\r\n * Example of a choice parameter:\r\n * ```\r\n * example-tool --log-level warn\r\n * ```\r\n */\r\n public defineChoiceParameter(definition: ICommandLineChoiceDefinition): CommandLineChoiceParameter {\r\n const parameter: CommandLineChoiceParameter = new CommandLineChoiceParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineChoiceParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getChoiceParameter(parameterLongName: string): CommandLineChoiceParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.Choice);\r\n }\r\n\r\n /**\r\n * Defines a command-line parameter whose value must be a string from a fixed set of\r\n * allowable choices (similar to an enum). The parameter can be specified multiple times to\r\n * build a list.\r\n *\r\n * @remarks\r\n * Example of a choice list parameter:\r\n * ```\r\n * example-tool --allow-color red --allow-color green\r\n * ```\r\n */\r\n public defineChoiceListParameter(\r\n definition: ICommandLineChoiceListDefinition\r\n ): CommandLineChoiceListParameter {\r\n const parameter: CommandLineChoiceListParameter = new CommandLineChoiceListParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineChoiceListParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getChoiceListParameter(parameterLongName: string): CommandLineChoiceListParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.ChoiceList);\r\n }\r\n\r\n /**\r\n * Defines a command-line switch whose boolean value is true if the switch is provided,\r\n * and false otherwise.\r\n *\r\n * @remarks\r\n * Example usage of a flag parameter:\r\n * ```\r\n * example-tool --debug\r\n * ```\r\n */\r\n public defineFlagParameter(definition: ICommandLineFlagDefinition): CommandLineFlagParameter {\r\n const parameter: CommandLineFlagParameter = new CommandLineFlagParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineFlagParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getFlagParameter(parameterLongName: string): CommandLineFlagParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.Flag);\r\n }\r\n\r\n /**\r\n * Defines a command-line parameter whose argument is an integer.\r\n *\r\n * @remarks\r\n * Example usage of an integer parameter:\r\n * ```\r\n * example-tool --max-attempts 5\r\n * ```\r\n */\r\n public defineIntegerParameter(definition: ICommandLineIntegerDefinition): CommandLineIntegerParameter {\r\n const parameter: CommandLineIntegerParameter = new CommandLineIntegerParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineIntegerParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getIntegerParameter(parameterLongName: string): CommandLineIntegerParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.Integer);\r\n }\r\n\r\n /**\r\n * Defines a command-line parameter whose argument is an integer. The parameter can be specified\r\n * multiple times to build a list.\r\n *\r\n * @remarks\r\n * Example usage of an integer list parameter:\r\n * ```\r\n * example-tool --avoid 4 --avoid 13\r\n * ```\r\n */\r\n public defineIntegerListParameter(\r\n definition: ICommandLineIntegerListDefinition\r\n ): CommandLineIntegerListParameter {\r\n const parameter: CommandLineIntegerListParameter = new CommandLineIntegerListParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineIntegerParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getIntegerListParameter(parameterLongName: string): CommandLineIntegerListParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.IntegerList);\r\n }\r\n /**\r\n * Defines a command-line parameter whose argument is a single text string.\r\n *\r\n * @remarks\r\n * Example usage of a string parameter:\r\n * ```\r\n * example-tool --message \"Hello, world!\"\r\n * ```\r\n */\r\n public defineStringParameter(definition: ICommandLineStringDefinition): CommandLineStringParameter {\r\n const parameter: CommandLineStringParameter = new CommandLineStringParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineStringParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getStringParameter(parameterLongName: string): CommandLineStringParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.String);\r\n }\r\n\r\n /**\r\n * Defines a command-line parameter whose argument is a single text string. The parameter can be\r\n * specified multiple times to build a list.\r\n *\r\n * @remarks\r\n * Example usage of a string list parameter:\r\n * ```\r\n * example-tool --add file1.txt --add file2.txt --add file3.txt\r\n * ```\r\n */\r\n public defineStringListParameter(\r\n definition: ICommandLineStringListDefinition\r\n ): CommandLineStringListParameter {\r\n const parameter: CommandLineStringListParameter = new CommandLineStringListParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Defines a rule that captures any remaining command line arguments after the recognized portion.\r\n *\r\n * @remarks\r\n * This feature is useful for commands that pass their arguments along to an external tool, relying on\r\n * that tool to perform validation. (It could also be used to parse parameters without any validation\r\n * or documentation, but that is not recommended.)\r\n *\r\n * Example of capturing the remainder after an optional flag parameter.\r\n * ```\r\n * example-tool --my-flag this is the remainder\r\n * ```\r\n *\r\n * In the \"--help\" documentation, the remainder rule will be represented as \"...\".\r\n */\r\n public defineCommandLineRemainder(definition: ICommandLineRemainderDefinition): CommandLineRemainder {\r\n if (this._remainder) {\r\n throw new Error('defineRemainingArguments() has already been called for this provider');\r\n }\r\n this._remainder = new CommandLineRemainder(definition);\r\n\r\n const argparseOptions: argparse.ArgumentOptions = {\r\n help: this._remainder.description,\r\n nargs: argparse.Const.REMAINDER,\r\n metavar: '\"...\"'\r\n };\r\n\r\n this._getArgumentParser().addArgument(argparse.Const.REMAINDER, argparseOptions);\r\n\r\n return this._remainder;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineStringListParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getStringListParameter(parameterLongName: string): CommandLineStringListParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.StringList);\r\n }\r\n\r\n /**\r\n * Generates the command-line help text.\r\n */\r\n public renderHelpText(): string {\r\n return this._getArgumentParser().formatHelp();\r\n }\r\n\r\n /**\r\n * Returns a object which maps the long name of each parameter in this.parameters\r\n * to the stringified form of its value. This is useful for logging telemetry, but\r\n * it is not the proper way of accessing parameters or their values.\r\n */\r\n public getParameterStringMap(): Record<string, string> {\r\n const parameterMap: Record<string, string> = {};\r\n for (const parameter of this.parameters) {\r\n switch (parameter.kind) {\r\n case CommandLineParameterKind.Flag:\r\n case CommandLineParameterKind.Choice:\r\n case CommandLineParameterKind.String:\r\n case CommandLineParameterKind.Integer:\r\n parameterMap[parameter.longName] = JSON.stringify(\r\n (\r\n parameter as\r\n | CommandLineFlagParameter\r\n | CommandLineIntegerParameter\r\n | CommandLineChoiceParameter\r\n | CommandLineStringParameter\r\n ).value\r\n );\r\n break;\r\n case CommandLineParameterKind.StringList:\r\n case CommandLineParameterKind.IntegerList:\r\n case CommandLineParameterKind.ChoiceList:\r\n const arrayValue: ReadonlyArray<string | number> | undefined = (\r\n parameter as\r\n | CommandLineIntegerListParameter\r\n | CommandLineStringListParameter\r\n | CommandLineChoiceListParameter\r\n ).values;\r\n parameterMap[parameter.longName] = arrayValue ? arrayValue.join(',') : '';\r\n break;\r\n }\r\n }\r\n return parameterMap;\r\n }\r\n\r\n /**\r\n * The child class should implement this hook to define its command-line parameters,\r\n * e.g. by calling defineFlagParameter().\r\n */\r\n protected abstract onDefineParameters(): void;\r\n\r\n /**\r\n * Retrieves the argparse object.\r\n * @internal\r\n */\r\n protected abstract _getArgumentParser(): argparse.ArgumentParser;\r\n\r\n /** @internal */\r\n protected _processParsedData(data: ICommandLineParserData): void {\r\n // Fill in the values for the parameters\r\n for (const parameter of this._parameters) {\r\n const value: any = data[parameter._parserKey!]; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n parameter._setValue(value);\r\n }\r\n\r\n if (this.remainder) {\r\n this.remainder._setValue(data[argparse.Const.REMAINDER]);\r\n }\r\n }\r\n\r\n private _generateKey(): string {\r\n return 'key_' + (CommandLineParameterProvider._keyCounter++).toString();\r\n }\r\n\r\n private _getParameter<T extends CommandLineParameter>(\r\n parameterLongName: string,\r\n expectedKind: CommandLineParameterKind\r\n ): T {\r\n const parameter: CommandLineParameter | undefined = this._parametersByLongName.get(parameterLongName);\r\n if (!parameter) {\r\n throw new Error(`The parameter \"${parameterLongName}\" is not defined`);\r\n }\r\n if (parameter.kind !== expectedKind) {\r\n throw new Error(\r\n `The parameter \"${parameterLongName}\" is of type \"${CommandLineParameterKind[parameter.kind]}\"` +\r\n ` whereas the caller was expecting \"${CommandLineParameterKind[expectedKind]}\".`\r\n );\r\n }\r\n return parameter as T;\r\n }\r\n\r\n private _defineParameter(parameter: CommandLineParameter): void {\r\n if (this._remainder) {\r\n throw new Error(\r\n 'defineCommandLineRemainder() was already called for this provider;' +\r\n ' no further parameters can be defined'\r\n );\r\n }\r\n\r\n const names: string[] = [];\r\n if (parameter.shortName) {\r\n names.push(parameter.shortName);\r\n }\r\n names.push(parameter.longName);\r\n\r\n parameter._parserKey = this._generateKey();\r\n\r\n let finalDescription: string = parameter.description;\r\n\r\n const supplementaryNotes: string[] = [];\r\n parameter._getSupplementaryNotes(supplementaryNotes);\r\n if (supplementaryNotes.length > 0) {\r\n // If they left the period off the end of their sentence, then add one.\r\n if (finalDescription.match(/[a-z0-9]\"?\\s*$/i)) {\r\n finalDescription = finalDescription.trimRight() + '.';\r\n }\r\n // Append the supplementary text\r\n finalDescription += ' ' + supplementaryNotes.join(' ');\r\n }\r\n\r\n // NOTE: Our \"environmentVariable\" feature takes precedence over argparse's \"defaultValue\",\r\n // so we have to reimplement that feature.\r\n const argparseOptions: argparse.ArgumentOptions = {\r\n help: finalDescription,\r\n dest: parameter._parserKey,\r\n metavar: (parameter as CommandLineParameterWithArgument).argumentName || undefined,\r\n required: parameter.required\r\n };\r\n\r\n switch (parameter.kind) {\r\n case CommandLineParameterKind.Choice: {\r\n const choiceParameter: CommandLineChoiceParameter = parameter as CommandLineChoiceParameter;\r\n argparseOptions.choices = choiceParameter.alternatives as string[];\r\n break;\r\n }\r\n case CommandLineParameterKind.ChoiceList: {\r\n const choiceParameter: CommandLineChoiceListParameter = parameter as CommandLineChoiceListParameter;\r\n argparseOptions.choices = choiceParameter.alternatives as string[];\r\n argparseOptions.action = 'append';\r\n break;\r\n }\r\n case CommandLineParameterKind.Flag:\r\n argparseOptions.action = 'storeTrue';\r\n break;\r\n case CommandLineParameterKind.Integer:\r\n argparseOptions.type = 'int';\r\n break;\r\n case CommandLineParameterKind.IntegerList:\r\n argparseOptions.type = 'int';\r\n argparseOptions.action = 'append';\r\n break;\r\n case CommandLineParameterKind.String:\r\n break;\r\n case CommandLineParameterKind.StringList:\r\n argparseOptions.action = 'append';\r\n break;\r\n }\r\n\r\n const argumentParser: argparse.ArgumentParser = this._getArgumentParser();\r\n argumentParser.addArgument(names, { ...argparseOptions });\r\n if (parameter.undocumentedSynonyms && parameter.undocumentedSynonyms.length > 0) {\r\n argumentParser.addArgument(parameter.undocumentedSynonyms, {\r\n ...argparseOptions,\r\n help: argparse.Const.SUPPRESS\r\n });\r\n }\r\n\r\n this._parameters.push(parameter);\r\n this._parametersByLongName.set(parameter.longName, parameter);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"CommandLineParameterProvider.js","sourceRoot":"","sources":["../../src/providers/CommandLineParameterProvider.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport * as argparse from 'argparse';\r\nimport {\r\n ICommandLineChoiceDefinition,\r\n ICommandLineChoiceListDefinition,\r\n ICommandLineIntegerDefinition,\r\n ICommandLineIntegerListDefinition,\r\n ICommandLineFlagDefinition,\r\n ICommandLineStringDefinition,\r\n ICommandLineStringListDefinition,\r\n ICommandLineRemainderDefinition\r\n} from '../parameters/CommandLineDefinition';\r\nimport {\r\n CommandLineParameter,\r\n CommandLineParameterWithArgument,\r\n CommandLineParameterKind\r\n} from '../parameters/BaseClasses';\r\nimport { CommandLineChoiceParameter } from '../parameters/CommandLineChoiceParameter';\r\nimport { CommandLineChoiceListParameter } from '../parameters/CommandLineChoiceListParameter';\r\nimport { CommandLineIntegerParameter } from '../parameters/CommandLineIntegerParameter';\r\nimport { CommandLineIntegerListParameter } from '../parameters/CommandLineIntegerListParameter';\r\nimport { CommandLineFlagParameter } from '../parameters/CommandLineFlagParameter';\r\nimport { CommandLineStringParameter } from '../parameters/CommandLineStringParameter';\r\nimport { CommandLineStringListParameter } from '../parameters/CommandLineStringListParameter';\r\nimport { CommandLineRemainder } from '../parameters/CommandLineRemainder';\r\n\r\n/**\r\n * This is the argparse result data object\r\n * @internal\r\n */\r\nexport interface ICommandLineParserData {\r\n action: string;\r\n [key: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n}\r\n\r\n/**\r\n * This is the common base class for CommandLineAction and CommandLineParser\r\n * that provides functionality for defining command-line parameters.\r\n *\r\n * @public\r\n */\r\nexport abstract class CommandLineParameterProvider {\r\n private static _keyCounter: number = 0;\r\n\r\n private _parameters: CommandLineParameter[];\r\n private _parametersByLongName: Map<string, CommandLineParameter>;\r\n private _parametersProcessed: boolean;\r\n private _remainder: CommandLineRemainder | undefined;\r\n\r\n /** @internal */\r\n // Third party code should not inherit subclasses or call this constructor\r\n public constructor() {\r\n this._parameters = [];\r\n this._parametersByLongName = new Map<string, CommandLineParameter>();\r\n this._parametersProcessed = false;\r\n }\r\n\r\n /**\r\n * Returns a collection of the parameters that were defined for this object.\r\n */\r\n public get parameters(): ReadonlyArray<CommandLineParameter> {\r\n return this._parameters;\r\n }\r\n\r\n /**\r\n * Informs the caller if the argparse data has been processed into parameters.\r\n */\r\n public get parametersProcessed(): boolean {\r\n return this._parametersProcessed;\r\n }\r\n\r\n /**\r\n * If {@link CommandLineParameterProvider.defineCommandLineRemainder} was called,\r\n * this object captures any remaining command line arguments after the recognized portion.\r\n */\r\n public get remainder(): CommandLineRemainder | undefined {\r\n return this._remainder;\r\n }\r\n\r\n /**\r\n * Defines a command-line parameter whose value must be a string from a fixed set of\r\n * allowable choices (similar to an enum).\r\n *\r\n * @remarks\r\n * Example of a choice parameter:\r\n * ```\r\n * example-tool --log-level warn\r\n * ```\r\n */\r\n public defineChoiceParameter(definition: ICommandLineChoiceDefinition): CommandLineChoiceParameter {\r\n const parameter: CommandLineChoiceParameter = new CommandLineChoiceParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineChoiceParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getChoiceParameter(parameterLongName: string): CommandLineChoiceParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.Choice);\r\n }\r\n\r\n /**\r\n * Defines a command-line parameter whose value must be a string from a fixed set of\r\n * allowable choices (similar to an enum). The parameter can be specified multiple times to\r\n * build a list.\r\n *\r\n * @remarks\r\n * Example of a choice list parameter:\r\n * ```\r\n * example-tool --allow-color red --allow-color green\r\n * ```\r\n */\r\n public defineChoiceListParameter(\r\n definition: ICommandLineChoiceListDefinition\r\n ): CommandLineChoiceListParameter {\r\n const parameter: CommandLineChoiceListParameter = new CommandLineChoiceListParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineChoiceListParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getChoiceListParameter(parameterLongName: string): CommandLineChoiceListParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.ChoiceList);\r\n }\r\n\r\n /**\r\n * Defines a command-line switch whose boolean value is true if the switch is provided,\r\n * and false otherwise.\r\n *\r\n * @remarks\r\n * Example usage of a flag parameter:\r\n * ```\r\n * example-tool --debug\r\n * ```\r\n */\r\n public defineFlagParameter(definition: ICommandLineFlagDefinition): CommandLineFlagParameter {\r\n const parameter: CommandLineFlagParameter = new CommandLineFlagParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineFlagParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getFlagParameter(parameterLongName: string): CommandLineFlagParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.Flag);\r\n }\r\n\r\n /**\r\n * Defines a command-line parameter whose argument is an integer.\r\n *\r\n * @remarks\r\n * Example usage of an integer parameter:\r\n * ```\r\n * example-tool --max-attempts 5\r\n * ```\r\n */\r\n public defineIntegerParameter(definition: ICommandLineIntegerDefinition): CommandLineIntegerParameter {\r\n const parameter: CommandLineIntegerParameter = new CommandLineIntegerParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineIntegerParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getIntegerParameter(parameterLongName: string): CommandLineIntegerParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.Integer);\r\n }\r\n\r\n /**\r\n * Defines a command-line parameter whose argument is an integer. The parameter can be specified\r\n * multiple times to build a list.\r\n *\r\n * @remarks\r\n * Example usage of an integer list parameter:\r\n * ```\r\n * example-tool --avoid 4 --avoid 13\r\n * ```\r\n */\r\n public defineIntegerListParameter(\r\n definition: ICommandLineIntegerListDefinition\r\n ): CommandLineIntegerListParameter {\r\n const parameter: CommandLineIntegerListParameter = new CommandLineIntegerListParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineIntegerParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getIntegerListParameter(parameterLongName: string): CommandLineIntegerListParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.IntegerList);\r\n }\r\n /**\r\n * Defines a command-line parameter whose argument is a single text string.\r\n *\r\n * @remarks\r\n * Example usage of a string parameter:\r\n * ```\r\n * example-tool --message \"Hello, world!\"\r\n * ```\r\n */\r\n public defineStringParameter(definition: ICommandLineStringDefinition): CommandLineStringParameter {\r\n const parameter: CommandLineStringParameter = new CommandLineStringParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineStringParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getStringParameter(parameterLongName: string): CommandLineStringParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.String);\r\n }\r\n\r\n /**\r\n * Defines a command-line parameter whose argument is a single text string. The parameter can be\r\n * specified multiple times to build a list.\r\n *\r\n * @remarks\r\n * Example usage of a string list parameter:\r\n * ```\r\n * example-tool --add file1.txt --add file2.txt --add file3.txt\r\n * ```\r\n */\r\n public defineStringListParameter(\r\n definition: ICommandLineStringListDefinition\r\n ): CommandLineStringListParameter {\r\n const parameter: CommandLineStringListParameter = new CommandLineStringListParameter(definition);\r\n this._defineParameter(parameter);\r\n return parameter;\r\n }\r\n\r\n /**\r\n * Defines a rule that captures any remaining command line arguments after the recognized portion.\r\n *\r\n * @remarks\r\n * This feature is useful for commands that pass their arguments along to an external tool, relying on\r\n * that tool to perform validation. (It could also be used to parse parameters without any validation\r\n * or documentation, but that is not recommended.)\r\n *\r\n * Example of capturing the remainder after an optional flag parameter.\r\n * ```\r\n * example-tool --my-flag this is the remainder\r\n * ```\r\n *\r\n * In the \"--help\" documentation, the remainder rule will be represented as \"...\".\r\n */\r\n public defineCommandLineRemainder(definition: ICommandLineRemainderDefinition): CommandLineRemainder {\r\n if (this._remainder) {\r\n throw new Error('defineRemainingArguments() has already been called for this provider');\r\n }\r\n this._remainder = new CommandLineRemainder(definition);\r\n\r\n const argparseOptions: argparse.ArgumentOptions = {\r\n help: this._remainder.description,\r\n nargs: argparse.Const.REMAINDER,\r\n metavar: '\"...\"'\r\n };\r\n\r\n this._getArgumentParser().addArgument(argparse.Const.REMAINDER, argparseOptions);\r\n\r\n return this._remainder;\r\n }\r\n\r\n /**\r\n * Returns the CommandLineStringListParameter with the specified long name.\r\n * @remarks\r\n * This method throws an exception if the parameter is not defined.\r\n */\r\n public getStringListParameter(parameterLongName: string): CommandLineStringListParameter {\r\n return this._getParameter(parameterLongName, CommandLineParameterKind.StringList);\r\n }\r\n\r\n /**\r\n * Generates the command-line help text.\r\n */\r\n public renderHelpText(): string {\r\n return this._getArgumentParser().formatHelp();\r\n }\r\n\r\n /**\r\n * Returns a object which maps the long name of each parameter in this.parameters\r\n * to the stringified form of its value. This is useful for logging telemetry, but\r\n * it is not the proper way of accessing parameters or their values.\r\n */\r\n public getParameterStringMap(): Record<string, string> {\r\n const parameterMap: Record<string, string> = {};\r\n for (const parameter of this.parameters) {\r\n switch (parameter.kind) {\r\n case CommandLineParameterKind.Flag:\r\n case CommandLineParameterKind.Choice:\r\n case CommandLineParameterKind.String:\r\n case CommandLineParameterKind.Integer:\r\n parameterMap[parameter.longName] = JSON.stringify(\r\n (\r\n parameter as\r\n | CommandLineFlagParameter\r\n | CommandLineIntegerParameter\r\n | CommandLineChoiceParameter\r\n | CommandLineStringParameter\r\n ).value\r\n );\r\n break;\r\n case CommandLineParameterKind.StringList:\r\n case CommandLineParameterKind.IntegerList:\r\n case CommandLineParameterKind.ChoiceList:\r\n const arrayValue: ReadonlyArray<string | number> | undefined = (\r\n parameter as\r\n | CommandLineIntegerListParameter\r\n | CommandLineStringListParameter\r\n | CommandLineChoiceListParameter\r\n ).values;\r\n parameterMap[parameter.longName] = arrayValue ? arrayValue.join(',') : '';\r\n break;\r\n }\r\n }\r\n return parameterMap;\r\n }\r\n\r\n /**\r\n * The child class should implement this hook to define its command-line parameters,\r\n * e.g. by calling defineFlagParameter().\r\n */\r\n protected abstract onDefineParameters(): void;\r\n\r\n /**\r\n * Retrieves the argparse object.\r\n * @internal\r\n */\r\n protected abstract _getArgumentParser(): argparse.ArgumentParser;\r\n\r\n /** @internal */\r\n protected _processParsedData(data: ICommandLineParserData): void {\r\n if (this._parametersProcessed) {\r\n throw new Error('Command Line Parser Data was already processed');\r\n }\r\n\r\n // Fill in the values for the parameters\r\n for (const parameter of this._parameters) {\r\n const value: any = data[parameter._parserKey!]; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n parameter._setValue(value);\r\n }\r\n\r\n if (this.remainder) {\r\n this.remainder._setValue(data[argparse.Const.REMAINDER]);\r\n }\r\n\r\n this._parametersProcessed = true;\r\n }\r\n\r\n private _generateKey(): string {\r\n return 'key_' + (CommandLineParameterProvider._keyCounter++).toString();\r\n }\r\n\r\n private _getParameter<T extends CommandLineParameter>(\r\n parameterLongName: string,\r\n expectedKind: CommandLineParameterKind\r\n ): T {\r\n const parameter: CommandLineParameter | undefined = this._parametersByLongName.get(parameterLongName);\r\n if (!parameter) {\r\n throw new Error(`The parameter \"${parameterLongName}\" is not defined`);\r\n }\r\n if (parameter.kind !== expectedKind) {\r\n throw new Error(\r\n `The parameter \"${parameterLongName}\" is of type \"${CommandLineParameterKind[parameter.kind]}\"` +\r\n ` whereas the caller was expecting \"${CommandLineParameterKind[expectedKind]}\".`\r\n );\r\n }\r\n return parameter as T;\r\n }\r\n\r\n private _defineParameter(parameter: CommandLineParameter): void {\r\n if (this._remainder) {\r\n throw new Error(\r\n 'defineCommandLineRemainder() was already called for this provider;' +\r\n ' no further parameters can be defined'\r\n );\r\n }\r\n\r\n const names: string[] = [];\r\n if (parameter.shortName) {\r\n names.push(parameter.shortName);\r\n }\r\n names.push(parameter.longName);\r\n\r\n parameter._parserKey = this._generateKey();\r\n\r\n let finalDescription: string = parameter.description;\r\n\r\n const supplementaryNotes: string[] = [];\r\n parameter._getSupplementaryNotes(supplementaryNotes);\r\n if (supplementaryNotes.length > 0) {\r\n // If they left the period off the end of their sentence, then add one.\r\n if (finalDescription.match(/[a-z0-9]\"?\\s*$/i)) {\r\n finalDescription = finalDescription.trimRight() + '.';\r\n }\r\n // Append the supplementary text\r\n finalDescription += ' ' + supplementaryNotes.join(' ');\r\n }\r\n\r\n // NOTE: Our \"environmentVariable\" feature takes precedence over argparse's \"defaultValue\",\r\n // so we have to reimplement that feature.\r\n const argparseOptions: argparse.ArgumentOptions = {\r\n help: finalDescription,\r\n dest: parameter._parserKey,\r\n metavar: (parameter as CommandLineParameterWithArgument).argumentName || undefined,\r\n required: parameter.required\r\n };\r\n\r\n switch (parameter.kind) {\r\n case CommandLineParameterKind.Choice: {\r\n const choiceParameter: CommandLineChoiceParameter = parameter as CommandLineChoiceParameter;\r\n argparseOptions.choices = choiceParameter.alternatives as string[];\r\n break;\r\n }\r\n case CommandLineParameterKind.ChoiceList: {\r\n const choiceParameter: CommandLineChoiceListParameter = parameter as CommandLineChoiceListParameter;\r\n argparseOptions.choices = choiceParameter.alternatives as string[];\r\n argparseOptions.action = 'append';\r\n break;\r\n }\r\n case CommandLineParameterKind.Flag:\r\n argparseOptions.action = 'storeTrue';\r\n break;\r\n case CommandLineParameterKind.Integer:\r\n argparseOptions.type = 'int';\r\n break;\r\n case CommandLineParameterKind.IntegerList:\r\n argparseOptions.type = 'int';\r\n argparseOptions.action = 'append';\r\n break;\r\n case CommandLineParameterKind.String:\r\n break;\r\n case CommandLineParameterKind.StringList:\r\n argparseOptions.action = 'append';\r\n break;\r\n }\r\n\r\n const argumentParser: argparse.ArgumentParser = this._getArgumentParser();\r\n argumentParser.addArgument(names, { ...argparseOptions });\r\n if (parameter.undocumentedSynonyms && parameter.undocumentedSynonyms.length > 0) {\r\n argumentParser.addArgument(parameter.undocumentedSynonyms, {\r\n ...argparseOptions,\r\n help: argparse.Const.SUPPRESS\r\n });\r\n }\r\n\r\n this._parameters.push(parameter);\r\n this._parametersByLongName.set(parameter.longName, parameter);\r\n }\r\n}\r\n"]}
|
|
@@ -16,7 +16,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
16
16
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
17
17
|
if (mod && mod.__esModule) return mod;
|
|
18
18
|
var result = {};
|
|
19
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
19
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
20
20
|
__setModuleDefault(result, mod);
|
|
21
21
|
return result;
|
|
22
22
|
};
|
|
@@ -165,7 +165,7 @@ class TabCompleteAction extends CommandLineAction_1.CommandLineAction {
|
|
|
165
165
|
yield* this._globalParameters.keys();
|
|
166
166
|
}
|
|
167
167
|
tokenizeCommandLine(commandLine) {
|
|
168
|
-
return string_argv_1.default(commandLine);
|
|
168
|
+
return (0, string_argv_1.default)(commandLine);
|
|
169
169
|
}
|
|
170
170
|
async _getParameterValueCompletions(parameter) {
|
|
171
171
|
let choiceParameterValues = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabCompletionAction.js","sourceRoot":"","sources":["../../src/providers/TabCompletionAction.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport stringArgv from 'string-argv';\r\n\r\nimport { CommandLineIntegerParameter } from '../parameters/CommandLineIntegerParameter';\r\nimport { CommandLineStringParameter } from '../parameters/CommandLineStringParameter';\r\nimport {\r\n CommandLineParameterKind,\r\n CommandLineParameter,\r\n CommandLineParameterWithArgument\r\n} from '../parameters/BaseClasses';\r\nimport { CommandLineAction } from './CommandLineAction';\r\nimport { CommandLineChoiceParameter } from '..';\r\nimport { CommandLineConstants } from '../Constants';\r\n\r\nconst DEFAULT_WORD_TO_AUTOCOMPLETE: string = '';\r\nconst DEFAULT_POSITION: number = 0;\r\n\r\nexport class TabCompleteAction extends CommandLineAction {\r\n private _wordToCompleteParameter!: CommandLineStringParameter;\r\n private _positionParameter!: CommandLineIntegerParameter;\r\n private readonly _actions: Map<string, Map<string, CommandLineParameter>>;\r\n private readonly _globalParameters: Map<string, CommandLineParameter>;\r\n\r\n public constructor(\r\n actions: ReadonlyArray<CommandLineAction>,\r\n globalParameters: ReadonlyArray<CommandLineParameter>\r\n ) {\r\n super({\r\n actionName: CommandLineConstants.TabCompletionActionName,\r\n summary: 'Provides tab completion.',\r\n documentation: 'Provides tab completion.'\r\n });\r\n\r\n this._actions = new Map<string, Map<string, CommandLineParameter>>();\r\n for (const action of actions) {\r\n const parameterNameToParameterInfoMap: Map<string, CommandLineParameter> = new Map<\r\n string,\r\n CommandLineParameter\r\n >();\r\n for (const parameter of action.parameters) {\r\n parameterNameToParameterInfoMap.set(parameter.longName, parameter);\r\n if (parameter.shortName) {\r\n parameterNameToParameterInfoMap.set(parameter.shortName, parameter);\r\n }\r\n }\r\n this._actions.set(action.actionName, parameterNameToParameterInfoMap);\r\n }\r\n\r\n this._globalParameters = new Map<string, CommandLineParameter>();\r\n for (const parameter of globalParameters) {\r\n this._globalParameters.set(parameter.longName, parameter);\r\n if (parameter.shortName) {\r\n this._globalParameters.set(parameter.shortName, parameter);\r\n }\r\n }\r\n }\r\n\r\n protected onDefineParameters(): void {\r\n this._wordToCompleteParameter = this.defineStringParameter({\r\n parameterLongName: '--word',\r\n argumentName: 'WORD',\r\n description: `The word to complete.`,\r\n defaultValue: DEFAULT_WORD_TO_AUTOCOMPLETE\r\n });\r\n\r\n this._positionParameter = this.defineIntegerParameter({\r\n parameterLongName: '--position',\r\n argumentName: 'INDEX',\r\n description: `The position in the word to be completed.`,\r\n defaultValue: DEFAULT_POSITION\r\n });\r\n }\r\n\r\n protected async onExecute(): Promise<void> {\r\n const commandLine: string = this._wordToCompleteParameter.value || '';\r\n const caretPosition: number = this._positionParameter.value || (commandLine && commandLine.length) || 0;\r\n\r\n for await (const value of this.getCompletions(commandLine, caretPosition)) {\r\n console.log(value);\r\n }\r\n }\r\n\r\n public async *getCompletions(\r\n commandLine: string,\r\n caretPosition: number = commandLine.length\r\n ): AsyncIterable<string> {\r\n const actions: Map<string, Map<string, CommandLineParameter>> = this._actions;\r\n\r\n if (!commandLine || !caretPosition) {\r\n yield* this._getAllActions();\r\n return;\r\n }\r\n\r\n const tokens: string[] = Array.from(this.tokenizeCommandLine(commandLine));\r\n\r\n // offset arguments by the number of global params in the input\r\n const globalParameterOffset: number = this._getGlobalParameterOffset(tokens);\r\n\r\n if (tokens.length < 2 + globalParameterOffset) {\r\n yield* this._getAllActions();\r\n return;\r\n }\r\n\r\n const lastToken: string = tokens[tokens.length - 1];\r\n const secondLastToken: string = tokens[tokens.length - 2];\r\n\r\n const completePartialWord: boolean = caretPosition === commandLine.length;\r\n\r\n if (completePartialWord && tokens.length === 2 + globalParameterOffset) {\r\n for (const actionName of actions.keys()) {\r\n if (actionName.indexOf(tokens[1 + globalParameterOffset]) === 0) {\r\n yield actionName;\r\n }\r\n }\r\n } else {\r\n for (const actionName of actions.keys()) {\r\n if (actionName === tokens[1 + globalParameterOffset]) {\r\n const parameterNameMap: Map<string, CommandLineParameter> = actions.get(actionName)!;\r\n\r\n const parameterNames: string[] = Array.from(parameterNameMap.keys());\r\n\r\n if (completePartialWord) {\r\n for (const parameterName of parameterNames) {\r\n if (parameterName === secondLastToken) {\r\n const values: string[] = await this._getParameterValueCompletions(\r\n parameterNameMap.get(parameterName)!\r\n );\r\n if (values.length > 0) {\r\n yield* this._completeParameterValues(values, lastToken);\r\n return;\r\n }\r\n }\r\n }\r\n yield* this._completeParameterValues(parameterNames, lastToken);\r\n } else {\r\n for (const parameterName of parameterNames) {\r\n if (parameterName === lastToken) {\r\n const values: string[] = await this._getParameterValueCompletions(\r\n parameterNameMap.get(parameterName)!\r\n );\r\n if (values.length > 0) {\r\n yield* values;\r\n return;\r\n }\r\n }\r\n }\r\n for (const parameterName of parameterNames) {\r\n if (\r\n parameterName === lastToken &&\r\n parameterNameMap.get(parameterName)!.kind !== CommandLineParameterKind.Flag\r\n ) {\r\n // The parameter is expecting a value, so don't suggest parameter names again\r\n return;\r\n }\r\n }\r\n\r\n yield* parameterNames;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private *_getAllActions(): IterableIterator<string> {\r\n yield* this._actions.keys();\r\n yield* this._globalParameters.keys();\r\n }\r\n\r\n public tokenizeCommandLine(commandLine: string): string[] {\r\n return stringArgv(commandLine);\r\n }\r\n\r\n private async _getParameterValueCompletions(parameter: CommandLineParameter): Promise<string[]> {\r\n let choiceParameterValues: string[] = [];\r\n if (parameter.kind === CommandLineParameterKind.Choice) {\r\n choiceParameterValues = (parameter as CommandLineChoiceParameter).alternatives as string[];\r\n } else if (parameter.kind !== CommandLineParameterKind.Flag) {\r\n let parameterWithArgumentOrChoices:\r\n | CommandLineParameterWithArgument\r\n | CommandLineChoiceParameter\r\n | undefined = undefined;\r\n if (parameter instanceof CommandLineParameterWithArgument) {\r\n parameterWithArgumentOrChoices = parameter as CommandLineParameterWithArgument;\r\n } else if (parameter instanceof CommandLineChoiceParameter) {\r\n parameterWithArgumentOrChoices = parameter as CommandLineChoiceParameter;\r\n }\r\n if (parameterWithArgumentOrChoices && parameterWithArgumentOrChoices.completions) {\r\n choiceParameterValues = await parameterWithArgumentOrChoices.completions();\r\n }\r\n }\r\n\r\n return choiceParameterValues;\r\n }\r\n\r\n private _getGlobalParameterOffset(tokens: string[]): number {\r\n const globalParameters: Map<string, CommandLineParameter> = this._globalParameters;\r\n let count: number = 0;\r\n\r\n outer: for (let i: number = 1; i < tokens.length; i++) {\r\n for (const globalParameter of globalParameters.values()) {\r\n if (tokens[i] !== globalParameter.longName && tokens[i] !== globalParameter.shortName) {\r\n break outer;\r\n }\r\n }\r\n count++;\r\n }\r\n\r\n return count;\r\n }\r\n\r\n private *_completeParameterValues(\r\n choiceParameterValues: string[],\r\n lastToken: string\r\n ): IterableIterator<string> {\r\n for (const choiceParameterValue of choiceParameterValues) {\r\n if (choiceParameterValue.indexOf(lastToken) === 0) {\r\n yield choiceParameterValue;\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"TabCompletionAction.js","sourceRoot":"","sources":["../../src/providers/TabCompletionAction.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport stringArgv from 'string-argv';\r\n\r\nimport { CommandLineIntegerParameter } from '../parameters/CommandLineIntegerParameter';\r\nimport { CommandLineStringParameter } from '../parameters/CommandLineStringParameter';\r\nimport {\r\n CommandLineParameterKind,\r\n CommandLineParameter,\r\n CommandLineParameterWithArgument\r\n} from '../parameters/BaseClasses';\r\nimport { CommandLineAction } from './CommandLineAction';\r\nimport { CommandLineChoiceParameter } from '..';\r\nimport { CommandLineConstants } from '../Constants';\r\n\r\nconst DEFAULT_WORD_TO_AUTOCOMPLETE: string = '';\r\nconst DEFAULT_POSITION: number = 0;\r\n\r\nexport class TabCompleteAction extends CommandLineAction {\r\n private _wordToCompleteParameter!: CommandLineStringParameter;\r\n private _positionParameter!: CommandLineIntegerParameter;\r\n private readonly _actions: Map<string, Map<string, CommandLineParameter>>;\r\n private readonly _globalParameters: Map<string, CommandLineParameter>;\r\n\r\n public constructor(\r\n actions: ReadonlyArray<CommandLineAction>,\r\n globalParameters: ReadonlyArray<CommandLineParameter>\r\n ) {\r\n super({\r\n actionName: CommandLineConstants.TabCompletionActionName,\r\n summary: 'Provides tab completion.',\r\n documentation: 'Provides tab completion.'\r\n });\r\n\r\n this._actions = new Map<string, Map<string, CommandLineParameter>>();\r\n for (const action of actions) {\r\n const parameterNameToParameterInfoMap: Map<string, CommandLineParameter> = new Map<\r\n string,\r\n CommandLineParameter\r\n >();\r\n for (const parameter of action.parameters) {\r\n parameterNameToParameterInfoMap.set(parameter.longName, parameter);\r\n if (parameter.shortName) {\r\n parameterNameToParameterInfoMap.set(parameter.shortName, parameter);\r\n }\r\n }\r\n this._actions.set(action.actionName, parameterNameToParameterInfoMap);\r\n }\r\n\r\n this._globalParameters = new Map<string, CommandLineParameter>();\r\n for (const parameter of globalParameters) {\r\n this._globalParameters.set(parameter.longName, parameter);\r\n if (parameter.shortName) {\r\n this._globalParameters.set(parameter.shortName, parameter);\r\n }\r\n }\r\n }\r\n\r\n protected onDefineParameters(): void {\r\n this._wordToCompleteParameter = this.defineStringParameter({\r\n parameterLongName: '--word',\r\n argumentName: 'WORD',\r\n description: `The word to complete.`,\r\n defaultValue: DEFAULT_WORD_TO_AUTOCOMPLETE\r\n });\r\n\r\n this._positionParameter = this.defineIntegerParameter({\r\n parameterLongName: '--position',\r\n argumentName: 'INDEX',\r\n description: `The position in the word to be completed.`,\r\n defaultValue: DEFAULT_POSITION\r\n });\r\n }\r\n\r\n protected async onExecute(): Promise<void> {\r\n const commandLine: string = this._wordToCompleteParameter.value || '';\r\n const caretPosition: number = this._positionParameter.value || (commandLine && commandLine.length) || 0;\r\n\r\n for await (const value of this.getCompletions(commandLine, caretPosition)) {\r\n console.log(value);\r\n }\r\n }\r\n\r\n public async *getCompletions(\r\n commandLine: string,\r\n caretPosition: number = commandLine.length\r\n ): AsyncIterable<string> {\r\n const actions: Map<string, Map<string, CommandLineParameter>> = this._actions;\r\n\r\n if (!commandLine || !caretPosition) {\r\n yield* this._getAllActions();\r\n return;\r\n }\r\n\r\n const tokens: string[] = Array.from(this.tokenizeCommandLine(commandLine));\r\n\r\n // offset arguments by the number of global params in the input\r\n const globalParameterOffset: number = this._getGlobalParameterOffset(tokens);\r\n\r\n if (tokens.length < 2 + globalParameterOffset) {\r\n yield* this._getAllActions();\r\n return;\r\n }\r\n\r\n const lastToken: string = tokens[tokens.length - 1];\r\n const secondLastToken: string = tokens[tokens.length - 2];\r\n\r\n const completePartialWord: boolean = caretPosition === commandLine.length;\r\n\r\n if (completePartialWord && tokens.length === 2 + globalParameterOffset) {\r\n for (const actionName of actions.keys()) {\r\n if (actionName.indexOf(tokens[1 + globalParameterOffset]) === 0) {\r\n yield actionName;\r\n }\r\n }\r\n } else {\r\n for (const actionName of actions.keys()) {\r\n if (actionName === tokens[1 + globalParameterOffset]) {\r\n const parameterNameMap: Map<string, CommandLineParameter> = actions.get(actionName)!;\r\n\r\n const parameterNames: string[] = Array.from(parameterNameMap.keys());\r\n\r\n if (completePartialWord) {\r\n for (const parameterName of parameterNames) {\r\n if (parameterName === secondLastToken) {\r\n const values: string[] = await this._getParameterValueCompletions(\r\n parameterNameMap.get(parameterName)!\r\n );\r\n if (values.length > 0) {\r\n yield* this._completeParameterValues(values, lastToken);\r\n return;\r\n }\r\n }\r\n }\r\n yield* this._completeParameterValues(parameterNames, lastToken);\r\n } else {\r\n for (const parameterName of parameterNames) {\r\n if (parameterName === lastToken) {\r\n const values: string[] = await this._getParameterValueCompletions(\r\n parameterNameMap.get(parameterName)!\r\n );\r\n if (values.length > 0) {\r\n yield* values;\r\n return;\r\n }\r\n }\r\n }\r\n for (const parameterName of parameterNames) {\r\n if (\r\n parameterName === lastToken &&\r\n parameterNameMap.get(parameterName)!.kind !== CommandLineParameterKind.Flag\r\n ) {\r\n // The parameter is expecting a value, so don't suggest parameter names again\r\n return;\r\n }\r\n }\r\n\r\n yield* parameterNames;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private *_getAllActions(): IterableIterator<string> {\r\n yield* this._actions.keys();\r\n yield* this._globalParameters.keys();\r\n }\r\n\r\n public tokenizeCommandLine(commandLine: string): string[] {\r\n return stringArgv(commandLine);\r\n }\r\n\r\n private async _getParameterValueCompletions(parameter: CommandLineParameter): Promise<string[]> {\r\n let choiceParameterValues: string[] = [];\r\n if (parameter.kind === CommandLineParameterKind.Choice) {\r\n choiceParameterValues = (parameter as CommandLineChoiceParameter).alternatives as string[];\r\n } else if (parameter.kind !== CommandLineParameterKind.Flag) {\r\n let parameterWithArgumentOrChoices:\r\n | CommandLineParameterWithArgument\r\n | CommandLineChoiceParameter\r\n | undefined = undefined;\r\n if (parameter instanceof CommandLineParameterWithArgument) {\r\n parameterWithArgumentOrChoices = parameter as CommandLineParameterWithArgument;\r\n } else if (parameter instanceof CommandLineChoiceParameter) {\r\n parameterWithArgumentOrChoices = parameter as CommandLineChoiceParameter;\r\n }\r\n if (parameterWithArgumentOrChoices && parameterWithArgumentOrChoices.completions) {\r\n choiceParameterValues = await parameterWithArgumentOrChoices.completions();\r\n }\r\n }\r\n\r\n return choiceParameterValues;\r\n }\r\n\r\n private _getGlobalParameterOffset(tokens: string[]): number {\r\n const globalParameters: Map<string, CommandLineParameter> = this._globalParameters;\r\n let count: number = 0;\r\n\r\n outer: for (let i: number = 1; i < tokens.length; i++) {\r\n for (const globalParameter of globalParameters.values()) {\r\n if (tokens[i] !== globalParameter.longName && tokens[i] !== globalParameter.shortName) {\r\n break outer;\r\n }\r\n }\r\n count++;\r\n }\r\n\r\n return count;\r\n }\r\n\r\n private *_completeParameterValues(\r\n choiceParameterValues: string[],\r\n lastToken: string\r\n ): IterableIterator<string> {\r\n for (const choiceParameterValue of choiceParameterValues) {\r\n if (choiceParameterValue.indexOf(lastToken) === 0) {\r\n yield choiceParameterValue;\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rushstack/ts-command-line",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.10.3",
|
|
4
4
|
"description": "An object-oriented command-line parser for TypeScript",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
|
-
"url": "https://github.com/microsoft/rushstack
|
|
7
|
+
"url": "https://github.com/microsoft/rushstack.git",
|
|
8
|
+
"directory": "libraries/ts-command-line"
|
|
8
9
|
},
|
|
9
10
|
"main": "lib/index.js",
|
|
10
11
|
"typings": "dist/ts-command-line.d.ts",
|
|
@@ -16,9 +17,9 @@
|
|
|
16
17
|
"string-argv": "~0.3.1"
|
|
17
18
|
},
|
|
18
19
|
"devDependencies": {
|
|
19
|
-
"@rushstack/eslint-config": "2.4.
|
|
20
|
-
"@rushstack/heft": "0.
|
|
21
|
-
"@rushstack/heft-node-rig": "1.2.
|
|
20
|
+
"@rushstack/eslint-config": "2.4.4",
|
|
21
|
+
"@rushstack/heft": "0.41.6",
|
|
22
|
+
"@rushstack/heft-node-rig": "1.2.25",
|
|
22
23
|
"@types/heft-jest": "1.0.1",
|
|
23
24
|
"@types/node": "12.20.24"
|
|
24
25
|
},
|