diff --git a/packages/grpc-native-core/index.js b/packages/grpc-native-core/index.js index 7810b7bff..202efa4a8 100644 --- a/packages/grpc-native-core/index.js +++ b/packages/grpc-native-core/index.js @@ -146,6 +146,29 @@ exports.load = function load(filename, format, options) { return loadObject(builder.ns, options); }; +/** + * Load a gRPC package definition as a gRPC object hierarchy + * @param packageDef grpc~PackageDefinition The package definition object + * @return {Object} The resulting gRPC object + */ +exports.loadPackageDefinition = function loadPackageDefintion(packageDef) { + const result = {}; + for (const serviceFqn in packageDef) { + const service = packageDef[serviceFqn]; + const nameComponents = serviceFqn.split('.'); + const serviceName = nameComponents[nameComponents.length-1]; + let current = result; + for (const packageName in nameComponents.slice(0, -1)) { + if (!current[packageName]) { + current[packageName] = {}; + } + current = current[packageName]; + } + current[serviceName] = client.makeClientConstructor(service, serviceName, {}); + } + return result; +}; + var log_template = _.template( '{severity} {timestamp}\t{file}:{line}]\t{message}', {interpolate: /{([\s\S]+?)}/g}); diff --git a/packages/grpc-native-core/src/common.js b/packages/grpc-native-core/src/common.js index 5882cf1c6..b9c5ee3fc 100644 --- a/packages/grpc-native-core/src/common.js +++ b/packages/grpc-native-core/src/common.js @@ -170,3 +170,8 @@ exports.defaultGrpcOptions = { * An object that completely defines a service. * @typedef {Object.} grpc~ServiceDefinition */ + +/** + * An object that defines a package hierarchy with multiple services + * @typedef {Object.} grpc~PackageDefinition + */