73 lines
2.7 KiB
JavaScript
73 lines
2.7 KiB
JavaScript
import { readFileSync } from 'node:fs';
|
|
import { resolve } from 'node:path';
|
|
|
|
const root = resolve(import.meta.dirname, '..');
|
|
const read = path => readFileSync(resolve(root, path), 'utf8');
|
|
const failures = [];
|
|
|
|
function requireText(content, needle, label) {
|
|
if (!content.includes(needle)) failures.push(`${label}: ${needle}`);
|
|
}
|
|
|
|
function forbidText(content, needle, label) {
|
|
if (content.includes(needle)) failures.push(`${label}: ${needle}`);
|
|
}
|
|
|
|
const loader = read('public/ux-foundation.js');
|
|
const script = read('public/publish-center-ux.js');
|
|
const style = read('public/publish-center-ux.css');
|
|
const pkg = JSON.parse(read('package.json'));
|
|
|
|
requireText(loader, '/publish-center-ux.css?v=1.44.0', 'Publish-CSS wird nicht geladen');
|
|
requireText(loader, '/publish-center-ux.js?v=1.44.0', 'Publish-JavaScript wird nicht geladen');
|
|
requireText(loader, 'loadPublishCenterAssets();', 'Publish-Assets fehlen in der UX-Initialisierung');
|
|
|
|
if (pkg.scripts?.['verify:publish-center'] !== 'node tools/verify-publish-center-ux-1.44.0.mjs') {
|
|
failures.push('package.json: verify:publish-center fehlt oder zeigt auf die falsche Datei');
|
|
}
|
|
requireText(pkg.scripts?.['verify:all'] || '', 'npm run verify:publish-center', 'Publish-Gate fehlt in verify:all');
|
|
|
|
for (const token of [
|
|
'OPERATIONAL_VIEWS',
|
|
'VIEW_META',
|
|
'ux-publish-view-groups',
|
|
'ux-publish-status-drawer',
|
|
'data-publish-operational',
|
|
'data-has-publish-selection',
|
|
'MutationObserver',
|
|
"button.setAttribute('role', 'tab')",
|
|
"button.setAttribute('aria-selected'",
|
|
'publish-filter-platform',
|
|
'publish-filter-status',
|
|
'publish-list-card',
|
|
]) requireText(script, token, 'Publish-UX-Vertrag unvollständig');
|
|
|
|
for (const forbidden of ['fetch(', 'api(', 'XMLHttpRequest', '.innerHTML', 'outerHTML', 'onclick=', 'localStorage.clear']) {
|
|
forbidText(script, forbidden, 'Publish-UX darf keine Daten-, API- oder unsichere DOM-Logik enthalten');
|
|
}
|
|
|
|
for (const token of [
|
|
'.ux-publish-guide',
|
|
'.ux-publish-view-groups',
|
|
'.ux-publish-status-drawer',
|
|
'[data-publish-operational]',
|
|
'[data-has-publish-selection]',
|
|
'.ux-publish-active-filters',
|
|
'.ux-publish-batch-more',
|
|
':focus-visible',
|
|
'@media (max-width: 900px)',
|
|
'@media (prefers-reduced-motion: reduce)',
|
|
'var(--vd-',
|
|
]) requireText(style, token, 'Publish-CSS-Vertrag unvollständig');
|
|
|
|
for (const forbidden of ['position: fixed', 'z-index: 9999', '#ff0000', '!important']) {
|
|
forbidText(style, forbidden, 'Publish-CSS verletzt Design- oder Layoutgrenzen');
|
|
}
|
|
|
|
if (failures.length) {
|
|
console.error('Publish-Center-UX 1.44.0 Gate fehlgeschlagen:');
|
|
for (const failure of failures) console.error(`- ${failure}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log('Publish-Center-UX 1.44.0 Gate bestanden.'); |