1import { BasePackageManager } from './BasePackageManager'; 2import { findYarnOrNpmWorkspaceRoot, BUN_LOCK_FILE } from '../utils/nodeWorkspaces'; 3 4export class BunPackageManager extends BasePackageManager { 5 readonly name = 'bun'; 6 readonly bin = 'bun'; 7 readonly lockFile = BUN_LOCK_FILE; 8 9 workspaceRoot() { 10 const root = findYarnOrNpmWorkspaceRoot(this.ensureCwdDefined('workspaceRoot')); 11 if (root) { 12 return new BunPackageManager({ 13 ...this.options, 14 silent: this.silent, 15 log: this.log, 16 cwd: root, 17 }); 18 } 19 20 return null; 21 } 22 23 installAsync(namesOrFlags: string[] = []) { 24 return this.runAsync(['install', ...namesOrFlags]); 25 } 26 27 addAsync(namesOrFlags: string[] = []) { 28 if (!namesOrFlags.length) { 29 return this.installAsync(); 30 } 31 32 return this.runAsync(['add', ...namesOrFlags]); 33 } 34 35 addDevAsync(namesOrFlags: string[] = []) { 36 if (!namesOrFlags.length) { 37 return this.installAsync(); 38 } 39 40 return this.runAsync(['add', '--dev', ...namesOrFlags]); 41 } 42 43 addGlobalAsync(namesOrFlags: string[] = []) { 44 if (!namesOrFlags.length) { 45 return this.installAsync(); 46 } 47 48 return this.runAsync(['add', '--global', ...namesOrFlags]); 49 } 50 51 removeAsync(namesOrFlags: string[]) { 52 return this.runAsync(['remove', ...namesOrFlags]); 53 } 54 55 removeDevAsync(namesOrFlags: string[]) { 56 return this.runAsync(['remove', ...namesOrFlags]); 57 } 58 59 removeGlobalAsync(namesOrFlags: string[]) { 60 return this.runAsync(['remove', '--global', ...namesOrFlags]); 61 } 62} 63