tools/core/runners/process.runner.ts
tools/core/runners/process.runner.ts is a file in Coordination Surface. 34 lines of code and 11 definitions.
import type { Launch, ProcessResult } from "../types/process.types.ts";
import { NODE_CLIS, NPM_CLI_FOLDERS } from "../constants/process.constants.ts";
import { dirname, join } from "node:path";
import { existsSync } from "node:fs";
import { spawnSync } from "node:child_process";
const nodeCliOf = function nodeCliOf(tool: string): string | undefined {
const cli = NODE_CLIS[tool];
if (cli === undefined) {
return undefined;
}
const binDir = dirname(process.execPath);
const bases = [binDir, dirname(binDir)];
return bases
.flatMap((base) => NPM_CLI_FOLDERS.map((folders) => join(base, ...folders, cli)))
.find((candidate) => existsSync(candidate));
};
const launchOf = function launchOf(tool: string, args: readonly string[]): Launch {
const cli = nodeCliOf(tool);
return cli === undefined ? { args, command: tool } : { args: [cli, ...args], command: process.execPath };
};
export const runTool = function runTool(
cwd: string,
step: string,
tool: string,
checks: string,
args: readonly string[],
): ProcessResult {
const launch = launchOf(tool, args);
const result = spawnSync(launch.command, launch.args, { cwd, encoding: "utf8" });
const launched = result.error === undefined;
const output = launched ? `${result.stdout}${result.stderr}`.trim() : String(result.error);
const exitCode = launched ? (result.status ?? -1) : -1;
return { checks, exitCode, output, step, tool, verdict: exitCode === 0 ? "pass" : "fail" };
};