vibe-guard
Version:
🛡️ Vibe-Guard Security Scanner - Catch security issues before they catch you!
119 lines • 5.15 kB
JavaScript
;
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