From 1337486755518e8df4388463ab71fdc955e5a680 Mon Sep 17 00:00:00 2001 From: Josh Haberman Date: Thu, 16 Jun 2016 11:59:08 -0700 Subject: JS: import well-known types from google-protobuf package. --- js/gulpfile.js | 27 +++++++++++++++++++++++-- src/google/protobuf/compiler/js/js_generator.cc | 8 ++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/js/gulpfile.js b/js/gulpfile.js index c5220153..d94d4a14 100644 --- a/js/gulpfile.js +++ b/js/gulpfile.js @@ -8,6 +8,20 @@ function exec(command, cb) { var protoc = process.env.PROTOC || '../src/protoc'; +var wellKnownTypes = [ + '../src/google/protobuf/any.proto', + '../src/google/protobuf/api.proto', + '../src/google/protobuf/descriptor.proto', + '../src/google/protobuf/duration.proto', + '../src/google/protobuf/empty.proto', + '../src/google/protobuf/field_mask.proto', + '../src/google/protobuf/source_context.proto', + '../src/google/protobuf/struct.proto', + '../src/google/protobuf/timestamp.proto', + '../src/google/protobuf/type.proto', + '../src/google/protobuf/wrappers.proto', +]; + gulp.task('genproto_closure', function (cb) { exec(protoc + ' --js_out=library=testproto_libs,binary:. -I ../src -I . *.proto ../src/google/protobuf/descriptor.proto', function (err, stdout, stderr) { @@ -18,7 +32,16 @@ gulp.task('genproto_closure', function (cb) { }); gulp.task('genproto_commonjs', function (cb) { - exec('mkdir -p commonjs_out && ' + protoc + ' --js_out=import_style=commonjs,binary:commonjs_out -I ../src -I commonjs -I . *.proto commonjs/test*/*.proto ../src/google/protobuf/descriptor.proto', + exec('mkdir -p commonjs_out && ' + protoc + ' --js_out=import_style=commonjs,binary:commonjs_out -I ../src -I commonjs -I . *.proto commonjs/test*/*.proto ../src/google/protobuf/descriptor.proto' + wellKnownTypes.join(' '), + function (err, stdout, stderr) { + console.log(stdout); + console.log(stderr); + cb(err); + }); +}); + +gulp.task('genproto_wellknowntypes', function (cb) { + exec(protoc + ' --js_out=import_style=commonjs,binary:. -I ../src ' + wellKnownTypes.join(' '), function (err, stdout, stderr) { console.log(stdout); console.log(stderr); @@ -26,7 +49,7 @@ gulp.task('genproto_commonjs', function (cb) { }); }); -gulp.task('dist', function (cb) { +gulp.task('dist', ['genproto_wellknowntypes'], function (cb) { // TODO(haberman): minify this more aggressively. // Will require proper externs/exports. exec('./node_modules/google-closure-library/closure/bin/calcdeps.py -i message.js -i binary/reader.js -i binary/writer.js -i commonjs/export.js -p . -p node_modules/google-closure-library/closure -o compiled --compiler_jar node_modules/google-closure-compiler/compiler.jar > google-protobuf.js', diff --git a/src/google/protobuf/compiler/js/js_generator.cc b/src/google/protobuf/compiler/js/js_generator.cc index a72cf6a3..b39b0e8c 100755 --- a/src/google/protobuf/compiler/js/js_generator.cc +++ b/src/google/protobuf/compiler/js/js_generator.cc @@ -160,6 +160,14 @@ string GetJSFilename(const string& filename) { // Given a filename like foo/bar/baz.proto, returns the root directory // path ../../ string GetRootPath(const string& filename) { + if (filename.find("google/protobuf") == 0) { + // Well-known types (.proto files in the google/protobuf directory) are + // assumed to come from the 'google-protobuf' npm package. We may want to + // generalize this exception later by letting others put generated code in + // their own npm packages. + return "google-protobuf/"; + } + size_t slashes = std::count(filename.begin(), filename.end(), '/'); if (slashes == 0) { return "./"; -- cgit v1.2.3