import { formatErrorMessage } from "../infra/errors.js" ;
import { runCommandWithTimeout } from "../process/exec.js" ;
export type PluginCommandRunResult = {
code: number;
stdout: string;
stderr: string;
};
export type PluginCommandRunOptions = {
argv: string[];
timeoutMs: number;
cwd?: string;
env?: NodeJS.ProcessEnv;
};
/** Run a plugin-managed command with timeout handling and normalized stdout/stderr results. */
export async function runPluginCommandWithTimeout(
options: PluginCommandRunOptions,
): Promise<PluginCommandRunResult> {
const [command] = options.argv;
if (!command) {
return { code: 1 , stdout: "" , stderr: "command is required" };
}
try {
const result = await runCommandWithTimeout(options.argv, {
timeoutMs: options.timeoutMs,
cwd: options.cwd,
env: options.env,
});
const timedOut = result.termination === "timeout" || result.termination === "no-output-timeout" ;
return {
code: result.code ?? 1 ,
stdout: result.stdout,
stderr: timedOut
? result.stderr || `command timed out after ${options.timeoutMs}ms`
: result.stderr,
};
} catch (error) {
return {
code: 1 ,
stdout: "" ,
stderr: formatErrorMessage(error),
};
}
}
Messung V0.5 in Prozent C=98 H=100 G=98
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland