import { execFile, type ExecFileOptionsWithStringEncoding } from "node:child_process"; export type ExecResult = { stdout: string; stderr: string; code: number }; export async function execFileUtf8( command: string, args: string[], options: Omit = {}, ): Promise { return await new Promise((resolve) => { execFile(command, args, { ...options, encoding: "utf8" }, (error, stdout, stderr) => { if (!error) { resolve({ stdout: String(stdout ?? ""), stderr: String(stderr ?? ""), code: 0, }); return; } const e = error as { code?: unknown; message?: unknown }; const stderrText = String(stderr ?? ""); resolve({ stdout: String(stdout ?? ""), stderr: stderrText || (typeof e.message === "string" ? e.message : typeof error === "string" ? error : ""), code: typeof e.code === "number" ? e.code : 1, }); }); }); }