The service is defined with the following function:
The --gen js:node code:
String kiter18 is passed to output.writeI64. Only TBinaryProtocol is affected by this. The function defenition:
Int64 constructor accepts the following arguments:
- new Int64(buffer[, offset=0]) - Existing Buffer with byte offset
- new Int64(Uint8Array[, offset=0]) - Existing Uint8Array with a byte offset
- new Int64(string) - Hex string (throws if n is outside int64 range)
- new Int64(number) - Number (throws if n is outside int64 range)
- new Int64(hi, lo) - Raw bits as two 32-bit values
For example "4398046511580" becomes [Int64 value:1189123005158784 octets:00 04 39 80 46 51 15 80]
This also happens when returning list<i64>, however in lists it can be bypassed by calling Number() on all Array elements before passing it to Thrift's result() function.
To solve this, the compiler can be adding Number() around everything that is a decimal number that is passed to writeI64; and if writeI64 will never be called with an actual hex string, then js library can be updated to include the Number() call around Int64 constructor argument.