UNPKG

@casoon/auditmysite

Version:

Professional website analysis suite with robust accessibility testing, Core Web Vitals performance monitoring, SEO analysis, and content optimization insights. Features isolated browser contexts, retry mechanisms, and comprehensive API endpoints for profe

148 lines 4.34 kB
"use strict"; /** * Structured logging implementation for AuditMySite * * Provides a clean, consistent logging interface that can be easily * configured and replaced without affecting business logic. */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultLogger = exports.SilentLogger = exports.StructuredLogger = void 0; exports.createLogger = createLogger; const chalk_1 = __importDefault(require("chalk")); const LOG_LEVELS = { debug: 0, info: 1, warn: 2, error: 3, success: 1 }; class StructuredLogger { constructor(config = {}) { this.config = { level: config.level || 'info', prefix: config.prefix || '', enableTimestamps: config.enableTimestamps ?? true, enableColors: config.enableColors ?? true }; } debug(message, data) { if (this.shouldLog('debug')) { this.log('debug', message, data); } } info(message, data) { if (this.shouldLog('info')) { this.log('info', message, data); } } warn(message, data) { if (this.shouldLog('warn')) { this.log('warn', message, data); } } error(message, error) { if (this.shouldLog('error')) { this.log('error', message, error); } } success(message, data) { if (this.shouldLog('success')) { this.log('success', message, data); } } /** * Create a child logger with additional context */ child(prefix) { return new StructuredLogger({ ...this.config, prefix: this.config.prefix ? `${this.config.prefix}:${prefix}` : prefix }); } shouldLog(level) { return LOG_LEVELS[level] >= LOG_LEVELS[this.config.level]; } log(level, message, data) { const timestamp = this.config.enableTimestamps ? `[${new Date().toISOString()}] ` : ''; const prefix = this.config.prefix ? `[${this.config.prefix}] ` : ''; const levelLabel = `[${level.toUpperCase()}]`; let formattedMessage = `${timestamp}${prefix}${levelLabel} ${message}`; if (this.config.enableColors) { formattedMessage = this.colorize(level, formattedMessage); } // Output to appropriate stream if (level === 'error') { console.error(formattedMessage); if (data && data instanceof Error) { console.error(data.stack); } else if (data) { console.error('Data:', data); } } else { console.log(formattedMessage); if (data && typeof data === 'object') { console.log('Data:', JSON.stringify(data, null, 2)); } else if (data) { console.log('Data:', data); } } } colorize(level, message) { switch (level) { case 'debug': return chalk_1.default.gray(message); case 'info': return chalk_1.default.blue(message); case 'warn': return chalk_1.default.yellow(message); case 'error': return chalk_1.default.red(message); case 'success': return chalk_1.default.green(message); default: return message; } } } exports.StructuredLogger = StructuredLogger; /** * Silent logger for testing or when logging is not needed */ class SilentLogger { debug() { } info() { } warn() { } error() { } success() { } } exports.SilentLogger = SilentLogger; /** * Default logger instance for convenience */ exports.defaultLogger = new StructuredLogger({ level: 'info', enableColors: true, enableTimestamps: false }); /** * Create a logger for a specific component */ function createLogger(component, level = 'info') { return new StructuredLogger({ level, prefix: component, enableColors: true, enableTimestamps: false }); } //# sourceMappingURL=structured-logger.js.map