@lunora/cli
Version:
The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands
63 lines (60 loc) • 2.22 kB
JavaScript
import { spawnSync } from 'node:child_process';
import { LunoraError } from '@lunora/errors';
import { findPackageManagerSync, identifyInitiatingPackageManager } from '@visulima/package/package-manager';
const INSTALL_PREFERENCE = ["pnpm", "bun", "yarn", "npm"];
const KNOWN_PACKAGE_MANAGERS = /* @__PURE__ */ new Set(["bun", "npm", "pnpm", "yarn"]);
const isKnownPackageManager = (name) => KNOWN_PACKAGE_MANAGERS.has(name);
const isManagerInstalled = (manager) => {
try {
return spawnSync(manager, ["--version"], { stdio: "ignore", timeout: 5e3 }).status === 0;
} catch {
return false;
}
};
const detectInstalledManagers = (probe = isManagerInstalled) => INSTALL_PREFERENCE.filter((manager) => probe(manager));
const installArgsFor = (manager) => {
return { args: ["install"], command: manager };
};
const detectPackageManager = (startDirectory) => {
try {
return findPackageManagerSync(startDirectory).packageManager;
} catch {
}
const initiating = identifyInitiatingPackageManager();
if (initiating !== void 0) {
const name = initiating.name === "cnpm" ? "npm" : initiating.name;
if (isKnownPackageManager(name)) {
return name;
}
}
const [installed] = detectInstalledManagers();
if (installed !== void 0) {
return installed;
}
throw new LunoraError(
"INTERNAL",
"Could not detect a package manager: no lock file or `packageManager` field was found, and none (pnpm, bun, yarn, npm) is installed on PATH."
);
};
const execArgsFor = (manager, command, args) => {
if (manager === "yarn") {
return { args: [command, ...args], command: "yarn" };
}
if (manager === "bun") {
return { args: ["x", command, ...args], command: "bun" };
}
if (manager === "npm") {
return { args: ["--", command, ...args], command: "npx" };
}
return { args: ["exec", command, ...args], command: "pnpm" };
};
const runScriptCommand = (manager, script) => {
if (manager === "npm") {
return `npm run ${script}`;
}
if (manager === "bun") {
return `bun run ${script}`;
}
return `${manager} ${script}`;
};
export { detectInstalledManagers as a, detectPackageManager as d, execArgsFor as e, installArgsFor as i, runScriptCommand as r };