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

225 lines 7.54 kB
"use strict"; /** * Central Logger for AuditMySite * * Provides structured logging with different levels: * - ERROR: Critical errors that need immediate attention * - WARN: Warnings and fallbacks that indicate potential issues * - INFO: General information about the audit process * - SUCCESS: Successful completion of operations * - DEBUG: Detailed debugging information (only in verbose mode) * * Features: * - Clean, consistent output formatting * - Configurable verbosity levels * - Progress tracking without progress bars * - Structured fallback reporting */ Object.defineProperty(exports, "__esModule", { value: true }); exports.log = exports.logger = exports.Logger = exports.LogLevel = void 0; var LogLevel; (function (LogLevel) { LogLevel[LogLevel["ERROR"] = 0] = "ERROR"; LogLevel[LogLevel["WARN"] = 1] = "WARN"; LogLevel[LogLevel["INFO"] = 2] = "INFO"; LogLevel[LogLevel["SUCCESS"] = 3] = "SUCCESS"; LogLevel[LogLevel["DEBUG"] = 4] = "DEBUG"; })(LogLevel || (exports.LogLevel = LogLevel = {})); class Logger { constructor(options = {}) { this.progress = null; this.options = { level: LogLevel.INFO, verbose: false, enableColors: true, ...options }; } /** * Set the verbosity level */ setVerbose(verbose) { this.options.verbose = verbose; this.options.level = verbose ? LogLevel.DEBUG : LogLevel.INFO; } /** * Log an error (always shown) */ error(message, details) { this.log(LogLevel.ERROR, '❌', message, details); } /** * Log a warning (always shown) */ warn(message, details) { this.log(LogLevel.WARN, '⚠️', message, details); } /** * Log a fallback warning (always shown, special formatting) */ fallback(component, reason, alternative, details) { const message = `FALLBACK: ${component} - ${reason}, ${alternative}`; this.log(LogLevel.WARN, '⚠️', message, details); } /** * Log general information */ info(message, details) { if (this.shouldLog(LogLevel.INFO)) { this.log(LogLevel.INFO, 'ℹ️', message, details); } } /** * Log success messages */ success(message, details) { if (this.shouldLog(LogLevel.SUCCESS)) { this.log(LogLevel.SUCCESS, '✅', message, details); } } /** * Log debug information (only in verbose mode) */ debug(message, details) { if (this.shouldLog(LogLevel.DEBUG)) { this.log(LogLevel.DEBUG, '🔧', message, details); } } /** * Start progress tracking */ startProgress(total, description) { this.progress = { total, completed: 0, failed: 0, startTime: new Date() }; if (description) { this.info(`Starting ${description} (${total} items)`); } } /** * Update progress (replaces progress bars) */ updateProgress(completed, failed = 0, current) { if (!this.progress) return; this.progress.completed = completed; this.progress.failed = failed; this.progress.current = current; // Only show progress updates in verbose mode or at significant intervals const total = this.progress.total; const percentage = Math.round((completed / total) * 100); if (this.options.verbose || percentage % 25 === 0) { const status = failed > 0 ? ` (${failed} failed)` : ''; this.info(`Progress: ${completed}/${total} (${percentage}%)${status}`); } } /** * Complete progress tracking */ completeProgress() { if (!this.progress) return; const { completed, failed, total, startTime } = this.progress; const duration = Date.now() - startTime.getTime(); const seconds = Math.round(duration / 1000); if (failed > 0) { this.warn(`Completed ${completed}/${total} items in ${seconds}s (${failed} failed)`); } else { this.success(`Completed all ${completed} items in ${seconds}s`); } this.progress = null; } /** * Log a section header */ section(title) { if (this.shouldLog(LogLevel.INFO)) { console.log(`\n🔍 ${title}`); } } /** * Log analysis results summary */ results(stats) { console.log('\n📊 Results:'); console.log(` 📄 Tested: ${stats.tested} pages`); console.log(` ✅ Passed: ${stats.passed}`); console.log(` ❌ Failed: ${stats.failed}`); console.log(` ⚠️ Errors: ${stats.errors}`); console.log(` ⚠️ Warnings: ${stats.warnings}`); console.log(` 🎯 Success Rate: ${stats.successRate.toFixed(1)}%`); } /** * Log configuration information */ config(config) { if (this.shouldLog(LogLevel.INFO)) { console.log('\n📋 Configuration:'); Object.entries(config).forEach(([key, value]) => { console.log(` 📄 ${key}: ${value}`); }); } } /** * Log generated files */ files(files) { console.log('\n📁 Generated reports:'); files.forEach(file => { console.log(` 📄 ${file}`); }); } /** * Core logging method */ log(level, icon, message, details) { const prefix = this.options.prefix ? `[${this.options.prefix}] ` : ''; // Format message based on level let formattedMessage = `${icon} ${prefix}${message}`; console.log(formattedMessage); // Log details in verbose mode if (details && this.options.verbose) { console.log(' Details:', details); } } /** * Check if we should log at this level */ shouldLog(level) { return level <= this.options.level; } /** * Create a child logger with a prefix */ child(prefix) { return new Logger({ ...this.options, prefix: this.options.prefix ? `${this.options.prefix}:${prefix}` : prefix }); } } exports.Logger = Logger; // Global logger instance exports.logger = new Logger(); // Convenience functions for common use cases exports.log = { error: (message, details) => exports.logger.error(message, details), warn: (message, details) => exports.logger.warn(message, details), fallback: (component, reason, alternative, details) => exports.logger.fallback(component, reason, alternative, details), info: (message, details) => exports.logger.info(message, details), success: (message, details) => exports.logger.success(message, details), debug: (message, details) => exports.logger.debug(message, details), section: (title) => exports.logger.section(title), results: (stats) => exports.logger.results(stats), config: (config) => exports.logger.config(config), files: (files) => exports.logger.files(files), setVerbose: (verbose) => exports.logger.setVerbose(verbose), startProgress: (total, description) => exports.logger.startProgress(total, description), updateProgress: (completed, failed, current) => exports.logger.updateProgress(completed, failed, current), completeProgress: () => exports.logger.completeProgress() }; //# sourceMappingURL=logger.js.map