diff options
author | hanstzou <hanstzou@users.noreply.github.com> | 2020-06-26 05:42:47 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-25 14:42:47 -0700 |
commit | ca1190a3d8338424e7746519118a5bbc44d42fab (patch) | |
tree | 16a47af6144f71d8515c905d4795bc10ae7d9fd6 | |
parent | 7571b2ac56271777e0c5fde11371c0d054e9c1f5 (diff) | |
download | flatbuffers-ca1190a3d8338424e7746519118a5bbc44d42fab.tar.gz flatbuffers-ca1190a3d8338424e7746519118a5bbc44d42fab.tar.bz2 flatbuffers-ca1190a3d8338424e7746519118a5bbc44d42fab.zip |
[TS] Use proper TypedArray in create*Vector (#5991)
* [TS] Use proper TypedArray in create*Vector
This commit adds TypeScript function overloads to create*Vector for
proper TypedArray types, effectively resolves #5373.
* Add @deprecated to old Uint8Array overloads
-rw-r--r-- | src/idl_gen_js_ts.cpp | 26 | ||||
-rw-r--r-- | tests/monster_test_generated.ts | 27 |
2 files changed, 43 insertions, 10 deletions
diff --git a/src/idl_gen_js_ts.cpp b/src/idl_gen_js_ts.cpp index ad1d8a0c..101fa29b 100644 --- a/src/idl_gen_js_ts.cpp +++ b/src/idl_gen_js_ts.cpp @@ -1804,11 +1804,29 @@ class JsTsGenerator : public BaseGenerator { false)); if (lang_.language == IDLOptions::kTs) { - code += "static create" + MakeCamel(field.name); + const std::string sig_begin = + "static create" + MakeCamel(field.name) + + "Vector(builder:flatbuffers.Builder, data:"; + const std::string sig_end = "):flatbuffers.Offset"; std::string type = GenTypeName(vector_type, true) + "[]"; - if (type == "number[]") { type += " | Uint8Array"; } - code += "Vector(builder:flatbuffers.Builder, data:" + type + - "):flatbuffers.Offset {\n"; + if (type == "number[]") { + const auto &array_type = GenType(vector_type); + // the old type should be deprecated in the future + std::string type_old = "number[]|Uint8Array"; + std::string type_new = "number[]|" + array_type + "Array"; + if (type_old == type_new) { + type = type_new; + } else { + // add function overloads + code += sig_begin + type_new + sig_end + ";\n"; + code += + "/**\n * @deprecated This Uint8Array overload will " + "be removed in the future.\n */\n"; + code += sig_begin + type_old + sig_end + ";\n"; + type = type_new + "|Uint8Array"; + } + } + code += sig_begin + type + sig_end + " {\n"; } else { code += object_name + ".create" + MakeCamel(field.name); code += "Vector = function(builder, data) {\n"; diff --git a/tests/monster_test_generated.ts b/tests/monster_test_generated.ts index fdf75892..1130761d 100644 --- a/tests/monster_test_generated.ts +++ b/tests/monster_test_generated.ts @@ -2191,7 +2191,7 @@ static addInventory(builder:flatbuffers.Builder, inventoryOffset:flatbuffers.Off * @param Array.<number> data * @returns flatbuffers.Offset */ -static createInventoryVector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset { +static createInventoryVector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset { builder.startVector(1, data.length, 1); for (var i = data.length - 1; i >= 0; i--) { builder.addInt8(data[i]); @@ -2326,7 +2326,7 @@ static addTestnestedflatbuffer(builder:flatbuffers.Builder, testnestedflatbuffer * @param Array.<number> data * @returns flatbuffers.Offset */ -static createTestnestedflatbufferVector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset { +static createTestnestedflatbufferVector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset { builder.startVector(1, data.length, 1); for (var i = data.length - 1; i >= 0; i--) { builder.addInt8(data[i]); @@ -2533,7 +2533,7 @@ static addFlex(builder:flatbuffers.Builder, flexOffset:flatbuffers.Offset) { * @param Array.<number> data * @returns flatbuffers.Offset */ -static createFlexVector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset { +static createFlexVector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset { builder.startVector(1, data.length, 1); for (var i = data.length - 1; i >= 0; i--) { builder.addInt8(data[i]); @@ -2607,7 +2607,12 @@ static addVectorOfDoubles(builder:flatbuffers.Builder, vectorOfDoublesOffset:fla * @param Array.<number> data * @returns flatbuffers.Offset */ -static createVectorOfDoublesVector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset { +static createVectorOfDoublesVector(builder:flatbuffers.Builder, data:number[]|Float64Array):flatbuffers.Offset; +/** + * @deprecated This Uint8Array overload will be removed in the future. + */ +static createVectorOfDoublesVector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset; +static createVectorOfDoublesVector(builder:flatbuffers.Builder, data:number[]|Float64Array|Uint8Array):flatbuffers.Offset { builder.startVector(8, data.length, 8); for (var i = data.length - 1; i >= 0; i--) { builder.addFloat64(data[i]); @@ -3633,7 +3638,12 @@ static addV8(builder:flatbuffers.Builder, v8Offset:flatbuffers.Offset) { * @param Array.<number> data * @returns flatbuffers.Offset */ -static createV8Vector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset { +static createV8Vector(builder:flatbuffers.Builder, data:number[]|Int8Array):flatbuffers.Offset; +/** + * @deprecated This Uint8Array overload will be removed in the future. + */ +static createV8Vector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset; +static createV8Vector(builder:flatbuffers.Builder, data:number[]|Int8Array|Uint8Array):flatbuffers.Offset { builder.startVector(1, data.length, 1); for (var i = data.length - 1; i >= 0; i--) { builder.addInt8(data[i]); @@ -3662,7 +3672,12 @@ static addVf64(builder:flatbuffers.Builder, vf64Offset:flatbuffers.Offset) { * @param Array.<number> data * @returns flatbuffers.Offset */ -static createVf64Vector(builder:flatbuffers.Builder, data:number[] | Uint8Array):flatbuffers.Offset { +static createVf64Vector(builder:flatbuffers.Builder, data:number[]|Float64Array):flatbuffers.Offset; +/** + * @deprecated This Uint8Array overload will be removed in the future. + */ +static createVf64Vector(builder:flatbuffers.Builder, data:number[]|Uint8Array):flatbuffers.Offset; +static createVf64Vector(builder:flatbuffers.Builder, data:number[]|Float64Array|Uint8Array):flatbuffers.Offset { builder.startVector(8, data.length, 8); for (var i = data.length - 1; i >= 0; i--) { builder.addFloat64(data[i]); |