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
JavaScript
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));
}
}