@rushstack/ts-command-line 4.6.10 → 4.7.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 +63 -0
- package/CHANGELOG.md +29 -1
- package/README.md +7 -3
- package/dist/ts-command-line.d.ts +15 -15
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/CommandLineHelper.js +1 -0
- package/lib/CommandLineHelper.js.map +1 -1
- package/lib/index.js +15 -15
- package/lib/index.js.map +1 -1
- package/lib/parameters/BaseClasses.d.ts +2 -2
- package/lib/parameters/BaseClasses.d.ts.map +1 -1
- package/lib/parameters/BaseClasses.js +3 -2
- package/lib/parameters/BaseClasses.js.map +1 -1
- package/lib/parameters/CommandLineChoiceParameter.d.ts +2 -2
- package/lib/parameters/CommandLineChoiceParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineChoiceParameter.js +1 -0
- package/lib/parameters/CommandLineChoiceParameter.js.map +1 -1
- package/lib/parameters/CommandLineFlagParameter.d.ts +2 -2
- package/lib/parameters/CommandLineFlagParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineFlagParameter.js +1 -0
- package/lib/parameters/CommandLineFlagParameter.js.map +1 -1
- package/lib/parameters/CommandLineIntegerParameter.d.ts +2 -2
- package/lib/parameters/CommandLineIntegerParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineIntegerParameter.js +1 -0
- package/lib/parameters/CommandLineIntegerParameter.js.map +1 -1
- package/lib/parameters/CommandLineRemainder.d.ts +1 -1
- package/lib/parameters/CommandLineRemainder.d.ts.map +1 -1
- package/lib/parameters/CommandLineRemainder.js +1 -0
- package/lib/parameters/CommandLineRemainder.js.map +1 -1
- package/lib/parameters/CommandLineStringListParameter.d.ts +2 -2
- package/lib/parameters/CommandLineStringListParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineStringListParameter.js +1 -0
- package/lib/parameters/CommandLineStringListParameter.js.map +1 -1
- package/lib/parameters/CommandLineStringParameter.d.ts +2 -2
- package/lib/parameters/CommandLineStringParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineStringParameter.js +1 -0
- package/lib/parameters/CommandLineStringParameter.js.map +1 -1
- package/lib/providers/CommandLineAction.js +2 -1
- package/lib/providers/CommandLineAction.js.map +1 -1
- package/lib/providers/CommandLineParameterProvider.d.ts +2 -2
- package/lib/providers/CommandLineParameterProvider.d.ts.map +1 -1
- package/lib/providers/CommandLineParameterProvider.js +23 -3
- package/lib/providers/CommandLineParameterProvider.js.map +1 -1
- package/lib/providers/CommandLineParser.d.ts +1 -1
- package/lib/providers/CommandLineParser.d.ts.map +1 -1
- package/lib/providers/CommandLineParser.js +7 -3
- package/lib/providers/CommandLineParser.js.map +1 -1
- package/lib/providers/CommandLineParserExitError.js +21 -1
- package/lib/providers/CommandLineParserExitError.js.map +1 -1
- package/lib/providers/DynamicCommandLineAction.js +1 -0
- package/lib/providers/DynamicCommandLineAction.js.map +1 -1
- package/lib/providers/DynamicCommandLineParser.js +1 -0
- package/lib/providers/DynamicCommandLineParser.js.map +1 -1
- package/lib/providers/TabCompletionAction.d.ts.map +1 -1
- package/lib/providers/TabCompletionAction.js +5 -1
- package/lib/providers/TabCompletionAction.js.map +1 -1
- package/package.json +4 -4
|
@@ -11,7 +11,7 @@ export declare class CommandLineIntegerParameter extends CommandLineParameterWit
|
|
|
11
11
|
/** @internal */
|
|
12
12
|
constructor(definition: ICommandLineIntegerDefinition);
|
|
13
13
|
/** {@inheritDoc CommandLineParameter.kind} */
|
|
14
|
-
|
|
14
|
+
get kind(): CommandLineParameterKind;
|
|
15
15
|
/**
|
|
16
16
|
* {@inheritDoc CommandLineParameter._setValue}
|
|
17
17
|
* @internal
|
|
@@ -29,7 +29,7 @@ export declare class CommandLineIntegerParameter extends CommandLineParameterWit
|
|
|
29
29
|
* The return value will be undefined if the command-line has not been parsed yet,
|
|
30
30
|
* or if the parameter was omitted and has no default value.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
get value(): number | undefined;
|
|
33
33
|
/** {@inheritDoc CommandLineParameter.appendToArgList} @override */
|
|
34
34
|
appendToArgList(argList: string[]): void;
|
|
35
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineIntegerParameter.d.ts","sourceRoot":"","sources":["../../src/parameters/CommandLineIntegerParameter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,gCAAgC,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE3F;;;GAGG;AACH,qBAAa,2BAA4B,SAAQ,gCAAgC;IAC/E,8DAA8D;IAC9D,SAAgB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjD,OAAO,CAAC,MAAM,CAAiC;IAE/C,gBAAgB;gBACG,UAAU,EAAE,6BAA6B;IAM5D,8CAA8C;
|
|
1
|
+
{"version":3,"file":"CommandLineIntegerParameter.d.ts","sourceRoot":"","sources":["../../src/parameters/CommandLineIntegerParameter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,gCAAgC,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE3F;;;GAGG;AACH,qBAAa,2BAA4B,SAAQ,gCAAgC;IAC/E,8DAA8D;IAC9D,SAAgB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjD,OAAO,CAAC,MAAM,CAAiC;IAE/C,gBAAgB;gBACG,UAAU,EAAE,6BAA6B;IAM5D,8CAA8C;IAC9C,IAAW,IAAI,IAAI,wBAAwB,CAE1C;IAED;;;OAGG;IAEI,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAkCjC;;;OAGG;IACI,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI;IAQjE;;;;;;OAMG;IACH,IAAW,KAAK,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,mEAAmE;IAC5D,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;CAMhD"}
|
|
@@ -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.CommandLineIntegerParameter = void 0;
|
|
5
6
|
const BaseClasses_1 = require("./BaseClasses");
|
|
6
7
|
/**
|
|
7
8
|
* The data type returned by {@link CommandLineParameterProvider.defineIntegerParameter}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineIntegerParameter.js","sourceRoot":"","sources":["../../src/parameters/CommandLineIntegerParameter.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D
|
|
1
|
+
{"version":3,"file":"CommandLineIntegerParameter.js","sourceRoot":"","sources":["../../src/parameters/CommandLineIntegerParameter.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAG3D,+CAA2F;AAE3F;;;GAGG;AACH,MAAa,2BAA4B,SAAQ,8CAAgC;IAM/E,gBAAgB;IAChB,YAAmB,UAAyC;QAC1D,KAAK,CAAC,UAAU,CAAC,CAAC;QAJZ,WAAM,GAAuB,SAAS,CAAC;QAK7C,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;QAC5C,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IAED,8CAA8C;IAC9C,IAAW,IAAI;QACb,OAAO,sCAAwB,CAAC,OAAO,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,8DAA8D;IACvD,SAAS,CAAC,IAAS;QACxB,WAAW;QACX,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;YACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;aAC9B;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE;YAC1C,uCAAuC;YACvC,MAAM,gBAAgB,GAAuB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACnF,IAAI,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,EAAE,EAAE;gBAC7D,MAAM,MAAM,GAAW,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;gBACtD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACvD,MAAM,IAAI,KAAK,CACb,kBAAkB,gBAAgB,gCAAgC;wBAChE,IAAI,IAAI,CAAC,mBAAmB,iCAAiC,CAChE,CAAC;iBACH;gBACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,OAAO;aACR;SACF;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YAChC,OAAO;SACR;QAED,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,sBAAsB,CAAC,kBAA4B;QACxD,UAAU;QACV,KAAK,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACnC,kBAAkB,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;SACvE;IACH,CAAC;IAED;;;;;;OAMG;IACH,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,mEAAmE;IAC5D,eAAe,CAAC,OAAiB;QACtC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;SACrC;IACH,CAAC;CACF;AAvFD,kEAuFC","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 { ICommandLineIntegerDefinition } from './CommandLineDefinition';\r\nimport { CommandLineParameterWithArgument, CommandLineParameterKind } from './BaseClasses';\r\n\r\n/**\r\n * The data type returned by {@link CommandLineParameterProvider.defineIntegerParameter}.\r\n * @public\r\n */\r\nexport class CommandLineIntegerParameter extends CommandLineParameterWithArgument {\r\n /** {@inheritDoc ICommandLineStringDefinition.defaultValue} */\r\n public readonly defaultValue: number | undefined;\r\n\r\n private _value: number | undefined = undefined;\r\n\r\n /** @internal */\r\n public constructor(definition: ICommandLineIntegerDefinition) {\r\n super(definition);\r\n this.defaultValue = definition.defaultValue;\r\n this.validateDefaultValue(!!this.defaultValue);\r\n }\r\n\r\n /** {@inheritDoc CommandLineParameter.kind} */\r\n public get kind(): CommandLineParameterKind {\r\n return CommandLineParameterKind.Integer;\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameter._setValue}\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n public _setValue(data: any): void {\r\n // abstract\r\n if (data !== null && data !== undefined) {\r\n if (typeof data !== 'number') {\r\n this.reportInvalidData(data);\r\n }\r\n this._value = data;\r\n return;\r\n }\r\n\r\n if (this.environmentVariable !== undefined) {\r\n // Try reading the environment variable\r\n const environmentValue: string | undefined = process.env[this.environmentVariable];\r\n if (environmentValue !== undefined && environmentValue !== '') {\r\n const parsed: number = parseInt(environmentValue, 10);\r\n if (isNaN(parsed) || environmentValue.indexOf('.') >= 0) {\r\n throw new Error(\r\n `Invalid value \"${environmentValue}\" for the environment variable` +\r\n ` ${this.environmentVariable}. It must be an integer value.`\r\n );\r\n }\r\n this._value = parsed;\r\n return;\r\n }\r\n }\r\n\r\n if (this.defaultValue !== undefined) {\r\n this._value = this.defaultValue;\r\n return;\r\n }\r\n\r\n this._value = undefined;\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameter._getSupplementaryNotes}\r\n * @internal\r\n */\r\n public _getSupplementaryNotes(supplementaryNotes: string[]): void {\r\n // virtual\r\n super._getSupplementaryNotes(supplementaryNotes);\r\n if (this.defaultValue !== undefined) {\r\n supplementaryNotes.push(`The default value is ${this.defaultValue}.`);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the argument value for an integer parameter that was parsed from the command line.\r\n *\r\n * @remarks\r\n * The return value will be undefined if the command-line has not been parsed yet,\r\n * or if the parameter was omitted and has no default value.\r\n */\r\n public get value(): number | undefined {\r\n return this._value;\r\n }\r\n\r\n /** {@inheritDoc CommandLineParameter.appendToArgList} @override */\r\n public appendToArgList(argList: string[]): void {\r\n if (this.value !== undefined) {\r\n argList.push(this.longName);\r\n argList.push(this.value.toString());\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -16,7 +16,7 @@ export declare class CommandLineRemainder {
|
|
|
16
16
|
* @remarks
|
|
17
17
|
* The array will be empty if the command-line has not been parsed yet.
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
get values(): ReadonlyArray<string>;
|
|
20
20
|
/**
|
|
21
21
|
* {@inheritDoc CommandLineParameter._setValue}
|
|
22
22
|
* @internal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineRemainder.d.ts","sourceRoot":"","sources":["../../src/parameters/CommandLineRemainder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAE1E;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAgB;IAE/B,2DAA2D;IAC3D,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC,gBAAgB;gBACG,UAAU,EAAE,+BAA+B;IAI9D;;;;;;OAMG;
|
|
1
|
+
{"version":3,"file":"CommandLineRemainder.d.ts","sourceRoot":"","sources":["../../src/parameters/CommandLineRemainder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAE1E;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAgB;IAE/B,2DAA2D;IAC3D,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC,gBAAgB;gBACG,UAAU,EAAE,+BAA+B;IAI9D;;;;;;OAMG;IACH,IAAW,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,CAEzC;IAED;;;OAGG;IAEI,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IASjC,mEAAmE;IAC5D,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;CAOhD"}
|
|
@@ -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.CommandLineRemainder = void 0;
|
|
5
6
|
/**
|
|
6
7
|
* The data type returned by {@link CommandLineParameterProvider.defineCommandLineRemainder}.
|
|
7
8
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineRemainder.js","sourceRoot":"","sources":["../../src/parameters/CommandLineRemainder.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D
|
|
1
|
+
{"version":3,"file":"CommandLineRemainder.js","sourceRoot":"","sources":["../../src/parameters/CommandLineRemainder.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAI3D;;;GAGG;AACH,MAAa,oBAAoB;IAM/B,gBAAgB;IAChB,YAAmB,UAA2C;QANtD,YAAO,GAAa,EAAE,CAAC;QAO7B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;IAC5C,CAAC;IAED;;;;;;OAMG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,8DAA8D;IACvD,SAAS,CAAC,IAAS;QACxB,WAAW;QACX,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE;YACrE,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SAClF;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,mEAAmE;IAC5D,eAAe,CAAC,OAAiB;QACtC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC/B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACrB;SACF;IACH,CAAC;CACF;AA5CD,oDA4CC","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 { ICommandLineRemainderDefinition } from './CommandLineDefinition';\r\n\r\n/**\r\n * The data type returned by {@link CommandLineParameterProvider.defineCommandLineRemainder}.\r\n * @public\r\n */\r\nexport class CommandLineRemainder {\r\n private _values: string[] = [];\r\n\r\n /** {@inheritDoc IBaseCommandLineDefinition.description} */\r\n public readonly description: string;\r\n\r\n /** @internal */\r\n public constructor(definition: ICommandLineRemainderDefinition) {\r\n this.description = definition.description;\r\n }\r\n\r\n /**\r\n * Returns any remaining command line arguments after the recognized portion\r\n * that was parsed from the command line.\r\n *\r\n * @remarks\r\n * The array will be empty if the command-line has not been parsed yet.\r\n */\r\n public get values(): ReadonlyArray<string> {\r\n return this._values;\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameter._setValue}\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n public _setValue(data: any): void {\r\n // abstract\r\n if (!Array.isArray(data) || !data.every((x) => typeof x === 'string')) {\r\n throw new Error(`Unexpected data object for remainder: ` + JSON.stringify(data));\r\n }\r\n\r\n this._values.push(...data);\r\n }\r\n\r\n /** {@inheritDoc CommandLineParameter.appendToArgList} @override */\r\n public appendToArgList(argList: string[]): void {\r\n if (this.values.length > 0) {\r\n for (const value of this.values) {\r\n argList.push(value);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -9,7 +9,7 @@ export declare class CommandLineStringListParameter extends CommandLineParameter
|
|
|
9
9
|
/** @internal */
|
|
10
10
|
constructor(definition: ICommandLineStringListDefinition);
|
|
11
11
|
/** {@inheritDoc CommandLineParameter.kind} */
|
|
12
|
-
|
|
12
|
+
get kind(): CommandLineParameterKind;
|
|
13
13
|
/**
|
|
14
14
|
* {@inheritDoc CommandLineParameter._setValue}
|
|
15
15
|
* @internal
|
|
@@ -22,7 +22,7 @@ export declare class CommandLineStringListParameter extends CommandLineParameter
|
|
|
22
22
|
* The array will be empty if the command-line has not been parsed yet,
|
|
23
23
|
* or if the parameter was omitted and has no default value.
|
|
24
24
|
*/
|
|
25
|
-
|
|
25
|
+
get values(): ReadonlyArray<string>;
|
|
26
26
|
/** {@inheritDoc CommandLineParameter.appendToArgList} @override */
|
|
27
27
|
appendToArgList(argList: string[]): void;
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineStringListParameter.d.ts","sourceRoot":"","sources":["../../src/parameters/CommandLineStringListParameter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,gCAAgC,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE3F;;;GAGG;AACH,qBAAa,8BAA+B,SAAQ,gCAAgC;IAClF,OAAO,CAAC,OAAO,CAAgB;IAE/B,gBAAgB;gBACG,UAAU,EAAE,gCAAgC;IAI/D,8CAA8C;
|
|
1
|
+
{"version":3,"file":"CommandLineStringListParameter.d.ts","sourceRoot":"","sources":["../../src/parameters/CommandLineStringListParameter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,gCAAgC,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE3F;;;GAGG;AACH,qBAAa,8BAA+B,SAAQ,gCAAgC;IAClF,OAAO,CAAC,OAAO,CAAgB;IAE/B,gBAAgB;gBACG,UAAU,EAAE,gCAAgC;IAI/D,8CAA8C;IAC9C,IAAW,IAAI,IAAI,wBAAwB,CAE1C;IAED;;;OAGG;IAEI,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAkEjC;;;;;;OAMG;IACH,IAAW,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,CAEzC;IAED,mEAAmE;IAC5D,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;CAQhD"}
|
|
@@ -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.CommandLineStringListParameter = void 0;
|
|
5
6
|
const BaseClasses_1 = require("./BaseClasses");
|
|
6
7
|
/**
|
|
7
8
|
* The data type returned by {@link CommandLineParameterProvider.defineStringListParameter}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineStringListParameter.js","sourceRoot":"","sources":["../../src/parameters/CommandLineStringListParameter.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D
|
|
1
|
+
{"version":3,"file":"CommandLineStringListParameter.js","sourceRoot":"","sources":["../../src/parameters/CommandLineStringListParameter.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 { ICommandLineStringListDefinition } from './CommandLineDefinition';\r\nimport { CommandLineParameterWithArgument, CommandLineParameterKind } from './BaseClasses';\r\n\r\n/**\r\n * The data type returned by {@link CommandLineParameterProvider.defineStringListParameter}.\r\n * @public\r\n */\r\nexport class CommandLineStringListParameter extends CommandLineParameterWithArgument {\r\n private _values: string[] = [];\r\n\r\n /** @internal */\r\n public constructor(definition: ICommandLineStringListDefinition) {\r\n super(definition);\r\n }\r\n\r\n /** {@inheritDoc CommandLineParameter.kind} */\r\n public get kind(): CommandLineParameterKind {\r\n return CommandLineParameterKind.StringList;\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameter._setValue}\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n public _setValue(data: any): void {\r\n // abstract\r\n if (data !== null && data !== undefined) {\r\n if (!Array.isArray(data)) {\r\n this.reportInvalidData(data);\r\n }\r\n for (const arrayItem of data) {\r\n if (typeof arrayItem !== 'string') {\r\n this.reportInvalidData(data);\r\n }\r\n }\r\n this._values = data;\r\n return;\r\n }\r\n\r\n if (this.environmentVariable !== undefined) {\r\n // Try reading the environment variable\r\n const environmentValue: string | undefined = process.env[this.environmentVariable];\r\n if (environmentValue !== undefined) {\r\n // NOTE: If the environment variable is defined as an empty string,\r\n // here we will accept the empty string as our value. (For number/flag we don't do that.)\r\n\r\n if (environmentValue.trimLeft()[0] === '[') {\r\n // Specifying multiple items in an environment variable is a somewhat rare case. But environment\r\n // variables are actually a pretty reliable way for a tool to avoid shell escaping problems\r\n // when spawning another tool. For this case, we need a reliable way to pass an array of strings\r\n // that could contain any character. For example, if we simply used \";\" as the list delimiter,\r\n // then what to do if a string contains that character? We'd need to design an escaping mechanism.\r\n // Since JSON is simple and standard and can escape every possible string, it's a better option\r\n // than a custom delimiter.\r\n try {\r\n const parsedJson: unknown = JSON.parse(environmentValue);\r\n if (\r\n !Array.isArray(parsedJson) ||\r\n !parsedJson.every(\r\n (x) => typeof x === 'string' || typeof x === 'boolean' || typeof x === 'number'\r\n )\r\n ) {\r\n throw new Error(\r\n `The ${environmentValue} environment variable value must be a JSON ` +\r\n ` array containing only strings, numbers, and booleans.`\r\n );\r\n }\r\n this._values = parsedJson.map((x) => x.toString());\r\n } catch (ex) {\r\n throw new Error(\r\n `The ${environmentValue} environment variable value looks like a JSON array` +\r\n ` but failed to parse: ` +\r\n ex.message\r\n );\r\n }\r\n } else {\r\n // As a shorthand, a single value may be specified without JSON encoding, as long as it does not\r\n // start with the \"[\" character.\r\n this._values = [environmentValue];\r\n }\r\n\r\n return;\r\n }\r\n }\r\n\r\n // (No default value for string lists)\r\n\r\n this._values = [];\r\n }\r\n\r\n /**\r\n * Returns the string arguments for a string list parameter that was parsed from the command line.\r\n *\r\n * @remarks\r\n * The array will be empty if the command-line has not been parsed yet,\r\n * or if the parameter was omitted and has no default value.\r\n */\r\n public get values(): ReadonlyArray<string> {\r\n return this._values;\r\n }\r\n\r\n /** {@inheritDoc CommandLineParameter.appendToArgList} @override */\r\n public appendToArgList(argList: string[]): void {\r\n if (this.values.length > 0) {\r\n for (const value of this.values) {\r\n argList.push(this.longName);\r\n argList.push(value);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -11,7 +11,7 @@ export declare class CommandLineStringParameter extends CommandLineParameterWith
|
|
|
11
11
|
/** @internal */
|
|
12
12
|
constructor(definition: ICommandLineStringDefinition);
|
|
13
13
|
/** {@inheritDoc CommandLineParameter.kind} */
|
|
14
|
-
|
|
14
|
+
get kind(): CommandLineParameterKind;
|
|
15
15
|
/**
|
|
16
16
|
* {@inheritDoc CommandLineParameter._setValue}
|
|
17
17
|
* @internal
|
|
@@ -29,7 +29,7 @@ export declare class CommandLineStringParameter extends CommandLineParameterWith
|
|
|
29
29
|
* The return value will be undefined if the command-line has not been parsed yet,
|
|
30
30
|
* or if the parameter was omitted and has no default value.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
get value(): string | undefined;
|
|
33
33
|
/** {@inheritDoc CommandLineParameter.appendToArgList} @override */
|
|
34
34
|
appendToArgList(argList: string[]): void;
|
|
35
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineStringParameter.d.ts","sourceRoot":"","sources":["../../src/parameters/CommandLineStringParameter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE3F;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,gCAAgC;IAC9E,8DAA8D;IAC9D,SAAgB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjD,OAAO,CAAC,MAAM,CAAiC;IAE/C,gBAAgB;gBACG,UAAU,EAAE,4BAA4B;IAO3D,8CAA8C;
|
|
1
|
+
{"version":3,"file":"CommandLineStringParameter.d.ts","sourceRoot":"","sources":["../../src/parameters/CommandLineStringParameter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE3F;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,gCAAgC;IAC9E,8DAA8D;IAC9D,SAAgB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjD,OAAO,CAAC,MAAM,CAAiC;IAE/C,gBAAgB;gBACG,UAAU,EAAE,4BAA4B;IAO3D,8CAA8C;IAC9C,IAAW,IAAI,IAAI,wBAAwB,CAE1C;IAED;;;OAGG;IAEI,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IA6BjC;;;OAGG;IACI,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI;IAUjE;;;;;;OAMG;IACH,IAAW,KAAK,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,mEAAmE;IAC5D,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;CAMhD"}
|
|
@@ -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.CommandLineStringParameter = void 0;
|
|
5
6
|
const BaseClasses_1 = require("./BaseClasses");
|
|
6
7
|
/**
|
|
7
8
|
* The data type returned by {@link CommandLineParameterProvider.defineStringParameter}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineStringParameter.js","sourceRoot":"","sources":["../../src/parameters/CommandLineStringParameter.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D
|
|
1
|
+
{"version":3,"file":"CommandLineStringParameter.js","sourceRoot":"","sources":["../../src/parameters/CommandLineStringParameter.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAG3D,+CAA2F;AAE3F;;;GAGG;AACH,MAAa,0BAA2B,SAAQ,8CAAgC;IAM9E,gBAAgB;IAChB,YAAmB,UAAwC;QACzD,KAAK,CAAC,UAAU,CAAC,CAAC;QAJZ,WAAM,GAAuB,SAAS,CAAC;QAM7C,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;QAC5C,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IAED,8CAA8C;IAC9C,IAAW,IAAI;QACb,OAAO,sCAAwB,CAAC,MAAM,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,8DAA8D;IACvD,SAAS,CAAC,IAAS;QACxB,WAAW;QACX,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;YACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;aAC9B;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE;YAC1C,uCAAuC;YACvC,MAAM,gBAAgB,GAAuB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACnF,IAAI,gBAAgB,KAAK,SAAS,EAAE;gBAClC,mEAAmE;gBACnE,0FAA0F;gBAC1F,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC;gBAC/B,OAAO;aACR;SACF;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YAChC,OAAO;SACR;QAED,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,sBAAsB,CAAC,kBAA4B;QACxD,UAAU;QACV,KAAK,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;YACnC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,EAAE;gBAClC,kBAAkB,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;aACvF;SACF;IACH,CAAC;IAED;;;;;;OAMG;IACH,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,mEAAmE;IAC5D,eAAe,CAAC,OAAiB;QACtC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC1B;IACH,CAAC;CACF;AArFD,gEAqFC","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 { ICommandLineStringDefinition } from './CommandLineDefinition';\r\nimport { CommandLineParameterWithArgument, CommandLineParameterKind } from './BaseClasses';\r\n\r\n/**\r\n * The data type returned by {@link CommandLineParameterProvider.defineStringParameter}.\r\n * @public\r\n */\r\nexport class CommandLineStringParameter extends CommandLineParameterWithArgument {\r\n /** {@inheritDoc ICommandLineStringDefinition.defaultValue} */\r\n public readonly defaultValue: string | undefined;\r\n\r\n private _value: string | undefined = undefined;\r\n\r\n /** @internal */\r\n public constructor(definition: ICommandLineStringDefinition) {\r\n super(definition);\r\n\r\n this.defaultValue = definition.defaultValue;\r\n this.validateDefaultValue(!!this.defaultValue);\r\n }\r\n\r\n /** {@inheritDoc CommandLineParameter.kind} */\r\n public get kind(): CommandLineParameterKind {\r\n return CommandLineParameterKind.String;\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameter._setValue}\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n public _setValue(data: any): void {\r\n // abstract\r\n if (data !== null && data !== undefined) {\r\n if (typeof data !== 'string') {\r\n this.reportInvalidData(data);\r\n }\r\n this._value = data;\r\n return;\r\n }\r\n\r\n if (this.environmentVariable !== undefined) {\r\n // Try reading the environment variable\r\n const environmentValue: string | undefined = process.env[this.environmentVariable];\r\n if (environmentValue !== undefined) {\r\n // NOTE: If the environment variable is defined as an empty string,\r\n // here we will accept the empty string as our value. (For number/flag we don't do that.)\r\n this._value = environmentValue;\r\n return;\r\n }\r\n }\r\n\r\n if (this.defaultValue !== undefined) {\r\n this._value = this.defaultValue;\r\n return;\r\n }\r\n\r\n this._value = undefined;\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameter._getSupplementaryNotes}\r\n * @internal\r\n */\r\n public _getSupplementaryNotes(supplementaryNotes: string[]): void {\r\n // virtual\r\n super._getSupplementaryNotes(supplementaryNotes);\r\n if (this.defaultValue !== undefined) {\r\n if (this.defaultValue.length < 160) {\r\n supplementaryNotes.push(`The default value is ${JSON.stringify(this.defaultValue)}.`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the argument value for a string parameter that was parsed from the command line.\r\n *\r\n * @remarks\r\n * The return value will be undefined if the command-line has not been parsed yet,\r\n * or if the parameter was omitted and has no default value.\r\n */\r\n public get value(): string | undefined {\r\n return this._value;\r\n }\r\n\r\n /** {@inheritDoc CommandLineParameter.appendToArgList} @override */\r\n public appendToArgList(argList: string[]): void {\r\n if (this.value !== undefined) {\r\n argList.push(this.longName);\r\n argList.push(this.value);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -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.CommandLineAction = void 0;
|
|
5
6
|
const CommandLineParameterProvider_1 = require("./CommandLineParameterProvider");
|
|
6
7
|
/**
|
|
7
8
|
* Represents a sub-command that is part of the CommandLineParser command line.
|
|
@@ -66,7 +67,7 @@ class CommandLineAction extends CommandLineParameterProvider_1.CommandLineParame
|
|
|
66
67
|
return this._argumentParser;
|
|
67
68
|
}
|
|
68
69
|
}
|
|
70
|
+
exports.CommandLineAction = CommandLineAction;
|
|
69
71
|
// Example: "do-something"
|
|
70
72
|
CommandLineAction._actionNameRegExp = /^[a-z][a-z0-9]*([-:][a-z0-9]+)*$/;
|
|
71
|
-
exports.CommandLineAction = CommandLineAction;
|
|
72
73
|
//# sourceMappingURL=CommandLineAction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineAction.js","sourceRoot":"","sources":["../../src/providers/CommandLineAction.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D
|
|
1
|
+
{"version":3,"file":"CommandLineAction.js","sourceRoot":"","sources":["../../src/providers/CommandLineAction.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAG3D,iFAAsG;AA0BtG;;;;;;;;;;;;GAYG;AACH,MAAsB,iBAAkB,SAAQ,2DAA4B;IAe1E,YAAmB,OAAkC;QACnD,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACjE,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,CAAC,UAAU,KAAK;gBAC7C,2FAA2F,CAC9F,CAAC;SACH;QAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAE3C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IACnC,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,gBAAoC;QACtD,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE;YACjE,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,WAAW,EAAE,IAAI,CAAC,aAAa;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,IAA4B;QACpD,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;OAGG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACO,kBAAkB;QAC1B,WAAW;QACX,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,qCAAqC;YACrC,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;SACrG;QAED,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;;AAzEH,8CAoFC;AAnFC,0BAA0B;AACX,mCAAiB,GAAW,kCAAkC,CAAC","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 { CommandLineParameterProvider, ICommandLineParserData } from './CommandLineParameterProvider';\r\n\r\n/**\r\n * Options for the CommandLineAction constructor.\r\n * @public\r\n */\r\nexport interface ICommandLineActionOptions {\r\n /**\r\n * The name of the action. For example, if the tool is called \"example\",\r\n * then the \"build\" action might be invoked as: \"example build -q --some-other-option\"\r\n */\r\n actionName: string;\r\n\r\n /**\r\n * A quick summary that is shown on the main help page, which is displayed\r\n * by the command \"example --help\"\r\n */\r\n summary: string;\r\n\r\n /**\r\n * A detailed description that is shown on the action help page, which is displayed\r\n * by the command \"example build --help\", e.g. for actionName=\"build\".\r\n */\r\n documentation: string;\r\n}\r\n\r\n/**\r\n * Represents a sub-command that is part of the CommandLineParser command line.\r\n * Applications should create subclasses of CommandLineAction corresponding to\r\n * each action that they want to expose.\r\n *\r\n * The action name should be comprised of lower case words separated by hyphens\r\n * or colons. The name should include an English verb (e.g. \"deploy\"). Use a\r\n * hyphen to separate words (e.g. \"upload-docs\"). A group of related commands\r\n * can be prefixed with a colon (e.g. \"docs:generate\", \"docs:deploy\",\r\n * \"docs:serve\", etc).\r\n *\r\n * @public\r\n */\r\nexport abstract class CommandLineAction extends CommandLineParameterProvider {\r\n // Example: \"do-something\"\r\n private static _actionNameRegExp: RegExp = /^[a-z][a-z0-9]*([-:][a-z0-9]+)*$/;\r\n\r\n /** {@inheritDoc ICommandLineActionOptions.actionName} */\r\n public readonly actionName: string;\r\n\r\n /** {@inheritDoc ICommandLineActionOptions.summary} */\r\n public readonly summary: string;\r\n\r\n /** {@inheritDoc ICommandLineActionOptions.documentation} */\r\n public readonly documentation: string;\r\n\r\n private _argumentParser: argparse.ArgumentParser | undefined;\r\n\r\n public constructor(options: ICommandLineActionOptions) {\r\n super();\r\n\r\n if (!CommandLineAction._actionNameRegExp.test(options.actionName)) {\r\n throw new Error(\r\n `Invalid action name \"${options.actionName}\". ` +\r\n `The name must be comprised of lower-case words optionally separated by hyphens or colons.`\r\n );\r\n }\r\n\r\n this.actionName = options.actionName;\r\n this.summary = options.summary;\r\n this.documentation = options.documentation;\r\n\r\n this._argumentParser = undefined;\r\n }\r\n\r\n /**\r\n * This is called internally by CommandLineParser.addAction()\r\n * @internal\r\n */\r\n public _buildParser(actionsSubParser: argparse.SubParser): void {\r\n this._argumentParser = actionsSubParser.addParser(this.actionName, {\r\n help: this.summary,\r\n description: this.documentation\r\n });\r\n\r\n this.onDefineParameters();\r\n }\r\n\r\n /**\r\n * This is called internally by CommandLineParser.execute()\r\n * @internal\r\n */\r\n public _processParsedData(data: ICommandLineParserData): void {\r\n super._processParsedData(data);\r\n }\r\n\r\n /**\r\n * Invoked by CommandLineParser.onExecute().\r\n * @internal\r\n */\r\n public _execute(): Promise<void> {\r\n return this.onExecute();\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameterProvider._getArgumentParser}\r\n * @internal\r\n */\r\n protected _getArgumentParser(): argparse.ArgumentParser {\r\n // override\r\n if (!this._argumentParser) {\r\n // We will improve this in the future\r\n throw new Error('The CommandLineAction must be added to a CommandLineParser before it can be used');\r\n }\r\n\r\n return this._argumentParser;\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameterProvider.onDefineParameters}\r\n */\r\n protected abstract onDefineParameters(): void;\r\n\r\n /**\r\n * Your subclass should implement this hook to perform the operation.\r\n */\r\n protected abstract onExecute(): Promise<void>;\r\n}\r\n"]}
|
|
@@ -31,12 +31,12 @@ export declare abstract class CommandLineParameterProvider {
|
|
|
31
31
|
/**
|
|
32
32
|
* Returns a collection of the parameters that were defined for this object.
|
|
33
33
|
*/
|
|
34
|
-
|
|
34
|
+
get parameters(): ReadonlyArray<CommandLineParameter>;
|
|
35
35
|
/**
|
|
36
36
|
* If {@link CommandLineParameterProvider.defineCommandLineRemainder} was called,
|
|
37
37
|
* this object captures any remaining command line arguments after the recognized portion.
|
|
38
38
|
*/
|
|
39
|
-
|
|
39
|
+
get remainder(): CommandLineRemainder | undefined;
|
|
40
40
|
/**
|
|
41
41
|
* Defines a command-line parameter whose value must be a string from a fixed set of
|
|
42
42
|
* allowable choices (similar to an enum).
|
|
@@ -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,0BAA0B,EAC1B,4BAA4B,EAC5B,gCAAgC,EAChC,6BAA6B,EAC7B,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,oBAAoB,EAGrB,MAAM,2BAA2B,CAAC;AACnC,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,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,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;IAEjE,OAAO,CAAC,UAAU,CAAmC;IAErD,gBAAgB;;IAOhB;;OAEG;
|
|
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,0BAA0B,EAC1B,4BAA4B,EAC5B,gCAAgC,EAChC,6BAA6B,EAC7B,4BAA4B,EAC5B,+BAA+B,EAChC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,oBAAoB,EAGrB,MAAM,2BAA2B,CAAC;AACnC,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,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,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;IAEjE,OAAO,CAAC,UAAU,CAAmC;IAErD,gBAAgB;;IAOhB;;OAEG;IACH,IAAW,UAAU,IAAI,aAAa,CAAC,oBAAoB,CAAC,CAE3D;IAED;;;OAGG;IACH,IAAW,SAAS,IAAI,oBAAoB,GAAG,SAAS,CAEvD;IAED;;;;;;;;;OASG;IACI,qBAAqB,CAAC,UAAU,EAAE,4BAA4B,GAAG,0BAA0B;IAMlG;;;;OAIG;IACI,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,GAAG,0BAA0B;IAIhF;;;;;;;;;OASG;IACI,mBAAmB,CAAC,UAAU,EAAE,0BAA0B,GAAG,wBAAwB;IAM5F;;;;OAIG;IACI,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,GAAG,wBAAwB;IAI5E;;;;;;;;OAQG;IACI,sBAAsB,CAAC,UAAU,EAAE,6BAA6B,GAAG,2BAA2B;IAMrG;;;;OAIG;IACI,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,GAAG,2BAA2B;IAIlF;;;;;;;;OAQG;IACI,qBAAqB,CAAC,UAAU,EAAE,4BAA4B,GAAG,0BAA0B;IAMlG;;;;OAIG;IACI,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,GAAG,0BAA0B;IAIhF;;;;;;;;;OASG;IACI,yBAAyB,CAC9B,UAAU,EAAE,gCAAgC,GAC3C,8BAA8B;IAMjC;;;;;;;;;;;;;;OAcG;IACI,0BAA0B,CAAC,UAAU,EAAE,+BAA+B,GAAG,oBAAoB;IAiBpG;;;;OAIG;IACI,sBAAsB,CAAC,iBAAiB,EAAE,MAAM,GAAG,8BAA8B;IAIxF;;OAEG;IACI,cAAc,IAAI,MAAM;IAI/B;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,IAAI;IAE7C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,QAAQ,CAAC,cAAc;IAEhE,gBAAgB;IAChB,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI;IAYhE,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,gBAAgB;CAoEzB"}
|
|
@@ -1,8 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
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
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
7
|
+
}) : (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
o[k2] = m[k];
|
|
10
|
+
}));
|
|
11
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
12
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
13
|
+
}) : function(o, v) {
|
|
14
|
+
o["default"] = v;
|
|
15
|
+
});
|
|
16
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
17
|
+
if (mod && mod.__esModule) return mod;
|
|
18
|
+
var result = {};
|
|
19
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
20
|
+
__setModuleDefault(result, mod);
|
|
21
|
+
return result;
|
|
22
|
+
};
|
|
4
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
|
|
24
|
+
exports.CommandLineParameterProvider = void 0;
|
|
25
|
+
const argparse = __importStar(require("argparse"));
|
|
6
26
|
const BaseClasses_1 = require("../parameters/BaseClasses");
|
|
7
27
|
const CommandLineFlagParameter_1 = require("../parameters/CommandLineFlagParameter");
|
|
8
28
|
const CommandLineStringParameter_1 = require("../parameters/CommandLineStringParameter");
|
|
@@ -258,12 +278,12 @@ class CommandLineParameterProvider {
|
|
|
258
278
|
const argumentParser = this._getArgumentParser();
|
|
259
279
|
argumentParser.addArgument(names, Object.assign({}, argparseOptions));
|
|
260
280
|
if (parameter.undocumentedSynonyms && parameter.undocumentedSynonyms.length > 0) {
|
|
261
|
-
argumentParser.addArgument(parameter.undocumentedSynonyms, Object.assign({}, argparseOptions, { help: argparse.Const.SUPPRESS }));
|
|
281
|
+
argumentParser.addArgument(parameter.undocumentedSynonyms, Object.assign(Object.assign({}, argparseOptions), { help: argparse.Const.SUPPRESS }));
|
|
262
282
|
}
|
|
263
283
|
this._parameters.push(parameter);
|
|
264
284
|
this._parametersByLongName.set(parameter.longName, parameter);
|
|
265
285
|
}
|
|
266
286
|
}
|
|
267
|
-
CommandLineParameterProvider._keyCounter = 0;
|
|
268
287
|
exports.CommandLineParameterProvider = CommandLineParameterProvider;
|
|
288
|
+
CommandLineParameterProvider._keyCounter = 0;
|
|
269
289
|
//# sourceMappingURL=CommandLineParameterProvider.js.map
|
|
@@ -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 ICommandLineFlagDefinition,\r\n ICommandLineStringDefinition,\r\n ICommandLineStringListDefinition,\r\n ICommandLineIntegerDefinition,\r\n ICommandLineChoiceDefinition,\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 { CommandLineFlagParameter } from '../parameters/CommandLineFlagParameter';\r\nimport { CommandLineStringParameter } from '../parameters/CommandLineStringParameter';\r\nimport { CommandLineStringListParameter } from '../parameters/CommandLineStringListParameter';\r\nimport { CommandLineIntegerParameter } from '../parameters/CommandLineIntegerParameter';\r\nimport { CommandLineChoiceParameter } from '../parameters/CommandLineChoiceParameter';\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 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 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 * 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 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.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 ICommandLineFlagDefinition,\r\n ICommandLineStringDefinition,\r\n ICommandLineStringListDefinition,\r\n ICommandLineIntegerDefinition,\r\n ICommandLineChoiceDefinition,\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 { CommandLineFlagParameter } from '../parameters/CommandLineFlagParameter';\r\nimport { CommandLineStringParameter } from '../parameters/CommandLineStringParameter';\r\nimport { CommandLineStringListParameter } from '../parameters/CommandLineStringListParameter';\r\nimport { CommandLineIntegerParameter } from '../parameters/CommandLineIntegerParameter';\r\nimport { CommandLineChoiceParameter } from '../parameters/CommandLineChoiceParameter';\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 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 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 * 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 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.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"]}
|
|
@@ -47,7 +47,7 @@ export declare abstract class CommandLineParser extends CommandLineParameterProv
|
|
|
47
47
|
/**
|
|
48
48
|
* Returns the list of actions that were defined for this CommandLineParser object.
|
|
49
49
|
*/
|
|
50
|
-
|
|
50
|
+
get actions(): ReadonlyArray<CommandLineAction>;
|
|
51
51
|
/**
|
|
52
52
|
* Defines a new action that can be used with the CommandLineParser instance.
|
|
53
53
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineParser.d.ts","sourceRoot":"","sources":["../../src/providers/CommandLineParser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAA0B,MAAM,gCAAgC,CAAC;AAItG;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;;;;;;;;GASG;AACH,8BAAsB,iBAAkB,SAAQ,4BAA4B;IAC1E;;;;OAIG;IACI,cAAc,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAErD,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,0BAA0B,CAAkB;gBAEjC,OAAO,EAAE,yBAAyB;IAmBrD;;OAEG;
|
|
1
|
+
{"version":3,"file":"CommandLineParser.d.ts","sourceRoot":"","sources":["../../src/providers/CommandLineParser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAA0B,MAAM,gCAAgC,CAAC;AAItG;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;;;;;;;;GASG;AACH,8BAAsB,iBAAkB,SAAQ,4BAA4B;IAC1E;;;;OAIG;IACI,cAAc,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAErD,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,0BAA0B,CAAkB;gBAEjC,OAAO,EAAE,yBAAyB;IAmBrD;;OAEG;IACH,IAAW,OAAO,IAAI,aAAa,CAAC,iBAAiB,CAAC,CAErD;IAED;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAajD;;;OAGG;IACI,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB;IAQvD;;;OAGG;IACI,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAItE;;;;;;;;;;;;;;;;OAgBG;IACU,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAuCvD;;;OAGG;IACU,2BAA2B,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDxE,OAAO,CAAC,oBAAoB;IAO5B;;;OAGG;IACH,SAAS,CAAC,kBAAkB,IAAI,QAAQ,CAAC,cAAc;IAKvD;;;OAGG;cACa,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAK3C"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
4
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
|
|
8
|
+
exports.CommandLineParser = void 0;
|
|
9
|
+
const colors_1 = __importDefault(require("colors"));
|
|
6
10
|
const CommandLineParameterProvider_1 = require("./CommandLineParameterProvider");
|
|
7
11
|
const CommandLineParserExitError_1 = require("./CommandLineParserExitError");
|
|
8
12
|
const TabCompletionAction_1 = require("./TabCompletionAction");
|
|
@@ -28,7 +32,7 @@ class CommandLineParser extends CommandLineParameterProvider_1.CommandLineParame
|
|
|
28
32
|
addHelp: true,
|
|
29
33
|
prog: this._options.toolFilename,
|
|
30
34
|
description: this._options.toolDescription,
|
|
31
|
-
epilog:
|
|
35
|
+
epilog: colors_1.default.bold(`For detailed help about a specific command, use: ${this._options.toolFilename} <command> -h`)
|
|
32
36
|
});
|
|
33
37
|
this.onDefineParameters();
|
|
34
38
|
}
|
|
@@ -114,7 +118,7 @@ class CommandLineParser extends CommandLineParameterProvider_1.CommandLineParame
|
|
|
114
118
|
message = 'Error: ' + message;
|
|
115
119
|
}
|
|
116
120
|
console.error();
|
|
117
|
-
console.error(
|
|
121
|
+
console.error(colors_1.default.red(message));
|
|
118
122
|
if (!process.exitCode) {
|
|
119
123
|
process.exitCode = 1;
|
|
120
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineParser.js","sourceRoot":"","sources":["../../src/providers/CommandLineParser.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 * as colors from 'colors';\r\n\r\nimport { CommandLineAction } from './CommandLineAction';\r\nimport { CommandLineParameterProvider, ICommandLineParserData } from './CommandLineParameterProvider';\r\nimport { CommandLineParserExitError, CustomArgumentParser } from './CommandLineParserExitError';\r\nimport { TabCompleteAction } from './TabCompletionAction';\r\n\r\n/**\r\n * Options for the {@link CommandLineParser} constructor.\r\n * @public\r\n */\r\nexport interface ICommandLineParserOptions {\r\n /**\r\n * The name of your tool when invoked from the command line\r\n */\r\n toolFilename: string;\r\n\r\n /**\r\n * General documentation that is included in the \"--help\" main page\r\n */\r\n toolDescription: string;\r\n\r\n /**\r\n * Set to true to auto-define a tab completion action. False by default.\r\n */\r\n enableTabCompletionAction?: boolean;\r\n}\r\n\r\n/**\r\n * The \"argparse\" library is a relatively advanced command-line parser with features such\r\n * as word-wrapping and intelligible error messages (that are lacking in other similar\r\n * libraries such as commander, yargs, and nomnom). Unfortunately, its ruby-inspired API\r\n * is awkward to use. The abstract base classes CommandLineParser and CommandLineAction\r\n * provide a wrapper for \"argparse\" that makes defining and consuming arguments quick\r\n * and simple, and enforces that appropriate documentation is provided for each parameter.\r\n *\r\n * @public\r\n */\r\nexport abstract class CommandLineParser extends CommandLineParameterProvider {\r\n /**\r\n * Reports which CommandLineAction was specified on the command line.\r\n * @remarks\r\n * The value will be assigned before onExecute() is invoked.\r\n */\r\n public selectedAction: CommandLineAction | undefined;\r\n\r\n private _argumentParser: argparse.ArgumentParser;\r\n private _actionsSubParser: argparse.SubParser | undefined;\r\n private _options: ICommandLineParserOptions;\r\n private _actions: CommandLineAction[];\r\n private _actionsByName: Map<string, CommandLineAction>;\r\n private _executed: boolean = false;\r\n private _tabCompleteActionWasAdded: boolean = false;\r\n\r\n public constructor(options: ICommandLineParserOptions) {\r\n super();\r\n\r\n this._options = options;\r\n this._actions = [];\r\n this._actionsByName = new Map<string, CommandLineAction>();\r\n\r\n this._argumentParser = new CustomArgumentParser({\r\n addHelp: true,\r\n prog: this._options.toolFilename,\r\n description: this._options.toolDescription,\r\n epilog: colors.bold(\r\n `For detailed help about a specific command, use: ${this._options.toolFilename} <command> -h`\r\n )\r\n });\r\n\r\n this.onDefineParameters();\r\n }\r\n\r\n /**\r\n * Returns the list of actions that were defined for this CommandLineParser object.\r\n */\r\n public get actions(): ReadonlyArray<CommandLineAction> {\r\n return this._actions;\r\n }\r\n\r\n /**\r\n * Defines a new action that can be used with the CommandLineParser instance.\r\n */\r\n public addAction(action: CommandLineAction): void {\r\n if (!this._actionsSubParser) {\r\n this._actionsSubParser = this._argumentParser.addSubparsers({\r\n metavar: '<command>',\r\n dest: 'action'\r\n });\r\n }\r\n\r\n action._buildParser(this._actionsSubParser);\r\n this._actions.push(action);\r\n this._actionsByName.set(action.actionName, action);\r\n }\r\n\r\n /**\r\n * Retrieves the action with the specified name. If no matching action is found,\r\n * an exception is thrown.\r\n */\r\n public getAction(actionName: string): CommandLineAction {\r\n const action: CommandLineAction | undefined = this.tryGetAction(actionName);\r\n if (!action) {\r\n throw new Error(`The action \"${actionName}\" was not defined`);\r\n }\r\n return action;\r\n }\r\n\r\n /**\r\n * Retrieves the action with the specified name. If no matching action is found,\r\n * undefined is returned.\r\n */\r\n public tryGetAction(actionName: string): CommandLineAction | undefined {\r\n return this._actionsByName.get(actionName);\r\n }\r\n\r\n /**\r\n * The program entry point will call this method to begin parsing command-line arguments\r\n * and executing the corresponding action.\r\n *\r\n * @remarks\r\n * The returned promise will never reject: If an error occurs, it will be printed\r\n * to stderr, process.exitCode will be set to 1, and the promise will resolve to false.\r\n * This simplifies the most common usage scenario where the program entry point doesn't\r\n * want to be involved with the command-line logic, and will discard the promise without\r\n * a then() or catch() block.\r\n *\r\n * If your caller wants to trap and handle errors, use {@link CommandLineParser.executeWithoutErrorHandling}\r\n * instead.\r\n *\r\n * @param args - the command-line arguments to be parsed; if omitted, then\r\n * the process.argv will be used\r\n */\r\n public async execute(args?: string[]): Promise<boolean> {\r\n if (this._options.enableTabCompletionAction && !this._tabCompleteActionWasAdded) {\r\n this.addAction(new TabCompleteAction(this.actions, this.parameters));\r\n this._tabCompleteActionWasAdded = true;\r\n }\r\n\r\n try {\r\n await this.executeWithoutErrorHandling(args);\r\n return true;\r\n } catch (err) {\r\n if (err instanceof CommandLineParserExitError) {\r\n // executeWithoutErrorHandling() handles the successful cases,\r\n // so here we can assume err has a nonzero exit code\r\n if (err.message) {\r\n console.error(err.message);\r\n }\r\n if (!process.exitCode) {\r\n process.exitCode = err.exitCode;\r\n }\r\n } else {\r\n let message: string = (err.message || 'An unknown error occurred').trim();\r\n\r\n // If the message doesn't already start with \"Error:\" then add a prefix\r\n if (!/^(error|internal error|warning)\\b/i.test(message)) {\r\n message = 'Error: ' + message;\r\n }\r\n\r\n console.error();\r\n console.error(colors.red(message));\r\n\r\n if (!process.exitCode) {\r\n process.exitCode = 1;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * This is similar to {@link CommandLineParser.execute}, except that execution errors\r\n * simply cause the promise to reject. It is the caller's responsibility to trap\r\n */\r\n public async executeWithoutErrorHandling(args?: string[]): Promise<void> {\r\n try {\r\n if (this._executed) {\r\n // In the future we could allow the same parser to be invoked multiple times\r\n // with different arguments. We'll do that work as soon as someone encounters\r\n // a real world need for it.\r\n throw new Error('execute() was already called for this parser instance');\r\n }\r\n this._executed = true;\r\n\r\n this._validateDefinitions();\r\n\r\n if (!args) {\r\n // 0=node.exe, 1=script name\r\n args = process.argv.slice(2);\r\n }\r\n if (args.length === 0) {\r\n this._argumentParser.printHelp();\r\n return;\r\n }\r\n\r\n const data: ICommandLineParserData = this._argumentParser.parseArgs(args);\r\n\r\n this._processParsedData(data);\r\n\r\n for (const action of this._actions) {\r\n if (action.actionName === data.action) {\r\n this.selectedAction = action;\r\n action._processParsedData(data);\r\n break;\r\n }\r\n }\r\n if (this.actions.length > 0 && !this.selectedAction) {\r\n const actions: string[] = this.actions.map((x) => x.actionName);\r\n throw new Error(`An action must be specified (${actions.join(', ')})`);\r\n }\r\n\r\n return this.onExecute();\r\n } catch (err) {\r\n if (err instanceof CommandLineParserExitError) {\r\n if (!err.exitCode) {\r\n // non-error exit modeled using exception handling\r\n if (err.message) {\r\n console.log(err.message);\r\n }\r\n\r\n return;\r\n }\r\n }\r\n\r\n throw err;\r\n }\r\n }\r\n\r\n private _validateDefinitions(): void {\r\n if (this.remainder && this.actions.length > 0) {\r\n // This is apparently not supported by argparse\r\n throw new Error('defineCommandLineRemainder() cannot be called for a CommandLineParser with actions');\r\n }\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameterProvider._getArgumentParser}\r\n * @internal\r\n */\r\n protected _getArgumentParser(): argparse.ArgumentParser {\r\n // override\r\n return this._argumentParser;\r\n }\r\n\r\n /**\r\n * This hook allows the subclass to perform additional operations before or after\r\n * the chosen action is executed.\r\n */\r\n protected async onExecute(): Promise<void> {\r\n if (this.selectedAction) {\r\n await this.selectedAction._execute();\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"CommandLineParser.js","sourceRoot":"","sources":["../../src/providers/CommandLineParser.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 colors from 'colors';\r\n\r\nimport { CommandLineAction } from './CommandLineAction';\r\nimport { CommandLineParameterProvider, ICommandLineParserData } from './CommandLineParameterProvider';\r\nimport { CommandLineParserExitError, CustomArgumentParser } from './CommandLineParserExitError';\r\nimport { TabCompleteAction } from './TabCompletionAction';\r\n\r\n/**\r\n * Options for the {@link CommandLineParser} constructor.\r\n * @public\r\n */\r\nexport interface ICommandLineParserOptions {\r\n /**\r\n * The name of your tool when invoked from the command line\r\n */\r\n toolFilename: string;\r\n\r\n /**\r\n * General documentation that is included in the \"--help\" main page\r\n */\r\n toolDescription: string;\r\n\r\n /**\r\n * Set to true to auto-define a tab completion action. False by default.\r\n */\r\n enableTabCompletionAction?: boolean;\r\n}\r\n\r\n/**\r\n * The \"argparse\" library is a relatively advanced command-line parser with features such\r\n * as word-wrapping and intelligible error messages (that are lacking in other similar\r\n * libraries such as commander, yargs, and nomnom). Unfortunately, its ruby-inspired API\r\n * is awkward to use. The abstract base classes CommandLineParser and CommandLineAction\r\n * provide a wrapper for \"argparse\" that makes defining and consuming arguments quick\r\n * and simple, and enforces that appropriate documentation is provided for each parameter.\r\n *\r\n * @public\r\n */\r\nexport abstract class CommandLineParser extends CommandLineParameterProvider {\r\n /**\r\n * Reports which CommandLineAction was specified on the command line.\r\n * @remarks\r\n * The value will be assigned before onExecute() is invoked.\r\n */\r\n public selectedAction: CommandLineAction | undefined;\r\n\r\n private _argumentParser: argparse.ArgumentParser;\r\n private _actionsSubParser: argparse.SubParser | undefined;\r\n private _options: ICommandLineParserOptions;\r\n private _actions: CommandLineAction[];\r\n private _actionsByName: Map<string, CommandLineAction>;\r\n private _executed: boolean = false;\r\n private _tabCompleteActionWasAdded: boolean = false;\r\n\r\n public constructor(options: ICommandLineParserOptions) {\r\n super();\r\n\r\n this._options = options;\r\n this._actions = [];\r\n this._actionsByName = new Map<string, CommandLineAction>();\r\n\r\n this._argumentParser = new CustomArgumentParser({\r\n addHelp: true,\r\n prog: this._options.toolFilename,\r\n description: this._options.toolDescription,\r\n epilog: colors.bold(\r\n `For detailed help about a specific command, use: ${this._options.toolFilename} <command> -h`\r\n )\r\n });\r\n\r\n this.onDefineParameters();\r\n }\r\n\r\n /**\r\n * Returns the list of actions that were defined for this CommandLineParser object.\r\n */\r\n public get actions(): ReadonlyArray<CommandLineAction> {\r\n return this._actions;\r\n }\r\n\r\n /**\r\n * Defines a new action that can be used with the CommandLineParser instance.\r\n */\r\n public addAction(action: CommandLineAction): void {\r\n if (!this._actionsSubParser) {\r\n this._actionsSubParser = this._argumentParser.addSubparsers({\r\n metavar: '<command>',\r\n dest: 'action'\r\n });\r\n }\r\n\r\n action._buildParser(this._actionsSubParser);\r\n this._actions.push(action);\r\n this._actionsByName.set(action.actionName, action);\r\n }\r\n\r\n /**\r\n * Retrieves the action with the specified name. If no matching action is found,\r\n * an exception is thrown.\r\n */\r\n public getAction(actionName: string): CommandLineAction {\r\n const action: CommandLineAction | undefined = this.tryGetAction(actionName);\r\n if (!action) {\r\n throw new Error(`The action \"${actionName}\" was not defined`);\r\n }\r\n return action;\r\n }\r\n\r\n /**\r\n * Retrieves the action with the specified name. If no matching action is found,\r\n * undefined is returned.\r\n */\r\n public tryGetAction(actionName: string): CommandLineAction | undefined {\r\n return this._actionsByName.get(actionName);\r\n }\r\n\r\n /**\r\n * The program entry point will call this method to begin parsing command-line arguments\r\n * and executing the corresponding action.\r\n *\r\n * @remarks\r\n * The returned promise will never reject: If an error occurs, it will be printed\r\n * to stderr, process.exitCode will be set to 1, and the promise will resolve to false.\r\n * This simplifies the most common usage scenario where the program entry point doesn't\r\n * want to be involved with the command-line logic, and will discard the promise without\r\n * a then() or catch() block.\r\n *\r\n * If your caller wants to trap and handle errors, use {@link CommandLineParser.executeWithoutErrorHandling}\r\n * instead.\r\n *\r\n * @param args - the command-line arguments to be parsed; if omitted, then\r\n * the process.argv will be used\r\n */\r\n public async execute(args?: string[]): Promise<boolean> {\r\n if (this._options.enableTabCompletionAction && !this._tabCompleteActionWasAdded) {\r\n this.addAction(new TabCompleteAction(this.actions, this.parameters));\r\n this._tabCompleteActionWasAdded = true;\r\n }\r\n\r\n try {\r\n await this.executeWithoutErrorHandling(args);\r\n return true;\r\n } catch (err) {\r\n if (err instanceof CommandLineParserExitError) {\r\n // executeWithoutErrorHandling() handles the successful cases,\r\n // so here we can assume err has a nonzero exit code\r\n if (err.message) {\r\n console.error(err.message);\r\n }\r\n if (!process.exitCode) {\r\n process.exitCode = err.exitCode;\r\n }\r\n } else {\r\n let message: string = (err.message || 'An unknown error occurred').trim();\r\n\r\n // If the message doesn't already start with \"Error:\" then add a prefix\r\n if (!/^(error|internal error|warning)\\b/i.test(message)) {\r\n message = 'Error: ' + message;\r\n }\r\n\r\n console.error();\r\n console.error(colors.red(message));\r\n\r\n if (!process.exitCode) {\r\n process.exitCode = 1;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * This is similar to {@link CommandLineParser.execute}, except that execution errors\r\n * simply cause the promise to reject. It is the caller's responsibility to trap\r\n */\r\n public async executeWithoutErrorHandling(args?: string[]): Promise<void> {\r\n try {\r\n if (this._executed) {\r\n // In the future we could allow the same parser to be invoked multiple times\r\n // with different arguments. We'll do that work as soon as someone encounters\r\n // a real world need for it.\r\n throw new Error('execute() was already called for this parser instance');\r\n }\r\n this._executed = true;\r\n\r\n this._validateDefinitions();\r\n\r\n if (!args) {\r\n // 0=node.exe, 1=script name\r\n args = process.argv.slice(2);\r\n }\r\n if (args.length === 0) {\r\n this._argumentParser.printHelp();\r\n return;\r\n }\r\n\r\n const data: ICommandLineParserData = this._argumentParser.parseArgs(args);\r\n\r\n this._processParsedData(data);\r\n\r\n for (const action of this._actions) {\r\n if (action.actionName === data.action) {\r\n this.selectedAction = action;\r\n action._processParsedData(data);\r\n break;\r\n }\r\n }\r\n if (this.actions.length > 0 && !this.selectedAction) {\r\n const actions: string[] = this.actions.map((x) => x.actionName);\r\n throw new Error(`An action must be specified (${actions.join(', ')})`);\r\n }\r\n\r\n return this.onExecute();\r\n } catch (err) {\r\n if (err instanceof CommandLineParserExitError) {\r\n if (!err.exitCode) {\r\n // non-error exit modeled using exception handling\r\n if (err.message) {\r\n console.log(err.message);\r\n }\r\n\r\n return;\r\n }\r\n }\r\n\r\n throw err;\r\n }\r\n }\r\n\r\n private _validateDefinitions(): void {\r\n if (this.remainder && this.actions.length > 0) {\r\n // This is apparently not supported by argparse\r\n throw new Error('defineCommandLineRemainder() cannot be called for a CommandLineParser with actions');\r\n }\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameterProvider._getArgumentParser}\r\n * @internal\r\n */\r\n protected _getArgumentParser(): argparse.ArgumentParser {\r\n // override\r\n return this._argumentParser;\r\n }\r\n\r\n /**\r\n * This hook allows the subclass to perform additional operations before or after\r\n * the chosen action is executed.\r\n */\r\n protected async onExecute(): Promise<void> {\r\n if (this.selectedAction) {\r\n await this.selectedAction._execute();\r\n }\r\n }\r\n}\r\n"]}
|