import { mkdir, readFile, writeFile } from "node:fs/promises"; import { resolve } from "node:path"; import { CONFORMANCE_RULES } from "../src/conformance/rules.js"; const root = resolve(import.meta.dirname, ".."); const outputDirectory = resolve(root, "website/src/generated"); const outputPath = resolve(outputDirectory, "conformance-rules.ts"); const publicRules = Object.fromEntries( Object.values(CONFORMANCE_RULES).map((rule) => [ rule.id, { id: rule.id, title: rule.title, category: rule.category, normativeLevel: rule.normativeLevel, source: rule.source, expected: rule.expected, severity: rule.severity, repairability: rule.repairability, confidence: rule.confidence, }, ]), ); const header = "// Generated by scripts/generate-conformance-data.ts. Do not edit.\n"; const output = `${header}export const publicConformanceRules = ${JSON.stringify( publicRules, null, 2, )} as const;\n`; if (process.argv.includes("--check")) { let existing: string; try { existing = await readFile(outputPath, "utf8"); } catch { throw new Error("Generated conformance data is missing; run pnpm generate:conformance-data"); } if (existing !== output) { throw new Error("Generated conformance data is stale; run pnpm generate:conformance-data"); } } else { await mkdir(outputDirectory, { recursive: true }); await writeFile(outputPath, output, "utf8"); }