@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
|
@@ -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.CustomArgumentParser = exports.CommandLineParserExitError = void 0;
|
|
25
|
+
const argparse = __importStar(require("argparse"));
|
|
6
26
|
class CommandLineParserExitError extends Error {
|
|
7
27
|
constructor(exitCode, message) {
|
|
8
28
|
super(message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandLineParserExitError.js","sourceRoot":"","sources":["../../src/providers/CommandLineParserExitError.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D
|
|
1
|
+
{"version":3,"file":"CommandLineParserExitError.js","sourceRoot":"","sources":["../../src/providers/CommandLineParserExitError.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;AAE3D,mDAAqC;AAErC,MAAa,0BAA2B,SAAQ,KAAK;IAGnD,YAAmB,QAAgB,EAAE,OAAe;QAClD,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,sGAAsG;QACtG,+IAA+I;QAC/I,EAAE;QACF,4EAA4E;QAC3E,IAAY,CAAC,SAAS,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC,yDAAyD;QAEzH,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAdD,gEAcC;AAED,MAAa,oBAAqB,SAAQ,QAAQ,CAAC,cAAc;IACxD,IAAI,CAAC,MAAc,EAAE,OAAe;QACzC,WAAW;QACX,MAAM,IAAI,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAEM,KAAK,CAAC,GAAmB;QAC9B,WAAW;QACX,kFAAkF;QAClF,IAAI,GAAG,YAAY,0BAA0B,EAAE;YAC7C,MAAM,GAAG,CAAC;SACX;QAED,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;CACF;AAfD,oDAeC","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\n\r\nexport class CommandLineParserExitError extends Error {\r\n public readonly exitCode: number;\r\n\r\n public constructor(exitCode: number, message: string) {\r\n super(message);\r\n\r\n // Manually set the prototype, as we can no longer extend built-in classes like Error, Array, Map, etc\r\n // https://github.com/microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n //\r\n // Note: the prototype must also be set on any classes which extend this one\r\n (this as any).__proto__ = CommandLineParserExitError.prototype; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n\r\n this.exitCode = exitCode;\r\n }\r\n}\r\n\r\nexport class CustomArgumentParser extends argparse.ArgumentParser {\r\n public exit(status: number, message: string): void {\r\n // override\r\n throw new CommandLineParserExitError(status, message);\r\n }\r\n\r\n public error(err: Error | string): void {\r\n // override\r\n // Ensure the ParserExitError bubbles up to the top without any special processing\r\n if (err instanceof CommandLineParserExitError) {\r\n throw err;\r\n }\r\n\r\n super.error(err);\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.DynamicCommandLineAction = void 0;
|
|
5
6
|
const CommandLineAction_1 = require("./CommandLineAction");
|
|
6
7
|
/**
|
|
7
8
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicCommandLineAction.js","sourceRoot":"","sources":["../../src/providers/DynamicCommandLineAction.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D
|
|
1
|
+
{"version":3,"file":"DynamicCommandLineAction.js","sourceRoot":"","sources":["../../src/providers/DynamicCommandLineAction.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,2DAAwD;AAExD;;GAEG;AACH,MAAa,wBAAyB,SAAQ,qCAAiB;IACnD,kBAAkB;QAC1B,WAAW;QACX,iCAAiC;IACnC,CAAC;IAES,KAAK,CAAC,SAAS;QACvB,WAAW;QACX,iCAAiC;IACnC,CAAC;CACF;AAVD,4DAUC","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 { CommandLineAction } from './CommandLineAction';\r\n\r\n/**\r\n * @public\r\n */\r\nexport class DynamicCommandLineAction extends CommandLineAction {\r\n protected onDefineParameters(): void {\r\n // abstract\r\n // (handled by the external code)\r\n }\r\n\r\n protected async onExecute(): Promise<void> {\r\n // abstract\r\n // (handled by the external code)\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.DynamicCommandLineParser = void 0;
|
|
5
6
|
const CommandLineParser_1 = require("./CommandLineParser");
|
|
6
7
|
/**
|
|
7
8
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicCommandLineParser.js","sourceRoot":"","sources":["../../src/providers/DynamicCommandLineParser.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D
|
|
1
|
+
{"version":3,"file":"DynamicCommandLineParser.js","sourceRoot":"","sources":["../../src/providers/DynamicCommandLineParser.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,2DAAwD;AAExD;;GAEG;AACH,MAAa,wBAAyB,SAAQ,qCAAiB;IACnD,kBAAkB;QAC1B,WAAW;IACb,CAAC;CACF;AAJD,4DAIC","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 { CommandLineParser } from './CommandLineParser';\r\n\r\n/**\r\n * @public\r\n */\r\nexport class DynamicCommandLineParser extends CommandLineParser {\r\n protected onDefineParameters(): void {\r\n // abstract\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabCompletionAction.d.ts","sourceRoot":"","sources":["../../src/providers/TabCompletionAction.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,oBAAoB,EAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAOxD,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,OAAO,CAAC,wBAAwB,
|
|
1
|
+
{"version":3,"file":"TabCompletionAction.d.ts","sourceRoot":"","sources":["../../src/providers/TabCompletionAction.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,oBAAoB,EAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAOxD,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,OAAO,CAAC,wBAAwB,CAA8B;IAC9D,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiD;IAC1E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoC;gBAGpE,OAAO,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACzC,gBAAgB,EAAE,aAAa,CAAC,oBAAoB,CAAC;IAgCvD,SAAS,CAAC,kBAAkB,IAAI,IAAI;cAgBpB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,cAAc,CAC1B,WAAW,EAAE,MAAM,EACnB,aAAa,GAAE,MAA2B,GACzC,aAAa,CAAC,MAAM,CAAC;IAgFxB,OAAO,CAAE,cAAc;IAKhB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;YAI3C,6BAA6B;IAsB3C,OAAO,CAAC,yBAAyB;IAgBjC,OAAO,CAAE,wBAAwB;CAUlC"}
|
|
@@ -25,8 +25,12 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
|
|
|
25
25
|
function reject(value) { resume("throw", value); }
|
|
26
26
|
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
27
27
|
};
|
|
28
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
29
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
30
|
+
};
|
|
28
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
|
|
32
|
+
exports.TabCompleteAction = void 0;
|
|
33
|
+
const string_argv_1 = __importDefault(require("string-argv"));
|
|
30
34
|
const BaseClasses_1 = require("../parameters/BaseClasses");
|
|
31
35
|
const CommandLineAction_1 = require("./CommandLineAction");
|
|
32
36
|
const __1 = require("..");
|
|
@@ -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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rushstack/ts-command-line",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.7.3",
|
|
4
4
|
"description": "An object-oriented command-line parser for TypeScript",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"string-argv": "~0.3.1"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@
|
|
23
|
-
"@rushstack/
|
|
24
|
-
"@rushstack/heft": "0.
|
|
22
|
+
"@rushstack/eslint-config": "2.2.1",
|
|
23
|
+
"@rushstack/heft": "0.14.0",
|
|
24
|
+
"@rushstack/heft-node-rig": "0.1.0",
|
|
25
25
|
"@types/heft-jest": "1.0.1",
|
|
26
26
|
"@types/node": "10.17.13"
|
|
27
27
|
}
|