@empirica/core
Version:
Empirica Core
1 lines • 8.51 kB
Source Map (JSON)
{"version":3,"sources":["../src/utils/console.ts"],"sourcesContent":["/* c8 ignore start */\n\nconst isBrowser =\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n\nenum Color {\n Bold = 1,\n\n Black = 30,\n Red,\n Green,\n Yellow,\n Blue,\n Magenta,\n Cyan,\n White,\n\n DarkGray = 90,\n}\n\nexport type LogLine = { level: string; args: any[] };\nexport class LogsMock {\n public logs: LogLine[] = [];\n\n log(line: LogLine) {\n this.logs.push(line);\n }\n\n clear() {\n this.logs = [];\n }\n}\n\nlet logsMock: LogsMock | undefined;\nexport function captureLogs(cb: () => void): LogLine[] {\n const lm = mockLogging();\n cb();\n const ret = lm.logs;\n stopMockLogging();\n\n return ret;\n}\n\nexport async function captureLogsAsync(\n cb: () => Promise<void>\n): Promise<LogLine[]> {\n const lm = mockLogging();\n await cb();\n const ret = lm.logs;\n stopMockLogging();\n\n return ret;\n}\n\nexport function mockLogging() {\n if (!logsMock) {\n logsMock = new LogsMock();\n }\n\n return logsMock;\n}\n\nexport function stopMockLogging() {\n logsMock = undefined;\n}\n\nconst colorHex = {\n [Color.Bold]: \"font-weight: bold\",\n [Color.Black]: \"color: #000000\",\n [Color.Red]: \"color: #cc0000\",\n [Color.Green]: \"color: #4e9a06\",\n [Color.Yellow]: \"color: #c4a000\",\n [Color.Blue]: \"color: #729fcf\",\n [Color.Magenta]: \"color: #75507b\",\n [Color.Cyan]: \"color: #06989a\",\n [Color.White]: \"color: #d3d7cf\",\n [Color.DarkGray]: \"color: #555753\",\n};\n\nexport const levels: { [key: string]: number } = {\n trace: 0,\n debug: 1,\n log: 2,\n info: 2,\n warn: 3,\n error: 4,\n};\n\nconst reversLevels: { [key: number]: string } = {};\nfor (const key in levels) {\n reversLevels[levels[key]!] = key;\n}\n\nlet currentLevel = 2;\n\nexport function setLogLevel(level: keyof typeof levels) {\n const lvl = levels[level];\n if (lvl === undefined) {\n return;\n }\n\n currentLevel = lvl;\n}\n\nfunction formatConsoleDate(date: Date, level: string[]) {\n var hour = date.getHours();\n var minutes = date.getMinutes();\n var seconds = date.getSeconds();\n var milliseconds = date.getMilliseconds();\n\n const str =\n (hour < 10 ? \"0\" + hour : hour) +\n \":\" +\n (minutes < 10 ? \"0\" + minutes : minutes) +\n \":\" +\n (seconds < 10 ? \"0\" + seconds : seconds) +\n \".\" +\n (\"00\" + milliseconds).slice(-3);\n\n if (isBrowser) {\n const ts = colorize(str, Color.DarkGray).concat(level);\n return [ts[0] + \" \" + level[0], ts[1], level[1]];\n }\n\n return colorize(str, Color.DarkGray).concat(level);\n}\n\nconst createLogger = (lvl: number, level: string[]) => {\n return (...args: any[]) => {\n if (lvl < currentLevel) {\n return;\n }\n\n if (logsMock) {\n logsMock.log({ level: reversLevels[lvl]!, args: args });\n\n return;\n }\n\n if (args.length === 1) {\n switch (typeof args[0]) {\n case \"string\":\n for (const line of args[0].split(\"\\n\")) {\n console.log(...formatConsoleDate(new Date(), level).concat(line));\n }\n return;\n\n case \"object\":\n if (args[0] instanceof Error) {\n const error = args[0] as Error;\n const prettyErr =\n error.name +\n \": \" +\n error.message.replace(new RegExp(`^${error.name}[: ]*`), \"\") +\n \"\\n\" +\n (error.stack || \"\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .map((line) => {\n if (line.startsWith(error.name + \": \" + error.message))\n return null;\n\n if (line.startsWith(\"at\")) {\n return \" \" + line;\n }\n\n return line;\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n for (const line of prettyErr.split(\"\\n\")) {\n console.log(...formatConsoleDate(new Date(), level).concat(line));\n }\n\n return;\n }\n }\n }\n\n console.log(...formatConsoleDate(new Date(), level).concat(args));\n };\n};\n\nfunction colorize(s: string, ...cc: Color[]): string[] {\n if (isBrowser) {\n const attr = [];\n for (const c of cc) {\n attr.push(colorHex[c]);\n }\n\n return [`%c${s}`, attr.join(\"; \")];\n }\n\n let out = \"\";\n for (const c of cc) {\n out += `\\x1b[${c}m`;\n }\n out += `${s}\\x1b[0m`;\n\n return [out];\n}\n\nexport const trace = createLogger(0, colorize(\"TRC\", Color.Magenta));\nexport const debug = createLogger(1, colorize(\"DBG\", Color.Yellow));\nexport const log = createLogger(2, colorize(\"LOG\", Color.Yellow));\nexport const info = createLogger(2, colorize(\"INF\", Color.Green));\nexport const warn = createLogger(3, colorize(\"WRN\", Color.Cyan));\nexport const error = createLogger(4, colorize(\"ERR\", Color.Red, Color.Bold));\n\n// export {\n// trace,\n// debug,\n// log,\n// info,\n// warn,\n// error,\n// };\n\n// export function warn(...args: string[]) {}\n"],"mappings":"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","names":["error"]}