@oxog/port-terminator
Version:
Cross-platform utility to terminate processes on ports with zero dependencies
103 lines • 3.06 kB
JavaScript
;
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