From bda109e6551ab06c56e5b2a5de9971ece32c9fc3 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 21 Feb 2018 16:12:02 -0800 Subject: [PATCH] Add package definition loader function to native package --- packages/grpc-native-core/index.js | 23 +++++++++++++++++++++++ packages/grpc-native-core/src/common.js | 5 +++++ 2 files changed, 28 insertions(+) diff --git a/packages/grpc-native-core/index.js b/packages/grpc-native-core/index.js index 7810b7bf..f0337845 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[-1]; + let current = result; + for (const package in nameComponents.slice(0, -1)) { + if (!current[package]) { + current[package] = {}; + } + current = current[package]; + } + 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 5882cf1c..b9c5ee3f 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 + */