64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
/* eslint-disable @typescript-eslint/no-require-imports */
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
const MAX_LINES = 400;
|
||
|
||
// List of file patterns to ignore (optional, can be customized)
|
||
const IGNORE_PATTERNS = [
|
||
/\.lock$/, // Lock files
|
||
/\.min\.js$/, // Minified files
|
||
/\.map$/, // Source maps
|
||
/package-lock\.json$/,
|
||
/bun\.lock$/,
|
||
/tsconfig\.tsbuildinfo$/,
|
||
/\.md$/, // Markdown documentation files
|
||
/context\.md$/, // Context files for sub-agents
|
||
/project-structure\.txt$/, // Generated project structure
|
||
/dependency-graph\.json$/,
|
||
];
|
||
|
||
function shouldIgnore(filePath) {
|
||
return IGNORE_PATTERNS.some(pattern => pattern.test(filePath));
|
||
}
|
||
|
||
const files = process.argv.slice(2);
|
||
if (files.length === 0) {
|
||
console.log('ℹ️ No files to check');
|
||
process.exit(0);
|
||
}
|
||
|
||
let hasError = false;
|
||
|
||
files.forEach(file => {
|
||
// Skip ignored patterns
|
||
if (shouldIgnore(file)) {
|
||
console.log(`⏭️ Skipping ${file} (ignored pattern)`);
|
||
return;
|
||
}
|
||
|
||
// Check if file exists (it might have been deleted)
|
||
if (!fs.existsSync(file)) {
|
||
console.log(`⏭️ Skipping ${file} (file does not exist)`);
|
||
return;
|
||
}
|
||
|
||
try {
|
||
const content = fs.readFileSync(file, 'utf8');
|
||
const lines = content.split('\n').length;
|
||
|
||
if (lines > MAX_LINES) {
|
||
console.error(`❌ ${file} is too large (${lines} lines, max ${MAX_LINES}). AI agents will struggle. Please refactor!`);
|
||
hasError = true;
|
||
} else {
|
||
console.log(`✅ ${file} (${lines} lines) - OK`);
|
||
}
|
||
} catch (err) {
|
||
console.error(`⚠️ Error reading ${file}: ${err.message}`);
|
||
// Don't fail on read errors, just warn
|
||
}
|
||
});
|
||
|
||
if (hasError) {
|
||
process.exit(1);
|
||
}
|