diff --git a/actions/new.action.ts b/actions/new.action.ts index 240b94209..eb518dab9 100644 --- a/actions/new.action.ts +++ b/actions/new.action.ts @@ -170,7 +170,7 @@ const installPackages = async ( const askForPackageManager = async () => { const question = generateSelect('packageManager')( MESSAGES.PACKAGE_MANAGER_QUESTION, - )([PackageManager.NPM, PackageManager.YARN, PackageManager.PNPM]); + )([PackageManager.NPM, PackageManager.YARN, PackageManager.PNPM, PackageManager.BUN]); return select(question).catch(gracefullyExitOnPromptError); }; diff --git a/lib/package-managers/bun.package-manager.ts b/lib/package-managers/bun.package-manager.ts new file mode 100644 index 000000000..a5cadc928 --- /dev/null +++ b/lib/package-managers/bun.package-manager.ts @@ -0,0 +1,27 @@ +import { Runner, RunnerFactory } from '../runners'; +import { BunRunner } from '../runners/bun.runner'; +import { AbstractPackageManager } from './abstract.package-manager'; +import { PackageManager } from './package-manager'; +import { PackageManagerCommands } from './package-manager-commands'; + +export class BunPackageManager extends AbstractPackageManager { + constructor() { + super(RunnerFactory.create(Runner.BUN) as BunRunner); + } + + public get name() { + return PackageManager.BUN.toUpperCase(); + } + + get cli(): PackageManagerCommands { + return { + install: 'install', + add: 'add', + update: 'update', + remove: 'remove', + saveFlag: '', + saveDevFlag: '-D', + silentFlag: '--silent', + }; + } +} diff --git a/lib/package-managers/index.ts b/lib/package-managers/index.ts index 9ada765f3..79601a4ec 100644 --- a/lib/package-managers/index.ts +++ b/lib/package-managers/index.ts @@ -4,5 +4,6 @@ export * from './abstract.package-manager'; export * from './npm.package-manager'; export * from './yarn.package-manager'; export * from './pnpm.package-manager'; +export * from './bun.package-manager'; export * from './project.dependency'; export * from './package-manager-commands'; diff --git a/lib/package-managers/package-manager.factory.ts b/lib/package-managers/package-manager.factory.ts index ea3dd7561..1c2ea30f1 100644 --- a/lib/package-managers/package-manager.factory.ts +++ b/lib/package-managers/package-manager.factory.ts @@ -4,6 +4,7 @@ import { NpmPackageManager } from './npm.package-manager'; import { PackageManager } from './package-manager'; import { YarnPackageManager } from './yarn.package-manager'; import { PnpmPackageManager } from './pnpm.package-manager'; +import { BunPackageManager } from './bun.package-manager'; export class PackageManagerFactory { public static create(name: PackageManager | string): AbstractPackageManager { @@ -14,6 +15,8 @@ export class PackageManagerFactory { return new YarnPackageManager(); case PackageManager.PNPM: return new PnpmPackageManager(); + case PackageManager.BUN: + return new BunPackageManager(); default: throw new Error(`Package manager ${name} is not managed.`); } diff --git a/lib/package-managers/package-manager.ts b/lib/package-managers/package-manager.ts index 7d2b857d2..3a692c2f1 100644 --- a/lib/package-managers/package-manager.ts +++ b/lib/package-managers/package-manager.ts @@ -2,4 +2,5 @@ export enum PackageManager { NPM = 'npm', YARN = 'yarn', PNPM = 'pnpm', + BUN = 'bun', } diff --git a/lib/runners/bun.runner.ts b/lib/runners/bun.runner.ts new file mode 100644 index 000000000..767378cd9 --- /dev/null +++ b/lib/runners/bun.runner.ts @@ -0,0 +1,7 @@ +import { AbstractRunner } from './abstract.runner'; + +export class BunRunner extends AbstractRunner { + constructor() { + super('bun'); + } +} diff --git a/lib/runners/runner.ts b/lib/runners/runner.ts index 74b5c2eae..c8d0a2f42 100644 --- a/lib/runners/runner.ts +++ b/lib/runners/runner.ts @@ -3,4 +3,5 @@ export enum Runner { NPM, YARN, PNPM, + BUN }