diff options
author | Josh Haberman <jhaberman@gmail.com> | 2016-02-04 16:11:07 -0800 |
---|---|---|
committer | Josh Haberman <jhaberman@gmail.com> | 2016-02-18 10:30:21 -0800 |
commit | 77af5d04b1897baeda2ebd753d138c99afe72c50 (patch) | |
tree | 60a26239352658db80b87262315659c5202e31f6 /js/commonjs | |
parent | d6a186a8f18c1b14979e0244c0434b5b89c0f8a9 (diff) | |
download | protobuf-77af5d04b1897baeda2ebd753d138c99afe72c50.tar.gz protobuf-77af5d04b1897baeda2ebd753d138c99afe72c50.tar.bz2 protobuf-77af5d04b1897baeda2ebd753d138c99afe72c50.zip |
Fixed nested message scopes for CommonJS.
Diffstat (limited to 'js/commonjs')
-rw-r--r-- | js/commonjs/export.js | 2 | ||||
-rw-r--r-- | js/commonjs/rewrite_tests_for_commonjs.js | 28 |
2 files changed, 18 insertions, 12 deletions
diff --git a/js/commonjs/export.js b/js/commonjs/export.js index 89ded330..2fc2fcbd 100644 --- a/js/commonjs/export.js +++ b/js/commonjs/export.js @@ -10,5 +10,7 @@ exports.BinaryReader = jspb.BinaryReader; exports.BinaryWriter = jspb.BinaryWriter; exports.ExtensionFieldInfo = jspb.ExtensionFieldInfo; +// These are used by generated code but should not be used directly by clients. exports.exportSymbol = goog.exportSymbol; exports.inherits = goog.inherits; +exports.object = {extend: goog.object.extend}; diff --git a/js/commonjs/rewrite_tests_for_commonjs.js b/js/commonjs/rewrite_tests_for_commonjs.js index d49f8a93..6a655c1e 100644 --- a/js/commonjs/rewrite_tests_for_commonjs.js +++ b/js/commonjs/rewrite_tests_for_commonjs.js @@ -27,34 +27,38 @@ var lineReader = require('readline').createInterface({ output: process.stdout }); +function tryStripPrefix(str, prefix) { + if (str.lastIndexOf(prefix) !== 0) { + throw "String: " + str + " didn't start with: " + prefix; + } + return str.substr(prefix.length); +} + var module = null; +var pkg = null; lineReader.on('line', function(line) { - var is_require = line.match(/goog\.require\('([^']*\.)([^'.]+)'\)/); - var is_loadfromfile = line.match(/CommonJS-LoadFromFile: (.*)/); + var is_require = line.match(/goog\.require\('([^']*)'\)/); + var is_loadfromfile = line.match(/CommonJS-LoadFromFile: ([^ ]*) (.*)/); var is_settestonly = line.match(/goog.setTestOnly()/); if (is_settestonly) { // Remove this line. } else if (is_require) { if (module) { // Skip goog.require() lines before the first directive. - var pkg = is_require[1]; - var sym = is_require[2]; - console.log("google_protobuf.exportSymbol('" + pkg + sym + "', " + module + "." + sym + ', global);'); + var full_sym = is_require[1]; + var sym = tryStripPrefix(full_sym, pkg); + console.log("google_protobuf.exportSymbol('" + full_sym + "', " + module + sym + ', global);'); } } else if (is_loadfromfile) { if (!module) { + console.log("var google_protobuf = require('google-protobuf');"); console.log("var asserts = require('closure_asserts_commonjs');"); console.log("var global = Function('return this')();"); console.log(""); console.log("// Bring asserts into the global namespace."); - console.log("for (var key in asserts) {"); - console.log(" if (asserts.hasOwnProperty(key)) {"); - console.log(" global[key] = asserts[key];"); - console.log(" }"); - console.log("}"); - console.log(""); - console.log("var google_protobuf = require('google-protobuf');"); + console.log("google_protobuf.object.extend(global, asserts);"); } module = is_loadfromfile[1].replace("-", "_"); + pkg = is_loadfromfile[2]; if (module != "google_protobuf") { // We unconditionally require this in the header. console.log("var " + module + " = require('" + is_loadfromfile[1] + "');"); |