@razen-core/zenweb
Version:
A minimalist TypeScript framework for building reactive web applications with no virtual DOM
89 lines • 2.68 kB
JavaScript
/**
* ZenWeb Professional Logger
* Clean, minimal logging without emojis
*/
export var LogLevel;
(function (LogLevel) {
LogLevel["INFO"] = "INFO";
LogLevel["SUCCESS"] = "SUCCESS";
LogLevel["WARNING"] = "WARNING";
LogLevel["ERROR"] = "ERROR";
LogLevel["DEBUG"] = "DEBUG";
})(LogLevel || (LogLevel = {}));
const colors = {
reset: '\x1b[0m',
bright: '\x1b[1m',
dim: '\x1b[2m',
// Foreground colors
black: '\x1b[30m',
red: '\x1b[31m',
green: '\x1b[32m',
yellow: '\x1b[33m',
blue: '\x1b[34m',
magenta: '\x1b[35m',
cyan: '\x1b[36m',
white: '\x1b[37m',
gray: '\x1b[90m',
};
class Logger {
constructor(useColors = true) {
this.useColors = useColors && process.stdout.isTTY;
this.debugEnabled = process.env.DEBUG === 'true' || process.argv.includes('--debug');
}
formatMessage(level, message) {
const timestamp = new Date().toISOString().split('T')[1].split('.')[0];
if (!this.useColors) {
return `[${timestamp}] [${level}] ${message}`;
}
let color = colors.white;
switch (level) {
case LogLevel.SUCCESS:
color = colors.green;
break;
case LogLevel.WARNING:
color = colors.yellow;
break;
case LogLevel.ERROR:
color = colors.red;
break;
case LogLevel.INFO:
color = colors.cyan;
break;
case LogLevel.DEBUG:
color = colors.gray;
break;
}
return `${colors.dim}[${timestamp}]${colors.reset} ${color}[${level}]${colors.reset} ${message}`;
}
info(message) {
console.log(this.formatMessage(LogLevel.INFO, message));
}
success(message) {
console.log(this.formatMessage(LogLevel.SUCCESS, message));
}
warning(message) {
console.warn(this.formatMessage(LogLevel.WARNING, message));
}
error(message, error) {
console.error(this.formatMessage(LogLevel.ERROR, message));
if (error && error.stack) {
console.error(colors.dim + error.stack + colors.reset);
}
}
debug(message) {
if (this.debugEnabled) {
console.log(this.formatMessage(LogLevel.DEBUG, message));
}
}
setDebug(enabled) {
this.debugEnabled = enabled;
}
section(title) {
console.log('\n' + colors.bright + title + colors.reset);
}
divider() {
console.log(colors.dim + '─'.repeat(60) + colors.reset);
}
}
export const logger = new Logger();
//# sourceMappingURL=logger.js.map