UNPKG

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
"use strict"; 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