NaturalCycles/nodejs-lib

View on GitHub
src/log/debug.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
// Types based on @types/debug
export interface IDebug {
  (namespace: string): IDebugger
  coerce: (val: any) => any
  disable: () => string
  enable: (namespaces: string) => void
  enabled: (namespaces: string) => boolean
  log: (...args: any[]) => any

  names: RegExp[]
  skips: RegExp[]

  formatters: DebugFormatters
}

export interface DebugFormatters {
  [formatter: string]: (v: any) => string
}

export interface IDebugger {
  // (formatter: any, ...args: any[]): void;
  (...args: any[]): void

  color: string
  enabled: boolean
  log: (...args: any[]) => any
  namespace: string
  destroy: () => boolean
  // extend: (namespace: string, delimiter?: string) => IDebugger
}

const originalDebug = require('debug') as IDebug

// eslint-disable-next-line @typescript-eslint/naming-convention
export const Debug = ((namespace: string) => {
  const instance = originalDebug(namespace)
  instance.log = console.log.bind(console) // this enables colors for objects
  return instance
}) as IDebug

Debug.coerce = originalDebug.coerce.bind(originalDebug)
Debug.disable = originalDebug.disable.bind(originalDebug)
Debug.enable = originalDebug.enable.bind(originalDebug)
Debug.enabled = originalDebug.enabled.bind(originalDebug)
Debug.log = originalDebug.log.bind(originalDebug)
Debug.names = originalDebug.names
Debug.skips = originalDebug.skips
Debug.formatters = originalDebug.formatters