From 4645305f14b205cf0b63f7a5c8f295292be45ac1 Mon Sep 17 00:00:00 2001 From: "Marvin A. Ruder" Date: Sat, 11 Nov 2023 16:36:19 +0000 Subject: [PATCH] Add Bun as package manager to `npm` extension * Auto-detect Bun by looking for `bun.lockb` lockfile * Extend `npm.packageManager` setting * Update documentation Signed-off-by: Marvin A. Ruder --- extensions/npm/README.md | 2 +- extensions/npm/package.json | 6 ++++-- extensions/npm/package.nls.json | 1 + extensions/npm/src/preferred-pm.ts | 14 ++++++++++++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/extensions/npm/README.md b/extensions/npm/README.md index 296bf03f73e..215ca927ff4 100644 --- a/extensions/npm/README.md +++ b/extensions/npm/README.md @@ -34,7 +34,7 @@ The extension fetches data from and { + if (await pathExists(path.join(pkgPath, 'bun.lockb'))) { + return { isPreferred: true, hasLockfile: true }; + } + + return { isPreferred: false, hasLockfile: false }; +} + async function isPNPMPreferred(pkgPath: string): Promise { if (await pathExists(path.join(pkgPath, 'pnpm-lock.yaml'))) { return { isPreferred: true, hasLockfile: true }; @@ -78,6 +86,12 @@ export async function findPreferredPM(pkgPath: string): Promise<{ name: string; detectedPackageManagerProperties.push(yarnPreferred); } + const bunPreferred = await isBunPreferred(pkgPath); + if (bunPreferred.isPreferred) { + detectedPackageManagerNames.push('bun'); + detectedPackageManagerProperties.push(bunPreferred); + } + const pmUsedForInstallation: { name: string } | null = await whichPM(pkgPath); if (pmUsedForInstallation && !detectedPackageManagerNames.includes(pmUsedForInstallation.name)) {