Files
openclaw/src/agents/cli-runner/toml-inline.ts
2026-04-08 18:15:10 +01:00

37 lines
1.2 KiB
TypeScript

function escapeTomlString(value: string): string {
return value.replaceAll("\\", "\\\\").replaceAll('"', '\\"');
}
function formatTomlKey(key: string): string {
return /^[A-Za-z0-9_-]+$/.test(key) ? key : `"${escapeTomlString(key)}"`;
}
function isRecord(value: unknown): value is Record<string, unknown> {
return typeof value === "object" && value !== null && !Array.isArray(value);
}
export function serializeTomlInlineValue(value: unknown): string {
if (typeof value === "string") {
return `"${escapeTomlString(value)}"`;
}
if (typeof value === "number" || typeof value === "bigint") {
return String(value);
}
if (typeof value === "boolean") {
return value ? "true" : "false";
}
if (Array.isArray(value)) {
return `[${value.map((entry) => serializeTomlInlineValue(entry)).join(", ")}]`;
}
if (isRecord(value)) {
return `{ ${Object.entries(value)
.map(([key, entry]) => `${formatTomlKey(key)} = ${serializeTomlInlineValue(entry)}`)
.join(", ")} }`;
}
throw new Error(`Unsupported TOML inline value: ${String(value)}`);
}
export function formatTomlConfigOverride(key: string, value: unknown): string {
return `${key}=${serializeTomlInlineValue(value)}`;
}