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