From 2e6bd761e06ff1cbb78ec846c52868bb6403a43b Mon Sep 17 00:00:00 2001 From: "Micael Levi (@micalevisk)" Date: Fri, 8 Apr 2022 23:32:03 -0400 Subject: [PATCH 1/3] fix: package name option name for 'application' schematics As the `application` schematics on `@nestjs/schematics` defines the name `packageManager` to select the package manager to use, we could use pass it directly from `nest new` command. --- actions/new.action.ts | 11 ++++------- commands/new.command.ts | 6 +++--- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/actions/new.action.ts b/actions/new.action.ts index 044786eb0..d99e17947 100644 --- a/actions/new.action.ts +++ b/actions/new.action.ts @@ -120,10 +120,7 @@ const generateApplicationFiles = async (args: Input[], options: Input[]) => { const mapSchematicOptions = (options: Input[]): SchematicOption[] => { return options.reduce( (schematicOptions: SchematicOption[], option: Input) => { - if ( - option.name !== 'skip-install' && - option.value !== 'package-manager' - ) { + if (option.name !== 'skip-install') { schematicOptions.push(new SchematicOption(option.name, option.value)); } return schematicOptions; @@ -138,7 +135,7 @@ const installPackages = async ( installDirectory: string, ) => { const inputPackageManager: string = options.find( - (option) => option.name === 'package-manager', + (option) => option.name === 'packageManager', )!.value as string; let packageManager: AbstractPackageManager; @@ -168,12 +165,12 @@ const installPackages = async ( const selectPackageManager = async (): Promise => { const answers: Answers = await askForPackageManager(); - return PackageManagerFactory.create(answers['package-manager']); + return PackageManagerFactory.create(answers['packageManager']); }; const askForPackageManager = async (): Promise => { const questions: Question[] = [ - generateSelect('package-manager')(MESSAGES.PACKAGE_MANAGER_QUESTION)([ + generateSelect('packageManager')(MESSAGES.PACKAGE_MANAGER_QUESTION)([ PackageManager.NPM, PackageManager.YARN, PackageManager.PNPM, diff --git a/commands/new.command.ts b/commands/new.command.ts index f60db4fc3..7cbfb2ea7 100644 --- a/commands/new.command.ts +++ b/commands/new.command.ts @@ -18,8 +18,8 @@ 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 [package-manager]', - 'Specify package manager.' + '-p, --package-manager [packageManager]', + 'Specify package manager.', ) .option( '-l, --language [language]', @@ -41,7 +41,7 @@ export class NewCommand extends AbstractCommand { options.push({ name: 'skip-install', value: command.skipInstall }); options.push({ name: 'strict', value: command.strict }); options.push({ - name: 'package-manager', + name: 'packageManager', value: command.packageManager, }); options.push({ name: 'collection', value: command.collection }); From cacca97e2fc01fda33ef7ef3795398ec63f014d1 Mon Sep 17 00:00:00 2001 From: "Micael Levi (@micalevisk)" Date: Thu, 24 Mar 2022 22:39:56 -0400 Subject: [PATCH 2/3] fix: when selecting the package manager --- actions/new.action.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/actions/new.action.ts b/actions/new.action.ts index d99e17947..46b33ae7f 100644 --- a/actions/new.action.ts +++ b/actions/new.action.ts @@ -32,7 +32,7 @@ export class NewAction extends AbstractAction { const dryRunOption = options.find((option) => option.name === 'dry-run'); const isDryRunEnabled = dryRunOption && dryRunOption.value; - await askForMissingInformation(inputs); + await askForMissingInformation(inputs, options); await generateApplicationFiles(inputs, options).catch(exit); const shouldSkipInstall = options.some( @@ -68,6 +68,9 @@ export class NewAction extends AbstractAction { const getApplicationNameInput = (inputs: Input[]) => inputs.find((input) => input.name === 'name'); +const getPackageManagerInput = (inputs: Input[]) => + inputs.find((options) => options.name === 'packageManager'); + const getProjectDirectory = ( applicationName: Input, directoryOption?: Input, @@ -78,11 +81,12 @@ const getProjectDirectory = ( ); }; -const askForMissingInformation = async (inputs: Input[]) => { +const askForMissingInformation = async (inputs: Input[], options: Input[]) => { console.info(MESSAGES.PROJECT_INFORMATION_START); console.info(); const prompt: inquirer.PromptModule = inquirer.createPromptModule(); + const nameInput = getApplicationNameInput(inputs); if (!nameInput!.value) { const message = 'What name would you like to use for the new project?'; @@ -90,6 +94,12 @@ const askForMissingInformation = async (inputs: Input[]) => { const answers: Answers = await prompt(questions as ReadonlyArray); replaceInputMissingInformation(inputs, answers); } + + const packageManagerInput = getPackageManagerInput(options); + if (!packageManagerInput!.value) { + const answers = await askForPackageManager(); + replaceInputMissingInformation(options, answers); + } }; const replaceInputMissingInformation = ( From 11d551b789b971c2ef7e6f0a0020461f1e29268c Mon Sep 17 00:00:00 2001 From: "Micael Levi (@micalevisk)" Date: Thu, 24 Mar 2022 22:55:32 -0400 Subject: [PATCH 3/3] refactor: remove dead code on `new` action packages installation --- actions/new.action.ts | 29 +++++++---------------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/actions/new.action.ts b/actions/new.action.ts index 46b33ae7f..231733ebd 100644 --- a/actions/new.action.ts +++ b/actions/new.action.ts @@ -144,9 +144,7 @@ const installPackages = async ( dryRunMode: boolean, installDirectory: string, ) => { - const inputPackageManager: string = options.find( - (option) => option.name === 'packageManager', - )!.value as string; + const inputPackageManager = getPackageManagerInput(options)!.value as string; let packageManager: AbstractPackageManager; if (dryRunMode) { @@ -155,29 +153,16 @@ const installPackages = async ( console.info(); return; } - if (inputPackageManager !== undefined) { - try { - packageManager = PackageManagerFactory.create(inputPackageManager); - await packageManager.install(installDirectory, inputPackageManager); - } catch (error) { - if (error && error.message) { - console.error(chalk.red(error.message)); - } + try { + packageManager = PackageManagerFactory.create(inputPackageManager); + await packageManager.install(installDirectory, inputPackageManager); + } catch (error) { + if (error && error.message) { + console.error(chalk.red(error.message)); } - } else { - packageManager = await selectPackageManager(); - await packageManager.install( - installDirectory, - packageManager.name.toLowerCase(), - ); } }; -const selectPackageManager = async (): Promise => { - const answers: Answers = await askForPackageManager(); - return PackageManagerFactory.create(answers['packageManager']); -}; - const askForPackageManager = async (): Promise => { const questions: Question[] = [ generateSelect('packageManager')(MESSAGES.PACKAGE_MANAGER_QUESTION)([