/** * Prüft alle Dateien unter content/, ohne die Anwendung zu starten. * * npm run inhalte:pruefen * * Endet mit 0, wenn alles in Ordnung ist, sonst mit 1 – so lässt sich das * Skript in einen Prüflauf oder einen Git-Haken einhängen. */ import { ladeInhalte } from '../src/lib/inhalte/laden'; import { InhaltsFehler } from '../src/lib/inhalte/fehler'; import { inhaltWurzel } from '../src/lib/pfade'; function main() { try { const alle = ladeInhalte(inhaltWurzel); const kartenJeBlock = alle.bloecke.map((b) => { const anzahl = alle.karten.filter((k) => k.block === b.id).length; return `${b.titel}: ${anzahl}`; }); console.log('Inhalte in Ordnung.'); console.log(''); console.log(` Wochen ${alle.wochen.length}`); console.log(` Handouts ${alle.handouts.length}`); console.log(` Merkkarten ${alle.karten.length} (${kartenJeBlock.join(', ')})`); console.log(` Praxisaufgaben ${alle.aufgaben.length}`); console.log(` Checklisten ${alle.checklisten.length}`); console.log(` Lernzielkontrollen ${alle.kontrollen.length}`); console.log(` Glossareinträge ${alle.glossar.length}`); console.log(` Berufsbildpositionen ${alle.positionen.length}`); console.log(` Lernfelder ${alle.lernfelder.length}`); console.log(` Feedbackkriterien ${alle.feedback.kriterien.length}`); console.log(''); const ohneAbdeckung = alle.positionen.filter( (p) => !alle.handouts.some((h) => h.rahmenplan.includes(p.id)) && !alle.aufgaben.some((a) => a.rahmenplan.includes(p.id)), ); if (ohneAbdeckung.length > 0) { console.log(` Hinweis: ${ohneAbdeckung.length} Berufsbildpositionen sind von keinem Inhalt berührt:`); console.log(` ${ohneAbdeckung.map((p) => p.id).join(', ')}`); console.log(' Das ist kein Fehler – nur etwas, das im Laufe der Ausbildung geschlossen werden sollte.'); console.log(''); } process.exit(0); } catch (fehler) { if (fehler instanceof InhaltsFehler) { console.error(fehler.message); process.exit(1); } throw fehler; } } main();