syntax.mjs (759B)
1 // Garde-fou avant déploiement : les scripts inline de web/index.html doivent être du JavaScript valide 2 // (une apostrophe dans une chaîne à guillemets simples a déjà cassé la page en prod). 3 // node test/syntax.mjs [web/index.html] 4 import { readFileSync } from 'node:fs'; 5 6 const path = process.argv[2] ?? 'web/index.html'; 7 const html = readFileSync(path, 'utf8'); 8 const scripts = [...html.matchAll(/<script(?![^>]*\bsrc=)[^>]*>([\s\S]*?)<\/script>/g)].map((m) => m[1]); 9 let bad = 0; 10 for (const [i, body] of scripts.entries()) { 11 try { 12 new Function(body); 13 } catch (e) { 14 bad++; 15 console.error(`script inline n°${i + 1} : ${e.message}`); 16 } 17 } 18 console.log(`${scripts.length} scripts inline, ${bad} en erreur`); 19 process.exit(bad ? 1 : 0);