import { spawn } from "node:child_process"; import path from "node:path"; import { fileURLToPath, pathToFileURL } from "node:url"; import { installVitestProcessGroupCleanup, shouldUseDetachedVitestProcessGroup, } from "../vitest-process-group.mjs"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const repoRoot = path.resolve(__dirname, "../.."); const pnpm = "pnpm"; export async function runVitestBatch(params) { return await new Promise((resolve, reject) => { const child = spawn( pnpm, ["exec", "vitest", "run", "--config", params.config, ...params.targets, ...params.args], { cwd: repoRoot, detached: shouldUseDetachedVitestProcessGroup(), stdio: "inherit", shell: process.platform === "win32", env: params.env, }, ); const teardownChildCleanup = installVitestProcessGroupCleanup({ child }); child.on("error", (error) => { teardownChildCleanup(); reject(error); }); child.on("exit", (code, signal) => { teardownChildCleanup(); if (signal) { process.kill(process.pid, signal); return; } resolve(code ?? 1); }); }); } export function isDirectScriptRun(metaUrl) { const entryHref = process.argv[1] ? pathToFileURL(path.resolve(process.argv[1])).href : ""; return metaUrl === entryHref; }