wuchale
Version:
Protobuf-like i18n from plain code
43 lines (42 loc) • 1.13 kB
JavaScript
const colors = {
red: 31,
green: 32,
yellow: 33,
magenta: 35,
cyan: 36,
grey: 90,
reset: 0,
};
const encode = (code) => `\x1b[${code}m`;
const colorFuncsEntries = Object.entries(colors).map(([col, code]) => [
col,
(msg) => `${encode(code)}${msg}${encode(colors.reset)}`,
]);
export const color = Object.fromEntries(colorFuncsEntries);
const logSeverity = {
verbose: 0,
info: 1,
warn: 2,
error: 3,
};
export class Logger {
#logSeverity;
constructor(logLevel) {
this.#logSeverity = logSeverity[logLevel];
}
checkLevel = (level) => logSeverity[level] >= this.#logSeverity;
#show = (message, level) => {
if (!this.checkLevel(level)) {
return;
}
let func = console.log;
if (level !== 'verbose') {
func = console[level];
}
func(message);
};
info = (msg) => this.#show(color.cyan(msg), 'info');
warn = (msg) => this.#show(color.yellow(msg), 'warn');
error = (msg) => this.#show(color.red(msg), 'error');
verbose = (msg) => this.#show(color.grey(msg), 'verbose');
}