npmplus-mcp-server
Version:
Production-ready MCP server for intelligent JavaScript package management. Works with Claude, Windsurf, Cursor, VS Code, and any MCP-compatible AI editor.
134 lines • 5.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.detectPackageManager = detectPackageManager;
exports.getInstallCommand = getInstallCommand;
exports.getUpdateCommand = getUpdateCommand;
exports.getRemoveCommand = getRemoveCommand;
exports.getAuditCommand = getAuditCommand;
const promises_1 = require("fs/promises");
const path_1 = require("path");
const constants_js_1 = require("./constants.js");
const execa_1 = require("execa");
async function detectPackageManager(cwd = process.cwd()) {
// Check for lock files
const lockFiles = {
[constants_js_1.PACKAGE_MANAGERS.PNPM]: "pnpm-lock.yaml",
[constants_js_1.PACKAGE_MANAGERS.YARN]: "yarn.lock",
[constants_js_1.PACKAGE_MANAGERS.NPM]: "package-lock.json"
};
for (const [pm, lockFile] of Object.entries(lockFiles)) {
try {
await (0, promises_1.access)((0, path_1.join)(cwd, lockFile));
const version = await getPackageManagerVersion(pm);
return {
packageManager: pm,
lockFile: (0, path_1.join)(cwd, lockFile),
version
};
}
catch {
// Continue checking
}
}
// Check for package manager configuration files
try {
await (0, promises_1.access)((0, path_1.join)(cwd, ".npmrc"));
const version = await getPackageManagerVersion(constants_js_1.PACKAGE_MANAGERS.NPM);
return { packageManager: constants_js_1.PACKAGE_MANAGERS.NPM, lockFile: null, version };
}
catch { }
try {
await (0, promises_1.access)((0, path_1.join)(cwd, ".yarnrc.yml"));
const version = await getPackageManagerVersion(constants_js_1.PACKAGE_MANAGERS.YARN);
return { packageManager: constants_js_1.PACKAGE_MANAGERS.YARN, lockFile: null, version };
}
catch { }
// Check packageManager field in package.json
try {
const packageJson = JSON.parse(await (0, promises_1.readFile)((0, path_1.join)(cwd, "package.json"), "utf-8"));
if (packageJson.packageManager) {
const [pm] = packageJson.packageManager.split("@");
if ([constants_js_1.PACKAGE_MANAGERS.NPM, constants_js_1.PACKAGE_MANAGERS.YARN, constants_js_1.PACKAGE_MANAGERS.PNPM].includes(pm)) {
const version = await getPackageManagerVersion(pm);
return {
packageManager: pm,
lockFile: null,
version
};
}
}
}
catch { }
// Default to npm
const version = await getPackageManagerVersion(constants_js_1.PACKAGE_MANAGERS.NPM);
return { packageManager: constants_js_1.PACKAGE_MANAGERS.NPM, lockFile: null, version };
}
async function getPackageManagerVersion(pm) {
try {
const { stdout } = await (0, execa_1.execa)(pm, ["--version"]);
return stdout.trim();
}
catch {
return null;
}
}
function getInstallCommand(pm, packages = []) {
if (packages.length === 0) {
// Install all dependencies
return [pm, "install"];
}
switch (pm) {
case constants_js_1.PACKAGE_MANAGERS.NPM:
return [constants_js_1.PACKAGE_MANAGERS.NPM, "install", ...packages];
case constants_js_1.PACKAGE_MANAGERS.YARN:
return [constants_js_1.PACKAGE_MANAGERS.YARN, "add", ...packages];
case constants_js_1.PACKAGE_MANAGERS.PNPM:
return [constants_js_1.PACKAGE_MANAGERS.PNPM, "add", ...packages];
}
}
function getUpdateCommand(pm, packages = []) {
if (packages.length === 0) {
// Update all dependencies
switch (pm) {
case constants_js_1.PACKAGE_MANAGERS.NPM:
return [constants_js_1.PACKAGE_MANAGERS.NPM, "update"];
case constants_js_1.PACKAGE_MANAGERS.YARN:
return [constants_js_1.PACKAGE_MANAGERS.YARN, "upgrade"];
case constants_js_1.PACKAGE_MANAGERS.PNPM:
return [constants_js_1.PACKAGE_MANAGERS.PNPM, "update"];
}
}
switch (pm) {
case constants_js_1.PACKAGE_MANAGERS.NPM:
return [constants_js_1.PACKAGE_MANAGERS.NPM, "update", ...packages];
case constants_js_1.PACKAGE_MANAGERS.YARN:
return [constants_js_1.PACKAGE_MANAGERS.YARN, "upgrade", ...packages];
case constants_js_1.PACKAGE_MANAGERS.PNPM:
return [constants_js_1.PACKAGE_MANAGERS.PNPM, "update", ...packages];
}
}
function getRemoveCommand(pm, packages) {
switch (pm) {
case constants_js_1.PACKAGE_MANAGERS.NPM:
return [constants_js_1.PACKAGE_MANAGERS.NPM, "uninstall", ...packages];
case constants_js_1.PACKAGE_MANAGERS.YARN:
return [constants_js_1.PACKAGE_MANAGERS.YARN, "remove", ...packages];
case constants_js_1.PACKAGE_MANAGERS.PNPM:
return [constants_js_1.PACKAGE_MANAGERS.PNPM, "remove", ...packages];
}
}
function getAuditCommand(pm, fix = false) {
const baseCmd = [pm, "audit"];
if (fix) {
switch (pm) {
case constants_js_1.PACKAGE_MANAGERS.NPM:
return [...baseCmd, "fix"];
case constants_js_1.PACKAGE_MANAGERS.YARN:
return [constants_js_1.PACKAGE_MANAGERS.YARN, "audit", "--fix"]; // Note: Yarn's audit fix is limited
case constants_js_1.PACKAGE_MANAGERS.PNPM:
return [...baseCmd, "--fix"];
}
}
return baseCmd;
}
//# sourceMappingURL=pm-detect.js.map