Buğra Gedik created THRIFT-4675:
-----------------------------------
Summary: JS code generators not handling int64 type properly for
constants and for TypeScript type mappings
Key: THRIFT-4675
URL: https://issues.apache.org/jira/browse/THRIFT-4675
Project: Thrift
Issue Type: Bug
Components: JavaScript - Compiler
Affects Versions: 0.11.0
Reporter: Buğra Gedik
The code generated for JS constants involving int64 does not reply on the Int64
type. For example:
const i64 MAX_INT64 = 9223372036854775807
const i64 SMALL_INT64 = 15
This results in generating the following code:
For node.js:
ttypes.MAX_INT64 = 9223372036854775807;
ttypes.SMALL_INT64 = 15;
For the browser:
MAX_INT64 = 9223372036854775807;
SMALL_INT64 = 15;
Since JS cannot represent integers that do not fit into a double precision
floating point, this will result in lost precision.
The correct output should be (node.js):
ttypes.MAX_INT64 = new Int64(''7FFFFFFFFFFFFFFF'');
ttypes.SMALL_INT64 = new Int64(15);
Besides this, none of the Typescript type bindings (.d.ts files) contain the
types for int64 types. This includes both the constants, types, and service
method parameters.
Note that fixing this may break some of the existing code. So please advise if
this should be a separate option or not. In my mind, this is how it should work
by default, but I don't know the policy in Thrift regarding backward
compatibility.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)