geocrop-platform./apps/nextgen/server/scripts/lint-no-backups.js

49 lines
1.3 KiB
JavaScript

#!/usr/bin/env node
/**
* Hygiene lint: fail if any *.bak or *.orig file is committed in server/src
* or client/src. Run via `npm run lint:hygiene`.
*
* Exits 0 if clean, 1 if any forbidden files are found.
*/
const fs = require('fs');
const path = require('path');
const FORBIDDEN_PATTERNS = [/\.bak$/, /\.orig$/, /~$/];
const ROOTS = [
path.join(__dirname, '..', 'src'),
path.join(__dirname, '..', '..', 'client', 'src'),
];
function* walk(dir) {
if (!fs.existsSync(dir)) return;
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
const full = path.join(dir, entry.name);
if (entry.isDirectory()) {
// skip node_modules etc just in case
if (entry.name === 'node_modules' || entry.name.startsWith('.')) continue;
yield* walk(full);
} else {
yield full;
}
}
}
const offenders = [];
for (const root of ROOTS) {
for (const file of walk(root)) {
if (FORBIDDEN_PATTERNS.some((re) => re.test(file))) {
offenders.push(file);
}
}
}
if (offenders.length === 0) {
console.log('[lint:hygiene] OK — no .bak / .orig / ~ files in server/src or client/src');
process.exit(0);
}
console.error('[lint:hygiene] FAILED — forbidden files found:');
for (const f of offenders) console.error(' ' + f);
console.error('\nMove these to Trash or rename to remove the suffix.');
process.exit(1);