UNPKG

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
"use strict"; 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