49 lines
1.3 KiB
JavaScript
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);
|