UNPKG

@razen-core/zenweb

Version:

A minimalist TypeScript framework for building reactive web applications with no virtual DOM

89 lines 2.68 kB
/** * 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