Skip to content

Commit 730bf66

Browse files
committed
feat: Add Bun as supported package manager
1 parent 4cf3b18 commit 730bf66

File tree

7 files changed

+26
-0
lines changed

7 files changed

+26
-0
lines changed

actions/new.action.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ const askForPackageManager = async (): Promise<Answers> => {
168168
PackageManager.NPM,
169169
PackageManager.YARN,
170170
PackageManager.PNPM,
171+
PackageManager.BUN,
171172
]),
172173
];
173174
const prompt = inquirer.createPromptModule();

lib/package-managers/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ export * from './abstract.package-manager';
44
export * from './npm.package-manager';
55
export * from './yarn.package-manager';
66
export * from './pnpm.package-manager';
7+
export * from './bun.package-manager';
78
export * from './project.dependency';
89
export * from './package-manager-commands';

lib/package-managers/package-manager.factory.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { NpmPackageManager } from './npm.package-manager';
44
import { PackageManager } from './package-manager';
55
import { YarnPackageManager } from './yarn.package-manager';
66
import { PnpmPackageManager } from './pnpm.package-manager';
7+
import { BunPackageManager } from './bun.package-manager';
78

89
export class PackageManagerFactory {
910
public static create(name: PackageManager | string): AbstractPackageManager {
@@ -14,6 +15,8 @@ export class PackageManagerFactory {
1415
return new YarnPackageManager();
1516
case PackageManager.PNPM:
1617
return new PnpmPackageManager();
18+
case PackageManager.BUN:
19+
return new BunPackageManager();
1720
default:
1821
throw new Error(`Package manager ${name} is not managed.`);
1922
}
@@ -35,6 +38,11 @@ export class PackageManagerFactory {
3538
return this.create(PackageManager.PNPM);
3639
}
3740

41+
const hasBunLockFile = files.includes('bun.lockb');
42+
if (hasBunLockFile) {
43+
return this.create(PackageManager.BUN);
44+
}
45+
3846
return this.create(DEFAULT_PACKAGE_MANAGER);
3947
} catch (error) {
4048
return this.create(DEFAULT_PACKAGE_MANAGER);

lib/package-managers/package-manager.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ export enum PackageManager {
22
NPM = 'npm',
33
YARN = 'yarn',
44
PNPM = 'pnpm',
5+
BUN = 'bun',
56
}

lib/runners/runner.factory.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Runner } from './runner';
44
import { SchematicRunner } from './schematic.runner';
55
import { YarnRunner } from './yarn.runner';
66
import { PnpmRunner } from './pnpm.runner';
7+
import { BunRunner } from './bun.runner';
78

89
export class RunnerFactory {
910
public static create(runner: Runner) {
@@ -20,6 +21,9 @@ export class RunnerFactory {
2021
case Runner.PNPM:
2122
return new PnpmRunner();
2223

24+
case Runner.BUN:
25+
return new BunRunner();
26+
2327
default:
2428
console.info(chalk.yellow(`[WARN] Unsupported runner: ${runner}`));
2529
}

lib/runners/runner.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ export enum Runner {
33
NPM,
44
YARN,
55
PNPM,
6+
BUN,
67
}

test/lib/package-managers/package-manager.factory.spec.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
PackageManagerFactory,
55
PnpmPackageManager,
66
YarnPackageManager,
7+
BunPackageManager,
78
} from '../../../lib/package-managers';
89

910
jest.mock('fs', () => ({
@@ -45,6 +46,15 @@ describe('PackageManagerFactory', () => {
4546
);
4647
});
4748

49+
it('should return BunPackageManager when "bun.lockb" file is found', async () => {
50+
(fs.promises.readdir as jest.Mock).mockResolvedValue(['bun.lockb']);
51+
52+
const whenPackageManager = PackageManagerFactory.find();
53+
await expect(whenPackageManager).resolves.toBeInstanceOf(
54+
BunPackageManager,
55+
);
56+
});
57+
4858
describe('when there are all supported lock files', () => {
4959
it('should prioritize "yarn.lock" file over all the others lock files', async () => {
5060
(fs.promises.readdir as jest.Mock).mockResolvedValue([

0 commit comments

Comments
 (0)