@rushstack/ts-command-line 4.16.0 → 4.17.0
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/LICENSE +23 -23
- package/README.md +251 -251
- package/dist/ts-command-line.d.ts +11 -5
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/CommandLineHelper.js.map +1 -1
- package/lib/Constants.js.map +1 -1
- package/lib/index.d.ts +5 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/parameters/BaseClasses.d.ts +1 -6
- package/lib/parameters/BaseClasses.d.ts.map +1 -1
- package/lib/parameters/BaseClasses.js +0 -7
- package/lib/parameters/BaseClasses.js.map +1 -1
- package/lib/parameters/CommandLineChoiceListParameter.d.ts +1 -1
- package/lib/parameters/CommandLineChoiceListParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineChoiceListParameter.js.map +1 -1
- package/lib/parameters/CommandLineChoiceParameter.d.ts +1 -1
- package/lib/parameters/CommandLineChoiceParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineChoiceParameter.js.map +1 -1
- package/lib/parameters/CommandLineDefinition.js.map +1 -1
- package/lib/parameters/CommandLineFlagParameter.d.ts +1 -1
- package/lib/parameters/CommandLineFlagParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineFlagParameter.js.map +1 -1
- package/lib/parameters/CommandLineIntegerListParameter.d.ts +1 -1
- package/lib/parameters/CommandLineIntegerListParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineIntegerListParameter.js.map +1 -1
- package/lib/parameters/CommandLineIntegerParameter.d.ts +1 -1
- package/lib/parameters/CommandLineIntegerParameter.d.ts.map +1 -1
- 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.map +1 -1
- package/lib/parameters/CommandLineStringListParameter.d.ts +1 -1
- package/lib/parameters/CommandLineStringListParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineStringListParameter.js.map +1 -1
- package/lib/parameters/CommandLineStringParameter.d.ts +1 -1
- package/lib/parameters/CommandLineStringParameter.d.ts.map +1 -1
- package/lib/parameters/CommandLineStringParameter.js.map +1 -1
- package/lib/parameters/EnvironmentVariableParser.js.map +1 -1
- package/lib/providers/AliasCommandLineAction.d.ts +2 -2
- package/lib/providers/AliasCommandLineAction.d.ts.map +1 -1
- package/lib/providers/AliasCommandLineAction.js +15 -3
- package/lib/providers/AliasCommandLineAction.js.map +1 -1
- package/lib/providers/CommandLineAction.d.ts +2 -2
- package/lib/providers/CommandLineAction.d.ts.map +1 -1
- package/lib/providers/CommandLineAction.js +13 -0
- package/lib/providers/CommandLineAction.js.map +1 -1
- package/lib/providers/CommandLineParameterProvider.d.ts +25 -7
- package/lib/providers/CommandLineParameterProvider.d.ts.map +1 -1
- package/lib/providers/CommandLineParameterProvider.js +85 -37
- package/lib/providers/CommandLineParameterProvider.js.map +1 -1
- package/lib/providers/CommandLineParser.d.ts +3 -3
- package/lib/providers/CommandLineParser.d.ts.map +1 -1
- package/lib/providers/CommandLineParser.js +18 -5
- package/lib/providers/CommandLineParser.js.map +1 -1
- package/lib/providers/CommandLineParserExitError.js.map +1 -1
- package/lib/providers/DynamicCommandLineAction.js.map +1 -1
- package/lib/providers/DynamicCommandLineParser.js.map +1 -1
- package/lib/providers/ScopedCommandLineAction.d.ts +6 -3
- package/lib/providers/ScopedCommandLineAction.d.ts.map +1 -1
- package/lib/providers/ScopedCommandLineAction.js +23 -5
- package/lib/providers/ScopedCommandLineAction.js.map +1 -1
- package/lib/providers/TabCompletionAction.d.ts +1 -1
- package/lib/providers/TabCompletionAction.d.ts.map +1 -1
- package/lib/providers/TabCompletionAction.js +1 -0
- package/lib/providers/TabCompletionAction.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScopedCommandLineAction.js","sourceRoot":"","sources":["../../src/providers/ScopedCommandLineAction.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { SCOPING_PARAMETER_GROUP } from '../Constants';\nimport { CommandLineAction, ICommandLineActionOptions } from './CommandLineAction';\nimport { CommandLineParser, ICommandLineParserOptions } from './CommandLineParser';\nimport { CommandLineParserExitError } from './CommandLineParserExitError';\nimport type { CommandLineParameter } from '../parameters/BaseClasses';\nimport type { CommandLineParameterProvider, ICommandLineParserData } from './CommandLineParameterProvider';\n\ninterface IInternalScopedCommandLineParserOptions extends ICommandLineParserOptions {\n readonly actionOptions: ICommandLineActionOptions;\n readonly unscopedActionParameters: ReadonlyArray<CommandLineParameter>;\n readonly onDefineScopedParameters: (commandLineParameterProvider: CommandLineParameterProvider) => void;\n readonly aliasAction?: string;\n readonly aliasDocumentation?: string;\n}\n\n/**\n * A CommandLineParser used exclusively to parse the scoped command-line parameters\n * for a ScopedCommandLineAction.\n */\nclass InternalScopedCommandLineParser extends CommandLineParser {\n private _canExecute: boolean;\n private readonly _internalOptions: IInternalScopedCommandLineParserOptions;\n\n public get canExecute(): boolean {\n return this._canExecute;\n }\n\n public constructor(options: IInternalScopedCommandLineParserOptions) {\n const { actionOptions, unscopedActionParameters, toolFilename, aliasAction, aliasDocumentation } =\n options;\n\n const toolCommand: string = `${toolFilename} ${actionOptions.actionName}`;\n // When coming from an alias command, we want to show the alias command name in the help text\n const toolCommandForLogging: string = `${toolFilename} ${aliasAction ?? actionOptions.actionName}`;\n const scopingArgs: string[] = [];\n for (const parameter of unscopedActionParameters) {\n parameter.appendToArgList(scopingArgs);\n }\n const scope: string = scopingArgs.join(' ');\n\n // We can run the parser directly because we are not going to use it for any other actions,\n // so construct a special options object to make the \"--help\" text more useful.\n const scopedCommandLineParserOptions: ICommandLineParserOptions = {\n // Strip the scoping args if coming from an alias command, since they are not applicable\n // to the alias command itself\n toolFilename: `${toolCommandForLogging}${scope && !aliasAction ? ` ${scope} --` : ''}`,\n toolDescription: aliasDocumentation ?? actionOptions.documentation,\n toolEpilog: `For more information on available unscoped parameters, use \"${toolCommand} --help\"`,\n enableTabCompletionAction: false\n };\n\n super(scopedCommandLineParserOptions);\n this._canExecute = false;\n this._internalOptions = options;\n this._internalOptions.onDefineScopedParameters(this);\n }\n\n protected async onExecute(): Promise<void> {\n // override\n // Only set if we made it this far, which may not be the case if an error occurred or\n // if '--help' was specified.\n this._canExecute = true;\n }\n}\n\n/**\n * Represents a sub-command that is part of the CommandLineParser command-line.\n * Applications should create subclasses of ScopedCommandLineAction corresponding to\n * each action that they want to expose.\n *\n * The action name should be comprised of lower case words separated by hyphens\n * or colons. The name should include an English verb (e.g. \"deploy\"). Use a\n * hyphen to separate words (e.g. \"upload-docs\"). A group of related commands\n * can be prefixed with a colon (e.g. \"docs:generate\", \"docs:deploy\",\n * \"docs:serve\", etc).\n *\n * Scoped commands allow for different parameters to be specified for different\n * provided scoping values. For example, the \"scoped-action --scope A\" command\n * may allow for different scoped arguments to be specified than the \"scoped-action\n * --scope B\" command.\n *\n * Scoped arguments are specified after the \"--\" pseudo-argument. For example,\n * \"scoped-action --scope A -- --scopedFoo --scopedBar\".\n *\n * @public\n */\nexport abstract class ScopedCommandLineAction extends CommandLineAction {\n private _options: ICommandLineActionOptions;\n private _scopingParameters: CommandLineParameter[];\n private _unscopedParserOptions: ICommandLineParserOptions | undefined;\n private _scopedCommandLineParser: InternalScopedCommandLineParser | undefined;\n\n /**\n * The required group name to apply to all scoping parameters. At least one parameter\n * must be defined with this group name.\n */\n public static readonly ScopingParameterGroup: typeof SCOPING_PARAMETER_GROUP = SCOPING_PARAMETER_GROUP;\n\n public constructor(options: ICommandLineActionOptions) {\n super(options);\n\n this._options = options;\n this._scopingParameters = [];\n }\n\n /**\n * {@inheritDoc CommandLineParameterProvider.parameters}\n */\n public get parameters(): ReadonlyArray<CommandLineParameter> {\n if (this._scopedCommandLineParser) {\n return [...super.parameters, ...this._scopedCommandLineParser.parameters];\n } else {\n return super.parameters;\n }\n }\n\n /**\n * {@inheritdoc CommandLineAction._processParsedData}\n * @internal\n */\n public _processParsedData(parserOptions: ICommandLineParserOptions, data: ICommandLineParserData): void {\n // override\n super._processParsedData(parserOptions, data);\n\n this._unscopedParserOptions = parserOptions;\n\n // Generate the scoped parser using the parent parser information. We can only create this after we\n // have parsed the data, since the parameter values are used during construction.\n this._scopedCommandLineParser = new InternalScopedCommandLineParser({\n ...parserOptions,\n actionOptions: this._options,\n aliasAction: data.aliasAction,\n aliasDocumentation: data.aliasDocumentation,\n unscopedActionParameters: this.parameters,\n onDefineScopedParameters: this.onDefineScopedParameters.bind(this)\n });\n }\n\n /**\n * {@inheritdoc CommandLineAction._execute}\n * @internal\n */\n public async _execute(): Promise<void> {\n // override\n if (!this._unscopedParserOptions || !this._scopedCommandLineParser) {\n throw new Error('The CommandLineAction parameters must be processed before execution.');\n }\n if (!this.remainder) {\n throw new Error('CommandLineAction.onDefineParameters must be called before execution.');\n }\n\n // The '--' argument is required to separate the action parameters from the scoped parameters,\n // so it needs to be trimmed. If remainder values are provided but no '--' is found, then throw.\n const scopedArgs: string[] = [];\n if (this.remainder.values.length) {\n if (this.remainder.values[0] !== '--') {\n // Immitate argparse behavior and log out usage text before throwing.\n console.log(this.renderUsageText());\n throw new CommandLineParserExitError(\n // argparse sets exit code 2 for invalid arguments\n 2,\n // model the message off of the built-in \"unrecognized arguments\" message\n `${this._unscopedParserOptions.toolFilename} ${this.actionName}: error: Unrecognized ` +\n `arguments: ${this.remainder.values[0]}.`\n );\n }\n for (const scopedArg of this.remainder.values.slice(1)) {\n scopedArgs.push(scopedArg);\n }\n }\n\n // Call the scoped parser using only the scoped args to handle parsing\n await this._scopedCommandLineParser.executeWithoutErrorHandling(scopedArgs);\n\n // Only call execute if the parser reached the execute stage. This may not be true if\n // the parser exited early due to a specified '--help' parameter.\n if (this._scopedCommandLineParser.canExecute) {\n await super._execute();\n }\n\n return;\n }\n\n /**\n * {@inheritdoc CommandLineParameterProvider.onDefineParameters}\n */\n protected onDefineParameters(): void {\n this.onDefineUnscopedParameters?.();\n\n if (!this._scopingParameters.length) {\n throw new Error(\n 'No scoping parameters defined. At least one scoping parameter must be defined. ' +\n 'Scoping parameters are defined by setting the parameterGroupName to ' +\n 'ScopedCommandLineAction.ScopingParameterGroupName.'\n );\n }\n if (this.remainder) {\n throw new Error(\n 'Unscoped remainder parameters are not allowed. Remainder parameters can only be defined on ' +\n 'the scoped parameter provider in onDefineScopedParameters().'\n );\n }\n\n // Consume the remainder of the command-line, which will later be passed the scoped parser.\n // This will also prevent developers from calling this.defineCommandLineRemainder(...) since\n // we will have already defined it.\n this.defineCommandLineRemainder({\n description:\n 'Scoped parameters. Must be prefixed with \"--\", ex. \"-- --scopedParameter ' +\n 'foo --scopedFlag\". For more information on available scoped parameters, use \"-- --help\".'\n });\n }\n\n /**\n * Retrieves the scoped CommandLineParser, which is populated after the ScopedCommandLineAction is executed.\n * @internal\n */\n protected _getScopedCommandLineParser(): CommandLineParser {\n if (!this._scopedCommandLineParser) {\n throw new Error('The scoped CommandLineParser is only populated after the action is executed.');\n }\n return this._scopedCommandLineParser;\n }\n\n /** @internal */\n protected _defineParameter(parameter: CommandLineParameter): void {\n super._defineParameter(parameter);\n if (parameter.parameterGroup === ScopedCommandLineAction.ScopingParameterGroup) {\n this._scopingParameters.push(parameter);\n }\n }\n\n /**\n * The child class should implement this hook to define its unscoped command-line parameters,\n * e.g. by calling defineFlagParameter(). At least one scoping parameter must be defined.\n * Scoping parameters are defined by setting the parameterGroupName to\n * ScopedCommandLineAction.ScopingParameterGroupName.\n */\n protected onDefineUnscopedParameters?(): void;\n\n /**\n * The child class should implement this hook to define its scoped command-line\n * parameters, e.g. by calling scopedParameterProvider.defineFlagParameter(). These\n * parameters will only be available if the action is invoked with a scope.\n *\n * @remarks\n * onDefineScopedParameters is called after the unscoped parameters have been parsed.\n * The values they provide can be used to vary the defined scope parameters.\n */\n protected abstract onDefineScopedParameters(scopedParameterProvider: CommandLineParameterProvider): void;\n\n /**\n * {@inheritDoc CommandLineAction.onExecute}\n */\n protected abstract onExecute(): Promise<void>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ScopedCommandLineAction.js","sourceRoot":"","sources":["../../src/providers/ScopedCommandLineAction.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,4CAAuD;AACvD,2DAAwF;AACxF,2DAAwF;AACxF,6EAA0E;AAiB1E;;;GAGG;AACH,MAAM,+BAAgC,SAAQ,qCAAiB;IAI7D,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,YAAmB,OAAgD;QACjE,MAAM,EAAE,aAAa,EAAE,wBAAwB,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAC9F,OAAO,CAAC;QAEV,MAAM,WAAW,GAAW,GAAG,YAAY,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;QAC1E,6FAA6F;QAC7F,MAAM,qBAAqB,GAAW,GAAG,YAAY,IAAI,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,aAAa,CAAC,UAAU,EAAE,CAAC;QACnG,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,KAAK,MAAM,SAAS,IAAI,wBAAwB,EAAE;YAChD,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;SACxC;QACD,MAAM,KAAK,GAAW,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5C,2FAA2F;QAC3F,+EAA+E;QAC/E,MAAM,8BAA8B,GAA8B;YAChE,wFAAwF;YACxF,8BAA8B;YAC9B,YAAY,EAAE,GAAG,qBAAqB,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACtF,eAAe,EAAE,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,aAAa,CAAC,aAAa;YAClE,UAAU,EAAE,+DAA+D,WAAW,UAAU;YAChG,yBAAyB,EAAE,KAAK;SACjC,CAAC;QAEF,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAChC,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAEM,0BAA0B,CAAC,KAAsC;QACtE,wFAAwF;QACxF,0BAA0B;QAC1B,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,CAAC;IACzF,CAAC;IAES,KAAK,CAAC,SAAS;QACvB,WAAW;QACX,qFAAqF;QACrF,6BAA6B;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAsB,uBAAwB,SAAQ,qCAAiB;IAarE,YAAmB,OAAkC;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACnB,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACjC,OAAO,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;SAC3E;aAAM;YACL,OAAO,KAAK,CAAC,UAAU,CAAC;SACzB;IACH,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,aAAwC,EAAE,IAA4B;QAC9F,WAAW;QACX,KAAK,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAE9C,wGAAwG;QACxG,uCAAuC;QACvC,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;QAED,IAAI,CAAC,sBAAsB,GAAG,aAAa,CAAC;QAE5C,mGAAmG;QACnG,iFAAiF;QACjF,IAAI,CAAC,wBAAwB,GAAG,IAAI,+BAA+B,iCAC9D,aAAa,KAChB,aAAa,EAAE,IAAI,CAAC,QAAQ,EAC5B,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAC3C,wBAAwB,EAAE,IAAI,CAAC,UAAU,EACzC,8BAA8B,EAAE,IAAI,CAAC,eAAe,EACpD,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,IAClE,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ;QACnB,WAAW;QACX,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;YAClE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;SACzF;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;SAC1F;QAED,8FAA8F;QAC9F,gGAAgG;QAChG,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE;YAChC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBACrC,MAAM,IAAI,uDAA0B;gBAClC,kDAAkD;gBAClD,CAAC;gBACD,yEAAyE;gBACzE,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,sBAAsB,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI;oBAC3F,kCAAkC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAClE,CAAC;aACH;YACD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACtD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC5B;SACF;QAED,sEAAsE;QACtE,MAAM,IAAI,CAAC,wBAAwB,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAE5E,qFAAqF;QACrF,iEAAiE;QACjE,IAAI,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE;YAC5C,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;SACxB;QAED,OAAO;IACT,CAAC;IAED,gBAAgB;IACT,0BAA0B,CAAC,KAAsC;QACtE,KAAK,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;QAExC,MAAM,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAAC;QACvC,MAAM,2BAA2B,GAAgB,IAAI,GAAG,CAAC;YACvD,GAAG,oBAAoB;YACvB,GAAG,IAAI,CAAC,oCAAoC,CAAC,IAAI,EAAE;SACpD,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,mCACf,KAAK,KACR,oBAAoB,EAAE,2BAA2B,GAClD,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,kBAAkB;;QAC1B,MAAA,IAAI,CAAC,0BAA0B,oDAAI,CAAC;QAEpC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;YACnC,MAAM,IAAI,KAAK,CACb,iFAAiF;gBAC/E,sEAAsE;gBACtE,oDAAoD,CACvD,CAAC;SACH;QACD,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,IAAI,KAAK,CACb,6FAA6F;gBAC3F,8DAA8D,CACjE,CAAC;SACH;QAED,2FAA2F;QAC3F,4FAA4F;QAC5F,mCAAmC;QACnC,IAAI,CAAC,0BAA0B,CAAC;YAC9B,WAAW,EACT,4EAA4E;gBAC5E,2FAA2F;SAC9F,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACO,2BAA2B;QACnC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;SACjG;QACD,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACvC,CAAC;IAED,gBAAgB;IACN,gBAAgB,CAAC,SAA+B;QACxD,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,SAAS,CAAC,cAAc,KAAK,uBAAuB,CAAC,qBAAqB,EAAE;YAC9E,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACzC;IACH,CAAC;;AA/JD;;;GAGG;AACoB,6CAAqB,GAAmC,mCAAuB,CAAC;AAXnF,0DAAuB","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 { SCOPING_PARAMETER_GROUP } from '../Constants';\r\nimport { CommandLineAction, type ICommandLineActionOptions } from './CommandLineAction';\r\nimport { CommandLineParser, type ICommandLineParserOptions } from './CommandLineParser';\r\nimport { CommandLineParserExitError } from './CommandLineParserExitError';\r\nimport type { CommandLineParameter } from '../parameters/BaseClasses';\r\nimport type {\r\n CommandLineParameterProvider,\r\n ICommandLineParserData,\r\n IRegisterDefinedParametersState\r\n} from './CommandLineParameterProvider';\r\n\r\ninterface IInternalScopedCommandLineParserOptions extends ICommandLineParserOptions {\r\n readonly actionOptions: ICommandLineActionOptions;\r\n readonly unscopedActionParameters: ReadonlyArray<CommandLineParameter>;\r\n readonly onDefineScopedParameters: (commandLineParameterProvider: CommandLineParameterProvider) => void;\r\n readonly aliasAction?: string;\r\n readonly aliasDocumentation?: string;\r\n readonly registerDefinedParametersState: IRegisterDefinedParametersState;\r\n}\r\n\r\n/**\r\n * A CommandLineParser used exclusively to parse the scoped command-line parameters\r\n * for a ScopedCommandLineAction.\r\n */\r\nclass InternalScopedCommandLineParser extends CommandLineParser {\r\n private _canExecute: boolean;\r\n private readonly _internalOptions: IInternalScopedCommandLineParserOptions;\r\n\r\n public get canExecute(): boolean {\r\n return this._canExecute;\r\n }\r\n\r\n public constructor(options: IInternalScopedCommandLineParserOptions) {\r\n const { actionOptions, unscopedActionParameters, toolFilename, aliasAction, aliasDocumentation } =\r\n options;\r\n\r\n const toolCommand: string = `${toolFilename} ${actionOptions.actionName}`;\r\n // When coming from an alias command, we want to show the alias command name in the help text\r\n const toolCommandForLogging: string = `${toolFilename} ${aliasAction ?? actionOptions.actionName}`;\r\n const scopingArgs: string[] = [];\r\n for (const parameter of unscopedActionParameters) {\r\n parameter.appendToArgList(scopingArgs);\r\n }\r\n const scope: string = scopingArgs.join(' ');\r\n\r\n // We can run the parser directly because we are not going to use it for any other actions,\r\n // so construct a special options object to make the \"--help\" text more useful.\r\n const scopedCommandLineParserOptions: ICommandLineParserOptions = {\r\n // Strip the scoping args if coming from an alias command, since they are not applicable\r\n // to the alias command itself\r\n toolFilename: `${toolCommandForLogging}${scope && !aliasAction ? ` ${scope} --` : ''}`,\r\n toolDescription: aliasDocumentation ?? actionOptions.documentation,\r\n toolEpilog: `For more information on available unscoped parameters, use \"${toolCommand} --help\"`,\r\n enableTabCompletionAction: false\r\n };\r\n\r\n super(scopedCommandLineParserOptions);\r\n this._canExecute = false;\r\n this._internalOptions = options;\r\n this._internalOptions.onDefineScopedParameters(this);\r\n }\r\n\r\n public _registerDefinedParameters(state: IRegisterDefinedParametersState): void {\r\n // Since we are in a separate parser, we need to register the parameters using the state\r\n // from the parent parser.\r\n super._registerDefinedParameters(this._internalOptions.registerDefinedParametersState);\r\n }\r\n\r\n protected async onExecute(): Promise<void> {\r\n // override\r\n // Only set if we made it this far, which may not be the case if an error occurred or\r\n // if '--help' was specified.\r\n this._canExecute = true;\r\n }\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 ScopedCommandLineAction 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 * Scoped commands allow for different parameters to be specified for different\r\n * provided scoping values. For example, the \"scoped-action --scope A\" command\r\n * may allow for different scoped arguments to be specified than the \"scoped-action\r\n * --scope B\" command.\r\n *\r\n * Scoped arguments are specified after the \"--\" pseudo-argument. For example,\r\n * \"scoped-action --scope A -- --scopedFoo --scopedBar\".\r\n *\r\n * @public\r\n */\r\nexport abstract class ScopedCommandLineAction extends CommandLineAction {\r\n private _options: ICommandLineActionOptions;\r\n private _scopingParameters: CommandLineParameter[];\r\n private _unscopedParserOptions: ICommandLineParserOptions | undefined;\r\n private _scopedCommandLineParser: InternalScopedCommandLineParser | undefined;\r\n private _subparserState: IRegisterDefinedParametersState | undefined;\r\n\r\n /**\r\n * The required group name to apply to all scoping parameters. At least one parameter\r\n * must be defined with this group name.\r\n */\r\n public static readonly ScopingParameterGroup: typeof SCOPING_PARAMETER_GROUP = SCOPING_PARAMETER_GROUP;\r\n\r\n public constructor(options: ICommandLineActionOptions) {\r\n super(options);\r\n\r\n this._options = options;\r\n this._scopingParameters = [];\r\n }\r\n\r\n /**\r\n * {@inheritDoc CommandLineParameterProvider.parameters}\r\n */\r\n public get parameters(): ReadonlyArray<CommandLineParameter> {\r\n if (this._scopedCommandLineParser) {\r\n return [...super.parameters, ...this._scopedCommandLineParser.parameters];\r\n } else {\r\n return super.parameters;\r\n }\r\n }\r\n\r\n /**\r\n * {@inheritdoc CommandLineAction._processParsedData}\r\n * @internal\r\n */\r\n public _processParsedData(parserOptions: ICommandLineParserOptions, data: ICommandLineParserData): void {\r\n // override\r\n super._processParsedData(parserOptions, data);\r\n\r\n // This should never happen because the super method should throw if parameters haven't been registered,\r\n // but guard against this just in-case.\r\n if (this._subparserState === undefined) {\r\n throw new Error('Parameters have not been registered');\r\n }\r\n\r\n this._unscopedParserOptions = parserOptions;\r\n\r\n // Generate the scoped parser using the parent parser information. We can only create this after we\r\n // have parsed the data, since the parameter values are used during construction.\r\n this._scopedCommandLineParser = new InternalScopedCommandLineParser({\r\n ...parserOptions,\r\n actionOptions: this._options,\r\n aliasAction: data.aliasAction,\r\n aliasDocumentation: data.aliasDocumentation,\r\n unscopedActionParameters: this.parameters,\r\n registerDefinedParametersState: this._subparserState,\r\n onDefineScopedParameters: this.onDefineScopedParameters.bind(this)\r\n });\r\n }\r\n\r\n /**\r\n * {@inheritdoc CommandLineAction._execute}\r\n * @internal\r\n */\r\n public async _execute(): Promise<void> {\r\n // override\r\n if (!this._unscopedParserOptions || !this._scopedCommandLineParser) {\r\n throw new Error('The CommandLineAction parameters must be processed before execution.');\r\n }\r\n if (!this.remainder) {\r\n throw new Error('CommandLineAction.onDefineParameters must be called before execution.');\r\n }\r\n\r\n // The '--' argument is required to separate the action parameters from the scoped parameters,\r\n // so it needs to be trimmed. If remainder values are provided but no '--' is found, then throw.\r\n const scopedArgs: string[] = [];\r\n if (this.remainder.values.length) {\r\n if (this.remainder.values[0] !== '--') {\r\n throw new CommandLineParserExitError(\r\n // argparse sets exit code 2 for invalid arguments\r\n 2,\r\n // model the message off of the built-in \"unrecognized arguments\" message\r\n `${this.renderUsageText()}\\n${this._unscopedParserOptions.toolFilename} ${this.actionName}: ` +\r\n `error: Unrecognized arguments: ${this.remainder.values[0]}.\\n`\r\n );\r\n }\r\n for (const scopedArg of this.remainder.values.slice(1)) {\r\n scopedArgs.push(scopedArg);\r\n }\r\n }\r\n\r\n // Call the scoped parser using only the scoped args to handle parsing\r\n await this._scopedCommandLineParser.executeWithoutErrorHandling(scopedArgs);\r\n\r\n // Only call execute if the parser reached the execute stage. This may not be true if\r\n // the parser exited early due to a specified '--help' parameter.\r\n if (this._scopedCommandLineParser.canExecute) {\r\n await super._execute();\r\n }\r\n\r\n return;\r\n }\r\n\r\n /** @internal */\r\n public _registerDefinedParameters(state: IRegisterDefinedParametersState): void {\r\n super._registerDefinedParameters(state);\r\n\r\n const { parentParameterNames } = state;\r\n const updatedParentParameterNames: Set<string> = new Set([\r\n ...parentParameterNames,\r\n ...this._registeredParameterParserKeysByName.keys()\r\n ]);\r\n\r\n this._subparserState = {\r\n ...state,\r\n parentParameterNames: updatedParentParameterNames\r\n };\r\n }\r\n\r\n /**\r\n * {@inheritdoc CommandLineParameterProvider.onDefineParameters}\r\n */\r\n protected onDefineParameters(): void {\r\n this.onDefineUnscopedParameters?.();\r\n\r\n if (!this._scopingParameters.length) {\r\n throw new Error(\r\n 'No scoping parameters defined. At least one scoping parameter must be defined. ' +\r\n 'Scoping parameters are defined by setting the parameterGroupName to ' +\r\n 'ScopedCommandLineAction.ScopingParameterGroupName.'\r\n );\r\n }\r\n if (this.remainder) {\r\n throw new Error(\r\n 'Unscoped remainder parameters are not allowed. Remainder parameters can only be defined on ' +\r\n 'the scoped parameter provider in onDefineScopedParameters().'\r\n );\r\n }\r\n\r\n // Consume the remainder of the command-line, which will later be passed the scoped parser.\r\n // This will also prevent developers from calling this.defineCommandLineRemainder(...) since\r\n // we will have already defined it.\r\n this.defineCommandLineRemainder({\r\n description:\r\n 'Scoped parameters. Must be prefixed with \"--\", ex. \"-- --scopedParameter ' +\r\n 'foo --scopedFlag\". For more information on available scoped parameters, use \"-- --help\".'\r\n });\r\n }\r\n\r\n /**\r\n * Retrieves the scoped CommandLineParser, which is populated after the ScopedCommandLineAction is executed.\r\n * @internal\r\n */\r\n protected _getScopedCommandLineParser(): CommandLineParser {\r\n if (!this._scopedCommandLineParser) {\r\n throw new Error('The scoped CommandLineParser is only populated after the action is executed.');\r\n }\r\n return this._scopedCommandLineParser;\r\n }\r\n\r\n /** @internal */\r\n protected _defineParameter(parameter: CommandLineParameter): void {\r\n super._defineParameter(parameter);\r\n if (parameter.parameterGroup === ScopedCommandLineAction.ScopingParameterGroup) {\r\n this._scopingParameters.push(parameter);\r\n }\r\n }\r\n\r\n /**\r\n * The child class should implement this hook to define its unscoped command-line parameters,\r\n * e.g. by calling defineFlagParameter(). At least one scoping parameter must be defined.\r\n * Scoping parameters are defined by setting the parameterGroupName to\r\n * ScopedCommandLineAction.ScopingParameterGroupName.\r\n */\r\n protected onDefineUnscopedParameters?(): void;\r\n\r\n /**\r\n * The child class should implement this hook to define its scoped command-line\r\n * parameters, e.g. by calling scopedParameterProvider.defineFlagParameter(). These\r\n * parameters will only be available if the action is invoked with a scope.\r\n *\r\n * @remarks\r\n * onDefineScopedParameters is called after the unscoped parameters have been parsed.\r\n * The values they provide can be used to vary the defined scope parameters.\r\n */\r\n protected abstract onDefineScopedParameters(scopedParameterProvider: CommandLineParameterProvider): void;\r\n\r\n /**\r\n * {@inheritDoc CommandLineAction.onExecute}\r\n */\r\n protected abstract onExecute(): Promise<void>;\r\n}\r\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CommandLineParameter } from '../parameters/BaseClasses';
|
|
1
|
+
import { type CommandLineParameter } from '../parameters/BaseClasses';
|
|
2
2
|
import { CommandLineAction } from './CommandLineAction';
|
|
3
3
|
export declare class TabCompleteAction extends CommandLineAction {
|
|
4
4
|
private readonly _wordToCompleteParameter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabCompletionAction.d.ts","sourceRoot":"","sources":["../../src/providers/TabCompletionAction.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,oBAAoB,
|
|
1
|
+
{"version":3,"file":"TabCompletionAction.d.ts","sourceRoot":"","sources":["../../src/providers/TabCompletionAction.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,oBAAoB,EAE1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAMxD,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA6B;IACtE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8B;IACjE,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;cA8CvC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,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"}
|
|
@@ -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.\n// See LICENSE in the project root for license information.\n\nimport stringArgv from 'string-argv';\n\nimport { CommandLineIntegerParameter } from '../parameters/CommandLineIntegerParameter';\nimport { CommandLineStringParameter } from '../parameters/CommandLineStringParameter';\nimport {\n CommandLineParameterKind,\n CommandLineParameter,\n CommandLineParameterWithArgument\n} from '../parameters/BaseClasses';\nimport { CommandLineChoiceParameter } from '../parameters/CommandLineChoiceParameter';\nimport { CommandLineAction } from './CommandLineAction';\nimport { CommandLineConstants } from '../Constants';\n\nconst DEFAULT_WORD_TO_AUTOCOMPLETE: string = '';\nconst DEFAULT_POSITION: number = 0;\n\nexport class TabCompleteAction extends CommandLineAction {\n private readonly _wordToCompleteParameter: CommandLineStringParameter;\n private readonly _positionParameter: CommandLineIntegerParameter;\n private readonly _actions: Map<string, Map<string, CommandLineParameter>>;\n private readonly _globalParameters: Map<string, CommandLineParameter>;\n\n public constructor(\n actions: ReadonlyArray<CommandLineAction>,\n globalParameters: ReadonlyArray<CommandLineParameter>\n ) {\n super({\n actionName: CommandLineConstants.TabCompletionActionName,\n summary: 'Provides tab completion.',\n documentation: 'Provides tab completion.'\n });\n\n this._actions = new Map<string, Map<string, CommandLineParameter>>();\n for (const action of actions) {\n const parameterNameToParameterInfoMap: Map<string, CommandLineParameter> = new Map<\n string,\n CommandLineParameter\n >();\n for (const parameter of action.parameters) {\n parameterNameToParameterInfoMap.set(parameter.longName, parameter);\n if (parameter.shortName) {\n parameterNameToParameterInfoMap.set(parameter.shortName, parameter);\n }\n }\n this._actions.set(action.actionName, parameterNameToParameterInfoMap);\n }\n\n this._globalParameters = new Map<string, CommandLineParameter>();\n for (const parameter of globalParameters) {\n this._globalParameters.set(parameter.longName, parameter);\n if (parameter.shortName) {\n this._globalParameters.set(parameter.shortName, parameter);\n }\n }\n\n this._wordToCompleteParameter = this.defineStringParameter({\n parameterLongName: '--word',\n argumentName: 'WORD',\n description: `The word to complete.`,\n defaultValue: DEFAULT_WORD_TO_AUTOCOMPLETE\n });\n\n this._positionParameter = this.defineIntegerParameter({\n parameterLongName: '--position',\n argumentName: 'INDEX',\n description: `The position in the word to be completed.`,\n defaultValue: DEFAULT_POSITION\n });\n }\n\n protected async onExecute(): Promise<void> {\n const commandLine: string = this._wordToCompleteParameter.value || '';\n const caretPosition: number = this._positionParameter.value || (commandLine && commandLine.length) || 0;\n\n for await (const value of this.getCompletions(commandLine, caretPosition)) {\n console.log(value);\n }\n }\n\n public async *getCompletions(\n commandLine: string,\n caretPosition: number = commandLine.length\n ): AsyncIterable<string> {\n const actions: Map<string, Map<string, CommandLineParameter>> = this._actions;\n\n if (!commandLine || !caretPosition) {\n yield* this._getAllActions();\n return;\n }\n\n const tokens: string[] = Array.from(this.tokenizeCommandLine(commandLine));\n\n // offset arguments by the number of global params in the input\n const globalParameterOffset: number = this._getGlobalParameterOffset(tokens);\n\n if (tokens.length < 2 + globalParameterOffset) {\n yield* this._getAllActions();\n return;\n }\n\n const lastToken: string = tokens[tokens.length - 1];\n const secondLastToken: string = tokens[tokens.length - 2];\n\n const completePartialWord: boolean = caretPosition === commandLine.length;\n\n if (completePartialWord && tokens.length === 2 + globalParameterOffset) {\n for (const actionName of actions.keys()) {\n if (actionName.indexOf(tokens[1 + globalParameterOffset]) === 0) {\n yield actionName;\n }\n }\n } else {\n for (const actionName of actions.keys()) {\n if (actionName === tokens[1 + globalParameterOffset]) {\n const parameterNameMap: Map<string, CommandLineParameter> = actions.get(actionName)!;\n\n const parameterNames: string[] = Array.from(parameterNameMap.keys());\n\n if (completePartialWord) {\n for (const parameterName of parameterNames) {\n if (parameterName === secondLastToken) {\n const values: string[] = await this._getParameterValueCompletions(\n parameterNameMap.get(parameterName)!\n );\n if (values.length > 0) {\n yield* this._completeParameterValues(values, lastToken);\n return;\n }\n }\n }\n yield* this._completeParameterValues(parameterNames, lastToken);\n } else {\n for (const parameterName of parameterNames) {\n if (parameterName === lastToken) {\n const values: string[] = await this._getParameterValueCompletions(\n parameterNameMap.get(parameterName)!\n );\n if (values.length > 0) {\n yield* values;\n return;\n }\n }\n }\n for (const parameterName of parameterNames) {\n if (\n parameterName === lastToken &&\n parameterNameMap.get(parameterName)!.kind !== CommandLineParameterKind.Flag\n ) {\n // The parameter is expecting a value, so don't suggest parameter names again\n return;\n }\n }\n\n yield* parameterNames;\n }\n\n break;\n }\n }\n }\n }\n\n private *_getAllActions(): IterableIterator<string> {\n yield* this._actions.keys();\n yield* this._globalParameters.keys();\n }\n\n public tokenizeCommandLine(commandLine: string): string[] {\n return stringArgv(commandLine);\n }\n\n private async _getParameterValueCompletions(parameter: CommandLineParameter): Promise<string[]> {\n let choiceParameterValues: string[] = [];\n if (parameter.kind === CommandLineParameterKind.Choice) {\n choiceParameterValues = (parameter as CommandLineChoiceParameter).alternatives as string[];\n } else if (parameter.kind !== CommandLineParameterKind.Flag) {\n let parameterWithArgumentOrChoices:\n | CommandLineParameterWithArgument\n | CommandLineChoiceParameter\n | undefined = undefined;\n if (parameter instanceof CommandLineParameterWithArgument) {\n parameterWithArgumentOrChoices = parameter as CommandLineParameterWithArgument;\n } else if (parameter instanceof CommandLineChoiceParameter) {\n parameterWithArgumentOrChoices = parameter as CommandLineChoiceParameter;\n }\n if (parameterWithArgumentOrChoices && parameterWithArgumentOrChoices.completions) {\n choiceParameterValues = await parameterWithArgumentOrChoices.completions();\n }\n }\n\n return choiceParameterValues;\n }\n\n private _getGlobalParameterOffset(tokens: string[]): number {\n const globalParameters: Map<string, CommandLineParameter> = this._globalParameters;\n let count: number = 0;\n\n outer: for (let i: number = 1; i < tokens.length; i++) {\n for (const globalParameter of globalParameters.values()) {\n if (tokens[i] !== globalParameter.longName && tokens[i] !== globalParameter.shortName) {\n break outer;\n }\n }\n count++;\n }\n\n return count;\n }\n\n private *_completeParameterValues(\n choiceParameterValues: string[],\n lastToken: string\n ): IterableIterator<string> {\n for (const choiceParameterValue of choiceParameterValues) {\n if (choiceParameterValue.indexOf(lastToken) === 0) {\n yield choiceParameterValue;\n }\n }\n }\n}\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 type { CommandLineIntegerParameter } from '../parameters/CommandLineIntegerParameter';\r\nimport type { CommandLineStringParameter } from '../parameters/CommandLineStringParameter';\r\nimport {\r\n CommandLineParameterKind,\r\n type CommandLineParameter,\r\n CommandLineParameterWithArgument\r\n} from '../parameters/BaseClasses';\r\nimport { CommandLineChoiceParameter } from '../parameters/CommandLineChoiceParameter';\r\nimport { CommandLineAction } from './CommandLineAction';\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 readonly _wordToCompleteParameter: CommandLineStringParameter;\r\n private readonly _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 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 // eslint-disable-next-line no-console\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.17.0",
|
|
4
4
|
"description": "An object-oriented command-line parser for TypeScript",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
"string-argv": "~0.3.1"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"@rushstack/heft": "0.
|
|
21
|
-
"@rushstack/heft-node-rig": "2.2
|
|
20
|
+
"@rushstack/heft": "0.62.0",
|
|
21
|
+
"@rushstack/heft-node-rig": "2.3.2",
|
|
22
22
|
"@types/heft-jest": "1.0.1",
|
|
23
23
|
"@types/node": "18.17.15",
|
|
24
|
-
"
|
|
24
|
+
"local-eslint-config": "1.0.0"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "heft build --clean",
|