From a0b15d93f41f6d403cc5e1a325bbde1d772f2475 Mon Sep 17 00:00:00 2001 From: "nika.chinchaladze" Date: Fri, 25 Jul 2025 18:11:45 +0400 Subject: [PATCH] refactor(cli): simplify and clean up new command option mapping --- commands/new.command.ts | 74 ++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 41 deletions(-) diff --git a/commands/new.command.ts b/commands/new.command.ts index 28b595e1e..c9a6390b2 100644 --- a/commands/new.command.ts +++ b/commands/new.command.ts @@ -17,10 +17,7 @@ export class NewCommand extends AbstractCommand { ) .option('-g, --skip-git', 'Skip git repository initialization.', false) .option('-s, --skip-install', 'Skip package installation.', false) - .option( - '-p, --package-manager [packageManager]', - 'Specify package manager.', - ) + .option('-p, --package-manager [packageManager]', 'Specify package manager.') .option( '-l, --language [language]', 'Programming language to be used (TypeScript or JavaScript)', @@ -33,46 +30,41 @@ export class NewCommand extends AbstractCommand { ) .option('--strict', 'Enables strict mode in TypeScript.', false) .action(async (name: string, command: Command) => { - const options: Input[] = []; - const availableLanguages = ['js', 'ts', 'javascript', 'typescript']; - options.push({ name: 'directory', value: command.directory }); - options.push({ name: 'dry-run', value: command.dryRun }); - options.push({ name: 'skip-git', value: command.skipGit }); - options.push({ name: 'skip-install', value: command.skipInstall }); - options.push({ name: 'strict', value: command.strict }); - options.push({ - name: 'packageManager', - value: command.packageManager, - }); - options.push({ name: 'collection', value: command.collection }); + const langInput = command.language?.toLowerCase(); + const langMap: Record = { + javascript: 'js', + typescript: 'ts', + }; - if (!!command.language) { - const lowercasedLanguage = command.language.toLowerCase(); - const langMatch = availableLanguages.includes(lowercasedLanguage); - if (!langMatch) { - throw new Error( - `Invalid language "${command.language}" selected. Available languages are "typescript" or "javascript"`, - ); - } - switch (lowercasedLanguage) { - case 'javascript': - command.language = 'js'; - break; - case 'typescript': - command.language = 'ts'; - break; - default: - command.language = lowercasedLanguage; - break; - } + if (langInput && !['js', 'ts', 'javascript', 'typescript'].includes(langInput)) { + throw new Error( + `Invalid language "${command.language}" selected. Available languages are "typescript" or "javascript".`, + ); } - options.push({ - name: 'language', - value: command.language, - }); - const inputs: Input[] = []; - inputs.push({ name: 'name', value: name }); + command.language = langMap[langInput] || langInput; + + const cliKeys: Record = { + dryRun: 'dry-run', + skipGit: 'skip-git', + skipInstall: 'skip-install', + }; + + const options: Input[] = [ + 'directory', + 'dryRun', + 'skipGit', + 'skipInstall', + 'strict', + 'packageManager', + 'collection', + 'language', + ].map((key) => ({ + name: cliKeys[key] ?? key, + value: command[key], + })); + + const inputs: Input[] = [{ name: 'name', value: name }]; await this.action.handle(inputs, options); });