Files
vendoo/tools/verify-generator-workflow-1.44.0.mjs
T

66 lines
3.4 KiB
JavaScript

import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
const root = resolve(process.cwd());
const read = path => readFileSync(resolve(root, path), 'utf8');
const ux = read('public/ux-foundation.js');
const js = read('public/generator-workflow.js');
const css = read('public/generator-workflow.css');
const index = read('public/index.html');
const pkg = JSON.parse(read('package.json'));
const failures = [];
const assert = (condition, message) => { if (!condition) failures.push(message); };
assert(ux.includes('generator-workflow.css'), 'Generator-Workflow-CSS wird nicht durch die UX Foundation geladen.');
assert(ux.includes('generator-workflow.js'), 'Generator-Workflow-JavaScript wird nicht durch die UX Foundation geladen.');
assert(pkg.scripts?.['verify:generator-workflow'] === 'node tools/verify-generator-workflow-1.44.0.mjs', 'npm-Script verify:generator-workflow fehlt oder ist falsch.');
assert(String(pkg.scripts?.['verify:all'] || '').includes('verify:generator-workflow'), 'verify:all enthält das Generator-Workflow-Gate nicht.');
for (const id of [
'generator', 'generator-commandbar', 'generate-btn', 'save-btn', 'dropzone', 'photo-preview',
'platform-buttons', 'provider-buttons', 'template-select', 'result-section', 'result-title',
]) {
assert(index.includes(`id="${id}"`), `Bestehender Generator-Vertrag fehlt: #${id}`);
}
for (const marker of [
'ux-generator-flow', 'data-ux-generator-stage', 'data-ux-generator-action',
'createAdvancedSettings', 'simplifyMediaPanel', 'simplifyResultPanel',
'MutationObserver', 'requestAnimationFrame', 'aria-current', 'focusStage',
]) {
assert(js.includes(marker), `Generator-Workflow-Marker fehlt: ${marker}`);
}
for (const stage of ['photos', 'settings', 'result']) {
assert(js.includes(`data-ux-generator-stage="${stage}"`), `Geführter Schritt fehlt: ${stage}`);
assert(js.includes(`${stage}:`), `Schrittziel fehlt: ${stage}`);
}
assert(js.includes('localStorage'), 'Einklappzustände werden nicht benutzerspezifisch gespeichert.');
assert(js.includes("generate.click()"), 'Geführte Generieren-Aktion ist nicht an den bestehenden Button delegiert.');
assert(!js.includes('onclick='), 'Inline-Eventhandler sind im Generator-Workflow unzulässig.');
assert(!js.includes('fetch('), 'Der UX-Workflow darf keine neue API- oder Datenlogik einführen.');
assert(!js.includes('innerHTML +='), 'Unsichere inkrementelle HTML-Erweiterung erkannt.');
for (const selector of [
'.ux-generator-flow', '.ux-generator-stages', '.ux-generator-advanced',
'.ux-generator-optional', '.ux-generator-panel-focus',
'@media (max-width: 1100px)', '@media (max-width: 760px)',
'@media (prefers-reduced-motion: reduce)', 'focus-visible',
]) {
assert(css.includes(selector), `Generator-Workflow-CSS-Vertrag fehlt: ${selector}`);
}
assert(css.includes('var(--'), 'Generator-Workflow verwendet das zentrale Token-/Variablensystem nicht.');
assert(css.includes('grid-template-columns: minmax(0, .92fr) minmax(0, 1.08fr)'), 'Der reduzierte Zwei-Spalten-Vertrag fehlt.');
assert(css.includes('grid-column: 1 / -1'), 'Die Ergebnisfläche wird nicht über die volle Breite geführt.');
if (failures.length) {
console.error('[GENERATOR-WORKFLOW] Prüfung fehlgeschlagen:');
failures.forEach(failure => console.error(`- ${failure}`));
process.exit(1);
}
console.log('[GENERATOR-WORKFLOW] Geführter Drei-Schritt-Ablauf, reduzierte Einstellungen, responsive Struktur und bestehende Datenverträge sind vollständig.');