feat: Allow dynamically adding CLI parameters in configs

This commit is contained in:
Joachim Van Herwegen
2022-04-13 17:06:46 +02:00
parent e6519992bf
commit bedab907f9
7 changed files with 159 additions and 30 deletions

View File

@@ -31,10 +31,13 @@ export class YargsCliExtractor extends CliExtractor {
* @param parameters - Parameters that should be parsed from the CLI. @range {json}
* Format details can be found at https://yargs.js.org/docs/#api-reference-optionskey-opt
* @param options - Additional options to configure yargs. @range {json}
* @param extendedParameters - The same as @parameters. Separate variable so in Components.js
* we can have both a default set and a user-added version. @range {json}
*/
public constructor(parameters: YargsArgOptions = {}, options: CliOptions = {}) {
public constructor(parameters: YargsArgOptions = {}, options: CliOptions = {},
extendedParameters: YargsArgOptions = {}) {
super();
this.yargsArgOptions = parameters;
this.yargsArgOptions = { ...parameters, ...extendedParameters };
this.yargvOptions = options;
}

View File

@@ -6,16 +6,16 @@ import { SettingsResolver } from './SettingsResolver';
* Generates variable values by running a set of {@link SettingsExtractor}s on the input.
*/
export class CombinedSettingsResolver extends SettingsResolver {
public readonly computers: Record<string, SettingsExtractor>;
public readonly resolvers: Record<string, SettingsExtractor>;
public constructor(computers: Record<string, SettingsExtractor>) {
public constructor(resolvers: Record<string, SettingsExtractor>) {
super();
this.computers = computers;
this.resolvers = resolvers;
}
public async handle(input: Record<string, unknown>): Promise<Record<string, unknown>> {
const vars: Record<string, any> = {};
for (const [ name, computer ] of Object.entries(this.computers)) {
for (const [ name, computer ] of Object.entries(this.resolvers)) {
try {
vars[name] = await computer.handleSafe(input);
} catch (err: unknown) {