Files
rea/scripts/lib/generated-file.mjs
morluto 6f0ef16050 fix(build): clarify generated-file check hint and drop redundant catalog step (#998)
The shared stale-file hint told developers to commit regenerated output, which is wrong for the gitignored build catalog. mcp-catalog:generate no longer re-runs the generator after build:cached since build:unlocked already produces it.
2026-10-08 00:21:39 +08:00

41 lines
1.1 KiB
JavaScript

import { readFile, writeFile } from "node:fs/promises";
const isMissing = (cause) =>
typeof cause === "object" &&
cause !== null &&
"code" in cause &&
cause.code === "ENOENT";
const normalizeLineEndings = (value) => value.replaceAll("\r\n", "\n");
const preserveLineEndings = (source, existing) =>
existing?.includes("\r\n") === true
? normalizeLineEndings(source).replaceAll("\n", "\r\n")
: source;
/** 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 !== undefined &&
normalizeLineEndings(existing) === normalizeLineEndings(source)
)
return { changed: false };
if (check)
throw new Error(
`${path} is missing or stale. Run \`${generateCommand}\` to regenerate it; commit the result if the file is tracked.`,
);
await writeFile(path, preserveLineEndings(source, existing), "utf8");
return { changed: true };
};