1*8a424bebSJames Ideimport { BasePackageManager } from './BasePackageManager';
28d3f3824SCedric van Puttenimport env from '../utils/env';
38d3f3824SCedric van Puttenimport { findPnpmWorkspaceRoot, PNPM_LOCK_FILE } from '../utils/nodeWorkspaces';
48d3f3824SCedric van Putten
58d3f3824SCedric van Puttenexport class PnpmPackageManager extends BasePackageManager {
68d3f3824SCedric van Putten  readonly name = 'pnpm';
78d3f3824SCedric van Putten  readonly bin = 'pnpm';
88d3f3824SCedric van Putten  readonly lockFile = PNPM_LOCK_FILE;
98d3f3824SCedric van Putten
108d3f3824SCedric van Putten  workspaceRoot() {
118d3f3824SCedric van Putten    const root = findPnpmWorkspaceRoot(this.ensureCwdDefined('workspaceRoot'));
128d3f3824SCedric van Putten    if (root) {
138d3f3824SCedric van Putten      return new PnpmPackageManager({
148d3f3824SCedric van Putten        ...this.options,
158d3f3824SCedric van Putten        silent: this.silent,
168d3f3824SCedric van Putten        log: this.log,
178d3f3824SCedric van Putten        cwd: root,
188d3f3824SCedric van Putten      });
198d3f3824SCedric van Putten    }
208d3f3824SCedric van Putten
218d3f3824SCedric van Putten    return null;
228d3f3824SCedric van Putten  }
238d3f3824SCedric van Putten
248d3f3824SCedric van Putten  installAsync(namesOrFlags: string[] = []) {
258d3f3824SCedric van Putten    if (env.CI && !namesOrFlags.join(' ').includes('frozen-lockfile')) {
268d3f3824SCedric van Putten      namesOrFlags.unshift('--no-frozen-lockfile');
278d3f3824SCedric van Putten    }
288d3f3824SCedric van Putten
298d3f3824SCedric van Putten    return this.runAsync(['install', ...namesOrFlags]);
308d3f3824SCedric van Putten  }
318d3f3824SCedric van Putten
328d3f3824SCedric van Putten  addAsync(namesOrFlags: string[] = []) {
338d3f3824SCedric van Putten    if (!namesOrFlags.length) {
348d3f3824SCedric van Putten      return this.installAsync();
358d3f3824SCedric van Putten    }
368d3f3824SCedric van Putten
378d3f3824SCedric van Putten    return this.runAsync(['add', ...namesOrFlags]);
388d3f3824SCedric van Putten  }
398d3f3824SCedric van Putten
408d3f3824SCedric van Putten  addDevAsync(namesOrFlags: string[] = []) {
418d3f3824SCedric van Putten    if (!namesOrFlags.length) {
428d3f3824SCedric van Putten      return this.installAsync();
438d3f3824SCedric van Putten    }
448d3f3824SCedric van Putten
458d3f3824SCedric van Putten    return this.runAsync(['add', '--save-dev', ...namesOrFlags]);
468d3f3824SCedric van Putten  }
478d3f3824SCedric van Putten
488d3f3824SCedric van Putten  addGlobalAsync(namesOrFlags: string[] = []) {
498d3f3824SCedric van Putten    if (!namesOrFlags.length) {
508d3f3824SCedric van Putten      return this.installAsync();
518d3f3824SCedric van Putten    }
528d3f3824SCedric van Putten
538d3f3824SCedric van Putten    return this.runAsync(['add', '--global', ...namesOrFlags]);
548d3f3824SCedric van Putten  }
558d3f3824SCedric van Putten
568d3f3824SCedric van Putten  removeAsync(namesOrFlags: string[]) {
578d3f3824SCedric van Putten    return this.runAsync(['remove', ...namesOrFlags]);
588d3f3824SCedric van Putten  }
598d3f3824SCedric van Putten
608d3f3824SCedric van Putten  removeDevAsync(namesOrFlags: string[]) {
618d3f3824SCedric van Putten    return this.runAsync(['remove', '--save-dev', ...namesOrFlags]);
628d3f3824SCedric van Putten  }
638d3f3824SCedric van Putten
648d3f3824SCedric van Putten  removeGlobalAsync(namesOrFlags: string[]) {
658d3f3824SCedric van Putten    return this.runAsync(['remove', '--global', ...namesOrFlags]);
668d3f3824SCedric van Putten  }
678d3f3824SCedric van Putten}
68