CoolFace
Apppublic

legends810/testingnew

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
logger.ts121 linesDownload Raw Back to utils
1export type DebugLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error';2import { Chalk } from 'chalk';3 4const chalk = new Chalk({ level: 3 });5 6type LoggerFunction = (...messages: any[]) => void;7 8interface Logger {9  trace: LoggerFunction;10  debug: LoggerFunction;11  info: LoggerFunction;12  warn: LoggerFunction;13  error: LoggerFunction;14  setLevel: (level: DebugLevel) => void;15}16 17let currentLevel: DebugLevel = (import.meta.env.VITE_LOG_LEVEL ?? import.meta.env.DEV) ? 'debug' : 'info';18 19export const logger: Logger = {20  trace: (...messages: any[]) => log('trace', undefined, messages),21  debug: (...messages: any[]) => log('debug', undefined, messages),22  info: (...messages: any[]) => log('info', undefined, messages),23  warn: (...messages: any[]) => log('warn', undefined, messages),24  error: (...messages: any[]) => log('error', undefined, messages),25  setLevel,26};27 28export function createScopedLogger(scope: string): Logger {29  return {30    trace: (...messages: any[]) => log('trace', scope, messages),31    debug: (...messages: any[]) => log('debug', scope, messages),32    info: (...messages: any[]) => log('info', scope, messages),33    warn: (...messages: any[]) => log('warn', scope, messages),34    error: (...messages: any[]) => log('error', scope, messages),35    setLevel,36  };37}38 39function setLevel(level: DebugLevel) {40  if ((level === 'trace' || level === 'debug') && import.meta.env.PROD) {41    return;42  }43 44  currentLevel = level;45}46 47function log(level: DebugLevel, scope: string | undefined, messages: any[]) {48  const levelOrder: DebugLevel[] = ['trace', 'debug', 'info', 'warn', 'error'];49 50  if (levelOrder.indexOf(level) < levelOrder.indexOf(currentLevel)) {51    return;52  }53 54  const allMessages = messages.reduce((acc, current) => {55    if (acc.endsWith('\n')) {56      return acc + current;57    }58 59    if (!acc) {60      return current;61    }62 63    return `${acc} ${current}`;64  }, '');65 66  const labelBackgroundColor = getColorForLevel(level);67  const labelTextColor = level === 'warn' ? '#000000' : '#FFFFFF';68 69  const labelStyles = getLabelStyles(labelBackgroundColor, labelTextColor);70  const scopeStyles = getLabelStyles('#77828D', 'white');71 72  const styles = [labelStyles];73 74  if (typeof scope === 'string') {75    styles.push('', scopeStyles);76  }77 78  let labelText = formatText(` ${level.toUpperCase()} `, labelTextColor, labelBackgroundColor);79 80  if (scope) {81    labelText = `${labelText} ${formatText(` ${scope} `, '#FFFFFF', '77828D')}`;82  }83 84  if (typeof window !== 'undefined') {85    console.log(`%c${level.toUpperCase()}${scope ? `%c %c${scope}` : ''}`, ...styles, allMessages);86  } else {87    console.log(`${labelText}`, allMessages);88  }89}90 91function formatText(text: string, color: string, bg: string) {92  return chalk.bgHex(bg)(chalk.hex(color)(text));93}94 95function getLabelStyles(color: string, textColor: string) {96  return `background-color: ${color}; color: white; border: 4px solid ${color}; color: ${textColor};`;97}98 99function getColorForLevel(level: DebugLevel): string {100  switch (level) {101    case 'trace':102    case 'debug': {103      return '#77828D';104    }105    case 'info': {106      return '#1389FD';107    }108    case 'warn': {109      return '#FFDB6C';110    }111    case 'error': {112      return '#EE4744';113    }114    default: {115      return '#000000';116    }117  }118}119 120export const renderLogger = createScopedLogger('Render');121