Bluesky app fork with some witchin' additions 馃挮
at readme-update 90 lines 2.0 kB view raw
1import format from 'date-fns/format' 2 3import {LogLevel, type Transport} from '#/logger/types' 4import {prepareMetadata} from '#/logger/util' 5import {IS_WEB} from '#/env' 6 7/** 8 * Used in dev mode to nicely log to the console 9 */ 10export const consoleTransport: Transport = ( 11 level, 12 context, 13 message, 14 metadata, 15 timestamp, 16) => { 17 const hasMetadata = Object.keys(metadata).length 18 const colorize = withColor( 19 { 20 [LogLevel.Debug]: colors.magenta, 21 [LogLevel.Info]: colors.blue, 22 [LogLevel.Log]: colors.green, 23 [LogLevel.Warn]: colors.yellow, 24 [LogLevel.Error]: colors.red, 25 }[level], 26 ) 27 28 let msg = `${colorize(format(timestamp, 'HH:mm:ss'))}` 29 if (context) { 30 msg += ` ${colorize(`(${context})`)}` 31 } 32 if (message) { 33 msg += ` ${message.toString()}` 34 } 35 36 if (IS_WEB) { 37 if (hasMetadata) { 38 console.groupCollapsed(msg) 39 console.log(prepareMetadata(metadata)) 40 console.groupEnd() 41 } else { 42 console.log(msg) 43 } 44 if (message instanceof Error) { 45 // for stacktrace 46 console.error(message) 47 } 48 } else { 49 if (hasMetadata) { 50 msg += ` ${JSON.stringify(prepareMetadata(metadata), null, 2)}` 51 } 52 console.log(msg) 53 if (message instanceof Error) { 54 // for stacktrace 55 console.error(message) 56 } 57 } 58} 59 60/** 61 * Color handling copied from Kleur 62 * 63 * @see https://github.com/lukeed/kleur/blob/fa3454483899ddab550d08c18c028e6db1aab0e5/colors.mjs#L13 64 */ 65const colors: { 66 [key: string]: [number, number] 67} = { 68 default: [0, 0], 69 blue: [36, 39], 70 green: [32, 39], 71 magenta: [35, 39], 72 red: [31, 39], 73 yellow: [33, 39], 74} 75 76function withColor([x, y]: [number, number]) { 77 const rgx = new RegExp(`\\x1b\\[${y}m`, 'g') 78 const open = `\x1b[${x}m`, 79 close = `\x1b[${y}m` 80 81 return function (txt: string) { 82 if (txt == null) return txt 83 84 return ( 85 open + 86 (~('' + txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + 87 close 88 ) 89 } 90}