{"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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"}