Files
WRNexusJS/scripts/check-example-pages.ts
Clintchiz 586a6db8ff
Quality / quality (ubuntu-latest) (push) Failing after 21s
Quality / quality (windows-latest) (push) Canceled after 0s
release: WRNexusJS 0.8.0
2026-08-02 23:18:51 +05:30

32 lines
1.3 KiB
TypeScript

import { readdirSync, readFileSync, statSync } from "node:fs";
import { join, relative, resolve } from "node:path";
import { diagnose, formatWrn } from "../packages/syntax/src/index.ts";
const root = resolve(import.meta.dirname, "..");
const examples = join(root, "examples");
function walk(directory: string): string[] {
return readdirSync(directory).flatMap((name) => {
if (["node_modules", ".wrnexus", "dist", "build"].includes(name)) return [];
const path = join(directory, name);
return statSync(path).isDirectory() ? walk(path) : path.endsWith(".wrn") ? [path] : [];
});
}
const failures: string[] = [];
const files = walk(examples);
for (const file of files) {
const source = readFileSync(file, "utf8");
for (const diagnostic of diagnose(source, { file, accessibility: true })) {
if (diagnostic.severity !== "info")
failures.push(`${relative(root, file)}: ${diagnostic.code} ${diagnostic.message}`);
}
const formatted = formatWrn(source);
if (formatWrn(formatted) !== formatted)
failures.push(`${relative(root, file)}: formatter is not idempotent`);
}
if (failures.length) throw new Error(`Example page validation failed:\n${failures.join("\n")}`);
console.log(
`Validated ${files.length} example .wrn pages with compiler, accessibility, and formatter checks.`,
);