grpc-js: Fix handling of non-service objects in package definitions

This commit is contained in:
murgatroid99 2019-01-14 17:03:03 -08:00
parent a57e6e47c9
commit e32fec18fe
1 changed files with 17 additions and 3 deletions

View File

@ -21,7 +21,13 @@ export interface ServiceDefinition {
[index: string]: MethodDefinition<object, object>;
}
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 +125,13 @@ 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 +152,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;