UNPKG

vibe-guard

Version:

🛡️ Vibe-Guard Security Scanner - Catch security issues before they catch you!

119 lines 5.15 kB
#!/usr/bin/env node "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const commander_1 = require("commander"); const chalk_1 = __importDefault(require("chalk")); const index_1 = __importDefault(require("../index")); const program = new commander_1.Command(); program .name('vibe-guard') .description('🛡️ Vibe-Guard Security Scanner - Catch security issues before they catch you!') .version('1.0.0'); // Scan command (main functionality) program .command('scan') .description('Scan files or directories for security issues') .argument('<target>', 'File or directory to scan') .option('-f, --format <format>', 'Output format (table, json)', 'table') .option('-v, --verbose', 'Verbose output', false) .option('--exclude <patterns...>', 'Exclude patterns') .option('--include <patterns...>', 'Include patterns') .action(async (target, options) => { try { console.log(chalk_1.default.blue.bold('🛡️ Starting Vibe-Guard Security Scan...\n')); const scanOptions = { target, format: options.format, verbose: options.verbose, exclude: options.exclude, include: options.include }; const vibeGuard = new index_1.default(); const output = await vibeGuard.scanAndFormat(scanOptions); console.log(output); // Exit with error code if issues found const result = await vibeGuard.scan(scanOptions); if (result.issuesFound > 0) { process.exit(1); } } catch (error) { console.error(chalk_1.default.red.bold('❌ Error:'), error instanceof Error ? error.message : 'Unknown error'); process.exit(1); } }); // Default action (scan without explicit 'scan' command for backward compatibility) program .argument('[target]', 'File or directory to scan') .option('-f, --format <format>', 'Output format (table, json)', 'table') .option('-v, --verbose', 'Verbose output', false) .option('--exclude <patterns...>', 'Exclude patterns') .option('--include <patterns...>', 'Include patterns') .action(async (target, options) => { // Only run if target is provided and no subcommand was used if (target && !process.argv.includes('scan') && !process.argv.includes('rules') && !process.argv.includes('version')) { try { console.log(chalk_1.default.blue.bold('🛡️ Starting Vibe-Guard Security Scan...\n')); const scanOptions = { target, format: options.format, verbose: options.verbose, exclude: options.exclude, include: options.include }; const vibeGuard = new index_1.default(); const output = await vibeGuard.scanAndFormat(scanOptions); console.log(output); // Exit with error code if issues found const result = await vibeGuard.scan(scanOptions); if (result.issuesFound > 0) { process.exit(1); } } catch (error) { console.error(chalk_1.default.red.bold('❌ Error:'), error instanceof Error ? error.message : 'Unknown error'); process.exit(1); } } }); program .command('rules') .description('List all available security rules') .action(() => { const vibeGuard = new index_1.default(); const rules = vibeGuard.getRules(); console.log(chalk_1.default.blue.bold('🛡️ Available Security Rules:\n')); rules.forEach(rule => { const severityColor = rule.severity === 'critical' ? chalk_1.default.red.bold : rule.severity === 'high' ? chalk_1.default.red : rule.severity === 'medium' ? chalk_1.default.yellow : chalk_1.default.blue; console.log(`${chalk_1.default.bold(rule.name)} ${severityColor(`[${rule.severity.toUpperCase()}]`)}`); console.log(` ${chalk_1.default.gray(rule.description)}\n`); }); }); program .command('version') .description('Show version information') .action(() => { const vibeGuard = new index_1.default(); console.log(chalk_1.default.blue.bold('🛡️ Vibe-Guard Security Scanner')); console.log(`Version: ${vibeGuard.getVersion()}`); console.log('Built for developers who code fast and need security that keeps up! 🚀'); console.log(chalk_1.default.gray('TypeScript-powered, zero-dependency security scanning')); }); // Handle unhandled promise rejections process.on('unhandledRejection', (reason, promise) => { console.error(chalk_1.default.red.bold('❌ Unhandled Rejection at:'), promise, chalk_1.default.red('reason:'), reason); process.exit(1); }); // Handle uncaught exceptions process.on('uncaughtException', (error) => { console.error(chalk_1.default.red.bold('❌ Uncaught Exception:'), error); process.exit(1); }); program.parse(); //# sourceMappingURL=vibe-guard.js.map