ubon
Version:
Security scanner for AI-generated React/Next.js and Python apps. Catches hardcoded secrets, accessibility issues, and vulnerabilities that traditional linters miss.
40 lines (39 loc) • 2.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.initializeConfig = initializeConfig;
const fs_1 = require("fs");
const path_1 = require("path");
const __1 = require("..");
async function initializeConfig(options) {
console.log('🔍 Analyzing project...');
const scanner = new __1.UbonScan(false, true);
const results = await scanner.diagnose({ directory: process.cwd(), profile: 'auto' });
const analysis = analyzeProject(results);
const config = generateOptimalConfig(analysis, options);
const configPath = (0, path_1.join)(process.cwd(), 'ubon.config.json');
(0, fs_1.writeFileSync)(configPath, JSON.stringify(config, null, 2));
console.log('✅ Generated ubon.config.json');
console.log(`📊 Profile: ${analysis.detectedProfile}`);
console.log(`🎯 Recommended min confidence: ${config.minConfidence ?? 'none'}`);
if (config.disabledRules?.length)
console.log(`🚫 Disabled noisy rules: ${config.disabledRules.join(', ')}`);
if (analysis.baselineRecommended)
console.log('💡 Run `ubon check --update-baseline` to suppress existing issues');
}
function analyzeProject(results) {
const detectedProfile = results.some(r => (r.file || '').endsWith('.py')) ? 'python' : 'next';
const noisy = new Map();
for (const r of results)
noisy.set(r.ruleId, (noisy.get(r.ruleId) || 0) + 1);
const suggestedDisabledRules = Array.from(noisy.entries()).filter(([id, count]) => id === 'SEC018' && count > 5).map(([id]) => id);
const recommendedMinConfidence = 0.7;
return { detectedProfile, commonFalsePositives: [], recommendedMinConfidence, suggestedDisabledRules, baselineRecommended: results.length > 20 };
}
function generateOptimalConfig(analysis, options) {
return {
profile: options.profile || analysis.detectedProfile,
minConfidence: analysis.recommendedMinConfidence,
failOn: 'error',
disabledRules: analysis.suggestedDisabledRules
};
}