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    const res = this.runAsync(['add', ...namesOrFlags]);
33    console.log(res);
34    return res;
35  }
36
37  addDevAsync(namesOrFlags: string[] = []) {
38    if (!namesOrFlags.length) {
39      return this.installAsync();
40    }
41
42    return this.runAsync(['add', '--dev', ...namesOrFlags]);
43  }
44
45  addGlobalAsync(namesOrFlags: string[] = []) {
46    if (!namesOrFlags.length) {
47      return this.installAsync();
48    }
49
50    return this.runAsync(['add', '--global', ...namesOrFlags]);
51  }
52
53  removeAsync(namesOrFlags: string[]) {
54    return this.runAsync(['remove', ...namesOrFlags]);
55  }
56
57  removeDevAsync(namesOrFlags: string[]) {
58    return this.runAsync(['remove', ...namesOrFlags]);
59  }
60
61  removeGlobalAsync(namesOrFlags: string[]) {
62    return this.runAsync(['remove', '--global', ...namesOrFlags]);
63  }
64}
65