{"version":3,"file":"ngx-grpc-core.mjs","sources":["../../../packages/core/src/lib/injection-tokens.ts","../../../packages/core/src/lib/grpc-handler.ts","../../../packages/core/src/lib/grpc-core.module.ts","../../../packages/core/src/lib/grpc-logger-interceptor.ts","../../../packages/core/src/lib/grpc-logger.module.ts","../../../packages/core/src/lib/grpc-rx-operators.ts","../../../packages/core/src/ngx-grpc-core.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Use this injection token to register the GrpcClientFactory\n *\n * Example:\n *\n * ```\n * providers: [\n *   { provide: GRPC_CLIENT_FACTORY, useClass: MyClientFactory },\n * ]\n * ```\n */\nexport const GRPC_CLIENT_FACTORY = new InjectionToken('GRPC_CLIENT_FACTORY');\n\n/**\n * Use this injection token to add interceptors\n *\n * Example:\n *\n * ```\n * providers: [\n *   { provide: GRPC_INTERCEPTORS, useClass: MyInterceptor, multi: true },\n * ]\n * ```\n */\nexport const GRPC_INTERCEPTORS = new InjectionToken('GRPC_INTERCEPTORS');\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { GrpcCallType, GrpcEvent, GrpcMessage, GrpcRequest } from '@ngx-grpc/common';\nimport { isObservable, Observable } from 'rxjs';\nimport { GrpcInterceptor } from './grpc-interceptor';\nimport { GRPC_INTERCEPTORS } from './injection-tokens';\n\n/**\n * Core gRPC transport class. Implements creation and binding of RPCs to the clients.\n * There is a root GrpcHandler that handles all initial requests;\n * however for every interception a new instance of GrpcHandler is created and passed to the interceptor\n */\n@Injectable()\nexport class GrpcHandler {\n\n  private interceptors: GrpcInterceptor[];\n\n  constructor(\n    @Optional() @Inject(GRPC_INTERCEPTORS) configuredInterceptors: GrpcInterceptor | GrpcInterceptor[],\n  ) {\n    this.interceptors = !configuredInterceptors ? [] : Array.isArray(configuredInterceptors) ? configuredInterceptors : [configuredInterceptors];\n  }\n\n  /**\n   * Handles the gRPC request passing it through the interceptors array\n   * Recursively calls all interceptors with a new instance of the GrpcHandler\n   *\n   * @param request a GrpcRequest to execute\n   * @returns Observable of events returned by the GrpcClient implementation\n   */\n  handle<Q extends GrpcMessage, S extends GrpcMessage>(request: GrpcRequest<Q, S>): Observable<GrpcEvent<S>> {\n    const interceptors = (this.interceptors || []).slice();\n    const interceptor = interceptors.shift();\n\n    if (interceptor) {\n      return interceptor.intercept(request, new GrpcHandler(interceptors));\n    }\n\n    switch (request.type) {\n      case GrpcCallType.unary: return request.client.unary(\n        request.path,\n        this.message(request.requestData),\n        request.requestMetadata,\n        request.requestClass,\n        request.responseClass,\n      );\n      case GrpcCallType.serverStream: return request.client.serverStream(\n        request.path,\n        this.message(request.requestData),\n        request.requestMetadata,\n        request.requestClass,\n        request.responseClass,\n      );\n      case GrpcCallType.clientStream: return request.client.clientStream(\n        request.path,\n        this.stream(request.requestData),\n        request.requestMetadata,\n        request.requestClass,\n        request.responseClass,\n      );\n      case GrpcCallType.bidiStream: return request.client.bidiStream(\n        request.path,\n        this.stream(request.requestData),\n        request.requestMetadata,\n        request.requestClass,\n        request.responseClass,\n      );\n    }\n  }\n\n  private message<Q extends GrpcMessage>(p: Q | Observable<Q>): Q {\n    if (!isObservable(p)) {\n      return p;\n    }\n\n    throw new Error('Expected Message, got Observable');\n  }\n\n  private stream<Q extends GrpcMessage>(p: Q | Observable<Q>): Observable<Q> {\n    if (isObservable(p)) {\n      return p;\n    }\n\n    throw new Error('Expected Observable, got message');\n  }\n\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { GrpcHandler } from './grpc-handler';\n\n@NgModule()\nexport class GrpcCoreModule {\n\n  /**\n   * Create GrpcCoreModule for using in AppModule (application root module)\n   */\n  public static forRoot(): ModuleWithProviders<GrpcCoreModule> {\n    return {\n      ngModule: GrpcCoreModule,\n      providers: [\n        GrpcHandler,\n      ],\n    };\n  }\n\n  /**\n   * Create GrpcCoreModule for using in children modules (incl. lazy modules)\n   */\n  public static forChild(): ModuleWithProviders<GrpcCoreModule> {\n    return {\n      ngModule: GrpcCoreModule,\n      providers: [\n        GrpcHandler,\n      ],\n    };\n  }\n\n}\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { GrpcDataEvent, GrpcEvent, GrpcMessage, GrpcRequest } from '@ngx-grpc/common';\nimport { isObservable, Observable, of } from 'rxjs';\nimport { share, tap } from 'rxjs/operators';\nimport { GrpcHandler } from './grpc-handler';\nimport { GrpcInterceptor } from './grpc-interceptor';\n\n/**\n * A configuration for GrpcLoggerInterceptor\n *\n * Example:\n *\n * ```\n * providers: [\n *   { provide: GRPC_LOGGER_SETTINGS, useValue: { enabled: true } },\n * ]\n * ```\n *\n * or more complex:\n *\n * ```\n * providers: [\n *   { provide: GRPC_LOGGER_SETTINGS, useFactory: () => { enabled: localStorage.getItem('GRPC_LOGGER_SETTINGS') === 'true' || !environment.prod } },\n * ]\n * ```\n */\nexport const GRPC_LOGGER_SETTINGS = new InjectionToken('GRPC_LOGGER_SETTINGS');\n\n\n/**\n * A configuration definition for GrpcLoggerInterceptor\n */\nexport interface GrpcLoggerSettings {\n  /**\n   * Enables / disables the output, default true\n   */\n  enabled?: boolean;\n  /**\n   * Includes client settings into the logs, default true\n   */\n  logClientSettings?: boolean;\n  /**\n   * Includes request metadata into the logs, default true\n   */\n  logMetadata?: boolean;\n  /**\n   * Logs events with status code OK (0), default false\n   */\n  logStatusCodeOk?: boolean;\n  /**\n   * Request mapper function, defines what output is generated for the given message.\n   * The default implementation is `(msg) => msg.toObject()`.\n   * According to your preferences you might choose e.g. `(msg) => msg.toProtobufJSON()` instead.\n   */\n  requestMapper?: (msg: GrpcMessage) => any;\n  /**\n   * Response mapper function, defines what output is generated for the given message.\n   * The default implementation is `(msg) => msg.toObject()`.\n   * According to your preferences you might choose e.g. `(msg) => msg.toProtobufJSON()` instead.\n   */\n  responseMapper?: (msg: GrpcMessage) => any;\n}\n\n/**\n * Interceptor that implements logging of every request to the browser console\n *\n * Can be enabled / disabled by GRPC_LOGGER_ENABLED injection token\n */\n@Injectable()\nexport class GrpcLoggerInterceptor implements GrpcInterceptor {\n\n  private static requestId = 0;\n\n  private clientDataStyle = 'color: #eb0edc;';\n  private dataStyle = 'color: #5c7ced;';\n  private errorStyle = 'color: #f00505;';\n  private statusOkStyle = 'color: #0ffcf5;';\n\n  private settings: GrpcLoggerSettings;\n\n  constructor(@Optional() @Inject(GRPC_LOGGER_SETTINGS) settings: GrpcLoggerSettings = {}) {\n    this.settings = {\n      enabled: settings.enabled ?? true,\n      logClientSettings: settings.logClientSettings ?? true,\n      logMetadata: settings.logMetadata ?? true,\n      logStatusCodeOk: settings.logStatusCodeOk ?? false,\n      requestMapper: settings.requestMapper ?? ((msg: GrpcMessage) => msg.toObject()),\n      responseMapper: settings.responseMapper ?? ((msg: GrpcMessage) => msg.toObject()),\n    };\n  }\n\n  intercept<Q extends GrpcMessage, S extends GrpcMessage>(request: GrpcRequest<Q, S>, next: GrpcHandler): Observable<GrpcEvent<S>> {\n    if (this.settings.enabled) {\n      const id = ++GrpcLoggerInterceptor.requestId;\n      const start = Date.now();\n\n      // check if client streaming, then push each value separately\n      if (isObservable(request.requestData)) {\n        request.requestData = request.requestData.pipe(\n          tap(msg => {\n            console.groupCollapsed(`%c#${id}: ${Date.now() - start}ms -> ${request.path}`, this.clientDataStyle);\n            console.log('%c>>', this.clientDataStyle, this.settings.requestMapper(msg));\n            console.groupEnd();\n          }),\n        );\n      }\n\n      // handle unary calls and server streaming in the same manner\n      return next.handle(request).pipe(\n        tap(event => {\n          const style = event instanceof GrpcDataEvent ? this.dataStyle : event.statusCode !== 0 ? this.errorStyle : this.statusOkStyle;\n\n          const openGroup = () => console.groupCollapsed(`%c#${id}: ${Date.now() - start}ms -> ${request.path}`, style);\n\n          const printSettings = () => {\n            if (this.settings.logClientSettings) {\n              console.log('%csc', style, request.client.getSettings());\n            }\n          };\n\n          const printMetadata = () => {\n            if (this.settings.logMetadata) {\n              console.log('%c**', style, request.requestMetadata.toObject());\n            }\n          };\n\n          const printRequest = () => console.log('%c>>', style, isObservable(request.requestData) ? '<see above>' : this.settings.requestMapper(request.requestData));\n\n          const closeGroup = () => console.groupEnd();\n\n          if (event instanceof GrpcDataEvent) {\n            openGroup();\n            printSettings();\n            printRequest();\n            printMetadata();\n            console.log('%c<<', style, this.settings.responseMapper(event.data));\n            closeGroup();\n          } else if (event.statusCode !== 0) {\n            openGroup();\n            printSettings();\n            printRequest();\n            printMetadata();\n            console.log('%c<<', style, event);\n            closeGroup();\n          } else if (event.statusCode === 0 && this.settings.logStatusCodeOk) {\n            openGroup();\n            printSettings();\n            printRequest();\n            printMetadata();\n            console.log('%c<<', style, event);\n            closeGroup();\n          }\n        }),\n      );\n    }\n\n    return next.handle(request);\n  }\n\n}\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { GrpcLoggerInterceptor, GrpcLoggerSettings, GRPC_LOGGER_SETTINGS } from './grpc-logger-interceptor';\nimport { GRPC_INTERCEPTORS } from './injection-tokens';\n\nexport interface GrpcLoggerRootOptions {\n  settings: GrpcLoggerSettings;\n}\n\nexport interface GrpcLoggerChildOptions {\n  settings: GrpcLoggerSettings;\n}\n\n@NgModule()\nexport class GrpcLoggerModule {\n\n  /**\n   * Create GrpcLoggerModule for using in AppModule (application root module)\n   * You can provide the options here instead of injecting corresponding tokens separately\n   */\n  public static forRoot(options?: GrpcLoggerRootOptions): ModuleWithProviders<GrpcLoggerModule> {\n    const providers: Provider[] = [{ provide: GRPC_INTERCEPTORS, useClass: GrpcLoggerInterceptor, multi: true }];\n\n    if (options?.settings) {\n      providers.push({ provide: GRPC_LOGGER_SETTINGS, useValue: options.settings });\n    }\n\n    return { ngModule: GrpcLoggerModule, providers };\n  }\n\n  /**\n   * Create GrpcCoreModule for using in children modules (incl. lazy modules)\n   * You can provide the options here instead of injecting corresponding tokens separately\n   */\n  public static forChild(options?: GrpcLoggerChildOptions): ModuleWithProviders<GrpcLoggerModule> {\n    const providers: Provider[] = [{ provide: GRPC_INTERCEPTORS, useClass: GrpcLoggerInterceptor, multi: true }];\n\n    if (options?.settings) {\n      providers.push({ provide: GRPC_LOGGER_SETTINGS, useValue: options.settings });\n    }\n\n    return { ngModule: GrpcLoggerModule, providers };\n  }\n\n}\n","import { GrpcDataEvent, GrpcEvent, GrpcMessage, GrpcStatusEvent } from '@ngx-grpc/common';\nimport { Observable, of, throwError } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\n\n/**\n * RxJS operator\n * When applied to gRPC events emits error for status events with a non-zero code (includes throwStatusErrors)\n *\n * @return Observable of gRPC events\n */\nexport function throwStatusErrors<T extends GrpcMessage>() {\n  return (source$: Observable<GrpcEvent<T>>) => source$.pipe(\n    switchMap(event => event instanceof GrpcStatusEvent && event.statusCode ? throwError(event) : of(event)),\n  );\n}\n\n/**\n * RxJS operator\n * When applied to gRPC events stream extracts and returns only messages\n *\n * @return Observable of messages\n */\nexport function takeMessages<T extends GrpcMessage>() {\n  return (source$: Observable<GrpcEvent<T>>) => source$.pipe(\n    filter(event => event instanceof GrpcDataEvent),\n    map((event: GrpcDataEvent<T>) => event.data),\n  );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}