Commit 9d483a3f authored by Christopher Cifra's avatar Christopher Cifra Committed by Wouter van Oortmerssen

Changed the JavaScript generation to emit createX helper functions just like the…

Changed the JavaScript generation to emit createX helper functions just like the TypeScript code generation. I also added code so that the create methods have documentation in both JavaScript and TypeScript. (#5168)
parent b650dfba
......@@ -105,7 +105,7 @@ class JsTsGenerator : public BaseGenerator {
if (lang_.language == IDLOptions::kJs && !exports_code.empty() &&
!parser_.opts.skip_js_exports) {
if( parser_.opts.use_ES6_js_export_format )
if (parser_.opts.use_ES6_js_export_format)
code += "// Exports for ECMAScript6 Modules\n";
else
code += "// Exports for Node.js and RequireJS\n";
......@@ -225,7 +225,7 @@ class JsTsGenerator : 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){
} else if (parser_.opts.use_ES6_js_export_format) {
exports += "export {" + *it + "};\n";
} else {
exports += "this." + *it + " = " + *it + ";\n";
......@@ -548,7 +548,9 @@ class JsTsGenerator : public BaseGenerator {
const std::string &file) {
const auto basename =
flatbuffers::StripPath(flatbuffers::StripExtension(file));
if (basename == file_name_ || parser_.opts.generate_all) { return typeName; }
if (basename == file_name_ || parser_.opts.generate_all) {
return typeName;
}
return GenFileNamespacePrefix(file) + "." + typeName;
}
......@@ -695,7 +697,7 @@ class JsTsGenerator : public BaseGenerator {
GenTypeAnnotation(kParam, object_name + "=", "obj") +
GenTypeAnnotation(kReturns, object_name, "", false));
if (lang_.language == IDLOptions::kTs) {
code += "static getRoot" + Verbose(struct_def,"As");
code += "static getRoot" + Verbose(struct_def, "As");
code += "(bb:flatbuffers.ByteBuffer, obj?:" + object_name +
"):" + object_name + " {\n";
} else {
......@@ -1087,7 +1089,8 @@ class JsTsGenerator : public BaseGenerator {
"", false));
if (lang_.language == IDLOptions::kTs) {
code += "static create" + Verbose(struct_def) + "(builder:flatbuffers.Builder";
code += "static create" + Verbose(struct_def) +
"(builder:flatbuffers.Builder";
code += arguments + "):flatbuffers.Offset {\n";
} else {
code += object_name + ".create" + Verbose(struct_def);
......@@ -1103,7 +1106,8 @@ class JsTsGenerator : public BaseGenerator {
"builder", false));
if (lang_.language == IDLOptions::kTs) {
code += "static start" + Verbose(struct_def) + "(builder:flatbuffers.Builder) {\n";
code += "static start" + Verbose(struct_def) +
"(builder:flatbuffers.Builder) {\n";
} else {
code += object_name + ".start" + Verbose(struct_def);
code += " = function(builder) {\n";
......@@ -1129,8 +1133,8 @@ class JsTsGenerator : public BaseGenerator {
if (lang_.language == IDLOptions::kTs) {
code += "static add" + MakeCamel(field.name);
code += "(builder:flatbuffers.Builder, " + argname + ":" + GetArgType(field) +
") {\n";
code += "(builder:flatbuffers.Builder, " + argname + ":" +
GetArgType(field) + ") {\n";
} else {
code += object_name + ".add" + MakeCamel(field.name);
code += " = function(builder, " + argname + ") {\n";
......@@ -1245,7 +1249,8 @@ class JsTsGenerator : public BaseGenerator {
if (lang_.language == IDLOptions::kTs) {
code += "static finish" + Verbose(struct_def) + "Buffer";
code += "(builder:flatbuffers.Builder, offset:flatbuffers.Offset) {\n";
code +=
"(builder:flatbuffers.Builder, offset:flatbuffers.Offset) {\n";
} else {
code += object_name + ".finish" + Verbose(struct_def) + "Buffer";
code += " = function(builder, offset) {\n";
......@@ -1259,40 +1264,77 @@ class JsTsGenerator : public BaseGenerator {
code += "};\n\n";
}
if (lang_.language == IDLOptions::kTs) {
// Generate a convenient CreateX function
if (lang_.language == IDLOptions::kJs) {
std::string paramDoc =
GenTypeAnnotation(kParam, "flatbuffers.Builder", "builder");
for (auto it = struct_def.fields.vec.begin();
it != struct_def.fields.vec.end(); ++it) {
const auto &field = **it;
if (field.deprecated)
continue;
paramDoc +=
GenTypeAnnotation(kParam, GetArgType(field), GetArgName(field));
}
paramDoc +=
GenTypeAnnotation(kReturns, "flatbuffers.Offset", "", false);
GenDocComment(code_ptr, paramDoc);
}
if (lang_.language == IDLOptions::kTs) {
code += "static create" + Verbose(struct_def);
code += "(builder:flatbuffers.Builder";
} else {
code += object_name + ".create" + Verbose(struct_def);
code += " = function(builder";
}
for (auto it = struct_def.fields.vec.begin();
it != struct_def.fields.vec.end(); ++it) {
const auto &field = **it;
if (field.deprecated)
continue;
if (lang_.language == IDLOptions::kTs) {
code += ", " + GetArgName(field) + ":" + GetArgType(field);
} else {
code += ", " + GetArgName(field);
}
}
if (lang_.language == IDLOptions::kTs) {
code += "):flatbuffers.Offset {\n";
code += " " + struct_def.name + ".start" + Verbose(struct_def) + "(builder);\n";
code += " " + struct_def.name + ".start" + Verbose(struct_def) +
"(builder);\n";
} else {
code += ") {\n";
code += " " + object_name + ".start" + Verbose(struct_def) +
"(builder);\n";
}
std::string methodPrefix =
lang_.language == IDLOptions::kTs ? struct_def.name : object_name;
for (auto it = struct_def.fields.vec.begin();
it != struct_def.fields.vec.end(); ++it) {
const auto &field = **it;
if (field.deprecated)
continue;
code += " " + struct_def.name + ".add" + MakeCamel(field.name) +"(";
code += " " + methodPrefix + ".add" + MakeCamel(field.name) + "(";
code += "builder, " + GetArgName(field) + ");\n";
}
code += " return " + struct_def.name + ".end" + Verbose(struct_def) + "(builder);\n";
code += " return " + methodPrefix + ".end" + Verbose(struct_def) +
"(builder);\n";
code += "}\n";
}
if (lang_.language == IDLOptions::kJs)
code += "\n";
}
if (lang_.language == IDLOptions::kTs) {
if (!object_namespace.empty()) { code += "}\n"; }
if (!object_namespace.empty()) {
code += "}\n";
}
code += "}\n";
}
}
......
This diff is collapsed.
......@@ -103,6 +103,17 @@ NamespaceA.NamespaceB.TableInNestedNS.endTableInNestedNS = function(builder) {
return offset;
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} foo
* @returns {flatbuffers.Offset}
*/
NamespaceA.NamespaceB.TableInNestedNS.createTableInNestedNS = function(builder, foo) {
NamespaceA.NamespaceB.TableInNestedNS.startTableInNestedNS(builder);
NamespaceA.NamespaceB.TableInNestedNS.addFoo(builder, foo);
return NamespaceA.NamespaceB.TableInNestedNS.endTableInNestedNS(builder);
}
/**
* @constructor
*/
......
......@@ -134,6 +134,21 @@ NamespaceA.TableInFirstNS.endTableInFirstNS = function(builder) {
return offset;
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} fooTableOffset
* @param {NS8755221360535654258.NamespaceA.NamespaceB.EnumInNestedNS} fooEnum
* @param {flatbuffers.Offset} fooStructOffset
* @returns {flatbuffers.Offset}
*/
NamespaceA.TableInFirstNS.createTableInFirstNS = function(builder, fooTableOffset, fooEnum, fooStructOffset) {
NamespaceA.TableInFirstNS.startTableInFirstNS(builder);
NamespaceA.TableInFirstNS.addFooTable(builder, fooTableOffset);
NamespaceA.TableInFirstNS.addFooEnum(builder, fooEnum);
NamespaceA.TableInFirstNS.addFooStruct(builder, fooStructOffset);
return NamespaceA.TableInFirstNS.endTableInFirstNS(builder);
}
/**
* @constructor
*/
......@@ -219,6 +234,19 @@ NamespaceC.TableInC.endTableInC = function(builder) {
return offset;
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} referToA1Offset
* @param {flatbuffers.Offset} referToA2Offset
* @returns {flatbuffers.Offset}
*/
NamespaceC.TableInC.createTableInC = function(builder, referToA1Offset, referToA2Offset) {
NamespaceC.TableInC.startTableInC(builder);
NamespaceC.TableInC.addReferToA1(builder, referToA1Offset);
NamespaceC.TableInC.addReferToA2(builder, referToA2Offset);
return NamespaceC.TableInC.endTableInC(builder);
}
/**
* @constructor
*/
......@@ -287,6 +315,17 @@ NamespaceA.SecondTableInA.endSecondTableInA = function(builder) {
return offset;
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} referToCOffset
* @returns {flatbuffers.Offset}
*/
NamespaceA.SecondTableInA.createSecondTableInA = function(builder, referToCOffset) {
NamespaceA.SecondTableInA.startSecondTableInA(builder);
NamespaceA.SecondTableInA.addReferToC(builder, referToCOffset);
return NamespaceA.SecondTableInA.endSecondTableInA(builder);
}
// Exports for Node.js and RequireJS
this.NamespaceA = NamespaceA;
this.NamespaceC = NamespaceC;
......@@ -95,6 +95,17 @@ Attacker.endAttacker = function(builder) {
return offset;
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} swordAttackDamage
* @returns {flatbuffers.Offset}
*/
Attacker.createAttacker = function(builder, swordAttackDamage) {
Attacker.startAttacker(builder);
Attacker.addSwordAttackDamage(builder, swordAttackDamage);
return Attacker.endAttacker(builder);
}
/**
* @constructor
*/
......@@ -429,6 +440,23 @@ Movie.finishMovieBuffer = function(builder, offset) {
builder.finish(offset, 'MOVI');
};
/**
* @param {flatbuffers.Builder} builder
* @param {Character} mainCharacterType
* @param {flatbuffers.Offset} mainCharacterOffset
* @param {flatbuffers.Offset} charactersTypeOffset
* @param {flatbuffers.Offset} charactersOffset
* @returns {flatbuffers.Offset}
*/
Movie.createMovie = function(builder, mainCharacterType, mainCharacterOffset, charactersTypeOffset, charactersOffset) {
Movie.startMovie(builder);
Movie.addMainCharacterType(builder, mainCharacterType);
Movie.addMainCharacter(builder, mainCharacterOffset);
Movie.addCharactersType(builder, charactersTypeOffset);
Movie.addCharacters(builder, charactersOffset);
return Movie.endMovie(builder);
}
// Exports for Node.js and RequireJS
this.Character = Character;
this.Attacker = Attacker;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment