Files
openclaw/src/daemon/exec-file.ts
2026-02-15 03:53:53 +00:00

33 lines
1.0 KiB
TypeScript

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<ExecFileOptionsWithStringEncoding, "encoding"> = {},
): Promise<ExecResult> {
return await new Promise<ExecResult>((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,
});
});
});
}