UNPKG

@dkoul/auto-testid-core

Version:

Core AST parsing and transformation logic for React and Vue.js attribute generation

203 lines 6.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.log = exports.logger = exports.Logger = void 0; class Logger { constructor(prefix, options = {}) { this.LOG_LEVELS = { error: 0, warn: 1, info: 2, debug: 3, verbose: 4, }; this.COLORS = { error: '\x1b[31m', // Red warn: '\x1b[33m', // Yellow info: '\x1b[36m', // Cyan debug: '\x1b[35m', // Magenta verbose: '\x1b[37m', // White reset: '\x1b[0m', // Reset dim: '\x1b[2m', // Dim bold: '\x1b[1m', // Bold }; this.options = { level: options.level || Logger.globalLevel, prefix: options.prefix || prefix || 'AutoTestID', timestamp: options.timestamp ?? true, colorize: options.colorize ?? true, }; } static setGlobalLevel(level) { Logger.globalLevel = level; } static getGlobalLevel() { return Logger.globalLevel; } error(message, ...args) { this.log('error', message, ...args); } warn(message, ...args) { this.log('warn', message, ...args); } info(message, ...args) { this.log('info', message, ...args); } debug(message, ...args) { this.log('debug', message, ...args); } verbose(message, ...args) { this.log('verbose', message, ...args); } time(label) { console.time(`${this.options.prefix}:${label}`); } timeEnd(label) { console.timeEnd(`${this.options.prefix}:${label}`); } group(label) { if (this.shouldLog('info')) { console.group(this.formatMessage('info', label)); } } groupEnd() { if (this.shouldLog('info')) { console.groupEnd(); } } table(data) { if (this.shouldLog('info')) { console.table(data); } } log(level, message, ...args) { if (!this.shouldLog(level)) { return; } const formattedMessage = this.formatMessage(level, message); const logMethod = this.getLogMethod(level); if (args.length > 0) { logMethod(formattedMessage, ...args); } else { logMethod(formattedMessage); } } shouldLog(level) { return this.LOG_LEVELS[level] <= this.LOG_LEVELS[this.options.level]; } formatMessage(level, message) { let formatted = ''; // Add timestamp if (this.options.timestamp) { const timestamp = new Date().toISOString(); formatted += this.options.colorize ? `${this.COLORS.dim}${timestamp}${this.COLORS.reset} ` : `${timestamp} `; } // Add level indicator const levelIndicator = `[${level.toUpperCase()}]`; if (this.options.colorize) { const color = this.COLORS[level]; formatted += `${color}${this.COLORS.bold}${levelIndicator}${this.COLORS.reset} `; } else { formatted += `${levelIndicator} `; } // Add prefix if (this.options.prefix) { if (this.options.colorize) { formatted += `${this.COLORS.dim}${this.options.prefix}:${this.COLORS.reset} `; } else { formatted += `${this.options.prefix}: `; } } // Add message formatted += message; return formatted; } getLogMethod(level) { switch (level) { case 'error': return console.error; case 'warn': return console.warn; case 'info': return console.info; case 'debug': case 'verbose': return console.log; default: return console.log; } } // Create child logger with additional prefix child(prefix, options) { const childPrefix = `${this.options.prefix}:${prefix}`; return new Logger(childPrefix, { ...this.options, ...options }); } // Progress logging utilities progress(current, total, message) { const percentage = Math.round((current / total) * 100); const progressBar = this.createProgressBar(percentage); const progressMessage = message ? `${progressBar} ${percentage}% ${message}` : `${progressBar} ${percentage}% (${current}/${total})`; if (this.shouldLog('info')) { // Use process.stdout.write to overwrite the same line process.stdout.write(`\r${this.formatMessage('info', progressMessage)}`); // Add newline when complete if (current === total) { process.stdout.write('\n'); } } } createProgressBar(percentage, length = 20) { const filled = Math.round((percentage / 100) * length); const empty = length - filled; if (this.options.colorize) { return `${this.COLORS.dim}[${'█'.repeat(filled)}${'░'.repeat(empty)}]${this.COLORS.reset}`; } else { return `[${'#'.repeat(filled)}${'-'.repeat(empty)}]`; } } // Metrics and performance logging metrics(label, metrics) { if (!this.shouldLog('info')) return; this.info(`${label} Metrics:`); Object.entries(metrics).forEach(([key, value]) => { const formattedValue = typeof value === 'number' ? value.toLocaleString() : value; this.info(` ${key}: ${formattedValue}`); }); } // Error logging with stack traces exception(error, context) { if (error instanceof Error) { this.error(`${context ? context + ': ' : ''}${error.message}`); if (error.stack && this.shouldLog('debug')) { this.debug('Stack trace:', error.stack); } } else { this.error(`${context ? context + ': ' : ''}${String(error)}`); } } } exports.Logger = Logger; Logger.globalLevel = 'info'; // Default logger instance exports.logger = new Logger(); // Convenience functions for global logging exports.log = { error: (message, ...args) => exports.logger.error(message, ...args), warn: (message, ...args) => exports.logger.warn(message, ...args), info: (message, ...args) => exports.logger.info(message, ...args), debug: (message, ...args) => exports.logger.debug(message, ...args), verbose: (message, ...args) => exports.logger.verbose(message, ...args), setLevel: (level) => Logger.setGlobalLevel(level), }; //# sourceMappingURL=logger.js.map