@ngworker/lumberjack
Version:
Lumberjack is a versatile Angular logging library, specifically designed to be extended and customized
1 lines • 54.7 kB
Source Map (JSON)
{"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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