Files
openclaw/src/plugin-sdk/json-store.ts
2026-03-02 16:45:12 +00:00

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,
});
}