import { existsSync, readFileSync } from "node:fs"; import { homedir, platform } from "node:os"; import path from "node:path"; import { fileURLToPath } from "node:url"; const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); function hutchChannelForElectrobunVersion(version) { return version.includes("-") ? "canary" : "production"; } function hutchBinaryName(channel) { const base = channel === "canary" ? "hutch-canary" : "hutch"; return platform() === "win32" ? `${base}.exe` : base; } export function getElectrobunVersion() { const packageJsonPath = path.join(rootDir, "node_modules/electrobun/package.json"); return JSON.parse(readFileSync(packageJsonPath, "utf8")).version; } export function resolveHutchCommand(environment = process.env) { if (environment.ELECTROBUN_HUTCH_BINARY) { return environment.ELECTROBUN_HUTCH_BINARY; } const channel = hutchChannelForElectrobunVersion(getElectrobunVersion()); const dashHome = environment.DASH_HOME || path.join(homedir(), ".dash"); const pathApi = platform() === "win32" ? path.win32 : path.posix; return pathApi.join(dashHome, "bin", hutchBinaryName(channel)); } export function hutchIsInstalled(command = resolveHutchCommand()) { return existsSync(command); }