check packageManager

This commit is contained in:
David Blass
2025-12-17 18:00:36 -05:00
parent 90ed2648be
commit adc87d8b64
4 changed files with 120 additions and 55 deletions
+43 -21
View File
@@ -67668,6 +67668,7 @@ var flatMorph = (o, flatMapEntry) => {
};
// ../node_modules/.pnpm/@ark+util@0.53.0/node_modules/@ark/util/out/records.js
var isKeyOf = (k, o) => k in o;
var unset = noSuggest(`unset${ZeroWidthSpace}`);
// ../node_modules/.pnpm/@ark+util@0.53.0/node_modules/@ark/util/out/objectKinds.js
@@ -125070,7 +125071,7 @@ async function startMcpHttpServer(ctx) {
}
// prep/installNodeDependencies.ts
import { existsSync as existsSync3 } from "node:fs";
import { existsSync as existsSync3, readFileSync as readFileSync2 } from "node:fs";
import { join as join9 } from "node:path";
// ../node_modules/.pnpm/package-manager-detector@1.6.0/node_modules/package-manager-detector/dist/commands.mjs
@@ -125367,10 +125368,11 @@ function isMetadataYarnClassic(metadataPath) {
}
// prep/installNodeDependencies.ts
var PM_INSTALL_COMMANDS = {
pnpm: ["npm", "install", "-g", "pnpm"],
yarn: ["npm", "install", "-g", "yarn"],
bun: ["npm", "install", "-g", "bun"],
var nodePackageManagers = {
npm: ["echo", "npm is already installed"],
pnpm: ["npm", "install", "-g", "{version}"],
yarn: ["npm", "install", "-g", "{version}"],
bun: ["npm", "install", "-g", "{version}"],
deno: ["sh", "-c", "curl -fsSL https://deno.land/install.sh | sh"]
};
async function isCommandAvailable(command) {
@@ -125381,9 +125383,28 @@ async function isCommandAvailable(command) {
});
return result.exitCode === 0;
}
async function installPackageManager(name) {
log.info(`\u{1F4E6} installing ${name}...`);
const [cmd, ...args3] = PM_INSTALL_COMMANDS[name];
function getPackageManagerFromPackageJson() {
const packageJsonPath = join9(process.cwd(), "package.json");
try {
const content = readFileSync2(packageJsonPath, "utf-8");
const pkg = JSON.parse(content);
if (!pkg.packageManager) return null;
const withoutHash = pkg.packageManager.split("+")[0];
const name = withoutHash.split("@")[0];
if (isKeyOf(name, nodePackageManagers)) {
return { name, installSpec: withoutHash };
}
log.warning(`unknown packageManager in package.json: ${pkg.packageManager}`);
return null;
} catch {
return null;
}
}
async function installPackageManager(name, installSpec) {
if (name === "npm") return null;
log.info(`\u{1F4E6} installing ${installSpec}...`);
const [cmd, ...templateArgs] = nodePackageManagers[name];
const args3 = templateArgs.map((arg) => arg === "{version}" ? installSpec : arg);
const result = await spawn4({
cmd,
args: args3,
@@ -125407,20 +125428,21 @@ var installNodeDependencies = {
return existsSync3(packageJsonPath);
},
run: async () => {
const fromPackageJson = getPackageManagerFromPackageJson();
const detected = await detect({ cwd: process.cwd() });
if (!detected) {
return {
language: "node",
packageManager: "npm",
dependenciesInstalled: false,
issues: ["no package manager detected from lockfile"]
};
const packageManager = fromPackageJson?.name || detected?.name || "npm";
const installSpec = fromPackageJson?.installSpec || packageManager;
const agent2 = detected?.agent || packageManager;
if (fromPackageJson) {
log.info(`\u{1F4E6} using packageManager from package.json: ${fromPackageJson.installSpec}`);
} else if (detected) {
log.info(`\u{1F4E6} detected package manager: ${packageManager} (${agent2})`);
} else {
log.info(`\u{1F4E6} no package manager detected, defaulting to npm`);
}
const packageManager = detected.name;
log.info(`\u{1F4E6} detected package manager: ${packageManager} (${detected.agent})`);
if (packageManager !== "npm" && !await isCommandAvailable(packageManager)) {
if (!await isCommandAvailable(packageManager)) {
log.info(`${packageManager} not found, attempting to install...`);
const installError = await installPackageManager(packageManager);
const installError = await installPackageManager(packageManager, installSpec);
if (installError) {
return {
language: "node",
@@ -125430,13 +125452,13 @@ var installNodeDependencies = {
};
}
}
const resolved = resolveCommand(detected.agent, "frozen", []) || resolveCommand(detected.agent, "install", []);
const resolved = resolveCommand(agent2, "frozen", []) || resolveCommand(agent2, "install", []);
if (!resolved) {
return {
language: "node",
packageManager,
dependenciesInstalled: false,
issues: [`no install command found for ${detected.agent}`]
issues: [`no install command found for ${agent2}`]
};
}
log.info(`running: ${resolved.command} ${resolved.args.join(" ")}`);