agentsqripts
Version:
Comprehensive static code analysis toolkit for identifying technical debt, security vulnerabilities, performance issues, and code quality problems
57 lines (49 loc) • 1.7 kB
JavaScript
/**
* @file SRP file collector
* @description Recursively collects files for SRP analysis
*/
const fs = require('fs');
const { promises: fsPromises } = require('fs');
const path = require('path');
const { DEFAULT_EXTENSIONS } = require('../../config/localVars');
/**
* Recursively get all files in a directory with specified extensions
* @param {string} dirPath - Directory path to scan
* @param {string[]} extensions - File extensions to include
* @param {string[]} files - Accumulator for found files
* @returns {string[]} Array of file paths
*/
async function getAllFiles(dirPath, extensions = DEFAULT_EXTENSIONS, files = []) {
try {
try {
await fsPromises.access(dirPath);
} catch (error) {
return files;
}
const entries = await fsPromises.readdir(dirPath);
for (const entry of entries) {
const fullPath = path.join(dirPath, entry);
try {
const stat = await fsPromises.stat(fullPath);
if (stat.isDirectory()) {
// Skip common directories that shouldn't be analyzed
if (!['node_modules', '.git', 'dist', 'build', '.next', 'coverage'].includes(entry)) {
await getAllFiles(fullPath, extensions, files);
}
} else if (extensions.includes(path.extname(fullPath))) {
files.push(fullPath);
}
} catch (error) {
// Skip files that can't be accessed
console.warn(`Warning: Cannot access ${fullPath}: ${error.message}`);
}
}
} catch (error) {
console.warn(`Warning: Cannot read directory ${dirPath}: ${error.message}`);
}
return files;
}
module.exports = {
getAllFiles,
DEFAULT_EXTENSIONS
};