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