UNPKG

vibesec

Version:

Security scanner for AI-generated code - detects vulnerabilities in vibe-coded projects

117 lines 3.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.logger = exports.Logger = exports.LogLevel = void 0; var LogLevel; (function (LogLevel) { LogLevel["DEBUG"] = "debug"; LogLevel["INFO"] = "info"; LogLevel["WARN"] = "warn"; LogLevel["ERROR"] = "error"; LogLevel["FATAL"] = "fatal"; })(LogLevel || (exports.LogLevel = LogLevel = {})); class Logger { constructor(context = 'default') { this.logLevel = LogLevel.INFO; this.logs = []; this.maxLogs = 1000; this.context = context; } static getInstance(context = 'default') { if (!Logger.instances.has(context)) { Logger.instances.set(context, new Logger(context)); } return Logger.instances.get(context); } setLevel(level) { this.logLevel = level; } shouldLog(level) { const levels = [LogLevel.DEBUG, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR, LogLevel.FATAL]; return levels.indexOf(level) >= levels.indexOf(this.logLevel); } log(level, message, context, error) { if (!this.shouldLog(level)) { return; } const entry = { timestamp: new Date().toISOString(), level, message, context, error, }; this.logs.push(entry); if (this.logs.length > this.maxLogs) { this.logs.shift(); } const prefix = `[${entry.timestamp}] [${level.toUpperCase()}] [${this.context}]`; const contextStr = context ? ` ${JSON.stringify(context)}` : ''; const errorStr = error ? `\n Error: ${error.message}\n Stack: ${error.stack}` : ''; switch (level) { case LogLevel.DEBUG: console.debug(`${prefix} ${message}${contextStr}${errorStr}`); break; case LogLevel.INFO: console.log(`${prefix} ${message}${contextStr}${errorStr}`); break; case LogLevel.WARN: console.warn(`${prefix} ${message}${contextStr}${errorStr}`); break; case LogLevel.ERROR: case LogLevel.FATAL: console.error(`${prefix} ${message}${contextStr}${errorStr}`); break; } } debug(message, context) { this.log(LogLevel.DEBUG, message, context); } info(message, context) { this.log(LogLevel.INFO, message, context); } warn(message, context) { this.log(LogLevel.WARN, message, context); } error(message, context, error) { this.log(LogLevel.ERROR, message, context, error); } fatal(message, context, error) { this.log(LogLevel.FATAL, message, context, error); } async measure(operation, fn, context) { const start = performance.now(); this.debug(`Starting: ${operation}`, context); try { const result = await fn(); const duration = performance.now() - start; this.info(`Completed: ${operation}`, { ...context, duration: `${duration.toFixed(2)}ms` }); return result; } catch (error) { const duration = performance.now() - start; this.error(`Failed: ${operation}`, { ...context, duration: `${duration.toFixed(2)}ms` }, error); throw error; } } getRecentLogs(count = 100) { return this.logs.slice(-count); } getLogsByLevel(level) { return this.logs.filter((log) => log.level === level); } exportLogs() { return JSON.stringify(this.logs, null, 2); } clear() { this.logs = []; } async close() { if (this.logs.length > 0) { this.info('Logger closing', { totalLogs: this.logs.length }); } } } exports.Logger = Logger; Logger.instances = new Map(); exports.logger = Logger.getInstance(); //# sourceMappingURL=logger.js.map