pbf icon indicating copy to clipboard operation
pbf copied to clipboard

[WIP] Handling unsafe integers

Open zachasme opened this issue 6 years ago • 1 comments

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.

zachasme avatar Dec 12 '19 15:12 zachasme

BigInt support has landed in Safari.

Any thoughts on the PR?

zachasme avatar Oct 05 '20 09:10 zachasme