{"version":3,"file":"ngx-grpc-worker-client.mjs","sources":["../../../packages/worker-client/src/lib/tokens.ts","../../../packages/worker-client/src/lib/grpc-worker-gateway.ts","../../../packages/worker-client/src/lib/grpc-worker-client.ts","../../../packages/worker-client/src/lib/grpc-worker-client.module.ts","../../../packages/worker-client/src/ngx-grpc-worker-client.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Registers a worker implementation, generated by Angular CLI and implemented according documentation\n *\n * Example:\n *\n * ```\n * providers: [\n *   { provide: GRPC_WORKER, useFactory: () => new Worker('./grpc.worker', { type: 'module' }) },\n * ]\n * ```\n */\nexport const GRPC_WORKER = new InjectionToken<Worker>('GRPC_WORKER');\n\n/**\n * Default configuration for grpc-web clients running in worker. Will be used for every GrpcWorkerClient unless service-specific config is provided\n *\n * Example:\n *\n * ```\n * providers: [\n *   { provide: GRPC_WORKER_CLIENT_DEFAULT_SETTINGS, useClass: { host: 'localhost:4321' } },\n * ]\n * ```\n */\nexport const GRPC_WORKER_CLIENT_DEFAULT_SETTINGS = new InjectionToken('GRPC_WORKER_CLIENT_DEFAULT_SETTINGS');\n","import { Inject, Injectable } from '@angular/core';\nimport { GrpcDataEvent, GrpcEvent, GrpcMessage, GrpcMetadata, GrpcStatusEvent } from '@ngx-grpc/common';\nimport { GrpcWorkerApi } from '@ngx-grpc/worker';\nimport { Metadata } from 'grpc-web';\nimport { Observable, Observer } from 'rxjs';\nimport { GrpcWorkerClientSettings } from './grpc-worker-client';\nimport { GRPC_WORKER } from './tokens';\n\n/** @dynamic */\n@Injectable()\nexport class GrpcWorkerGateway {\n\n  private lastId = 0;\n\n  private connections = new Map<number, Observer<any>>();\n\n  constructor(\n    @Inject(GRPC_WORKER) private worker: Worker,\n  ) {\n    worker.onmessage = (event: MessageEvent) => {\n      const data = event.data as GrpcWorkerApi.GrpcWorkerMessageRPCResponse<any>;\n      const connection = this.connections.get(data.id);\n\n      if (connection && data.type === GrpcWorkerApi.GrpcWorkerMessageType.rpcResponse) {\n        switch (data.responseType) {\n          case GrpcWorkerApi.GrpcWorkerMessageRPCResponseType.error:\n            connection.next(new GrpcStatusEvent(data.error.code, data.error.message, (data.error as any).metadata));\n            connection.complete();\n            this.connections.delete(data.id);\n            break;\n          case GrpcWorkerApi.GrpcWorkerMessageRPCResponseType.status:\n            connection.next(new GrpcStatusEvent(data.status.code, data.status.details, new GrpcMetadata(data.status.metadata)));\n            break;\n          case GrpcWorkerApi.GrpcWorkerMessageRPCResponseType.data:\n            connection.next(new GrpcDataEvent(data.response));\n            break;\n          case GrpcWorkerApi.GrpcWorkerMessageRPCResponseType.end:\n            connection.complete();\n            this.connections.delete(data.id);\n            break;\n        }\n      }\n    };\n  }\n\n  configureServiceClient(serviceId: string, settings: GrpcWorkerClientSettings) {\n    this.worker.postMessage({ type: GrpcWorkerApi.GrpcWorkerMessageType.serviceClientConfig, serviceId, settings } as GrpcWorkerApi.GrpcWorkerMessageServiceClientConfig);\n  }\n\n  callUnaryFromWorker<Q extends GrpcMessage, S extends GrpcMessage>(serviceId: string, path: string, request: Q, metadata: Metadata): Observable<GrpcEvent<S>> {\n    return new Observable(observer => {\n      const id = this.createRequestId();\n\n      this.connections.set(id, observer);\n\n      this.worker.postMessage({\n        type: GrpcWorkerApi.GrpcWorkerMessageType.rpcRequest,\n        id,\n        serviceId,\n        path,\n        request,\n        metadata,\n      } as GrpcWorkerApi.GrpcWorkerMessageRPCRequest<Q>);\n\n      return () => this.closeConnection(id);\n    });\n  }\n\n  callServerStreamFromWorker<Q extends GrpcMessage, S extends GrpcMessage>(serviceId: string, path: string, request: Q, metadata: Metadata): Observable<GrpcEvent<S>> {\n    return new Observable(observer => {\n      const id = this.createRequestId();\n\n      this.connections.set(id, observer);\n\n      this.worker.postMessage({\n        type: GrpcWorkerApi.GrpcWorkerMessageType.rpcRequest,\n        id,\n        serviceId,\n        path,\n        request,\n        metadata,\n      } as GrpcWorkerApi.GrpcWorkerMessageRPCRequest<Q>);\n\n      return () => this.closeConnection(id);\n    });\n  }\n\n  closeConnection(id: number) {\n    this.worker.postMessage({\n      type: GrpcWorkerApi.GrpcWorkerMessageType.rpcCancel,\n      id,\n    } as GrpcWorkerApi.GrpcWorkerMessageRPCCancel);\n\n    this.connections.delete(id);\n  }\n\n  private createRequestId() {\n    return this.lastId++;\n  }\n\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { GrpcClient, GrpcClientFactory, GrpcDataEvent, GrpcEvent, GrpcMessage, GrpcMessageClass, GrpcMetadata } from '@ngx-grpc/common';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { GrpcWorkerGateway } from './grpc-worker-gateway';\nimport { GRPC_WORKER_CLIENT_DEFAULT_SETTINGS } from './tokens';\n\n/**\n * Settings for the chosen implementation of GrpcClient\n */\nexport interface GrpcWorkerClientSettings {\n  host: string;\n  format?: string;\n  suppressCorsPreflight?: boolean;\n  withCredentials?: boolean;\n}\n\n/**\n * GrpcClientFactory implementation based on grpc-web running in worker\n */\n@Injectable()\nexport class GrpcWorkerClientFactory implements GrpcClientFactory<GrpcWorkerClientSettings> {\n\n  constructor(\n    @Optional() @Inject(GRPC_WORKER_CLIENT_DEFAULT_SETTINGS) private defaultSettings: GrpcWorkerClientSettings,\n    private gateway: GrpcWorkerGateway,\n  ) { }\n\n  createClient(serviceId: string, customSettings: GrpcWorkerClientSettings) {\n    const settings = customSettings || this.defaultSettings;\n\n    if (!settings) {\n      throw new Error(`Worker client factory: no settings provided for ${serviceId}`);\n    }\n\n    return new GrpcWorkerClient(\n      serviceId,\n      { ...settings },\n      this.gateway,\n    );\n  }\n\n}\n\n/**\n * GrpcClient implementation based on grpc-web running in worker\n */\nexport class GrpcWorkerClient implements GrpcClient<GrpcWorkerClientSettings> {\n\n  constructor(\n    private serviceId: string,\n    private settings: GrpcWorkerClientSettings,\n    private gateway: GrpcWorkerGateway,\n  ) {\n    this.gateway.configureServiceClient(this.serviceId, this.settings);\n  }\n\n  getSettings(): GrpcWorkerClientSettings {\n    return { ...this.settings };\n  }\n\n  unary<Q extends GrpcMessage, S extends GrpcMessage>(\n    path: string,\n    req: Q,\n    metadata: GrpcMetadata,\n    reqclss: GrpcMessageClass<Q>,\n    resclss: GrpcMessageClass<S>,\n  ): Observable<GrpcEvent<S>> {\n    return this.gateway\n      .callUnaryFromWorker<Q, S>(this.serviceId, path, req.toObject(), metadata?.toObject() ?? {})\n      .pipe(\n        tap(res => {\n          if (res instanceof GrpcDataEvent) {\n            res.data = new resclss(res.data as any);\n          }\n        }),\n      );\n  }\n\n  serverStream<Q extends GrpcMessage, S extends GrpcMessage>(\n    path: string,\n    req: Q,\n    metadata: GrpcMetadata,\n    reqclss: GrpcMessageClass<Q>,\n    resclss: GrpcMessageClass<S>,\n  ): Observable<GrpcEvent<S>> {\n    return this.gateway\n      .callServerStreamFromWorker<Q, S>(this.serviceId, path, req.toObject(), metadata?.toObject() ?? {})\n      .pipe(\n        tap(res => {\n          if (res instanceof GrpcDataEvent) {\n            res.data = new resclss(res.data as any);\n          }\n        }),\n      );\n  }\n\n  clientStream = () => {\n    throw new Error('Client streaming not supported');\n  };\n\n  bidiStream = () => {\n    throw new Error('Bidirectional streaming not supported');\n  };\n\n}\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { GRPC_CLIENT_FACTORY } from '@ngx-grpc/core';\nimport { GrpcWorkerClientFactory, GrpcWorkerClientSettings } from './grpc-worker-client';\nimport { GrpcWorkerGateway } from './grpc-worker-gateway';\nimport { GRPC_WORKER, GRPC_WORKER_CLIENT_DEFAULT_SETTINGS } from './tokens';\n\nexport interface GrpcWorkerClientRootOptions {\n  worker?: Worker;\n  settings?: GrpcWorkerClientSettings;\n}\n\nexport interface GrpcWorkerClientChildOptions {\n  worker?: Worker;\n  settings?: GrpcWorkerClientSettings;\n}\n\n@NgModule()\nexport class GrpcWorkerClientModule {\n\n  /**\n   * Create GrpcWorkerClientModule 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?: GrpcWorkerClientRootOptions): ModuleWithProviders<GrpcWorkerClientModule> {\n    const providers: Provider[] = [\n      GrpcWorkerGateway,\n      { provide: GRPC_CLIENT_FACTORY, useClass: GrpcWorkerClientFactory },\n    ];\n\n    if (options?.worker) {\n      providers.push({ provide: GRPC_WORKER, useValue: options.worker });\n    }\n\n    if (options?.settings) {\n      providers.push({ provide: GRPC_WORKER_CLIENT_DEFAULT_SETTINGS, useValue: options.settings });\n    }\n\n    return { ngModule: GrpcWorkerClientModule, providers };\n  }\n\n  /**\n   * Create GrpcWorkerClientModule 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?: GrpcWorkerClientChildOptions): ModuleWithProviders<GrpcWorkerClientModule> {\n    const providers: Provider[] = [\n      GrpcWorkerGateway,\n      { provide: GRPC_CLIENT_FACTORY, useClass: GrpcWorkerClientFactory },\n    ];\n\n    if (options?.worker) {\n      providers.push({ provide: GRPC_WORKER, useValue: options.worker });\n    }\n\n    if (options?.settings) {\n      providers.push({ provide: GRPC_WORKER_CLIENT_DEFAULT_SETTINGS, useValue: options.settings });\n    }\n\n    return { ngModule: GrpcWorkerClientModule, providers };\n  }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GrpcWorkerGateway"],"mappings":"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"}