UNPKG

spectra-log

Version:

SpectraLog enables you to apply various colors to your log messages, enhancing readability and making your logs visually dynamic.

1 lines 36.1 kB
{"version":3,"sources":["../index.ts","../core/colorManager.ts","../core/colorize.ts","../util/stripAnsi.ts","../util/sleep.ts","../config/constants.ts","../util/stringWidth.ts","../core/printer.ts","../config/levelTypes.ts","../config/httpTypes.ts","../util/time.ts","../core/formatter.ts","../core/queueProcessor.ts","../util/debugLevel.ts"],"sourcesContent":["// > DIR | /index.js\n\n// --- < main controller of modern-cli-logger > ---\n\nimport colorizeString from \"./core/colorize.js\";\nimport processQueue from \"./core/queueProcessor.js\";\nimport getDebugLevel from \"./util/debugLevel.js\";\n\nimport {\n setProcessLevel,\n getProcessLevel,\n setSmoothPrint,\n setPrintSpeed,\n setDisplayStandby,\n} from \"./config/constants.js\";\nimport type { DebugLevelString } from \"./config/constants.js\";\nimport { messageQueue } from \"./config/constants.js\";\n\nexport type LogOption = {\n urgent?: boolean;\n force?: boolean;\n silent?: boolean\n};\n\nconst log = (message: any, type: number = 200, level: DebugLevelString = \"INFO\", option: LogOption = {}) => {\n const { urgent = false, force = false } = option;\n if (force === true || getProcessLevel() <= getDebugLevel(level).level) {\n message = colorizeString(message);\n if (urgent === true)\n messageQueue.unshift({ message, type, level, timestamp: Date.now() });\n else\n messageQueue.push({ message, type, level, timestamp: Date.now() });\n\n processQueue();\n }\n};\n\nlog.setDebugLevel = (level: DebugLevelString, options = { silent: false }) => {\n const { silent } = options;\n\n const temp = getDebugLevel(level);\n setProcessLevel(level);\n silentHandler(\n silent,\n `{{ bold : yellow : Debug level }} has been changed to {{ bold : ${temp.color} : ${level} }}.`\n );\n};\n\nlog.setPrintSpeed = (delay: number, option: LogOption = {}) => {\n const { silent = false } = option;\n\n setPrintSpeed(delay);\n silentHandler(\n silent,\n `{{ bold : yellow : Smooth process level }} has been set to {{ bold : green : ${delay}ms Per Character }}.`\n );\n};\n\nlog.setSmoothPrint = (value, options: LogOption = {}) => {\n const { silent = false } = options;\n\n setSmoothPrint(value);\n silentHandler(\n silent,\n `{{ bold : yellow : Smooth print }} mode has been {{ bold : ${value ? \"green : ACTIVATED\" : \"red : DEACTIVATED\"} }}.`\n );\n};\n\nlog.setDisplayStandby = (value: boolean, options = {}) => {\n setDisplayStandby(value);\n deprecationHandler(\n `{{ bold : yellow : Stand by }} mode has been {{ bold : ${value ? \"green : ACTIVATED\" : \"red : DEACTIVATED\"} }}`,\n \"setDisplayStandby()\",\n \"setDisplayStandBy()\"\n );\n processQueue();\n};\n\nlog.setDisplayStandBy = (value: boolean, options: LogOption = {}) => {\n const { silent = false } = options;\n\n setDisplayStandby(value);\n silentHandler(\n silent,\n `{{ bold : yellow : Stand by }} mode has been {{ bold : ${value ? \"green : ACTIVATED\" : \"red : DEACTIVATED\"} }}.`\n );\n};\n\nconst silentHandler = (silent: boolean = false, message: string) => {\n if (!silent) {\n log(message, 202, \"INFO\", { force: true });\n processQueue();\n }\n};\n\nconst deprecationHandler = (message: string, before: string, after: string) => {\n log(\n `${message}\\n \\n[{{ bold : red : DEPRECATION WARNING }}] {{ bold : yellow : ${before} }} is deprecated. Use {{ bold : green : ${after} }} instead.\\nIt will be removed at next Major update.\\n`\n );\n}\n\nexport default log;\n","// > DIR | /config/colorManager.ts\n\nimport colors from \"ansi-colors\";\n\ninterface ColorFunction {\n (text: string): string;\n colorCode: number;\n bold?: (text: string) => string;\n dim?: (text: string) => string;\n italic?: (text: string) => string;\n underline?: (text: string) => string;\n}\n\ninterface ExtendedColors {\n [key: string]: ColorFunction | any;\n}\n\nconst defineColor = (code: number): ColorFunction => {\n const colorFn = (text: string) => `\\u001b[38;5;${code}m${text}\\u001b[0m`;\n colorFn.colorCode = code;\n return colorFn as ColorFunction;\n};\n\nconst customColors = {\n red: defineColor(196),\n green: defineColor(82),\n blue: defineColor(33),\n brightCyan: defineColor(116),\n cyan: defineColor(51),\n muteCyan: defineColor(67),\n white: defineColor(255),\n gray: defineColor(245),\n dim: defineColor(240),\n orange: defineColor(202),\n pink: defineColor(213),\n purple: defineColor(135),\n violet: defineColor(129),\n teal: defineColor(37),\n brightYellow: defineColor(226),\n brightGreen: defineColor(118),\n brightRed: defineColor(196),\n brightBlue: defineColor(75),\n brown: defineColor(130),\n gold: defineColor(220),\n lime: defineColor(154),\n silver: defineColor(250),\n maroon: defineColor(88),\n};\n\nconst extendedColors = Object.create(colors);\nObject.assign(extendedColors, customColors);\n\nconst addStyleMethod = (\n colorFn: ColorFunction, \n styleName: string, \n styleCode: string\n): void => {\n (colorFn as any)[styleName as keyof ColorFunction] = (text: string) => {\n return `\\u001b[38;5;${colorFn.colorCode}m${styleCode}${text}\\u001b[0m`;\n };\n};\n\n// 스타일 메서드 추가\nObject.keys(customColors).forEach((color) => {\n const colorFn = extendedColors[color];\n if (typeof colorFn === \"function\" && colorFn.colorCode !== undefined) {\n addStyleMethod(colorFn as ColorFunction, \"bold\", \"\\u001b[1m\");\n addStyleMethod(colorFn as ColorFunction, \"dim\", \"\\u001b[2m\");\n addStyleMethod(colorFn as ColorFunction, \"italic\", \"\\u001b[3m\");\n addStyleMethod(colorFn as ColorFunction, \"underline\", \"\\u001b[4m\");\n }\n});\n\nexport default extendedColors;","// > DIR | /core/colorize.js\r\n\r\nimport colors from \"./colorManager.js\";\r\n\r\nconst colorizeString = (message: any): string => {\r\n let processedMessage: string;\r\n if (typeof message === 'object' && message !== null) {\r\n processedMessage = JSON.stringify(message, null, 2);\r\n } else if (message === null || message === undefined) {\r\n processedMessage = String(message);\r\n } else {\r\n processedMessage = String(message);\r\n }\r\n \r\n const regex = /\\{\\{\\s*(?:(\\w+)\\s*:\\s*)?(\\w+)\\s*:\\s*([^\\}]+?)\\s*\\}\\}/g;\r\n return processedMessage.replace(regex, (match, style, color, text) => {\r\n style = style?.toLowerCase();\r\n \r\n const trimmedText = text.replace(/^ /, '').replace(/ $/, '');\r\n \r\n const colorFn = colors[color] || colors.dim;\r\n if (style && typeof colorFn[style] === \"function\") {\r\n return colorFn[style](trimmedText);\r\n }\r\n return colorFn(trimmedText);\r\n });\r\n};\r\n\r\nexport default colorizeString;","// > DIR | /util/stripAnsi.js\r\n\r\n// --- < stripAnsi > ---\r\n\r\nconst stripAnsi = (str: string) => str.replace(/\\x1b\\[[0-9;]*m/g, \"\");\r\n\r\nexport default stripAnsi;\r\n","// > DIR | /util/sleep.js\r\n\r\n// --- < sleep 비동기 함수 > ---\r\n\r\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nexport default sleep;\r\n","// > DIR | /config/constants.ts\n\nlet smoothPrint: boolean = false;\nlet interval: number = 5;\nlet processLevel: number = 2;\n\nlet isProcessing: boolean = false;\nlet displayStandby: boolean = false;\n\nexport type DebugLevelString = \"MUTE\" | \"TRACE\" | \"DEBUG\" | \"INFO\" | \"ERROR\" | \"FATAL\" | \"NOTLVL\";\n\nconst messageQueue: {message: string, type: any, timestamp: number, level: DebugLevelString}[] = [];\n\nexport const DebugLevelOrder = {\n \"MUTE\": -1,\n \"TRACE\": 0,\n \"DEBUG\": 1,\n \"INFO\": 2,\n \"ERROR\": 3,\n \"FATAL\": 4,\n \"NOTLVL\": 5,\n}\n\nconst getIsProcessing = () => isProcessing;\nconst setIsProcessing = (value: boolean) => {\n isProcessing = value;\n};\n\nconst getSmoothPrint = () => smoothPrint;\nconst setSmoothPrint = (value: boolean) => {\n smoothPrint = value;\n};\n\nconst getProcessLevel = () => processLevel;\nconst setProcessLevel = (value: DebugLevelString) => {\n processLevel = DebugLevelOrder[value];\n};\n\nconst getPrintSpeed = () => interval;\nconst setPrintSpeed = (value: number) => {\n interval = value;\n};\n\nconst getDisplayStandby = () => displayStandby;\nconst setDisplayStandby = (value: boolean) => {\n displayStandby = value;\n};\n\nexport {\n getIsProcessing,\n setIsProcessing,\n getSmoothPrint,\n setSmoothPrint,\n getProcessLevel,\n setProcessLevel,\n getPrintSpeed,\n setPrintSpeed,\n getDisplayStandby,\n setDisplayStandby,\n messageQueue,\n};\n\nexport const _init = {\n isProcessing,\n smoothPrint,\n processLevel,\n};","// > DIR | /util/stripAnsi.js\r\n\r\n// --- < stringWidth > ---\r\n\r\nimport stripAnsi from \"./stripAnsi.js\";\r\n\r\nconst fullWidthRegex =\r\n /[\\u1100-\\u115F\\u2329\\u232A\\u2E80-\\u303E\\u3040-\\uA4CF\\uAC00-\\uD7A3\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE6F\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\u{1F300}-\\u{1F64F}]|[\\u{1F900}-\\u{1F9FF}]/u;\r\n\r\nconst stringWidth = (str: string) => {\r\n const clean = stripAnsi(str);\r\n let width = 0;\r\n\r\n for (const char of [...clean]) {\r\n width += fullWidthRegex.test(char) ? 2 : 1;\r\n }\r\n\r\n return width;\r\n};\r\n\r\nexport default stringWidth;\r\n","// > DIR | /core/printer.ts\r\n\r\nimport stripAnsi from \"../util/stripAnsi.js\";\r\nimport sleep from \"../util/sleep.js\";\r\nimport { getPrintSpeed } from \"../config/constants.js\";\r\nimport stringWidth from \"../util/stringWidth.js\";\r\n\r\nconst parseAnsiAndText = (str: string) => {\r\n const parts: { type: string, content: string }[] = [];\r\n let i = 0;\r\n let textBuffer = \"\";\r\n\r\n while (i < str.length) {\r\n const ansiMatch = str.slice(i).match(/^\\u001b\\[[0-9;]*m/);\r\n\r\n if (ansiMatch) {\r\n if (textBuffer) {\r\n parts.push({ type: \"text\", content: textBuffer });\r\n textBuffer = \"\";\r\n }\r\n\r\n parts.push({ type: \"ansi\", content: ansiMatch[0] });\r\n i += ansiMatch[0].length;\r\n } else {\r\n textBuffer += str[i];\r\n i++;\r\n }\r\n }\r\n\r\n if (textBuffer) {\r\n parts.push({ type: \"text\", content: textBuffer });\r\n }\r\n\r\n return parts;\r\n};\r\n\r\nconst splitTextIntoChunks = (text: string, maxWidth: number) => {\r\n if (!text) return [];\r\n\r\n const parts = parseAnsiAndText(text);\r\n const chunks: string[] = [];\r\n let currentChunk: string = \"\";\r\n let currentWidth: number = 0;\r\n let activeAnsiCodes: string[] = [];\r\n\r\n for (const part of parts) {\r\n if (part.type === \"ansi\") {\r\n currentChunk += part.content;\r\n\r\n // Track active codes for next chunk\r\n if (part.content === \"\\u001b[0m\") {\r\n activeAnsiCodes = [];\r\n } else {\r\n activeAnsiCodes.push(part.content);\r\n }\r\n } else {\r\n let remaining: string = part.content;\r\n\r\n while (remaining) {\r\n let fit: number = 0;\r\n let fitWidth: number = 0;\r\n\r\n for (let i = 0; i < remaining.length; i++) {\r\n const charWidth = stringWidth(remaining[i]);\r\n\r\n if (currentWidth + fitWidth + charWidth <= maxWidth) {\r\n fit++;\r\n fitWidth += charWidth;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n if (fit === 0 && currentWidth > 0) {\r\n chunks.push(currentChunk);\r\n currentChunk = activeAnsiCodes.join(\"\");\r\n currentWidth = 0;\r\n } else {\r\n const textToAdd: string = remaining.slice(0, fit || 1);\r\n currentChunk += textToAdd;\r\n currentWidth += fitWidth || stringWidth(textToAdd);\r\n remaining = remaining.slice(fit || 1);\r\n\r\n if (remaining && currentWidth > 0) {\r\n chunks.push(currentChunk);\r\n currentChunk = activeAnsiCodes.join(\"\");\r\n currentWidth = 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (currentChunk) {\r\n chunks.push(currentChunk);\r\n }\r\n\r\n return chunks;\r\n};\r\n\r\nconst printLineSmooth = async (line: string, currentPrefix: string, terminalWidth: number) => {\r\n const prefixWidth = stripAnsi(currentPrefix).length;\r\n const availWidth = terminalWidth - prefixWidth;\r\n\r\n const chunks = splitTextIntoChunks(line, availWidth);\r\n\r\n if (chunks.length === 0) {\r\n process.stdout.write(`\\r${currentPrefix}\\n`);\r\n return;\r\n }\r\n\r\n for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {\r\n const chunk = chunks[chunkIndex];\r\n const prefix = chunkIndex === 0 ? currentPrefix : \" \".repeat(36) + \" | \";\r\n\r\n process.stdout.write(`\\r${prefix}`);\r\n\r\n const parts = parseAnsiAndText(chunk);\r\n\r\n for (const part of parts) {\r\n if (part.type === \"ansi\") {\r\n process.stdout.write(part.content);\r\n } else {\r\n for (const char of part.content) {\r\n process.stdout.write(char);\r\n await sleep(getPrintSpeed());\r\n }\r\n }\r\n }\r\n\r\n process.stdout.write(\"\\n\");\r\n }\r\n};\r\n\r\nconst printSmooth = async (prefix: string, lines: string[]) => {\r\n const terminalWidth = Math.floor(process.stdout.columns * 0.9) || 80;\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n const linePrefix = i === 0 ? prefix : \" \".repeat(36) + \" | \";\r\n await printLineSmooth(lines[i], linePrefix, terminalWidth);\r\n }\r\n};\r\n\r\nexport default printSmooth;","// > DIR | /config/levelTypes.ts\r\n\r\nimport colors from \"../core/colorManager.js\";\r\n\r\nconst LEVEL_TYPES = {\r\n FATAL: { levelLabel: \"FATAL\", color: colors.red.bold },\r\n ERROR: { levelLabel: \"ERROR\", color: colors.orange.bold },\r\n INFO: { levelLabel: \"INFO\", color: colors.yellow.bold },\r\n DEBUG: { levelLabel: \"DEBUG\", color: colors.brightCyan.bold },\r\n TRACE: { levelLabel: \"TRACE\", color: colors.muteCyan.bold },\r\n\r\n default: { levelLabel: \"NOTLVL\", color: colors.red.bold },\r\n};\r\n\r\nexport default LEVEL_TYPES;\r\n","// > DIR | /config/httpTypes.ts\r\n\r\nimport colors from \"../core/colorManager.js\";\r\n\r\nconst HTTP_MESSAGE_TYPES = {\r\n 100: { httpLabel: \"CONTINUE\", color: colors.dim },\r\n 101: { httpLabel: \"SWITCHING\", color: colors.dim },\r\n\r\n 200: { httpLabel: \"OK\", color: colors.green },\r\n 201: { httpLabel: \"CREATED\", color: colors.green },\r\n 202: { httpLabel: \"ACCEPTED\", color: colors.cyan },\r\n 204: { httpLabel: \"NO-CONTENT\", color: colors.gray },\r\n\r\n 301: { httpLabel: \"MOVED\", color: colors.yellow },\r\n 302: { httpLabel: \"FOUND\", color: colors.yellow },\r\n 304: { httpLabel: \"NOT-MODIFIED\", color: colors.gray },\r\n\r\n 400: { httpLabel: \"BAD-REQUEST\", color: colors.red },\r\n 401: { httpLabel: \"UNAUTHZED\", color: colors.red },\r\n 402: { httpLabel: \"PAY-REQUEST\", color: colors.red },\r\n 403: { httpLabel: \"FORBIDDEN\", color: colors.red },\r\n 404: { httpLabel: \"NOT-FOUND\", color: colors.red },\r\n 405: { httpLabel: \"NO-METHOD\", color: colors.red },\r\n 408: { httpLabel: \"TIMEOUT\", color: colors.red },\r\n 409: { httpLabel: \"CONFLICT\", color: colors.red },\r\n 410: { httpLabel: \"GONE\", color: colors.red },\r\n 429: { httpLabel: \"TOO-MANY\", color: colors.red },\r\n\r\n 500: { httpLabel: \"SERVER-ERROR\", color: colors.red },\r\n 502: { httpLabel: \"BAD-GATEWAY\", color: colors.red },\r\n 503: { httpLabel: \"SERVER-NAVAL\", color: colors.red },\r\n 504: { httpLabel: \"GW-TIMEOUT\", color: colors.red },\r\n\r\n 600: { httpLabel: \"SERVER-START\", color: colors.yellow },\r\n\r\n default: { httpLabel: \"UNKNOWN\", color: colors.dim },\r\n};\r\n\r\nexport default HTTP_MESSAGE_TYPES;\r\n","// > DIR | /util/time.js\r\n\r\n// --- < Time formatter > ---\r\n\r\nconst getFormattedTime = (timestamp: number): string => {\r\n const time = new Date(timestamp);\r\n return `${String(time.getHours()).padStart(2, \"0\")}:${String(\r\n time.getMinutes()\r\n ).padStart(2, \"0\")}:${String(time.getSeconds()).padStart(2, \"0\")}`;\r\n};\r\n\r\nexport default getFormattedTime;\r\n","// > DIR | /core/formatter.ts\r\n\r\nimport LEVEL_TYPES from \"../config/levelTypes.js\";\r\nimport HTTP_MESSAGE_TYPES from \"../config/httpTypes.js\";\r\nimport getFormattedTime from \"../util/time.js\";\r\nimport stripAnsi from \"../util/stripAnsi.js\";\r\nimport stringWidth from \"../util/stringWidth.js\";\r\n\r\nexport type LevelKey = keyof typeof LEVEL_TYPES;\r\nexport type HttpTypeKey = keyof typeof HTTP_MESSAGE_TYPES;\r\n\r\nconst getPrefix = (type: HttpTypeKey, level: LevelKey, timestamp: number) => {\r\n const { levelLabel, color: levelColor } = LEVEL_TYPES[level] || LEVEL_TYPES.default;\r\n const { httpLabel, color: typeColor } = HTTP_MESSAGE_TYPES[type] || HTTP_MESSAGE_TYPES.default;\r\n\r\n const shortLabel = levelLabel.substring(0, 2);\r\n const fullLabel = shortLabel + levelLabel.substring(2);\r\n\r\n return `[ ${levelColor(fullLabel.padEnd(6))} | ${typeColor(\r\n httpLabel.padEnd(12)\r\n )} | ${getFormattedTime(timestamp)} ] | `;\r\n};\r\n\r\nconst formatMultiline = (\r\n lines,\r\n prefix,\r\n maxWidth = Math.floor(process.stdout.columns * 0.9) || 80\r\n) => {\r\n const visualPrefixLength = stripAnsi(prefix).length;\r\n const linePad = \" \".repeat(36) + \" | \";\r\n const formatted: string[] = [];\r\n\r\n lines.forEach((line, i) => {\r\n const availWidth =\r\n maxWidth - (i === 0 ? visualPrefixLength : stripAnsi(linePad).length);\r\n\r\n if (!line) {\r\n formatted.push(`${i === 0 ? prefix : linePad}`);\r\n return;\r\n }\r\n const ansiLength = line.length - stripAnsi(line).length;\r\n let chunks = splitIntoVisualChunks(line, availWidth + ansiLength);\r\n\r\n if (chunks.length === 0) {\r\n chunks = [line];\r\n }\r\n\r\n chunks.forEach((chunk, chunkIndex) => {\r\n const linePrefix = i === 0 && chunkIndex === 0 ? prefix : linePad;\r\n formatted.push(`${linePrefix}${chunk}`);\r\n });\r\n });\r\n\r\n return formatted.join(\"\\n\");\r\n};\r\n\r\nconst splitIntoVisualChunks = (text: string, maxWidth: number): string[] => {\r\n if (!text) return [];\r\n\r\n const ansiCodesMap = new Map();\r\n const visibleText = stripAnsi(text);\r\n\r\n let originalIndex: number = 0;\r\n let strippedIndex: number = 0;\r\n let activeAnsiCodes: string[] = [];\r\n\r\n while (originalIndex < text.length) {\r\n const ansiMatch = text.slice(originalIndex).match(/^\\x1B\\[[0-9;]*m/);\r\n\r\n if (ansiMatch) {\r\n const ansiCode = ansiMatch[0];\r\n\r\n if (!ansiCodesMap.has(strippedIndex)) {\r\n ansiCodesMap.set(strippedIndex, []);\r\n }\r\n ansiCodesMap.get(strippedIndex).push(ansiCode);\r\n\r\n if (ansiCode === \"\\u001b[0m\") {\r\n activeAnsiCodes = [];\r\n } else {\r\n activeAnsiCodes.push(ansiCode);\r\n }\r\n\r\n originalIndex += ansiCode.length;\r\n } else {\r\n originalIndex++;\r\n strippedIndex++;\r\n }\r\n }\r\n\r\n const chunks: string[] = [];\r\n let start: number = 0;\r\n\r\n while (start < visibleText.length) {\r\n let visibleWidth = 0;\r\n let end = start;\r\n\r\n while (end < visibleText.length && visibleWidth < maxWidth) {\r\n const charWidth = stringWidth(visibleText[end]);\r\n if (visibleWidth + charWidth <= maxWidth) {\r\n visibleWidth += charWidth;\r\n end++;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n if (end === start && start < visibleText.length) {\r\n end = start + 1;\r\n }\r\n\r\n let chunk: string = \"\";\r\n let activeCodesForNextChunk: string[] = [];\r\n\r\n for (let i = start; i <= end; i++) {\r\n if (ansiCodesMap.has(i)) {\r\n const codes = ansiCodesMap.get(i);\r\n for (const code of codes) {\r\n chunk += code;\r\n\r\n if (code === \"\\u001b[0m\") {\r\n activeCodesForNextChunk = [];\r\n } else {\r\n activeCodesForNextChunk.push(code);\r\n }\r\n }\r\n }\r\n\r\n if (i < end && i < visibleText.length) {\r\n chunk += visibleText[i];\r\n }\r\n }\r\n\r\n chunks.push(chunk);\r\n start = end;\r\n\r\n activeAnsiCodes = [...activeCodesForNextChunk];\r\n }\r\n\r\n if (chunks.length === 0 && text) {\r\n chunks.push(text);\r\n }\r\n\r\n return chunks;\r\n};\r\n\r\nexport { getPrefix, getFormattedTime, formatMultiline, splitIntoVisualChunks };","// > DIR | /core/queueProcessor.js\n\nimport printSmooth from \"./printer.js\";\nimport { getPrefix, formatMultiline } from \"./formatter.js\";\nimport type { HttpTypeKey, LevelKey } from \"./formatter.js\";\n\nimport {\n getProcessLevel,\n getSmoothPrint,\n getIsProcessing,\n setIsProcessing,\n getDisplayStandby,\n messageQueue,\n} from \"../config/constants.js\";\n\nimport colors from \"./colorManager.js\";\nimport getFormattedTime from \"../util/time.js\";\nimport sleep from \"../util/sleep.js\";\n\nlet isStandbyActive = false;\n\nconst printMessage = async (message: string, type: HttpTypeKey, level: LevelKey, timestamp: number) => {\n const prefix = getPrefix(type, level, timestamp);\n const str =\n typeof message === \"object\"\n ? JSON.stringify(message, null, 2) || \"[Unserializable Object]\"\n : String(message);\n const lines = str.split(\"\\n\");\n\n if (getSmoothPrint() && lines.length > 0) {\n await printSmooth(prefix, lines);\n } else {\n process.stdout.write(`\\r${formatMultiline(lines, prefix)}\\n`);\n }\n};\n\nconst processQueue = async () => {\n if (getIsProcessing() || messageQueue.length === 0) return;\n stopStandbyLog();\n setIsProcessing(true);\n\n const item = messageQueue.shift();\n if (!item || typeof item !== \"object\" || item === null) {\n setIsProcessing(false);\n if (messageQueue.length === 0) {\n startStandbyLog();\n } else {\n processQueue();\n }\n return;\n }\n const { message, type, level, timestamp } = item as {\n message?: any;\n type?: any;\n level?: any;\n timestamp?: any;\n };\n await printMessage(message, type, level, timestamp);\n\n setIsProcessing(false);\n if (messageQueue.length === 0) {\n startStandbyLog();\n } else {\n processQueue();\n }\n};\n\nconst startStandbyLog = () => {\n if (!getDisplayStandby() || isStandbyActive) return;\n isStandbyActive = true;\n\n (async function standbyLoop() {\n while (isStandbyActive) {\n const prefix = getPrefix(\"default\", \"INFO\", Date.now()).replace(\n /\\[.*?\\]/,\n `[ ${colors.yellow.bold(\"STBY\")} | - | ${getFormattedTime(\n Date.now()\n )} ]`\n );\n process.stdout.write(`\\r${prefix}`);\n await sleep(1000);\n }\n })();\n};\n\nconst stopStandbyLog = () => {\n isStandbyActive = false;\n};\n\nexport default processQueue;\n","// > DIR | /util/debugLevel.js\n\n// --- < Debug level > ---\n\nconst getDebugLevel = (levelLabel: string) => {\n switch (levelLabel) {\n case \"MUTE\":\n return { level: -1, color: \"dim\" };\n case \"TRACE\":\n return { level: 0, color: \"muteCyan\" };\n case \"DEBUG\":\n return { level: 1, color: \"brightCyan\" };\n case \"INFO\":\n return { level: 2, color: \"yellow\" };\n case \"ERROR\":\n return { level: 3, color: \"orange\" };\n case \"FATAL\":\n return { level: 4, color: \"red\" };\n default:\n return { level: 5, color: \"dim\" };\n }\n};\n\nexport default getDebugLevel;"],"mappings":"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","names":["colors"]}