import { readdir, rm } from 'node:fs/promises'; import { join } from 'node:path'; import { fileURLToPath, URL } from 'node:url'; /* * Aufraeumen nach einem Bau. * * `build/` entsteht bei jedem `npm run build` neu; es zu entfernen kostet * nichts. `release/` ist etwas anderes: Dort liegen die ausgelieferten Pakete * und die Dateien PRUEFSUMMEN-.txt, und der Ordner steht in * .gitignore - er ist damit die einzige Kopie. Die Pruefsummen sind der * Nachweis, mit welchem Programmstand eine Planunterlage erstellt wurde; ein * Neubau aus derselben Marke ergaebe denselben Quelltext, aber eine andere * Summe. Wer sie loescht, kann sie nicht zurueckholen - auch * `npm run pruefsummen` nicht, denn das braucht das Paket, an das es die Summe * haengt. * * Deshalb: `build/` geht immer, `release/` nur auf ausdrueckliche Ansage mit * `npm run clean -- --auch-release`, und die PRUEFSUMMEN-Dateien bleiben auch * dann liegen. * * Der doppelte Strich gehoert dazu und ist keine Schreibweise zur Zierde: npm * nimmt ein unbekanntes Argument als eigene Einstellung und reicht es nicht an * das Skript weiter. `npm run clean --auch-release` raeumt deshalb nur `build/` * auf und laesst `release/` unberuehrt - erst `npm run clean -- --auch-release` * kommt hier an. Wer das Skript unmittelbar aufruft (`node scripts/clean.mjs * --auch-release`), braucht den Strich nicht. */ /** Dateien, die auch mit --auch-release nicht angetastet werden. */ const NACHWEISE = /^PRUEFSUMMEN-.+\.txt$/i; const ordner = (name) => fileURLToPath(new URL(`../${name}`, import.meta.url)); await rm(ordner('build'), { recursive: true, force: true }); console.log('entfernt: build'); if (!process.argv.includes('--auch-release')) { console.log( 'behalten: release (Pakete und Pruefsummen) – entfernen mit: npm run clean -- --auch-release', ); } else { const ziel = ordner('release'); let eintraege = []; try { eintraege = await readdir(ziel, { withFileTypes: true }); } catch (fehler) { // Ein frischer Klon hat kein release/ - das ist kein Fehlerfall. if (fehler.code !== 'ENOENT') throw fehler; } for (const eintrag of eintraege) { if (NACHWEISE.test(eintrag.name)) continue; await rm(join(ziel, eintrag.name), { recursive: true, force: true }); } console.log('entfernt: release, ohne die Dateien PRUEFSUMMEN-*.txt'); }