diff options
author | Nathan Mitchell <thecsapprentice.business@gmail.com> | 2018-05-31 08:29:58 -0700 |
---|---|---|
committer | Wouter van Oortmerssen <aardappel@gmail.com> | 2018-05-31 08:29:58 -0700 |
commit | b4ca4d3cdea7dbfb78342514151a495b451a7f6f (patch) | |
tree | 9db92264c42fd1f95049a92d9d6481caecd0fb09 /src | |
parent | 0848f58cdd848d2353b1c0a070f1f6c932d2458f (diff) | |
download | flatbuffers-b4ca4d3cdea7dbfb78342514151a495b451a7f6f.tar.gz flatbuffers-b4ca4d3cdea7dbfb78342514151a495b451a7f6f.tar.bz2 flatbuffers-b4ca4d3cdea7dbfb78342514151a495b451a7f6f.zip |
Javascript: Add suppport for ES6 style exports (#4754)
* Add suppport for ES6 style exports
Adds support for ECMAScript 6 module exports during Javascript
generation. This is useful as many development projects are
switching to this new standard and away from custom module
solutions. By integrating support into flatbuffers, users
do not need to perform additional post-processing of generated
files in order to use flatbuffers output directly in their
codebases.
Reference to ECMAScript 6 modules:
https://www.ecma-international.org/ecma-262/6.0/#sec-exports
Changes:
* Added `--es6-js-export` option to cli parser tool
* Added conditional code to generate a ES6 style export
line, replacing the normal NodeJS/RequireJS line.
* Fixed missing export statements
Added exports for definition and struct names that were not inside namespaces
* Updated Compiler.md with new generator option
Added entry to Compiler.md in docs for the `--es6-js-export` flag, including a brief description of the effects and usefulness.
Diffstat (limited to 'src')
-rw-r--r-- | src/flatc.cpp | 5 | ||||
-rw-r--r-- | src/idl_gen_js.cpp | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/flatc.cpp b/src/flatc.cpp index c7e1b091..0487a451 100644 --- a/src/flatc.cpp +++ b/src/flatc.cpp @@ -97,6 +97,7 @@ std::string FlatCompiler::GetUsageString(const char *program_name) const { " Default value is \"T\"\n" " --no-js-exports Removes Node.js style export lines in JS.\n" " --goog-js-export Uses goog.exports* for closure compiler exporting in JS.\n" + " --es6-js-export Uses ECMAScript 6 export style lines in JS.\n" " --go-namespace Generate the overrided namespace in Golang.\n" " --go-import Generate the overrided import for flatbuffers in Golang.\n" " (default is \"github.com/google/flatbuffers/go\")\n" @@ -191,6 +192,10 @@ int FlatCompiler::Compile(int argc, const char **argv) { opts.skip_js_exports = true; } else if (arg == "--goog-js-export") { opts.use_goog_js_export_format = true; + opts.use_ES6_js_export_format = false; + } else if (arg == "--es6-js-export") { + opts.use_goog_js_export_format = false; + opts.use_ES6_js_export_format = true; } else if (arg == "--go-namespace") { if (++argi >= argc) Error("missing golang namespace" + arg, true); opts.go_namespace = argv[argi]; diff --git a/src/idl_gen_js.cpp b/src/idl_gen_js.cpp index 3e3730ac..184749a8 100644 --- a/src/idl_gen_js.cpp +++ b/src/idl_gen_js.cpp @@ -103,7 +103,10 @@ class JsGenerator : public BaseGenerator { if (lang_.language == IDLOptions::kJs && !exports_code.empty() && !parser_.opts.skip_js_exports) { - code += "// Exports for Node.js and RequireJS\n"; + if( parser_.opts.use_ES6_js_export_format ) + code += "// Exports for ECMAScript6 Modules\n"; + else + code += "// Exports for Node.js and RequireJS\n"; code += exports_code; } @@ -223,6 +226,8 @@ class JsGenerator : public BaseGenerator { code += "var "; if (parser_.opts.use_goog_js_export_format) { exports += "goog.exportSymbol('" + *it + "', " + *it + ");\n"; + } else if( parser_.opts.use_ES6_js_export_format){ + exports += "export {" + *it + "};\n"; } else { exports += "this." + *it + " = " + *it + ";\n"; } @@ -293,6 +298,8 @@ class JsGenerator : public BaseGenerator { if (parser_.opts.use_goog_js_export_format) { exports += "goog.exportSymbol('" + enum_def.name + "', " + enum_def.name + ");\n"; + } else if (parser_.opts.use_ES6_js_export_format) { + exports += "export {" + enum_def.name + "};\n"; } else { exports += "this." + enum_def.name + " = " + enum_def.name + ";\n"; } @@ -561,6 +568,8 @@ class JsGenerator : public BaseGenerator { if (parser_.opts.use_goog_js_export_format) { exports += "goog.exportSymbol('" + struct_def.name + "', " + struct_def.name + ");\n"; + } else if (parser_.opts.use_ES6_js_export_format) { + exports += "export {" + struct_def.name + "};\n"; } else { exports += "this." + struct_def.name + " = " + struct_def.name + ";\n"; |