Files
openclaw/src/test-utils/node-process.ts
2026-05-17 02:51:20 +08:00

44 lines
1.4 KiB
TypeScript

import { execFileSync, spawnSync, type SpawnSyncReturns } from "node:child_process";
type NodeEvalArgsOptions = {
evalFlag?: "--eval" | "-e";
imports?: readonly string[];
};
type ExecNodeEvalOptions = Omit<NonNullable<Parameters<typeof execFileSync>[2]>, "encoding"> &
NodeEvalArgsOptions & {
encoding?: BufferEncoding;
};
type SpawnNodeEvalOptions = Omit<NonNullable<Parameters<typeof spawnSync>[2]>, "encoding"> &
NodeEvalArgsOptions & {
encoding?: BufferEncoding;
};
export function createNodeEvalArgs(source: string, options: NodeEvalArgsOptions = {}): string[] {
const args = (options.imports ?? []).flatMap((specifier) => ["--import", specifier]);
args.push("--input-type=module", options.evalFlag ?? "--eval", source);
return args;
}
export function execNodeEvalSync(source: string, options: ExecNodeEvalOptions = {}): string {
const { evalFlag, imports, ...execOptions } = options;
return execFileSync(process.execPath, createNodeEvalArgs(source, { evalFlag, imports }), {
cwd: process.cwd(),
encoding: "utf8",
...execOptions,
});
}
export function spawnNodeEvalSync(
source: string,
options: SpawnNodeEvalOptions = {},
): SpawnSyncReturns<string> {
const { evalFlag, imports, ...spawnOptions } = options;
return spawnSync(process.execPath, createNodeEvalArgs(source, { evalFlag, imports }), {
cwd: process.cwd(),
encoding: "utf8",
...spawnOptions,
});
}