import { ANSI, LogLevel, ILogger } from './index.js'; export class PrettyJsonConsoleLogger implements ILogger { public log(level: LogLevel, ...trace: string[]) { const message = JSON.stringify( { level, trace, }, null, 4, ); const styled = `${this.getStyle(level)}${message}${ANSI.RESET}\n`; this.getStream(level)(styled); } private getStream(level: LogLevel) { if (level === LogLevel.ERROR) { return console.error; } return console.log; } private getStyle(level: LogLevel) { switch (level) { case LogLevel.UNKNOWN: case LogLevel.INFO: return `${ANSI.MAGENTA}`; case LogLevel.DEBUG: return `${ANSI.CYAN}`; case LogLevel.WARN: return `${ANSI.BRIGHT_YELLOW}`; case LogLevel.ERROR: return `${ANSI.BRIGHT_RED}`; case LogLevel.SYS: return `${ANSI.DIM}${ANSI.BLUE}`; } } }