From d27b20275739d542cbf979ae30df3d35e04da747 Mon Sep 17 00:00:00 2001 From: Onur Ravli Date: Sat, 3 Feb 2024 20:43:41 +0300 Subject: [PATCH 1/7] feat(new): check for installed package managers --- actions/new.action.ts | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/actions/new.action.ts b/actions/new.action.ts index 99c3fef50..b4000d7f0 100644 --- a/actions/new.action.ts +++ b/actions/new.action.ts @@ -64,6 +64,33 @@ export class NewAction extends AbstractAction { } } +const isNpmInstalled = () => { + try { + execSync('which npm'); + return true; + } catch (error) { + return false; + } +}; + +const isYarnInstalled = () => { + try { + execSync('which yarn'); + return true; + } catch (error) { + return false; + } +}; + +const isPnpmInstalled = () => { + try { + execSync('which pnpm'); + return true; + } catch (error) { + return false; + } +}; + const getApplicationNameInput = (inputs: Input[]) => inputs.find((input) => input.name === 'name'); @@ -163,12 +190,14 @@ const installPackages = async ( }; const askForPackageManager = async (): Promise => { + const installedPackageManagers = []; + if (isNpmInstalled()) installedPackageManagers.push(PackageManager.NPM); + if (isYarnInstalled()) installedPackageManagers.push(PackageManager.YARN); + if (isPnpmInstalled()) installedPackageManagers.push(PackageManager.PNPM); const questions: Question[] = [ - generateSelect('packageManager')(MESSAGES.PACKAGE_MANAGER_QUESTION)([ - PackageManager.NPM, - PackageManager.YARN, - PackageManager.PNPM, - ]), + generateSelect('packageManager')(MESSAGES.PACKAGE_MANAGER_QUESTION)( + installedPackageManagers, + ), ]; const prompt = inquirer.createPromptModule(); return await prompt(questions); From 8764160ebb90c492c3a272b6b4b8ae36a195bf04 Mon Sep 17 00:00:00 2001 From: Onur Ravli Date: Sat, 3 Feb 2024 21:04:57 +0300 Subject: [PATCH 2/7] feat(new): check for installed package managers by `packageManager -v` --- actions/new.action.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/actions/new.action.ts b/actions/new.action.ts index b4000d7f0..6bb2c2e2c 100644 --- a/actions/new.action.ts +++ b/actions/new.action.ts @@ -66,7 +66,7 @@ export class NewAction extends AbstractAction { const isNpmInstalled = () => { try { - execSync('which npm'); + execSync('npm -v'); return true; } catch (error) { return false; @@ -75,7 +75,7 @@ const isNpmInstalled = () => { const isYarnInstalled = () => { try { - execSync('which yarn'); + execSync('yarn -v'); return true; } catch (error) { return false; @@ -84,7 +84,7 @@ const isYarnInstalled = () => { const isPnpmInstalled = () => { try { - execSync('which pnpm'); + execSync('pnpm -v'); return true; } catch (error) { return false; From f874453db76be737fc910b906a800cc89ea75eda Mon Sep 17 00:00:00 2001 From: Onur Ravli Date: Sat, 3 Feb 2024 21:09:07 +0300 Subject: [PATCH 3/7] chore(new): generalize package manager controlling function --- actions/new.action.ts | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/actions/new.action.ts b/actions/new.action.ts index 6bb2c2e2c..b8aa00074 100644 --- a/actions/new.action.ts +++ b/actions/new.action.ts @@ -64,27 +64,11 @@ export class NewAction extends AbstractAction { } } -const isNpmInstalled = () => { +const isThisPackageManagerInstalled = (packageManager: string) => { try { - execSync('npm -v'); - return true; - } catch (error) { - return false; - } -}; - -const isYarnInstalled = () => { - try { - execSync('yarn -v'); - return true; - } catch (error) { - return false; - } -}; - -const isPnpmInstalled = () => { - try { - execSync('pnpm -v'); + execSync(`${packageManager} -v`, { + stdio: 'ignore', + }); return true; } catch (error) { return false; @@ -191,9 +175,12 @@ const installPackages = async ( const askForPackageManager = async (): Promise => { const installedPackageManagers = []; - if (isNpmInstalled()) installedPackageManagers.push(PackageManager.NPM); - if (isYarnInstalled()) installedPackageManagers.push(PackageManager.YARN); - if (isPnpmInstalled()) installedPackageManagers.push(PackageManager.PNPM); + if (isThisPackageManagerInstalled('npm')) + installedPackageManagers.push(PackageManager.NPM); + if (isThisPackageManagerInstalled('yarn')) + installedPackageManagers.push(PackageManager.YARN); + if (isThisPackageManagerInstalled('pnpm')) + installedPackageManagers.push(PackageManager.PNPM); const questions: Question[] = [ generateSelect('packageManager')(MESSAGES.PACKAGE_MANAGER_QUESTION)( installedPackageManagers, From 56493f6d8c5b11e0f871c3ec77aa99582e465e49 Mon Sep 17 00:00:00 2001 From: Onur Ravli Date: Sun, 4 Feb 2024 18:32:09 +0300 Subject: [PATCH 4/7] chore(cli): remove unused error --- actions/new.action.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/new.action.ts b/actions/new.action.ts index b8aa00074..f1400cf2d 100644 --- a/actions/new.action.ts +++ b/actions/new.action.ts @@ -70,7 +70,7 @@ const isThisPackageManagerInstalled = (packageManager: string) => { stdio: 'ignore', }); return true; - } catch (error) { + } catch { return false; } }; From c517e575e7d9be71d748a4bddd3781b209cace04 Mon Sep 17 00:00:00 2001 From: Onur Ravli Date: Sun, 4 Feb 2024 23:42:21 +0300 Subject: [PATCH 5/7] chore(new): refactor `askForPackageManager` function --- actions/new.action.ts | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/actions/new.action.ts b/actions/new.action.ts index f1400cf2d..40d0ea5cc 100644 --- a/actions/new.action.ts +++ b/actions/new.action.ts @@ -174,13 +174,26 @@ const installPackages = async ( }; const askForPackageManager = async (): Promise => { - const installedPackageManagers = []; - if (isThisPackageManagerInstalled('npm')) - installedPackageManagers.push(PackageManager.NPM); - if (isThisPackageManagerInstalled('yarn')) - installedPackageManagers.push(PackageManager.YARN); - if (isThisPackageManagerInstalled('pnpm')) - installedPackageManagers.push(PackageManager.PNPM); + const possiblePackageManagers = [ + { + id: 'npm', + packageManager: PackageManager.NPM, + }, + { + id: 'yarn', + packageManager: PackageManager.YARN, + }, + { + id: 'pnpm', + packageManager: PackageManager.PNPM, + }, + ]; + const installedPackageManagers: string[] = []; + possiblePackageManagers.forEach((entry) => { + if (isThisPackageManagerInstalled(entry.id)) { + installedPackageManagers.push(entry.packageManager); + } + }); const questions: Question[] = [ generateSelect('packageManager')(MESSAGES.PACKAGE_MANAGER_QUESTION)( installedPackageManagers, From d0f4e7c0b464adb9355c42f6c0ed21ee624608e3 Mon Sep 17 00:00:00 2001 From: Onur Ravli Date: Sun, 4 Feb 2024 23:43:22 +0300 Subject: [PATCH 6/7] chore(messages): add 'no package was found' message --- lib/ui/messages.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/ui/messages.ts b/lib/ui/messages.ts index 90a0aef79..51fa1378f 100644 --- a/lib/ui/messages.ts +++ b/lib/ui/messages.ts @@ -10,6 +10,8 @@ export const MESSAGES = { RUNNER_EXECUTION_ERROR: (command: string) => `\nFailed to execute command: ${command}`, PACKAGE_MANAGER_QUESTION: `Which package manager would you ${EMOJIS.HEART} to use?`, + NO_PACKAGE_MANAGER_WAS_FOUND: + 'No package manager was found installed on your system.', PACKAGE_MANAGER_INSTALLATION_IN_PROGRESS: `Installation in progress... ${EMOJIS.COFFEE}`, PACKAGE_MANAGER_UPDATE_IN_PROGRESS: `Installation in progress... ${EMOJIS.COFFEE}`, PACKAGE_MANAGER_UPGRADE_IN_PROGRESS: `Installation in progress... ${EMOJIS.COFFEE}`, From d5bfa4c1397fa3ac98f6a1e2c78d1e1518aaa1b1 Mon Sep 17 00:00:00 2001 From: Onur Ravli Date: Sun, 4 Feb 2024 23:44:17 +0300 Subject: [PATCH 7/7] feat(new): exit if there is no package manager installed --- actions/new.action.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/actions/new.action.ts b/actions/new.action.ts index 40d0ea5cc..4734b6758 100644 --- a/actions/new.action.ts +++ b/actions/new.action.ts @@ -194,6 +194,12 @@ const askForPackageManager = async (): Promise => { installedPackageManagers.push(entry.packageManager); } }); + if (installedPackageManagers.length == 0) { + console.error(); + console.error(chalk.red(MESSAGES.NO_PACKAGE_MANAGER_WAS_FOUND)); + console.error(); + exit(); + } const questions: Question[] = [ generateSelect('packageManager')(MESSAGES.PACKAGE_MANAGER_QUESTION)( installedPackageManagers,