ripple-ai-detector
Version:
🌊 Ripple AI Bug Detector - Built by an AI that knows its flaws. Catch AI-generated bugs before you commit.
111 lines • 3.75 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FileUtils = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const glob_1 = require("glob");
class FileUtils {
// Check if file exists
static async exists(filePath) {
try {
await fs_extra_1.default.access(filePath);
return true;
}
catch {
return false;
}
}
// Read file content
static async readFile(filePath) {
return fs_extra_1.default.readFile(filePath, 'utf-8');
}
// Write file content
static async writeFile(filePath, content) {
await fs_extra_1.default.ensureDir(path_1.default.dirname(filePath));
await fs_extra_1.default.writeFile(filePath, content, 'utf-8');
}
// Get file info
static async getFileInfo(filePath) {
const content = await this.readFile(filePath);
const extension = path_1.default.extname(filePath);
return {
path: filePath,
content,
extension,
isTypeScript: ['.ts', '.tsx'].includes(extension),
isJavaScript: ['.js', '.jsx', '.ts', '.tsx'].includes(extension)
};
}
// Find files matching patterns
static async findFiles(patterns, cwd = process.cwd()) {
const allFiles = [];
for (const pattern of patterns) {
const files = await (0, glob_1.glob)(pattern, {
cwd,
ignore: ['node_modules/**', 'dist/**', 'build/**', '.git/**']
});
allFiles.push(...files.map(f => path_1.default.resolve(cwd, f)));
}
// Remove duplicates
return [...new Set(allFiles)];
}
// Get JavaScript/TypeScript files in directory
static async getJSFiles(directory = process.cwd()) {
return this.findFiles([
'**/*.js',
'**/*.jsx',
'**/*.ts',
'**/*.tsx'
], directory);
}
// Check if file is supported
static isSupportedFile(filePath) {
const extension = path_1.default.extname(filePath);
return ['.js', '.jsx', '.ts', '.tsx'].includes(extension);
}
// Get relative path from cwd
static getRelativePath(filePath, basePath = process.cwd()) {
return path_1.default.relative(basePath, filePath);
}
// Ensure directory exists
static async ensureDir(dirPath) {
await fs_extra_1.default.ensureDir(dirPath);
}
// Get file stats
static async getStats(filePath) {
return fs_extra_1.default.stat(filePath);
}
// Check if path is directory
static async isDirectory(filePath) {
try {
const stats = await this.getStats(filePath);
return stats.isDirectory();
}
catch {
return false;
}
}
// Get files modified in last N minutes
static async getRecentlyModified(directory, minutes = 60) {
const files = await this.getJSFiles(directory);
const cutoff = Date.now() - (minutes * 60 * 1000);
const recentFiles = [];
for (const file of files) {
try {
const stats = await this.getStats(file);
if (stats.mtime.getTime() > cutoff) {
recentFiles.push(file);
}
}
catch {
// Skip files that can't be accessed
}
}
return recentFiles;
}
}
exports.FileUtils = FileUtils;
//# sourceMappingURL=file-utils.js.map