From 6d2797362964212fb00b84b1d106c06a21d1e61b Mon Sep 17 00:00:00 2001 From: Min Kim Date: Wed, 11 Dec 2024 02:35:33 -0500 Subject: [PATCH] Apply suffix/prefix for generated dirname Signed-off-by: Min Kim --- packages/cli/src/commands/new/new.ts | 20 ++++++++++++-------- packages/cli/src/commands/new/types.ts | 3 +++ packages/cli/src/commands/new/util.ts | 24 ++++++++++++++++++------ 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/packages/cli/src/commands/new/new.ts b/packages/cli/src/commands/new/new.ts index 320b1f5772..aa1520ff6c 100644 --- a/packages/cli/src/commands/new/new.ts +++ b/packages/cli/src/commands/new/new.ts @@ -35,6 +35,7 @@ import { verifyTemplate, promptOptions, populateOptions, + createDirName, } from './util'; export default async () => { @@ -60,6 +61,9 @@ export default async () => { return dir; } + const dirName = createDirName(template, options); + const targetDir = paths.resolveTargetRoot(options.targetPath, dirName); + let modified = false; try { await executePluginPackageTemplate( @@ -74,23 +78,23 @@ export default async () => { }, }, { - targetDir: options.targetDir, + targetDir, templateDir: template.templatePath, values: { name: resolvePackageName({ - baseName: options.id, + baseName: dirName, // convert to dirname scope: options.scope, plugin: template.plugin ?? true, }), pluginVersion: options.baseVersion, + moduleVar: '', // backend module + extension: '', // frontend plugin + pluginVar: '', // backend plugin ...options, }, }, ); - // create scope prompt - // double check default template paths - // create additional actions // install to app // install to backend @@ -99,15 +103,15 @@ export default async () => { if (options.install) { // 🚨 temporary if (options.owner) { - await addCodeownersEntry(options.targetDir, options.owner); + await addCodeownersEntry(targetDir, options.owner); } await Task.forCommand('yarn install', { - cwd: options.targetDir, + cwd: targetDir, optional: true, }); await Task.forCommand('yarn lint --fix', { - cwd: options.targetDir, + cwd: targetDir, optional: true, }); } diff --git a/packages/cli/src/commands/new/types.ts b/packages/cli/src/commands/new/types.ts index 4ab1341a5d..2cbca32e16 100644 --- a/packages/cli/src/commands/new/types.ts +++ b/packages/cli/src/commands/new/types.ts @@ -28,6 +28,9 @@ export interface Template { template: string; templatePath: string; targetPath: string; + plugin?: boolean; + backendModulePrefix?: boolean; + suffix?: string; prompts?: ConfigurablePrompt[]; additionalActions?: string[]; } diff --git a/packages/cli/src/commands/new/util.ts b/packages/cli/src/commands/new/util.ts index 5c0918f743..6e18cea949 100644 --- a/packages/cli/src/commands/new/util.ts +++ b/packages/cli/src/commands/new/util.ts @@ -168,7 +168,7 @@ interface Options extends Record { private: boolean; baseVersion: string; license: string; - targetDir: string; + targetPath: string; owner: string; scope: string; } @@ -192,16 +192,28 @@ export async function populateOptions( template: Template, ): Promise { return { - id: prompts.id, + id: prompts.id ?? '', private: false, baseVersion: await calculateBaseVersion(prompts.baseVersion), owner: prompts.owner ?? '', license: prompts.license ?? 'Apache-2.0', - targetDir: paths.resolveTargetRoot( - prompts.targetPath ?? template.targetPath, - prompts.id as string, - ), + targetPath: prompts.targetPath ?? template.targetPath, scope: prompts.scope ?? '', ...prompts, }; } + +export function createDirName(template: Template, options: Options) { + if (!options.id) { + throw new Error(`id prompt is mandatory for all cli templates`); + } + if (template.backendModulePrefix) { + if (!options.moduleId) { + throw new Error(`backendModulePrefix requires moduleId prompt`); + } + return `${options.id}-backend-module-${options.moduleId}`; + } else if (template.suffix) { + return `${options.id}-${template.suffix}`; + } + return options.id; +}