UNPKG

@lunora/cli

Version:

The Lunora CLI: init, dev, deploy, codegen, run, reset, and migrate commands

63 lines (60 loc) 2.22 kB
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 };