// Schreibt den Symbolsatz aus public/assets/icons.js in die Twig-Vorlage der Website und in die // erlaubte Liste des Validators. Eine Quelle, drei Abnehmer; tests/icons.test.mjs prüft das Ergebnis. // Aufruf: node scripts/build-icons.mjs import { readFile, writeFile } from 'node:fs/promises'; import { ICON_PATHS } from '../public/assets/icons.js'; const twigFile = new URL('../templates/blocks/icon.html.twig', import.meta.url); const twig = await readFile(twigFile, 'utf8'); const entries = Object.entries(ICON_PATHS).map(([name, path]) => ` ${/-/.test(name) ? `'${name}'` : name}: '${path}'`).join(',\n'); const nextTwig = twig.replace(/\{% set paths = \{\n[\s\S]*?\n\} %\}/, `{% set paths = {\n${entries}\n} %}`); if (nextTwig === twig && !twig.includes(entries)) throw new Error('Die Symbolliste in icon.html.twig wurde nicht gefunden.'); await writeFile(twigFile, nextTwig); const validatorFile = new URL('../src/Content/DocumentValidator.php', import.meta.url); const validator = await readFile(validatorFile, 'utf8'); const list = Object.keys(ICON_PATHS).map(name => `'${name}'`).join(', '); const nextValidator = validator.replace(/public const ICONS = \[[^\]]*\];/, `public const ICONS = [${list}];`); await writeFile(validatorFile, nextValidator); console.log(`${Object.keys(ICON_PATHS).length} Symbole geschrieben.`);