From bda109e6551ab06c56e5b2a5de9971ece32c9fc3 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Wed, 21 Feb 2018 16:12:02 -0800 Subject: [PATCH 1/2] 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 7810b7bff..f0337845d 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 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 + */ From ea704f94391c76562aa5a74565ce917c26ab6720 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Tue, 27 Feb 2018 10:09:25 -0800 Subject: [PATCH 2/2] Fix a couple of issues with the package loader function --- packages/grpc-native-core/index.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/grpc-native-core/index.js b/packages/grpc-native-core/index.js index f0337845d..202efa4a8 100644 --- a/packages/grpc-native-core/index.js +++ b/packages/grpc-native-core/index.js @@ -156,13 +156,13 @@ exports.loadPackageDefinition = function loadPackageDefintion(packageDef) { for (const serviceFqn in packageDef) { const service = packageDef[serviceFqn]; const nameComponents = serviceFqn.split('.'); - const serviceName = nameComponents[-1]; + const serviceName = nameComponents[nameComponents.length-1]; let current = result; - for (const package in nameComponents.slice(0, -1)) { - if (!current[package]) { - current[package] = {}; + for (const packageName in nameComponents.slice(0, -1)) { + if (!current[packageName]) { + current[packageName] = {}; } - current = current[package]; + current = current[packageName]; } current[serviceName] = client.makeClientConstructor(service, serviceName, {}); }