From 616be453eb9beed03dcd1392d2c84bd1c19d5b33 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 7 Feb 2025 14:37:18 +0100 Subject: [PATCH] cli/new: merge global overrides into config Signed-off-by: Patrik Oldsberg --- .../lib/new/collection/collectTemplateParams.test.ts | 6 ++++-- .../src/lib/new/collection/collectTemplateParams.ts | 6 ++---- packages/cli/src/lib/new/collection/prompts.ts | 8 +------- packages/cli/src/lib/new/createNewPackage.ts | 5 +++-- packages/cli/src/lib/new/preparation/loadConfig.ts | 10 ++++++++-- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/packages/cli/src/lib/new/collection/collectTemplateParams.test.ts b/packages/cli/src/lib/new/collection/collectTemplateParams.test.ts index a4ca4f412d..b92fe385c8 100644 --- a/packages/cli/src/lib/new/collection/collectTemplateParams.test.ts +++ b/packages/cli/src/lib/new/collection/collectTemplateParams.test.ts @@ -30,7 +30,6 @@ describe('collectTemplateParams', () => { templatePath: '/test', targetPath: '/example', }, - globals: {}, prefilledParams: {}, }; @@ -49,7 +48,10 @@ describe('collectTemplateParams', () => { it('should include all non-standard global and prompt values', async () => { await expect( - collectTemplateParams({ ...baseOptions, globals: { foo: 'bar' } }), + collectTemplateParams({ + ...baseOptions, + config: { ...baseOptions.config, globals: { foo: 'bar' } }, + }), ).resolves.toEqual({ id: '', private: true, diff --git a/packages/cli/src/lib/new/collection/collectTemplateParams.ts b/packages/cli/src/lib/new/collection/collectTemplateParams.ts index a9c7c92f3c..fc1879bd46 100644 --- a/packages/cli/src/lib/new/collection/collectTemplateParams.ts +++ b/packages/cli/src/lib/new/collection/collectTemplateParams.ts @@ -24,7 +24,6 @@ import { Options } from '../execution/utils'; type CollectTemplateParamsOptions = { config: NewConfig; template: NewTemplate; - globals: Record; prefilledParams: Record; }; @@ -41,7 +40,7 @@ const defaultParams = { export async function collectTemplateParams( options: CollectTemplateParamsOptions, ): Promise { - const { config, template, globals, prefilledParams } = options; + const { config, template, prefilledParams } = options; const codeOwnersFilePath = await getCodeownersFilePath(paths.targetRoot); @@ -64,13 +63,12 @@ export async function collectTemplateParams( typeof prompt === 'string' ? prompt : prompt.id, ), ) ?? [], - globals: config.globals, codeOwnersFilePath, }); return { ...defaultParams, - ...globals, + ...config.globals, ...prefilledAnswers, ...promptAnswers, targetPath: template.targetPath, diff --git a/packages/cli/src/lib/new/collection/prompts.ts b/packages/cli/src/lib/new/collection/prompts.ts index 842bffb458..fa2f88d8e1 100644 --- a/packages/cli/src/lib/new/collection/prompts.ts +++ b/packages/cli/src/lib/new/collection/prompts.ts @@ -95,11 +95,9 @@ export function ownerPrompt( export async function promptOptions({ prompts, - globals, codeOwnersFilePath, }: { prompts: NewTemplatePrompt[]; - globals: { [name in string]?: string | boolean | number }; codeOwnersFilePath: string | undefined; }): Promise> { const answers = await inquirer.prompt( @@ -124,10 +122,6 @@ export async function promptOptions({ type: 'input', name: prompt.id, message: prompt.prompt, - default: - globals[prompt.id] !== undefined - ? globals[prompt.id] - : prompt.default, validate: (value: string) => { if (!value) { return `Please provide a value for ${prompt.id}`; @@ -152,5 +146,5 @@ export async function promptOptions({ }; }), ); - return { ...globals, ...answers }; + return { ...answers }; } diff --git a/packages/cli/src/lib/new/createNewPackage.ts b/packages/cli/src/lib/new/createNewPackage.ts index dd8b71a68f..64ee02da3a 100644 --- a/packages/cli/src/lib/new/createNewPackage.ts +++ b/packages/cli/src/lib/new/createNewPackage.ts @@ -33,7 +33,9 @@ export type CreateNewPackageOptions = { }; export async function createNewPackage(options: CreateNewPackageOptions) { - const config = await loadConfig(); + const config = await loadConfig({ + globalOverrides: options.globals, + }); const selectedTemplate = await selectTemplateInteractively( config, @@ -44,7 +46,6 @@ export async function createNewPackage(options: CreateNewPackageOptions) { const params = await collectTemplateParams({ config, template, - globals: options.globals, prefilledParams: options.prefilledParams, }); diff --git a/packages/cli/src/lib/new/preparation/loadConfig.ts b/packages/cli/src/lib/new/preparation/loadConfig.ts index 9c3a600b29..b84b02ebc7 100644 --- a/packages/cli/src/lib/new/preparation/loadConfig.ts +++ b/packages/cli/src/lib/new/preparation/loadConfig.ts @@ -47,7 +47,13 @@ const pkgJsonWithNewConfigSchema = z.object({ .optional(), }); -export async function loadConfig(): Promise { +type LoadConfigOptions = { + globalOverrides: Record; +}; + +export async function loadConfig( + options: LoadConfigOptions, +): Promise { const pkgPath = paths.resolveTargetRoot('package.json'); const pkgJson = await fs.readJson(pkgPath); @@ -64,6 +70,6 @@ export async function loadConfig(): Promise { return { isUsingDefaultTemplates: !newConfig?.templates, templatePointers: newConfig?.templates ?? defaultTemplates, - globals: newConfig?.globals ?? {}, + globals: { ...newConfig?.globals, ...options.globalOverrides }, }; }