53 return basename +
"_pb";
67 if (to_filename.find(
"google/protobuf") == 0) {
72 return "google-protobuf/";
74 size_t slashes =
std::count(from_filename.begin(), from_filename.end(),
'/');
79 for (
size_t i = 0;
i < slashes;
i++) {
89 return GetRootPath(from_file, to_file) + to_file;
95 map<std::string, const Descriptor*> message_types;
96 for (
int service_num = 0; service_num <
file->service_count();
99 for (
int method_num = 0; method_num <
service->method_count();
104 message_types[input_type->full_name()] = input_type;
105 message_types[output_type->full_name()] = output_type;
108 return message_types;
119 return module_alias +
"." +
name;
125 map<std::string, std::string> template_vars;
127 template_vars[
"identifier_name"] = MessageIdentifierName(full_name);
128 template_vars[
"name"] = full_name;
129 template_vars[
"node_name"] = NodeObjectPath(
descriptor);
131 out->Print(template_vars,
"function serialize_$identifier_name$(arg) {\n");
133 out->Print(template_vars,
"if (!(arg instanceof $node_name$)) {\n");
135 out->Print(template_vars,
136 "throw new Error('Expected argument of type $name$');\n");
141 out->Print(
"return Buffer.from(arg.serializeBinary());\n");
143 out->Print(
"return new Buffer(arg.serializeBinary());\n");
149 out->Print(template_vars,
150 "function deserialize_$identifier_name$(buffer_arg) {\n");
154 "return $node_name$.deserializeBinary(new Uint8Array(buffer_arg));\n");
162 map<std::string, std::string> vars;
163 vars[
"service_name"] =
method->service()->full_name();
164 vars[
"name"] =
method->name();
165 vars[
"input_type"] = NodeObjectPath(input_type);
166 vars[
"input_type_id"] = MessageIdentifierName(input_type->full_name());
167 vars[
"output_type"] = NodeObjectPath(output_type);
168 vars[
"output_type_id"] = MessageIdentifierName(output_type->full_name());
169 vars[
"client_stream"] =
method->client_streaming() ?
"true" :
"false";
170 vars[
"server_stream"] =
method->server_streaming() ?
"true" :
"false";
173 out->Print(vars,
"path: '/$service_name$/$name$',\n");
174 out->Print(vars,
"requestStream: $client_stream$,\n");
175 out->Print(vars,
"responseStream: $server_stream$,\n");
176 out->Print(vars,
"requestType: $input_type$,\n");
177 out->Print(vars,
"responseType: $output_type$,\n");
178 out->Print(vars,
"requestSerialize: serialize_$input_type_id$,\n");
179 out->Print(vars,
"requestDeserialize: deserialize_$input_type_id$,\n");
180 out->Print(vars,
"responseSerialize: serialize_$output_type_id$,\n");
181 out->Print(vars,
"responseDeserialize: deserialize_$output_type_id$,\n");
188 map<std::string, std::string> template_vars;
190 template_vars[
"name"] =
service->name();
191 out->Print(template_vars,
"var $name$Service = exports.$name$Service = {\n");
193 for (
int i = 0;
i <
service->method_count();
i++) {
203 out->Print(
"};\n\n");
204 out->Print(template_vars,
205 "exports.$name$Client = "
206 "grpc.makeGenericClientConstructor($name$Service);\n");
211 out->Print(
"var grpc = require('grpc');\n");
212 if (
file->message_type_count() > 0) {
215 out->Print(
"var $module_alias$ = require('$file_path$');\n",
"module_alias",
216 ModuleAlias(
file->
name()),
"file_path", file_path);
219 for (
int i = 0;
i <
file->dependency_count();
i++) {
222 out->Print(
"var $module_alias$ = require('$file_path$');\n",
"module_alias",
223 ModuleAlias(
file->dependency(
i)->
name()),
"file_path",
231 map<std::string, const Descriptor*> messages = GetAllMessages(
file);
233 it != messages.end();
it++) {
234 PrintMessageTransformer(
it->second,
out, params);
240 for (
int i = 0;
i <
file->service_count();
i++) {
241 PrintService(
file->service(
i),
out);
252 if (
file->service_count() == 0) {
255 out.Print(
"// GENERATED CODE -- DO NOT EDIT!\n\n");
258 if (!leading_comments.empty()) {
259 out.Print(
"// Original file comments:\n");
260 out.PrintRaw(leading_comments.c_str());
263 out.Print(
"'use strict';\n");
267 PrintTransformers(
file, &
out, params);