UNPKG

@oxog/port-terminator

Version:

Cross-platform utility to terminate processes on ports with zero dependencies

103 lines 3.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultLogger = exports.Logger = void 0; const colors = { reset: '\x1b[0m', bright: '\x1b[1m', dim: '\x1b[2m', red: '\x1b[31m', green: '\x1b[32m', yellow: '\x1b[33m', blue: '\x1b[34m', magenta: '\x1b[35m', cyan: '\x1b[36m', white: '\x1b[37m', }; const logLevels = { error: 0, warn: 1, info: 2, debug: 3, }; class Logger { constructor(level = 'info', silent = false) { this.level = 'info'; this.silent = false; this.level = level; this.silent = silent; } setLevel(level) { this.level = level; } setSilent(silent) { this.silent = silent; } error(message, ...args) { this.log('error', colors.red, message, ...args); } warn(message, ...args) { this.log('warn', colors.yellow, message, ...args); } info(message, ...args) { this.log('info', colors.blue, message, ...args); } debug(message, ...args) { this.log('debug', colors.dim, message, ...args); } log(level, color, message, ...args) { if (this.silent || logLevels[level] > logLevels[this.level]) { return; } const timestamp = new Date().toISOString(); const levelStr = level.toUpperCase().padEnd(5); const coloredLevel = `${color}${levelStr}${colors.reset}`; const formattedMessage = this.formatMessage(message, args); const output = `[${timestamp}] ${coloredLevel} ${formattedMessage}`; if (level === 'error') { console.error(output); } else { console.log(output); } } formatMessage(message, args) { return message.replace(/%./g, (match) => { switch (match) { case '%%': return '%'; case '%s': case '%d': case '%j': case '%o': { if (args.length === 0) return match; const arg = args.shift(); switch (match) { case '%s': return String(arg); case '%d': return Number(arg).toString(); case '%j': case '%o': try { return JSON.stringify(arg); } catch { return '[Circular]'; } } /* istanbul ignore next */ return match; } default: return match; } }); } static create(level, silent) { return new Logger(level, silent); } } exports.Logger = Logger; exports.defaultLogger = new Logger(); //# sourceMappingURL=logger.js.map