Bluesky app fork with some witchin' additions 馃挮
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at f8975036440051185486f6b2c00a201ef2e18a8c 105 lines 2.6 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 19 if (IS_WEB) { 20 const cssColor = { 21 [LogLevel.Debug]: 'magenta', 22 [LogLevel.Info]: 'dodgerblue', 23 [LogLevel.Log]: 'green', 24 [LogLevel.Warn]: 'orange', 25 [LogLevel.Error]: 'red', 26 }[level] 27 28 const timestampStr = format(timestamp, 'HH:mm:ss') 29 const contextStr = context ? ` (${context})` : '' 30 const messageStr = message ? ` ${message.toString()}` : '' 31 32 const styledPart = `%c${timestampStr}${contextStr}%c${messageStr}` 33 const styles = [`color: ${cssColor}; font-weight: bold`, 'color: inherit'] 34 35 if (hasMetadata) { 36 console.groupCollapsed(styledPart, ...styles) 37 console.log(prepareMetadata(metadata)) 38 console.groupEnd() 39 } else { 40 console.log(styledPart, ...styles) 41 } 42 if (message instanceof Error) { 43 // for stacktrace 44 console.error(message) 45 } 46 } else { 47 const colorize = withColor( 48 { 49 [LogLevel.Debug]: colors.magenta, 50 [LogLevel.Info]: colors.blue, 51 [LogLevel.Log]: colors.green, 52 [LogLevel.Warn]: colors.yellow, 53 [LogLevel.Error]: colors.red, 54 }[level], 55 ) 56 57 let msg = `${colorize(format(timestamp, 'HH:mm:ss'))}` 58 if (context) { 59 msg += ` ${colorize(`(${context})`)}` 60 } 61 if (message) { 62 msg += ` ${message.toString()}` 63 } 64 if (hasMetadata) { 65 msg += ` ${JSON.stringify(prepareMetadata(metadata), null, 2)}` 66 } 67 console.log(msg) 68 if (message instanceof Error) { 69 // for stacktrace 70 console.error(message) 71 } 72 } 73} 74 75/** 76 * Color handling copied from Kleur 77 * 78 * @see https://github.com/lukeed/kleur/blob/fa3454483899ddab550d08c18c028e6db1aab0e5/colors.mjs#L13 79 */ 80const colors: { 81 [key: string]: [number, number] 82} = { 83 default: [0, 0], 84 blue: [36, 39], 85 green: [32, 39], 86 magenta: [35, 39], 87 red: [31, 39], 88 yellow: [33, 39], 89} 90 91function withColor([x, y]: [number, number]) { 92 const rgx = new RegExp(`\\x1b\\[${y}m`, 'g') 93 const open = `\x1b[${x}m`, 94 close = `\x1b[${y}m` 95 96 return function (txt: string) { 97 if (txt == null) return txt 98 99 return ( 100 open + 101 (~('' + txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + 102 close 103 ) 104 } 105}