@typecad/jlcpcb-parts
Version:
Intelligent fuzzy search for JLCPCB electrical components with CLI interface
145 lines • 4.41 kB
JavaScript
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