ripbug-ai-detector
Version:
🔥 RipBug AI Bug Detector - Built by an AI that rips its own bugs. Destroy AI-generated bugs before you commit.
128 lines • 6.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateCommand = validateCommand;
const logger_1 = require("../utils/logger");
const config_1 = require("../config/config");
const git_manager_1 = require("../git/git-manager");
const analyzer_1 = require("../analysis/analyzer");
const usage_tracker_1 = require("../usage/usage-tracker");
const formatter_1 = require("../output/formatter");
const path_1 = __importDefault(require("path"));
async function validateCommand(options) {
try {
// Load configuration
await config_1.configManager.loadConfig();
const config = config_1.configManager.getConfig();
// Check usage limits
const usageTracker = new usage_tracker_1.UsageTracker();
const canValidate = await usageTracker.canValidate();
if (!canValidate) {
const usage = await usageTracker.getUsage();
logger_1.logger.error(`Monthly validation limit reached (${usage.current}/${usage.limit})`);
logger_1.logger.money('You\'ve saved hours of debugging this month!');
logger_1.logger.upgrade('Upgrade to Pro for unlimited validations: $49/month');
logger_1.logger.tip('Visit: https://ripbug.dev/upgrade');
process.exit(1);
}
// Show header
if (options.format === 'console') {
logger_1.logger.header();
}
// Determine files to analyze
let filesToAnalyze = [];
if (options.files) {
filesToAnalyze = options.files;
}
else if (options.all) {
// Analyze all files in project
const gitManager = new git_manager_1.GitManager();
if (options.format === 'console') {
logger_1.logger.info('Searching for JavaScript/TypeScript files...');
}
filesToAnalyze = await gitManager.getAllJSFiles();
// Debug: Show what files were found
if (options.format === 'console') {
logger_1.logger.info(`Found ${filesToAnalyze.length} files in project`);
if (filesToAnalyze.length > 0) {
logger_1.logger.info('Files found:');
filesToAnalyze.slice(0, 10).forEach(file => {
logger_1.logger.info(` - ${path_1.default.relative(process.cwd(), file)}`);
});
if (filesToAnalyze.length > 10) {
logger_1.logger.info(` ... and ${filesToAnalyze.length - 10} more`);
}
}
}
}
else {
// Default: analyze staged files
const gitManager = new git_manager_1.GitManager();
filesToAnalyze = await gitManager.getStagedFiles();
if (filesToAnalyze.length === 0) {
logger_1.logger.warning('No staged files found');
logger_1.logger.tip('Stage some files with "git add" or use --all to analyze entire project');
return;
}
}
// Filter for supported files
filesToAnalyze = filesToAnalyze.filter(file => file.endsWith('.js') || file.endsWith('.jsx') ||
file.endsWith('.ts') || file.endsWith('.tsx'));
if (filesToAnalyze.length === 0) {
logger_1.logger.warning('No JavaScript/TypeScript files to analyze');
// Show helpful debugging info
if (options.format === 'console') {
const cwd = process.cwd();
logger_1.logger.info(`Current directory: ${cwd}`);
// Check if there are any files at all
try {
const allFiles = await require('fs').promises.readdir(cwd);
logger_1.logger.info(`Files in directory: ${allFiles.length}`);
const jsFiles = allFiles.filter((f) => f.endsWith('.js') || f.endsWith('.ts') || f.endsWith('.jsx') || f.endsWith('.tsx'));
if (jsFiles.length > 0) {
logger_1.logger.info(`JS/TS files found: ${jsFiles.join(', ')}`);
}
else {
logger_1.logger.tip('Try creating a test file: echo "console.log(\'test\');" > test.js');
}
}
catch (error) {
logger_1.logger.info('Could not read directory contents');
}
}
return;
}
// Start analysis
logger_1.logger.startSpinner(`Analyzing ${filesToAnalyze.length} files...`);
const analyzer = new analyzer_1.RipBugAnalyzer(config);
const results = await analyzer.analyze(filesToAnalyze);
logger_1.logger.stopSpinner(true, `Analysis complete`);
// Track usage
await usageTracker.trackValidation(filesToAnalyze.length, results.aiGenerated);
// Format and display results
const formatter = new formatter_1.OutputFormatter(options.format);
await formatter.displayResults(results);
// Show usage status
if (options.format === 'console') {
const usage = await usageTracker.getUsage();
logger_1.logger.newLine();
logger_1.logger.usageStatus(usage.current, usage.limit);
// Show upgrade prompt if getting close to limit
if (usage.current >= usage.limit * 0.8) {
logger_1.logger.upgrade('Upgrade to Pro for unlimited validations: ripbug.dev/pro');
}
}
// Exit with error code if issues found
if (results.issues.some(issue => issue.severity === 'error')) {
process.exit(1);
}
}
catch (error) {
logger_1.logger.stopSpinner(false, 'Analysis failed');
logger_1.logger.error(`Validation failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
process.exit(1);
}
}
//# sourceMappingURL=validate.js.map