This is related to #44 and mostly intended to initiate a discussion about integers larger than MAX_SAFE_INTEGER.
It is also the result of me trying to figure out why managing a single feature (from a vector source) on my Mapbox GL map sometimes affected multiple features.
The problem, as far as I can tell, is that there is no distinction between 32bit and 64bitvarint. That means subtle bugs may (silently) be introduced when (de)serializing numbers above MAX_SAFE_INTEGER (2^53 - 1).
In my case the features on my map are hexagons based on Ubers h3 hierarchical grid (represented using uint64 ids, and generated using PostGIS' ST_AsMVT). When setting feature state on some of the higher resolution hexagons, the equally check breaks and multiple cells are affected even though their ids are unique (in the protobuf).
I can't see any way to solve this without introducing a breaking change that represents 64bit integers as either strings, number arrays or BigInt.
This PR uses BigInt because it was the simplest, but as stated earlier I am mostly interested in your thoughts on the issue. My goal is to achieve support for uint64 ids Mapbox GL JS vector sources.
Hi there!
This is related to #44 and mostly intended to initiate a discussion about integers larger than
MAX_SAFE_INTEGER
.It is also the result of me trying to figure out why managing a single feature (from a vector source) on my Mapbox GL map sometimes affected multiple features.
The problem, as far as I can tell, is that there is no distinction between
32bit
and64bit
varint
. That means subtle bugs may (silently) be introduced when (de)serializing numbers aboveMAX_SAFE_INTEGER
(2^53 - 1
).In my case the features on my map are hexagons based on
Uber
sh3
hierarchical grid (represented usinguint64
ids, and generated using PostGIS'ST_AsMVT
). When setting feature state on some of the higher resolution hexagons, the equally check breaks and multiple cells are affected even though their ids are unique (in the protobuf).I can't see any way to solve this without introducing a breaking change that represents 64bit integers as either strings, number arrays or
BigInt
.This PR uses
BigInt
because it was the simplest, but as stated earlier I am mostly interested in your thoughts on the issue. My goal is to achieve support foruint64
ids Mapbox GL JS vector sources.