UNPKG

@ngworker/lumberjack

Version:

Lumberjack is a versatile Angular logging library, specifically designed to be extended and customized

1 lines 13.8 kB
{"version":3,"file":"ngworker-lumberjack-http-driver.mjs","sources":["../../../../../packages/ngworker/lumberjack/http-driver/src/lib/configuration/lumberjack-http-driver-config.token.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/lib/errors/lumberjack-http-driver.error.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/lib/operators/retry-with-delay.operator.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/lib/log-drivers/lumberjack-http.driver.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/lib/configuration/lumberjack-http-driver.provider.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/lib/configuration/provide-lumberjack-http-driver.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/index.ts","../../../../../packages/ngworker/lumberjack/http-driver/src/ngworker-lumberjack-http-driver.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { LumberjackHttpDriverInternalConfig } from './lumberjack-http-driver-internal.config';\n\nexport const lumberjackHttpDriverConfigToken: InjectionToken<LumberjackHttpDriverInternalConfig> = new InjectionToken(\n '__LUMBERJACK_HTTP_DRIVER_CONFIG__'\n);\n","export class LumberjackHttpDriverError extends Error {\n constructor(message = 'LumberjackHttpDriverError') {\n super(message);\n this.name = 'LumberjackHttpDriverError';\n\n // Non-standard V8 function for maintaining a stack trace\n const ErrorWithCaptureStackTrace = Error as unknown as Error & {\n // eslint-disable-next-line @typescript-eslint/ban-types\n captureStackTrace?: (targetObject: object, constructorOpt?: Function) => void;\n };\n ErrorWithCaptureStackTrace.captureStackTrace?.(this, this.constructor);\n }\n}\n","import { catchError, MonoTypeOperatorFunction, pipe, retry, throwError } from 'rxjs';\n\nimport { LumberjackHttpDriverError } from '../errors/lumberjack-http-driver.error';\n\nexport const retryWithDelay = <T>(maxRetries: number, delayMs: number): MonoTypeOperatorFunction<T> =>\n pipe(\n retry<T>({ count: maxRetries, delay: delayMs }),\n catchError(() => throwError(() => new LumberjackHttpDriverError(`Failed after ${maxRetries} retries.`)))\n );\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, NgZone, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { LumberjackLog, LumberjackLogDriver, LumberjackLogDriverLog, LumberjackLogPayload } from '@ngworker/lumberjack';\n\nimport { lumberjackHttpDriverConfigToken } from '../configuration/lumberjack-http-driver-config.token';\nimport { LumberjackHttpLog } from '../logs/lumberjack-http.log';\nimport { retryWithDelay } from '../operators/retry-with-delay.operator';\n\n/**\n * The HTTP driver transports logs to the configured web API log store using the\n * POST HTTP verb.\n *\n * It sends the formatted log and the log including the optional log payload.\n */\n@Injectable()\nexport class LumberjackHttpDriver<TPayload extends LumberjackLogPayload | void = void>\n implements LumberjackLogDriver<TPayload>, OnDestroy\n{\n static readonly driverIdentifier = 'LumberjackHttpDriver';\n\n readonly #http = inject(HttpClient);\n readonly #ngZone = inject(NgZone);\n readonly #subscriptions = new Subscription();\n\n readonly config = inject(lumberjackHttpDriverConfigToken);\n\n ngOnDestroy(): void {\n this.#subscriptions.unsubscribe();\n }\n\n /**\n * Send critical log to the log store.\n *\n * @param param0 The log and its text representation.\n */\n logCritical({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n this.#sendLog(formattedLog, log);\n }\n\n /**\n * Send debug log to the log store.\n *\n * @param param0 The log and its text representation.\n */\n logDebug({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n this.#sendLog(formattedLog, log);\n }\n\n /**\n * Send error log to the log store.\n *\n * @param param0 The log and its text representation.\n */\n logError({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n this.#sendLog(formattedLog, log);\n }\n\n /**\n * Send info log to the log store.\n *\n * @param param0 The log and its text representation.\n */\n logInfo({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n this.#sendLog(formattedLog, log);\n }\n\n /**\n * Send trace log to the log store.\n *\n * @param param0 The log and its text representation.\n */\n logTrace({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n this.#sendLog(formattedLog, log);\n }\n\n /**\n * Send warning log to the log store.\n *\n * @param param0 The log and its text representation.\n */\n logWarning({ formattedLog, log }: LumberjackLogDriverLog<TPayload>): void {\n this.#sendLog(formattedLog, log);\n }\n\n /**\n * Send log to the log store.\n *\n * This is done outside of the `NgZone` as there's no need this to trigger\n * change detection.\n *\n * Failed HTTP requests are retried according to the configured retry options.\n *\n * When the last retry fails, the driver will throw a `LumberjackHttpDriverError`\n * and the log being sent gets discarded.\n *\n * @param formattedLog The log's text representation.\n * @param log The log.\n */\n #sendLog(formattedLog: string, log: LumberjackLog<TPayload>): void {\n const { origin, retryOptions, storeUrl } = this.config;\n const httpLog: LumberjackHttpLog<TPayload> = { formattedLog, origin, log };\n\n this.#ngZone.runOutsideAngular(() => {\n this.#subscriptions.add(\n this.#http\n .post<void>(storeUrl, httpLog)\n .pipe(retryWithDelay(retryOptions.maxRetries, retryOptions.delayMs))\n // HTTP requests complete after the response is received, so there's no need to unsubscribe.\n .subscribe(() => {\n // No-op\n })\n );\n });\n }\n}\n","import { Provider } from '@angular/core';\n\nimport { lumberjackLogDriverToken } from '@ngworker/lumberjack';\n\nimport { LumberjackHttpDriver } from '../log-drivers/lumberjack-http.driver';\n\nexport const lumberjackHttpDriverProvider: Provider = {\n provide: lumberjackLogDriverToken,\n useClass: LumberjackHttpDriver,\n multi: true,\n};\n","import { provideHttpClient } from '@angular/common/http';\nimport { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\n\nimport { LumberjackLogDriverConfig, lumberjackLogDriverConfigToken } from '@ngworker/lumberjack';\n\nimport { LumberjackHttpDriver } from '../log-drivers/lumberjack-http.driver';\n\nimport { lumberjackHttpDriverConfigToken } from './lumberjack-http-driver-config.token';\nimport { LumberjackHttpDriverInternalConfig } from './lumberjack-http-driver-internal.config';\nimport { LumberjackHttpDriverConfig } from './lumberjack-http-driver.config';\nimport { LumberjackHttpDriverOptions } from './lumberjack-http-driver.options';\nimport { lumberjackHttpDriverProvider } from './lumberjack-http-driver.provider';\n\nexport type LumberjackHttpDriverConfigurationKind = 'options' | 'config';\nexport type LumberjackHttpDriverConfiguration<Kind extends LumberjackHttpDriverConfigurationKind> = {\n kind: Kind;\n providers: EnvironmentProviders;\n};\n\nfunction makeLumberjackHttpConfiguration<Kind extends LumberjackHttpDriverConfigurationKind>(\n kind: Kind,\n providers: Provider[]\n): LumberjackHttpDriverConfiguration<Kind> {\n return {\n kind,\n providers: makeEnvironmentProviders(providers),\n };\n}\n\nexport function withHttpConfig(config: LumberjackHttpDriverConfig): LumberjackHttpDriverConfiguration<'config'> {\n return makeLumberjackHttpConfiguration('config', [\n {\n provide: lumberjackHttpDriverConfigToken,\n deps: [lumberjackLogDriverConfigToken],\n useFactory: (logDriverConfig: LumberjackLogDriverConfig): LumberjackHttpDriverInternalConfig => ({\n ...logDriverConfig,\n identifier: LumberjackHttpDriver.driverIdentifier,\n ...config,\n }),\n },\n ]);\n}\n\nexport function withHttpOptions(options: LumberjackHttpDriverOptions): LumberjackHttpDriverConfiguration<'options'> {\n return makeLumberjackHttpConfiguration('options', [\n {\n provide: lumberjackHttpDriverConfigToken,\n deps: [lumberjackLogDriverConfigToken],\n useFactory: (logDriverConfig: LumberjackLogDriverConfig): LumberjackHttpDriverInternalConfig => ({\n ...logDriverConfig,\n identifier: LumberjackHttpDriver.driverIdentifier,\n ...options,\n }),\n },\n ]);\n}\n\nexport type HttpClientFeatures = Parameters<typeof provideHttpClient>;\n\n/**\n * Returns the [dependency-injection providers](https://angular.io/guide/glossary#provider)\n *\n * for the `LumberjackHttpDriver` and its `LumberjackHttpDriverConfig`.\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 `LumberjackHttpDriver` providers.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideLumberjack({...}),\n * provideLumberjackHttpDriver({...})\n * ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideLumberjackHttpDriver<Kind extends LumberjackHttpDriverConfigurationKind>(\n configuration: LumberjackHttpDriverConfiguration<Kind>,\n ...features: HttpClientFeatures\n): EnvironmentProviders[] {\n return [\n provideHttpClient(...features),\n makeEnvironmentProviders([lumberjackHttpDriverProvider]),\n configuration.providers,\n ];\n}\n","/*\n * Public API surface of @ngworker/lumberjack/http-driver\n */\n\n// Configuration\nexport { LumberjackHttpDriverRetryOptions } from './lib/configuration/lumberjack-http-driver-retry.options';\nexport { LumberjackHttpDriverConfig } from './lib/configuration/lumberjack-http-driver.config';\nexport { LumberjackHttpDriverOptions } from './lib/configuration/lumberjack-http-driver.options';\nexport {\n provideLumberjackHttpDriver,\n withHttpConfig,\n withHttpOptions,\n} from './lib/configuration/provide-lumberjack-http-driver';\n\n// Errors\nexport { LumberjackHttpDriverError } from './lib/errors/lumberjack-http-driver.error';\n// Log drivers\nexport { LumberjackHttpDriver } from './lib/log-drivers/lumberjack-http.driver';\n// Logs\nexport { LumberjackHttpLog } from './lib/logs/lumberjack-http.log';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}