Files
mcp_web_dev_server/dist/lib/frameworks/packageManager.js
T
2026-07-31 13:12:54 -04:00

80 lines
2.8 KiB
JavaScript

import fs from 'node:fs';
import path from 'node:path';
export function detectJsPackageManager(root) {
if (fs.existsSync(path.join(root, 'pnpm-lock.yaml')))
return 'pnpm';
if (fs.existsSync(path.join(root, 'yarn.lock')))
return 'yarn';
if (fs.existsSync(path.join(root, 'bun.lockb')) || fs.existsSync(path.join(root, 'bun.lock')))
return 'bun';
return 'npm';
}
export function installCommandFor(pm) {
switch (pm) {
case 'pnpm':
return { command: 'pnpm', args: ['install'] };
case 'yarn':
return { command: 'yarn', args: ['install'] };
case 'bun':
return { command: 'bun', args: ['install'] };
case 'npm':
default:
return { command: 'npm', args: ['install'] };
}
}
export function runScriptCommandFor(pm, script, extraArgs = []) {
switch (pm) {
case 'pnpm':
return { command: 'pnpm', args: ['run', script, ...extraArgs] };
case 'yarn':
return { command: 'yarn', args: [script, ...extraArgs] };
case 'bun':
return { command: 'bun', args: ['run', script, ...extraArgs] };
case 'npm':
default:
return { command: 'npm', args: ['run', script, ...(extraArgs.length ? ['--', ...extraArgs] : [])] };
}
}
export function addDependencyCommandFor(pm, packages, options) {
if (options.remove) {
switch (pm) {
case 'pnpm':
return { command: 'pnpm', args: ['remove', ...packages] };
case 'yarn':
return { command: 'yarn', args: ['remove', ...packages] };
case 'bun':
return { command: 'bun', args: ['remove', ...packages] };
case 'npm':
default:
return { command: 'npm', args: ['uninstall', ...packages] };
}
}
switch (pm) {
case 'pnpm':
return { command: 'pnpm', args: ['add', ...(options.dev ? ['-D'] : []), ...packages] };
case 'yarn':
return { command: 'yarn', args: ['add', ...(options.dev ? ['-D'] : []), ...packages] };
case 'bun':
return { command: 'bun', args: ['add', ...(options.dev ? ['-d'] : []), ...packages] };
case 'npm':
default:
return { command: 'npm', args: ['install', ...(options.dev ? ['-D'] : []), ...packages] };
}
}
export function readPackageJson(root) {
const file = path.join(root, 'package.json');
if (!fs.existsSync(file))
return null;
try {
return JSON.parse(fs.readFileSync(file, 'utf8'));
}
catch {
return null;
}
}
export function hasDependency(pkg, name) {
if (!pkg)
return false;
return Boolean(pkg.dependencies?.[name] || pkg.devDependencies?.[name]);
}
//# sourceMappingURL=packageManager.js.map