{"version":3,"file":"ngworker-lumberjack.mjs","sources":["../../../../../packages/ngworker/lumberjack/src/lib/configuration/lumberjack-config.token.ts","../../../../../packages/ngworker/lumberjack/src/lib/configuration/lumberjack-log-driver-config.token.ts","../../../../../packages/ngworker/lumberjack/src/lib/environment/is-production-environment.token.ts","../../../../../packages/ngworker/lumberjack/src/lib/formatting/utc-timestamp-for.ts","../../../../../packages/ngworker/lumberjack/src/lib/formatting/lumberjack-format-log.ts","../../../../../packages/ngworker/lumberjack/src/lib/time/lumberjack-time.service.ts","../../../../../packages/ngworker/lumberjack/src/lib/formatting/lumberjack-log-formatter.service.ts","../../../../../packages/ngworker/lumberjack/src/lib/log-drivers/logging-strategies/critical-log-driver-logging-strategy.ts","../../../../../packages/ngworker/lumberjack/src/lib/log-drivers/logging-strategies/debug-log-driver-logging-strategy.ts","../../../../../packages/ngworker/lumberjack/src/lib/log-drivers/logging-strategies/error-log-driver-logging-strategy.ts","../../../../../packages/ngworker/lumberjack/src/lib/log-drivers/logging-strategies/info-log-driver-logging-strategy.ts","../../../../../packages/ngworker/lumberjack/src/lib/log-drivers/logging-strategies/trace-log-driver-logging-strategy.ts","../../../../../packages/ngworker/lumberjack/src/lib/log-drivers/logging-strategies/warning-log-driver-logging-strategy.ts","../../../../../packages/ngworker/lumberjack/src/lib/log-drivers/lumberjack-log-driver-logger.ts","../../../../../packages/ngworker/lumberjack/src/lib/logging/lumberjack-log.builder.ts","../../../../../packages/ngworker/lumberjack/src/lib/logging/lumberjack-log-factory.ts","../../../../../packages/ngworker/lumberjack/src/lib/formatting/format-log-driver-error.ts","../../../../../packages/ngworker/lumberjack/src/lib/log-drivers/lumberjack-log-driver.token.ts","../../../../../packages/ngworker/lumberjack/src/lib/logging/lumberjack.service.ts","../../../../../packages/ngworker/lumberjack/src/lib/configuration/default-development-levels.ts","../../../../../packages/ngworker/lumberjack/src/lib/configuration/default-production-levels.ts","../../../../../packages/ngworker/lumberjack/src/lib/configuration/lumberjack-options.token.ts","../../../../../packages/ngworker/lumberjack/src/lib/configuration/provide-lumberjack.ts","../../../../../packages/ngworker/lumberjack/src/lib/logging/lumberjack-logger.builder.ts","../../../../../packages/ngworker/lumberjack/src/lib/logging/lumberjack-logger.service.ts","../../../../../packages/ngworker/lumberjack/src/lib/logging/scoped-lumberjack-logger.service.ts","../../../../../packages/ngworker/lumberjack/src/index.ts","../../../../../packages/ngworker/lumberjack/src/ngworker-lumberjack.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { LumberjackConfig } from './lumberjack.config';\n\n/**\n * The Lumberjack configuration token is used internally by `provideLumberjack` function.\n * and various Lumberjack services.\n */\nexport const lumberjackConfigToken: InjectionToken<LumberjackConfig> = new InjectionToken('__LUMBERJACK_CONFIG__');\n","import { InjectionToken } from '@angular/core';\n\nimport { LumberjackLogDriverConfig } from './lumberjack-log-driver.config';\n\n/**\n * The Lumberjack log driver configuration token is used internally by\n * `provideLumberjack` function, various internal Lumberjack services, and log drivers.\n */\nexport const lumberjackLogDriverConfigToken: InjectionToken<LumberjackLogDriverConfig> = new InjectionToken(\n  '__LUMBERJACK_LOG_DRIVER_CONFIG__'\n);\n","import { InjectionToken, isDevMode } from '@angular/core';\n\nexport const isProductionEnvironmentToken = new InjectionToken<boolean>('__PRODUCTION_MODE_DETECTION__', {\n  factory: () => !isDevMode(),\n  providedIn: 'root',\n});\n","export function utcTimestampFor(unixEpochTicks: number): string {\n  return new Date(unixEpochTicks).toISOString();\n}\n","import { LumberjackLogPayload } from '../logs/lumberjack-log-payload';\nimport { LumberjackLog } from '../logs/lumberjack.log';\n\nimport { utcTimestampFor } from './utc-timestamp-for';\n\nexport function lumberjackFormatLog<TPayload extends LumberjackLogPayload | void = void>({\n  scope,\n  createdAt: timestamp,\n  level,\n  message,\n}: LumberjackLog<TPayload>): string {\n  const formattedScope = scope ? ` [${scope}]` : '';\n\n  return `${level} ${utcTimestampFor(timestamp)}${formattedScope} ${message}`;\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * Used by Lumberjack to timestamp logs at their creation time.\n *\n * Can be overridden for testing purposes.\n */\n@Injectable()\nexport class LumberjackTimeService {\n  /**\n   * Return the current date-time as Unix epoch ticks in milliseconds.\n   */\n  getUnixEpochTicks(): number {\n    return Date.now();\n  }\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { lumberjackConfigToken } from '../configuration/lumberjack-config.token';\nimport { LumberjackConfig } from '../configuration/lumberjack.config';\nimport { LumberjackLogPayload } from '../logs/lumberjack-log-payload';\nimport { LumberjackLog } from '../logs/lumberjack.log';\nimport { LumberjackTimeService } from '../time/lumberjack-time.service';\n\nimport { lumberjackFormatLog } from './lumberjack-format-log';\nimport { LumberjackLogFormatterResult } from './lumberjack-log-formatter-result';\n\n@Injectable()\nexport class LumberjackLogFormatter<TPayload extends LumberjackLogPayload | void = void> {\n  readonly #config = inject<LumberjackConfig<TPayload>>(lumberjackConfigToken);\n  readonly #time = inject(LumberjackTimeService);\n\n  formatLog(log: LumberjackLog<TPayload>): LumberjackLogFormatterResult<TPayload> {\n    const { format } = this.#config;\n    let result: LumberjackLogFormatterResult<TPayload>;\n\n    try {\n      result = {\n        log,\n        formattedLog: format(log),\n      };\n    } catch (formattingError) {\n      const formattingErrorLog = this.#createFormattingErrorLog(formattingError, log);\n      const formattedFormattingError = this.#formatFormattingError(formattingErrorLog);\n\n      result = {\n        log: formattingErrorLog,\n        formattedLog: formattedFormattingError,\n      };\n    }\n\n    return result;\n  }\n\n  #createFormattingErrorLog(formatError: unknown, log: LumberjackLog<TPayload>): LumberjackLog<TPayload> {\n    const formattingErrorMessage = (formatError as Error).message ?? String(formatError);\n\n    return {\n      scope: 'LumberjackLogFormattingError',\n      createdAt: this.#time.getUnixEpochTicks(),\n      level: 'error',\n      message: `Could not format message \"${log.message}\". Error: \"${formattingErrorMessage}\"`,\n      payload: undefined,\n    };\n  }\n\n  #formatFormattingError(errorEntry: LumberjackLog<TPayload>): string {\n    const { format } = this.#config;\n    let errorMessage = '';\n\n    try {\n      errorMessage = format(errorEntry);\n    } catch {\n      errorMessage = lumberjackFormatLog(errorEntry);\n    }\n\n    return errorMessage;\n  }\n}\n","import { LumberjackLogPayload } from '../../logs/lumberjack-log-payload';\nimport { LumberjackLogDriver } from '../lumberjack-log-driver';\nimport { LumberjackLogDriverLog } from '../lumberjack-log-driver.log';\n\n/**\n * Critical logging strategy for a log driver.\n *\n * @param driver The log driver.\n * @param driverLog A critical log driver log.\n */\nexport function criticalLogDriverLoggingStrategy<TPayload extends LumberjackLogPayload | void = void>(\n  driver: LumberjackLogDriver<TPayload>,\n  driverLog: LumberjackLogDriverLog<TPayload>\n): void {\n  driver.logCritical(driverLog);\n}\n","import { LumberjackLogPayload } from '../../logs/lumberjack-log-payload';\nimport { LumberjackLogDriver } from '../lumberjack-log-driver';\nimport { LumberjackLogDriverLog } from '../lumberjack-log-driver.log';\n\n/**\n * Debug logging strategy for a log driver.\n *\n * @param driver The log driver.\n * @param driverLog A debug log driver log.\n */\nexport function debugLogDriverLoggingStrategy<TPayload extends LumberjackLogPayload | void = void>(\n  driver: LumberjackLogDriver<TPayload>,\n  driverLog: LumberjackLogDriverLog<TPayload>\n): void {\n  driver.logDebug(driverLog);\n}\n","import { LumberjackLogPayload } from '../../logs/lumberjack-log-payload';\nimport { LumberjackLogDriver } from '../lumberjack-log-driver';\nimport { LumberjackLogDriverLog } from '../lumberjack-log-driver.log';\n\n/**\n * Error logging strategy for a log driver.\n *\n * @param driver The log driver.\n * @param driverLog An error log driver log.\n */\nexport function errorLogDriverLoggingStrategy<TPayload extends LumberjackLogPayload | void = void>(\n  driver: LumberjackLogDriver<TPayload>,\n  driverLog: LumberjackLogDriverLog<TPayload>\n): void {\n  driver.logError(driverLog);\n}\n","import { LumberjackLogPayload } from '../../logs/lumberjack-log-payload';\nimport { LumberjackLogDriver } from '../lumberjack-log-driver';\nimport { LumberjackLogDriverLog } from '../lumberjack-log-driver.log';\n\n/**\n * Info logging strategy for a log driver.\n *\n * @param driver The log driver.\n * @param driverLog An info log driver log.\n */\nexport function infoLogDriverLoggingStrategy<TPayload extends LumberjackLogPayload | void = void>(\n  driver: LumberjackLogDriver<TPayload>,\n  driverLog: LumberjackLogDriverLog<TPayload>\n): void {\n  driver.logInfo(driverLog);\n}\n","import { LumberjackLogPayload } from '../../logs/lumberjack-log-payload';\nimport { LumberjackLogDriver } from '../lumberjack-log-driver';\nimport { LumberjackLogDriverLog } from '../lumberjack-log-driver.log';\n\n/**\n * Trace logging strategy for a log driver.\n *\n * @param driver The log driver.\n * @param driverLog A trace log driver log.\n */\nexport function traceLogDriverLoggingStrategy<TPayload extends LumberjackLogPayload | void = void>(\n  driver: LumberjackLogDriver<TPayload>,\n  driverLog: LumberjackLogDriverLog<TPayload>\n): void {\n  driver.logTrace(driverLog);\n}\n","import { LumberjackLogPayload } from '../../logs/lumberjack-log-payload';\nimport { LumberjackLogDriver } from '../lumberjack-log-driver';\nimport { LumberjackLogDriverLog } from '../lumberjack-log-driver.log';\n\n/**\n * Warning logging strategy for a log driver.\n *\n * @param driver The log driver.\n * @param driverLog A warning log driver log.\n */\nexport function warningLogDriverLoggingStrategy<TPayload extends LumberjackLogPayload | void = void>(\n  driver: LumberjackLogDriver<TPayload>,\n  driverLog: LumberjackLogDriverLog<TPayload>\n): void {\n  driver.logWarning(driverLog);\n}\n","import { Injectable } from '@angular/core';\n\nimport { LumberjackLogLevel } from '../logs/lumberjack-log-level';\nimport { LumberjackLogPayload } from '../logs/lumberjack-log-payload';\n\nimport { criticalLogDriverLoggingStrategy } from './logging-strategies/critical-log-driver-logging-strategy';\nimport { debugLogDriverLoggingStrategy } from './logging-strategies/debug-log-driver-logging-strategy';\nimport { errorLogDriverLoggingStrategy } from './logging-strategies/error-log-driver-logging-strategy';\nimport { infoLogDriverLoggingStrategy } from './logging-strategies/info-log-driver-logging-strategy';\nimport { LumberjackLogDriverLoggingStrategy } from './logging-strategies/lumberjack-log-driver-logging-strategy';\nimport { traceLogDriverLoggingStrategy } from './logging-strategies/trace-log-driver-logging-strategy';\nimport { warningLogDriverLoggingStrategy } from './logging-strategies/warning-log-driver-logging-strategy';\nimport { LumberjackLogDriver } from './lumberjack-log-driver';\nimport { LumberjackLogDriverLog } from './lumberjack-log-driver.log';\n\n/**\n * A context for a log driver logging strategy.\n */\n@Injectable()\nexport class LumberjackLogDriverLogger<TPayload extends LumberjackLogPayload | void = void> {\n  /**\n   * A record of logging strategies for each log level.\n   */\n  readonly #loggingStrategies: Readonly<Record<LumberjackLogLevel, LumberjackLogDriverLoggingStrategy<TPayload>>> = {\n    ['critical']: criticalLogDriverLoggingStrategy,\n    ['debug']: debugLogDriverLoggingStrategy,\n    ['error']: errorLogDriverLoggingStrategy,\n    ['info']: infoLogDriverLoggingStrategy,\n    ['trace']: traceLogDriverLoggingStrategy,\n    ['warn']: warningLogDriverLoggingStrategy,\n  };\n\n  /**\n   * Log the specified log to the log driver.\n   *\n   * Forwards control to the log driver logging strategy corresponding to the\n   * level of the specified log driver log.\n   *\n   * @param driver The log driver.\n   * @param driverLog A log driver log.\n   */\n  log(driver: LumberjackLogDriver<TPayload>, driverLog: LumberjackLogDriverLog<TPayload>): void {\n    this.#loggingStrategies[driverLog.log.level](driver, driverLog);\n  }\n}\n","import { LumberjackLogLevel } from '../logs/lumberjack-log-level';\nimport { LumberjackLogPayload } from '../logs/lumberjack-log-payload';\nimport { LumberjackLog } from '../logs/lumberjack.log';\nimport { LumberjackTimeService } from '../time/lumberjack-time.service';\n\n/**\n * The generic parameter of `LumberjackLogBuilder` is evaluated to this type\n * when the `LumberjackLogBuilder#withPayload` method is used.\n */\ntype InternalWithStaticPayload = '__LUMBERJACK_INTERNAL_WITH_STATIC_PAYLOAD__' & LumberjackLogPayload;\n\n/**\n * Builder for a log with the specified log level and message.\n *\n * Use this to create a log before passing it to `LumberjackService`.\n */\nexport class LumberjackLogBuilder<TPayload extends LumberjackLogPayload | void = void> {\n  #payload?: TPayload;\n  #scope?: string;\n  readonly #time: LumberjackTimeService;\n  readonly #level: LumberjackLogLevel;\n  readonly #message: string;\n\n  /**\n   * Create a log builder with the specified log level and message.\n   *\n   * @param time Pass the `LumberjackTimeService`. Used for timestamping the log.\n   * @param level The log level.\n   * @param message The log message.\n   */\n  constructor(time: LumberjackTimeService, level: LumberjackLogLevel, message: string) {\n    this.#time = time;\n    this.#level = level;\n    this.#message = message;\n  }\n\n  /**\n   * Create a log with the specified properties and timestamp it.\n   *\n   * @param payloadArg Optional dynamic payload.\n   */\n  build(\n    ...payloadArg: Extract<TPayload, InternalWithStaticPayload> extends never ? [TPayload] : [never?]\n  ): LumberjackLog<Exclude<TPayload, InternalWithStaticPayload>> {\n    return {\n      level: this.#level,\n      message: this.#message,\n      scope: this.#scope,\n      createdAt: this.#time.getUnixEpochTicks(),\n      payload: (payloadArg[0] ?? this.#payload) as Exclude<TPayload, InternalWithStaticPayload>,\n    };\n  }\n\n  /**\n   * Optionally add a static payload to the log.\n   */\n  withPayload(\n    ...payloadArg: TPayload extends void ? [never?] : [TPayload]\n  ): LumberjackLogBuilder<InternalWithStaticPayload | TPayload> {\n    this.#payload = payloadArg[0] as TPayload;\n\n    return this as LumberjackLogBuilder<InternalWithStaticPayload | TPayload>;\n  }\n\n  /**\n   * Add a scope to the log.\n   */\n  withScope(scope: string): LumberjackLogBuilder<TPayload> {\n    this.#scope = scope;\n\n    return this;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { LumberjackLogPayload } from '../logs/lumberjack-log-payload';\nimport { LumberjackTimeService } from '../time/lumberjack-time.service';\n\nimport { LumberjackLogBuilder } from './lumberjack-log.builder';\n\n/**\n * Factory for a log builder with the specified log level and message.\n *\n * Use this to create a log before passing it to `LumberjackService`.\n *\n * Wraps `LumberjackLogBuilder`, supports dependency injection, and allows reuse\n * so that we don't have to new up log builders and pass `LumberjackTimeService`\n * to them.\n */\n@Injectable()\nexport class LumberjackLogFactory<TPayload extends LumberjackLogPayload | void = void> {\n  readonly #time = inject(LumberjackTimeService);\n\n  /**\n   * Create a log builder for a critical log with the specified message.\n   */\n  createCriticalLog(message: string): LumberjackLogBuilder<TPayload> {\n    return new LumberjackLogBuilder(this.#time, 'critical', message);\n  }\n\n  /**\n   * Create a log builder for a debug log with the specified message.\n   */\n  createDebugLog(message: string): LumberjackLogBuilder<TPayload> {\n    return new LumberjackLogBuilder(this.#time, 'debug', message);\n  }\n\n  /**\n   * Create a log builder for an error log with the specified message.\n   */\n  createErrorLog(message: string): LumberjackLogBuilder<TPayload> {\n    return new LumberjackLogBuilder(this.#time, 'error', message);\n  }\n\n  /**\n   * Create a log builder for an info log with the specified message.\n   */\n  createInfoLog(message: string): LumberjackLogBuilder<TPayload> {\n    return new LumberjackLogBuilder(this.#time, 'info', message);\n  }\n\n  /**\n   * Create a log builder for a trace log with the specified message.\n   */\n  createTraceLog(message: string): LumberjackLogBuilder<TPayload> {\n    return new LumberjackLogBuilder(this.#time, 'trace', message);\n  }\n\n  /**\n   * Create a log builder for a warning log with the specified message.\n   */\n  createWarningLog(message: string): LumberjackLogBuilder<TPayload> {\n    return new LumberjackLogBuilder(this.#time, 'warn', message);\n  }\n}\n","import { LumberjackLogDriverError } from '../log-drivers/lumberjack-log-driver-error';\nimport { LumberjackLogPayload } from '../logs/lumberjack-log-payload';\n\n/**\n * Create a text representation of the specified log driver error.\n */\nexport function formatLogDriverError<TPayload extends LumberjackLogPayload | void = void>({\n  error,\n  formattedLog,\n  log,\n  logDriver,\n}: LumberjackLogDriverError<TPayload>): string {\n  const thrownErrorMessage = (error as Error).message ?? String(error);\n  const payloadMessage = log.payload ? ` with payload \"${JSON.stringify(log.payload)}\"` : '';\n\n  return `Could not log message \"${formattedLog}\"${payloadMessage} to ${logDriver.config.identifier}.\\n Error: \"${thrownErrorMessage}\"`;\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { LumberjackLogDriver } from './lumberjack-log-driver';\n\n/**\n * A multi-provider token which log drivers use to register with Lumberjack.\n */\nexport const lumberjackLogDriverToken: InjectionToken<LumberjackLogDriver> = new InjectionToken(\n  '__LUMBERJACK_LOG_DRIVER_TOKEN__'\n);\n","import { inject, Injectable } from '@angular/core';\n\nimport { formatLogDriverError } from '../formatting/format-log-driver-error';\nimport { LumberjackLogFormatter } from '../formatting/lumberjack-log-formatter.service';\nimport { LumberjackLogDriver } from '../log-drivers/lumberjack-log-driver';\nimport { LumberjackLogDriverError } from '../log-drivers/lumberjack-log-driver-error';\nimport { LumberjackLogDriverLogger } from '../log-drivers/lumberjack-log-driver-logger';\nimport { lumberjackLogDriverToken } from '../log-drivers/lumberjack-log-driver.token';\nimport { LumberjackLogLevel } from '../logs/lumberjack-log-level';\nimport { LumberjackLogPayload } from '../logs/lumberjack-log-payload';\nimport { LumberjackLog } from '../logs/lumberjack.log';\nimport { LumberjackTimeService } from '../time/lumberjack-time.service';\n\nconst noReportedLogDriverErrorIndex = -1;\n\n/**\n * Service with programmatic API to pass logs to Lumberjack. Optionally\n * supports a log payload.\n *\n * Lumberjack passes the logs to the registered log drivers based on their\n * configurations.\n *\n * NOTE! Consider extending the `LumberjackLogger` or `ScopedLumberjackLogger`\n * base classes to set up predefined loggers unless you need a programmatic\n * API.\n */\n@Injectable()\nexport class LumberjackService<TPayload extends LumberjackLogPayload | void = void> {\n  /**\n   * The registered log drivers.\n   */\n  readonly #drivers = inject<LumberjackLogDriver<TPayload>[]>(lumberjackLogDriverToken, { optional: true }) ?? [];\n  readonly #driverLogger = inject<LumberjackLogDriverLogger<TPayload>>(LumberjackLogDriverLogger);\n  readonly #logFormatter = inject<LumberjackLogFormatter<TPayload>>(LumberjackLogFormatter);\n  readonly #time = inject(LumberjackTimeService);\n\n  constructor() {\n    this.#drivers = Array.isArray(this.#drivers) ? this.#drivers : [this.#drivers];\n  }\n\n  /**\n   * Pass a log to Lumberjack which will be forwarded to the registered log\n   * drivers based on their configurations.\n   *\n   * NOTE! It's recommended to use `LumberjackLogBuilder` to create the log.\n   *\n   * @param lumberjackLog The Lumberjack log. Optionally supports a log payload.\n   */\n  log(lumberjackLog: LumberjackLog<TPayload>): void {\n    const { log, formattedLog } = this.#logFormatter.formatLog(lumberjackLog);\n\n    this.#logWithErrorHandling(log, formattedLog, this.#drivers);\n  }\n\n  /**\n   * Pass a critical log to Lumberjack which will be forwarded to the registered\n   * log drivers based on their configurations.\n   *\n   * @param message Log message, for example describing an event that happened.\n   * @param payload An optional payload to add to the log.\n   * @param scope An optional scope to add to the {@link LumberjackLog}.\n   */\n  logCritical(message: string, payload?: TPayload, scope?: string): void {\n    this.log({\n      createdAt: this.#time.getUnixEpochTicks(),\n      level: 'critical',\n      message,\n      payload,\n      scope,\n    });\n  }\n\n  /**\n   * Pass an error log to Lumberjack which will be forwarded to the registered\n   * log drivers based on their configurations.\n   *\n   * @param message Log message, for example describing an event that happened.\n   * @param payload An optional payload to add to the log.\n   * @param scope An optional scope to add to the {@link LumberjackLog}.\n   */\n  logError(message: string, payload?: TPayload, scope?: string): void {\n    this.log({\n      createdAt: this.#time.getUnixEpochTicks(),\n      level: 'error',\n      message,\n      payload,\n      scope,\n    });\n  }\n\n  /**\n   * Pass a warning log to Lumberjack which will be forwarded to the registered\n   * log drivers based on their configurations.\n   *\n   * @param message Log message, for example describing an event that happened.\n   * @param payload An optional payload to add to the log.\n   * @param scope An optional scope to add to the {@link LumberjackLog}.\n   */\n  logWarning(message: string, payload?: TPayload, scope?: string): void {\n    this.log({\n      createdAt: this.#time.getUnixEpochTicks(),\n      level: 'warn',\n      message,\n      payload,\n      scope,\n    });\n  }\n\n  /**\n   * Pass an info log to Lumberjack which will be forwarded to the registered\n   * log drivers based on their configurations.\n   *\n   * @param message Log message, for example describing an event that happened.\n   * @param payload An optional payload to add to the log.\n   * @param scope An optional scope to add to the {@link LumberjackLog}.\n   */\n  logInfo(message: string, payload?: TPayload, scope?: string): void {\n    this.log({\n      createdAt: this.#time.getUnixEpochTicks(),\n      level: 'info',\n      message,\n      payload,\n      scope,\n    });\n  }\n\n  /**\n   * Pass a debug log to Lumberjack which will be forwarded to the registered\n   * log drivers based on their configurations.\n   *\n   * @param message Log message, for example describing an event that happened.\n   * @param payload An optional payload to add to the log.\n   * @param scope An optional scope to add to the {@link LumberjackLog}.\n   */\n  logDebug(message: string, payload?: TPayload, scope?: string): void {\n    this.log({\n      createdAt: this.#time.getUnixEpochTicks(),\n      level: 'debug',\n      message,\n      payload,\n      scope,\n    });\n  }\n\n  /**\n   * Pass a trace log to Lumberjack which will be forwarded to the registered\n   * log drivers based on their configurations.\n   *\n   * @param message Log message, for example describing an event that happened.\n   * @param payload An optional payload to add to the log.\n   * @param scope An optional scope to add to the {@link LumberjackLog}.\n   */\n  logTrace(message: string, payload?: TPayload, scope?: string): void {\n    this.log({\n      createdAt: this.#time.getUnixEpochTicks(),\n      level: 'trace',\n      message,\n      payload,\n      scope,\n    });\n  }\n\n  /**\n   * Determine whether a log driver is configured to accept a log with the\n   * specified log level.\n   *\n   * @param driver The configured log driver.\n   * @param logLevel The log's log level.\n   */\n  #canDriveLog(driver: LumberjackLogDriver<TPayload>, logLevel: LumberjackLogLevel): boolean {\n    const hasVerboseLogging = driver.config.levels.length === 1 && driver.config.levels[0] === 'verbose';\n    const acceptsLogLevel = (driver.config.levels as LumberjackLogLevel[]).includes(logLevel);\n\n    return hasVerboseLogging || acceptsLogLevel;\n  }\n\n  /**\n   * Create a log based on the specified log driver error.\n   *\n   * @param driverError The reported log driver error.\n   */\n  #createDriverErrorLog(driverError: LumberjackLogDriverError<TPayload>): LumberjackLog<TPayload> {\n    return {\n      createdAt: this.#time.getUnixEpochTicks(),\n      level: 'error',\n      message: formatLogDriverError(driverError),\n      scope: 'LumberjackLogDriverError',\n    };\n  }\n\n  /**\n   * If any stable log drivers are specified, the log driver errors will be\n   * forward to them. Otherwise, they will be output to the browser console.\n   *\n   * @param stableDrivers The log drivers that haven't failed.\n   * @param driverErrors The reported log driver errors.\n   */\n  #handleDriverErrors(\n    stableDrivers: LumberjackLogDriver<TPayload>[],\n    driverErrors: LumberjackLogDriverError<TPayload>[]\n  ) {\n    if (stableDrivers.length > 0) {\n      this.#logDriverErrorsToStableDrivers(driverErrors, stableDrivers);\n    } else {\n      this.#outputUnhandledDriverErrors(driverErrors);\n    }\n  }\n\n  /**\n   * Pass the log to all the specified log drivers filtered by their log driver\n   * configuration. If the driver throws an error while handling a log, an error\n   * log with the caught error message will be created and passed to the stable\n   * log drivers.\n   *\n   * @param log The log with an optional log payload.\n   * @param formattedLog The text representation of the specified log.\n   * @param drivers The log drivers.\n   * @param driverErrors The reported log driver errors.\n   * @param driverErrorIndex Index of the reported driver error to handle.\n   */\n  #logWithErrorHandling(\n    log: LumberjackLog<TPayload>,\n    formattedLog: string,\n    drivers: LumberjackLogDriver<TPayload>[],\n    driverErrors: LumberjackLogDriverError<TPayload>[] = [],\n    driverErrorIndex = noReportedLogDriverErrorIndex\n  ): void {\n    const stableDrivers: LumberjackLogDriver<TPayload>[] = [];\n\n    drivers\n      .filter((driver) => this.#canDriveLog(driver, log.level))\n      .forEach((driver) => {\n        try {\n          this.#driverLogger.log(driver, { formattedLog, log });\n          stableDrivers.push(driver);\n\n          if (driverErrorIndex !== noReportedLogDriverErrorIndex) {\n            this.#removeHandledError(driverErrorIndex, driverErrors);\n            driverErrorIndex = noReportedLogDriverErrorIndex;\n          }\n        } catch (error) {\n          const caughtDriverError: LumberjackLogDriverError<TPayload> = { error, formattedLog, log, logDriver: driver };\n          driverErrors = [...driverErrors, caughtDriverError];\n        }\n      });\n    this.#handleDriverErrors(stableDrivers, driverErrors);\n  }\n\n  /**\n   * Pass the log driver errors to the specified stable log drivers.\n   *\n   * @param driverErrors The reported log driver errors.\n   * @param stableDrivers The log drivers that haven't failed.\n   */\n  #logDriverErrorsToStableDrivers(\n    driverErrors: LumberjackLogDriverError<TPayload>[],\n    stableDrivers: LumberjackLogDriver<TPayload>[]\n  ) {\n    driverErrors.forEach((error, errorIndex) => {\n      const driverErrorLog = this.#createDriverErrorLog(error);\n\n      this.#logWithErrorHandling(driverErrorLog, driverErrorLog.message, stableDrivers, driverErrors, errorIndex);\n    });\n  }\n\n  /**\n   * Output the specified log driver error to the browser console.\n   *\n   * @param driverError The reported log driver error.\n   */\n  #outputDriverError(driverError: LumberjackLogDriverError<TPayload>): void {\n    const errorMessage = formatLogDriverError(driverError);\n\n    console.error(errorMessage);\n  }\n\n  /**\n   * Output the unhandled log driver errors to the browser console.\n   *\n   * @param driverErrors The reported log driver errors.\n   */\n  #outputUnhandledDriverErrors(driverErrors: LumberjackLogDriverError<TPayload>[]) {\n    driverErrors.forEach((error) => this.#outputDriverError(error));\n  }\n\n  /**\n   * Remove the log driver error with the specified index.\n   *\n   * @param driverErrorIndex The index of the log driver error to remove from\n   *   the specified log driver errors.\n   * @param driverErrors The reported log driver errors.\n   */\n  #removeHandledError(driverErrorIndex: number, driverErrors: LumberjackLogDriverError<TPayload>[]) {\n    driverErrors.splice(driverErrorIndex, 1);\n  }\n}\n","import { LumberjackConfigLevels } from '../logs/lumberjack-config-levels';\n\nexport const defaultDevelopmentLevels: LumberjackConfigLevels = ['verbose'];\n","import { LumberjackConfigLevels } from '../logs/lumberjack-config-levels';\n\nexport const defaultProductionLevels: LumberjackConfigLevels = ['critical', 'error', 'info', 'warn'];\n","import { InjectionToken } from '@angular/core';\n\nimport { LumberjackOptions } from './lumberjack.options';\n\nexport const lumberjackOptionsToken: InjectionToken<LumberjackOptions> = new InjectionToken(\n  '__TEMP_LUMBERJACK_LOG_OPTIONS__'\n);\n","import { Provider } from '@angular/core';\n\nimport { isProductionEnvironmentToken } from '../environment/is-production-environment.token';\nimport { lumberjackFormatLog } from '../formatting/lumberjack-format-log';\nimport { LumberjackLogFormatter } from '../formatting/lumberjack-log-formatter.service';\nimport { LumberjackLogDriverLogger } from '../log-drivers/lumberjack-log-driver-logger';\nimport { LumberjackLogFactory } from '../logging/lumberjack-log-factory';\nimport { LumberjackService } from '../logging/lumberjack.service';\nimport { LumberjackTimeService } from '../time/lumberjack-time.service';\n\nimport { defaultDevelopmentLevels } from './default-development-levels';\nimport { defaultProductionLevels } from './default-production-levels';\nimport { lumberjackConfigToken } from './lumberjack-config.token';\nimport { lumberjackLogDriverConfigToken } from './lumberjack-log-driver-config.token';\nimport { LumberjackLogDriverConfig } from './lumberjack-log-driver.config';\nimport { lumberjackOptionsToken } from './lumberjack-options.token';\nimport { LumberjackConfig } from './lumberjack.config';\nimport { LumberjackOptions } from './lumberjack.options';\n\nexport function configFactory(isProductionEnvironment: boolean, options: LumberjackOptions = {}): LumberjackConfig {\n  return {\n    format: lumberjackFormatLog,\n    levels: isProductionEnvironment ? defaultProductionLevels : defaultDevelopmentLevels,\n    ...options,\n  };\n}\n\nexport function logDriverConfigFactory({ levels }: LumberjackConfig): Omit<LumberjackLogDriverConfig, 'identifier'> {\n  return {\n    levels,\n  };\n}\n\n/**\n * Returns the [dependency-injection providers](https://angular.io/guide/glossary#provider)\n * for the `LumberjackOptions`, `LumberjackConfig` and `LumberjackLogDriverConfig`.\n *\n * @usageNotes\n *\n * The function is useful when you want to bootstrap an application using\n * the `bootstrapApplication` function and want to make available the `Lumberjack` providers.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n *   providers: [\n *    provideLumberjack({...})\n *   ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideLumberjack(options?: LumberjackOptions): Provider[] {\n  return [\n    { provide: lumberjackOptionsToken, useValue: options },\n    {\n      deps: [isProductionEnvironmentToken],\n      provide: lumberjackConfigToken,\n      useFactory: (isProductionEnvironment: boolean) => configFactory(isProductionEnvironment, options),\n    },\n    {\n      deps: [lumberjackConfigToken],\n      provide: lumberjackLogDriverConfigToken,\n      useFactory: logDriverConfigFactory,\n    },\n    { provide: LumberjackService, useClass: LumberjackService },\n    LumberjackLogFormatter,\n    LumberjackLogDriverLogger,\n    LumberjackLogFactory,\n    LumberjackTimeService,\n  ];\n}\n","import { LumberjackLogLevel } from '../logs/lumberjack-log-level';\nimport { LumberjackLogPayload } from '../logs/lumberjack-log-payload';\nimport { LumberjackTimeService } from '../time/lumberjack-time.service';\n\nimport { LumberjackService } from './lumberjack.service';\n\nexport class LumberjackLoggerBuilder<TPayload extends LumberjackLogPayload | void = void> {\n  #scope?: string;\n  #payload?: TPayload;\n  readonly #lumberjack: LumberjackService<TPayload>;\n  readonly #time: LumberjackTimeService;\n  readonly #level: LumberjackLogLevel;\n  readonly #message: string;\n\n  constructor(\n    lumberjack: LumberjackService<TPayload>,\n    time: LumberjackTimeService,\n    level: LumberjackLogLevel,\n    message: string\n  ) {\n    this.#lumberjack = lumberjack;\n    this.#time = time;\n    this.#level = level;\n    this.#message = message;\n  }\n\n  build(): (...payloadArg: TPayload extends void ? [never?] : [TPayload]) => void {\n    return (...payloadArg: TPayload extends void ? [never?] : [TPayload]) => {\n      this.#lumberjack.log({\n        level: this.#level,\n        message: this.#message,\n        scope: this.#scope,\n        createdAt: this.#time.getUnixEpochTicks(),\n        payload: (payloadArg[0] as TPayload) ?? this.#payload,\n      });\n    };\n  }\n\n  /**\n   * Add a scope to the `LumberjackLog`\n   */\n  withScope(scope: string): LumberjackLoggerBuilder<TPayload> {\n    this.#scope = scope;\n\n    return this;\n  }\n\n  /**\n   * Add payload with custom data to the `LumberjackLog`\n   */\n  withPayload(...payloadArg: TPayload extends void ? [never?] : [TPayload]): LumberjackLoggerBuilder {\n    this.#payload = payloadArg[0] as TPayload;\n\n    return this as unknown as LumberjackLoggerBuilder;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { LumberjackLogLevel } from '../logs/lumberjack-log-level';\nimport { LumberjackLogPayload } from '../logs/lumberjack-log-payload';\nimport { LumberjackTimeService } from '../time/lumberjack-time.service';\n\nimport { LumberjackLoggerBuilder } from './lumberjack-logger.builder';\nimport { LumberjackService } from './lumberjack.service';\n\n/**\n * A logger holds methods that log a predefined log.\n *\n * Implement application- and library-specific loggers by extending this base\n * class. Optionally supports a log payload.\n *\n * Each protected method on this base class returns a logger builder.\n */\n@Injectable()\nexport abstract class LumberjackLogger<TPayload extends LumberjackLogPayload | void = void> {\n  protected readonly lumberjack = inject<LumberjackService<TPayload>>(LumberjackService);\n  protected readonly time = inject(LumberjackTimeService);\n\n  /**\n   * Create a logger builder for a critical log with the specified message.\n   */\n  protected createCriticalLogger(message: string): LumberjackLoggerBuilder<TPayload> {\n    return this.createLoggerBuilder('critical', message);\n  }\n\n  /**\n   * Create a logger builder for a debug log with the specified message.\n   */\n  protected createDebugLogger(message: string): LumberjackLoggerBuilder<TPayload> {\n    return this.createLoggerBuilder('debug', message);\n  }\n\n  /**\n   * Create a logger builder for an error log with the specified message.\n   */\n  protected createErrorLogger(message: string): LumberjackLoggerBuilder<TPayload> {\n    return this.createLoggerBuilder('error', message);\n  }\n\n  /**\n   * Create a logger builder for an info log with the specified message.\n   */\n  protected createInfoLogger(message: string): LumberjackLoggerBuilder<TPayload> {\n    return this.createLoggerBuilder('info', message);\n  }\n\n  /**\n   * Create a logger builder for a trace log with the specified message.\n   */\n  protected createTraceLogger(message: string): LumberjackLoggerBuilder<TPayload> {\n    return this.createLoggerBuilder('trace', message);\n  }\n\n  /**\n   * Create a logger builder for a warning log with the specified message.\n   */\n  protected createWarningLogger(message: string): LumberjackLoggerBuilder<TPayload> {\n    return this.createLoggerBuilder('warn', message);\n  }\n\n  /**\n   * Create a logger builder for a log with the specified log level and message.\n   */\n  protected createLoggerBuilder(level: LumberjackLogLevel, message: string): LumberjackLoggerBuilder<TPayload> {\n    return new LumberjackLoggerBuilder<TPayload>(this.lumberjack, this.time, level, message);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { LumberjackLogLevel } from '../logs/lumberjack-log-level';\nimport { LumberjackLogPayload } from '../logs/lumberjack-log-payload';\nimport { LumberjackTimeService } from '../time/lumberjack-time.service';\n\nimport { LumberjackLoggerBuilder } from './lumberjack-logger.builder';\nimport { LumberjackLogger } from './lumberjack-logger.service';\nimport { LumberjackService } from './lumberjack.service';\n\n/**\n * A scoped logger holds methods that log a predefined log sharing a scope.\n *\n * Implement application- and library-specific loggers by extending this base\n * class. Optionally supports a log payload.\n *\n * Each protected method on this base class returns a logger builder with a\n * predefined scope.\n */\n@Injectable()\nexport abstract class ScopedLumberjackLogger<\n  TPayload extends LumberjackLogPayload | void = void\n> extends LumberjackLogger<TPayload> {\n  protected override readonly lumberjack = inject<LumberjackService<TPayload>>(LumberjackService);\n  protected override readonly time = inject(LumberjackTimeService);\n\n  abstract readonly scope: string;\n\n  /**\n   * Create a logger builder for a log with the shared scope as well as the\n   * specified log level and message.\n   */\n  protected override createLoggerBuilder(\n    level: LumberjackLogLevel,\n    message: string\n  ): LumberjackLoggerBuilder<TPayload> {\n    return new LumberjackLoggerBuilder<TPayload>(this.lumberjack, this.time, level, message).withScope(this.scope);\n  }\n}\n","/*\n * Public API surface of @ngworker/lumberjack\n */\n\n// Configuration\nexport { lumberjackConfigToken } from './lib/configuration/lumberjack-config.token';\nexport { LumberjackFormatFunction } from './lib/configuration/lumberjack-format-function';\nexport { LumberjackLogDriverConfig } from './lib/configuration/lumberjack-log-driver.config';\nexport { lumberjackLogDriverConfigToken } from './lib/configuration/lumberjack-log-driver-config.token';\nexport { LumberjackConfig } from './lib/configuration/lumberjack.config';\nexport { LumberjackOptions } from './lib/configuration/lumberjack.options';\nexport { provideLumberjack } from './lib/configuration/provide-lumberjack';\n\n// Log drivers\nexport { LumberjackLogDriver } from './lib/log-drivers/lumberjack-log-driver';\nexport { LumberjackLogDriverLog } from './lib/log-drivers/lumberjack-log-driver.log';\nexport { lumberjackLogDriverToken } from './lib/log-drivers/lumberjack-log-driver.token';\n\n// Logging\nexport { LumberjackLogger } from './lib/logging/lumberjack-logger.service';\nexport { ScopedLumberjackLogger } from './lib/logging/scoped-lumberjack-logger.service';\nexport { LumberjackService } from './lib/logging/lumberjack.service';\nexport { LumberjackLogFactory } from './lib/logging/lumberjack-log-factory';\nexport { LumberjackLogBuilder } from './lib/logging/lumberjack-log.builder';\n\n// Logs\nexport { LumberjackConfigLevels } from './lib/logs/lumberjack-config-levels';\nexport { LumberjackLevel } from './lib/logs/lumberjack-level';\nexport { LumberjackLog } from './lib/logs/lumberjack.log';\nexport { LumberjackLogLevel } from './lib/logs/lumberjack-log-level';\nexport { LumberjackLogPayload } from './lib/logs/lumberjack-log-payload';\n\n// Time\nexport { LumberjackTimeService } from './lib/time/lumberjack-time.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}