Merge pull request #704 from murgatroid99/grpc-js_loadPackageDefinition_fix

grpc-js: Fix handling of non-service objects in package definitions
This commit is contained in:
Michael Lumish 2019-01-15 17:49:54 -08:00 committed by GitHub
commit 483a1b4d54
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 21 additions and 3 deletions

View File

@ -21,7 +21,15 @@ 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 +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;