mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 10:51:07 +00:00
js: avoid use of BigInt operations for older safari browsers [#103]
This commit is contained in:
28
js/index.ts
28
js/index.ts
@@ -330,6 +330,12 @@ export class FetchSource implements Source {
|
||||
}
|
||||
}
|
||||
|
||||
export function getUint64(v: DataView, offset: number): number {
|
||||
const wh = v.getUint32(offset + 4, true);
|
||||
const wl = v.getUint32(offset + 0, true);
|
||||
return wh * Math.pow(2, 32) + wl;
|
||||
}
|
||||
|
||||
export function bytesToHeader(bytes: ArrayBuffer, etag?: string): Header {
|
||||
const v = new DataView(bytes);
|
||||
const spec_version = v.getUint8(7);
|
||||
@@ -341,17 +347,17 @@ export function bytesToHeader(bytes: ArrayBuffer, etag?: string): Header {
|
||||
|
||||
return {
|
||||
specVersion: spec_version,
|
||||
rootDirectoryOffset: Number(v.getBigUint64(8, true)),
|
||||
rootDirectoryLength: Number(v.getBigUint64(16, true)),
|
||||
jsonMetadataOffset: Number(v.getBigUint64(24, true)),
|
||||
jsonMetadataLength: Number(v.getBigUint64(32, true)),
|
||||
leafDirectoryOffset: Number(v.getBigUint64(40, true)),
|
||||
leafDirectoryLength: Number(v.getBigUint64(48, true)),
|
||||
tileDataOffset: Number(v.getBigUint64(56, true)),
|
||||
tileDataLength: Number(v.getBigUint64(64, true)),
|
||||
numAddressedTiles: Number(v.getBigUint64(72, true)),
|
||||
numTileEntries: Number(v.getBigUint64(80, true)),
|
||||
numTileContents: Number(v.getBigUint64(88, true)),
|
||||
rootDirectoryOffset: getUint64(v, 8),
|
||||
rootDirectoryLength: getUint64(v, 16),
|
||||
jsonMetadataOffset: getUint64(v, 24),
|
||||
jsonMetadataLength: getUint64(v, 32),
|
||||
leafDirectoryOffset: getUint64(v, 40),
|
||||
leafDirectoryLength: getUint64(v, 48),
|
||||
tileDataOffset: getUint64(v, 56),
|
||||
tileDataLength: getUint64(v, 64),
|
||||
numAddressedTiles: getUint64(v, 72),
|
||||
numTileEntries: getUint64(v, 80),
|
||||
numTileContents: getUint64(v, 88),
|
||||
clustered: v.getUint8(96) === 1,
|
||||
internalCompression: v.getUint8(97),
|
||||
tileCompression: v.getUint8(98),
|
||||
|
||||
@@ -14,6 +14,7 @@ import {
|
||||
RangeResponse,
|
||||
EtagMismatch,
|
||||
PMTiles,
|
||||
getUint64,
|
||||
} from "../index";
|
||||
|
||||
test("varint", () => {
|
||||
@@ -171,6 +172,16 @@ test("cache getHeader", async () => {
|
||||
assert.strictEqual(header.maxLat, 1);
|
||||
});
|
||||
|
||||
test("getUint64", async () => {
|
||||
const view = new DataView(new ArrayBuffer(8));
|
||||
view.setBigUint64(0, 0n, true);
|
||||
assert.strictEqual(getUint64(view, 0), 0);
|
||||
view.setBigUint64(0, 1n, true);
|
||||
assert.strictEqual(getUint64(view, 0), 1);
|
||||
view.setBigUint64(0, 9007199254740991n, true);
|
||||
assert.strictEqual(getUint64(view, 0), 9007199254740991);
|
||||
});
|
||||
|
||||
test("cache check against empty", async () => {
|
||||
const source = new TestNodeFileSource("test/data/empty.pmtiles", "1");
|
||||
const cache = new SharedPromiseCache();
|
||||
|
||||
Reference in New Issue
Block a user