Files
openclaw/src/commands/onboard-non-interactive.test-helpers.ts
2026-02-17 11:22:49 +09:00

55 lines
1.3 KiB
TypeScript

import fs from "node:fs/promises";
import type { RuntimeEnv } from "../runtime.js";
type RuntimeLike = Pick<RuntimeEnv, "log" | "error" | "exit">;
export type NonInteractiveRuntime = {
log: RuntimeLike["log"];
error: RuntimeLike["error"];
exit: RuntimeLike["exit"];
};
const NON_INTERACTIVE_DEFAULT_OPTIONS = {
nonInteractive: true,
skipHealth: true,
skipChannels: true,
json: true,
} as const;
export function createThrowingRuntime(): NonInteractiveRuntime {
return {
log: () => {},
error: (...args: unknown[]) => {
throw new Error(args.map(String).join(" "));
},
exit: (code: number) => {
throw new Error(`exit:${code}`);
},
};
}
export async function runNonInteractiveOnboarding(
options: Record<string, unknown>,
runtime: NonInteractiveRuntime,
): Promise<void> {
const { runNonInteractiveOnboarding: run } = await import("./onboard-non-interactive.js");
await run(options, runtime);
}
export async function runNonInteractiveOnboardingWithDefaults(
runtime: NonInteractiveRuntime,
options: Record<string, unknown>,
): Promise<void> {
await runNonInteractiveOnboarding(
{
...NON_INTERACTIVE_DEFAULT_OPTIONS,
...options,
},
runtime,
);
}
export async function readJsonFile<T>(filePath: string): Promise<T> {
return JSON.parse(await fs.readFile(filePath, "utf8")) as T;
}