From 086ae2027356db99f490b6989d73145a6c583051 Mon Sep 17 00:00:00 2001 From: Ian Clanton-Thuon Date: Tue, 22 Apr 2025 00:11:44 -0400 Subject: [PATCH] Refactor plugin definition. --- .../pluginFramework/HeftParameterManager.ts | 125 ++++++++++-------- ...ter-manager-refactor_2025-04-22-04-13.json | 11 ++ 2 files changed, 81 insertions(+), 55 deletions(-) create mode 100644 common/changes/@rushstack/heft/parameter-manager-refactor_2025-04-22-04-13.json diff --git a/apps/heft/src/pluginFramework/HeftParameterManager.ts b/apps/heft/src/pluginFramework/HeftParameterManager.ts index 862a80598e7..edf79c00fd4 100644 --- a/apps/heft/src/pluginFramework/HeftParameterManager.ts +++ b/apps/heft/src/pluginFramework/HeftParameterManager.ts @@ -135,7 +135,7 @@ export interface IHeftParameterManagerOptions { export class HeftParameterManager { private readonly _options: IHeftParameterManagerOptions; - // plugin defintiion => parameter accessors and defaults + // plugin definition => parameter accessors and defaults private readonly _heftParametersByDefinition: Map = new Map(); // plugin definition => Map< parameter long name => applied parameter > private readonly _parametersByDefinition: Map> = @@ -240,110 +240,125 @@ export class HeftParameterManager { /** * Add the parameters specified by a plugin definition to the command line parameter provider. * Duplicate parameters are allowed, as long as they have different parameter scopes. In this - * case, the parameter will only be referencable by the CLI argument + * case, the parameter will only be referenceable by the CLI argument * "--:". If there is no duplicate parameter, it will also be - * referencable by the CLI argument "--". + * referenceable by the CLI argument "--". */ private _addParametersToProvider( pluginDefinition: HeftPluginDefinitionBase, commandLineParameterProvider: CommandLineParameterProvider ): void { + const { + pluginName, + pluginPackageName, + pluginParameterScope: parameterScope, + pluginParameters + } = pluginDefinition; const existingDefinitionWithScope: HeftPluginDefinitionBase | undefined = - this._pluginDefinitionsByScope.get(pluginDefinition.pluginParameterScope); + this._pluginDefinitionsByScope.get(parameterScope); if (existingDefinitionWithScope && existingDefinitionWithScope !== pluginDefinition) { + const { pluginName: existingScopePluginName, pluginPackageName: existingScopePluginPackageName } = + existingDefinitionWithScope; throw new Error( - `Plugin ${JSON.stringify(pluginDefinition.pluginName)} in package ` + - `${JSON.stringify(pluginDefinition.pluginPackageName)} specifies the same parameter scope ` + - `${JSON.stringify(pluginDefinition.pluginParameterScope)} as plugin ` + - `${JSON.stringify(existingDefinitionWithScope.pluginName)} from package ` + - `${JSON.stringify(existingDefinitionWithScope.pluginPackageName)}.` + `Plugin ${JSON.stringify(pluginName)} in package ` + + `${JSON.stringify(pluginPackageName)} specifies the same parameter scope ` + + `${JSON.stringify(parameterScope)} as plugin ` + + `${JSON.stringify(existingScopePluginName)} from package ` + + `${JSON.stringify(existingScopePluginPackageName)}.` ); } else { - this._pluginDefinitionsByScope.set(pluginDefinition.pluginParameterScope, pluginDefinition); + this._pluginDefinitionsByScope.set(parameterScope, pluginDefinition); } const definedPluginParametersByName: Map = this._parametersByDefinition.get(pluginDefinition)!; - for (const parameter of pluginDefinition.pluginParameters) { + for (const parameter of pluginParameters) { let definedParameter: CommandLineParameter; + const { description, required, longName: parameterLongName, shortName: parameterShortName } = parameter; switch (parameter.parameterKind) { case 'choiceList': { + const { alternatives } = parameter; definedParameter = commandLineParameterProvider.defineChoiceListParameter({ - description: parameter.description, - required: parameter.required, - alternatives: parameter.alternatives.map((p: IChoiceParameterAlternativeJson) => p.name), - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - parameterScope: pluginDefinition.pluginParameterScope + description, + required, + alternatives: alternatives.map((p: IChoiceParameterAlternativeJson) => p.name), + parameterLongName, + parameterShortName, + parameterScope }); break; } case 'choice': { + const { alternatives, defaultValue } = parameter; definedParameter = commandLineParameterProvider.defineChoiceParameter({ - description: parameter.description, - required: parameter.required, - alternatives: parameter.alternatives.map((p: IChoiceParameterAlternativeJson) => p.name), - defaultValue: parameter.defaultValue, - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - parameterScope: pluginDefinition.pluginParameterScope + description, + required, + alternatives: alternatives.map((p: IChoiceParameterAlternativeJson) => p.name), + defaultValue, + parameterLongName, + parameterShortName, + parameterScope }); break; } case 'flag': { definedParameter = commandLineParameterProvider.defineFlagParameter({ - description: parameter.description, - required: parameter.required, - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - parameterScope: pluginDefinition.pluginParameterScope + description, + required, + parameterLongName, + parameterShortName, + parameterScope }); break; } case 'integerList': { + const { argumentName } = parameter; definedParameter = commandLineParameterProvider.defineIntegerListParameter({ - description: parameter.description, - required: parameter.required, - argumentName: parameter.argumentName, - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - parameterScope: pluginDefinition.pluginParameterScope + description, + required, + argumentName, + parameterLongName, + parameterShortName, + parameterScope }); break; } case 'integer': { + const { argumentName, defaultValue } = parameter; definedParameter = commandLineParameterProvider.defineIntegerParameter({ - description: parameter.description, - required: parameter.required, - argumentName: parameter.argumentName, - defaultValue: parameter.defaultValue, - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - parameterScope: pluginDefinition.pluginParameterScope + description, + required, + argumentName, + defaultValue, + parameterLongName, + parameterShortName, + parameterScope }); break; } case 'stringList': { + const { argumentName } = parameter; definedParameter = commandLineParameterProvider.defineStringListParameter({ - description: parameter.description, - required: parameter.required, - argumentName: parameter.argumentName, - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - parameterScope: pluginDefinition.pluginParameterScope + description, + required, + argumentName, + parameterLongName, + parameterShortName, + parameterScope }); break; } case 'string': { + const { argumentName, defaultValue } = parameter; definedParameter = commandLineParameterProvider.defineStringParameter({ - description: parameter.description, - required: parameter.required, - argumentName: parameter.argumentName, - defaultValue: parameter.defaultValue, - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - parameterScope: pluginDefinition.pluginParameterScope + description, + required, + argumentName, + defaultValue, + parameterLongName, + parameterShortName, + parameterScope }); break; } diff --git a/common/changes/@rushstack/heft/parameter-manager-refactor_2025-04-22-04-13.json b/common/changes/@rushstack/heft/parameter-manager-refactor_2025-04-22-04-13.json new file mode 100644 index 00000000000..ef525830e37 --- /dev/null +++ b/common/changes/@rushstack/heft/parameter-manager-refactor_2025-04-22-04-13.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/heft" + } + ], + "packageName": "@rushstack/heft", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file