const { readFileSync, readdirSync } = require("fs");
const { Script } = require("vm");
const { join } = require("path");
const dir = "assets/web";
let blocks = 0;
let errors = 0;
const files = readdirSync(dir)
.filter((f) => f.endsWith(".html"))
.sort()
.map((f) => join(dir, f));
files.push(join(dir, "kids", "kids.html"));
for (const file of files) {
const html = readFileSync(file, "utf8");
const re = /<script\b([^>]*)>([\s\S]*?)<\/script>/gi;
let m;
while ((m = re.exec(html)) !== null) {
const [, attrs, code] = m;
if (/\bsrc\s*=/i.test(attrs) || !code.trim()) continue;
blocks++;
const line = html.slice(0, m.index).split("\n").length;
try {
new Script(code, { filename: file, lineOffset: line - 1 });
} catch (err) {
errors++;
console.error(`${file}: script at line ${line}: ${err.message}`);
}
}
}
if (errors) {
console.error(`lint-js: ${errors} script block(s) with syntax errors`);
process.exit(1);
}
console.log(`lint-js: ${blocks} inline script block(s) OK across ${files.length} file(s)`);