UNPKG

c4dslbuilder

Version:

A CLI tool designed to compile a folder structure of markdowns and mermaid files into a site, pdf, single file markdown or a collection of markdowns with links - inspired by c4builder

72 lines (71 loc) 2.12 kB
import chalk from 'chalk'; const logLevelPriority = { debug: 0, info: 1, warn: 2, error: 3, log: 4, }; export class CliLogger { _tag; _level; /* c8 ignore next -- @preserve -- not explicitly testing the LOG_LEVEL env var */ constructor(tag, level = process.env.LOG_LEVEL ?? 'log') { this._tag = tag; this._level = level; } getTimestamp() { return new Date().toISOString(); } colour(level, message) { switch (level) { case 'debug': return chalk.gray(message); case 'info': return chalk.white(message); case 'warn': return chalk.yellow(message); case 'error': return chalk.red(message); default: return message; } } formatMessage(level, message, error = null) { const timestamp = this.getTimestamp(); let baseMessage = message; if (level != 'log') { baseMessage = `[${timestamp}] [${level.toUpperCase()}] {${this._tag}} : ${message}`; } if (level === 'error' && error instanceof Error) { baseMessage += `\n\n${error.message}`; } return this.colour(level, baseMessage); } write(message) { process.stdout.write(message + '\n'); } debug(msg) { if (logLevelPriority[this._level] <= logLevelPriority['debug']) { this.write(this.formatMessage('debug', msg)); } } info(msg) { if (logLevelPriority[this._level] <= logLevelPriority['info']) { this.write(this.formatMessage('info', msg)); } } warn(msg) { if (logLevelPriority[this._level] <= logLevelPriority['warn']) { this.write(this.formatMessage('warn', msg)); } } error(msg, error = null) { if (logLevelPriority[this._level] <= logLevelPriority['error']) { this.write(this.formatMessage('error', msg, error)); } } log(msg) { this.write(this.formatMessage('log', msg)); } }