* docs: prepare Vendoo 1.41.2 git-ignore boundary hotfix * fix: track native source modules with root-anchored runtime ignores
55 lines
2.6 KiB
JavaScript
55 lines
2.6 KiB
JavaScript
import { existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
import { dirname, join } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { spawnSync } from 'node:child_process';
|
|
import { tmpdir } from 'node:os';
|
|
|
|
const root = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
const verifier = join(root, 'tools', 'verify-esm-export-contracts.mjs');
|
|
const requiredFiles = [
|
|
'app/modules/listings/routes.mjs',
|
|
'app/modules/inventory/index.mjs',
|
|
'app/modules/inventory/repository.mjs',
|
|
'app/modules/inventory/routes.mjs',
|
|
];
|
|
const failures = [];
|
|
for (const rel of requiredFiles) {
|
|
if (!existsSync(join(root, rel))) failures.push(`Produktive Pflichtdatei fehlt: ${rel}`);
|
|
}
|
|
|
|
const temp = mkdtempSync(join(tmpdir(), 'vendoo-source-boundary-'));
|
|
try {
|
|
mkdirSync(join(temp, 'app', 'modules', 'listings'), { recursive: true });
|
|
writeFileSync(join(temp, 'server.mjs'), "import { registerListingsRoutes } from './app/modules/listings/routes.mjs';\nregisterListingsRoutes;\n", 'utf8');
|
|
writeFileSync(join(temp, 'app', 'modules', 'listings', 'routes.mjs'), 'export function registerListingsRoutes() {}\n', 'utf8');
|
|
|
|
mkdirSync(join(temp, 'Archiv', 'Vendoo_Alt', 'vendoo'), { recursive: true });
|
|
writeFileSync(
|
|
join(temp, 'Archiv', 'Vendoo_Alt', 'vendoo', 'server.mjs'),
|
|
"import { missing } from './app/modules/inventory/routes.mjs';\nmissing;\n",
|
|
'utf8',
|
|
);
|
|
|
|
const archiveIgnored = spawnSync(process.execPath, [verifier, '--root', temp], { encoding: 'utf8' });
|
|
if (archiveIgnored.status !== 0) {
|
|
failures.push(`Archiv wurde fälschlich als produktiver Source-Root geprüft:\n${archiveIgnored.stdout}\n${archiveIgnored.stderr}`);
|
|
}
|
|
|
|
rmSync(join(temp, 'app', 'modules', 'listings', 'routes.mjs'));
|
|
const realMissingDetected = spawnSync(process.execPath, [verifier, '--root', temp], { encoding: 'utf8' });
|
|
if (realMissingDetected.status === 0) {
|
|
failures.push('Eine im echten Source-Root fehlende Moduldatei wurde nicht erkannt.');
|
|
} else if (!`${realMissingDetected.stdout}\n${realMissingDetected.stderr}`.includes("./app/modules/listings/routes.mjs")) {
|
|
failures.push('Der Fehlerbericht nennt die im echten Source-Root fehlende Moduldatei nicht.');
|
|
}
|
|
} finally {
|
|
rmSync(temp, { recursive: true, force: true });
|
|
}
|
|
|
|
if (failures.length) {
|
|
console.error(`Source-Root-Grenzprüfung 1.41.2 fehlgeschlagen (${failures.length}):`);
|
|
failures.forEach(item => console.error(`- ${item}`));
|
|
process.exit(1);
|
|
}
|
|
console.log('Source-Root-Grenzprüfung 1.41.2 erfolgreich: produktive Moduldateien vorhanden, Archivstände ausgeschlossen und echte fehlende Imports weiterhin blockiert.');
|