{"version":3,"sources":["../../src/index.ts","../../src/_helpers/zeroPad.ts","../../src/logger.ts","../../src/_helpers/mergeLogs.ts"],"sourcesContent":["export {createLogger, ILogger, ILogItem, IMessage, IMessageMeta} from './logger';\r\nexport {mergeLogs} from './_helpers/mergeLogs';\r\n","export const zeroPad = (x: number, len = 2): string => {\r\n    return String(x).padStart(len, '0');\r\n};\r\n","import {zeroPad} from './_helpers/zeroPad';\r\n\r\nexport interface ILogItem {\r\n    timestamp: number;\r\n    message: string;\r\n}\r\n\r\nexport interface IMessage<Payload = unknown> {\r\n    id?: string | number;\r\n    payload: Payload;\r\n    clientMsgId: string;\r\n}\r\n\r\nexport interface IMessageMeta {\r\n    prefix?: string;\r\n    prefixColor?: string;\r\n    messageName?: string;\r\n}\r\n\r\nexport interface ILogger<Message extends IMessage> {\r\n    enable: () => void;\r\n    disable: () => void;\r\n    getLogs: () => ILogItem[];\r\n    info: (text: string, ...causes: unknown[]) => void;\r\n    error: (text: string, ...causes: unknown[]) => void;\r\n    warn: (text: string, ...causes: unknown[]) => void;\r\n    request: (item: Message, meta?: IMessageMeta) => void;\r\n    response: (item: Message, meta?: IMessageMeta) => void;\r\n    event: (item: Message, meta?: IMessageMeta) => void;\r\n}\r\n\r\nconst defaultExpirationTime = 10 * 60 * 1000; // 10 minutes\r\n\r\nconst messageFontColor = 'rgb(50, 57, 65)';\r\n\r\nexport const createLogger = <Message extends IMessage>(\r\n    isEnabled: boolean, isRestricted?: (id: string | number) => boolean,\r\n): ILogger<Message> => {\r\n    let enabled = isEnabled;\r\n\r\n    const originalConsoleInfo = console.info;\r\n    const originalConsoleLog = console.log;\r\n    const originalConsoleError = console.error;\r\n    const originalConsoleWarn = console.warn;\r\n\r\n    let logs: ILogItem[] = [];\r\n\r\n    const pushLog = (log: ILogItem) => {\r\n        logs.push(log);\r\n\r\n        logs = logs.filter(item => item.timestamp >= new Date().getTime() - defaultExpirationTime);\r\n    };\r\n\r\n    console.log = (text: string, ...causes: unknown[]) => {\r\n        const {timestamp, format} = getDate();\r\n\r\n        const msg = `[${format}] LOG: ${text}`;\r\n        const formatParams = causes\r\n            ? `, cause: ${causes.join(' ')}`\r\n            : '';\r\n\r\n        pushLog({timestamp, message: msg + formatParams});\r\n\r\n        originalConsoleLog.call(console, text, ...causes);\r\n    };\r\n\r\n    console.error = (text: string, ...causes: unknown[]) => {\r\n        const {timestamp, format} = getDate();\r\n\r\n        const msg = `[${format}] ERROR: ${text}`;\r\n        const formatParams = causes\r\n            ? `, cause: ${causes.join(' ')}`\r\n            : '';\r\n\r\n        pushLog({timestamp, message: msg + formatParams});\r\n\r\n        originalConsoleError.call(console, text, ...causes);\r\n    };\r\n\r\n    console.warn = (text: string, ...causes: unknown[]) => {\r\n        const {timestamp, format} = getDate();\r\n\r\n        const msg = `[${format}] WARN: ${text}`;\r\n        const formatParams = causes\r\n            ? `, cause: ${causes.join(' ')}`\r\n            : '';\r\n\r\n        pushLog({timestamp, message: msg + formatParams});\r\n\r\n        originalConsoleWarn.call(console, text, ...causes);\r\n    };\r\n\r\n    const enable = () => {\r\n        enabled = true;\r\n    };\r\n\r\n    const disable = () => {\r\n        enabled = false;\r\n    };\r\n\r\n    const getLogs = () => {\r\n        return logs;\r\n    };\r\n\r\n    const getDate = () => {\r\n        const date = new Date();\r\n\r\n        return {\r\n            timestamp: date.getTime(),\r\n            format: `${zeroPad(date.getDate())}.${zeroPad(date.getMonth() + 1)}.${date.getFullYear()} ${zeroPad(date.getHours())}:${zeroPad(date.getMinutes())}:${zeroPad(date.getSeconds())}`,\r\n        };\r\n    };\r\n\r\n    const info = (text: string, cause?: unknown) => {\r\n        const {timestamp, format} = getDate();\r\n\r\n        const msg = `[${format}] ${text}`;\r\n        const formatParams = cause\r\n            ? `, cause: ${cause}`\r\n            : '';\r\n\r\n        pushLog({timestamp, message: msg + formatParams});\r\n\r\n        if (enabled) {\r\n            originalConsoleInfo.call(console,\r\n                ...[text, cause].filter(item => item !== undefined),\r\n            );\r\n        }\r\n    };\r\n\r\n    const error = (text: string, cause?: unknown) => {\r\n        const {timestamp, format} = getDate();\r\n\r\n        const msg = `[${format}] ${text}`;\r\n        const formatParams = cause\r\n            ? `, cause: ${JSON.stringify(cause)}`\r\n            : '';\r\n\r\n        pushLog({timestamp, message: msg + formatParams});\r\n\r\n        if (enabled) {\r\n            originalConsoleError.call(console,\r\n                ...[text, cause].filter(item => item !== undefined),\r\n            );\r\n        }\r\n    };\r\n\r\n    const warn = (text: string, cause?: unknown) => {\r\n        const {timestamp, format} = getDate();\r\n\r\n        const msg = `[${format}] ${text}`;\r\n        const formatParams = cause\r\n            ? `, cause: ${JSON.stringify(cause)}`\r\n            : '';\r\n\r\n        pushLog({timestamp, message: msg + formatParams});\r\n\r\n        if (enabled) {\r\n            originalConsoleWarn.call(console,\r\n                ...[text, cause].filter(item => item !== undefined),\r\n            );\r\n        }\r\n    };\r\n\r\n    const server = (params: {\r\n        prefix?: string;\r\n        prefixColor?: string;\r\n        type: string,\r\n        name?: string | number,\r\n        color: string,\r\n        item: IMessage\r\n    }) => {\r\n        const {prefix, prefixColor = '#d2ac7f', type, name, color, item} = params;\r\n\r\n        const {timestamp, format} = getDate();\r\n\r\n        const msg = `[${format}]: ${prefix} ${type} (${name ?? 'unknown'}): ${JSON.stringify(item)}`;\r\n\r\n        pushLog({timestamp, message: msg});\r\n\r\n        if (enabled) {\r\n            if (prefix) {\r\n                originalConsoleLog.call(console,\r\n                    `%c ${prefix} %c ${type} [${name ?? 'unknown'}]`,\r\n                    `background: ${prefixColor}`,\r\n                    `background: ${color}; color: ${messageFontColor}`,\r\n                    item,\r\n                );\r\n            } else {\r\n                originalConsoleLog.call(console,\r\n                    `%c ${type} [${name ?? 'unknown'}]`,\r\n                    `background: ${color}; color: ${messageFontColor}`,\r\n                    item,\r\n                );\r\n            }\r\n        }\r\n    };\r\n\r\n    const request = (item: IMessage, meta: IMessageMeta = {}) => {\r\n        const {prefix, prefixColor, messageName} = meta;\r\n\r\n        if (!item.id || !isRestricted || !isRestricted(item.id)) {\r\n            server({\r\n                prefix,\r\n                prefixColor,\r\n                type: 'Req',\r\n                name: messageName ?? item.id,\r\n                color: '#daf9d0',\r\n                item,\r\n            });\r\n        }\r\n    };\r\n\r\n    const response = (item: IMessage, meta: IMessageMeta = {}) => {\r\n        const {prefix, prefixColor, messageName} = meta;\r\n\r\n        if (!item.id || !isRestricted || !isRestricted(item.id)) {\r\n            server({\r\n                prefix,\r\n                prefixColor,\r\n                type: 'Res',\r\n                name: messageName ?? item.id,\r\n                color: '#cceaf4',\r\n                item,\r\n            });\r\n        }\r\n    };\r\n\r\n    const event = (item: IMessage, meta: IMessageMeta = {}) => {\r\n        const {prefix, prefixColor, messageName} = meta;\r\n\r\n        if (!item.id || !isRestricted || !isRestricted(item.id)) {\r\n            server({\r\n                prefix,\r\n                prefixColor,\r\n                type: 'Evt',\r\n                name: messageName ?? item.id,\r\n                color: '#d5d3f3',\r\n                item,\r\n            });\r\n        }\r\n    };\r\n\r\n    return {\r\n        enable,\r\n        disable,\r\n        getLogs,\r\n        info,\r\n        error,\r\n        warn,\r\n        request,\r\n        response,\r\n        event,\r\n    };\r\n};\r\n","import {ILogItem} from '../logger';\r\n\r\nexport const mergeLogs = (limit: number) => {\r\n    return (...logs: ILogItem[][]) => {\r\n        const resultLogs: ILogItem[][] = [];\r\n\r\n        for (let i = 0; i < logs.length; i++) {\r\n            resultLogs.push(logs[i]);\r\n        }\r\n\r\n        const result = [...resultLogs].flat().sort((log, other) => log.timestamp - other.timestamp);\r\n\r\n        return result.map(log => log.message).slice(Math.max(result.length - limit, 0));\r\n    };\r\n};\r\n"],"mappings":"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","names":["src_exports","__export","createLogger","mergeLogs","__toCommonJS","zeroPad","x","len","defaultExpirationTime","messageFontColor","createLogger","isEnabled","isRestricted","enabled","originalConsoleInfo","originalConsoleLog","originalConsoleError","originalConsoleWarn","logs","pushLog","log","item","text","causes","timestamp","format","getDate","msg","formatParams","enable","disable","getLogs","date","zeroPad","info","cause","error","warn","server","params","prefix","prefixColor","type","name","color","meta","messageName","mergeLogs","limit","logs","resultLogs","i","result","log","other"]}