mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-14 03:20:49 +00:00
32 lines
921 B
TypeScript
32 lines
921 B
TypeScript
import fs from "node:fs";
|
|
import { writeJsonAtomic } from "../infra/json-files.js";
|
|
import { safeParseJson } from "../utils.js";
|
|
|
|
export async function readJsonFileWithFallback<T>(
|
|
filePath: string,
|
|
fallback: T,
|
|
): Promise<{ value: T; exists: boolean }> {
|
|
try {
|
|
const raw = await fs.promises.readFile(filePath, "utf-8");
|
|
const parsed = safeParseJson<T>(raw);
|
|
if (parsed == null) {
|
|
return { value: fallback, exists: true };
|
|
}
|
|
return { value: parsed, exists: true };
|
|
} catch (err) {
|
|
const code = (err as { code?: string }).code;
|
|
if (code === "ENOENT") {
|
|
return { value: fallback, exists: false };
|
|
}
|
|
return { value: fallback, exists: false };
|
|
}
|
|
}
|
|
|
|
export async function writeJsonFileAtomically(filePath: string, value: unknown): Promise<void> {
|
|
await writeJsonAtomic(filePath, value, {
|
|
mode: 0o600,
|
|
trailingNewline: true,
|
|
ensureDirMode: 0o700,
|
|
});
|
|
}
|