{"version":3,"file":"ngx-grpc-common.mjs","sources":["../../../packages/common/src/lib/grpc-client.ts","../../../packages/common/src/lib/grpc-event.ts","../../../packages/common/src/lib/grpc-message-pool.ts","../../../packages/common/src/lib/grpc-metadata.ts","../../../packages/common/src/lib/utils.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/ngx-grpc-common.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { GrpcEvent } from './grpc-event';\nimport { GrpcMessage } from './grpc-message';\nimport { GrpcMessageClass } from './grpc-message-class';\nimport { GrpcMetadata } from './grpc-metadata';\n\n/**\n * This interface describes transport layer client factory, which is important in instantiating GrpcClient\n * because the GrpcClientFactory is bound to the dependency injection (use constructor to inject normal Angular services & config),\n * while GrpcClient has none\n */\nexport interface GrpcClientFactory<ST> {\n\n  /**\n   * Create a GrpcClient\n   *\n   * @param serviceId a service type in proto (passed in by generated service client), e.g.\n   * @param settings settings for underlying grpc client implementation\n   * @returns new GrpcClient\n   */\n  createClient(serviceId: string, settings: ST): GrpcClient<ST>;\n\n}\n\n/**\n * A transport layer client implementation interface\n * Instance of GrpcClient is created for every gRPC service client by corresponding GrpcClientFactory\n */\nexport interface GrpcClient<ST> {\n\n  /**\n   * Returns a copy of current client settings\n   */\n  getSettings(): ST;\n\n  /**\n   * Handle unary RPC\n   *\n   * @param path gRPC method path (rpc path)\n   * @param req request data\n   * @param metadata request metadata\n   * @param reqclss request message class\n   * @param resclss response message class\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\n  /**\n   * Handle server stream RPC\n   *\n   * @param path gRPC method path (rpc path)\n   * @param req request data\n   * @param metadata request metadata\n   * @param reqclss request message class\n   * @param resclss response message class\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\n  /**\n   * Handle client stream RPC\n   *\n   * @param path gRPC method path (rpc path)\n   * @param inputStream streamed request data\n   * @param metadata request metadata\n   * @param reqclss request message class\n   * @param resclss response message class\n   */\n  clientStream<Q extends GrpcMessage, S extends GrpcMessage>(\n    path: string,\n    inputStream: Observable<Q>,\n    metadata: GrpcMetadata,\n    reqclss: GrpcMessageClass<Q>,\n    resclss: GrpcMessageClass<S>,\n  ): Observable<GrpcEvent<S>>;\n\n  /**\n   * Handle bidirectional stream RPC\n   *\n   * @param path gRPC method path (rpc path)\n   * @param inputStream streamed request data\n   * @param metadata request metadata\n   * @param reqclss request message class\n   * @param resclss response message class\n   */\n  bidiStream<Q extends GrpcMessage, S extends GrpcMessage>(\n    path: string,\n    inputStream: Observable<Q>,\n    metadata: GrpcMetadata,\n    reqclss: GrpcMessageClass<Q>,\n    resclss: GrpcMessageClass<S>,\n  ): Observable<GrpcEvent<S>>;\n\n}\n\n/**\n * Type of the RPC\n */\nexport enum GrpcCallType {\n  unary,\n  serverStream,\n  clientStream,\n  bidiStream,\n}\n\n/**\n * This interface describes the internal gRPC request data structure\n */\nexport interface GrpcRequest<Q extends GrpcMessage, S extends GrpcMessage> {\n  path: string;\n  client: GrpcClient<any>;\n  type: GrpcCallType;\n  requestData: Q | Observable<Q>;\n  requestMetadata: GrpcMetadata;\n  requestClass: GrpcMessageClass<Q>;\n  responseClass: GrpcMessageClass<S>;\n}\n","import { GrpcMessage } from './grpc-message';\nimport { GrpcMetadata } from './grpc-metadata';\n\n/**\n * Data event. This event is emitted when the new message arrives from the server\n */\nexport class GrpcDataEvent<T extends GrpcMessage> {\n  constructor(\n    public data: T,\n  ) { }\n}\n\n/**\n * Status event. This event is emitted when the new status and metadata arrives from the server\n */\nexport class GrpcStatusEvent {\n  constructor(\n    public statusCode: number,\n    public statusMessage: string,\n    public metadata: GrpcMetadata,\n  ) { }\n}\n\n/**\n * GrpcEvent can be either data or status event\n */\nexport type GrpcEvent<T extends GrpcMessage> = GrpcDataEvent<T> | GrpcStatusEvent;\n","import { GrpcMessage } from './grpc-message';\nimport { GrpcMessageClass } from './grpc-message-class';\n\n/**\n * A message pool for using with `google.protobuf.Any`.\n * Pass the array of messages to be registered within the pool and give this pool to `toProtobufJSON` or to `unpack`.\n */\nexport class GrpcMessagePool {\n\n  private index = new Map<string, GrpcMessageClass<GrpcMessage>>();\n\n  constructor(messages: GrpcMessageClass<GrpcMessage>[]) {\n    this.add(messages);\n  }\n\n  add(messages: GrpcMessageClass<GrpcMessage>[]) {\n    messages.forEach(m => this.index.set(m.id, m));\n  }\n\n  get(id: string) {\n    return this.index.get(id);\n  }\n\n}\n","export class GrpcMetadata {\n\n  private map: Map<string, string>;\n\n  constructor(initial?: { [prop: string]: string }) {\n    initial = initial || {};\n\n    this.map = Object.keys(initial).reduce((m, k) => m.set(k, initial[k]), new Map());\n  }\n\n  set(name: string, value: string) {\n    this.map.set(name, value);\n  }\n\n  get(name: string) {\n    return this.map.get(name);\n  }\n\n  has(name: string) {\n    return this.map.has(name);\n  }\n\n  clone() {\n    return new GrpcMetadata(this.toObject());\n  }\n\n  toObject() {\n    return [...this.map.keys()].reduce((o, k) => ({ ...o, [k]: this.map.get(k) }), {});\n  }\n\n}\n","/**\n * Converts Uint8Array to string as prescribed by protobuf bytes toJSON definition\n * Inspired by https://stackoverflow.com/a/9458996/1990451\n */\nexport function uint8ArrayToBase64(array: Uint8Array): string {\n  let res = '';\n\n  for (let i = 0; i < array.byteLength; i++) {\n    res += String.fromCharCode(array[i]);\n  }\n\n  return window.btoa(res);\n}\n","/*\n  DOM-free chunk\n\n  IMPORTANT: all dependencies must be DOM-references-free because it might breaks Worker environment; in other words\n    - do not import to @angular/* and other DOM-related packages in any level of import\n    - do not use Window / Document etc\n*/\n\nexport * from './lib/grpc-client';\nexport * from './lib/grpc-event';\nexport * from './lib/grpc-message';\nexport * from './lib/grpc-message-class';\nexport * from './lib/grpc-message-pool';\nexport * from './lib/grpc-metadata';\nexport * from './lib/recursive-partial';\nexport * from './lib/utils';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}