mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-12 09:41:11 +00:00
37 lines
1.2 KiB
TypeScript
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)}`;
|
|
}
|