UNPKG

@typecad/jlcpcb-parts

Version:

Intelligent fuzzy search for JLCPCB electrical components with CLI interface

145 lines 4.41 kB
import chalk from 'chalk'; /** * Log levels for the Logger */ export var LogLevel; (function (LogLevel) { LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG"; LogLevel[LogLevel["INFO"] = 1] = "INFO"; LogLevel[LogLevel["WARN"] = 2] = "WARN"; LogLevel[LogLevel["ERROR"] = 3] = "ERROR"; LogLevel[LogLevel["NONE"] = 4] = "NONE"; })(LogLevel || (LogLevel = {})); /** * Logger class for debugging and monitoring */ export class Logger { static instance; options; /** * Creates a new Logger instance with sensible defaults * @param options - Configuration options for the Logger */ constructor(options = {}) { this.options = { consoleLevel: options.consoleLevel ?? LogLevel.INFO, includeTimestamps: options.includeTimestamps ?? true }; } /** * Gets the Logger instance (singleton) * @param options - Configuration options for the Logger (only used on first call) * @returns The Logger instance */ static getInstance(options = {}) { if (!Logger.instance) { Logger.instance = new Logger(options); } return Logger.instance; } /** * Logs a debug message * @param message - Message to log * @param data - Additional data to log */ debug(message, data) { this.log(LogLevel.DEBUG, message, data); } /** * Logs an info message * @param message - Message to log * @param data - Additional data to log */ info(message, data) { this.log(LogLevel.INFO, message, data); } /** * Logs a warning message * @param message - Message to log * @param data - Additional data to log */ warn(message, data) { this.log(LogLevel.WARN, message, data); } /** * Logs an error message * @param message - Message to log * @param error - Error to log */ error(message, error) { let errorData; if (error instanceof Error) { errorData = { name: error.name, message: error.message, stack: error.stack }; } else if (error !== undefined) { errorData = error; } this.log(LogLevel.ERROR, message, errorData); } /** * Logs a message with the specified level * @param level - Log level * @param message - Message to log * @param data - Additional data to log */ log(level, message, data) { // Skip if log level is too low if (level < this.options.consoleLevel) { return; } // Format the log message const timestamp = this.options.includeTimestamps ? new Date().toISOString() : ''; const levelString = LogLevel[level]; // Format the log message for console let consoleMessage = ''; if (this.options.includeTimestamps) { consoleMessage += `[${timestamp}] `; } // Add level with color switch (level) { case LogLevel.DEBUG: consoleMessage += chalk.gray(`[${levelString}] `); break; case LogLevel.INFO: consoleMessage += chalk.blue(`[${levelString}] `); break; case LogLevel.WARN: consoleMessage += chalk.yellow(`[${levelString}] `); break; case LogLevel.ERROR: consoleMessage += chalk.red(`[${levelString}] `); break; } // Add message consoleMessage += message; // Add data if provided if (data !== undefined) { if (typeof data === 'object') { consoleMessage += '\n' + JSON.stringify(data, null, 2); } else { consoleMessage += ' ' + String(data); } } // Log to console switch (level) { case LogLevel.DEBUG: console.debug(consoleMessage); break; case LogLevel.INFO: console.info(consoleMessage); break; case LogLevel.WARN: console.warn(consoleMessage); break; case LogLevel.ERROR: console.error(consoleMessage); break; } } } //# sourceMappingURL=Logger.js.map