|
@@ -276,7 +276,8 @@ string GetEnumPath(const GeneratorOptions& options,
|
|
string MaybeCrossFileRef(const GeneratorOptions& options,
|
|
string MaybeCrossFileRef(const GeneratorOptions& options,
|
|
const FileDescriptor* from_file,
|
|
const FileDescriptor* from_file,
|
|
const Descriptor* to_message) {
|
|
const Descriptor* to_message) {
|
|
- if (options.import_style == GeneratorOptions::kImportCommonJs &&
|
|
|
|
|
|
+ if ((options.import_style == GeneratorOptions::kImportCommonJs ||
|
|
|
|
+ options.import_style == GeneratorOptions::kImportCommonJsStrict) &&
|
|
from_file != to_message->file()) {
|
|
from_file != to_message->file()) {
|
|
// Cross-file ref in CommonJS needs to use the module alias instead of
|
|
// Cross-file ref in CommonJS needs to use the module alias instead of
|
|
// the global name.
|
|
// the global name.
|
|
@@ -1675,8 +1676,18 @@ void Generator::GenerateProvides(const GeneratorOptions& options,
|
|
//
|
|
//
|
|
// // Later generated code expects foo.bar = {} to exist:
|
|
// // Later generated code expects foo.bar = {} to exist:
|
|
// foo.bar.Baz = function() { /* ... */ }
|
|
// foo.bar.Baz = function() { /* ... */ }
|
|
- printer->Print("goog.exportSymbol('$name$', null, global);\n", "name",
|
|
|
|
- *it);
|
|
|
|
|
|
+
|
|
|
|
+ // Do not use global scope in strict mode
|
|
|
|
+ if (options.import_style == GeneratorOptions::kImportCommonJsStrict) {
|
|
|
|
+ string namespaceObject = *it;
|
|
|
|
+ // Remove "proto." from the namespace object
|
|
|
|
+ namespaceObject.erase(0, 6);
|
|
|
|
+ printer->Print("goog.exportSymbol('$name$', null, proto);\n", "name",
|
|
|
|
+ namespaceObject);
|
|
|
|
+ } else {
|
|
|
|
+ printer->Print("goog.exportSymbol('$name$', null, global);\n", "name",
|
|
|
|
+ *it);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -3321,6 +3332,8 @@ bool GeneratorOptions::ParseFromOptions(
|
|
import_style = kImportClosure;
|
|
import_style = kImportClosure;
|
|
} else if (options[i].second == "commonjs") {
|
|
} else if (options[i].second == "commonjs") {
|
|
import_style = kImportCommonJs;
|
|
import_style = kImportCommonJs;
|
|
|
|
+ } else if (options[i].second == "commonjs_strict") {
|
|
|
|
+ import_style = kImportCommonJsStrict;
|
|
} else if (options[i].second == "browser") {
|
|
} else if (options[i].second == "browser") {
|
|
import_style = kImportBrowser;
|
|
import_style = kImportBrowser;
|
|
} else if (options[i].second == "es6") {
|
|
} else if (options[i].second == "es6") {
|
|
@@ -3430,10 +3443,17 @@ void Generator::GenerateFile(const GeneratorOptions& options,
|
|
GenerateHeader(options, printer);
|
|
GenerateHeader(options, printer);
|
|
|
|
|
|
// Generate "require" statements.
|
|
// Generate "require" statements.
|
|
- if (options.import_style == GeneratorOptions::kImportCommonJs) {
|
|
|
|
|
|
+ if ((options.import_style == GeneratorOptions::kImportCommonJs ||
|
|
|
|
+ options.import_style == GeneratorOptions::kImportCommonJsStrict)) {
|
|
printer->Print("var jspb = require('google-protobuf');\n");
|
|
printer->Print("var jspb = require('google-protobuf');\n");
|
|
printer->Print("var goog = jspb;\n");
|
|
printer->Print("var goog = jspb;\n");
|
|
- printer->Print("var global = Function('return this')();\n\n");
|
|
|
|
|
|
+
|
|
|
|
+ // Do not use global scope in strict mode
|
|
|
|
+ if (options.import_style == GeneratorOptions::kImportCommonJsStrict) {
|
|
|
|
+ printer->Print("var proto = {};\n\n");
|
|
|
|
+ } else {
|
|
|
|
+ printer->Print("var global = Function('return this')();\n\n");
|
|
|
|
+ }
|
|
|
|
|
|
for (int i = 0; i < file->dependency_count(); i++) {
|
|
for (int i = 0; i < file->dependency_count(); i++) {
|
|
const string& name = file->dependency(i)->name();
|
|
const string& name = file->dependency(i)->name();
|
|
@@ -3477,7 +3497,8 @@ void Generator::GenerateFile(const GeneratorOptions& options,
|
|
GenerateExtension(options, printer, *it);
|
|
GenerateExtension(options, printer, *it);
|
|
}
|
|
}
|
|
|
|
|
|
- if (options.import_style == GeneratorOptions::kImportCommonJs) {
|
|
|
|
|
|
+ if ((options.import_style == GeneratorOptions::kImportCommonJs ||
|
|
|
|
+ options.import_style == GeneratorOptions::kImportCommonJsStrict)) {
|
|
printer->Print("goog.object.extend(exports, $package$);\n",
|
|
printer->Print("goog.object.extend(exports, $package$);\n",
|
|
"package", GetFilePath(options, file));
|
|
"package", GetFilePath(options, file));
|
|
}
|
|
}
|