diff --git a/packages/grpc-js/src/make-client.ts b/packages/grpc-js/src/make-client.ts index 3b03255f1..df673aa78 100644 --- a/packages/grpc-js/src/make-client.ts +++ b/packages/grpc-js/src/make-client.ts @@ -21,7 +21,15 @@ export interface ServiceDefinition { [index: string]: MethodDefinition; } -export interface PackageDefinition { [index: string]: ServiceDefinition; } +export interface ProtobufTypeDefinition { + format: string; + type: object; + fileDescriptorProtos: Buffer[]; +} + +export interface PackageDefinition { + [index: string]: ServiceDefinition|ProtobufTypeDefinition; +} /** * Map with short names for each of the requester maker functions. Used in @@ -119,9 +127,15 @@ function partial( } export type GrpcObject = { - [index: string]: GrpcObject|ServiceClientConstructor; + [index: string]: GrpcObject|ServiceClientConstructor|ProtobufTypeDefinition; }; +function isProtobufTypeDefinition( + obj: ServiceDefinition| + ProtobufTypeDefinition): obj is ProtobufTypeDefinition { + return 'format' in obj; +} + /** * Load a gRPC package definition as a gRPC object hierarchy. * @param packageDef The package definition object. @@ -142,7 +156,11 @@ export function loadPackageDefinition(packageDef: PackageDefinition): } current = current[packageName] as GrpcObject; } - current[serviceName] = makeClientConstructor(service, serviceName, {}); + if (isProtobufTypeDefinition(service)) { + current[serviceName] = service; + } else { + current[serviceName] = makeClientConstructor(service, serviceName, {}); + } } } return result;