Skip to content

Commit b4e24be

Browse files
authored
Merge pull request #914 from murgatroid99/tools_package_definition
grpc-tools: Add option to generate package definition
2 parents 85443b1 + 66b3e4e commit b4e24be

File tree

3 files changed

+46
-15
lines changed

3 files changed

+46
-15
lines changed

packages/grpc-tools/src/node_generator.cc

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,17 @@ void PrintMethod(const MethodDescriptor* method, Printer* out) {
178178
}
179179

180180
// Prints out the service descriptor object
181-
void PrintService(const ServiceDescriptor* service, Printer* out) {
181+
void PrintService(const ServiceDescriptor* service, Printer* out,
182+
const Parameters& params) {
182183
map<grpc::string, grpc::string> template_vars;
183184
out->Print(GetNodeComments(service, true).c_str());
184185
template_vars["name"] = service->name();
185-
out->Print(template_vars, "var $name$Service = exports.$name$Service = {\n");
186+
template_vars["full_name"] = service->full_name();
187+
if (params.generate_package_definition) {
188+
out->Print(template_vars, "var $name$Service = exports['$full_name$'] = {\n");
189+
} else {
190+
out->Print(template_vars, "var $name$Service = exports.$name$Service = {\n");
191+
}
186192
out->Indent();
187193
for (int i = 0; i < service->method_count(); i++) {
188194
grpc::string method_name =
@@ -195,14 +201,19 @@ void PrintService(const ServiceDescriptor* service, Printer* out) {
195201
}
196202
out->Outdent();
197203
out->Print("};\n\n");
198-
out->Print(template_vars,
199-
"exports.$name$Client = "
200-
"grpc.makeGenericClientConstructor($name$Service);\n");
204+
if (!params.generate_package_definition) {
205+
out->Print(template_vars,
206+
"exports.$name$Client = "
207+
"grpc.makeGenericClientConstructor($name$Service);\n");
208+
}
201209
out->Print(GetNodeComments(service, false).c_str());
202210
}
203211

204-
void PrintImports(const FileDescriptor* file, Printer* out) {
205-
out->Print("var grpc = require('grpc');\n");
212+
void PrintImports(const FileDescriptor* file, Printer* out,
213+
const Parameters& params) {
214+
if (!params.generate_package_definition) {
215+
out->Print("var grpc = require('grpc');\n");
216+
}
206217
if (file->message_type_count() > 0) {
207218
grpc::string file_path =
208219
GetRelativePath(file->name(), GetJSMessageFilename(file->name()));
@@ -230,14 +241,16 @@ void PrintTransformers(const FileDescriptor* file, Printer* out) {
230241
out->Print("\n");
231242
}
232243

233-
void PrintServices(const FileDescriptor* file, Printer* out) {
244+
void PrintServices(const FileDescriptor* file, Printer* out,
245+
const Parameters& params) {
234246
for (int i = 0; i < file->service_count(); i++) {
235-
PrintService(file->service(i), out);
247+
PrintService(file->service(i), out, params);
236248
}
237249
}
238250
} // namespace
239251

240-
grpc::string GenerateFile(const FileDescriptor* file) {
252+
grpc::string GenerateFile(const FileDescriptor* file,
253+
const Parameters& params) {
241254
grpc::string output;
242255
{
243256
StringOutputStream output_stream(&output);
@@ -257,11 +270,11 @@ grpc::string GenerateFile(const FileDescriptor* file) {
257270

258271
out.Print("'use strict';\n");
259272

260-
PrintImports(file, &out);
273+
PrintImports(file, &out, params);
261274

262275
PrintTransformers(file, &out);
263276

264-
PrintServices(file, &out);
277+
PrintServices(file, &out, params);
265278

266279
out.Print(GetNodeComments(file, false).c_str());
267280
}

packages/grpc-tools/src/node_generator.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,13 @@
2323

2424
namespace grpc_node_generator {
2525

26-
grpc::string GenerateFile(const grpc::protobuf::FileDescriptor* file);
26+
struct Parameters {
27+
// Generate a package definition object instead of Client classes
28+
bool generate_package_definition;
29+
};
30+
31+
grpc::string GenerateFile(const grpc::protobuf::FileDescriptor* file,
32+
const Parameters& params);
2733

2834
} // namespace grpc_node_generator
2935

packages/grpc-tools/src/node_plugin.cc

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,20 @@ class NodeGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
3636
const grpc::string& parameter,
3737
grpc::protobuf::compiler::GeneratorContext* context,
3838
grpc::string* error) const {
39-
40-
grpc::string code = GenerateFile(file);
39+
grpc_node_generator::Parameters generator_parameters;
40+
generator_parameters.generate_package_definition = false;
41+
if (!parameter.empty()) {
42+
std::vector<grpc::string> parameters_list =
43+
grpc_generator::tokenize(parameter, ",");
44+
for (auto parameter_string = parameters_list.begin();
45+
parameter_string != parameters_list.end(); parameter_string++) {
46+
printf("%s", parameter_string);
47+
if (*parameter_string == "generate_package_definition") {
48+
generator_parameters.generate_package_definition = true;
49+
}
50+
}
51+
}
52+
grpc::string code = GenerateFile(file, generator_parameters);
4153
if (code.size() == 0) {
4254
return true;
4355
}

0 commit comments

Comments
 (0)