{"version":3,"file":"index-node20.mjs","sources":["../src/index.ts"],"sourcesContent":["import * as util from \"node:util\";\nimport { Level } from \"nightingale-levels\";\nimport type {\n  Handler,\n  LogRecord,\n  Metadata,\n  MetadataStyles,\n  Processor,\n  Styles,\n} from \"nightingale-types\";\nimport { POB_TARGET } from \"pob-babel\";\n\nexport { Level } from \"nightingale-levels\";\n\nexport interface Options<T extends Metadata> {\n  symbol?: string;\n  metadataStyles?: MetadataStyles<T>;\n  styles?: Styles;\n}\n\nexport interface ComputedConfigForKey {\n  handlers: Handler[];\n  processors: Processor[];\n}\n\nexport interface ExtendedFunctionNameMetadata {\n  functionName: string;\n}\n\nexport interface Config {\n  handler?: Handler;\n  handlers?: Handler[];\n  key?: string;\n  keys?: string[];\n  pattern?: RegExp;\n  processor?: Processor;\n  processors?: Processor[];\n  stop?: boolean;\n}\n\ndeclare global {\n  // eslint-disable-next-line no-var\n  var __NIGHTINGALE_CONFIG: Config[];\n  // eslint-disable-next-line no-var\n  var __NIGHTINGALE_LOGGER_MAP_CACHE: Map<string, ComputedConfigForKey>;\n  // eslint-disable-next-line no-var\n  var __NIGHTINGALE_CONFIG_DEFAULT: ComputedConfigForKey;\n  // eslint-disable-next-line no-var\n  var __NIGHTINGALE_GLOBAL_HANDLERS: unknown;\n  // eslint-disable-next-line no-var\n  var __NIGHTINGALE_GET_CONFIG_FOR_LOGGER: (\n    key: string,\n  ) => ComputedConfigForKey;\n  // eslint-disable-next-line no-var\n  var __NIGHTINGALE_GET_CONFIG_FOR_LOGGER_RECORD: (\n    key: string,\n    level: number,\n  ) => ComputedConfigForKey;\n}\n\nconst globalOrWindow: typeof globalThis =\n  typeof globalThis !== \"undefined\" ? globalThis : globalThis;\n\nif (!globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER) {\n  globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER =\n    (): ComputedConfigForKey => ({\n      handlers: [],\n      processors: [],\n    });\n}\n\nif (!globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER_RECORD) {\n  globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER_RECORD = (\n    key: string,\n    level: Level,\n  ): ComputedConfigForKey => {\n    const { handlers, processors }: ComputedConfigForKey =\n      globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER(key);\n\n    return {\n      handlers: handlers.filter(\n        (handler) =>\n          level >= handler.minLevel &&\n          (!handler.isHandling || handler.isHandling(level, key)),\n      ),\n      processors,\n    };\n  };\n}\n\nfunction getConfigForLoggerRecord(\n  key: string,\n  recordLevel: Level,\n): ComputedConfigForKey {\n  return globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER_RECORD(\n    key,\n    recordLevel,\n  );\n}\n\nfunction isError(messageOrError: Error | string): messageOrError is Error {\n  return messageOrError instanceof Error;\n}\n\n/**\n * Interface that allows you to log records.\n * This records are treated by handlers\n */\nexport class Logger {\n  private contextObject?: Record<string, unknown>;\n\n  readonly key: string;\n\n  readonly displayName?: string;\n\n  /**\n   * Create a new Logger\n   *\n   * @param {string} key\n   * @param {string} [displayName]\n   */\n  constructor(key: string, displayName?: string) {\n    this.key = key;\n    this.displayName = displayName;\n\n    if (process.env.NODE_ENV !== \"production\" && key.includes(\".\")) {\n      throw new Error(\n        `nightingale: \\`.\\` in key is no longer supported, use \\`:\\` instead (key: ${key})`,\n      );\n    }\n  }\n\n  /** @private */\n  protected getHandlersAndProcessors(\n    recordLevel: number,\n  ): ComputedConfigForKey {\n    return getConfigForLoggerRecord(this.key, recordLevel);\n  }\n\n  /** @private */\n  getConfig(): Readonly<ComputedConfigForKey> {\n    return globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER(this.key);\n  }\n\n  /**\n   * Create a child logger\n   */\n  child(childSuffixKey: string, childDisplayName?: string): Logger {\n    return new Logger(`${this.key}:${childSuffixKey}`, childDisplayName);\n  }\n\n  /**\n   * Create a new Logger with the same key a this attached context\n   *\n   * @example\n   * ```typescript\n   * const loggerMyService = new Logger('app:myService');\n   * function someAction(arg1) {\n   *     const logger = loggerMyService.context({ arg1 });\n   *     logger.enter(someAction);\n   *     // do stuff\n   *     logger.info('info');\n   *     // do stuff\n   *     logger.exit(someAction);\n   * }\n   * ```\n   *\n   */\n  context(context: Record<string, unknown>): Logger {\n    const logger = new Logger(this.key);\n    logger.setContext(context);\n    return logger;\n  }\n\n  /**\n   * Get the context of this logger\n   */\n  getContextObject(): Readonly<Record<string, unknown>> | undefined {\n    return this.contextObject;\n  }\n\n  /**\n   * Set the context of this logger\n   *\n   * @param {Object} context\n   */\n  setContext(context: Record<string, unknown>): void {\n    this.contextObject = context;\n  }\n\n  /**\n   * Extends existing context of this logger\n   */\n  extendsContext(extendedContext: Record<string, unknown>): void {\n    if (this.contextObject === undefined) {\n      throw new Error(\n        \"Cannot extends context that does not exists. Use setContext(context) first.\",\n      );\n    }\n    Object.assign(this.contextObject, extendedContext);\n  }\n\n  /**\n   * Handle a record\n   *\n   * Use this only if you know what you are doing.\n   */\n  addRecord<T extends Metadata>(record: Readonly<LogRecord<T>>): void {\n    const { handlers, processors } = this.getHandlersAndProcessors(\n      record.level,\n    );\n\n    if (handlers.length === 0) {\n      if (record.level > Level.ERROR) {\n        // eslint-disable-next-line no-console\n        console.log(\"[nightingale] no logger for > error level.\", {\n          key: record.key,\n          message: record.message,\n        });\n      }\n      return;\n    }\n\n    if (processors) {\n      processors.forEach((process) => {\n        process(record, record.context);\n      });\n    }\n\n    handlers.some((handler) => handler.handle(record) === false);\n  }\n\n  /**\n   * Log a message\n   */\n  log<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    level: Level = Level.INFO,\n    options?: Options<T>,\n  ): void {\n    const isMessageError = isError(messageOrError);\n\n    const message = isMessageError\n      ? `${messageOrError.name}: ${messageOrError.message}`\n      : messageOrError;\n\n    const extendedMetadata =\n      isMessageError && !(metadata && Object.hasOwn(metadata, \"error\"))\n        ? { ...metadata, error: messageOrError }\n        : metadata;\n\n    const context = extendedMetadata?.context;\n    if (extendedMetadata) {\n      delete extendedMetadata.context;\n    }\n\n    const record: LogRecord<NonNullable<typeof extendedMetadata>> = {\n      level,\n      key: this.key,\n      displayName: this.displayName,\n      datetime: new Date(),\n      message,\n      context: context || this.contextObject,\n      metadata: extendedMetadata as NonNullable<typeof extendedMetadata>,\n      extra: {},\n      ...options,\n    };\n    this.addRecord(record);\n  }\n\n  /**\n   * Log a trace message\n   */\n  trace<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.TRACE, { metadataStyles });\n  }\n\n  /**\n   * Log a debug message\n   */\n  debug<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.DEBUG, { metadataStyles });\n  }\n\n  /**\n   * Notice an info message\n   */\n  notice<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.NOTICE, { metadataStyles });\n  }\n\n  /**\n   * Log an info message\n   */\n  info<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.INFO, { metadataStyles });\n  }\n\n  /**\n   * Log a warn message\n   */\n  warn<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.WARN, { metadataStyles });\n  }\n\n  /**\n   * Log an error message\n   *\n   * @example\n   * ```typescript\n   * const logger = new Logger('something');\n   * try {\n   *   throw new Error('Always throws here');\n   * } catch (error) {\n   *   logger.error('caught error', { error });\n   * }\n   * ```\n   */\n  error<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.ERROR, { metadataStyles });\n  }\n\n  /**\n   * Log an critical message\n   */\n  critical<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.CRITICAL, { metadataStyles });\n  }\n\n  /**\n   * Log a fatal message\n   *\n   * @example\n   * ```typescript\n   * const logger = new Logger('something');\n   * try {\n   *   throw new Error('Always throws here');\n   * } catch (error) {\n   *   logger.error('caught error', { error });\n   *   process.exit(1);\n   * }\n   */\n  fatal<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.FATAL, { metadataStyles });\n  }\n\n  /**\n   * Log an alert message\n   */\n  alert<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.ALERT, { metadataStyles });\n  }\n\n  /**\n   * Log an inspected value\n   */\n  inspectValue<T extends Metadata>(\n    value: unknown,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    if (POB_TARGET === \"browser\") {\n      throw new Error(\"Not supported for the browser. Prefer `debugger;`\");\n    } else {\n      // Note: inspect is a special function for node:\n      // https://github.com/nodejs/node/blob/a1bda1b4deb08dfb3e06cb778f0db40023b18318/lib/util.js#L210\n      const inspectedValue = util.inspect(value, { depth: 6 });\n      this.log(inspectedValue, metadata, Level.DEBUG, {\n        metadataStyles,\n        styles: [\"gray\"],\n      });\n    }\n  }\n\n  /**\n   * Log a debugged var\n   */\n  inspectVar<T extends Metadata>(\n    varName: string,\n    varValue: unknown,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    if (POB_TARGET === \"browser\") {\n      throw new Error(\"Not supported for the browser. Prefer `debugger;`\");\n    } else {\n      const inspectedValue = util.inspect(varValue, { depth: 6 });\n      this.log(`${varName} = ${inspectedValue}`, metadata, Level.DEBUG, {\n        metadataStyles,\n        styles: [\"cyan\"],\n      });\n    }\n  }\n\n  /**\n   * Alias for infoSuccess\n   */\n  success<T extends Metadata>(\n    message: string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.infoSuccess(message, metadata, metadataStyles);\n  }\n\n  /**\n   * Log an info success message\n   */\n  infoSuccess<T extends Metadata>(\n    message: string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(message, metadata, Level.INFO, {\n      metadataStyles,\n      symbol: \"✔\",\n      styles: [\"green\", \"bold\"],\n    });\n  }\n\n  /**\n   * Log an debug success message\n   */\n  debugSuccess<T extends Metadata>(\n    message: string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(message, metadata, Level.DEBUG, {\n      metadataStyles,\n      symbol: \"✔\",\n      styles: [\"green\"],\n    });\n  }\n\n  /**\n   * Alias for infoFail\n   */\n  fail<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.infoFail(messageOrError, metadata, metadataStyles);\n  }\n\n  /**\n   * Log an info fail message\n   */\n  infoFail<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.INFO, {\n      metadataStyles,\n      symbol: \"✖\",\n      styles: [\"red\", \"bold\"],\n    });\n  }\n\n  /**\n   * Log an debug fail message\n   */\n  debugFail<T extends Metadata>(\n    messageOrError: Error | string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.log(messageOrError, metadata, Level.DEBUG, {\n      metadataStyles,\n      symbol: \"✖\",\n      styles: [\"red\"],\n    });\n  }\n\n  /**\n   * @returns {number} time to pass to timeEnd\n   */\n  time<T extends Metadata>(\n    message?: string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n    level: number = Level.DEBUG,\n  ): number {\n    if (message) {\n      this.log(message, metadata, level, { metadataStyles });\n    }\n\n    return Date.now();\n  }\n\n  infoTime<T extends Metadata>(\n    message?: string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): number {\n    return this.time(message, metadata, metadataStyles, Level.INFO);\n  }\n\n  /**\n   * Finds difference between when this method\n   * was called and when the respective time method\n   * was called, then logs out the difference\n   * and deletes the original record\n   */\n  timeEnd<T extends Metadata>(\n    startTime: number,\n    message: string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n    level: number = Level.DEBUG,\n    options?: Options<T>,\n  ): void {\n    const now = Date.now();\n\n    const diffTime = now - startTime;\n    let readableTime;\n\n    if (diffTime < 1000) {\n      readableTime = `${diffTime}ms`;\n    } else {\n      const seconds = diffTime > 1000 ? Math.floor(diffTime / 1000) : 0;\n      const ms = diffTime - seconds * 1000;\n      readableTime = `${seconds ? `${seconds}s and ` : \"\"}${ms}ms`;\n    }\n\n    const extendedMetadata = {\n      ...metadata,\n      readableTime,\n      timeMs: diffTime,\n    };\n\n    this.log(message, extendedMetadata, level, { ...options, metadataStyles });\n  }\n\n  /**\n   * Like timeEnd, but with INFO level\n   */\n  infoTimeEnd<T extends Metadata>(\n    time: number,\n    message: string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.timeEnd(time, message, metadata, metadataStyles, Level.INFO);\n  }\n\n  /**\n   * Like timeEnd, but with INFO level\n   */\n  infoSuccessTimeEnd<T extends Metadata>(\n    time: number,\n    message: string,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<T>,\n  ): void {\n    this.timeEnd(time, message, metadata, metadataStyles, Level.INFO, {\n      symbol: \"✔\",\n      styles: [\"green\", \"bold\"],\n    });\n  }\n\n  /**\n   * Log an enter in a function\n   *\n   * @example\n   * ```typescript\n   * class A {\n   *   method(arg1) {\n   *     logger.enter(method, { arg1 });\n   *     // Do your stuff\n   *   }\n   * }\n   * ```\n   *\n   */\n  enter<T extends Metadata, Fn extends (...args: unknown[]) => unknown>(\n    fn: Fn,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<ExtendedFunctionNameMetadata & T>,\n  ): void {\n    const extendedMetadata = {\n      ...metadata,\n      functionName: fn.name,\n    };\n    this.log(\"enter\", extendedMetadata, Level.TRACE, { metadataStyles });\n  }\n\n  /**\n   * Log an exit in a function\n   *\n   * @example\n   * ```typescript\n   * const logger = new Logger('myNamespace:A');\n   * class A {\n   *   method(arg1) {\n   *     // Do your stuff\n   *     logger.exit(method, { arg1 });\n   *   }\n   * }\n   * ```\n   */\n  exit<T extends Metadata, Fn extends (...args: unknown[]) => unknown>(\n    fn: Fn,\n    metadata?: T,\n    metadataStyles?: MetadataStyles<ExtendedFunctionNameMetadata & T>,\n  ): void {\n    const extendedMetadata = {\n      ...metadata,\n      functionName: fn.name,\n    };\n    this.log(\"exit\", extendedMetadata, Level.TRACE, { metadataStyles });\n  }\n\n  /**\n   * Wrap around a function to log enter and exit of a function\n   *\n   * @example\n   * ```typescript\n   * const logger = new Logger('myNamespace:A');\n   * class A {\n   *   method() {\n   *     logger.wrap(method, () => {\n   *       // Do your stuff\n   *     });\n   *   }\n   * }\n   * ```\n   */\n  wrap<Fn extends (...args: unknown[]) => unknown>(\n    fn: Fn,\n    callback: () => void,\n  ): void;\n\n  wrap<T extends Metadata, Fn extends (...args: unknown[]) => unknown>(\n    fn: Fn,\n    metadata: T,\n    callback: () => void,\n  ): void;\n\n  wrap<T extends Metadata, Fn extends (...args: unknown[]) => unknown>(\n    fn: Fn,\n    metadata: T,\n    metadataStyles: MetadataStyles<T>,\n    callback: () => void,\n  ): void;\n\n  wrap<T extends Metadata, Fn extends (...args: unknown[]) => unknown>(\n    fn: Fn,\n    option1: T | (() => void),\n    option2?: MetadataStyles<T> | (() => void),\n    callback?: () => void,\n  ): void {\n    let metadata: T | undefined;\n    let metadataStyles: MetadataStyles<T> | undefined;\n\n    if (typeof option1 === \"function\") {\n      callback = option1;\n    } else {\n      metadata = option1;\n\n      if (typeof option2 === \"function\") {\n        callback = option2;\n      } else {\n        metadataStyles = option2;\n      }\n    }\n\n    this.enter(fn, metadata, metadataStyles);\n    (callback as () => void)();\n    this.exit(fn);\n  }\n}\n"],"names":["globalOrWindow","globalThis","__NIGHTINGALE_GET_CONFIG_FOR_LOGGER","handlers","processors","__NIGHTINGALE_GET_CONFIG_FOR_LOGGER_RECORD","key","level","filter","handler","minLevel","isHandling","getConfigForLoggerRecord","recordLevel","isError","messageOrError","Error","Logger","constructor","displayName","process","env","NODE_ENV","includes","getHandlersAndProcessors","getConfig","child","childSuffixKey","childDisplayName","context","logger","setContext","getContextObject","contextObject","extendsContext","extendedContext","undefined","Object","assign","addRecord","record","length","Level","ERROR","console","log","message","forEach","some","handle","metadata","INFO","options","isMessageError","name","extendedMetadata","hasOwn","error","datetime","Date","extra","trace","metadataStyles","TRACE","debug","DEBUG","notice","NOTICE","info","warn","WARN","critical","CRITICAL","fatal","FATAL","alert","ALERT","inspectValue","value","inspectedValue","util","inspect","depth","styles","inspectVar","varName","varValue","success","infoSuccess","symbol","debugSuccess","fail","infoFail","debugFail","time","now","infoTime","timeEnd","startTime","diffTime","readableTime","seconds","Math","floor","timeMs","infoTimeEnd","infoSuccessTimeEnd","enter","fn","functionName","exit","wrap","option1","option2","callback"],"mappings":"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"}