80 lines
2.8 KiB
JavaScript
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
|