[WIP] Handling unsafe integers
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 and 64bit varint. 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.