ripple-ai-detector
Version:
🌊 Ripple AI Bug Detector - Built by an AI that knows its flaws. Catch AI-generated bugs before you commit.
123 lines • 3.79 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.configManager = exports.ConfigManager = void 0;
const cosmiconfig_1 = require("cosmiconfig");
const path_1 = __importDefault(require("path"));
const file_utils_1 = require("../utils/file-utils");
const DEFAULT_CONFIG = {
analysis: {
languages: ['javascript', 'typescript'],
include: ['src/**/*.{js,ts,jsx,tsx}', '**/*.{js,ts,jsx,tsx}'],
exclude: [
'node_modules/**',
'dist/**',
'build/**',
'.git/**',
'**/*.test.{js,ts}',
'**/*.spec.{js,ts}',
'**/*.d.ts'
],
maxFiles: 100
},
rules: {
functionSignatureChange: {
enabled: true,
severity: 'error'
},
importExportMismatch: {
enabled: true,
severity: 'error'
},
typeMismatch: {
enabled: true,
severity: 'warning'
}
},
aiDetection: {
enabled: true,
sensitivity: 'medium',
patterns: [
'multiple-file-changes',
'function-signature-changes',
'import-export-changes',
'type-definition-changes'
]
},
output: {
format: 'console',
verbose: false,
showConfidence: true
},
usage: {
trackingEnabled: true,
apiUrl: 'https://api.ripple.dev'
}
};
class ConfigManager {
static instance;
config;
configPath = null;
constructor() {
this.config = DEFAULT_CONFIG;
}
static getInstance() {
if (!ConfigManager.instance) {
ConfigManager.instance = new ConfigManager();
}
return ConfigManager.instance;
}
// Load configuration from file or use defaults
async loadConfig(searchFrom) {
const explorer = (0, cosmiconfig_1.cosmiconfigSync)('ripple');
const result = explorer.search(searchFrom);
if (result) {
this.configPath = result.filepath;
this.config = { ...DEFAULT_CONFIG, ...result.config };
}
else {
this.config = DEFAULT_CONFIG;
}
return this.config;
}
// Get current configuration
getConfig() {
return this.config;
}
// Create default config file
async createDefaultConfig(directory = process.cwd()) {
const configPath = path_1.default.join(directory, '.ripple.config.js');
const configContent = `module.exports = ${JSON.stringify(DEFAULT_CONFIG, null, 2)};`;
await file_utils_1.FileUtils.writeFile(configPath, configContent);
return configPath;
}
// Update configuration
updateConfig(updates) {
this.config = { ...this.config, ...updates };
}
// Get config file path
getConfigPath() {
return this.configPath;
}
// Check if config file exists
async hasConfigFile(directory = process.cwd()) {
const possiblePaths = [
path_1.default.join(directory, '.ripple.config.js'),
path_1.default.join(directory, '.ripple.config.json'),
path_1.default.join(directory, 'ripple.config.js'),
path_1.default.join(directory, 'ripple.config.json')
];
for (const configPath of possiblePaths) {
if (await file_utils_1.FileUtils.exists(configPath)) {
return true;
}
}
return false;
}
}
exports.ConfigManager = ConfigManager;
// Export singleton instance
exports.configManager = ConfigManager.getInstance();
//# sourceMappingURL=config.js.map