1"use strict"; 2var __importDefault = (this && this.__importDefault) || function (mod) { 3 return (mod && mod.__esModule) ? mod : { "default": mod }; 4}; 5Object.defineProperty(exports, "__esModule", { value: true }); 6exports.createForProject = exports.resolvePackageManager = exports.findWorkspaceRoot = exports.RESOLUTION_ORDER = void 0; 7const fs_1 = __importDefault(require("fs")); 8const path_1 = __importDefault(require("path")); 9const NpmPackageManager_1 = require("../node/NpmPackageManager"); 10const PnpmPackageManager_1 = require("../node/PnpmPackageManager"); 11const YarnPackageManager_1 = require("../node/YarnPackageManager"); 12const nodeWorkspaces_1 = require("./nodeWorkspaces"); 13/** The order of the package managers to use when resolving automatically */ 14exports.RESOLUTION_ORDER = ['yarn', 'npm', 'pnpm']; 15/** 16 * Resolve the workspace root for a project, if its part of a monorepo. 17 * Optionally, provide a specific packager to only resolve that one specifically. 18 */ 19function findWorkspaceRoot(projectRoot, preferredManager) { 20 const strategies = { 21 npm: nodeWorkspaces_1.findYarnOrNpmWorkspaceRoot, 22 yarn: nodeWorkspaces_1.findYarnOrNpmWorkspaceRoot, 23 pnpm: nodeWorkspaces_1.findPnpmWorkspaceRoot, 24 }; 25 if (preferredManager) { 26 return strategies[preferredManager](projectRoot); 27 } 28 for (const strategy of exports.RESOLUTION_ORDER) { 29 const root = strategies[strategy](projectRoot); 30 if (root) { 31 return root; 32 } 33 } 34 return null; 35} 36exports.findWorkspaceRoot = findWorkspaceRoot; 37/** 38 * Resolve the used node package manager for a project by checking the lockfile. 39 * This also tries to resolve the workspace root, if its part of a monorepo. 40 * Optionally, provide a preferred packager to only resolve that one specifically. 41 */ 42function resolvePackageManager(projectRoot, preferredManager) { 43 const root = findWorkspaceRoot(projectRoot, preferredManager) ?? projectRoot; 44 const lockFiles = { 45 npm: nodeWorkspaces_1.NPM_LOCK_FILE, 46 pnpm: nodeWorkspaces_1.PNPM_LOCK_FILE, 47 yarn: nodeWorkspaces_1.YARN_LOCK_FILE, 48 }; 49 if (preferredManager) { 50 if (fs_1.default.existsSync(path_1.default.join(root, lockFiles[preferredManager]))) { 51 return preferredManager; 52 } 53 return null; 54 } 55 for (const managerName of exports.RESOLUTION_ORDER) { 56 if (fs_1.default.existsSync(path_1.default.join(root, lockFiles[managerName]))) { 57 return managerName; 58 } 59 } 60 return null; 61} 62exports.resolvePackageManager = resolvePackageManager; 63/** 64 * This creates a Node package manager from the provided options. 65 * If these options are not provided, it will infer the package manager from lockfiles. 66 * When no package manager is found, it falls back to npm. 67 */ 68function createForProject(projectRoot, options = {}) { 69 if (options.npm) { 70 return new NpmPackageManager_1.NpmPackageManager({ cwd: projectRoot, ...options }); 71 } 72 else if (options.yarn) { 73 return new YarnPackageManager_1.YarnPackageManager({ cwd: projectRoot, ...options }); 74 } 75 else if (options.pnpm) { 76 return new PnpmPackageManager_1.PnpmPackageManager({ cwd: projectRoot, ...options }); 77 } 78 switch (resolvePackageManager(projectRoot)) { 79 case 'npm': 80 return new NpmPackageManager_1.NpmPackageManager({ cwd: projectRoot, ...options }); 81 case 'pnpm': 82 return new PnpmPackageManager_1.PnpmPackageManager({ cwd: projectRoot, ...options }); 83 case 'yarn': 84 return new YarnPackageManager_1.YarnPackageManager({ cwd: projectRoot, ...options }); 85 default: 86 return new NpmPackageManager_1.NpmPackageManager({ cwd: projectRoot, ...options }); 87 } 88} 89exports.createForProject = createForProject; 90//# sourceMappingURL=nodeManagers.js.map