const formatMap = { labels: { main: { start: "\x1b[1m\x1b[32m", end: "\x1b[0m", }, }, logTypes: { error: { start: "\x1b[31m", end: "\x1b[0m", }, warn: { start: "\x1b[33m", end: "\x1b[0m", }, info: { start: "\x1b[32m", end: "\x1b[0m", }, debug: { start: "\x1b[34m", end: "\x1b[0m", }, }, } function messageStart(label, logType) { const labelFormatting = formatMap.labels?.[label]?.start || `[${label}] ` const logTypeFormatting = `${formatMap.logTypes?.[logType]?.start || ""}[${logType}] ` return `${logTypeFormatting}${labelFormatting}` } function messageEnd(label, logType) { const labelFormatting = formatMap.labels?.[label]?.end || "" const logTypeFormatting = formatMap.logTypes?.[logType]?.end || "" return `${logTypeFormatting}${labelFormatting}` } function logMessage(logType, label) { const log = console[logType] const startStr = messageStart(label, logType) const endStr = messageEnd(label, logType) return (message) => { log(`${startStr}${message}${endStr}`) } } function noop() { } export function getLogger(logLevel = "info", name) { const label = name || "genid" switch(logLevel) { case 6: case "trace": return { group: console.group, groupEnd: console.groupEnd, trace: console.trace, debug: logMessage("debug", label), info: logMessage("info", label), warn: logMessage("warn", label), error: logMessage("error", label), } case "debug": return { group: console.group, groupEnd: console.groupEnd, trace: noop, debug: logMessage("debug", label), info: logMessage("info", label), warn: logMessage("warn", label), error: logMessage("error", label), } case 4: case "info": return { group: console.group, groupEnd: console.groupEnd, trace: noop, debug: noop, info: logMessage("info", label), warn: logMessage("warn", label), error: logMessage("error", label), } case 3: case "warn": return { group: console.group, groupEnd: console.groupEnd, trace: noop, debug: noop, info: noop, warn: logMessage("warn", label), error: logMessage("error", label), } case 2: case "error": return { group: console.group, groupEnd: console.groupEnd, trace: noop, debug: noop, info: noop, warn: noop, error: logMessage("error", label), } case 1: case "silent": return { group: noop, groupEnd: noop, trace: noop, debug: noop, info: noop, warn: noop, error: noop, } default: return { group: console.group, groupEnd: console.groupEnd, trace: noop, debug: noop, info: logMessage("info", label), warn: logMessage("warn", label), error: logMessage("error", label), } } }