rea/scripts/lib/generated-file.mjs

30 lines
754 B
JavaScript

import { readFile, writeFile } from "node:fs/promises";
const isMissing = (cause) =>
typeof cause === "object" &&
cause !== null &&
"code" in cause &&
cause.code === "ENOENT";
/** Compare or update one generated text artifact with actionable diagnostics. */
export const ensureGeneratedFile = async ({
path,
source,
check,
generateCommand,
}) => {
let existing;
try {
existing = await readFile(path, "utf8");
} catch (cause) {
if (!isMissing(cause)) throw cause;
}
if (existing === source) return { changed: false };
if (check)
throw new Error(
`${path} is missing or stale. Run \`${generateCommand}\` and commit the result.`,
);
await writeFile(path, source, "utf8");
return { changed: true };
};