@loaders.gl/pmtiles 4.3.0-alpha.3 → 4.3.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dist.dev.js CHANGED
@@ -794,7 +794,8 @@ var __exports__ = (() => {
794
794
  var bundle_exports = {};
795
795
  __export(bundle_exports, {
796
796
  PMTilesSource: () => PMTilesSource,
797
- PMTilesTileSource: () => PMTilesTileSource
797
+ PMTilesTileSource: () => PMTilesTileSource,
798
+ _PMTilesLoader: () => PMTilesLoader
798
799
  });
799
800
  __reExport(bundle_exports, __toESM(require_core(), 1));
800
801
 
@@ -1427,6 +1428,33 @@ var __exports__ = (() => {
1427
1428
  return filename;
1428
1429
  }
1429
1430
 
1431
+ // ../loader-utils/src/lib/files/blob-file.ts
1432
+ var BlobFile = class {
1433
+ handle;
1434
+ size;
1435
+ bigsize;
1436
+ url;
1437
+ constructor(blob) {
1438
+ this.handle = blob instanceof ArrayBuffer ? new Blob([blob]) : blob;
1439
+ this.size = blob instanceof ArrayBuffer ? blob.byteLength : blob.size;
1440
+ this.bigsize = BigInt(this.size);
1441
+ this.url = blob instanceof File ? blob.name : "";
1442
+ }
1443
+ async close() {
1444
+ }
1445
+ async stat() {
1446
+ return {
1447
+ size: this.handle.size,
1448
+ bigsize: BigInt(this.handle.size),
1449
+ isDirectory: false
1450
+ };
1451
+ }
1452
+ async read(start, length) {
1453
+ const arrayBuffer = await this.handle.slice(start, start + length).arrayBuffer();
1454
+ return arrayBuffer;
1455
+ }
1456
+ };
1457
+
1430
1458
  // ../loader-utils/src/lib/sources/data-source.ts
1431
1459
  var DataSource = class {
1432
1460
  /** A resolved fetch function extracted from loadOptions prop */
@@ -1880,6 +1908,58 @@ var __exports__ = (() => {
1880
1908
  options: DEFAULT_IMAGE_LOADER_OPTIONS
1881
1909
  };
1882
1910
 
1911
+ // ../mvt/src/lib/get-schemas-from-tilejson.ts
1912
+ function getSchemaFromTileJSONLayer(layer) {
1913
+ const fields = [];
1914
+ if (layer.fields) {
1915
+ for (const field of layer.fields) {
1916
+ fields.push({
1917
+ name: field.name,
1918
+ type: getDataTypeFromTileJSONField(field),
1919
+ metadata: getMetadataFromTileJSONField(field)
1920
+ });
1921
+ }
1922
+ }
1923
+ return {
1924
+ metadata: getMetadataFromTileJSONLayer(layer),
1925
+ fields
1926
+ };
1927
+ }
1928
+ function getMetadataFromTileJSONLayer(layer) {
1929
+ const metadata = {};
1930
+ for (const [key, value] of Object.entries(layer)) {
1931
+ if (key !== "fields" && value) {
1932
+ metadata[key] = JSON.stringify(value);
1933
+ }
1934
+ }
1935
+ return metadata;
1936
+ }
1937
+ function getDataTypeFromTileJSONField(field) {
1938
+ switch (field.type.toLowerCase()) {
1939
+ case "float32":
1940
+ return "float32";
1941
+ case "number":
1942
+ case "float64":
1943
+ return "float64";
1944
+ case "string":
1945
+ case "utf8":
1946
+ return "utf8";
1947
+ case "boolean":
1948
+ return "bool";
1949
+ default:
1950
+ return "null";
1951
+ }
1952
+ }
1953
+ function getMetadataFromTileJSONField(field) {
1954
+ const metadata = {};
1955
+ for (const [key, value] of Object.entries(field)) {
1956
+ if (key !== "name" && value) {
1957
+ metadata[key] = JSON.stringify(value);
1958
+ }
1959
+ }
1960
+ return metadata;
1961
+ }
1962
+
1883
1963
  // ../mvt/src/lib/parse-tilejson.ts
1884
1964
  var isObject = (x2) => x2 !== null && typeof x2 === "object";
1885
1965
  function parseTileJSON(jsonMetadata, options) {
@@ -1975,14 +2055,14 @@ var __exports__ = (() => {
1975
2055
  function mergeLayers(layers, tilestatsLayers) {
1976
2056
  return layers.map((layer) => {
1977
2057
  const tilestatsLayer = tilestatsLayers.find((tsLayer) => tsLayer.name === layer.name);
1978
- const fields = tilestatsLayer?.fields || [];
1979
- const layer2 = { ...layer };
1980
- delete layer2.fields;
1981
- return {
1982
- ...layer2,
2058
+ const fields = tilestatsLayer?.fields || layer.fields || [];
2059
+ const mergedLayer = {
2060
+ ...layer,
1983
2061
  ...tilestatsLayer,
1984
2062
  fields
1985
2063
  };
2064
+ mergedLayer.schema = getSchemaFromTileJSONLayer(mergedLayer);
2065
+ return mergedLayer;
1986
2066
  });
1987
2067
  }
1988
2068
  function parseBounds(bounds) {
@@ -5240,8 +5320,7 @@ var __exports__ = (() => {
5240
5320
 
5241
5321
  // src/lib/parse-pmtiles.ts
5242
5322
  var { TileType: TileType2 } = dist_exports;
5243
- function parsePMTilesHeader(header, pmmetadata, options, loadOptions) {
5244
- const pmtilesMetadata = pmmetadata;
5323
+ function parsePMTilesHeader(header, pmtilesMetadata, options, loadOptions) {
5245
5324
  let tilejson = null;
5246
5325
  if (pmtilesMetadata) {
5247
5326
  try {
@@ -5351,7 +5430,7 @@ var __exports__ = (() => {
5351
5430
  super(props);
5352
5431
  this.props = props;
5353
5432
  const url = typeof data === "string" ? resolvePath(data) : new BlobSource(data, "pmtiles");
5354
- this.data = props.url;
5433
+ this.data = data;
5355
5434
  this.pmtiles = new PMTiles2(url);
5356
5435
  this.getTileData = this.getTileData.bind(this);
5357
5436
  this.metadata = this.getMetadata();
@@ -5361,7 +5440,7 @@ var __exports__ = (() => {
5361
5440
  }
5362
5441
  async getMetadata() {
5363
5442
  const pmtilesHeader = await this.pmtiles.getHeader();
5364
- const pmtilesMetadata = await this.pmtiles.getMetadata();
5443
+ const pmtilesMetadata = await this.pmtiles.getMetadata() || {};
5365
5444
  const metadata = parsePMTilesHeader(
5366
5445
  pmtilesHeader,
5367
5446
  pmtilesMetadata,
@@ -5417,6 +5496,47 @@ var __exports__ = (() => {
5417
5496
  return arrayBuffer ? await MVTLoader.parse(arrayBuffer, loadOptions) : null;
5418
5497
  }
5419
5498
  };
5499
+
5500
+ // src/lib/version.ts
5501
+ var VERSION7 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
5502
+
5503
+ // src/pmtiles-loader.ts
5504
+ var PMTilesLoader = {
5505
+ name: "PMTiles",
5506
+ id: "pmtiles",
5507
+ module: "pmtiles",
5508
+ version: VERSION7,
5509
+ extensions: ["pmtiles"],
5510
+ mimeTypes: ["application/octet-stream"],
5511
+ tests: ["PMTiles"],
5512
+ options: {
5513
+ pmtiles: {}
5514
+ },
5515
+ parse: async (arrayBuffer, options) => parseFileAsPMTiles(new BlobFile(new Blob([arrayBuffer])), options),
5516
+ parseFile: parseFileAsPMTiles
5517
+ };
5518
+ async function parseFileAsPMTiles(file, options) {
5519
+ const source = new PMTilesTileSource(file.handle, {
5520
+ pmtiles: options?.pmtiles || {}
5521
+ });
5522
+ const formatSpecificMetadata = await source.getMetadata();
5523
+ const { tileMIMEType, tilejson = {} } = formatSpecificMetadata;
5524
+ const { layers = [] } = tilejson;
5525
+ switch (tileMIMEType) {
5526
+ case "application/vnd.mapbox-vector-tile":
5527
+ return {
5528
+ shape: "vector-source",
5529
+ layers: layers.map((layer) => ({ name: layer.name, schema: layer.schema })),
5530
+ tables: [],
5531
+ formatSpecificMetadata
5532
+ };
5533
+ case "image/png":
5534
+ case "image/jpeg":
5535
+ return { shape: "image-source", formatSpecificMetadata };
5536
+ default:
5537
+ throw new Error(`PMTilesLoader: Unsupported tile MIME type ${tileMIMEType}`);
5538
+ }
5539
+ }
5420
5540
  return __toCommonJS(bundle_exports);
5421
5541
  })();
5422
5542
  /*! Bundled license information:
package/dist/dist.min.js CHANGED
@@ -4,7 +4,7 @@
4
4
  else if (typeof define === 'function' && define.amd) define([], factory);
5
5
  else if (typeof exports === 'object') exports['loaders'] = factory();
6
6
  else root['loaders'] = factory();})(globalThis, function () {
7
- "use strict";var __exports__=(()=>{var vr=Object.create;var fe=Object.defineProperty;var Tr=Object.getOwnPropertyDescriptor;var Ir=Object.getOwnPropertyNames;var Pr=Object.getPrototypeOf,Fr=Object.prototype.hasOwnProperty;var br=(e,t,n)=>t in e?fe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Qe=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),zt=(e,t)=>{for(var n in t)fe(e,n,{get:t[n],enumerable:!0})},Ae=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ir(t))!Fr.call(e,o)&&o!==n&&fe(e,o,{get:()=>t[o],enumerable:!(r=Tr(t,o))||r.enumerable});return e},De=(e,t,n)=>(Ae(e,t,"default"),n&&Ae(n,t,"default")),jt=(e,t,n)=>(n=e!=null?vr(Pr(e)):{},Ae(t||!e||!e.__esModule?fe(n,"default",{value:e,enumerable:!0}):n,e)),Sr=e=>Ae(fe({},"__esModule",{value:!0}),e);var Rt=(e,t,n)=>(br(e,typeof t!="symbol"?t+"":t,n),n);var Zt=Qe((gs,Ht)=>{Ht.exports=globalThis.loaders});var _n=Qe(xt=>{xt.read=function(e,t,n,r,o){var i,s,a=o*8-r-1,l=(1<<a)-1,c=l>>1,f=-7,u=n?o-1:0,h=n?-1:1,d=e[t+u];for(u+=h,i=d&(1<<-f)-1,d>>=-f,f+=a;f>0;i=i*256+e[t+u],u+=h,f-=8);for(s=i&(1<<-f)-1,i>>=-f,f+=r;f>0;s=s*256+e[t+u],u+=h,f-=8);if(i===0)i=1-c;else{if(i===l)return s?NaN:(d?-1:1)*(1/0);s=s+Math.pow(2,r),i=i-c}return(d?-1:1)*s*Math.pow(2,i-r)};xt.write=function(e,t,n,r,o,i){var s,a,l,c=i*8-o-1,f=(1<<c)-1,u=f>>1,h=o===23?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:i-1,p=r?1:-1,y=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=f):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),s+u>=1?t+=h/l:t+=h*Math.pow(2,1-u),t*l>=2&&(s++,l/=2),s+u>=f?(a=0,s=f):s+u>=1?(a=(t*l-1)*Math.pow(2,o),s=s+u):(a=t*Math.pow(2,u-1)*Math.pow(2,o),s=0));o>=8;e[n+d]=a&255,d+=p,a/=256,o-=8);for(s=s<<o|a,c+=o;c>0;e[n+d]=s&255,d+=p,s/=256,c-=8);e[n+d-p]|=y*128}});var Mn=Qe((Ol,Vn)=>{"use strict";Vn.exports=x;var je=_n();function x(e){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(e)?e:new Uint8Array(e||0),this.pos=0,this.type=0,this.length=this.buf.length}x.Varint=0;x.Fixed64=1;x.Bytes=2;x.Fixed32=5;var wt=(1<<16)*(1<<16),Bn=1/wt,ti=12,Ln=typeof TextDecoder>"u"?null:new TextDecoder("utf8");x.prototype={destroy:function(){this.buf=null},readFields:function(e,t,n){for(n=n||this.length;this.pos<n;){var r=this.readVarint(),o=r>>3,i=this.pos;this.type=r&7,e(o,t,this),this.pos===i&&this.skip(r)}return t},readMessage:function(e,t){return this.readFields(e,t,this.readVarint()+this.pos)},readFixed32:function(){var e=Re(this.buf,this.pos);return this.pos+=4,e},readSFixed32:function(){var e=Dn(this.buf,this.pos);return this.pos+=4,e},readFixed64:function(){var e=Re(this.buf,this.pos)+Re(this.buf,this.pos+4)*wt;return this.pos+=8,e},readSFixed64:function(){var e=Re(this.buf,this.pos)+Dn(this.buf,this.pos+4)*wt;return this.pos+=8,e},readFloat:function(){var e=je.read(this.buf,this.pos,!0,23,4);return this.pos+=4,e},readDouble:function(){var e=je.read(this.buf,this.pos,!0,52,8);return this.pos+=8,e},readVarint:function(e){var t=this.buf,n,r;return r=t[this.pos++],n=r&127,r<128||(r=t[this.pos++],n|=(r&127)<<7,r<128)||(r=t[this.pos++],n|=(r&127)<<14,r<128)||(r=t[this.pos++],n|=(r&127)<<21,r<128)?n:(r=t[this.pos],n|=(r&15)<<28,ni(n,e,this))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var e=this.readVarint();return e%2===1?(e+1)/-2:e/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var e=this.readVarint()+this.pos,t=this.pos;return this.pos=e,e-t>=ti&&Ln?mi(this.buf,t,e):gi(this.buf,t,e)},readBytes:function(){var e=this.readVarint()+this.pos,t=this.buf.subarray(this.pos,e);return this.pos=e,t},readPackedVarint:function(e,t){if(this.type!==x.Bytes)return e.push(this.readVarint(t));var n=j(this);for(e=e||[];this.pos<n;)e.push(this.readVarint(t));return e},readPackedSVarint:function(e){if(this.type!==x.Bytes)return e.push(this.readSVarint());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readSVarint());return e},readPackedBoolean:function(e){if(this.type!==x.Bytes)return e.push(this.readBoolean());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readBoolean());return e},readPackedFloat:function(e){if(this.type!==x.Bytes)return e.push(this.readFloat());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readFloat());return e},readPackedDouble:function(e){if(this.type!==x.Bytes)return e.push(this.readDouble());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readDouble());return e},readPackedFixed32:function(e){if(this.type!==x.Bytes)return e.push(this.readFixed32());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readFixed32());return e},readPackedSFixed32:function(e){if(this.type!==x.Bytes)return e.push(this.readSFixed32());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readSFixed32());return e},readPackedFixed64:function(e){if(this.type!==x.Bytes)return e.push(this.readFixed64());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readFixed64());return e},readPackedSFixed64:function(e){if(this.type!==x.Bytes)return e.push(this.readSFixed64());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readSFixed64());return e},skip:function(e){var t=e&7;if(t===x.Varint)for(;this.buf[this.pos++]>127;);else if(t===x.Bytes)this.pos=this.readVarint()+this.pos;else if(t===x.Fixed32)this.pos+=4;else if(t===x.Fixed64)this.pos+=8;else throw new Error("Unimplemented type: "+t)},writeTag:function(e,t){this.writeVarint(e<<3|t)},realloc:function(e){for(var t=this.length||16;t<this.pos+e;)t*=2;if(t!==this.length){var n=new Uint8Array(t);n.set(this.buf),this.buf=n,this.length=t}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(e){this.realloc(4),ie(this.buf,e,this.pos),this.pos+=4},writeSFixed32:function(e){this.realloc(4),ie(this.buf,e,this.pos),this.pos+=4},writeFixed64:function(e){this.realloc(8),ie(this.buf,e&-1,this.pos),ie(this.buf,Math.floor(e*Bn),this.pos+4),this.pos+=8},writeSFixed64:function(e){this.realloc(8),ie(this.buf,e&-1,this.pos),ie(this.buf,Math.floor(e*Bn),this.pos+4),this.pos+=8},writeVarint:function(e){if(e=+e||0,e>268435455||e<0){ri(e,this);return}this.realloc(4),this.buf[this.pos++]=e&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=e>>>7&127)))},writeSVarint:function(e){this.writeVarint(e<0?-e*2-1:e*2)},writeBoolean:function(e){this.writeVarint(Boolean(e))},writeString:function(e){e=String(e),this.realloc(e.length*4),this.pos++;var t=this.pos;this.pos=yi(this.buf,e,this.pos);var n=this.pos-t;n>=128&&An(t,n,this),this.pos=t-1,this.writeVarint(n),this.pos+=n},writeFloat:function(e){this.realloc(4),je.write(this.buf,e,this.pos,!0,23,4),this.pos+=4},writeDouble:function(e){this.realloc(8),je.write(this.buf,e,this.pos,!0,52,8),this.pos+=8},writeBytes:function(e){var t=e.length;this.writeVarint(t),this.realloc(t);for(var n=0;n<t;n++)this.buf[this.pos++]=e[n]},writeRawMessage:function(e,t){this.pos++;var n=this.pos;e(t,this);var r=this.pos-n;r>=128&&An(n,r,this),this.pos=n-1,this.writeVarint(r),this.pos+=r},writeMessage:function(e,t,n){this.writeTag(e,x.Bytes),this.writeRawMessage(t,n)},writePackedVarint:function(e,t){t.length&&this.writeMessage(e,si,t)},writePackedSVarint:function(e,t){t.length&&this.writeMessage(e,ai,t)},writePackedBoolean:function(e,t){t.length&&this.writeMessage(e,fi,t)},writePackedFloat:function(e,t){t.length&&this.writeMessage(e,li,t)},writePackedDouble:function(e,t){t.length&&this.writeMessage(e,ci,t)},writePackedFixed32:function(e,t){t.length&&this.writeMessage(e,ui,t)},writePackedSFixed32:function(e,t){t.length&&this.writeMessage(e,hi,t)},writePackedFixed64:function(e,t){t.length&&this.writeMessage(e,di,t)},writePackedSFixed64:function(e,t){t.length&&this.writeMessage(e,pi,t)},writeBytesField:function(e,t){this.writeTag(e,x.Bytes),this.writeBytes(t)},writeFixed32Field:function(e,t){this.writeTag(e,x.Fixed32),this.writeFixed32(t)},writeSFixed32Field:function(e,t){this.writeTag(e,x.Fixed32),this.writeSFixed32(t)},writeFixed64Field:function(e,t){this.writeTag(e,x.Fixed64),this.writeFixed64(t)},writeSFixed64Field:function(e,t){this.writeTag(e,x.Fixed64),this.writeSFixed64(t)},writeVarintField:function(e,t){this.writeTag(e,x.Varint),this.writeVarint(t)},writeSVarintField:function(e,t){this.writeTag(e,x.Varint),this.writeSVarint(t)},writeStringField:function(e,t){this.writeTag(e,x.Bytes),this.writeString(t)},writeFloatField:function(e,t){this.writeTag(e,x.Fixed32),this.writeFloat(t)},writeDoubleField:function(e,t){this.writeTag(e,x.Fixed64),this.writeDouble(t)},writeBooleanField:function(e,t){this.writeVarintField(e,Boolean(t))}};function ni(e,t,n){var r=n.buf,o,i;if(i=r[n.pos++],o=(i&112)>>4,i<128||(i=r[n.pos++],o|=(i&127)<<3,i<128)||(i=r[n.pos++],o|=(i&127)<<10,i<128)||(i=r[n.pos++],o|=(i&127)<<17,i<128)||(i=r[n.pos++],o|=(i&127)<<24,i<128)||(i=r[n.pos++],o|=(i&1)<<31,i<128))return oe(e,o,t);throw new Error("Expected varint not more than 10 bytes")}function j(e){return e.type===x.Bytes?e.readVarint()+e.pos:e.pos+1}function oe(e,t,n){return n?t*4294967296+(e>>>0):(t>>>0)*4294967296+(e>>>0)}function ri(e,t){var n,r;if(e>=0?(n=e%4294967296|0,r=e/4294967296|0):(n=~(-e%4294967296),r=~(-e/4294967296),n^4294967295?n=n+1|0:(n=0,r=r+1|0)),e>=18446744073709552e3||e<-18446744073709552e3)throw new Error("Given varint doesn't fit into 10 bytes");t.realloc(10),oi(n,r,t),ii(r,t)}function oi(e,t,n){n.buf[n.pos++]=e&127|128,e>>>=7,n.buf[n.pos++]=e&127|128,e>>>=7,n.buf[n.pos++]=e&127|128,e>>>=7,n.buf[n.pos++]=e&127|128,e>>>=7,n.buf[n.pos]=e&127}function ii(e,t){var n=(e&7)<<4;t.buf[t.pos++]|=n|((e>>>=3)?128:0),e&&(t.buf[t.pos++]=e&127|((e>>>=7)?128:0),e&&(t.buf[t.pos++]=e&127|((e>>>=7)?128:0),e&&(t.buf[t.pos++]=e&127|((e>>>=7)?128:0),e&&(t.buf[t.pos++]=e&127|((e>>>=7)?128:0),e&&(t.buf[t.pos++]=e&127)))))}function An(e,t,n){var r=t<=16383?1:t<=2097151?2:t<=268435455?3:Math.floor(Math.log(t)/(Math.LN2*7));n.realloc(r);for(var o=n.pos-1;o>=e;o--)n.buf[o+r]=n.buf[o]}function si(e,t){for(var n=0;n<e.length;n++)t.writeVarint(e[n])}function ai(e,t){for(var n=0;n<e.length;n++)t.writeSVarint(e[n])}function li(e,t){for(var n=0;n<e.length;n++)t.writeFloat(e[n])}function ci(e,t){for(var n=0;n<e.length;n++)t.writeDouble(e[n])}function fi(e,t){for(var n=0;n<e.length;n++)t.writeBoolean(e[n])}function ui(e,t){for(var n=0;n<e.length;n++)t.writeFixed32(e[n])}function hi(e,t){for(var n=0;n<e.length;n++)t.writeSFixed32(e[n])}function di(e,t){for(var n=0;n<e.length;n++)t.writeFixed64(e[n])}function pi(e,t){for(var n=0;n<e.length;n++)t.writeSFixed64(e[n])}function Re(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16)+e[t+3]*16777216}function ie(e,t,n){e[n]=t,e[n+1]=t>>>8,e[n+2]=t>>>16,e[n+3]=t>>>24}function Dn(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16)+(e[t+3]<<24)}function gi(e,t,n){for(var r="",o=t;o<n;){var i=e[o],s=null,a=i>239?4:i>223?3:i>191?2:1;if(o+a>n)break;var l,c,f;a===1?i<128&&(s=i):a===2?(l=e[o+1],(l&192)===128&&(s=(i&31)<<6|l&63,s<=127&&(s=null))):a===3?(l=e[o+1],c=e[o+2],(l&192)===128&&(c&192)===128&&(s=(i&15)<<12|(l&63)<<6|c&63,(s<=2047||s>=55296&&s<=57343)&&(s=null))):a===4&&(l=e[o+1],c=e[o+2],f=e[o+3],(l&192)===128&&(c&192)===128&&(f&192)===128&&(s=(i&15)<<18|(l&63)<<12|(c&63)<<6|f&63,(s<=65535||s>=1114112)&&(s=null))),s===null?(s=65533,a=1):s>65535&&(s-=65536,r+=String.fromCharCode(s>>>10&1023|55296),s=56320|s&1023),r+=String.fromCharCode(s),o+=a}return r}function mi(e,t,n){return Ln.decode(e.subarray(t,n))}function yi(e,t,n){for(var r=0,o,i;r<t.length;r++){if(o=t.charCodeAt(r),o>55295&&o<57344)if(i)if(o<56320){e[n++]=239,e[n++]=191,e[n++]=189,i=o;continue}else o=i-55296<<10|o-56320|65536,i=null;else{o>56319||r+1===t.length?(e[n++]=239,e[n++]=191,e[n++]=189):i=o;continue}else i&&(e[n++]=239,e[n++]=191,e[n++]=189,i=null);o<128?e[n++]=o:(o<2048?e[n++]=o>>6|192:(o<65536?e[n++]=o>>12|224:(e[n++]=o>>18|240,e[n++]=o>>12&63|128),e[n++]=o>>6&63|128),e[n++]=o&63|128)}return n}});var _e={};zt(_e,{PMTilesSource:()=>pr,PMTilesTileSource:()=>Ee});De(_e,jt(Zt(),1));function ue(e,t){if(!e)throw new Error(t||"loader assertion failed.")}var G={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},Er=G.self||G.window||G.global||{},_r=G.window||G.self||G.global||{},Br=G.global||G.self||G.window||{},Ar=G.document||{};var qe=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var Wt=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Dr=Wt&&parseFloat(Wt[1])||0;function H(e){return H=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},H(e)}function et(e,t){if(H(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||"default");if(H(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function tt(e){var t=et(e,"string");return H(t)==="symbol"?t:String(t)}function T(e,t,n){return t=tt(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function nt(e){if(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&Boolean(process.versions.electron))return!0;let t=typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent,n=e||t;return!!(n&&n.indexOf("Electron")>=0)}function N(){return!(typeof process=="object"&&String(process)==="[object process]"&&!process.browser)||nt()}var Lr=globalThis.self||globalThis.window||globalThis.global,ee=globalThis.window||globalThis.self||globalThis.global,Vr=globalThis.document||{},W=globalThis.process||{},Mr=globalThis.console,Bs=globalThis.navigator||{};var Le=typeof __VERSION__<"u"?__VERSION__:"untranspiled source",Ls=N();function Ur(e){try{let t=window[e],n="__storage_test__";return t.setItem(n,n),t.removeItem(n),t}catch{return null}}var Ve=class{constructor(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"sessionStorage";T(this,"storage",void 0),T(this,"id",void 0),T(this,"config",void 0),this.storage=Ur(r),this.id=t,this.config=n,this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(t){if(Object.assign(this.config,t),this.storage){let n=JSON.stringify(this.config);this.storage.setItem(this.id,n)}}_loadConfiguration(){let t={};if(this.storage){let n=this.storage.getItem(this.id);t=n?JSON.parse(n):{}}return Object.assign(this.config,t),this}};function Jt(e){let t;return e<10?t="".concat(e.toFixed(2),"ms"):e<100?t="".concat(e.toFixed(1),"ms"):e<1e3?t="".concat(e.toFixed(0),"ms"):t="".concat((e/1e3).toFixed(2),"s"),t}function Kt(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:8,n=Math.max(t-e.length,0);return"".concat(" ".repeat(n)).concat(e)}function Me(e,t,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:600,o=e.src.replace(/\(/g,"%28").replace(/\)/g,"%29");e.width>r&&(n=Math.min(n,r/e.width));let i=e.width*n,s=e.height*n,a=["font-size:1px;","padding:".concat(Math.floor(s/2),"px ").concat(Math.floor(i/2),"px;"),"line-height:".concat(s,"px;"),"background:url(".concat(o,");"),"background-size:".concat(i,"px ").concat(s,"px;"),"color:transparent;"].join("");return["".concat(t," %c+"),a]}var Ue;(function(e){e[e.BLACK=30]="BLACK",e[e.RED=31]="RED",e[e.GREEN=32]="GREEN",e[e.YELLOW=33]="YELLOW",e[e.BLUE=34]="BLUE",e[e.MAGENTA=35]="MAGENTA",e[e.CYAN=36]="CYAN",e[e.WHITE=37]="WHITE",e[e.BRIGHT_BLACK=90]="BRIGHT_BLACK",e[e.BRIGHT_RED=91]="BRIGHT_RED",e[e.BRIGHT_GREEN=92]="BRIGHT_GREEN",e[e.BRIGHT_YELLOW=93]="BRIGHT_YELLOW",e[e.BRIGHT_BLUE=94]="BRIGHT_BLUE",e[e.BRIGHT_MAGENTA=95]="BRIGHT_MAGENTA",e[e.BRIGHT_CYAN=96]="BRIGHT_CYAN",e[e.BRIGHT_WHITE=97]="BRIGHT_WHITE"})(Ue||(Ue={}));var kr=10;function $t(e){return typeof e!="string"?e:(e=e.toUpperCase(),Ue[e]||Ue.WHITE)}function Yt(e,t,n){if(!N&&typeof e=="string"){if(t){let r=$t(t);e="\x1B[".concat(r,"m").concat(e,"\x1B[39m")}if(n){let r=$t(n);e="\x1B[".concat(r+kr,"m").concat(e,"\x1B[49m")}}return e}function Xt(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:["constructor"],n=Object.getPrototypeOf(e),r=Object.getOwnPropertyNames(n),o=e;for(let i of r){let s=o[i];typeof s=="function"&&(t.find(a=>i===a)||(o[i]=s.bind(e)))}}function te(e,t){if(!e)throw new Error(t||"Assertion failed")}function J(){let e;if(N()&&ee.performance){var t,n;e=ee===null||ee===void 0||(t=ee.performance)===null||t===void 0||(n=t.now)===null||n===void 0?void 0:n.call(t)}else if("hrtime"in W){var r;let o=W===null||W===void 0||(r=W.hrtime)===null||r===void 0?void 0:r.call(W);e=o[0]*1e3+o[1]/1e6}else e=Date.now();return e}var ne={debug:N()&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},Nr={enabled:!0,level:0};function D(){}var Qt={},qt={once:!0},Z=class{constructor(){let{id:t}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{id:""};T(this,"id",void 0),T(this,"VERSION",Le),T(this,"_startTs",J()),T(this,"_deltaTs",J()),T(this,"_storage",void 0),T(this,"userData",{}),T(this,"LOG_THROTTLE_TIMEOUT",0),this.id=t,this.userData={},this._storage=new Ve("__probe-".concat(this.id,"__"),Nr),this.timeStamp("".concat(this.id," started")),Xt(this),Object.seal(this)}set level(t){this.setLevel(t)}get level(){return this.getLevel()}isEnabled(){return this._storage.config.enabled}getLevel(){return this._storage.config.level}getTotal(){return Number((J()-this._startTs).toPrecision(10))}getDelta(){return Number((J()-this._deltaTs).toPrecision(10))}set priority(t){this.level=t}get priority(){return this.level}getPriority(){return this.level}enable(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return this._storage.setConfiguration({enabled:t}),this}setLevel(t){return this._storage.setConfiguration({level:t}),this}get(t){return this._storage.config[t]}set(t,n){this._storage.setConfiguration({[t]:n})}settings(){console.table?console.table(this._storage.config):console.log(this._storage.config)}assert(t,n){te(t,n)}warn(t){return this._getLogFunction(0,t,ne.warn,arguments,qt)}error(t){return this._getLogFunction(0,t,ne.error,arguments)}deprecated(t,n){return this.warn("`".concat(t,"` is deprecated and will be removed in a later version. Use `").concat(n,"` instead"))}removed(t,n){return this.error("`".concat(t,"` has been removed. Use `").concat(n,"` instead"))}probe(t,n){return this._getLogFunction(t,n,ne.log,arguments,{time:!0,once:!0})}log(t,n){return this._getLogFunction(t,n,ne.debug,arguments)}info(t,n){return this._getLogFunction(t,n,console.info,arguments)}once(t,n){return this._getLogFunction(t,n,ne.debug||ne.info,arguments,qt)}table(t,n,r){return n?this._getLogFunction(t,n,console.table||D,r&&[r],{tag:zr(n)}):D}image(t){let{logLevel:n,priority:r,image:o,message:i="",scale:s=1}=t;return this._shouldLog(n||r)?N()?Gr({image:o,message:i,scale:s}):Or({image:o,message:i,scale:s}):D}time(t,n){return this._getLogFunction(t,n,console.time?console.time:console.info)}timeEnd(t,n){return this._getLogFunction(t,n,console.timeEnd?console.timeEnd:console.info)}timeStamp(t,n){return this._getLogFunction(t,n,console.timeStamp||D)}group(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{collapsed:!1},o=en({logLevel:t,message:n,opts:r}),{collapsed:i}=r;return o.method=(i?console.groupCollapsed:console.group)||console.info,this._getLogFunction(o)}groupCollapsed(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.group(t,n,Object.assign({},r,{collapsed:!0}))}groupEnd(t){return this._getLogFunction(t,"",console.groupEnd||D)}withGroup(t,n,r){this.group(t,n)();try{r()}finally{this.groupEnd(t)()}}trace(){console.trace&&console.trace()}_shouldLog(t){return this.isEnabled()&&this.getLevel()>=tn(t)}_getLogFunction(t,n,r,o,i){if(this._shouldLog(t)){i=en({logLevel:t,message:n,args:o,opts:i}),r=r||i.method,te(r),i.total=this.getTotal(),i.delta=this.getDelta(),this._deltaTs=J();let s=i.tag||i.message;if(i.once&&s)if(!Qt[s])Qt[s]=J();else return D;return n=Cr(this.id,i.message,i),r.bind(console,n,...i.args)}return D}};T(Z,"VERSION",Le);function tn(e){if(!e)return 0;let t;switch(typeof e){case"number":t=e;break;case"object":t=e.logLevel||e.priority||0;break;default:return 0}return te(Number.isFinite(t)&&t>=0),t}function en(e){let{logLevel:t,message:n}=e;e.logLevel=tn(t);let r=e.args?Array.from(e.args):[];for(;r.length&&r.shift()!==n;);switch(typeof t){case"string":case"function":n!==void 0&&r.unshift(n),e.message=t;break;case"object":Object.assign(e,t);break;default:}typeof e.message=="function"&&(e.message=e.message());let o=typeof e.message;return te(o==="string"||o==="object"),Object.assign(e,{args:r},e.opts)}function Cr(e,t,n){if(typeof t=="string"){let r=n.time?Kt(Jt(n.total)):"";t=n.time?"".concat(e,": ").concat(r," ").concat(t):"".concat(e,": ").concat(t),t=Yt(t,n.color,n.background)}return t}function Or(e){let{image:t,message:n="",scale:r=1}=e;return console.warn("removed"),D}function Gr(e){let{image:t,message:n="",scale:r=1}=e;if(typeof t=="string"){let i=new Image;return i.onload=()=>{let s=Me(i,n,r);console.log(...s)},i.src=t,D}let o=t.nodeName||"";if(o.toLowerCase()==="img")return console.log(...Me(t,n,r)),D;if(o.toLowerCase()==="canvas"){let i=new Image;return i.onload=()=>console.log(...Me(i,n,r)),i.src=t.toDataURL(),D}return D}function zr(e){for(let t in e)for(let n in e[t])return n||"untitled";return"empty"}var ia=new Z({id:"@probe.gl/log"});var rt="4.3.0-alpha.2",jr=rt[0]>="0"&&rt[0]<="9"?`v${rt}`:"";function Rr(){let e=new Z({id:"loaders.gl"});return globalThis.loaders=globalThis.loaders||{},globalThis.loaders.log=e,globalThis.loaders.version=jr,globalThis.probe=globalThis.probe||{},globalThis.probe.loaders=e,e}var ot=Rr();var Hr="",nn={};function it(e){for(let t in nn)if(e.startsWith(t)){let n=nn[t];e=e.replace(t,n)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${Hr}${e}`),e}var he=class{fetch;loadOptions;_needsRefresh=!0;props;constructor(t){this.props={...t},this.loadOptions={...t.loadOptions},this.fetch=Zr(this.loadOptions)}setProps(t){this.props=Object.assign(this.props,t),this.setNeedsRefresh()}setNeedsRefresh(){this._needsRefresh=!0}getNeedsRefresh(t=!0){let n=this._needsRefresh;return t&&(this._needsRefresh=!1),n}};function Zr(e){let t=e?.fetch;if(t&&typeof t=="function")return(r,o)=>t(r,o);let n=e?.fetch;return n&&typeof n!="function"?r=>fetch(r,n):r=>fetch(r)}var rn="4.3.0-alpha.2";var Wr=globalThis.loaders?.parseImageNode,st=typeof Image<"u",at=typeof ImageBitmap<"u",Jr=Boolean(Wr),lt=qe?!0:Jr;function on(e){switch(e){case"auto":return at||st||lt;case"imagebitmap":return at;case"image":return st;case"data":return lt;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function sn(){if(at)return"imagebitmap";if(st)return"image";if(lt)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function Kr(e){let t=$r(e);if(!t)throw new Error("Not an image");return t}function an(e){switch(Kr(e)){case"data":return e;case"image":case"imagebitmap":let t=document.createElement("canvas"),n=t.getContext("2d");if(!n)throw new Error("getImageData");return t.width=e.width,t.height=e.height,n.drawImage(e,0,0),n.getImageData(0,0,e.width,e.height);default:throw new Error("getImageData")}}function $r(e){return typeof ImageBitmap<"u"&&e instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&e instanceof Image?"image":e&&typeof e=="object"&&e.data&&e.width&&e.height?"data":null}var Yr=/^data:image\/svg\+xml/,Xr=/\.svg((\?|#).*)?$/;function ke(e){return e&&(Yr.test(e)||Xr.test(e))}function ln(e,t){if(ke(t)){let r=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(r=unescape(encodeURIComponent(r)))}catch(i){throw new Error(i.message)}return`data:image/svg+xml;base64,${btoa(r)}`}return ct(e,t)}function ct(e,t){if(ke(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}async function Ne(e,t,n){let r=ln(e,n),o=self.URL||self.webkitURL,i=typeof r!="string"&&o.createObjectURL(r);try{return await Qr(i||r,t)}finally{i&&o.revokeObjectURL(i)}}async function Qr(e,t){let n=new Image;return n.src=e,t.image&&t.image.decode&&n.decode?(await n.decode(),n):await new Promise((r,o)=>{try{n.onload=()=>r(n),n.onerror=i=>{let s=i instanceof Error?i.message:"error";o(new Error(s))}}catch(i){o(i)}})}var qr={},cn=!0;async function fn(e,t,n){let r;ke(n)?r=await Ne(e,t,n):r=ct(e,n);let o=t&&t.imagebitmap;return await eo(r,o)}async function eo(e,t=null){if((to(t)||!cn)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(n){console.warn(n),cn=!1}return await createImageBitmap(e)}function to(e){for(let t in e||qr)return!1;return!0}function un(e){return!io(e,"ftyp",4)||!(e[8]&96)?null:no(e)}function no(e){switch(ro(e,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function ro(e,t,n){return String.fromCharCode(...e.slice(t,n))}function oo(e){return[...e].map(t=>t.charCodeAt(0))}function io(e,t,n=0){let r=oo(t);for(let o=0;o<r.length;++o)if(r[o]!==e[o+n])return!1;return!0}var z=!1,de=!0;function Ce(e){let t=pe(e);return ao(t)||fo(t)||lo(t)||co(t)||so(t)}function so(e){let t=new Uint8Array(e instanceof DataView?e.buffer:e),n=un(t);return n?{mimeType:n.mimeType,width:0,height:0}:null}function ao(e){let t=pe(e);return t.byteLength>=24&&t.getUint32(0,z)===2303741511?{mimeType:"image/png",width:t.getUint32(16,z),height:t.getUint32(20,z)}:null}function lo(e){let t=pe(e);return t.byteLength>=10&&t.getUint32(0,z)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,de),height:t.getUint16(8,de)}:null}function co(e){let t=pe(e);return t.byteLength>=14&&t.getUint16(0,z)===16973&&t.getUint32(2,de)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,de),height:t.getUint32(22,de)}:null}function fo(e){let t=pe(e);if(!(t.byteLength>=3&&t.getUint16(0,z)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:r,sofMarkers:o}=uo(),i=2;for(;i+9<t.byteLength;){let s=t.getUint16(i,z);if(o.has(s))return{mimeType:"image/jpeg",height:t.getUint16(i+5,z),width:t.getUint16(i+7,z)};if(!r.has(s))return null;i+=2,i+=t.getUint16(i,z)}return null}function uo(){let e=new Set([65499,65476,65484,65501,65534]);for(let n=65504;n<65520;++n)e.add(n);return{tableMarkers:e,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function pe(e){if(e instanceof DataView)return e;if(ArrayBuffer.isView(e))return new DataView(e.buffer);if(e instanceof ArrayBuffer)return new DataView(e);throw new Error("toDataView")}async function hn(e,t){let{mimeType:n}=Ce(e)||{},r=globalThis.loaders?.parseImageNode;return ue(r),await r(e,n)}async function dn(e,t,n){t=t||{};let o=(t.image||{}).type||"auto",{url:i}=n||{},s=ho(o),a;switch(s){case"imagebitmap":a=await fn(e,t,i);break;case"image":a=await Ne(e,t,i);break;case"data":a=await hn(e,t);break;default:ue(!1)}return o==="data"&&(a=an(a)),a}function ho(e){switch(e){case"auto":case"data":return sn();default:return on(e),e}}var po=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],go=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],mo={image:{type:"auto",decode:!0}},ft={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:rn,mimeTypes:go,extensions:po,parse:dn,tests:[e=>Boolean(Ce(new DataView(e)))],options:mo};var yn=e=>e!==null&&typeof e=="object";function ut(e,t){if(!e||!yn(e))return null;let n={name:e.name||"",description:e.description||""};if(typeof e.generator=="string"&&(n.generator=e.generator),typeof e.generator_options=="string"&&(n.generatorOptions=e.generator_options),n.boundingBox=pn(e.bounds)||pn(e.antimeridian_adjusted_bounds),n.center=Io(e.center),n.maxZoom=gn(e.maxzoom),n.minZoom=gn(e.minzoom),typeof e?.json=="string")try{n.metaJson=JSON.parse(e.json)}catch(a){console.warn("Failed to parse tilejson.json field",a)}let r=e.tilestats||n.metaJson?.tilestats,o=wo(r,t),i=yo(e.vector_layers),s=To(i,o);return n={...n,layers:s},n.maxZoom===null&&s.length>0&&(n.maxZoom=s[0].maxZoom||null),n.minZoom===null&&s.length>0&&(n.minZoom=s[0].minZoom||null),n}function yo(e){return Array.isArray(e)?e.map(t=>xo(t)):[]}function xo(e){let t=Object.entries(e.fields||[]).map(([r,o])=>({name:r,...Tn(String(o))})),n={...e};return delete n.fields,{name:e.id||"",...n,fields:t}}function wo(e,t){return yn(e)&&Array.isArray(e.layers)?e.layers.map(n=>vo(n,t)):[]}function vo(e,t){let n=[],r={},o=e.attributes||[];for(let i of o){let s=i.attribute;if(typeof s=="string")if(s.split("|").length>1){let a=s.split("|")[0];r[a]=r[a]||[],r[a].push(i),console.warn("ignoring tilestats indexed field",a)}else n[s]||n.push(Fo(i,t))}return{name:e.layer||"",dominantGeometry:e.geometry,fields:n}}function To(e,t){return e.map(n=>{let r=t.find(s=>s.name===n.name),o=r?.fields||[],i={...n};return delete i.fields,{...i,...r,fields:o}})}function pn(e){let t=vn(e);if(Array.isArray(t)&&t.length===4&&[t[0],t[2]].every(wn)&&[t[1],t[3]].every(xn))return[[t[0],t[1]],[t[2],t[3]]]}function Io(e){let t=vn(e);return Array.isArray(t)&&t.length===3&&wn(t[0])&&xn(t[1])&&Po(t[2])?t:null}function gn(e){let t=typeof e=="string"?parseFloat(e):typeof e=="number"?e:null;return t===null||isNaN(t)?null:t}function xn(e){return Number.isFinite(e)&&e<=90&&e>=-90}function wn(e){return Number.isFinite(e)&&e<=180&&e>=-180}function Po(e){return Number.isFinite(e)&&e>=0&&e<=22}function vn(e){return typeof e=="string"?e.split(",").map(parseFloat):Array.isArray(e)?e:null}var mn={number:{type:"float32"},numeric:{type:"float32"},string:{type:"utf8"},vachar:{type:"utf8"},float:{type:"float32"},int:{type:"int32"},int4:{type:"int32"},boolean:{type:"boolean"},bool:{type:"boolean"}};function Fo(e={},t){let n=Tn(e.type),r={name:e.attribute,...n};return typeof e.min=="number"&&(r.min=e.min),typeof e.max=="number"&&(r.max=e.max),typeof e.count=="number"&&(r.uniqueValueCount=e.count),e.values&&(r.values=e.values),r.values&&typeof t.maxValues=="number"&&(r.values=r.values?.slice(0,t.maxValues)),r}function Tn(e){let t=e.toLowerCase();return!t||mn[t],mn[t]||{type:"string"}}var bo="4.3.0-alpha.2",ge={dataType:null,batchType:null,name:"TileJSON",id:"tilejson",module:"pmtiles",version:bo,worker:!0,extensions:["json"],mimeTypes:["application/json"],text:!0,options:{tilejson:{maxValues:void 0}},parse:async(e,t)=>{let n=new TextDecoder().decode(e),r=JSON.parse(n),o={...ge.options.tilejson,...t?.tilejson};return ut(r,o)},parseTextSync:(e,t)=>{let n=JSON.parse(e),r={...ge.options.tilejson,...t?.tilejson};return ut(n,r)}};var me={x:0,y:1,z:2};function K(e,t={}){let{start:n=0,end:r=e.length,plane:o="xy"}=t,i=t.size||2,s=0,a=me[o[0]],l=me[o[1]];for(let c=n,f=r-i;c<r;c+=i)s+=(e[c+a]-e[f+a])*(e[c+l]+e[f+l]),f=c;return s/2}function dt(e,t,n=2,r,o="xy"){let i=t&&t.length,s=i?t[0]*n:e.length,a=Pn(e,0,s,n,!0,r&&r[0],o),l=[];if(!a||a.next===a.prev)return l;let c,f,u,h,d,p,y;if(i&&(a=Lo(e,t,a,n,r,o)),e.length>80*n){h=f=e[0],d=u=e[1];for(let P=n;P<s;P+=n)p=e[P],y=e[P+1],p<h&&(h=p),y<d&&(d=y),p>f&&(f=p),y>u&&(u=y);c=Math.max(f-h,u-d),c=c!==0?32767/c:0}return ye(a,l,n,h,d,c,0),l}function Pn(e,t,n,r,o,i,s){let a,l;i===void 0&&(i=K(e,{start:t,end:n,size:r,plane:s}));let c=me[s[0]],f=me[s[1]];if(o===i<0)for(a=t;a<n;a+=r)l=In(a,e[a+c],e[a+f],l);else for(a=n-r;a>=t;a-=r)l=In(a,e[a+c],e[a+f],l);return l&&ze(l,l.next)&&(we(l),l=l.next),l}function $(e,t){if(!e)return e;t||(t=e);let n=e,r;do if(r=!1,!n.steiner&&(ze(n,n.next)||I(n.prev,n,n.next)===0)){if(we(n),n=t=n.prev,n===n.next)break;r=!0}else n=n.next;while(r||n!==t);return t}function ye(e,t,n,r,o,i,s){if(!e)return;!s&&i&&No(e,r,o,i);let a=e,l,c;for(;e.prev!==e.next;){if(l=e.prev,c=e.next,i?Bo(e,r,o,i):_o(e)){t.push(l.i/n|0),t.push(e.i/n|0),t.push(c.i/n|0),we(e),e=c.next,a=c.next;continue}if(e=c,e===a){s?s===1?(e=Ao($(e),t,n),ye(e,t,n,r,o,i,2)):s===2&&Do(e,t,n,r,o,i):ye($(e),t,n,r,o,i,1);break}}}function _o(e){let t=e.prev,n=e,r=e.next;if(I(t,n,r)>=0)return!1;let o=t.x,i=n.x,s=r.x,a=t.y,l=n.y,c=r.y,f=o<i?o<s?o:s:i<s?i:s,u=a<l?a<c?a:c:l<c?l:c,h=o>i?o>s?o:s:i>s?i:s,d=a>l?a>c?a:c:l>c?l:c,p=r.next;for(;p!==t;){if(p.x>=f&&p.x<=h&&p.y>=u&&p.y<=d&&re(o,a,i,l,s,c,p.x,p.y)&&I(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function Bo(e,t,n,r){let o=e.prev,i=e,s=e.next;if(I(o,i,s)>=0)return!1;let a=o.x,l=i.x,c=s.x,f=o.y,u=i.y,h=s.y,d=a<l?a<c?a:c:l<c?l:c,p=f<u?f<h?f:h:u<h?u:h,y=a>l?a>c?a:c:l>c?l:c,P=f>u?f>h?f:h:u>h?u:h,M=ht(d,p,t,n,r),v=ht(y,P,t,n,r),m=e.prevZ,g=e.nextZ;for(;m&&m.z>=M&&g&&g.z<=v;){if(m.x>=d&&m.x<=y&&m.y>=p&&m.y<=P&&m!==o&&m!==s&&re(a,f,l,u,c,h,m.x,m.y)&&I(m.prev,m,m.next)>=0||(m=m.prevZ,g.x>=d&&g.x<=y&&g.y>=p&&g.y<=P&&g!==o&&g!==s&&re(a,f,l,u,c,h,g.x,g.y)&&I(g.prev,g,g.next)>=0))return!1;g=g.nextZ}for(;m&&m.z>=M;){if(m.x>=d&&m.x<=y&&m.y>=p&&m.y<=P&&m!==o&&m!==s&&re(a,f,l,u,c,h,m.x,m.y)&&I(m.prev,m,m.next)>=0)return!1;m=m.prevZ}for(;g&&g.z<=v;){if(g.x>=d&&g.x<=y&&g.y>=p&&g.y<=P&&g!==o&&g!==s&&re(a,f,l,u,c,h,g.x,g.y)&&I(g.prev,g,g.next)>=0)return!1;g=g.nextZ}return!0}function Ao(e,t,n){let r=e;do{let o=r.prev,i=r.next.next;!ze(o,i)&&Fn(o,r,r.next,i)&&xe(o,i)&&xe(i,o)&&(t.push(o.i/n|0),t.push(r.i/n|0),t.push(i.i/n|0),we(r),we(r.next),r=e=i),r=r.next}while(r!==e);return $(r)}function Do(e,t,n,r,o,i){let s=e;do{let a=s.next.next;for(;a!==s.prev;){if(s.i!==a.i&&Go(s,a)){let l=bn(s,a);s=$(s,s.next),l=$(l,l.next),ye(s,t,n,r,o,i,0),ye(l,t,n,r,o,i,0);return}a=a.next}s=s.next}while(s!==e)}function Lo(e,t,n,r,o,i){let s=[],a,l,c,f,u;for(a=0,l=t.length;a<l;a++)c=t[a]*r,f=a<l-1?t[a+1]*r:e.length,u=Pn(e,c,f,r,!1,o&&o[a+1],i),u===u.next&&(u.steiner=!0),s.push(Oo(u));for(s.sort(Vo),a=0;a<s.length;a++)n=Mo(s[a],n);return n}function Vo(e,t){return e.x-t.x}function Mo(e,t){let n=Uo(e,t);if(!n)return t;let r=bn(n,e);return $(r,r.next),$(n,n.next)}function Uo(e,t){let n=t,r=e.x,o=e.y,i=-1/0,s;do{if(o<=n.y&&o>=n.next.y&&n.next.y!==n.y){let h=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(h<=r&&h>i&&(i=h,s=n.x<n.next.x?n:n.next,h===r))return s}n=n.next}while(n!==t);if(!s)return null;let a=s,l=s.x,c=s.y,f=1/0,u;n=s;do r>=n.x&&n.x>=l&&r!==n.x&&re(o<c?r:i,o,l,c,o<c?i:r,o,n.x,n.y)&&(u=Math.abs(o-n.y)/(r-n.x),xe(n,e)&&(u<f||u===f&&(n.x>s.x||n.x===s.x&&ko(s,n)))&&(s=n,f=u)),n=n.next;while(n!==a);return s}function ko(e,t){return I(e.prev,e,t.prev)<0&&I(t.next,e,e.next)<0}function No(e,t,n,r){let o=e;do o.z===0&&(o.z=ht(o.x,o.y,t,n,r)),o.prevZ=o.prev,o.nextZ=o.next,o=o.next;while(o!==e);o.prevZ.nextZ=null,o.prevZ=null,Co(o)}function Co(e){let t,n,r=1,o,i,s,a,l,c;do{for(i=e,e=null,c=null,o=0;i;){for(o++,a=i,s=0,n=0;n<r&&(s++,a=a.nextZ,!!a);n++);for(l=r;s>0||l>0&&a;)s!==0&&(l===0||!a||i.z<=a.z)?(t=i,i=i.nextZ,s--):(t=a,a=a.nextZ,l--),c?c.nextZ=t:e=t,t.prevZ=c,c=t;i=a}c.nextZ=null,r*=2}while(o>1);return e}function ht(e,t,n,r,o){return e=(e-n)*o|0,t=(t-r)*o|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function Oo(e){let t=e,n=e;do(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next;while(t!==e);return n}function re(e,t,n,r,o,i,s,a){return(o-s)*(t-a)>=(e-s)*(i-a)&&(e-s)*(r-a)>=(n-s)*(t-a)&&(n-s)*(i-a)>=(o-s)*(r-a)}function Go(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!zo(e,t)&&(xe(e,t)&&xe(t,e)&&jo(e,t)&&(I(e.prev,e,t.prev)||I(e,t.prev,t))||ze(e,t)&&I(e.prev,e,e.next)>0&&I(t.prev,t,t.next)>0)}function I(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function ze(e,t){return e.x===t.x&&e.y===t.y}function Fn(e,t,n,r){let o=Ge(I(e,t,n)),i=Ge(I(e,t,r)),s=Ge(I(n,r,e)),a=Ge(I(n,r,t));return!!(o!==i&&s!==a||o===0&&Oe(e,n,t)||i===0&&Oe(e,r,t)||s===0&&Oe(n,e,r)||a===0&&Oe(n,t,r))}function Oe(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function Ge(e){return e>0?1:e<0?-1:0}function zo(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&Fn(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function xe(e,t){return I(e.prev,e,e.next)<0?I(e,t,e.next)>=0&&I(e,e.prev,t)>=0:I(e,t,e.prev)<0||I(e,e.next,t)<0}function jo(e,t){let n=e,r=!1,o=(e.x+t.x)/2,i=(e.y+t.y)/2;do n.y>i!=n.next.y>i&&n.next.y!==n.y&&o<(n.next.x-n.x)*(i-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next;while(n!==e);return r}function bn(e,t){let n=new ve(e.i,e.x,e.y),r=new ve(t.i,t.x,t.y),o=e.next,i=t.prev;return e.next=t,t.prev=e,n.next=o,o.prev=n,r.next=n,n.prev=r,i.next=r,r.prev=i,r}function In(e,t,n,r){let o=new ve(e,t,n);return r?(o.next=r.next,o.prev=r,r.next.prev=o,r.next=o):(o.prev=o,o.next=o),o}function we(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}var ve=class{constructor(t,n,r){T(this,"i",void 0),T(this,"x",void 0),T(this,"y",void 0),T(this,"prev",null),T(this,"next",null),T(this,"z",0),T(this,"prevZ",null),T(this,"nextZ",null),T(this,"steiner",!1),this.i=t,this.x=n,this.y=r}};function mt(e,t,n){let r=Jo(e),o=Object.keys(r).filter(i=>r[i]!==Array);return Ko(e,{propArrayTypes:r,...t},{numericPropKeys:n&&n.numericPropKeys||o,PositionDataType:n?n.PositionDataType:Float32Array,triangulate:n?n.triangulate:!0})}function Jo(e){let t={};for(let n of e)if(n.properties)for(let r in n.properties){let o=n.properties[r];t[r]=ei(o,t[r])}return t}function Ko(e,t,n){let{pointPositionsCount:r,pointFeaturesCount:o,linePositionsCount:i,linePathsCount:s,lineFeaturesCount:a,polygonPositionsCount:l,polygonObjectsCount:c,polygonRingsCount:f,polygonFeaturesCount:u,propArrayTypes:h,coordLength:d}=t,{numericPropKeys:p=[],PositionDataType:y=Float32Array,triangulate:P=!0}=n,M=e[0]&&"id"in e[0],v=e.length>65535?Uint32Array:Uint16Array,m={type:"Point",positions:new y(r*d),globalFeatureIds:new v(r),featureIds:o>65535?new Uint32Array(r):new Uint16Array(r),numericProps:{},properties:[],fields:[]},g={type:"LineString",pathIndices:i>65535?new Uint32Array(s+1):new Uint16Array(s+1),positions:new y(i*d),globalFeatureIds:new v(i),featureIds:a>65535?new Uint32Array(i):new Uint16Array(i),numericProps:{},properties:[],fields:[]},_={type:"Polygon",polygonIndices:l>65535?new Uint32Array(c+1):new Uint16Array(c+1),primitivePolygonIndices:l>65535?new Uint32Array(f+1):new Uint16Array(f+1),positions:new y(l*d),globalFeatureIds:new v(l),featureIds:u>65535?new Uint32Array(l):new Uint16Array(l),numericProps:{},properties:[],fields:[]};P&&(_.triangles=[]);for(let U of[m,g,_])for(let b of p){let B=h[b];U.numericProps[b]=new B(U.positions.length/d)}g.pathIndices[s]=i,_.polygonIndices[c]=l,_.primitivePolygonIndices[f]=l;let O={pointPosition:0,pointFeature:0,linePosition:0,linePath:0,lineFeature:0,polygonPosition:0,polygonObject:0,polygonRing:0,polygonFeature:0,feature:0};for(let U of e){let b=U.geometry,B=U.properties||{};switch(b.type){case"Point":$o(b,m,O,d,B),m.properties.push(gt(B,p)),M&&m.fields.push({id:U.id}),O.pointFeature++;break;case"LineString":Yo(b,g,O,d,B),g.properties.push(gt(B,p)),M&&g.fields.push({id:U.id}),O.lineFeature++;break;case"Polygon":Xo(b,_,O,d,B),_.properties.push(gt(B,p)),M&&_.fields.push({id:U.id}),O.polygonFeature++;break;default:throw new Error("Invalid geometry type")}O.feature++}return qo(m,g,_,d)}function $o(e,t,n,r,o){t.positions.set(e.data,n.pointPosition*r);let i=e.data.length/r;yt(t,o,n.pointPosition,i),t.globalFeatureIds.fill(n.feature,n.pointPosition,n.pointPosition+i),t.featureIds.fill(n.pointFeature,n.pointPosition,n.pointPosition+i),n.pointPosition+=i}function Yo(e,t,n,r,o){t.positions.set(e.data,n.linePosition*r);let i=e.data.length/r;yt(t,o,n.linePosition,i),t.globalFeatureIds.fill(n.feature,n.linePosition,n.linePosition+i),t.featureIds.fill(n.lineFeature,n.linePosition,n.linePosition+i);for(let s=0,a=e.indices.length;s<a;++s){let l=e.indices[s],c=s===a-1?e.data.length:e.indices[s+1];t.pathIndices[n.linePath++]=n.linePosition,n.linePosition+=(c-l)/r}}function Xo(e,t,n,r,o){t.positions.set(e.data,n.polygonPosition*r);let i=e.data.length/r;yt(t,o,n.polygonPosition,i),t.globalFeatureIds.fill(n.feature,n.polygonPosition,n.polygonPosition+i),t.featureIds.fill(n.polygonFeature,n.polygonPosition,n.polygonPosition+i);for(let s=0,a=e.indices.length;s<a;++s){let l=n.polygonPosition;t.polygonIndices[n.polygonObject++]=l;let c=e.areas[s],f=e.indices[s],u=e.indices[s+1];for(let d=0,p=f.length;d<p;++d){let y=f[d],P=d===p-1?u===void 0?e.data.length:u[0]:f[d+1];t.primitivePolygonIndices[n.polygonRing++]=n.polygonPosition,n.polygonPosition+=(P-y)/r}let h=n.polygonPosition;Qo(t,c,f,{startPosition:l,endPosition:h,coordLength:r})}}function Qo(e,t,n,{startPosition:r,endPosition:o,coordLength:i}){if(!e.triangles)return;let s=r*i,a=o*i,l=e.positions.subarray(s,a),c=n[0],f=n.slice(1).map(h=>(h-c)/i),u=dt(l,f,i,t);for(let h=0,d=u.length;h<d;++h)e.triangles.push(r+u[h])}function pt(e,t){let n={};for(let r in e)n[r]={value:e[r],size:t};return n}function qo(e,t,n,r){let o={shape:"binary-feature-collection",points:{...e,positions:{value:e.positions,size:r},globalFeatureIds:{value:e.globalFeatureIds,size:1},featureIds:{value:e.featureIds,size:1},numericProps:pt(e.numericProps,1)},lines:{...t,positions:{value:t.positions,size:r},pathIndices:{value:t.pathIndices,size:1},globalFeatureIds:{value:t.globalFeatureIds,size:1},featureIds:{value:t.featureIds,size:1},numericProps:pt(t.numericProps,1)},polygons:{...n,positions:{value:n.positions,size:r},polygonIndices:{value:n.polygonIndices,size:1},primitivePolygonIndices:{value:n.primitivePolygonIndices,size:1},globalFeatureIds:{value:n.globalFeatureIds,size:1},featureIds:{value:n.featureIds,size:1},numericProps:pt(n.numericProps,1)}};return o.polygons&&n.triangles&&(o.polygons.triangles={value:new Uint32Array(n.triangles),size:1}),o}function yt(e,t,n,r){for(let o in e.numericProps)if(o in t){let i=t[o];e.numericProps[o].fill(i,n,n+r)}}function gt(e,t){let n={};for(let r in e)t.includes(r)||(n[r]=e[r]);return n}function ei(e,t){return t===Array||!Number.isFinite(e)?Array:t===Float64Array||Math.fround(e)!==e?Float64Array:Float32Array}var Pt=jt(Mn(),1);function xi(e){let t=0;for(let n=0,r=e.length-1,o,i;n<e.length;r=n++)o=e[n],i=e[r],t+=(i[0]-o[0])*(o[1]+i[1]);return t}function vt(e,t){if(Array.isArray(e[0])){for(let r of e)vt(r,t);return}let n=e;n[0]/=t,n[1]/=t}function Un(e,t){for(let n=0;n<e.length;++n)e[n]/=t}function Tt(e,t,n){if(typeof e[0][0]!="number"){for(let s of e)Tt(s,t,n);return}let r=n*Math.pow(2,t.z),o=n*t.x,i=n*t.y;for(let s=0;s<e.length;s++){let a=e[s];a[0]=(a[0]+o)*360/r-180;let l=180-(a[1]+i)*360/r;a[1]=360/Math.PI*Math.atan(Math.exp(l*Math.PI/180))-90}}function kn(e,t,n){let{x:r,y:o,z:i}=t,s=n*Math.pow(2,i),a=n*r,l=n*o;for(let c=0,f=e.length;c<f;c+=2){e[c]=(e[c]+a)*360/s-180;let u=180-(e[c+1]+l)*360/s;e[c+1]=360/Math.PI*Math.atan(Math.exp(u*Math.PI/180))-90}}function Nn(e){let t=e.length;if(t<=1)return[e];let n=[],r,o;for(let i=0;i<t;i++){let s=xi(e[i]);s!==0&&(o===void 0&&(o=s<0),o===s<0?(r&&n.push(r),r=[e[i]]):r&&r.push(e[i]))}return r&&n.push(r),n}function Cn(e){let t=e.indices.length,n="Polygon";if(t<=1)return{type:n,data:e.data,areas:[[K(e.data)]],indices:[e.indices]};let r=[],o=[],i=[],s=[],a,l=0;for(let c,f=0,u;f<t;f++){u=e.indices[f]-l,c=e.indices[f+1]-l||e.data.length;let h=e.data.slice(u,c),d=K(h);if(d===0){let p=e.data.slice(0,u),y=e.data.slice(c);e.data=p.concat(y),l+=c-u;continue}a===void 0&&(a=d<0),a===d<0?(s.length&&(r.push(i),o.push(s)),s=[u],i=[d]):(i.push(d),s.push(u))}return i&&r.push(i),s.length&&o.push(s),{type:n,areas:r,indices:o,data:e.data}}var Y=class{properties;extent;type;id;_pbf;_geometry;_keys;_values;_geometryInfo;constructor(t,n,r,o,i,s){this.properties={},this.extent=r,this.type=0,this.id=null,this._pbf=t,this._geometry=-1,this._keys=o,this._values=i,this._geometryInfo=s,t.readFields(wi,this,n)}toGeoJSONFeature(t,n){let r=this.loadGeometry();switch(t){case"wgs84":return On(this,r,o=>Tt(o,n,this.extent));default:return On(this,r,vt)}}toBinaryFeature(t,n){let r=this.loadFlatGeometry();switch(t){case"wgs84":return this._toBinaryCoordinates(r,o=>kn(o,n,this.extent));default:return this._toBinaryCoordinates(r,Un)}}bbox(){let t=this._pbf;t.pos=this._geometry;let n=t.readVarint()+t.pos,r=1,o=0,i=0,s=0,a=1/0,l=-1/0,c=1/0,f=-1/0;for(;t.pos<n;){if(o<=0){let u=t.readVarint();r=u&7,o=u>>3}if(o--,r===1||r===2)i+=t.readSVarint(),s+=t.readSVarint(),i<a&&(a=i),i>l&&(l=i),s<c&&(c=s),s>f&&(f=s);else if(r!==7)throw new Error(`unknown command ${r}`)}return[a,c,l,f]}_toBinaryCoordinates(t,n){let r;n(t.data,this.extent);let o=2;switch(this.type){case 1:this._geometryInfo.pointFeaturesCount++,this._geometryInfo.pointPositionsCount+=t.indices.length,r={type:"Point",...t};break;case 2:this._geometryInfo.lineFeaturesCount++,this._geometryInfo.linePathsCount+=t.indices.length,this._geometryInfo.linePositionsCount+=t.data.length/o,r={type:"LineString",...t};break;case 3:r=Cn(t),this._geometryInfo.polygonFeaturesCount++,this._geometryInfo.polygonObjectsCount+=r.indices.length;for(let s of r.indices)this._geometryInfo.polygonRingsCount+=s.length;this._geometryInfo.polygonPositionsCount+=r.data.length/o;break;default:throw new Error(`Invalid geometry type: ${this.type}`)}let i={type:"Feature",geometry:r,properties:this.properties};return this.id!==null&&(i.id=this.id),i}loadGeometry(){let t=this._pbf;t.pos=this._geometry;let n=t.readVarint()+t.pos,r=1,o=0,i=0,s=0,a=[],l;for(;t.pos<n;){if(o<=0){let c=t.readVarint();r=c&7,o=c>>3}switch(o--,r){case 1:case 2:i+=t.readSVarint(),s+=t.readSVarint(),r===1&&(l&&a.push(l),l=[]),l&&l.push([i,s]);break;case 7:l&&l.push(l[0].slice());break;default:throw new Error(`unknown command ${r}`)}}return l&&a.push(l),a}loadFlatGeometry(){let t=this._pbf;t.pos=this._geometry;let n=t.readVarint()+t.pos,r=1,o,i=0,s=0,a=0,l=0,c=[],f=[];for(;t.pos<n;)if(i<=0&&(o=t.readVarint(),r=o&7,i=o>>3),i--,r===1||r===2)s+=t.readSVarint(),a+=t.readSVarint(),r===1&&c.push(l),f.push(s,a),l+=2;else if(r===7){if(l>0){let u=c[c.length-1];f.push(f[u],f[u+1]),l+=2}}else throw new Error(`unknown command ${r}`);return{data:f,indices:c}}};Rt(Y,"types",["Unknown","Point","LineString","Polygon"]);function On(e,t,n){let r=Y.types[e.type],o,i,s;switch(e.type){case 1:let l=[];for(o=0;o<t.length;o++)l[o]=t[o][0];s=l,n(s,e.extent);break;case 2:for(s=t,o=0;o<s.length;o++)n(s[o],e.extent);break;case 3:for(s=Nn(t),o=0;o<s.length;o++)for(i=0;i<s[o].length;i++)n(s[o][i],e.extent);break;default:throw new Error("illegal vector tile type")}s.length===1?s=s[0]:r=`Multi${r}`;let a={type:"Feature",geometry:{type:r,coordinates:s},properties:e.properties};return e.id!==null&&(a.properties||={},a.properties.id=e.id),a}function wi(e,t,n){t&&n&&(e===1?t.id=n.readVarint():e===2?vi(n,t):e===3?t.type=n.readVarint():e===4&&(t._geometry=n.pos))}function vi(e,t){let n=e.readVarint()+e.pos;for(;e.pos<n;){let r=t._keys[e.readVarint()],o=t._values[e.readVarint()];t.properties[r]=o}}var He=class{version;name;extent;length;_pbf;_keys;_values;_features;constructor(t,n){this.version=1,this.name="",this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(Ti,this,n),this.length=this._features.length}getGeoJSONFeature(t){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];let n=this._pbf.readVarint()+this._pbf.pos;return new Y(this._pbf,n,this.extent,this._keys,this._values)}getBinaryFeature(t,n){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];let r=this._pbf.readVarint()+this._pbf.pos;return new Y(this._pbf,r,this.extent,this._keys,this._values,n)}};function Ti(e,t,n){t&&n&&(e===15?t.version=n.readVarint():e===1?t.name=n.readString():e===5?t.extent=n.readVarint():e===2?t._features.push(n.pos):e===3?t._keys.push(n.readString()):e===4&&t._values.push(Ii(n)))}function Ii(e){let t=null,n=e.readVarint()+e.pos;for(;e.pos<n;){let r=e.readVarint()>>3;t=r===1?e.readString():r===2?e.readFloat():r===3?e.readDouble():r===4?e.readVarint64():r===5?e.readVarint():r===6?e.readSVarint():r===7?e.readBoolean():null}return t}var Te=class{layers;constructor(t,n){this.layers=t.readFields(Pi,{},n)}};function Pi(e,t,n){if(e===3&&n){let r=new He(n,n.readVarint()+n.pos);r.length&&t&&(t[r.name]=r)}}function Ft(e,t){let n=bi(t),r=t?.gis?.format||t?.mvt?.shape||t?.shape;switch(r){case"columnar-table":return{shape:"columnar-table",data:It(e,n)};case"geojson-table":return{shape:"geojson-table",type:"FeatureCollection",features:Gn(e,n)};case"geojson":return Gn(e,n);case"binary-geometry":return It(e,n);case"binary":return It(e,n);default:throw new Error(r||"undefined shape")}}function It(e,t){let[n,r]=Fi(e,t),o=mt(n,r);return o.byteLength=e.byteLength,o}function Fi(e,t){let n=[],r={coordLength:2,pointPositionsCount:0,pointFeaturesCount:0,linePositionsCount:0,linePathsCount:0,lineFeaturesCount:0,polygonPositionsCount:0,polygonObjectsCount:0,polygonRingsCount:0,polygonFeaturesCount:0};if(e.byteLength<=0)return[n,r];let o=new Te(new Pt.default(e));return(t&&Array.isArray(t.layers)?t.layers:Object.keys(o.layers)).forEach(s=>{let a=o.layers[s];if(a)for(let l=0;l<a.length;l++){let c=a.getBinaryFeature(l,r),f=Ei(c,t,s);n.push(f)}}),[n,r]}function Gn(e,t){if(e.byteLength<=0)return[];let n=[],r=new Te(new Pt.default(e));return(Array.isArray(t.layers)?t.layers:Object.keys(r.layers)).forEach(i=>{let s=r.layers[i];if(s)for(let a=0;a<s.length;a++){let l=s.getGeoJSONFeature(a),c=Si(l,t,i);n.push(c)}}),n}function bi(e){if(!e?.mvt)throw new Error("mvt options required");if(e.mvt?.coordinates==="wgs84"&&!e.mvt.tileIndex)throw new Error("MVT Loader: WGS84 coordinates need tileIndex property");return e.gis&&ot.warn('MVTLoader: "options.gis" is deprecated, use "options.mvt.shape" instead')(),e.mvt}function Si(e,t,n){let r=e.toGeoJSONFeature(t.coordinates||"local",t.tileIndex);return t.layerProperty&&(r.properties||={},r.properties[t.layerProperty]=n),r}function Ei(e,t,n){let r=e.toBinaryFeature(t.coordinates||"local",t.tileIndex);return t.layerProperty&&r.properties&&(r.properties[t.layerProperty]=n),r}var _i="4.3.0-alpha.2",zn={dataType:null,batchType:null,name:"Mapbox Vector Tile",id:"mvt",module:"mvt",version:_i,extensions:["mvt","pbf"],mimeTypes:["application/vnd.mapbox-vector-tile","application/x-protobuf"],worker:!0,category:"geometry",options:{mvt:{shape:"geojson",coordinates:"local",layerProperty:"layerName",layers:void 0,tileIndex:void 0}}},bt={...zn,parse:async(e,t)=>Ft(e,t),parseSync:Ft,binary:!0};var be={};zt(be,{Compression:()=>or,EtagMismatch:()=>We,FetchSource:()=>ar,FileSource:()=>ls,PMTiles:()=>At,Protocol:()=>ns,ResolvedValueCache:()=>fs,SharedPromiseCache:()=>hr,TileType:()=>ir,bytesToHeader:()=>lr,findTile:()=>sr,getUint64:()=>V,leafletRasterLayer:()=>es,readVarint:()=>ae,tileIdToZxy:()=>ss,zxyToTileId:()=>rr});var X=Math.pow,F=(e,t,n)=>new Promise((r,o)=>{var i=l=>{try{a(n.next(l))}catch(c){o(c)}},s=l=>{try{a(n.throw(l))}catch(c){o(c)}},a=l=>l.done?r(l.value):Promise.resolve(l.value).then(i,s);a((n=n.apply(e,t)).next())}),E=Uint8Array,le=Uint16Array,Bi=Int32Array,Hn=new E([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Zn=new E([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Ai=new E([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wn=function(e,t){for(var n=new le(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var o=new Bi(n[30]),r=1;r<30;++r)for(var i=n[r];i<n[r+1];++i)o[i]=i-n[r]<<5|r;return{b:n,r:o}},Jn=Wn(Hn,2),Kn=Jn.b,Di=Jn.r;Kn[28]=258,Di[258]=28;var $n=Wn(Zn,0),Li=$n.b,sc=$n.r,_t=new le(32768);for(w=0;w<32768;++w)R=(w&43690)>>1|(w&21845)<<1,R=(R&52428)>>2|(R&13107)<<2,R=(R&61680)>>4|(R&3855)<<4,_t[w]=((R&65280)>>8|(R&255)<<8)>>1;var R,w,Pe=function(e,t,n){for(var r=e.length,o=0,i=new le(t);o<r;++o)e[o]&&++i[e[o]-1];var s=new le(t);for(o=1;o<t;++o)s[o]=s[o-1]+i[o-1]<<1;var a;if(n){a=new le(1<<t);var l=15-t;for(o=0;o<r;++o)if(e[o])for(var c=o<<4|e[o],f=t-e[o],u=s[e[o]-1]++<<f,h=u|(1<<f)-1;u<=h;++u)a[_t[u]>>l]=c}else for(a=new le(r),o=0;o<r;++o)e[o]&&(a[o]=_t[s[e[o]-1]++]>>15-e[o]);return a},Fe=new E(288);for(w=0;w<144;++w)Fe[w]=8;var w;for(w=144;w<256;++w)Fe[w]=9;var w;for(w=256;w<280;++w)Fe[w]=7;var w;for(w=280;w<288;++w)Fe[w]=8;var w,Yn=new E(32);for(w=0;w<32;++w)Yn[w]=5;var w,Vi=Pe(Fe,9,1),Mi=Pe(Yn,5,1),St=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},C=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},Et=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},Ui=function(e){return(e+7)/8|0},ki=function(e,t,n){(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length);var r=new E(n-t);return r.set(e.subarray(t,n)),r},Ni=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],S=function(e,t,n){var r=new Error(t||Ni[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,S),!n)throw r;return r},Dt=function(e,t,n,r){var o=e.length,i=r?r.length:0;if(!o||t.f&&!t.l)return n||new E(0);var s=!n||t.i!=2,a=t.i;n||(n=new E(o*3));var l=function(Ct){var Ot=n.length;if(Ct>Ot){var Gt=new E(Math.max(Ot*2,Ct));Gt.set(n),n=Gt}},c=t.f||0,f=t.p||0,u=t.b||0,h=t.l,d=t.d,p=t.m,y=t.n,P=o*8;do{if(!h){c=C(e,f,1);var M=C(e,f+1,3);if(f+=3,M)if(M==1)h=Vi,d=Mi,p=9,y=5;else if(M==2){var _=C(e,f,31)+257,O=C(e,f+10,15)+4,U=_+C(e,f+5,31)+1;f+=14;for(var b=new E(U),B=new E(19),A=0;A<O;++A)B[Ai[A]]=C(e,f+A*3,7);f+=O*3;for(var Vt=St(B),gr=(1<<Vt)-1,mr=Pe(B,Vt,1),A=0;A<U;){var Mt=mr[C(e,f,gr)];f+=Mt&15;var v=Mt>>4;if(v<16)b[A++]=v;else{var Q=0,Be=0;for(v==16?(Be=3+C(e,f,3),f+=2,Q=b[A-1]):v==17?(Be=3+C(e,f,7),f+=3):v==18&&(Be=11+C(e,f,127),f+=7);Be--;)b[A++]=Q}}var Ut=b.subarray(0,_),k=b.subarray(_);p=St(Ut),y=St(k),h=Pe(Ut,p,1),d=Pe(k,y,1)}else S(1);else{var v=Ui(f)+4,m=e[v-4]|e[v-3]<<8,g=v+m;if(g>o){a&&S(0);break}s&&l(u+m),n.set(e.subarray(v,g),u),t.b=u+=m,t.p=f=g*8,t.f=c;continue}if(f>P){a&&S(0);break}}s&&l(u+131072);for(var yr=(1<<p)-1,xr=(1<<y)-1,Ke=f;;Ke=f){var Q=h[Et(e,f)&yr],q=Q>>4;if(f+=Q&15,f>P){a&&S(0);break}if(Q||S(2),q<256)n[u++]=q;else if(q==256){Ke=f,h=null;break}else{var kt=q-254;if(q>264){var A=q-257,ce=Hn[A];kt=C(e,f,(1<<ce)-1)+Kn[A],f+=ce}var $e=d[Et(e,f)&xr],Ye=$e>>4;$e||S(3),f+=$e&15;var k=Li[Ye];if(Ye>3){var ce=Zn[Ye];k+=Et(e,f)&(1<<ce)-1,f+=ce}if(f>P){a&&S(0);break}s&&l(u+131072);var Xe=u+kt;if(u<k){var Nt=i-k,wr=Math.min(k,Xe);for(Nt+u<0&&S(3);u<wr;++u)n[u]=r[Nt+u]}for(;u<Xe;u+=4)n[u]=n[u-k],n[u+1]=n[u+1-k],n[u+2]=n[u+2-k],n[u+3]=n[u+3-k];u=Xe}}t.l=h,t.p=Ke,t.b=u,t.f=c,h&&(c=1,t.m=p,t.d=d,t.n=y)}while(!c);return u==n.length?n:ki(n,0,u)},Ci=new E(0),Oi=function(e){(e[0]!=31||e[1]!=139||e[2]!=8)&&S(6,"invalid gzip data");var t=e[3],n=10;t&4&&(n+=(e[10]|e[11]<<8)+2);for(var r=(t>>3&1)+(t>>4&1);r>0;r-=!e[n++]);return n+(t&2)},Gi=function(e){var t=e.length;return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0},zi=function(e,t){return((e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31)&&S(6,"invalid zlib data"),(e[1]>>5&1)==+!t&&S(6,"invalid zlib data: "+(e[1]&32?"need":"unexpected")+" dictionary"),(e[1]>>3&4)+2};function ji(e,t){return Dt(e,{i:2},t&&t.out,t&&t.dictionary)}function Ri(e,t){var n=Oi(e);return n+8>e.length&&S(6,"invalid gzip data"),Dt(e.subarray(n,-8),{i:2},t&&t.out||new E(Gi(e)),t&&t.dictionary)}function Hi(e,t){return Dt(e.subarray(zi(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}function Bt(e,t){return e[0]==31&&e[1]==139&&e[2]==8?Ri(e,t):(e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31?ji(e,t):Hi(e,t)}var Zi=typeof TextDecoder<"u"&&new TextDecoder,Wi=0;try{Zi.decode(Ci,{stream:!0}),Wi=1}catch{}var Xn=(e,t)=>e*X(2,t),Ie=(e,t)=>Math.floor(e/X(2,t)),Ze=(e,t)=>Xn(e.getUint16(t+1,!0),8)+e.getUint8(t),Qn=(e,t)=>Xn(e.getUint32(t+2,!0),16)+e.getUint16(t,!0),Ji=(e,t,n,r,o)=>{if(e!==r.getUint8(o))return e-r.getUint8(o);let i=Ze(r,o+1);if(t!==i)return t-i;let s=Ze(r,o+4);return n!==s?n-s:0},Ki=(e,t,n,r)=>{let o=qn(e,t|128,n,r);return o?{z:t,x:n,y:r,offset:o[0],length:o[1],isDir:!0}:null},jn=(e,t,n,r)=>{let o=qn(e,t,n,r);return o?{z:t,x:n,y:r,offset:o[0],length:o[1],isDir:!1}:null},qn=(e,t,n,r)=>{let o=0,i=e.byteLength/17-1;for(;o<=i;){let s=i+o>>1,a=Ji(t,n,r,e,s*17);if(a>0)o=s+1;else if(a<0)i=s-1;else return[Qn(e,s*17+7),e.getUint32(s*17+13,!0)]}return null},$i=(e,t)=>e.isDir&&!t.isDir?1:!e.isDir&&t.isDir?-1:e.z!==t.z?e.z-t.z:e.x!==t.x?e.x-t.x:e.y-t.y,er=(e,t)=>{let n=e.getUint8(t*17);return{z:n&127,x:Ze(e,t*17+1),y:Ze(e,t*17+4),offset:Qn(e,t*17+7),length:e.getUint32(t*17+13,!0),isDir:n>>7===1}},Rn=e=>{let t=[],n=new DataView(e);for(let r=0;r<n.byteLength/17;r++)t.push(er(n,r));return Yi(t)},Yi=e=>{e.sort($i);let t=new ArrayBuffer(17*e.length),n=new Uint8Array(t);for(let r=0;r<e.length;r++){let o=e[r],i=o.z;o.isDir&&(i=i|128),n[r*17]=i,n[r*17+1]=o.x&255,n[r*17+2]=o.x>>8&255,n[r*17+3]=o.x>>16&255,n[r*17+4]=o.y&255,n[r*17+5]=o.y>>8&255,n[r*17+6]=o.y>>16&255,n[r*17+7]=o.offset&255,n[r*17+8]=Ie(o.offset,8)&255,n[r*17+9]=Ie(o.offset,16)&255,n[r*17+10]=Ie(o.offset,24)&255,n[r*17+11]=Ie(o.offset,32)&255,n[r*17+12]=Ie(o.offset,48)&255,n[r*17+13]=o.length&255,n[r*17+14]=o.length>>8&255,n[r*17+15]=o.length>>16&255,n[r*17+16]=o.length>>24&255}return t},Xi=(e,t)=>{if(e.byteLength<17)return null;let n=e.byteLength/17,r=er(e,n-1);if(r.isDir){let o=r.z,i=t.z-o,s=Math.trunc(t.x/(1<<i)),a=Math.trunc(t.y/(1<<i));return{z:o,x:s,y:a}}return null};function Qi(e){return F(this,null,function*(){let t=yield e.getBytes(0,512e3),n=new DataView(t.data),r=n.getUint32(4,!0),o=n.getUint16(8,!0),i=new TextDecoder("utf-8"),s=JSON.parse(i.decode(new DataView(t.data,10,r))),a=0;s.compression==="gzip"&&(a=2);let l=0;"minzoom"in s&&(l=+s.minzoom);let c=0;"maxzoom"in s&&(c=+s.maxzoom);let f=0,u=0,h=0,d=-180,p=-85,y=180,P=85;if(s.bounds){let v=s.bounds.split(",");d=+v[0],p=+v[1],y=+v[2],P=+v[3]}if(s.center){let v=s.center.split(",");f=+v[0],u=+v[1],h=+v[2]}return{specVersion:n.getUint16(2,!0),rootDirectoryOffset:10+r,rootDirectoryLength:o*17,jsonMetadataOffset:10,jsonMetadataLength:r,leafDirectoryOffset:0,leafDirectoryLength:void 0,tileDataOffset:0,tileDataLength:void 0,numAddressedTiles:0,numTileEntries:0,numTileContents:0,clustered:!1,internalCompression:1,tileCompression:a,tileType:1,minZoom:l,maxZoom:c,minLon:d,minLat:p,maxLon:y,maxLat:P,centerZoom:h,centerLon:f,centerLat:u,etag:t.etag}})}function qi(e,t,n,r,o,i,s){return F(this,null,function*(){let a=yield n.getArrayBuffer(t,e.rootDirectoryOffset,e.rootDirectoryLength,e);e.specVersion===1&&(a=Rn(a));let l=jn(new DataView(a),r,o,i);if(l){let u=(yield t.getBytes(l.offset,l.length,s)).data,h=new DataView(u);return h.getUint8(0)===31&&h.getUint8(1)===139&&(u=Bt(new Uint8Array(u))),{data:u}}let c=Xi(new DataView(a),{z:r,x:o,y:i});if(c){let f=Ki(new DataView(a),c.z,c.x,c.y);if(f){let u=yield n.getArrayBuffer(t,f.offset,f.length,e);e.specVersion===1&&(u=Rn(u));let h=jn(new DataView(u),r,o,i);if(h){let p=(yield t.getBytes(h.offset,h.length,s)).data,y=new DataView(p);return y.getUint8(0)===31&&y.getUint8(1)===139&&(p=Bt(new Uint8Array(p))),{data:p}}}}})}var tr={getHeader:Qi,getZxy:qi},es=(e,t)=>{let n=!1,r="",o=L.GridLayer.extend({createTile:(i,s)=>{let a=document.createElement("img"),l=new AbortController,c=l.signal;return a.cancel=()=>{l.abort()},n||(e.getHeader().then(f=>{f.tileType===1?console.error("Error: archive contains MVT vector tiles, but leafletRasterLayer is for displaying raster tiles. See https://github.com/protomaps/PMTiles/tree/main/js for details."):f.tileType===2?r="image/png":f.tileType===3?r="image/jpeg":f.tileType===4?r="image/webp":f.tileType===5&&(r="image/avif")}),n=!0),e.getZxy(i.z,i.x,i.y,c).then(f=>{if(f){let u=new Blob([f.data],{type:r}),h=window.URL.createObjectURL(u);a.src=h,a.cancel=void 0,s(void 0,a)}}).catch(f=>{if(f.name!=="AbortError")throw f}),a},_removeTile:function(i){let s=this._tiles[i];s&&(s.el.cancel&&s.el.cancel(),s.el.width=0,s.el.height=0,s.el.deleted=!0,L.DomUtil.remove(s.el),delete this._tiles[i],this.fire("tileunload",{tile:s.el,coords:this._keyToTileCoords(i)}))}});return new o(t)},ts=e=>(t,n)=>{if(n instanceof AbortController)return e(t,n);let r=new AbortController;return e(t,r).then(o=>n(void 0,o.data,o.cacheControl||"",o.expires||""),o=>n(o)).catch(o=>n(o)),{cancel:()=>r.abort()}},ns=class{constructor(){this.tilev4=(e,t)=>F(this,null,function*(){if(e.type==="json"){let u=e.url.substr(10),h=this.tiles.get(u);h||(h=new At(u),this.tiles.set(u,h));let d=yield h.getHeader();return{data:{tiles:[`${e.url}/{z}/{x}/{y}`],minzoom:d.minZoom,maxzoom:d.maxZoom,bounds:[d.minLon,d.minLat,d.maxLon,d.maxLat]}}}let n=new RegExp(/pmtiles:\/\/(.+)\/(\d+)\/(\d+)\/(\d+)/),r=e.url.match(n);if(!r)throw new Error("Invalid PMTiles protocol URL");let o=r[1],i=this.tiles.get(o);i||(i=new At(o),this.tiles.set(o,i));let s=r[2],a=r[3],l=r[4],c=yield i.getHeader(),f=yield i?.getZxy(+s,+a,+l,t.signal);return f?{data:new Uint8Array(f.data),cacheControl:f.cacheControl,expires:f.expires}:c.tileType===1?{data:new Uint8Array}:{data:null}}),this.tile=ts(this.tilev4),this.tiles=new Map}add(e){this.tiles.set(e.source.getKey(),e)}get(e){return this.tiles.get(e)}};function se(e,t){return(t>>>0)*4294967296+(e>>>0)}function rs(e,t){let n=t.buf,r=n[t.pos++],o=(r&112)>>4;if(r<128||(r=n[t.pos++],o|=(r&127)<<3,r<128)||(r=n[t.pos++],o|=(r&127)<<10,r<128)||(r=n[t.pos++],o|=(r&127)<<17,r<128)||(r=n[t.pos++],o|=(r&127)<<24,r<128)||(r=n[t.pos++],o|=(r&1)<<31,r<128))return se(e,o);throw new Error("Expected varint not more than 10 bytes")}function ae(e){let t=e.buf,n=t[e.pos++],r=n&127;return n<128||(n=t[e.pos++],r|=(n&127)<<7,n<128)||(n=t[e.pos++],r|=(n&127)<<14,n<128)||(n=t[e.pos++],r|=(n&127)<<21,n<128)?r:(n=t[e.pos],r|=(n&15)<<28,rs(r,e))}function nr(e,t,n,r){if(r===0){n===1&&(t[0]=e-1-t[0],t[1]=e-1-t[1]);let o=t[0];t[0]=t[1],t[1]=o}}function os(e,t){let n=X(2,e),r=t,o=t,i=t,s=[0,0],a=1;for(;a<n;)r=1&i/2,o=1&(i^r),nr(a,s,r,o),s[0]+=a*r,s[1]+=a*o,i=i/4,a*=2;return[e,s[0],s[1]]}var is=[0,1,5,21,85,341,1365,5461,21845,87381,349525,1398101,5592405,22369621,89478485,357913941,1431655765,5726623061,22906492245,91625968981,366503875925,1466015503701,5864062014805,23456248059221,93824992236885,375299968947541,0x5555555555555];function rr(e,t,n){if(e>26)throw Error("Tile zoom level exceeds max safe number limit (26)");if(t>X(2,e)-1||n>X(2,e)-1)throw Error("tile x/y outside zoom level bounds");let r=is[e],o=X(2,e),i=0,s=0,a=0,l=[t,n],c=o/2;for(;c>0;)i=(l[0]&c)>0?1:0,s=(l[1]&c)>0?1:0,a+=c*c*(3*i^s),nr(c,l,i,s),c=c/2;return r+a}function ss(e){let t=0,n=0;for(let r=0;r<27;r++){let o=(1<<r)*(1<<r);if(t+o>e)return os(r,e-t);t+=o}throw Error("Tile zoom level exceeds max safe number limit (26)")}var or=(e=>(e[e.Unknown=0]="Unknown",e[e.None=1]="None",e[e.Gzip=2]="Gzip",e[e.Brotli=3]="Brotli",e[e.Zstd=4]="Zstd",e))(or||{});function Lt(e,t){return F(this,null,function*(){if(t===1||t===0)return e;if(t===2){if(typeof globalThis.DecompressionStream>"u")return Bt(new Uint8Array(e));let n=new Response(e).body;if(!n)throw Error("Failed to read response stream");let r=n.pipeThrough(new globalThis.DecompressionStream("gzip"));return new Response(r).arrayBuffer()}throw Error("Compression method not supported")})}var ir=(e=>(e[e.Unknown=0]="Unknown",e[e.Mvt=1]="Mvt",e[e.Png=2]="Png",e[e.Jpeg=3]="Jpeg",e[e.Webp=4]="Webp",e[e.Avif=5]="Avif",e))(ir||{}),as=127;function sr(e,t){let n=0,r=e.length-1;for(;n<=r;){let o=r+n>>1,i=t-e[o].tileId;if(i>0)n=o+1;else if(i<0)r=o-1;else return e[o]}return r>=0&&(e[r].runLength===0||t-e[r].tileId<e[r].runLength)?e[r]:null}var ls=class{constructor(e){this.file=e}getKey(){return this.file.name}getBytes(e,t){return F(this,null,function*(){return{data:yield this.file.slice(e,e+t).arrayBuffer()}})}},ar=class{constructor(e,t=new Headers){this.url=e,this.customHeaders=t,this.mustReload=!1}getKey(){return this.url}setHeaders(e){this.customHeaders=e}getBytes(e,t,n,r){return F(this,null,function*(){let o,i;n?i=n:(o=new AbortController,i=o.signal);let s=new Headers(this.customHeaders);s.set("range",`bytes=${e}-${e+t-1}`);let a;this.mustReload&&(a="reload");let l=yield fetch(this.url,{signal:i,cache:a,headers:s});if(e===0&&l.status===416){let h=l.headers.get("Content-Range");if(!h||!h.startsWith("bytes */"))throw Error("Missing content-length on 416 response");let d=+h.substr(8);l=yield fetch(this.url,{signal:i,cache:"reload",headers:{range:`bytes=0-${d-1}`}})}let c=l.headers.get("Etag");if(c?.startsWith("W/")&&(c=null),l.status===416||r&&c&&c!==r)throw this.mustReload=!0,new We(r);if(l.status>=300)throw Error(`Bad response code: ${l.status}`);let f=l.headers.get("Content-Length");if(l.status===200&&(!f||+f>t))throw o&&o.abort(),Error("Server returned no content-length header or content-length exceeding request. Check that your storage backend supports HTTP Byte Serving.");return{data:yield l.arrayBuffer(),etag:c||void 0,cacheControl:l.headers.get("Cache-Control")||void 0,expires:l.headers.get("Expires")||void 0}})}};function V(e,t){let n=e.getUint32(t+4,!0),r=e.getUint32(t+0,!0);return n*X(2,32)+r}function lr(e,t){let n=new DataView(e),r=n.getUint8(7);if(r>3)throw Error(`Archive is spec version ${r} but this library supports up to spec version 3`);return{specVersion:r,rootDirectoryOffset:V(n,8),rootDirectoryLength:V(n,16),jsonMetadataOffset:V(n,24),jsonMetadataLength:V(n,32),leafDirectoryOffset:V(n,40),leafDirectoryLength:V(n,48),tileDataOffset:V(n,56),tileDataLength:V(n,64),numAddressedTiles:V(n,72),numTileEntries:V(n,80),numTileContents:V(n,88),clustered:n.getUint8(96)===1,internalCompression:n.getUint8(97),tileCompression:n.getUint8(98),tileType:n.getUint8(99),minZoom:n.getUint8(100),maxZoom:n.getUint8(101),minLon:n.getInt32(102,!0)/1e7,minLat:n.getInt32(106,!0)/1e7,maxLon:n.getInt32(110,!0)/1e7,maxLat:n.getInt32(114,!0)/1e7,centerZoom:n.getUint8(118),centerLon:n.getInt32(119,!0)/1e7,centerLat:n.getInt32(123,!0)/1e7,etag:t}}function cr(e){let t={buf:new Uint8Array(e),pos:0},n=ae(t),r=[],o=0;for(let i=0;i<n;i++){let s=ae(t);r.push({tileId:o+s,offset:0,length:0,runLength:1}),o+=s}for(let i=0;i<n;i++)r[i].runLength=ae(t);for(let i=0;i<n;i++)r[i].length=ae(t);for(let i=0;i<n;i++){let s=ae(t);s===0&&i>0?r[i].offset=r[i-1].offset+r[i-1].length:r[i].offset=s-1}return r}function cs(e){let t=new DataView(e);return t.getUint16(2,!0)===2?(console.warn("PMTiles spec version 2 has been deprecated; please see github.com/protomaps/PMTiles for tools to upgrade"),2):t.getUint16(2,!0)===1?(console.warn("PMTiles spec version 1 has been deprecated; please see github.com/protomaps/PMTiles for tools to upgrade"),1):3}var We=class extends Error{};function fr(e,t){return F(this,null,function*(){let n=yield e.getBytes(0,16384);if(new DataView(n.data).getUint16(0,!0)!==19792)throw new Error("Wrong magic number for PMTiles archive");if(cs(n.data)<3)return[yield tr.getHeader(e)];let o=n.data.slice(0,as),i=lr(o,n.etag),s=n.data.slice(i.rootDirectoryOffset,i.rootDirectoryOffset+i.rootDirectoryLength),a=`${e.getKey()}|${i.etag||""}|${i.rootDirectoryOffset}|${i.rootDirectoryLength}`,l=cr(yield t(s,i.internalCompression));return[i,[a,l.length,l]]})}function ur(e,t,n,r,o){return F(this,null,function*(){let i=yield e.getBytes(n,r,void 0,o.etag),s=yield t(i.data,o.internalCompression),a=cr(s);if(a.length===0)throw new Error("Empty directory is invalid");return a})}var fs=class{constructor(e=100,t=!0,n=Lt){this.cache=new Map,this.maxCacheEntries=e,this.counter=1,this.decompress=n}getHeader(e){return F(this,null,function*(){let t=e.getKey(),n=this.cache.get(t);if(n)return n.lastUsed=this.counter++,n.data;let r=yield fr(e,this.decompress);return r[1]&&this.cache.set(r[1][0],{lastUsed:this.counter++,data:r[1][2]}),this.cache.set(t,{lastUsed:this.counter++,data:r[0]}),this.prune(),r[0]})}getDirectory(e,t,n,r){return F(this,null,function*(){let o=`${e.getKey()}|${r.etag||""}|${t}|${n}`,i=this.cache.get(o);if(i)return i.lastUsed=this.counter++,i.data;let s=yield ur(e,this.decompress,t,n,r);return this.cache.set(o,{lastUsed:this.counter++,data:s}),this.prune(),s})}getArrayBuffer(e,t,n,r){return F(this,null,function*(){let o=`${e.getKey()}|${r.etag||""}|${t}|${n}`,i=this.cache.get(o);if(i)return i.lastUsed=this.counter++,yield i.data;let s=yield e.getBytes(t,n,void 0,r.etag);return this.cache.set(o,{lastUsed:this.counter++,data:s.data}),this.prune(),s.data})}prune(){if(this.cache.size>this.maxCacheEntries){let e=1/0,t;this.cache.forEach((n,r)=>{n.lastUsed<e&&(e=n.lastUsed,t=r)}),t&&this.cache.delete(t)}}invalidate(e){return F(this,null,function*(){this.cache.delete(e.getKey())})}},hr=class{constructor(e=100,t=!0,n=Lt){this.cache=new Map,this.invalidations=new Map,this.maxCacheEntries=e,this.counter=1,this.decompress=n}getHeader(e){return F(this,null,function*(){let t=e.getKey(),n=this.cache.get(t);if(n)return n.lastUsed=this.counter++,yield n.data;let r=new Promise((o,i)=>{fr(e,this.decompress).then(s=>{s[1]&&this.cache.set(s[1][0],{lastUsed:this.counter++,data:Promise.resolve(s[1][2])}),o(s[0]),this.prune()}).catch(s=>{i(s)})});return this.cache.set(t,{lastUsed:this.counter++,data:r}),r})}getDirectory(e,t,n,r){return F(this,null,function*(){let o=`${e.getKey()}|${r.etag||""}|${t}|${n}`,i=this.cache.get(o);if(i)return i.lastUsed=this.counter++,yield i.data;let s=new Promise((a,l)=>{ur(e,this.decompress,t,n,r).then(c=>{a(c),this.prune()}).catch(c=>{l(c)})});return this.cache.set(o,{lastUsed:this.counter++,data:s}),s})}getArrayBuffer(e,t,n,r){return F(this,null,function*(){let o=`${e.getKey()}|${r.etag||""}|${t}|${n}`,i=this.cache.get(o);if(i)return i.lastUsed=this.counter++,yield i.data;let s=new Promise((a,l)=>{e.getBytes(t,n,void 0,r.etag).then(c=>{a(c.data),this.cache.has(o),this.prune()}).catch(c=>{l(c)})});return this.cache.set(o,{lastUsed:this.counter++,data:s}),s})}prune(){if(this.cache.size>=this.maxCacheEntries){let e=1/0,t;this.cache.forEach((n,r)=>{n.lastUsed<e&&(e=n.lastUsed,t=r)}),t&&this.cache.delete(t)}}invalidate(e){return F(this,null,function*(){let t=e.getKey();if(this.invalidations.get(t))return yield this.invalidations.get(t);this.cache.delete(e.getKey());let n=new Promise((r,o)=>{this.getHeader(e).then(i=>{r(),this.invalidations.delete(t)}).catch(i=>{o(i)})});this.invalidations.set(t,n)})}},At=class{constructor(e,t,n){typeof e=="string"?this.source=new ar(e):this.source=e,n?this.decompress=n:this.decompress=Lt,t?this.cache=t:this.cache=new hr}getHeader(){return F(this,null,function*(){return yield this.cache.getHeader(this.source)})}getZxyAttempt(e,t,n,r){return F(this,null,function*(){let o=rr(e,t,n),i=yield this.cache.getHeader(this.source);if(i.specVersion<3)return tr.getZxy(i,this.source,this.cache,e,t,n,r);if(e<i.minZoom||e>i.maxZoom)return;let s=i.rootDirectoryOffset,a=i.rootDirectoryLength;for(let l=0;l<=3;l++){let c=yield this.cache.getDirectory(this.source,s,a,i),f=sr(c,o);if(f){if(f.runLength>0){let u=yield this.source.getBytes(i.tileDataOffset+f.offset,f.length,r,i.etag);return{data:yield this.decompress(u.data,i.tileCompression),cacheControl:u.cacheControl,expires:u.expires}}s=i.leafDirectoryOffset+f.offset,a=f.length}else return}throw Error("Maximum directory depth exceeded")})}getZxy(e,t,n,r){return F(this,null,function*(){try{return yield this.getZxyAttempt(e,t,n,r)}catch(o){if(o instanceof We)return this.cache.invalidate(this.source),yield this.getZxyAttempt(e,t,n,r);throw o}})}getMetadataAttempt(){return F(this,null,function*(){let e=yield this.cache.getHeader(this.source),t=yield this.source.getBytes(e.jsonMetadataOffset,e.jsonMetadataLength,void 0,e.etag),n=yield this.decompress(t.data,e.internalCompression),r=new TextDecoder("utf-8");return JSON.parse(r.decode(n))})}getMetadata(){return F(this,null,function*(){try{return yield this.getMetadataAttempt()}catch(e){if(e instanceof We)return this.cache.invalidate(this.source),yield this.getMetadataAttempt();throw e}})}};var{TileType:Se}=be;function dr(e,t,n,r){let o=t,i=null;if(o)try{let l=JSON.stringify(o);i=ge.parseTextSync?.(l,r)||null}catch(l){console.warn("PMTiles metadata could not be interpreted as TileJSON",l)}let s={};typeof i?.name=="string"&&(s.name=i.name),typeof i?.htmlAttribution=="string"&&(s.attributions=[i.htmlAttribution]);let a={...s,format:"pmtiles",formatVersion:e.specVersion,attributions:[],tileMIMEType:us(e.tileType),minZoom:e.minZoom,maxZoom:e.maxZoom,boundingBox:[[e.minLon,e.minLat],[e.maxLon,e.maxLat]],center:[e.centerLon,e.centerLat],centerZoom:e.centerZoom,etag:e.etag};return i&&(a.tilejson=i),n?.includeFormatHeader&&(a.formatHeader=e,a.formatMetadata=a),a}function us(e){switch(e){case Se.Mvt:return"application/vnd.mapbox-vector-tile";case Se.Png:return"image/png";case Se.Jpeg:return"image/jpeg";case Se.Webp:return"image/webp";case Se.Avif:return"image/avif";default:return"application/octet-stream"}}var Je=class{blob;key;constructor(t,n){this.blob=t,this.key=n}getKey(){return this.blob.url||""}async getBytes(t,n,r){return{data:await this.blob.slice(t,t+n).arrayBuffer()}}};var{PMTiles:hs}=be,ds="1.0.0",pr={name:"PMTiles",id:"pmtiles",module:"pmtiles",version:ds,extensions:["pmtiles"],mimeTypes:["application/octet-stream"],options:{url:void 0,pmtiles:{}},type:"pmtiles",fromUrl:!0,fromBlob:!0,testURL:e=>e.endsWith(".pmtiles"),createDataSource:(e,t)=>new Ee(e,t)},Ee=class extends he{data;props;mimeType=null;pmtiles;metadata;constructor(t,n){super(n),this.props=n;let r=typeof t=="string"?it(t):new Je(t,"pmtiles");this.data=n.url,this.pmtiles=new hs(r),this.getTileData=this.getTileData.bind(this),this.metadata=this.getMetadata()}async getSchema(){return{fields:[],metadata:{}}}async getMetadata(){let t=await this.pmtiles.getHeader(),n=await this.pmtiles.getMetadata(),r=dr(t,n,{includeFormatHeader:!1},this.loadOptions);return this.props.attributions&&(r.attributions=[...this.props.attributions,...r.attributions||[]]),r?.tileMIMEType&&(this.mimeType=r?.tileMIMEType),r}async getTile(t){let{x:n,y:r,z:o}=t,s=(await this.pmtiles.getZxy(o,n,r))?.data;return s||null}async getTileData(t){let{x:n,y:r,z:o}=t.index;switch((await this.metadata).tileMIMEType){case"application/vnd.mapbox-vector-tile":return await this.getVectorTile({x:n,y:r,z:o,layers:[]});default:return await this.getImageTile({x:n,y:r,z:o,layers:[]})}}async getImageTile(t){let n=await this.getTile(t);return n?await ft.parse(n,this.loadOptions):null}async getVectorTile(t){let n=await this.getTile(t),r={shape:"geojson-table",mvt:{coordinates:"wgs84",tileIndex:{x:t.x,y:t.y,z:t.z},...this.loadOptions?.mvt},...this.loadOptions};return n?await bt.parse(n,r):null}};return Sr(_e);})();
7
+ "use strict";var __exports__=(()=>{var bn=Object.create;var ue=Object.defineProperty;var Sn=Object.getOwnPropertyDescriptor;var En=Object.getOwnPropertyNames;var Bn=Object.getPrototypeOf,_n=Object.prototype.hasOwnProperty;var An=(e,t,r)=>t in e?ue(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var qe=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),jt=(e,t)=>{for(var r in t)ue(e,r,{get:t[r],enumerable:!0})},De=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of En(t))!_n.call(e,o)&&o!==r&&ue(e,o,{get:()=>t[o],enumerable:!(n=Sn(t,o))||n.enumerable});return e},Le=(e,t,r)=>(De(e,t,"default"),r&&De(r,t,"default")),Rt=(e,t,r)=>(r=e!=null?bn(Bn(e)):{},De(t||!e||!e.__esModule?ue(r,"default",{value:e,enumerable:!0}):r,e)),Dn=e=>De(ue({},"__esModule",{value:!0}),e);var Ht=(e,t,r)=>(An(e,typeof t!="symbol"?t+"":t,r),r);var Jt=qe((Is,Zt)=>{Zt.exports=globalThis.loaders});var _r=qe(wt=>{wt.read=function(e,t,r,n,o){var i,s,a=o*8-n-1,l=(1<<a)-1,c=l>>1,f=-7,u=r?o-1:0,h=r?-1:1,d=e[t+u];for(u+=h,i=d&(1<<-f)-1,d>>=-f,f+=a;f>0;i=i*256+e[t+u],u+=h,f-=8);for(s=i&(1<<-f)-1,i>>=-f,f+=n;f>0;s=s*256+e[t+u],u+=h,f-=8);if(i===0)i=1-c;else{if(i===l)return s?NaN:(d?-1:1)*(1/0);s=s+Math.pow(2,n),i=i-c}return(d?-1:1)*s*Math.pow(2,i-n)};wt.write=function(e,t,r,n,o,i){var s,a,l,c=i*8-o-1,f=(1<<c)-1,u=f>>1,h=o===23?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:i-1,p=n?1:-1,y=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=f):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),s+u>=1?t+=h/l:t+=h*Math.pow(2,1-u),t*l>=2&&(s++,l/=2),s+u>=f?(a=0,s=f):s+u>=1?(a=(t*l-1)*Math.pow(2,o),s=s+u):(a=t*Math.pow(2,u-1)*Math.pow(2,o),s=0));o>=8;e[r+d]=a&255,d+=p,a/=256,o-=8);for(s=s<<o|a,c+=o;c>0;e[r+d]=s&255,d+=p,s/=256,c-=8);e[r+d-p]|=y*128}});var Ur=qe((Xl,Vr)=>{"use strict";Vr.exports=x;var Re=_r();function x(e){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(e)?e:new Uint8Array(e||0),this.pos=0,this.type=0,this.length=this.buf.length}x.Varint=0;x.Fixed64=1;x.Bytes=2;x.Fixed32=5;var vt=(1<<16)*(1<<16),Ar=1/vt,ci=12,Mr=typeof TextDecoder>"u"?null:new TextDecoder("utf8");x.prototype={destroy:function(){this.buf=null},readFields:function(e,t,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),o=n>>3,i=this.pos;this.type=n&7,e(o,t,this),this.pos===i&&this.skip(n)}return t},readMessage:function(e,t){return this.readFields(e,t,this.readVarint()+this.pos)},readFixed32:function(){var e=He(this.buf,this.pos);return this.pos+=4,e},readSFixed32:function(){var e=Lr(this.buf,this.pos);return this.pos+=4,e},readFixed64:function(){var e=He(this.buf,this.pos)+He(this.buf,this.pos+4)*vt;return this.pos+=8,e},readSFixed64:function(){var e=He(this.buf,this.pos)+Lr(this.buf,this.pos+4)*vt;return this.pos+=8,e},readFloat:function(){var e=Re.read(this.buf,this.pos,!0,23,4);return this.pos+=4,e},readDouble:function(){var e=Re.read(this.buf,this.pos,!0,52,8);return this.pos+=8,e},readVarint:function(e){var t=this.buf,r,n;return n=t[this.pos++],r=n&127,n<128||(n=t[this.pos++],r|=(n&127)<<7,n<128)||(n=t[this.pos++],r|=(n&127)<<14,n<128)||(n=t[this.pos++],r|=(n&127)<<21,n<128)?r:(n=t[this.pos],r|=(n&15)<<28,fi(r,e,this))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var e=this.readVarint();return e%2===1?(e+1)/-2:e/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var e=this.readVarint()+this.pos,t=this.pos;return this.pos=e,e-t>=ci&&Mr?Fi(this.buf,t,e):Ii(this.buf,t,e)},readBytes:function(){var e=this.readVarint()+this.pos,t=this.buf.subarray(this.pos,e);return this.pos=e,t},readPackedVarint:function(e,t){if(this.type!==x.Bytes)return e.push(this.readVarint(t));var r=j(this);for(e=e||[];this.pos<r;)e.push(this.readVarint(t));return e},readPackedSVarint:function(e){if(this.type!==x.Bytes)return e.push(this.readSVarint());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readSVarint());return e},readPackedBoolean:function(e){if(this.type!==x.Bytes)return e.push(this.readBoolean());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readBoolean());return e},readPackedFloat:function(e){if(this.type!==x.Bytes)return e.push(this.readFloat());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readFloat());return e},readPackedDouble:function(e){if(this.type!==x.Bytes)return e.push(this.readDouble());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readDouble());return e},readPackedFixed32:function(e){if(this.type!==x.Bytes)return e.push(this.readFixed32());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readFixed32());return e},readPackedSFixed32:function(e){if(this.type!==x.Bytes)return e.push(this.readSFixed32());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readSFixed32());return e},readPackedFixed64:function(e){if(this.type!==x.Bytes)return e.push(this.readFixed64());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readFixed64());return e},readPackedSFixed64:function(e){if(this.type!==x.Bytes)return e.push(this.readSFixed64());var t=j(this);for(e=e||[];this.pos<t;)e.push(this.readSFixed64());return e},skip:function(e){var t=e&7;if(t===x.Varint)for(;this.buf[this.pos++]>127;);else if(t===x.Bytes)this.pos=this.readVarint()+this.pos;else if(t===x.Fixed32)this.pos+=4;else if(t===x.Fixed64)this.pos+=8;else throw new Error("Unimplemented type: "+t)},writeTag:function(e,t){this.writeVarint(e<<3|t)},realloc:function(e){for(var t=this.length||16;t<this.pos+e;)t*=2;if(t!==this.length){var r=new Uint8Array(t);r.set(this.buf),this.buf=r,this.length=t}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(e){this.realloc(4),se(this.buf,e,this.pos),this.pos+=4},writeSFixed32:function(e){this.realloc(4),se(this.buf,e,this.pos),this.pos+=4},writeFixed64:function(e){this.realloc(8),se(this.buf,e&-1,this.pos),se(this.buf,Math.floor(e*Ar),this.pos+4),this.pos+=8},writeSFixed64:function(e){this.realloc(8),se(this.buf,e&-1,this.pos),se(this.buf,Math.floor(e*Ar),this.pos+4),this.pos+=8},writeVarint:function(e){if(e=+e||0,e>268435455||e<0){ui(e,this);return}this.realloc(4),this.buf[this.pos++]=e&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0),!(e<=127)&&(this.buf[this.pos++]=e>>>7&127)))},writeSVarint:function(e){this.writeVarint(e<0?-e*2-1:e*2)},writeBoolean:function(e){this.writeVarint(Boolean(e))},writeString:function(e){e=String(e),this.realloc(e.length*4),this.pos++;var t=this.pos;this.pos=bi(this.buf,e,this.pos);var r=this.pos-t;r>=128&&Dr(t,r,this),this.pos=t-1,this.writeVarint(r),this.pos+=r},writeFloat:function(e){this.realloc(4),Re.write(this.buf,e,this.pos,!0,23,4),this.pos+=4},writeDouble:function(e){this.realloc(8),Re.write(this.buf,e,this.pos,!0,52,8),this.pos+=8},writeBytes:function(e){var t=e.length;this.writeVarint(t),this.realloc(t);for(var r=0;r<t;r++)this.buf[this.pos++]=e[r]},writeRawMessage:function(e,t){this.pos++;var r=this.pos;e(t,this);var n=this.pos-r;n>=128&&Dr(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(e,t,r){this.writeTag(e,x.Bytes),this.writeRawMessage(t,r)},writePackedVarint:function(e,t){t.length&&this.writeMessage(e,pi,t)},writePackedSVarint:function(e,t){t.length&&this.writeMessage(e,gi,t)},writePackedBoolean:function(e,t){t.length&&this.writeMessage(e,xi,t)},writePackedFloat:function(e,t){t.length&&this.writeMessage(e,mi,t)},writePackedDouble:function(e,t){t.length&&this.writeMessage(e,yi,t)},writePackedFixed32:function(e,t){t.length&&this.writeMessage(e,wi,t)},writePackedSFixed32:function(e,t){t.length&&this.writeMessage(e,vi,t)},writePackedFixed64:function(e,t){t.length&&this.writeMessage(e,Ti,t)},writePackedSFixed64:function(e,t){t.length&&this.writeMessage(e,Pi,t)},writeBytesField:function(e,t){this.writeTag(e,x.Bytes),this.writeBytes(t)},writeFixed32Field:function(e,t){this.writeTag(e,x.Fixed32),this.writeFixed32(t)},writeSFixed32Field:function(e,t){this.writeTag(e,x.Fixed32),this.writeSFixed32(t)},writeFixed64Field:function(e,t){this.writeTag(e,x.Fixed64),this.writeFixed64(t)},writeSFixed64Field:function(e,t){this.writeTag(e,x.Fixed64),this.writeSFixed64(t)},writeVarintField:function(e,t){this.writeTag(e,x.Varint),this.writeVarint(t)},writeSVarintField:function(e,t){this.writeTag(e,x.Varint),this.writeSVarint(t)},writeStringField:function(e,t){this.writeTag(e,x.Bytes),this.writeString(t)},writeFloatField:function(e,t){this.writeTag(e,x.Fixed32),this.writeFloat(t)},writeDoubleField:function(e,t){this.writeTag(e,x.Fixed64),this.writeDouble(t)},writeBooleanField:function(e,t){this.writeVarintField(e,Boolean(t))}};function fi(e,t,r){var n=r.buf,o,i;if(i=n[r.pos++],o=(i&112)>>4,i<128||(i=n[r.pos++],o|=(i&127)<<3,i<128)||(i=n[r.pos++],o|=(i&127)<<10,i<128)||(i=n[r.pos++],o|=(i&127)<<17,i<128)||(i=n[r.pos++],o|=(i&127)<<24,i<128)||(i=n[r.pos++],o|=(i&1)<<31,i<128))return ie(e,o,t);throw new Error("Expected varint not more than 10 bytes")}function j(e){return e.type===x.Bytes?e.readVarint()+e.pos:e.pos+1}function ie(e,t,r){return r?t*4294967296+(e>>>0):(t>>>0)*4294967296+(e>>>0)}function ui(e,t){var r,n;if(e>=0?(r=e%4294967296|0,n=e/4294967296|0):(r=~(-e%4294967296),n=~(-e/4294967296),r^4294967295?r=r+1|0:(r=0,n=n+1|0)),e>=18446744073709552e3||e<-18446744073709552e3)throw new Error("Given varint doesn't fit into 10 bytes");t.realloc(10),hi(r,n,t),di(n,t)}function hi(e,t,r){r.buf[r.pos++]=e&127|128,e>>>=7,r.buf[r.pos++]=e&127|128,e>>>=7,r.buf[r.pos++]=e&127|128,e>>>=7,r.buf[r.pos++]=e&127|128,e>>>=7,r.buf[r.pos]=e&127}function di(e,t){var r=(e&7)<<4;t.buf[t.pos++]|=r|((e>>>=3)?128:0),e&&(t.buf[t.pos++]=e&127|((e>>>=7)?128:0),e&&(t.buf[t.pos++]=e&127|((e>>>=7)?128:0),e&&(t.buf[t.pos++]=e&127|((e>>>=7)?128:0),e&&(t.buf[t.pos++]=e&127|((e>>>=7)?128:0),e&&(t.buf[t.pos++]=e&127)))))}function Dr(e,t,r){var n=t<=16383?1:t<=2097151?2:t<=268435455?3:Math.floor(Math.log(t)/(Math.LN2*7));r.realloc(n);for(var o=r.pos-1;o>=e;o--)r.buf[o+n]=r.buf[o]}function pi(e,t){for(var r=0;r<e.length;r++)t.writeVarint(e[r])}function gi(e,t){for(var r=0;r<e.length;r++)t.writeSVarint(e[r])}function mi(e,t){for(var r=0;r<e.length;r++)t.writeFloat(e[r])}function yi(e,t){for(var r=0;r<e.length;r++)t.writeDouble(e[r])}function xi(e,t){for(var r=0;r<e.length;r++)t.writeBoolean(e[r])}function wi(e,t){for(var r=0;r<e.length;r++)t.writeFixed32(e[r])}function vi(e,t){for(var r=0;r<e.length;r++)t.writeSFixed32(e[r])}function Ti(e,t){for(var r=0;r<e.length;r++)t.writeFixed64(e[r])}function Pi(e,t){for(var r=0;r<e.length;r++)t.writeSFixed64(e[r])}function He(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16)+e[t+3]*16777216}function se(e,t,r){e[r]=t,e[r+1]=t>>>8,e[r+2]=t>>>16,e[r+3]=t>>>24}function Lr(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16)+(e[t+3]<<24)}function Ii(e,t,r){for(var n="",o=t;o<r;){var i=e[o],s=null,a=i>239?4:i>223?3:i>191?2:1;if(o+a>r)break;var l,c,f;a===1?i<128&&(s=i):a===2?(l=e[o+1],(l&192)===128&&(s=(i&31)<<6|l&63,s<=127&&(s=null))):a===3?(l=e[o+1],c=e[o+2],(l&192)===128&&(c&192)===128&&(s=(i&15)<<12|(l&63)<<6|c&63,(s<=2047||s>=55296&&s<=57343)&&(s=null))):a===4&&(l=e[o+1],c=e[o+2],f=e[o+3],(l&192)===128&&(c&192)===128&&(f&192)===128&&(s=(i&15)<<18|(l&63)<<12|(c&63)<<6|f&63,(s<=65535||s>=1114112)&&(s=null))),s===null?(s=65533,a=1):s>65535&&(s-=65536,n+=String.fromCharCode(s>>>10&1023|55296),s=56320|s&1023),n+=String.fromCharCode(s),o+=a}return n}function Fi(e,t,r){return Mr.decode(e.subarray(t,r))}function bi(e,t,r){for(var n=0,o,i;n<t.length;n++){if(o=t.charCodeAt(n),o>55295&&o<57344)if(i)if(o<56320){e[r++]=239,e[r++]=191,e[r++]=189,i=o;continue}else o=i-55296<<10|o-56320|65536,i=null;else{o>56319||n+1===t.length?(e[r++]=239,e[r++]=191,e[r++]=189):i=o;continue}else i&&(e[r++]=239,e[r++]=191,e[r++]=189,i=null);o<128?e[r++]=o:(o<2048?e[r++]=o>>6|192:(o<65536?e[r++]=o>>12|224:(e[r++]=o>>18|240,e[r++]=o>>12&63|128),e[r++]=o>>6&63|128),e[r++]=o&63|128)}return r}});var _e={};jt(_e,{PMTilesSource:()=>mn,PMTilesTileSource:()=>Q,_PMTilesLoader:()=>wn});Le(_e,Rt(Jt(),1));function he(e,t){if(!e)throw new Error(t||"loader assertion failed.")}var z={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},Ln=z.self||z.window||z.global||{},Mn=z.window||z.self||z.global||{},Vn=z.global||z.self||z.window||{},Un=z.document||{};var et=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var Wt=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Nn=Wt&&parseFloat(Wt[1])||0;function H(e){return H=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},H(e)}function tt(e,t){if(H(e)!=="object"||e===null)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||"default");if(H(n)!=="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function rt(e){var t=tt(e,"string");return H(t)==="symbol"?t:String(t)}function T(e,t,r){return t=rt(t),t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function nt(e){if(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&Boolean(process.versions.electron))return!0;let t=typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent,r=e||t;return!!(r&&r.indexOf("Electron")>=0)}function k(){return!(typeof process=="object"&&String(process)==="[object process]"&&!process.browser)||nt()}var kn=globalThis.self||globalThis.window||globalThis.global,te=globalThis.window||globalThis.self||globalThis.global,Cn=globalThis.document||{},J=globalThis.process||{},On=globalThis.console,ks=globalThis.navigator||{};var Me=typeof __VERSION__<"u"?__VERSION__:"untranspiled source",zs=k();function zn(e){try{let t=window[e],r="__storage_test__";return t.setItem(r,r),t.removeItem(r),t}catch{return null}}var Ve=class{constructor(t,r){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"sessionStorage";T(this,"storage",void 0),T(this,"id",void 0),T(this,"config",void 0),this.storage=zn(n),this.id=t,this.config=r,this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(t){if(Object.assign(this.config,t),this.storage){let r=JSON.stringify(this.config);this.storage.setItem(this.id,r)}}_loadConfiguration(){let t={};if(this.storage){let r=this.storage.getItem(this.id);t=r?JSON.parse(r):{}}return Object.assign(this.config,t),this}};function Kt(e){let t;return e<10?t="".concat(e.toFixed(2),"ms"):e<100?t="".concat(e.toFixed(1),"ms"):e<1e3?t="".concat(e.toFixed(0),"ms"):t="".concat((e/1e3).toFixed(2),"s"),t}function $t(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:8,r=Math.max(t-e.length,0);return"".concat(" ".repeat(r)).concat(e)}function Ue(e,t,r){let n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:600,o=e.src.replace(/\(/g,"%28").replace(/\)/g,"%29");e.width>n&&(r=Math.min(r,n/e.width));let i=e.width*r,s=e.height*r,a=["font-size:1px;","padding:".concat(Math.floor(s/2),"px ").concat(Math.floor(i/2),"px;"),"line-height:".concat(s,"px;"),"background:url(".concat(o,");"),"background-size:".concat(i,"px ").concat(s,"px;"),"color:transparent;"].join("");return["".concat(t," %c+"),a]}var Ne;(function(e){e[e.BLACK=30]="BLACK",e[e.RED=31]="RED",e[e.GREEN=32]="GREEN",e[e.YELLOW=33]="YELLOW",e[e.BLUE=34]="BLUE",e[e.MAGENTA=35]="MAGENTA",e[e.CYAN=36]="CYAN",e[e.WHITE=37]="WHITE",e[e.BRIGHT_BLACK=90]="BRIGHT_BLACK",e[e.BRIGHT_RED=91]="BRIGHT_RED",e[e.BRIGHT_GREEN=92]="BRIGHT_GREEN",e[e.BRIGHT_YELLOW=93]="BRIGHT_YELLOW",e[e.BRIGHT_BLUE=94]="BRIGHT_BLUE",e[e.BRIGHT_MAGENTA=95]="BRIGHT_MAGENTA",e[e.BRIGHT_CYAN=96]="BRIGHT_CYAN",e[e.BRIGHT_WHITE=97]="BRIGHT_WHITE"})(Ne||(Ne={}));var Gn=10;function Yt(e){return typeof e!="string"?e:(e=e.toUpperCase(),Ne[e]||Ne.WHITE)}function Xt(e,t,r){if(!k&&typeof e=="string"){if(t){let n=Yt(t);e="\x1B[".concat(n,"m").concat(e,"\x1B[39m")}if(r){let n=Yt(r);e="\x1B[".concat(n+Gn,"m").concat(e,"\x1B[49m")}}return e}function Qt(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:["constructor"],r=Object.getPrototypeOf(e),n=Object.getOwnPropertyNames(r),o=e;for(let i of n){let s=o[i];typeof s=="function"&&(t.find(a=>i===a)||(o[i]=s.bind(e)))}}function re(e,t){if(!e)throw new Error(t||"Assertion failed")}function W(){let e;if(k()&&te.performance){var t,r;e=te===null||te===void 0||(t=te.performance)===null||t===void 0||(r=t.now)===null||r===void 0?void 0:r.call(t)}else if("hrtime"in J){var n;let o=J===null||J===void 0||(n=J.hrtime)===null||n===void 0?void 0:n.call(J);e=o[0]*1e3+o[1]/1e6}else e=Date.now();return e}var ne={debug:k()&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},jn={enabled:!0,level:0};function D(){}var qt={},er={once:!0},Z=class{constructor(){let{id:t}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{id:""};T(this,"id",void 0),T(this,"VERSION",Me),T(this,"_startTs",W()),T(this,"_deltaTs",W()),T(this,"_storage",void 0),T(this,"userData",{}),T(this,"LOG_THROTTLE_TIMEOUT",0),this.id=t,this.userData={},this._storage=new Ve("__probe-".concat(this.id,"__"),jn),this.timeStamp("".concat(this.id," started")),Qt(this),Object.seal(this)}set level(t){this.setLevel(t)}get level(){return this.getLevel()}isEnabled(){return this._storage.config.enabled}getLevel(){return this._storage.config.level}getTotal(){return Number((W()-this._startTs).toPrecision(10))}getDelta(){return Number((W()-this._deltaTs).toPrecision(10))}set priority(t){this.level=t}get priority(){return this.level}getPriority(){return this.level}enable(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return this._storage.setConfiguration({enabled:t}),this}setLevel(t){return this._storage.setConfiguration({level:t}),this}get(t){return this._storage.config[t]}set(t,r){this._storage.setConfiguration({[t]:r})}settings(){console.table?console.table(this._storage.config):console.log(this._storage.config)}assert(t,r){re(t,r)}warn(t){return this._getLogFunction(0,t,ne.warn,arguments,er)}error(t){return this._getLogFunction(0,t,ne.error,arguments)}deprecated(t,r){return this.warn("`".concat(t,"` is deprecated and will be removed in a later version. Use `").concat(r,"` instead"))}removed(t,r){return this.error("`".concat(t,"` has been removed. Use `").concat(r,"` instead"))}probe(t,r){return this._getLogFunction(t,r,ne.log,arguments,{time:!0,once:!0})}log(t,r){return this._getLogFunction(t,r,ne.debug,arguments)}info(t,r){return this._getLogFunction(t,r,console.info,arguments)}once(t,r){return this._getLogFunction(t,r,ne.debug||ne.info,arguments,er)}table(t,r,n){return r?this._getLogFunction(t,r,console.table||D,n&&[n],{tag:Jn(r)}):D}image(t){let{logLevel:r,priority:n,image:o,message:i="",scale:s=1}=t;return this._shouldLog(r||n)?k()?Zn({image:o,message:i,scale:s}):Hn({image:o,message:i,scale:s}):D}time(t,r){return this._getLogFunction(t,r,console.time?console.time:console.info)}timeEnd(t,r){return this._getLogFunction(t,r,console.timeEnd?console.timeEnd:console.info)}timeStamp(t,r){return this._getLogFunction(t,r,console.timeStamp||D)}group(t,r){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{collapsed:!1},o=tr({logLevel:t,message:r,opts:n}),{collapsed:i}=n;return o.method=(i?console.groupCollapsed:console.group)||console.info,this._getLogFunction(o)}groupCollapsed(t,r){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.group(t,r,Object.assign({},n,{collapsed:!0}))}groupEnd(t){return this._getLogFunction(t,"",console.groupEnd||D)}withGroup(t,r,n){this.group(t,r)();try{n()}finally{this.groupEnd(t)()}}trace(){console.trace&&console.trace()}_shouldLog(t){return this.isEnabled()&&this.getLevel()>=rr(t)}_getLogFunction(t,r,n,o,i){if(this._shouldLog(t)){i=tr({logLevel:t,message:r,args:o,opts:i}),n=n||i.method,re(n),i.total=this.getTotal(),i.delta=this.getDelta(),this._deltaTs=W();let s=i.tag||i.message;if(i.once&&s)if(!qt[s])qt[s]=W();else return D;return r=Rn(this.id,i.message,i),n.bind(console,r,...i.args)}return D}};T(Z,"VERSION",Me);function rr(e){if(!e)return 0;let t;switch(typeof e){case"number":t=e;break;case"object":t=e.logLevel||e.priority||0;break;default:return 0}return re(Number.isFinite(t)&&t>=0),t}function tr(e){let{logLevel:t,message:r}=e;e.logLevel=rr(t);let n=e.args?Array.from(e.args):[];for(;n.length&&n.shift()!==r;);switch(typeof t){case"string":case"function":r!==void 0&&n.unshift(r),e.message=t;break;case"object":Object.assign(e,t);break;default:}typeof e.message=="function"&&(e.message=e.message());let o=typeof e.message;return re(o==="string"||o==="object"),Object.assign(e,{args:n},e.opts)}function Rn(e,t,r){if(typeof t=="string"){let n=r.time?$t(Kt(r.total)):"";t=r.time?"".concat(e,": ").concat(n," ").concat(t):"".concat(e,": ").concat(t),t=Xt(t,r.color,r.background)}return t}function Hn(e){let{image:t,message:r="",scale:n=1}=e;return console.warn("removed"),D}function Zn(e){let{image:t,message:r="",scale:n=1}=e;if(typeof t=="string"){let i=new Image;return i.onload=()=>{let s=Ue(i,r,n);console.log(...s)},i.src=t,D}let o=t.nodeName||"";if(o.toLowerCase()==="img")return console.log(...Ue(t,r,n)),D;if(o.toLowerCase()==="canvas"){let i=new Image;return i.onload=()=>console.log(...Ue(i,r,n)),i.src=t.toDataURL(),D}return D}function Jn(e){for(let t in e)for(let r in e[t])return r||"untitled";return"empty"}var da=new Z({id:"@probe.gl/log"});var ot="4.3.0-alpha.4",Wn=ot[0]>="0"&&ot[0]<="9"?`v${ot}`:"";function Kn(){let e=new Z({id:"loaders.gl"});return globalThis.loaders=globalThis.loaders||{},globalThis.loaders.log=e,globalThis.loaders.version=Wn,globalThis.probe=globalThis.probe||{},globalThis.probe.loaders=e,e}var it=Kn();var $n="",nr={};function st(e){for(let t in nr)if(e.startsWith(t)){let r=nr[t];e=e.replace(t,r)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${$n}${e}`),e}var de=class{handle;size;bigsize;url;constructor(t){this.handle=t instanceof ArrayBuffer?new Blob([t]):t,this.size=t instanceof ArrayBuffer?t.byteLength:t.size,this.bigsize=BigInt(this.size),this.url=t instanceof File?t.name:""}async close(){}async stat(){return{size:this.handle.size,bigsize:BigInt(this.handle.size),isDirectory:!1}}async read(t,r){return await this.handle.slice(t,t+r).arrayBuffer()}};var pe=class{fetch;loadOptions;_needsRefresh=!0;props;constructor(t){this.props={...t},this.loadOptions={...t.loadOptions},this.fetch=Yn(this.loadOptions)}setProps(t){this.props=Object.assign(this.props,t),this.setNeedsRefresh()}setNeedsRefresh(){this._needsRefresh=!0}getNeedsRefresh(t=!0){let r=this._needsRefresh;return t&&(this._needsRefresh=!1),r}};function Yn(e){let t=e?.fetch;if(t&&typeof t=="function")return(n,o)=>t(n,o);let r=e?.fetch;return r&&typeof r!="function"?n=>fetch(n,r):n=>fetch(n)}var or="4.3.0-alpha.4";var Xn=globalThis.loaders?.parseImageNode,at=typeof Image<"u",lt=typeof ImageBitmap<"u",Qn=Boolean(Xn),ct=et?!0:Qn;function ir(e){switch(e){case"auto":return lt||at||ct;case"imagebitmap":return lt;case"image":return at;case"data":return ct;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function sr(){if(lt)return"imagebitmap";if(at)return"image";if(ct)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function qn(e){let t=eo(e);if(!t)throw new Error("Not an image");return t}function ar(e){switch(qn(e)){case"data":return e;case"image":case"imagebitmap":let t=document.createElement("canvas"),r=t.getContext("2d");if(!r)throw new Error("getImageData");return t.width=e.width,t.height=e.height,r.drawImage(e,0,0),r.getImageData(0,0,e.width,e.height);default:throw new Error("getImageData")}}function eo(e){return typeof ImageBitmap<"u"&&e instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&e instanceof Image?"image":e&&typeof e=="object"&&e.data&&e.width&&e.height?"data":null}var to=/^data:image\/svg\+xml/,ro=/\.svg((\?|#).*)?$/;function ke(e){return e&&(to.test(e)||ro.test(e))}function lr(e,t){if(ke(t)){let n=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(n=unescape(encodeURIComponent(n)))}catch(i){throw new Error(i.message)}return`data:image/svg+xml;base64,${btoa(n)}`}return ft(e,t)}function ft(e,t){if(ke(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}async function Ce(e,t,r){let n=lr(e,r),o=self.URL||self.webkitURL,i=typeof n!="string"&&o.createObjectURL(n);try{return await no(i||n,t)}finally{i&&o.revokeObjectURL(i)}}async function no(e,t){let r=new Image;return r.src=e,t.image&&t.image.decode&&r.decode?(await r.decode(),r):await new Promise((n,o)=>{try{r.onload=()=>n(r),r.onerror=i=>{let s=i instanceof Error?i.message:"error";o(new Error(s))}}catch(i){o(i)}})}var oo={},cr=!0;async function fr(e,t,r){let n;ke(r)?n=await Ce(e,t,r):n=ft(e,r);let o=t&&t.imagebitmap;return await io(n,o)}async function io(e,t=null){if((so(t)||!cr)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(r){console.warn(r),cr=!1}return await createImageBitmap(e)}function so(e){for(let t in e||oo)return!1;return!0}function ur(e){return!fo(e,"ftyp",4)||!(e[8]&96)?null:ao(e)}function ao(e){switch(lo(e,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function lo(e,t,r){return String.fromCharCode(...e.slice(t,r))}function co(e){return[...e].map(t=>t.charCodeAt(0))}function fo(e,t,r=0){let n=co(t);for(let o=0;o<n.length;++o)if(n[o]!==e[o+r])return!1;return!0}var G=!1,ge=!0;function Oe(e){let t=me(e);return ho(t)||mo(t)||po(t)||go(t)||uo(t)}function uo(e){let t=new Uint8Array(e instanceof DataView?e.buffer:e),r=ur(t);return r?{mimeType:r.mimeType,width:0,height:0}:null}function ho(e){let t=me(e);return t.byteLength>=24&&t.getUint32(0,G)===2303741511?{mimeType:"image/png",width:t.getUint32(16,G),height:t.getUint32(20,G)}:null}function po(e){let t=me(e);return t.byteLength>=10&&t.getUint32(0,G)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,ge),height:t.getUint16(8,ge)}:null}function go(e){let t=me(e);return t.byteLength>=14&&t.getUint16(0,G)===16973&&t.getUint32(2,ge)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,ge),height:t.getUint32(22,ge)}:null}function mo(e){let t=me(e);if(!(t.byteLength>=3&&t.getUint16(0,G)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:n,sofMarkers:o}=yo(),i=2;for(;i+9<t.byteLength;){let s=t.getUint16(i,G);if(o.has(s))return{mimeType:"image/jpeg",height:t.getUint16(i+5,G),width:t.getUint16(i+7,G)};if(!n.has(s))return null;i+=2,i+=t.getUint16(i,G)}return null}function yo(){let e=new Set([65499,65476,65484,65501,65534]);for(let r=65504;r<65520;++r)e.add(r);return{tableMarkers:e,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function me(e){if(e instanceof DataView)return e;if(ArrayBuffer.isView(e))return new DataView(e.buffer);if(e instanceof ArrayBuffer)return new DataView(e);throw new Error("toDataView")}async function hr(e,t){let{mimeType:r}=Oe(e)||{},n=globalThis.loaders?.parseImageNode;return he(n),await n(e,r)}async function dr(e,t,r){t=t||{};let o=(t.image||{}).type||"auto",{url:i}=r||{},s=xo(o),a;switch(s){case"imagebitmap":a=await fr(e,t,i);break;case"image":a=await Ce(e,t,i);break;case"data":a=await hr(e,t);break;default:he(!1)}return o==="data"&&(a=ar(a)),a}function xo(e){switch(e){case"auto":case"data":return sr();default:return ir(e),e}}var wo=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],vo=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],To={image:{type:"auto",decode:!0}},ut={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:or,mimeTypes:vo,extensions:wo,parse:dr,tests:[e=>Boolean(Oe(new DataView(e)))],options:To};function pr(e){let t=[];if(e.fields)for(let r of e.fields)t.push({name:r.name,type:Io(r),metadata:Fo(r)});return{metadata:Po(e),fields:t}}function Po(e){let t={};for(let[r,n]of Object.entries(e))r!=="fields"&&n&&(t[r]=JSON.stringify(n));return t}function Io(e){switch(e.type.toLowerCase()){case"float32":return"float32";case"number":case"float64":return"float64";case"string":case"utf8":return"utf8";case"boolean":return"bool";default:return"null"}}function Fo(e){let t={};for(let[r,n]of Object.entries(e))r!=="name"&&n&&(t[r]=JSON.stringify(n));return t}var xr=e=>e!==null&&typeof e=="object";function ht(e,t){if(!e||!xr(e))return null;let r={name:e.name||"",description:e.description||""};if(typeof e.generator=="string"&&(r.generator=e.generator),typeof e.generator_options=="string"&&(r.generatorOptions=e.generator_options),r.boundingBox=gr(e.bounds)||gr(e.antimeridian_adjusted_bounds),r.center=Ao(e.center),r.maxZoom=mr(e.maxzoom),r.minZoom=mr(e.minzoom),typeof e?.json=="string")try{r.metaJson=JSON.parse(e.json)}catch(a){console.warn("Failed to parse tilejson.json field",a)}let n=e.tilestats||r.metaJson?.tilestats,o=Eo(n,t),i=bo(e.vector_layers),s=_o(i,o);return r={...r,layers:s},r.maxZoom===null&&s.length>0&&(r.maxZoom=s[0].maxZoom||null),r.minZoom===null&&s.length>0&&(r.minZoom=s[0].minZoom||null),r}function bo(e){return Array.isArray(e)?e.map(t=>So(t)):[]}function So(e){let t=Object.entries(e.fields||[]).map(([n,o])=>({name:n,...Pr(String(o))})),r={...e};return delete r.fields,{name:e.id||"",...r,fields:t}}function Eo(e,t){return xr(e)&&Array.isArray(e.layers)?e.layers.map(r=>Bo(r,t)):[]}function Bo(e,t){let r=[],n={},o=e.attributes||[];for(let i of o){let s=i.attribute;if(typeof s=="string")if(s.split("|").length>1){let a=s.split("|")[0];n[a]=n[a]||[],n[a].push(i),console.warn("ignoring tilestats indexed field",a)}else r[s]||r.push(Lo(i,t))}return{name:e.layer||"",dominantGeometry:e.geometry,fields:r}}function _o(e,t){return e.map(r=>{let n=t.find(s=>s.name===r.name),o=n?.fields||r.fields||[],i={...r,...n,fields:o};return i.schema=pr(i),i})}function gr(e){let t=Tr(e);if(Array.isArray(t)&&t.length===4&&[t[0],t[2]].every(vr)&&[t[1],t[3]].every(wr))return[[t[0],t[1]],[t[2],t[3]]]}function Ao(e){let t=Tr(e);return Array.isArray(t)&&t.length===3&&vr(t[0])&&wr(t[1])&&Do(t[2])?t:null}function mr(e){let t=typeof e=="string"?parseFloat(e):typeof e=="number"?e:null;return t===null||isNaN(t)?null:t}function wr(e){return Number.isFinite(e)&&e<=90&&e>=-90}function vr(e){return Number.isFinite(e)&&e<=180&&e>=-180}function Do(e){return Number.isFinite(e)&&e>=0&&e<=22}function Tr(e){return typeof e=="string"?e.split(",").map(parseFloat):Array.isArray(e)?e:null}var yr={number:{type:"float32"},numeric:{type:"float32"},string:{type:"utf8"},vachar:{type:"utf8"},float:{type:"float32"},int:{type:"int32"},int4:{type:"int32"},boolean:{type:"boolean"},bool:{type:"boolean"}};function Lo(e={},t){let r=Pr(e.type),n={name:e.attribute,...r};return typeof e.min=="number"&&(n.min=e.min),typeof e.max=="number"&&(n.max=e.max),typeof e.count=="number"&&(n.uniqueValueCount=e.count),e.values&&(n.values=e.values),n.values&&typeof t.maxValues=="number"&&(n.values=n.values?.slice(0,t.maxValues)),n}function Pr(e){let t=e.toLowerCase();return!t||yr[t],yr[t]||{type:"string"}}var Mo="4.3.0-alpha.4",ye={dataType:null,batchType:null,name:"TileJSON",id:"tilejson",module:"pmtiles",version:Mo,worker:!0,extensions:["json"],mimeTypes:["application/json"],text:!0,options:{tilejson:{maxValues:void 0}},parse:async(e,t)=>{let r=new TextDecoder().decode(e),n=JSON.parse(r),o={...ye.options.tilejson,...t?.tilejson};return ht(n,o)},parseTextSync:(e,t)=>{let r=JSON.parse(e),n={...ye.options.tilejson,...t?.tilejson};return ht(r,n)}};var xe={x:0,y:1,z:2};function K(e,t={}){let{start:r=0,end:n=e.length,plane:o="xy"}=t,i=t.size||2,s=0,a=xe[o[0]],l=xe[o[1]];for(let c=r,f=n-i;c<n;c+=i)s+=(e[c+a]-e[f+a])*(e[c+l]+e[f+l]),f=c;return s/2}function pt(e,t,r=2,n,o="xy"){let i=t&&t.length,s=i?t[0]*r:e.length,a=Fr(e,0,s,r,!0,n&&n[0],o),l=[];if(!a||a.next===a.prev)return l;let c,f,u,h,d,p,y;if(i&&(a=zo(e,t,a,r,n,o)),e.length>80*r){h=f=e[0],d=u=e[1];for(let I=r;I<s;I+=r)p=e[I],y=e[I+1],p<h&&(h=p),y<d&&(d=y),p>f&&(f=p),y>u&&(u=y);c=Math.max(f-h,u-d),c=c!==0?32767/c:0}return we(a,l,r,h,d,c,0),l}function Fr(e,t,r,n,o,i,s){let a,l;i===void 0&&(i=K(e,{start:t,end:r,size:n,plane:s}));let c=xe[s[0]],f=xe[s[1]];if(o===i<0)for(a=t;a<r;a+=n)l=Ir(a,e[a+c],e[a+f],l);else for(a=r-n;a>=t;a-=n)l=Ir(a,e[a+c],e[a+f],l);return l&&je(l,l.next)&&(Te(l),l=l.next),l}function $(e,t){if(!e)return e;t||(t=e);let r=e,n;do if(n=!1,!r.steiner&&(je(r,r.next)||P(r.prev,r,r.next)===0)){if(Te(r),r=t=r.prev,r===r.next)break;n=!0}else r=r.next;while(n||r!==t);return t}function we(e,t,r,n,o,i,s){if(!e)return;!s&&i&&Zo(e,n,o,i);let a=e,l,c;for(;e.prev!==e.next;){if(l=e.prev,c=e.next,i?ko(e,n,o,i):No(e)){t.push(l.i/r|0),t.push(e.i/r|0),t.push(c.i/r|0),Te(e),e=c.next,a=c.next;continue}if(e=c,e===a){s?s===1?(e=Co($(e),t,r),we(e,t,r,n,o,i,2)):s===2&&Oo(e,t,r,n,o,i):we($(e),t,r,n,o,i,1);break}}}function No(e){let t=e.prev,r=e,n=e.next;if(P(t,r,n)>=0)return!1;let o=t.x,i=r.x,s=n.x,a=t.y,l=r.y,c=n.y,f=o<i?o<s?o:s:i<s?i:s,u=a<l?a<c?a:c:l<c?l:c,h=o>i?o>s?o:s:i>s?i:s,d=a>l?a>c?a:c:l>c?l:c,p=n.next;for(;p!==t;){if(p.x>=f&&p.x<=h&&p.y>=u&&p.y<=d&&oe(o,a,i,l,s,c,p.x,p.y)&&P(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function ko(e,t,r,n){let o=e.prev,i=e,s=e.next;if(P(o,i,s)>=0)return!1;let a=o.x,l=i.x,c=s.x,f=o.y,u=i.y,h=s.y,d=a<l?a<c?a:c:l<c?l:c,p=f<u?f<h?f:h:u<h?u:h,y=a>l?a>c?a:c:l>c?l:c,I=f>u?f>h?f:h:u>h?u:h,V=dt(d,p,t,r,n),v=dt(y,I,t,r,n),m=e.prevZ,g=e.nextZ;for(;m&&m.z>=V&&g&&g.z<=v;){if(m.x>=d&&m.x<=y&&m.y>=p&&m.y<=I&&m!==o&&m!==s&&oe(a,f,l,u,c,h,m.x,m.y)&&P(m.prev,m,m.next)>=0||(m=m.prevZ,g.x>=d&&g.x<=y&&g.y>=p&&g.y<=I&&g!==o&&g!==s&&oe(a,f,l,u,c,h,g.x,g.y)&&P(g.prev,g,g.next)>=0))return!1;g=g.nextZ}for(;m&&m.z>=V;){if(m.x>=d&&m.x<=y&&m.y>=p&&m.y<=I&&m!==o&&m!==s&&oe(a,f,l,u,c,h,m.x,m.y)&&P(m.prev,m,m.next)>=0)return!1;m=m.prevZ}for(;g&&g.z<=v;){if(g.x>=d&&g.x<=y&&g.y>=p&&g.y<=I&&g!==o&&g!==s&&oe(a,f,l,u,c,h,g.x,g.y)&&P(g.prev,g,g.next)>=0)return!1;g=g.nextZ}return!0}function Co(e,t,r){let n=e;do{let o=n.prev,i=n.next.next;!je(o,i)&&br(o,n,n.next,i)&&ve(o,i)&&ve(i,o)&&(t.push(o.i/r|0),t.push(n.i/r|0),t.push(i.i/r|0),Te(n),Te(n.next),n=e=i),n=n.next}while(n!==e);return $(n)}function Oo(e,t,r,n,o,i){let s=e;do{let a=s.next.next;for(;a!==s.prev;){if(s.i!==a.i&&Ko(s,a)){let l=Sr(s,a);s=$(s,s.next),l=$(l,l.next),we(s,t,r,n,o,i,0),we(l,t,r,n,o,i,0);return}a=a.next}s=s.next}while(s!==e)}function zo(e,t,r,n,o,i){let s=[],a,l,c,f,u;for(a=0,l=t.length;a<l;a++)c=t[a]*n,f=a<l-1?t[a+1]*n:e.length,u=Fr(e,c,f,n,!1,o&&o[a+1],i),u===u.next&&(u.steiner=!0),s.push(Wo(u));for(s.sort(Go),a=0;a<s.length;a++)r=jo(s[a],r);return r}function Go(e,t){return e.x-t.x}function jo(e,t){let r=Ro(e,t);if(!r)return t;let n=Sr(r,e);return $(n,n.next),$(r,r.next)}function Ro(e,t){let r=t,n=e.x,o=e.y,i=-1/0,s;do{if(o<=r.y&&o>=r.next.y&&r.next.y!==r.y){let h=r.x+(o-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(h<=n&&h>i&&(i=h,s=r.x<r.next.x?r:r.next,h===n))return s}r=r.next}while(r!==t);if(!s)return null;let a=s,l=s.x,c=s.y,f=1/0,u;r=s;do n>=r.x&&r.x>=l&&n!==r.x&&oe(o<c?n:i,o,l,c,o<c?i:n,o,r.x,r.y)&&(u=Math.abs(o-r.y)/(n-r.x),ve(r,e)&&(u<f||u===f&&(r.x>s.x||r.x===s.x&&Ho(s,r)))&&(s=r,f=u)),r=r.next;while(r!==a);return s}function Ho(e,t){return P(e.prev,e,t.prev)<0&&P(t.next,e,e.next)<0}function Zo(e,t,r,n){let o=e;do o.z===0&&(o.z=dt(o.x,o.y,t,r,n)),o.prevZ=o.prev,o.nextZ=o.next,o=o.next;while(o!==e);o.prevZ.nextZ=null,o.prevZ=null,Jo(o)}function Jo(e){let t,r,n=1,o,i,s,a,l,c;do{for(i=e,e=null,c=null,o=0;i;){for(o++,a=i,s=0,r=0;r<n&&(s++,a=a.nextZ,!!a);r++);for(l=n;s>0||l>0&&a;)s!==0&&(l===0||!a||i.z<=a.z)?(t=i,i=i.nextZ,s--):(t=a,a=a.nextZ,l--),c?c.nextZ=t:e=t,t.prevZ=c,c=t;i=a}c.nextZ=null,n*=2}while(o>1);return e}function dt(e,t,r,n,o){return e=(e-r)*o|0,t=(t-n)*o|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function Wo(e){let t=e,r=e;do(t.x<r.x||t.x===r.x&&t.y<r.y)&&(r=t),t=t.next;while(t!==e);return r}function oe(e,t,r,n,o,i,s,a){return(o-s)*(t-a)>=(e-s)*(i-a)&&(e-s)*(n-a)>=(r-s)*(t-a)&&(r-s)*(i-a)>=(o-s)*(n-a)}function Ko(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!$o(e,t)&&(ve(e,t)&&ve(t,e)&&Yo(e,t)&&(P(e.prev,e,t.prev)||P(e,t.prev,t))||je(e,t)&&P(e.prev,e,e.next)>0&&P(t.prev,t,t.next)>0)}function P(e,t,r){return(t.y-e.y)*(r.x-t.x)-(t.x-e.x)*(r.y-t.y)}function je(e,t){return e.x===t.x&&e.y===t.y}function br(e,t,r,n){let o=Ge(P(e,t,r)),i=Ge(P(e,t,n)),s=Ge(P(r,n,e)),a=Ge(P(r,n,t));return!!(o!==i&&s!==a||o===0&&ze(e,r,t)||i===0&&ze(e,n,t)||s===0&&ze(r,e,n)||a===0&&ze(r,t,n))}function ze(e,t,r){return t.x<=Math.max(e.x,r.x)&&t.x>=Math.min(e.x,r.x)&&t.y<=Math.max(e.y,r.y)&&t.y>=Math.min(e.y,r.y)}function Ge(e){return e>0?1:e<0?-1:0}function $o(e,t){let r=e;do{if(r.i!==e.i&&r.next.i!==e.i&&r.i!==t.i&&r.next.i!==t.i&&br(r,r.next,e,t))return!0;r=r.next}while(r!==e);return!1}function ve(e,t){return P(e.prev,e,e.next)<0?P(e,t,e.next)>=0&&P(e,e.prev,t)>=0:P(e,t,e.prev)<0||P(e,e.next,t)<0}function Yo(e,t){let r=e,n=!1,o=(e.x+t.x)/2,i=(e.y+t.y)/2;do r.y>i!=r.next.y>i&&r.next.y!==r.y&&o<(r.next.x-r.x)*(i-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next;while(r!==e);return n}function Sr(e,t){let r=new Pe(e.i,e.x,e.y),n=new Pe(t.i,t.x,t.y),o=e.next,i=t.prev;return e.next=t,t.prev=e,r.next=o,o.prev=r,n.next=r,r.prev=n,i.next=n,n.prev=i,n}function Ir(e,t,r,n){let o=new Pe(e,t,r);return n?(o.next=n.next,o.prev=n,n.next.prev=o,n.next=o):(o.prev=o,o.next=o),o}function Te(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}var Pe=class{constructor(t,r,n){T(this,"i",void 0),T(this,"x",void 0),T(this,"y",void 0),T(this,"prev",null),T(this,"next",null),T(this,"z",0),T(this,"prevZ",null),T(this,"nextZ",null),T(this,"steiner",!1),this.i=t,this.x=r,this.y=n}};function yt(e,t,r){let n=ti(e),o=Object.keys(n).filter(i=>n[i]!==Array);return ri(e,{propArrayTypes:n,...t},{numericPropKeys:r&&r.numericPropKeys||o,PositionDataType:r?r.PositionDataType:Float32Array,triangulate:r?r.triangulate:!0})}function ti(e){let t={};for(let r of e)if(r.properties)for(let n in r.properties){let o=r.properties[n];t[n]=li(o,t[n])}return t}function ri(e,t,r){let{pointPositionsCount:n,pointFeaturesCount:o,linePositionsCount:i,linePathsCount:s,lineFeaturesCount:a,polygonPositionsCount:l,polygonObjectsCount:c,polygonRingsCount:f,polygonFeaturesCount:u,propArrayTypes:h,coordLength:d}=t,{numericPropKeys:p=[],PositionDataType:y=Float32Array,triangulate:I=!0}=r,V=e[0]&&"id"in e[0],v=e.length>65535?Uint32Array:Uint16Array,m={type:"Point",positions:new y(n*d),globalFeatureIds:new v(n),featureIds:o>65535?new Uint32Array(n):new Uint16Array(n),numericProps:{},properties:[],fields:[]},g={type:"LineString",pathIndices:i>65535?new Uint32Array(s+1):new Uint16Array(s+1),positions:new y(i*d),globalFeatureIds:new v(i),featureIds:a>65535?new Uint32Array(i):new Uint16Array(i),numericProps:{},properties:[],fields:[]},B={type:"Polygon",polygonIndices:l>65535?new Uint32Array(c+1):new Uint16Array(c+1),primitivePolygonIndices:l>65535?new Uint32Array(f+1):new Uint16Array(f+1),positions:new y(l*d),globalFeatureIds:new v(l),featureIds:u>65535?new Uint32Array(l):new Uint16Array(l),numericProps:{},properties:[],fields:[]};I&&(B.triangles=[]);for(let U of[m,g,B])for(let b of p){let _=h[b];U.numericProps[b]=new _(U.positions.length/d)}g.pathIndices[s]=i,B.polygonIndices[c]=l,B.primitivePolygonIndices[f]=l;let O={pointPosition:0,pointFeature:0,linePosition:0,linePath:0,lineFeature:0,polygonPosition:0,polygonObject:0,polygonRing:0,polygonFeature:0,feature:0};for(let U of e){let b=U.geometry,_=U.properties||{};switch(b.type){case"Point":ni(b,m,O,d,_),m.properties.push(mt(_,p)),V&&m.fields.push({id:U.id}),O.pointFeature++;break;case"LineString":oi(b,g,O,d,_),g.properties.push(mt(_,p)),V&&g.fields.push({id:U.id}),O.lineFeature++;break;case"Polygon":ii(b,B,O,d,_),B.properties.push(mt(_,p)),V&&B.fields.push({id:U.id}),O.polygonFeature++;break;default:throw new Error("Invalid geometry type")}O.feature++}return ai(m,g,B,d)}function ni(e,t,r,n,o){t.positions.set(e.data,r.pointPosition*n);let i=e.data.length/n;xt(t,o,r.pointPosition,i),t.globalFeatureIds.fill(r.feature,r.pointPosition,r.pointPosition+i),t.featureIds.fill(r.pointFeature,r.pointPosition,r.pointPosition+i),r.pointPosition+=i}function oi(e,t,r,n,o){t.positions.set(e.data,r.linePosition*n);let i=e.data.length/n;xt(t,o,r.linePosition,i),t.globalFeatureIds.fill(r.feature,r.linePosition,r.linePosition+i),t.featureIds.fill(r.lineFeature,r.linePosition,r.linePosition+i);for(let s=0,a=e.indices.length;s<a;++s){let l=e.indices[s],c=s===a-1?e.data.length:e.indices[s+1];t.pathIndices[r.linePath++]=r.linePosition,r.linePosition+=(c-l)/n}}function ii(e,t,r,n,o){t.positions.set(e.data,r.polygonPosition*n);let i=e.data.length/n;xt(t,o,r.polygonPosition,i),t.globalFeatureIds.fill(r.feature,r.polygonPosition,r.polygonPosition+i),t.featureIds.fill(r.polygonFeature,r.polygonPosition,r.polygonPosition+i);for(let s=0,a=e.indices.length;s<a;++s){let l=r.polygonPosition;t.polygonIndices[r.polygonObject++]=l;let c=e.areas[s],f=e.indices[s],u=e.indices[s+1];for(let d=0,p=f.length;d<p;++d){let y=f[d],I=d===p-1?u===void 0?e.data.length:u[0]:f[d+1];t.primitivePolygonIndices[r.polygonRing++]=r.polygonPosition,r.polygonPosition+=(I-y)/n}let h=r.polygonPosition;si(t,c,f,{startPosition:l,endPosition:h,coordLength:n})}}function si(e,t,r,{startPosition:n,endPosition:o,coordLength:i}){if(!e.triangles)return;let s=n*i,a=o*i,l=e.positions.subarray(s,a),c=r[0],f=r.slice(1).map(h=>(h-c)/i),u=pt(l,f,i,t);for(let h=0,d=u.length;h<d;++h)e.triangles.push(n+u[h])}function gt(e,t){let r={};for(let n in e)r[n]={value:e[n],size:t};return r}function ai(e,t,r,n){let o={shape:"binary-feature-collection",points:{...e,positions:{value:e.positions,size:n},globalFeatureIds:{value:e.globalFeatureIds,size:1},featureIds:{value:e.featureIds,size:1},numericProps:gt(e.numericProps,1)},lines:{...t,positions:{value:t.positions,size:n},pathIndices:{value:t.pathIndices,size:1},globalFeatureIds:{value:t.globalFeatureIds,size:1},featureIds:{value:t.featureIds,size:1},numericProps:gt(t.numericProps,1)},polygons:{...r,positions:{value:r.positions,size:n},polygonIndices:{value:r.polygonIndices,size:1},primitivePolygonIndices:{value:r.primitivePolygonIndices,size:1},globalFeatureIds:{value:r.globalFeatureIds,size:1},featureIds:{value:r.featureIds,size:1},numericProps:gt(r.numericProps,1)}};return o.polygons&&r.triangles&&(o.polygons.triangles={value:new Uint32Array(r.triangles),size:1}),o}function xt(e,t,r,n){for(let o in e.numericProps)if(o in t){let i=t[o];e.numericProps[o].fill(i,r,r+n)}}function mt(e,t){let r={};for(let n in e)t.includes(n)||(r[n]=e[n]);return r}function li(e,t){return t===Array||!Number.isFinite(e)?Array:t===Float64Array||Math.fround(e)!==e?Float64Array:Float32Array}var Ft=Rt(Ur(),1);function Si(e){let t=0;for(let r=0,n=e.length-1,o,i;r<e.length;n=r++)o=e[r],i=e[n],t+=(i[0]-o[0])*(o[1]+i[1]);return t}function Tt(e,t){if(Array.isArray(e[0])){for(let n of e)Tt(n,t);return}let r=e;r[0]/=t,r[1]/=t}function Nr(e,t){for(let r=0;r<e.length;++r)e[r]/=t}function Pt(e,t,r){if(typeof e[0][0]!="number"){for(let s of e)Pt(s,t,r);return}let n=r*Math.pow(2,t.z),o=r*t.x,i=r*t.y;for(let s=0;s<e.length;s++){let a=e[s];a[0]=(a[0]+o)*360/n-180;let l=180-(a[1]+i)*360/n;a[1]=360/Math.PI*Math.atan(Math.exp(l*Math.PI/180))-90}}function kr(e,t,r){let{x:n,y:o,z:i}=t,s=r*Math.pow(2,i),a=r*n,l=r*o;for(let c=0,f=e.length;c<f;c+=2){e[c]=(e[c]+a)*360/s-180;let u=180-(e[c+1]+l)*360/s;e[c+1]=360/Math.PI*Math.atan(Math.exp(u*Math.PI/180))-90}}function Cr(e){let t=e.length;if(t<=1)return[e];let r=[],n,o;for(let i=0;i<t;i++){let s=Si(e[i]);s!==0&&(o===void 0&&(o=s<0),o===s<0?(n&&r.push(n),n=[e[i]]):n&&n.push(e[i]))}return n&&r.push(n),r}function Or(e){let t=e.indices.length,r="Polygon";if(t<=1)return{type:r,data:e.data,areas:[[K(e.data)]],indices:[e.indices]};let n=[],o=[],i=[],s=[],a,l=0;for(let c,f=0,u;f<t;f++){u=e.indices[f]-l,c=e.indices[f+1]-l||e.data.length;let h=e.data.slice(u,c),d=K(h);if(d===0){let p=e.data.slice(0,u),y=e.data.slice(c);e.data=p.concat(y),l+=c-u;continue}a===void 0&&(a=d<0),a===d<0?(s.length&&(n.push(i),o.push(s)),s=[u],i=[d]):(i.push(d),s.push(u))}return i&&n.push(i),s.length&&o.push(s),{type:r,areas:n,indices:o,data:e.data}}var Y=class{properties;extent;type;id;_pbf;_geometry;_keys;_values;_geometryInfo;constructor(t,r,n,o,i,s){this.properties={},this.extent=n,this.type=0,this.id=null,this._pbf=t,this._geometry=-1,this._keys=o,this._values=i,this._geometryInfo=s,t.readFields(Ei,this,r)}toGeoJSONFeature(t,r){let n=this.loadGeometry();switch(t){case"wgs84":return zr(this,n,o=>Pt(o,r,this.extent));default:return zr(this,n,Tt)}}toBinaryFeature(t,r){let n=this.loadFlatGeometry();switch(t){case"wgs84":return this._toBinaryCoordinates(n,o=>kr(o,r,this.extent));default:return this._toBinaryCoordinates(n,Nr)}}bbox(){let t=this._pbf;t.pos=this._geometry;let r=t.readVarint()+t.pos,n=1,o=0,i=0,s=0,a=1/0,l=-1/0,c=1/0,f=-1/0;for(;t.pos<r;){if(o<=0){let u=t.readVarint();n=u&7,o=u>>3}if(o--,n===1||n===2)i+=t.readSVarint(),s+=t.readSVarint(),i<a&&(a=i),i>l&&(l=i),s<c&&(c=s),s>f&&(f=s);else if(n!==7)throw new Error(`unknown command ${n}`)}return[a,c,l,f]}_toBinaryCoordinates(t,r){let n;r(t.data,this.extent);let o=2;switch(this.type){case 1:this._geometryInfo.pointFeaturesCount++,this._geometryInfo.pointPositionsCount+=t.indices.length,n={type:"Point",...t};break;case 2:this._geometryInfo.lineFeaturesCount++,this._geometryInfo.linePathsCount+=t.indices.length,this._geometryInfo.linePositionsCount+=t.data.length/o,n={type:"LineString",...t};break;case 3:n=Or(t),this._geometryInfo.polygonFeaturesCount++,this._geometryInfo.polygonObjectsCount+=n.indices.length;for(let s of n.indices)this._geometryInfo.polygonRingsCount+=s.length;this._geometryInfo.polygonPositionsCount+=n.data.length/o;break;default:throw new Error(`Invalid geometry type: ${this.type}`)}let i={type:"Feature",geometry:n,properties:this.properties};return this.id!==null&&(i.id=this.id),i}loadGeometry(){let t=this._pbf;t.pos=this._geometry;let r=t.readVarint()+t.pos,n=1,o=0,i=0,s=0,a=[],l;for(;t.pos<r;){if(o<=0){let c=t.readVarint();n=c&7,o=c>>3}switch(o--,n){case 1:case 2:i+=t.readSVarint(),s+=t.readSVarint(),n===1&&(l&&a.push(l),l=[]),l&&l.push([i,s]);break;case 7:l&&l.push(l[0].slice());break;default:throw new Error(`unknown command ${n}`)}}return l&&a.push(l),a}loadFlatGeometry(){let t=this._pbf;t.pos=this._geometry;let r=t.readVarint()+t.pos,n=1,o,i=0,s=0,a=0,l=0,c=[],f=[];for(;t.pos<r;)if(i<=0&&(o=t.readVarint(),n=o&7,i=o>>3),i--,n===1||n===2)s+=t.readSVarint(),a+=t.readSVarint(),n===1&&c.push(l),f.push(s,a),l+=2;else if(n===7){if(l>0){let u=c[c.length-1];f.push(f[u],f[u+1]),l+=2}}else throw new Error(`unknown command ${n}`);return{data:f,indices:c}}};Ht(Y,"types",["Unknown","Point","LineString","Polygon"]);function zr(e,t,r){let n=Y.types[e.type],o,i,s;switch(e.type){case 1:let l=[];for(o=0;o<t.length;o++)l[o]=t[o][0];s=l,r(s,e.extent);break;case 2:for(s=t,o=0;o<s.length;o++)r(s[o],e.extent);break;case 3:for(s=Cr(t),o=0;o<s.length;o++)for(i=0;i<s[o].length;i++)r(s[o][i],e.extent);break;default:throw new Error("illegal vector tile type")}s.length===1?s=s[0]:n=`Multi${n}`;let a={type:"Feature",geometry:{type:n,coordinates:s},properties:e.properties};return e.id!==null&&(a.properties||={},a.properties.id=e.id),a}function Ei(e,t,r){t&&r&&(e===1?t.id=r.readVarint():e===2?Bi(r,t):e===3?t.type=r.readVarint():e===4&&(t._geometry=r.pos))}function Bi(e,t){let r=e.readVarint()+e.pos;for(;e.pos<r;){let n=t._keys[e.readVarint()],o=t._values[e.readVarint()];t.properties[n]=o}}var Ze=class{version;name;extent;length;_pbf;_keys;_values;_features;constructor(t,r){this.version=1,this.name="",this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(_i,this,r),this.length=this._features.length}getGeoJSONFeature(t){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];let r=this._pbf.readVarint()+this._pbf.pos;return new Y(this._pbf,r,this.extent,this._keys,this._values)}getBinaryFeature(t,r){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];let n=this._pbf.readVarint()+this._pbf.pos;return new Y(this._pbf,n,this.extent,this._keys,this._values,r)}};function _i(e,t,r){t&&r&&(e===15?t.version=r.readVarint():e===1?t.name=r.readString():e===5?t.extent=r.readVarint():e===2?t._features.push(r.pos):e===3?t._keys.push(r.readString()):e===4&&t._values.push(Ai(r)))}function Ai(e){let t=null,r=e.readVarint()+e.pos;for(;e.pos<r;){let n=e.readVarint()>>3;t=n===1?e.readString():n===2?e.readFloat():n===3?e.readDouble():n===4?e.readVarint64():n===5?e.readVarint():n===6?e.readSVarint():n===7?e.readBoolean():null}return t}var Ie=class{layers;constructor(t,r){this.layers=t.readFields(Di,{},r)}};function Di(e,t,r){if(e===3&&r){let n=new Ze(r,r.readVarint()+r.pos);n.length&&t&&(t[n.name]=n)}}function bt(e,t){let r=Mi(t),n=t?.gis?.format||t?.mvt?.shape||t?.shape;switch(n){case"columnar-table":return{shape:"columnar-table",data:It(e,r)};case"geojson-table":return{shape:"geojson-table",type:"FeatureCollection",features:Gr(e,r)};case"geojson":return Gr(e,r);case"binary-geometry":return It(e,r);case"binary":return It(e,r);default:throw new Error(n||"undefined shape")}}function It(e,t){let[r,n]=Li(e,t),o=yt(r,n);return o.byteLength=e.byteLength,o}function Li(e,t){let r=[],n={coordLength:2,pointPositionsCount:0,pointFeaturesCount:0,linePositionsCount:0,linePathsCount:0,lineFeaturesCount:0,polygonPositionsCount:0,polygonObjectsCount:0,polygonRingsCount:0,polygonFeaturesCount:0};if(e.byteLength<=0)return[r,n];let o=new Ie(new Ft.default(e));return(t&&Array.isArray(t.layers)?t.layers:Object.keys(o.layers)).forEach(s=>{let a=o.layers[s];if(a)for(let l=0;l<a.length;l++){let c=a.getBinaryFeature(l,n),f=Ui(c,t,s);r.push(f)}}),[r,n]}function Gr(e,t){if(e.byteLength<=0)return[];let r=[],n=new Ie(new Ft.default(e));return(Array.isArray(t.layers)?t.layers:Object.keys(n.layers)).forEach(i=>{let s=n.layers[i];if(s)for(let a=0;a<s.length;a++){let l=s.getGeoJSONFeature(a),c=Vi(l,t,i);r.push(c)}}),r}function Mi(e){if(!e?.mvt)throw new Error("mvt options required");if(e.mvt?.coordinates==="wgs84"&&!e.mvt.tileIndex)throw new Error("MVT Loader: WGS84 coordinates need tileIndex property");return e.gis&&it.warn('MVTLoader: "options.gis" is deprecated, use "options.mvt.shape" instead')(),e.mvt}function Vi(e,t,r){let n=e.toGeoJSONFeature(t.coordinates||"local",t.tileIndex);return t.layerProperty&&(n.properties||={},n.properties[t.layerProperty]=r),n}function Ui(e,t,r){let n=e.toBinaryFeature(t.coordinates||"local",t.tileIndex);return t.layerProperty&&n.properties&&(n.properties[t.layerProperty]=r),n}var Ni="4.3.0-alpha.4",jr={dataType:null,batchType:null,name:"Mapbox Vector Tile",id:"mvt",module:"mvt",version:Ni,extensions:["mvt","pbf"],mimeTypes:["application/vnd.mapbox-vector-tile","application/x-protobuf"],worker:!0,category:"geometry",options:{mvt:{shape:"geojson",coordinates:"local",layerProperty:"layerName",layers:void 0,tileIndex:void 0}}},St={...jr,parse:async(e,t)=>bt(e,t),parseSync:bt,binary:!0};var Ee={};jt(Ee,{Compression:()=>sn,EtagMismatch:()=>We,FetchSource:()=>cn,FileSource:()=>ms,PMTiles:()=>Dt,Protocol:()=>fs,ResolvedValueCache:()=>xs,SharedPromiseCache:()=>pn,TileType:()=>an,bytesToHeader:()=>fn,findTile:()=>ln,getUint64:()=>M,leafletRasterLayer:()=>ls,readVarint:()=>le,tileIdToZxy:()=>ps,zxyToTileId:()=>on});var X=Math.pow,F=(e,t,r)=>new Promise((n,o)=>{var i=l=>{try{a(r.next(l))}catch(c){o(c)}},s=l=>{try{a(r.throw(l))}catch(c){o(c)}},a=l=>l.done?n(l.value):Promise.resolve(l.value).then(i,s);a((r=r.apply(e,t)).next())}),E=Uint8Array,ce=Uint16Array,ki=Int32Array,Zr=new E([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Jr=new E([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Ci=new E([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wr=function(e,t){for(var r=new ce(31),n=0;n<31;++n)r[n]=t+=1<<e[n-1];for(var o=new ki(r[30]),n=1;n<30;++n)for(var i=r[n];i<r[n+1];++i)o[i]=i-r[n]<<5|n;return{b:r,r:o}},Kr=Wr(Zr,2),$r=Kr.b,Oi=Kr.r;$r[28]=258,Oi[258]=28;var Yr=Wr(Jr,0),zi=Yr.b,xc=Yr.r,_t=new ce(32768);for(w=0;w<32768;++w)R=(w&43690)>>1|(w&21845)<<1,R=(R&52428)>>2|(R&13107)<<2,R=(R&61680)>>4|(R&3855)<<4,_t[w]=((R&65280)>>8|(R&255)<<8)>>1;var R,w,be=function(e,t,r){for(var n=e.length,o=0,i=new ce(t);o<n;++o)e[o]&&++i[e[o]-1];var s=new ce(t);for(o=1;o<t;++o)s[o]=s[o-1]+i[o-1]<<1;var a;if(r){a=new ce(1<<t);var l=15-t;for(o=0;o<n;++o)if(e[o])for(var c=o<<4|e[o],f=t-e[o],u=s[e[o]-1]++<<f,h=u|(1<<f)-1;u<=h;++u)a[_t[u]>>l]=c}else for(a=new ce(n),o=0;o<n;++o)e[o]&&(a[o]=_t[s[e[o]-1]++]>>15-e[o]);return a},Se=new E(288);for(w=0;w<144;++w)Se[w]=8;var w;for(w=144;w<256;++w)Se[w]=9;var w;for(w=256;w<280;++w)Se[w]=7;var w;for(w=280;w<288;++w)Se[w]=8;var w,Xr=new E(32);for(w=0;w<32;++w)Xr[w]=5;var w,Gi=be(Se,9,1),ji=be(Xr,5,1),Et=function(e){for(var t=e[0],r=1;r<e.length;++r)e[r]>t&&(t=e[r]);return t},C=function(e,t,r){var n=t/8|0;return(e[n]|e[n+1]<<8)>>(t&7)&r},Bt=function(e,t){var r=t/8|0;return(e[r]|e[r+1]<<8|e[r+2]<<16)>>(t&7)},Ri=function(e){return(e+7)/8|0},Hi=function(e,t,r){(t==null||t<0)&&(t=0),(r==null||r>e.length)&&(r=e.length);var n=new E(r-t);return n.set(e.subarray(t,r)),n},Zi=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],S=function(e,t,r){var n=new Error(t||Zi[e]);if(n.code=e,Error.captureStackTrace&&Error.captureStackTrace(n,S),!r)throw n;return n},Lt=function(e,t,r,n){var o=e.length,i=n?n.length:0;if(!o||t.f&&!t.l)return r||new E(0);var s=!r||t.i!=2,a=t.i;r||(r=new E(o*3));var l=function(Ot){var zt=r.length;if(Ot>zt){var Gt=new E(Math.max(zt*2,Ot));Gt.set(r),r=Gt}},c=t.f||0,f=t.p||0,u=t.b||0,h=t.l,d=t.d,p=t.m,y=t.n,I=o*8;do{if(!h){c=C(e,f,1);var V=C(e,f+1,3);if(f+=3,V)if(V==1)h=Gi,d=ji,p=9,y=5;else if(V==2){var B=C(e,f,31)+257,O=C(e,f+10,15)+4,U=B+C(e,f+5,31)+1;f+=14;for(var b=new E(U),_=new E(19),A=0;A<O;++A)_[Ci[A]]=C(e,f+A*3,7);f+=O*3;for(var Vt=Et(_),vn=(1<<Vt)-1,Tn=be(_,Vt,1),A=0;A<U;){var Ut=Tn[C(e,f,vn)];f+=Ut&15;var v=Ut>>4;if(v<16)b[A++]=v;else{var q=0,Ae=0;for(v==16?(Ae=3+C(e,f,3),f+=2,q=b[A-1]):v==17?(Ae=3+C(e,f,7),f+=3):v==18&&(Ae=11+C(e,f,127),f+=7);Ae--;)b[A++]=q}}var Nt=b.subarray(0,B),N=b.subarray(B);p=Et(Nt),y=Et(N),h=be(Nt,p,1),d=be(N,y,1)}else S(1);else{var v=Ri(f)+4,m=e[v-4]|e[v-3]<<8,g=v+m;if(g>o){a&&S(0);break}s&&l(u+m),r.set(e.subarray(v,g),u),t.b=u+=m,t.p=f=g*8,t.f=c;continue}if(f>I){a&&S(0);break}}s&&l(u+131072);for(var Pn=(1<<p)-1,In=(1<<y)-1,$e=f;;$e=f){var q=h[Bt(e,f)&Pn],ee=q>>4;if(f+=q&15,f>I){a&&S(0);break}if(q||S(2),ee<256)r[u++]=ee;else if(ee==256){$e=f,h=null;break}else{var kt=ee-254;if(ee>264){var A=ee-257,fe=Zr[A];kt=C(e,f,(1<<fe)-1)+$r[A],f+=fe}var Ye=d[Bt(e,f)&In],Xe=Ye>>4;Ye||S(3),f+=Ye&15;var N=zi[Xe];if(Xe>3){var fe=Jr[Xe];N+=Bt(e,f)&(1<<fe)-1,f+=fe}if(f>I){a&&S(0);break}s&&l(u+131072);var Qe=u+kt;if(u<N){var Ct=i-N,Fn=Math.min(N,Qe);for(Ct+u<0&&S(3);u<Fn;++u)r[u]=n[Ct+u]}for(;u<Qe;u+=4)r[u]=r[u-N],r[u+1]=r[u+1-N],r[u+2]=r[u+2-N],r[u+3]=r[u+3-N];u=Qe}}t.l=h,t.p=$e,t.b=u,t.f=c,h&&(c=1,t.m=p,t.d=d,t.n=y)}while(!c);return u==r.length?r:Hi(r,0,u)},Ji=new E(0),Wi=function(e){(e[0]!=31||e[1]!=139||e[2]!=8)&&S(6,"invalid gzip data");var t=e[3],r=10;t&4&&(r+=(e[10]|e[11]<<8)+2);for(var n=(t>>3&1)+(t>>4&1);n>0;n-=!e[r++]);return r+(t&2)},Ki=function(e){var t=e.length;return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0},$i=function(e,t){return((e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31)&&S(6,"invalid zlib data"),(e[1]>>5&1)==+!t&&S(6,"invalid zlib data: "+(e[1]&32?"need":"unexpected")+" dictionary"),(e[1]>>3&4)+2};function Yi(e,t){return Lt(e,{i:2},t&&t.out,t&&t.dictionary)}function Xi(e,t){var r=Wi(e);return r+8>e.length&&S(6,"invalid gzip data"),Lt(e.subarray(r,-8),{i:2},t&&t.out||new E(Ki(e)),t&&t.dictionary)}function Qi(e,t){return Lt(e.subarray($i(e,t&&t.dictionary),-4),{i:2},t&&t.out,t&&t.dictionary)}function At(e,t){return e[0]==31&&e[1]==139&&e[2]==8?Xi(e,t):(e[0]&15)!=8||e[0]>>4>7||(e[0]<<8|e[1])%31?Yi(e,t):Qi(e,t)}var qi=typeof TextDecoder<"u"&&new TextDecoder,es=0;try{qi.decode(Ji,{stream:!0}),es=1}catch{}var Qr=(e,t)=>e*X(2,t),Fe=(e,t)=>Math.floor(e/X(2,t)),Je=(e,t)=>Qr(e.getUint16(t+1,!0),8)+e.getUint8(t),qr=(e,t)=>Qr(e.getUint32(t+2,!0),16)+e.getUint16(t,!0),ts=(e,t,r,n,o)=>{if(e!==n.getUint8(o))return e-n.getUint8(o);let i=Je(n,o+1);if(t!==i)return t-i;let s=Je(n,o+4);return r!==s?r-s:0},rs=(e,t,r,n)=>{let o=en(e,t|128,r,n);return o?{z:t,x:r,y:n,offset:o[0],length:o[1],isDir:!0}:null},Rr=(e,t,r,n)=>{let o=en(e,t,r,n);return o?{z:t,x:r,y:n,offset:o[0],length:o[1],isDir:!1}:null},en=(e,t,r,n)=>{let o=0,i=e.byteLength/17-1;for(;o<=i;){let s=i+o>>1,a=ts(t,r,n,e,s*17);if(a>0)o=s+1;else if(a<0)i=s-1;else return[qr(e,s*17+7),e.getUint32(s*17+13,!0)]}return null},ns=(e,t)=>e.isDir&&!t.isDir?1:!e.isDir&&t.isDir?-1:e.z!==t.z?e.z-t.z:e.x!==t.x?e.x-t.x:e.y-t.y,tn=(e,t)=>{let r=e.getUint8(t*17);return{z:r&127,x:Je(e,t*17+1),y:Je(e,t*17+4),offset:qr(e,t*17+7),length:e.getUint32(t*17+13,!0),isDir:r>>7===1}},Hr=e=>{let t=[],r=new DataView(e);for(let n=0;n<r.byteLength/17;n++)t.push(tn(r,n));return os(t)},os=e=>{e.sort(ns);let t=new ArrayBuffer(17*e.length),r=new Uint8Array(t);for(let n=0;n<e.length;n++){let o=e[n],i=o.z;o.isDir&&(i=i|128),r[n*17]=i,r[n*17+1]=o.x&255,r[n*17+2]=o.x>>8&255,r[n*17+3]=o.x>>16&255,r[n*17+4]=o.y&255,r[n*17+5]=o.y>>8&255,r[n*17+6]=o.y>>16&255,r[n*17+7]=o.offset&255,r[n*17+8]=Fe(o.offset,8)&255,r[n*17+9]=Fe(o.offset,16)&255,r[n*17+10]=Fe(o.offset,24)&255,r[n*17+11]=Fe(o.offset,32)&255,r[n*17+12]=Fe(o.offset,48)&255,r[n*17+13]=o.length&255,r[n*17+14]=o.length>>8&255,r[n*17+15]=o.length>>16&255,r[n*17+16]=o.length>>24&255}return t},is=(e,t)=>{if(e.byteLength<17)return null;let r=e.byteLength/17,n=tn(e,r-1);if(n.isDir){let o=n.z,i=t.z-o,s=Math.trunc(t.x/(1<<i)),a=Math.trunc(t.y/(1<<i));return{z:o,x:s,y:a}}return null};function ss(e){return F(this,null,function*(){let t=yield e.getBytes(0,512e3),r=new DataView(t.data),n=r.getUint32(4,!0),o=r.getUint16(8,!0),i=new TextDecoder("utf-8"),s=JSON.parse(i.decode(new DataView(t.data,10,n))),a=0;s.compression==="gzip"&&(a=2);let l=0;"minzoom"in s&&(l=+s.minzoom);let c=0;"maxzoom"in s&&(c=+s.maxzoom);let f=0,u=0,h=0,d=-180,p=-85,y=180,I=85;if(s.bounds){let v=s.bounds.split(",");d=+v[0],p=+v[1],y=+v[2],I=+v[3]}if(s.center){let v=s.center.split(",");f=+v[0],u=+v[1],h=+v[2]}return{specVersion:r.getUint16(2,!0),rootDirectoryOffset:10+n,rootDirectoryLength:o*17,jsonMetadataOffset:10,jsonMetadataLength:n,leafDirectoryOffset:0,leafDirectoryLength:void 0,tileDataOffset:0,tileDataLength:void 0,numAddressedTiles:0,numTileEntries:0,numTileContents:0,clustered:!1,internalCompression:1,tileCompression:a,tileType:1,minZoom:l,maxZoom:c,minLon:d,minLat:p,maxLon:y,maxLat:I,centerZoom:h,centerLon:f,centerLat:u,etag:t.etag}})}function as(e,t,r,n,o,i,s){return F(this,null,function*(){let a=yield r.getArrayBuffer(t,e.rootDirectoryOffset,e.rootDirectoryLength,e);e.specVersion===1&&(a=Hr(a));let l=Rr(new DataView(a),n,o,i);if(l){let u=(yield t.getBytes(l.offset,l.length,s)).data,h=new DataView(u);return h.getUint8(0)===31&&h.getUint8(1)===139&&(u=At(new Uint8Array(u))),{data:u}}let c=is(new DataView(a),{z:n,x:o,y:i});if(c){let f=rs(new DataView(a),c.z,c.x,c.y);if(f){let u=yield r.getArrayBuffer(t,f.offset,f.length,e);e.specVersion===1&&(u=Hr(u));let h=Rr(new DataView(u),n,o,i);if(h){let p=(yield t.getBytes(h.offset,h.length,s)).data,y=new DataView(p);return y.getUint8(0)===31&&y.getUint8(1)===139&&(p=At(new Uint8Array(p))),{data:p}}}}})}var rn={getHeader:ss,getZxy:as},ls=(e,t)=>{let r=!1,n="",o=L.GridLayer.extend({createTile:(i,s)=>{let a=document.createElement("img"),l=new AbortController,c=l.signal;return a.cancel=()=>{l.abort()},r||(e.getHeader().then(f=>{f.tileType===1?console.error("Error: archive contains MVT vector tiles, but leafletRasterLayer is for displaying raster tiles. See https://github.com/protomaps/PMTiles/tree/main/js for details."):f.tileType===2?n="image/png":f.tileType===3?n="image/jpeg":f.tileType===4?n="image/webp":f.tileType===5&&(n="image/avif")}),r=!0),e.getZxy(i.z,i.x,i.y,c).then(f=>{if(f){let u=new Blob([f.data],{type:n}),h=window.URL.createObjectURL(u);a.src=h,a.cancel=void 0,s(void 0,a)}}).catch(f=>{if(f.name!=="AbortError")throw f}),a},_removeTile:function(i){let s=this._tiles[i];s&&(s.el.cancel&&s.el.cancel(),s.el.width=0,s.el.height=0,s.el.deleted=!0,L.DomUtil.remove(s.el),delete this._tiles[i],this.fire("tileunload",{tile:s.el,coords:this._keyToTileCoords(i)}))}});return new o(t)},cs=e=>(t,r)=>{if(r instanceof AbortController)return e(t,r);let n=new AbortController;return e(t,n).then(o=>r(void 0,o.data,o.cacheControl||"",o.expires||""),o=>r(o)).catch(o=>r(o)),{cancel:()=>n.abort()}},fs=class{constructor(){this.tilev4=(e,t)=>F(this,null,function*(){if(e.type==="json"){let u=e.url.substr(10),h=this.tiles.get(u);h||(h=new Dt(u),this.tiles.set(u,h));let d=yield h.getHeader();return{data:{tiles:[`${e.url}/{z}/{x}/{y}`],minzoom:d.minZoom,maxzoom:d.maxZoom,bounds:[d.minLon,d.minLat,d.maxLon,d.maxLat]}}}let r=new RegExp(/pmtiles:\/\/(.+)\/(\d+)\/(\d+)\/(\d+)/),n=e.url.match(r);if(!n)throw new Error("Invalid PMTiles protocol URL");let o=n[1],i=this.tiles.get(o);i||(i=new Dt(o),this.tiles.set(o,i));let s=n[2],a=n[3],l=n[4],c=yield i.getHeader(),f=yield i?.getZxy(+s,+a,+l,t.signal);return f?{data:new Uint8Array(f.data),cacheControl:f.cacheControl,expires:f.expires}:c.tileType===1?{data:new Uint8Array}:{data:null}}),this.tile=cs(this.tilev4),this.tiles=new Map}add(e){this.tiles.set(e.source.getKey(),e)}get(e){return this.tiles.get(e)}};function ae(e,t){return(t>>>0)*4294967296+(e>>>0)}function us(e,t){let r=t.buf,n=r[t.pos++],o=(n&112)>>4;if(n<128||(n=r[t.pos++],o|=(n&127)<<3,n<128)||(n=r[t.pos++],o|=(n&127)<<10,n<128)||(n=r[t.pos++],o|=(n&127)<<17,n<128)||(n=r[t.pos++],o|=(n&127)<<24,n<128)||(n=r[t.pos++],o|=(n&1)<<31,n<128))return ae(e,o);throw new Error("Expected varint not more than 10 bytes")}function le(e){let t=e.buf,r=t[e.pos++],n=r&127;return r<128||(r=t[e.pos++],n|=(r&127)<<7,r<128)||(r=t[e.pos++],n|=(r&127)<<14,r<128)||(r=t[e.pos++],n|=(r&127)<<21,r<128)?n:(r=t[e.pos],n|=(r&15)<<28,us(n,e))}function nn(e,t,r,n){if(n===0){r===1&&(t[0]=e-1-t[0],t[1]=e-1-t[1]);let o=t[0];t[0]=t[1],t[1]=o}}function hs(e,t){let r=X(2,e),n=t,o=t,i=t,s=[0,0],a=1;for(;a<r;)n=1&i/2,o=1&(i^n),nn(a,s,n,o),s[0]+=a*n,s[1]+=a*o,i=i/4,a*=2;return[e,s[0],s[1]]}var ds=[0,1,5,21,85,341,1365,5461,21845,87381,349525,1398101,5592405,22369621,89478485,357913941,1431655765,5726623061,22906492245,91625968981,366503875925,1466015503701,5864062014805,23456248059221,93824992236885,375299968947541,0x5555555555555];function on(e,t,r){if(e>26)throw Error("Tile zoom level exceeds max safe number limit (26)");if(t>X(2,e)-1||r>X(2,e)-1)throw Error("tile x/y outside zoom level bounds");let n=ds[e],o=X(2,e),i=0,s=0,a=0,l=[t,r],c=o/2;for(;c>0;)i=(l[0]&c)>0?1:0,s=(l[1]&c)>0?1:0,a+=c*c*(3*i^s),nn(c,l,i,s),c=c/2;return n+a}function ps(e){let t=0,r=0;for(let n=0;n<27;n++){let o=(1<<n)*(1<<n);if(t+o>e)return hs(n,e-t);t+=o}throw Error("Tile zoom level exceeds max safe number limit (26)")}var sn=(e=>(e[e.Unknown=0]="Unknown",e[e.None=1]="None",e[e.Gzip=2]="Gzip",e[e.Brotli=3]="Brotli",e[e.Zstd=4]="Zstd",e))(sn||{});function Mt(e,t){return F(this,null,function*(){if(t===1||t===0)return e;if(t===2){if(typeof globalThis.DecompressionStream>"u")return At(new Uint8Array(e));let r=new Response(e).body;if(!r)throw Error("Failed to read response stream");let n=r.pipeThrough(new globalThis.DecompressionStream("gzip"));return new Response(n).arrayBuffer()}throw Error("Compression method not supported")})}var an=(e=>(e[e.Unknown=0]="Unknown",e[e.Mvt=1]="Mvt",e[e.Png=2]="Png",e[e.Jpeg=3]="Jpeg",e[e.Webp=4]="Webp",e[e.Avif=5]="Avif",e))(an||{}),gs=127;function ln(e,t){let r=0,n=e.length-1;for(;r<=n;){let o=n+r>>1,i=t-e[o].tileId;if(i>0)r=o+1;else if(i<0)n=o-1;else return e[o]}return n>=0&&(e[n].runLength===0||t-e[n].tileId<e[n].runLength)?e[n]:null}var ms=class{constructor(e){this.file=e}getKey(){return this.file.name}getBytes(e,t){return F(this,null,function*(){return{data:yield this.file.slice(e,e+t).arrayBuffer()}})}},cn=class{constructor(e,t=new Headers){this.url=e,this.customHeaders=t,this.mustReload=!1}getKey(){return this.url}setHeaders(e){this.customHeaders=e}getBytes(e,t,r,n){return F(this,null,function*(){let o,i;r?i=r:(o=new AbortController,i=o.signal);let s=new Headers(this.customHeaders);s.set("range",`bytes=${e}-${e+t-1}`);let a;this.mustReload&&(a="reload");let l=yield fetch(this.url,{signal:i,cache:a,headers:s});if(e===0&&l.status===416){let h=l.headers.get("Content-Range");if(!h||!h.startsWith("bytes */"))throw Error("Missing content-length on 416 response");let d=+h.substr(8);l=yield fetch(this.url,{signal:i,cache:"reload",headers:{range:`bytes=0-${d-1}`}})}let c=l.headers.get("Etag");if(c?.startsWith("W/")&&(c=null),l.status===416||n&&c&&c!==n)throw this.mustReload=!0,new We(n);if(l.status>=300)throw Error(`Bad response code: ${l.status}`);let f=l.headers.get("Content-Length");if(l.status===200&&(!f||+f>t))throw o&&o.abort(),Error("Server returned no content-length header or content-length exceeding request. Check that your storage backend supports HTTP Byte Serving.");return{data:yield l.arrayBuffer(),etag:c||void 0,cacheControl:l.headers.get("Cache-Control")||void 0,expires:l.headers.get("Expires")||void 0}})}};function M(e,t){let r=e.getUint32(t+4,!0),n=e.getUint32(t+0,!0);return r*X(2,32)+n}function fn(e,t){let r=new DataView(e),n=r.getUint8(7);if(n>3)throw Error(`Archive is spec version ${n} but this library supports up to spec version 3`);return{specVersion:n,rootDirectoryOffset:M(r,8),rootDirectoryLength:M(r,16),jsonMetadataOffset:M(r,24),jsonMetadataLength:M(r,32),leafDirectoryOffset:M(r,40),leafDirectoryLength:M(r,48),tileDataOffset:M(r,56),tileDataLength:M(r,64),numAddressedTiles:M(r,72),numTileEntries:M(r,80),numTileContents:M(r,88),clustered:r.getUint8(96)===1,internalCompression:r.getUint8(97),tileCompression:r.getUint8(98),tileType:r.getUint8(99),minZoom:r.getUint8(100),maxZoom:r.getUint8(101),minLon:r.getInt32(102,!0)/1e7,minLat:r.getInt32(106,!0)/1e7,maxLon:r.getInt32(110,!0)/1e7,maxLat:r.getInt32(114,!0)/1e7,centerZoom:r.getUint8(118),centerLon:r.getInt32(119,!0)/1e7,centerLat:r.getInt32(123,!0)/1e7,etag:t}}function un(e){let t={buf:new Uint8Array(e),pos:0},r=le(t),n=[],o=0;for(let i=0;i<r;i++){let s=le(t);n.push({tileId:o+s,offset:0,length:0,runLength:1}),o+=s}for(let i=0;i<r;i++)n[i].runLength=le(t);for(let i=0;i<r;i++)n[i].length=le(t);for(let i=0;i<r;i++){let s=le(t);s===0&&i>0?n[i].offset=n[i-1].offset+n[i-1].length:n[i].offset=s-1}return n}function ys(e){let t=new DataView(e);return t.getUint16(2,!0)===2?(console.warn("PMTiles spec version 2 has been deprecated; please see github.com/protomaps/PMTiles for tools to upgrade"),2):t.getUint16(2,!0)===1?(console.warn("PMTiles spec version 1 has been deprecated; please see github.com/protomaps/PMTiles for tools to upgrade"),1):3}var We=class extends Error{};function hn(e,t){return F(this,null,function*(){let r=yield e.getBytes(0,16384);if(new DataView(r.data).getUint16(0,!0)!==19792)throw new Error("Wrong magic number for PMTiles archive");if(ys(r.data)<3)return[yield rn.getHeader(e)];let o=r.data.slice(0,gs),i=fn(o,r.etag),s=r.data.slice(i.rootDirectoryOffset,i.rootDirectoryOffset+i.rootDirectoryLength),a=`${e.getKey()}|${i.etag||""}|${i.rootDirectoryOffset}|${i.rootDirectoryLength}`,l=un(yield t(s,i.internalCompression));return[i,[a,l.length,l]]})}function dn(e,t,r,n,o){return F(this,null,function*(){let i=yield e.getBytes(r,n,void 0,o.etag),s=yield t(i.data,o.internalCompression),a=un(s);if(a.length===0)throw new Error("Empty directory is invalid");return a})}var xs=class{constructor(e=100,t=!0,r=Mt){this.cache=new Map,this.maxCacheEntries=e,this.counter=1,this.decompress=r}getHeader(e){return F(this,null,function*(){let t=e.getKey(),r=this.cache.get(t);if(r)return r.lastUsed=this.counter++,r.data;let n=yield hn(e,this.decompress);return n[1]&&this.cache.set(n[1][0],{lastUsed:this.counter++,data:n[1][2]}),this.cache.set(t,{lastUsed:this.counter++,data:n[0]}),this.prune(),n[0]})}getDirectory(e,t,r,n){return F(this,null,function*(){let o=`${e.getKey()}|${n.etag||""}|${t}|${r}`,i=this.cache.get(o);if(i)return i.lastUsed=this.counter++,i.data;let s=yield dn(e,this.decompress,t,r,n);return this.cache.set(o,{lastUsed:this.counter++,data:s}),this.prune(),s})}getArrayBuffer(e,t,r,n){return F(this,null,function*(){let o=`${e.getKey()}|${n.etag||""}|${t}|${r}`,i=this.cache.get(o);if(i)return i.lastUsed=this.counter++,yield i.data;let s=yield e.getBytes(t,r,void 0,n.etag);return this.cache.set(o,{lastUsed:this.counter++,data:s.data}),this.prune(),s.data})}prune(){if(this.cache.size>this.maxCacheEntries){let e=1/0,t;this.cache.forEach((r,n)=>{r.lastUsed<e&&(e=r.lastUsed,t=n)}),t&&this.cache.delete(t)}}invalidate(e){return F(this,null,function*(){this.cache.delete(e.getKey())})}},pn=class{constructor(e=100,t=!0,r=Mt){this.cache=new Map,this.invalidations=new Map,this.maxCacheEntries=e,this.counter=1,this.decompress=r}getHeader(e){return F(this,null,function*(){let t=e.getKey(),r=this.cache.get(t);if(r)return r.lastUsed=this.counter++,yield r.data;let n=new Promise((o,i)=>{hn(e,this.decompress).then(s=>{s[1]&&this.cache.set(s[1][0],{lastUsed:this.counter++,data:Promise.resolve(s[1][2])}),o(s[0]),this.prune()}).catch(s=>{i(s)})});return this.cache.set(t,{lastUsed:this.counter++,data:n}),n})}getDirectory(e,t,r,n){return F(this,null,function*(){let o=`${e.getKey()}|${n.etag||""}|${t}|${r}`,i=this.cache.get(o);if(i)return i.lastUsed=this.counter++,yield i.data;let s=new Promise((a,l)=>{dn(e,this.decompress,t,r,n).then(c=>{a(c),this.prune()}).catch(c=>{l(c)})});return this.cache.set(o,{lastUsed:this.counter++,data:s}),s})}getArrayBuffer(e,t,r,n){return F(this,null,function*(){let o=`${e.getKey()}|${n.etag||""}|${t}|${r}`,i=this.cache.get(o);if(i)return i.lastUsed=this.counter++,yield i.data;let s=new Promise((a,l)=>{e.getBytes(t,r,void 0,n.etag).then(c=>{a(c.data),this.cache.has(o),this.prune()}).catch(c=>{l(c)})});return this.cache.set(o,{lastUsed:this.counter++,data:s}),s})}prune(){if(this.cache.size>=this.maxCacheEntries){let e=1/0,t;this.cache.forEach((r,n)=>{r.lastUsed<e&&(e=r.lastUsed,t=n)}),t&&this.cache.delete(t)}}invalidate(e){return F(this,null,function*(){let t=e.getKey();if(this.invalidations.get(t))return yield this.invalidations.get(t);this.cache.delete(e.getKey());let r=new Promise((n,o)=>{this.getHeader(e).then(i=>{n(),this.invalidations.delete(t)}).catch(i=>{o(i)})});this.invalidations.set(t,r)})}},Dt=class{constructor(e,t,r){typeof e=="string"?this.source=new cn(e):this.source=e,r?this.decompress=r:this.decompress=Mt,t?this.cache=t:this.cache=new pn}getHeader(){return F(this,null,function*(){return yield this.cache.getHeader(this.source)})}getZxyAttempt(e,t,r,n){return F(this,null,function*(){let o=on(e,t,r),i=yield this.cache.getHeader(this.source);if(i.specVersion<3)return rn.getZxy(i,this.source,this.cache,e,t,r,n);if(e<i.minZoom||e>i.maxZoom)return;let s=i.rootDirectoryOffset,a=i.rootDirectoryLength;for(let l=0;l<=3;l++){let c=yield this.cache.getDirectory(this.source,s,a,i),f=ln(c,o);if(f){if(f.runLength>0){let u=yield this.source.getBytes(i.tileDataOffset+f.offset,f.length,n,i.etag);return{data:yield this.decompress(u.data,i.tileCompression),cacheControl:u.cacheControl,expires:u.expires}}s=i.leafDirectoryOffset+f.offset,a=f.length}else return}throw Error("Maximum directory depth exceeded")})}getZxy(e,t,r,n){return F(this,null,function*(){try{return yield this.getZxyAttempt(e,t,r,n)}catch(o){if(o instanceof We)return this.cache.invalidate(this.source),yield this.getZxyAttempt(e,t,r,n);throw o}})}getMetadataAttempt(){return F(this,null,function*(){let e=yield this.cache.getHeader(this.source),t=yield this.source.getBytes(e.jsonMetadataOffset,e.jsonMetadataLength,void 0,e.etag),r=yield this.decompress(t.data,e.internalCompression),n=new TextDecoder("utf-8");return JSON.parse(n.decode(r))})}getMetadata(){return F(this,null,function*(){try{return yield this.getMetadataAttempt()}catch(e){if(e instanceof We)return this.cache.invalidate(this.source),yield this.getMetadataAttempt();throw e}})}};var{TileType:Be}=Ee;function gn(e,t,r,n){let o=null;if(t)try{let a=JSON.stringify(t);o=ye.parseTextSync?.(a,n)||null}catch(a){console.warn("PMTiles metadata could not be interpreted as TileJSON",a)}let i={};typeof o?.name=="string"&&(i.name=o.name),typeof o?.htmlAttribution=="string"&&(i.attributions=[o.htmlAttribution]);let s={...i,format:"pmtiles",formatVersion:e.specVersion,attributions:[],tileMIMEType:ws(e.tileType),minZoom:e.minZoom,maxZoom:e.maxZoom,boundingBox:[[e.minLon,e.minLat],[e.maxLon,e.maxLat]],center:[e.centerLon,e.centerLat],centerZoom:e.centerZoom,etag:e.etag};return o&&(s.tilejson=o),r?.includeFormatHeader&&(s.formatHeader=e,s.formatMetadata=s),s}function ws(e){switch(e){case Be.Mvt:return"application/vnd.mapbox-vector-tile";case Be.Png:return"image/png";case Be.Jpeg:return"image/jpeg";case Be.Webp:return"image/webp";case Be.Avif:return"image/avif";default:return"application/octet-stream"}}var Ke=class{blob;key;constructor(t,r){this.blob=t,this.key=r}getKey(){return this.blob.url||""}async getBytes(t,r,n){return{data:await this.blob.slice(t,t+r).arrayBuffer()}}};var{PMTiles:vs}=Ee,Ts="1.0.0",mn={name:"PMTiles",id:"pmtiles",module:"pmtiles",version:Ts,extensions:["pmtiles"],mimeTypes:["application/octet-stream"],options:{url:void 0,pmtiles:{}},type:"pmtiles",fromUrl:!0,fromBlob:!0,testURL:e=>e.endsWith(".pmtiles"),createDataSource:(e,t)=>new Q(e,t)},Q=class extends pe{data;props;mimeType=null;pmtiles;metadata;constructor(t,r){super(r),this.props=r;let n=typeof t=="string"?st(t):new Ke(t,"pmtiles");this.data=t,this.pmtiles=new vs(n),this.getTileData=this.getTileData.bind(this),this.metadata=this.getMetadata()}async getSchema(){return{fields:[],metadata:{}}}async getMetadata(){let t=await this.pmtiles.getHeader(),r=await this.pmtiles.getMetadata()||{},n=gn(t,r,{includeFormatHeader:!1},this.loadOptions);return this.props.attributions&&(n.attributions=[...this.props.attributions,...n.attributions||[]]),n?.tileMIMEType&&(this.mimeType=n?.tileMIMEType),n}async getTile(t){let{x:r,y:n,z:o}=t,s=(await this.pmtiles.getZxy(o,r,n))?.data;return s||null}async getTileData(t){let{x:r,y:n,z:o}=t.index;switch((await this.metadata).tileMIMEType){case"application/vnd.mapbox-vector-tile":return await this.getVectorTile({x:r,y:n,z:o,layers:[]});default:return await this.getImageTile({x:r,y:n,z:o,layers:[]})}}async getImageTile(t){let r=await this.getTile(t);return r?await ut.parse(r,this.loadOptions):null}async getVectorTile(t){let r=await this.getTile(t),n={shape:"geojson-table",mvt:{coordinates:"wgs84",tileIndex:{x:t.x,y:t.y,z:t.z},...this.loadOptions?.mvt},...this.loadOptions};return r?await St.parse(r,n):null}};var yn="4.3.0-alpha.4";var wn={name:"PMTiles",id:"pmtiles",module:"pmtiles",version:yn,extensions:["pmtiles"],mimeTypes:["application/octet-stream"],tests:["PMTiles"],options:{pmtiles:{}},parse:async(e,t)=>xn(new de(new Blob([e])),t),parseFile:xn};async function xn(e,t){let n=await new Q(e.handle,{pmtiles:t?.pmtiles||{}}).getMetadata(),{tileMIMEType:o,tilejson:i={}}=n,{layers:s=[]}=i;switch(o){case"application/vnd.mapbox-vector-tile":return{shape:"vector-source",layers:s.map(a=>({name:a.name,schema:a.schema})),tables:[],formatSpecificMetadata:n};case"image/png":case"image/jpeg":return{shape:"image-source",formatSpecificMetadata:n};default:throw new Error(`PMTilesLoader: Unsupported tile MIME type ${o}`)}}return Dn(_e);})();
8
8
  /*! Bundled license information:
9
9
 
10
10
  ieee754/index.js:
package/dist/index.cjs CHANGED
@@ -31,7 +31,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var dist_exports = {};
32
32
  __export(dist_exports, {
33
33
  PMTilesSource: () => PMTilesSource,
34
- PMTilesTileSource: () => PMTilesTileSource
34
+ PMTilesTileSource: () => PMTilesTileSource,
35
+ _PMTilesLoader: () => PMTilesLoader
35
36
  });
36
37
  module.exports = __toCommonJS(dist_exports);
37
38
 
@@ -45,9 +46,8 @@ var pmtiles2 = __toESM(require("pmtiles"), 1);
45
46
  var import_mvt = require("@loaders.gl/mvt");
46
47
  var pmtiles = __toESM(require("pmtiles"), 1);
47
48
  var { TileType } = pmtiles;
48
- function parsePMTilesHeader(header, pmmetadata, options, loadOptions) {
49
+ function parsePMTilesHeader(header, pmtilesMetadata, options, loadOptions) {
49
50
  var _a, _b;
50
- const pmtilesMetadata = pmmetadata;
51
51
  let tilejson = null;
52
52
  if (pmtilesMetadata) {
53
53
  try {
@@ -157,7 +157,7 @@ var PMTilesTileSource = class extends import_loader_utils.DataSource {
157
157
  super(props);
158
158
  this.props = props;
159
159
  const url = typeof data === "string" ? (0, import_loader_utils.resolvePath)(data) : new BlobSource(data, "pmtiles");
160
- this.data = props.url;
160
+ this.data = data;
161
161
  this.pmtiles = new PMTiles(url);
162
162
  this.getTileData = this.getTileData.bind(this);
163
163
  this.metadata = this.getMetadata();
@@ -167,7 +167,7 @@ var PMTilesTileSource = class extends import_loader_utils.DataSource {
167
167
  }
168
168
  async getMetadata() {
169
169
  const pmtilesHeader = await this.pmtiles.getHeader();
170
- const pmtilesMetadata = await this.pmtiles.getMetadata();
170
+ const pmtilesMetadata = await this.pmtiles.getMetadata() || {};
171
171
  const metadata = parsePMTilesHeader(pmtilesHeader, pmtilesMetadata, { includeFormatHeader: false }, this.loadOptions);
172
172
  if (this.props.attributions) {
173
173
  metadata.attributions = [...this.props.attributions, ...metadata.attributions || []];
@@ -219,4 +219,48 @@ var PMTilesTileSource = class extends import_loader_utils.DataSource {
219
219
  return arrayBuffer ? await import_mvt2.MVTLoader.parse(arrayBuffer, loadOptions) : null;
220
220
  }
221
221
  };
222
+
223
+ // dist/pmtiles-loader.js
224
+ var import_loader_utils2 = require("@loaders.gl/loader-utils");
225
+
226
+ // dist/lib/version.js
227
+ var VERSION2 = true ? "4.3.0-alpha.4" : "latest";
228
+
229
+ // dist/pmtiles-loader.js
230
+ var PMTilesLoader = {
231
+ name: "PMTiles",
232
+ id: "pmtiles",
233
+ module: "pmtiles",
234
+ version: VERSION2,
235
+ extensions: ["pmtiles"],
236
+ mimeTypes: ["application/octet-stream"],
237
+ tests: ["PMTiles"],
238
+ options: {
239
+ pmtiles: {}
240
+ },
241
+ parse: async (arrayBuffer, options) => parseFileAsPMTiles(new import_loader_utils2.BlobFile(new Blob([arrayBuffer])), options),
242
+ parseFile: parseFileAsPMTiles
243
+ };
244
+ async function parseFileAsPMTiles(file, options) {
245
+ const source = new PMTilesTileSource(file.handle, {
246
+ pmtiles: (options == null ? void 0 : options.pmtiles) || {}
247
+ });
248
+ const formatSpecificMetadata = await source.getMetadata();
249
+ const { tileMIMEType, tilejson = {} } = formatSpecificMetadata;
250
+ const { layers = [] } = tilejson;
251
+ switch (tileMIMEType) {
252
+ case "application/vnd.mapbox-vector-tile":
253
+ return {
254
+ shape: "vector-source",
255
+ layers: layers.map((layer) => ({ name: layer.name, schema: layer.schema })),
256
+ tables: [],
257
+ formatSpecificMetadata
258
+ };
259
+ case "image/png":
260
+ case "image/jpeg":
261
+ return { shape: "image-source", formatSpecificMetadata };
262
+ default:
263
+ throw new Error(`PMTilesLoader: Unsupported tile MIME type ${tileMIMEType}`);
264
+ }
265
+ }
222
266
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["index.js", "pmtiles-source.js", "lib/parse-pmtiles.js", "lib/blob-source.js"],
4
- "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport { PMTilesSource } from \"./pmtiles-source.js\";\nexport { PMTilesTileSource } from \"./pmtiles-source.js\";\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { DataSource, resolvePath } from '@loaders.gl/loader-utils';\nimport { ImageLoader } from '@loaders.gl/images';\nimport { MVTLoader } from '@loaders.gl/mvt';\nimport * as pmtiles from 'pmtiles';\nconst { PMTiles } = pmtiles;\nimport { parsePMTilesHeader } from \"./lib/parse-pmtiles.js\";\nimport { BlobSource } from \"./lib/blob-source.js\";\nconst VERSION = '1.0.0';\n/**\n * Creates vector tile data sources for PMTiles urls or blobs\n */\nexport const PMTilesSource = {\n name: 'PMTiles',\n id: 'pmtiles',\n module: 'pmtiles',\n version: VERSION,\n extensions: ['pmtiles'],\n mimeTypes: ['application/octet-stream'],\n options: { url: undefined, pmtiles: {} },\n type: 'pmtiles',\n fromUrl: true,\n fromBlob: true,\n testURL: (url) => url.endsWith('.pmtiles'),\n createDataSource: (url, props) => new PMTilesTileSource(url, props)\n};\n/**\n * A PMTiles data source\n * @note Can be either a raster or vector tile source depending on the contents of the PMTiles file.\n */\nexport class PMTilesTileSource extends DataSource {\n data;\n props;\n mimeType = null;\n pmtiles;\n metadata;\n constructor(data, props) {\n super(props);\n this.props = props;\n const url = typeof data === 'string' ? resolvePath(data) : new BlobSource(data, 'pmtiles');\n this.data = props.url;\n this.pmtiles = new PMTiles(url);\n this.getTileData = this.getTileData.bind(this);\n this.metadata = this.getMetadata();\n }\n async getSchema() {\n return { fields: [], metadata: {} };\n }\n async getMetadata() {\n const pmtilesHeader = await this.pmtiles.getHeader();\n const pmtilesMetadata = await this.pmtiles.getMetadata();\n const metadata = parsePMTilesHeader(pmtilesHeader, pmtilesMetadata, { includeFormatHeader: false }, this.loadOptions);\n // Add additional attribution if necessary\n if (this.props.attributions) {\n metadata.attributions = [...this.props.attributions, ...(metadata.attributions || [])];\n }\n if (metadata?.tileMIMEType) {\n this.mimeType = metadata?.tileMIMEType;\n }\n // TODO - do we need to allow tileSize to be overridden? Some PMTiles examples seem to suggest it.\n return metadata;\n }\n async getTile(tileParams) {\n const { x, y, z } = tileParams;\n const rangeResponse = await this.pmtiles.getZxy(z, x, y);\n const arrayBuffer = rangeResponse?.data;\n if (!arrayBuffer) {\n // console.error('No arrayBuffer', tileParams);\n return null;\n }\n return arrayBuffer;\n }\n // Tile Source interface implementation: deck.gl compatible API\n // TODO - currently only handles image tiles, not vector tiles\n async getTileData(tileParams) {\n const { x, y, z } = tileParams.index;\n const metadata = await this.metadata;\n switch (metadata.tileMIMEType) {\n case 'application/vnd.mapbox-vector-tile':\n return await this.getVectorTile({ x, y, z, layers: [] });\n default:\n return await this.getImageTile({ x, y, z, layers: [] });\n }\n }\n // ImageTileSource interface implementation\n async getImageTile(tileParams) {\n const arrayBuffer = await this.getTile(tileParams);\n return arrayBuffer ? await ImageLoader.parse(arrayBuffer, this.loadOptions) : null;\n }\n // VectorTileSource interface implementation\n async getVectorTile(tileParams) {\n const arrayBuffer = await this.getTile(tileParams);\n const loadOptions = {\n shape: 'geojson-table',\n mvt: {\n coordinates: 'wgs84',\n tileIndex: { x: tileParams.x, y: tileParams.y, z: tileParams.z },\n ...this.loadOptions?.mvt\n },\n ...this.loadOptions\n };\n return arrayBuffer ? await MVTLoader.parse(arrayBuffer, loadOptions) : null;\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { TileJSONLoader } from '@loaders.gl/mvt';\n// import {Source, PMTiles, Header, TileType} from 'pmtiles';\nimport * as pmtiles from 'pmtiles';\nconst { TileType } = pmtiles;\n/**\n * Parse PMTiles metdata from a PMTiles file\n * @param header\n * @param tilejsonMetadata\n * @param options\n * @param loadOptions\n * @returns\n */\nexport function parsePMTilesHeader(header, pmmetadata, options, loadOptions) {\n const pmtilesMetadata = pmmetadata;\n // Ironically, to use the TileJSON loader we need to stringify the metadata again.\n // This is the price of integrating with the existing pmtiles library.\n // TODO - provide a non-standard TileJSONLoader parsers that accepts a JSON object?\n let tilejson = null;\n if (pmtilesMetadata) {\n try {\n const string = JSON.stringify(pmtilesMetadata);\n tilejson = TileJSONLoader.parseTextSync?.(string, loadOptions) || null;\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.warn('PMTiles metadata could not be interpreted as TileJSON', error);\n }\n }\n const partialMetadata = {};\n if (typeof tilejson?.name === 'string') {\n partialMetadata.name = tilejson.name;\n }\n if (typeof tilejson?.htmlAttribution === 'string') {\n partialMetadata.attributions = [tilejson.htmlAttribution];\n }\n const metadata = {\n ...partialMetadata,\n format: 'pmtiles',\n formatVersion: header.specVersion,\n attributions: [],\n tileMIMEType: decodeTileType(header.tileType),\n minZoom: header.minZoom,\n maxZoom: header.maxZoom,\n boundingBox: [\n [header.minLon, header.minLat],\n [header.maxLon, header.maxLat]\n ],\n center: [header.centerLon, header.centerLat],\n centerZoom: header.centerZoom,\n etag: header.etag\n };\n if (tilejson) {\n metadata.tilejson = tilejson;\n }\n // Application can optionally include the raw header and metadata.\n if (options?.includeFormatHeader) {\n metadata.formatHeader = header;\n metadata.formatMetadata = metadata;\n }\n return metadata;\n}\n/** Extract a MIME type for tiles from vector tile header */\nfunction decodeTileType(tileType) {\n switch (tileType) {\n case TileType.Mvt:\n return 'application/vnd.mapbox-vector-tile';\n case TileType.Png:\n return 'image/png';\n case TileType.Jpeg:\n return 'image/jpeg';\n case TileType.Webp:\n return 'image/webp';\n case TileType.Avif:\n return 'image/avif';\n default:\n return 'application/octet-stream';\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * A PMTiles library compatible source that reads from blobs\n * @deprecated TODO - reimplement as ReadableFileSource\n * Use loaders.gl HTTP range requests instead\n */\nexport class BlobSource {\n blob;\n key;\n constructor(blob, key) {\n this.blob = blob;\n this.key = key;\n }\n // TODO - how is this used?\n getKey() {\n // @ts-expect-error url is only defined on File subclass\n return this.blob.url || '';\n }\n async getBytes(offset, length, signal) {\n const slice = this.blob.slice(offset, offset + length);\n const data = await slice.arrayBuffer();\n return {\n data\n // etag: response.headers.get('ETag') || undefined,\n // cacheControl: response.headers.get('Cache-Control') || undefined,\n // expires: response.headers.get('Expires') || undefined\n };\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACGA,0BAAwC;AACxC,oBAA4B;AAC5B,IAAAA,cAA0B;AAC1B,IAAAC,WAAyB;;;ACHzB,iBAA+B;AAE/B,cAAyB;AACzB,IAAM,EAAE,SAAS,IAAI;AASd,SAAS,mBAAmB,QAAQ,YAAY,SAAS,aAAa;AAf7E;AAgBI,QAAM,kBAAkB;AAIxB,MAAI,WAAW;AACf,MAAI,iBAAiB;AACjB,QAAI;AACA,YAAM,SAAS,KAAK,UAAU,eAAe;AAC7C,mBAAW,sCAAe,kBAAf,4BAA+B,QAAQ,iBAAgB;AAAA,IACtE,SACO,OAAP;AAEI,cAAQ,KAAK,yDAAyD,KAAK;AAAA,IAC/E;AAAA,EACJ;AACA,QAAM,kBAAkB,CAAC;AACzB,MAAI,QAAO,qCAAU,UAAS,UAAU;AACpC,oBAAgB,OAAO,SAAS;AAAA,EACpC;AACA,MAAI,QAAO,qCAAU,qBAAoB,UAAU;AAC/C,oBAAgB,eAAe,CAAC,SAAS,eAAe;AAAA,EAC5D;AACA,QAAM,WAAW;AAAA,IACb,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,eAAe,OAAO;AAAA,IACtB,cAAc,CAAC;AAAA,IACf,cAAc,eAAe,OAAO,QAAQ;AAAA,IAC5C,SAAS,OAAO;AAAA,IAChB,SAAS,OAAO;AAAA,IAChB,aAAa;AAAA,MACT,CAAC,OAAO,QAAQ,OAAO,MAAM;AAAA,MAC7B,CAAC,OAAO,QAAQ,OAAO,MAAM;AAAA,IACjC;AAAA,IACA,QAAQ,CAAC,OAAO,WAAW,OAAO,SAAS;AAAA,IAC3C,YAAY,OAAO;AAAA,IACnB,MAAM,OAAO;AAAA,EACjB;AACA,MAAI,UAAU;AACV,aAAS,WAAW;AAAA,EACxB;AAEA,MAAI,mCAAS,qBAAqB;AAC9B,aAAS,eAAe;AACxB,aAAS,iBAAiB;AAAA,EAC9B;AACA,SAAO;AACX;AAEA,SAAS,eAAe,UAAU;AAC9B,UAAQ,UAAU;AAAA,IACd,KAAK,SAAS;AACV,aAAO;AAAA,IACX,KAAK,SAAS;AACV,aAAO;AAAA,IACX,KAAK,SAAS;AACV,aAAO;AAAA,IACX,KAAK,SAAS;AACV,aAAO;AAAA,IACX,KAAK,SAAS;AACV,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EACf;AACJ;;;ACxEO,IAAM,aAAN,MAAiB;AAAA,EACpB;AAAA,EACA;AAAA,EACA,YAAY,MAAM,KAAK;AACnB,SAAK,OAAO;AACZ,SAAK,MAAM;AAAA,EACf;AAAA;AAAA,EAEA,SAAS;AAEL,WAAO,KAAK,KAAK,OAAO;AAAA,EAC5B;AAAA,EACA,MAAM,SAAS,QAAQ,QAAQ,QAAQ;AACnC,UAAM,QAAQ,KAAK,KAAK,MAAM,QAAQ,SAAS,MAAM;AACrD,UAAM,OAAO,MAAM,MAAM,YAAY;AACrC,WAAO;AAAA,MACH;AAAA;AAAA;AAAA;AAAA,IAIJ;AAAA,EACJ;AACJ;;;AFvBA,IAAM,EAAE,QAAQ,IAAIC;AAGpB,IAAM,UAAU;AAIT,IAAM,gBAAgB;AAAA,EACzB,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY,CAAC,SAAS;AAAA,EACtB,WAAW,CAAC,0BAA0B;AAAA,EACtC,SAAS,EAAE,KAAK,QAAW,SAAS,CAAC,EAAE;AAAA,EACvC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS,CAAC,QAAQ,IAAI,SAAS,UAAU;AAAA,EACzC,kBAAkB,CAAC,KAAK,UAAU,IAAI,kBAAkB,KAAK,KAAK;AACtE;AAKO,IAAM,oBAAN,cAAgC,+BAAW;AAAA,EAC9C;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,YAAY,MAAM,OAAO;AACrB,UAAM,KAAK;AACX,SAAK,QAAQ;AACb,UAAM,MAAM,OAAO,SAAS,eAAW,iCAAY,IAAI,IAAI,IAAI,WAAW,MAAM,SAAS;AACzF,SAAK,OAAO,MAAM;AAClB,SAAK,UAAU,IAAI,QAAQ,GAAG;AAC9B,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,WAAW,KAAK,YAAY;AAAA,EACrC;AAAA,EACA,MAAM,YAAY;AACd,WAAO,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,EAAE;AAAA,EACtC;AAAA,EACA,MAAM,cAAc;AAChB,UAAM,gBAAgB,MAAM,KAAK,QAAQ,UAAU;AACnD,UAAM,kBAAkB,MAAM,KAAK,QAAQ,YAAY;AACvD,UAAM,WAAW,mBAAmB,eAAe,iBAAiB,EAAE,qBAAqB,MAAM,GAAG,KAAK,WAAW;AAEpH,QAAI,KAAK,MAAM,cAAc;AACzB,eAAS,eAAe,CAAC,GAAG,KAAK,MAAM,cAAc,GAAI,SAAS,gBAAgB,CAAC,CAAE;AAAA,IACzF;AACA,QAAI,qCAAU,cAAc;AACxB,WAAK,WAAW,qCAAU;AAAA,IAC9B;AAEA,WAAO;AAAA,EACX;AAAA,EACA,MAAM,QAAQ,YAAY;AACtB,UAAM,EAAE,GAAG,GAAG,EAAE,IAAI;AACpB,UAAM,gBAAgB,MAAM,KAAK,QAAQ,OAAO,GAAG,GAAG,CAAC;AACvD,UAAM,cAAc,+CAAe;AACnC,QAAI,CAAC,aAAa;AAEd,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,MAAM,YAAY,YAAY;AAC1B,UAAM,EAAE,GAAG,GAAG,EAAE,IAAI,WAAW;AAC/B,UAAM,WAAW,MAAM,KAAK;AAC5B,YAAQ,SAAS,cAAc;AAAA,MAC3B,KAAK;AACD,eAAO,MAAM,KAAK,cAAc,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC;AAAA,MAC3D;AACI,eAAO,MAAM,KAAK,aAAa,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC;AAAA,IAC9D;AAAA,EACJ;AAAA;AAAA,EAEA,MAAM,aAAa,YAAY;AAC3B,UAAM,cAAc,MAAM,KAAK,QAAQ,UAAU;AACjD,WAAO,cAAc,MAAM,0BAAY,MAAM,aAAa,KAAK,WAAW,IAAI;AAAA,EAClF;AAAA;AAAA,EAEA,MAAM,cAAc,YAAY;AA5FpC;AA6FQ,UAAM,cAAc,MAAM,KAAK,QAAQ,UAAU;AACjD,UAAM,cAAc;AAAA,MAChB,OAAO;AAAA,MACP,KAAK;AAAA,QACD,aAAa;AAAA,QACb,WAAW,EAAE,GAAG,WAAW,GAAG,GAAG,WAAW,GAAG,GAAG,WAAW,EAAE;AAAA,QAC/D,IAAG,UAAK,gBAAL,mBAAkB;AAAA,MACzB;AAAA,MACA,GAAG,KAAK;AAAA,IACZ;AACA,WAAO,cAAc,MAAM,sBAAU,MAAM,aAAa,WAAW,IAAI;AAAA,EAC3E;AACJ;",
6
- "names": ["import_mvt", "pmtiles", "pmtiles"]
3
+ "sources": ["index.js", "pmtiles-source.js", "lib/parse-pmtiles.js", "lib/blob-source.js", "pmtiles-loader.js", "lib/version.js"],
4
+ "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport { PMTilesSource } from \"./pmtiles-source.js\";\nexport { PMTilesTileSource } from \"./pmtiles-source.js\";\nexport { PMTilesLoader as _PMTilesLoader } from \"./pmtiles-loader.js\";\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { DataSource, resolvePath } from '@loaders.gl/loader-utils';\nimport { ImageLoader } from '@loaders.gl/images';\nimport { MVTLoader } from '@loaders.gl/mvt';\nimport * as pmtiles from 'pmtiles';\nconst { PMTiles } = pmtiles;\nimport { parsePMTilesHeader } from \"./lib/parse-pmtiles.js\";\nimport { BlobSource } from \"./lib/blob-source.js\";\nconst VERSION = '1.0.0';\n/**\n * Creates vector tile data sources for PMTiles urls or blobs\n */\nexport const PMTilesSource = {\n name: 'PMTiles',\n id: 'pmtiles',\n module: 'pmtiles',\n version: VERSION,\n extensions: ['pmtiles'],\n mimeTypes: ['application/octet-stream'],\n options: { url: undefined, pmtiles: {} },\n type: 'pmtiles',\n fromUrl: true,\n fromBlob: true,\n testURL: (url) => url.endsWith('.pmtiles'),\n createDataSource: (url, props) => new PMTilesTileSource(url, props)\n};\n/**\n * A PMTiles data source\n * @note Can be either a raster or vector tile source depending on the contents of the PMTiles file.\n */\nexport class PMTilesTileSource extends DataSource {\n data;\n props;\n mimeType = null;\n pmtiles;\n metadata;\n constructor(data, props) {\n super(props);\n this.props = props;\n const url = typeof data === 'string' ? resolvePath(data) : new BlobSource(data, 'pmtiles');\n this.data = data;\n this.pmtiles = new PMTiles(url);\n this.getTileData = this.getTileData.bind(this);\n this.metadata = this.getMetadata();\n }\n async getSchema() {\n return { fields: [], metadata: {} };\n }\n async getMetadata() {\n const pmtilesHeader = await this.pmtiles.getHeader();\n const pmtilesMetadata = (await this.pmtiles.getMetadata()) || {};\n const metadata = parsePMTilesHeader(pmtilesHeader, pmtilesMetadata, { includeFormatHeader: false }, this.loadOptions);\n // Add additional attribution if necessary\n if (this.props.attributions) {\n metadata.attributions = [...this.props.attributions, ...(metadata.attributions || [])];\n }\n if (metadata?.tileMIMEType) {\n this.mimeType = metadata?.tileMIMEType;\n }\n // TODO - do we need to allow tileSize to be overridden? Some PMTiles examples seem to suggest it.\n return metadata;\n }\n async getTile(tileParams) {\n const { x, y, z } = tileParams;\n const rangeResponse = await this.pmtiles.getZxy(z, x, y);\n const arrayBuffer = rangeResponse?.data;\n if (!arrayBuffer) {\n // console.error('No arrayBuffer', tileParams);\n return null;\n }\n return arrayBuffer;\n }\n // Tile Source interface implementation: deck.gl compatible API\n // TODO - currently only handles image tiles, not vector tiles\n async getTileData(tileParams) {\n const { x, y, z } = tileParams.index;\n const metadata = await this.metadata;\n switch (metadata.tileMIMEType) {\n case 'application/vnd.mapbox-vector-tile':\n return await this.getVectorTile({ x, y, z, layers: [] });\n default:\n return await this.getImageTile({ x, y, z, layers: [] });\n }\n }\n // ImageTileSource interface implementation\n async getImageTile(tileParams) {\n const arrayBuffer = await this.getTile(tileParams);\n return arrayBuffer ? await ImageLoader.parse(arrayBuffer, this.loadOptions) : null;\n }\n // VectorTileSource interface implementation\n async getVectorTile(tileParams) {\n const arrayBuffer = await this.getTile(tileParams);\n const loadOptions = {\n shape: 'geojson-table',\n mvt: {\n coordinates: 'wgs84',\n tileIndex: { x: tileParams.x, y: tileParams.y, z: tileParams.z },\n ...this.loadOptions?.mvt\n },\n ...this.loadOptions\n };\n return arrayBuffer ? await MVTLoader.parse(arrayBuffer, loadOptions) : null;\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { TileJSONLoader } from '@loaders.gl/mvt';\n// import {Source, PMTiles, Header, TileType} from 'pmtiles';\nimport * as pmtiles from 'pmtiles';\nconst { TileType } = pmtiles;\n/**\n * Parse PMTiles metdata from a PMTiles file\n * @param header\n * @param tilejsonMetadata\n * @param options\n * @param loadOptions\n * @returns\n */\nexport function parsePMTilesHeader(header, pmtilesMetadata, options, loadOptions) {\n // Ironically, to use the TileJSON loader we need to stringify the metadata again.\n // This is the price of integrating with the existing pmtiles library.\n // TODO - provide a non-standard TileJSONLoader parsers that accepts a JSON object?\n let tilejson = null;\n if (pmtilesMetadata) {\n try {\n const string = JSON.stringify(pmtilesMetadata);\n tilejson = TileJSONLoader.parseTextSync?.(string, loadOptions) || null;\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.warn('PMTiles metadata could not be interpreted as TileJSON', error);\n }\n }\n const partialMetadata = {};\n if (typeof tilejson?.name === 'string') {\n partialMetadata.name = tilejson.name;\n }\n if (typeof tilejson?.htmlAttribution === 'string') {\n partialMetadata.attributions = [tilejson.htmlAttribution];\n }\n const metadata = {\n ...partialMetadata,\n format: 'pmtiles',\n formatVersion: header.specVersion,\n attributions: [],\n tileMIMEType: decodeTileType(header.tileType),\n minZoom: header.minZoom,\n maxZoom: header.maxZoom,\n boundingBox: [\n [header.minLon, header.minLat],\n [header.maxLon, header.maxLat]\n ],\n center: [header.centerLon, header.centerLat],\n centerZoom: header.centerZoom,\n etag: header.etag\n };\n if (tilejson) {\n metadata.tilejson = tilejson;\n }\n // Application can optionally include the raw header and metadata.\n if (options?.includeFormatHeader) {\n metadata.formatHeader = header;\n metadata.formatMetadata = metadata;\n }\n return metadata;\n}\n/** Extract a MIME type for tiles from vector tile header */\nfunction decodeTileType(tileType) {\n switch (tileType) {\n case TileType.Mvt:\n return 'application/vnd.mapbox-vector-tile';\n case TileType.Png:\n return 'image/png';\n case TileType.Jpeg:\n return 'image/jpeg';\n case TileType.Webp:\n return 'image/webp';\n case TileType.Avif:\n return 'image/avif';\n default:\n return 'application/octet-stream';\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * A PMTiles library compatible source that reads from blobs\n * @deprecated TODO - reimplement as ReadableFileSource\n * Use loaders.gl HTTP range requests instead\n */\nexport class BlobSource {\n blob;\n key;\n constructor(blob, key) {\n this.blob = blob;\n this.key = key;\n }\n // TODO - how is this used?\n getKey() {\n // @ts-expect-error url is only defined on File subclass\n return this.blob.url || '';\n }\n async getBytes(offset, length, signal) {\n const slice = this.blob.slice(offset, offset + length);\n const data = await slice.arrayBuffer();\n return {\n data\n // etag: response.headers.get('ETag') || undefined,\n // cacheControl: response.headers.get('Cache-Control') || undefined,\n // expires: response.headers.get('Expires') || undefined\n };\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { BlobFile } from '@loaders.gl/loader-utils';\nimport { VERSION } from \"./lib/version.js\";\nimport { PMTilesTileSource } from \"./pmtiles-source.js\";\n/**\n * Loader for PMTiles metadata\n * @note This loader is intended to allow PMTiles to be treated like other file types in top-level loading logic.\n * @note For actual access to the tile data, use the PMTilesSource class.\n */\nexport const PMTilesLoader = {\n name: 'PMTiles',\n id: 'pmtiles',\n module: 'pmtiles',\n version: VERSION,\n extensions: ['pmtiles'],\n mimeTypes: ['application/octet-stream'],\n tests: ['PMTiles'],\n options: {\n pmtiles: {}\n },\n parse: async (arrayBuffer, options) => parseFileAsPMTiles(new BlobFile(new Blob([arrayBuffer])), options),\n parseFile: parseFileAsPMTiles\n};\nasync function parseFileAsPMTiles(file, options) {\n const source = new PMTilesTileSource(file.handle, {\n pmtiles: options?.pmtiles || {}\n });\n const formatSpecificMetadata = await source.getMetadata();\n const { tileMIMEType, tilejson = {} } = formatSpecificMetadata;\n const { layers = [] } = tilejson;\n switch (tileMIMEType) {\n case 'application/vnd.mapbox-vector-tile':\n return {\n shape: 'vector-source',\n layers: layers.map((layer) => ({ name: layer.name, schema: layer.schema })),\n tables: [],\n formatSpecificMetadata\n };\n case 'image/png':\n case 'image/jpeg':\n return { shape: 'image-source', formatSpecificMetadata };\n default:\n throw new Error(`PMTilesLoader: Unsupported tile MIME type ${tileMIMEType}`);\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof \"4.3.0-alpha.4\" !== 'undefined' ? \"4.3.0-alpha.4\" : 'latest';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACGA,0BAAwC;AACxC,oBAA4B;AAC5B,IAAAA,cAA0B;AAC1B,IAAAC,WAAyB;;;ACHzB,iBAA+B;AAE/B,cAAyB;AACzB,IAAM,EAAE,SAAS,IAAI;AASd,SAAS,mBAAmB,QAAQ,iBAAiB,SAAS,aAAa;AAflF;AAmBI,MAAI,WAAW;AACf,MAAI,iBAAiB;AACjB,QAAI;AACA,YAAM,SAAS,KAAK,UAAU,eAAe;AAC7C,mBAAW,sCAAe,kBAAf,4BAA+B,QAAQ,iBAAgB;AAAA,IACtE,SACO,OAAP;AAEI,cAAQ,KAAK,yDAAyD,KAAK;AAAA,IAC/E;AAAA,EACJ;AACA,QAAM,kBAAkB,CAAC;AACzB,MAAI,QAAO,qCAAU,UAAS,UAAU;AACpC,oBAAgB,OAAO,SAAS;AAAA,EACpC;AACA,MAAI,QAAO,qCAAU,qBAAoB,UAAU;AAC/C,oBAAgB,eAAe,CAAC,SAAS,eAAe;AAAA,EAC5D;AACA,QAAM,WAAW;AAAA,IACb,GAAG;AAAA,IACH,QAAQ;AAAA,IACR,eAAe,OAAO;AAAA,IACtB,cAAc,CAAC;AAAA,IACf,cAAc,eAAe,OAAO,QAAQ;AAAA,IAC5C,SAAS,OAAO;AAAA,IAChB,SAAS,OAAO;AAAA,IAChB,aAAa;AAAA,MACT,CAAC,OAAO,QAAQ,OAAO,MAAM;AAAA,MAC7B,CAAC,OAAO,QAAQ,OAAO,MAAM;AAAA,IACjC;AAAA,IACA,QAAQ,CAAC,OAAO,WAAW,OAAO,SAAS;AAAA,IAC3C,YAAY,OAAO;AAAA,IACnB,MAAM,OAAO;AAAA,EACjB;AACA,MAAI,UAAU;AACV,aAAS,WAAW;AAAA,EACxB;AAEA,MAAI,mCAAS,qBAAqB;AAC9B,aAAS,eAAe;AACxB,aAAS,iBAAiB;AAAA,EAC9B;AACA,SAAO;AACX;AAEA,SAAS,eAAe,UAAU;AAC9B,UAAQ,UAAU;AAAA,IACd,KAAK,SAAS;AACV,aAAO;AAAA,IACX,KAAK,SAAS;AACV,aAAO;AAAA,IACX,KAAK,SAAS;AACV,aAAO;AAAA,IACX,KAAK,SAAS;AACV,aAAO;AAAA,IACX,KAAK,SAAS;AACV,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EACf;AACJ;;;ACvEO,IAAM,aAAN,MAAiB;AAAA,EACpB;AAAA,EACA;AAAA,EACA,YAAY,MAAM,KAAK;AACnB,SAAK,OAAO;AACZ,SAAK,MAAM;AAAA,EACf;AAAA;AAAA,EAEA,SAAS;AAEL,WAAO,KAAK,KAAK,OAAO;AAAA,EAC5B;AAAA,EACA,MAAM,SAAS,QAAQ,QAAQ,QAAQ;AACnC,UAAM,QAAQ,KAAK,KAAK,MAAM,QAAQ,SAAS,MAAM;AACrD,UAAM,OAAO,MAAM,MAAM,YAAY;AACrC,WAAO;AAAA,MACH;AAAA;AAAA;AAAA;AAAA,IAIJ;AAAA,EACJ;AACJ;;;AFvBA,IAAM,EAAE,QAAQ,IAAIC;AAGpB,IAAM,UAAU;AAIT,IAAM,gBAAgB;AAAA,EACzB,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY,CAAC,SAAS;AAAA,EACtB,WAAW,CAAC,0BAA0B;AAAA,EACtC,SAAS,EAAE,KAAK,QAAW,SAAS,CAAC,EAAE;AAAA,EACvC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS,CAAC,QAAQ,IAAI,SAAS,UAAU;AAAA,EACzC,kBAAkB,CAAC,KAAK,UAAU,IAAI,kBAAkB,KAAK,KAAK;AACtE;AAKO,IAAM,oBAAN,cAAgC,+BAAW;AAAA,EAC9C;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,YAAY,MAAM,OAAO;AACrB,UAAM,KAAK;AACX,SAAK,QAAQ;AACb,UAAM,MAAM,OAAO,SAAS,eAAW,iCAAY,IAAI,IAAI,IAAI,WAAW,MAAM,SAAS;AACzF,SAAK,OAAO;AACZ,SAAK,UAAU,IAAI,QAAQ,GAAG;AAC9B,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,WAAW,KAAK,YAAY;AAAA,EACrC;AAAA,EACA,MAAM,YAAY;AACd,WAAO,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,EAAE;AAAA,EACtC;AAAA,EACA,MAAM,cAAc;AAChB,UAAM,gBAAgB,MAAM,KAAK,QAAQ,UAAU;AACnD,UAAM,kBAAmB,MAAM,KAAK,QAAQ,YAAY,KAAM,CAAC;AAC/D,UAAM,WAAW,mBAAmB,eAAe,iBAAiB,EAAE,qBAAqB,MAAM,GAAG,KAAK,WAAW;AAEpH,QAAI,KAAK,MAAM,cAAc;AACzB,eAAS,eAAe,CAAC,GAAG,KAAK,MAAM,cAAc,GAAI,SAAS,gBAAgB,CAAC,CAAE;AAAA,IACzF;AACA,QAAI,qCAAU,cAAc;AACxB,WAAK,WAAW,qCAAU;AAAA,IAC9B;AAEA,WAAO;AAAA,EACX;AAAA,EACA,MAAM,QAAQ,YAAY;AACtB,UAAM,EAAE,GAAG,GAAG,EAAE,IAAI;AACpB,UAAM,gBAAgB,MAAM,KAAK,QAAQ,OAAO,GAAG,GAAG,CAAC;AACvD,UAAM,cAAc,+CAAe;AACnC,QAAI,CAAC,aAAa;AAEd,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA;AAAA;AAAA,EAGA,MAAM,YAAY,YAAY;AAC1B,UAAM,EAAE,GAAG,GAAG,EAAE,IAAI,WAAW;AAC/B,UAAM,WAAW,MAAM,KAAK;AAC5B,YAAQ,SAAS,cAAc;AAAA,MAC3B,KAAK;AACD,eAAO,MAAM,KAAK,cAAc,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC;AAAA,MAC3D;AACI,eAAO,MAAM,KAAK,aAAa,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC;AAAA,IAC9D;AAAA,EACJ;AAAA;AAAA,EAEA,MAAM,aAAa,YAAY;AAC3B,UAAM,cAAc,MAAM,KAAK,QAAQ,UAAU;AACjD,WAAO,cAAc,MAAM,0BAAY,MAAM,aAAa,KAAK,WAAW,IAAI;AAAA,EAClF;AAAA;AAAA,EAEA,MAAM,cAAc,YAAY;AA5FpC;AA6FQ,UAAM,cAAc,MAAM,KAAK,QAAQ,UAAU;AACjD,UAAM,cAAc;AAAA,MAChB,OAAO;AAAA,MACP,KAAK;AAAA,QACD,aAAa;AAAA,QACb,WAAW,EAAE,GAAG,WAAW,GAAG,GAAG,WAAW,GAAG,GAAG,WAAW,EAAE;AAAA,QAC/D,IAAG,UAAK,gBAAL,mBAAkB;AAAA,MACzB;AAAA,MACA,GAAG,KAAK;AAAA,IACZ;AACA,WAAO,cAAc,MAAM,sBAAU,MAAM,aAAa,WAAW,IAAI;AAAA,EAC3E;AACJ;;;AGtGA,IAAAC,uBAAyB;;;ACGlB,IAAMC,WAAU,OAAyC,kBAAkB;;;ADK3E,IAAM,gBAAgB;AAAA,EACzB,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,SAASC;AAAA,EACT,YAAY,CAAC,SAAS;AAAA,EACtB,WAAW,CAAC,0BAA0B;AAAA,EACtC,OAAO,CAAC,SAAS;AAAA,EACjB,SAAS;AAAA,IACL,SAAS,CAAC;AAAA,EACd;AAAA,EACA,OAAO,OAAO,aAAa,YAAY,mBAAmB,IAAI,8BAAS,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO;AAAA,EACxG,WAAW;AACf;AACA,eAAe,mBAAmB,MAAM,SAAS;AAC7C,QAAM,SAAS,IAAI,kBAAkB,KAAK,QAAQ;AAAA,IAC9C,UAAS,mCAAS,YAAW,CAAC;AAAA,EAClC,CAAC;AACD,QAAM,yBAAyB,MAAM,OAAO,YAAY;AACxD,QAAM,EAAE,cAAc,WAAW,CAAC,EAAE,IAAI;AACxC,QAAM,EAAE,SAAS,CAAC,EAAE,IAAI;AACxB,UAAQ,cAAc;AAAA,IAClB,KAAK;AACD,aAAO;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,MAAM,MAAM,QAAQ,MAAM,OAAO,EAAE;AAAA,QAC1E,QAAQ,CAAC;AAAA,QACT;AAAA,MACJ;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AACD,aAAO,EAAE,OAAO,gBAAgB,uBAAuB;AAAA,IAC3D;AACI,YAAM,IAAI,MAAM,6CAA6C,cAAc;AAAA,EACnF;AACJ;",
6
+ "names": ["import_mvt", "pmtiles", "pmtiles", "import_loader_utils", "VERSION", "VERSION"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -2,4 +2,6 @@ export { PMTilesSource } from "./pmtiles-source.js";
2
2
  export type { PMTilesMetadata } from "./lib/parse-pmtiles.js";
3
3
  export type { PMTilesTileSourceProps } from "./pmtiles-source.js";
4
4
  export { PMTilesTileSource } from "./pmtiles-source.js";
5
+ export { PMTilesLoader as _PMTilesLoader } from "./pmtiles-loader.js";
6
+ export type { PMTilesLoaderOptions } from "./pmtiles-loader.js";
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAC,4BAAyB;AAE/C,YAAY,EAAC,eAAe,EAAC,+BAA4B;AACzD,YAAY,EAAC,sBAAsB,EAAC,4BAAyB;AAC7D,OAAO,EAAC,iBAAiB,EAAC,4BAAyB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAC,4BAAyB;AAE/C,YAAY,EAAC,eAAe,EAAC,+BAA4B;AACzD,YAAY,EAAC,sBAAsB,EAAC,4BAAyB;AAC7D,OAAO,EAAC,iBAAiB,EAAC,4BAAyB;AAEnD,OAAO,EAAC,aAAa,IAAI,cAAc,EAAC,4BAAyB;AACjE,YAAY,EAAC,oBAAoB,EAAC,4BAAyB"}
package/dist/index.js CHANGED
@@ -3,3 +3,4 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  export { PMTilesSource } from "./pmtiles-source.js";
5
5
  export { PMTilesTileSource } from "./pmtiles-source.js";
6
+ export { PMTilesLoader as _PMTilesLoader } from "./pmtiles-loader.js";
@@ -1,4 +1,4 @@
1
- import type { LoaderOptions } from '@loaders.gl/loader-utils';
1
+ import { LoaderOptions } from '@loaders.gl/loader-utils';
2
2
  import type { TileJSON } from '@loaders.gl/mvt';
3
3
  import * as pmtiles from 'pmtiles';
4
4
  /** Metadata describing a PMTiles file */
@@ -39,7 +39,7 @@ export type PMTilesMetadata = {
39
39
  * @param loadOptions
40
40
  * @returns
41
41
  */
42
- export declare function parsePMTilesHeader(header: pmtiles.Header, pmmetadata: unknown, options?: {
42
+ export declare function parsePMTilesHeader(header: pmtiles.Header, pmtilesMetadata: Record<string, unknown> | null, options?: {
43
43
  includeFormatHeader?: boolean;
44
44
  }, loadOptions?: LoaderOptions): PMTilesMetadata;
45
45
  //# sourceMappingURL=parse-pmtiles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-pmtiles.d.ts","sourceRoot":"","sources":["../../src/lib/parse-pmtiles.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AAG9C,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IAEtB,4FAA4F;IAC5F,YAAY,EACR,oCAAoC,GACpC,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,0BAA0B,CAAC;IAE/B,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,uCAAuC;IACvC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,qDAAqD;IACrD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,iDAAiD;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IAC9B,2GAA2G;IAC3G,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,UAAU,EAAE,OAAO,EACnB,OAAO,CAAC,EAAE;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAC,EACzC,WAAW,CAAC,EAAE,aAAa,GAC1B,eAAe,CAuDjB"}
1
+ {"version":3,"file":"parse-pmtiles.d.ts","sourceRoot":"","sources":["../../src/lib/parse-pmtiles.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AAG9C,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IAEtB,4FAA4F;IAC5F,YAAY,EACR,oCAAoC,GACpC,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,0BAA0B,CAAC;IAE/B,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE,uCAAuC;IACvC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,qDAAqD;IACrD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,iDAAiD;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC;IAC9B,2GAA2G;IAC3G,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAC/C,OAAO,CAAC,EAAE;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAC,EACzC,WAAW,CAAC,EAAE,aAAa,GAC1B,eAAe,CAqDjB"}
@@ -13,8 +13,7 @@ const { TileType } = pmtiles;
13
13
  * @param loadOptions
14
14
  * @returns
15
15
  */
16
- export function parsePMTilesHeader(header, pmmetadata, options, loadOptions) {
17
- const pmtilesMetadata = pmmetadata;
16
+ export function parsePMTilesHeader(header, pmtilesMetadata, options, loadOptions) {
18
17
  // Ironically, to use the TileJSON loader we need to stringify the metadata again.
19
18
  // This is the price of integrating with the existing pmtiles library.
20
19
  // TODO - provide a non-standard TileJSONLoader parsers that accepts a JSON object?
@@ -0,0 +1,2 @@
1
+ export declare const VERSION: any;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,KAA8D,CAAC"}
@@ -0,0 +1,7 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ // Version constant cannot be imported, it needs to correspond to the build version of **this** module.
5
+ // __VERSION__ is injected by babel-plugin-version-inline
6
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
7
+ export const VERSION = typeof "4.3.0-alpha.4" !== 'undefined' ? "4.3.0-alpha.4" : 'latest';
@@ -0,0 +1,28 @@
1
+ import type { LoaderOptions, ReadableFile } from '@loaders.gl/loader-utils';
2
+ import { VectorSourceInfo, ImageSourceInfo } from "./source-info.js";
3
+ import { PMTilesTileSourceProps } from "./pmtiles-source.js";
4
+ export type PMTilesLoaderOptions = LoaderOptions & {
5
+ pmtiles?: PMTilesTileSourceProps['pmtiles'];
6
+ };
7
+ /**
8
+ * Loader for PMTiles metadata
9
+ * @note This loader is intended to allow PMTiles to be treated like other file types in top-level loading logic.
10
+ * @note For actual access to the tile data, use the PMTilesSource class.
11
+ */
12
+ export declare const PMTilesLoader: {
13
+ readonly name: "PMTiles";
14
+ readonly id: "pmtiles";
15
+ readonly module: "pmtiles";
16
+ readonly version: any;
17
+ readonly extensions: ["pmtiles"];
18
+ readonly mimeTypes: ["application/octet-stream"];
19
+ readonly tests: ["PMTiles"];
20
+ readonly options: {
21
+ readonly pmtiles: {};
22
+ };
23
+ readonly parse: (arrayBuffer: ArrayBuffer, options?: PMTilesLoaderOptions) => Promise<VectorSourceInfo | ImageSourceInfo>;
24
+ readonly parseFile: typeof parseFileAsPMTiles;
25
+ };
26
+ declare function parseFileAsPMTiles(file: ReadableFile, options?: PMTilesLoaderOptions): Promise<VectorSourceInfo | ImageSourceInfo>;
27
+ export {};
28
+ //# sourceMappingURL=pmtiles-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pmtiles-loader.d.ts","sourceRoot":"","sources":["../src/pmtiles-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,aAAa,EAAE,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAI5F,OAAO,EAAC,gBAAgB,EAAE,eAAe,EAAC,yBAAsB;AAChE,OAAO,EAAoB,sBAAsB,EAAC,4BAAyB;AAE3E,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG;IACjD,OAAO,CAAC,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;CAC7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;kCAWG,WAAW,YAAY,oBAAoB;;CAOvE,CAAC;AAEF,iBAAe,kBAAkB,CAC/B,IAAI,EAAE,YAAY,EAClB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,gBAAgB,GAAG,eAAe,CAAC,CAqB7C"}
@@ -0,0 +1,47 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { BlobFile } from '@loaders.gl/loader-utils';
5
+ import { VERSION } from "./lib/version.js";
6
+ import { PMTilesTileSource } from "./pmtiles-source.js";
7
+ /**
8
+ * Loader for PMTiles metadata
9
+ * @note This loader is intended to allow PMTiles to be treated like other file types in top-level loading logic.
10
+ * @note For actual access to the tile data, use the PMTilesSource class.
11
+ */
12
+ export const PMTilesLoader = {
13
+ name: 'PMTiles',
14
+ id: 'pmtiles',
15
+ module: 'pmtiles',
16
+ version: VERSION,
17
+ extensions: ['pmtiles'],
18
+ mimeTypes: ['application/octet-stream'],
19
+ tests: ['PMTiles'],
20
+ options: {
21
+ pmtiles: {}
22
+ },
23
+ parse: async (arrayBuffer, options) => parseFileAsPMTiles(new BlobFile(new Blob([arrayBuffer])), options),
24
+ parseFile: parseFileAsPMTiles
25
+ };
26
+ async function parseFileAsPMTiles(file, options) {
27
+ const source = new PMTilesTileSource(file.handle, {
28
+ pmtiles: options?.pmtiles || {}
29
+ });
30
+ const formatSpecificMetadata = await source.getMetadata();
31
+ const { tileMIMEType, tilejson = {} } = formatSpecificMetadata;
32
+ const { layers = [] } = tilejson;
33
+ switch (tileMIMEType) {
34
+ case 'application/vnd.mapbox-vector-tile':
35
+ return {
36
+ shape: 'vector-source',
37
+ layers: layers.map((layer) => ({ name: layer.name, schema: layer.schema })),
38
+ tables: [],
39
+ formatSpecificMetadata
40
+ };
41
+ case 'image/png':
42
+ case 'image/jpeg':
43
+ return { shape: 'image-source', formatSpecificMetadata };
44
+ default:
45
+ throw new Error(`PMTilesLoader: Unsupported tile MIME type ${tileMIMEType}`);
46
+ }
47
+ }
@@ -27,7 +27,6 @@ export declare const PMTilesSource: {
27
27
  readonly createDataSource: (url: string | Blob, props: PMTilesTileSourceProps) => PMTilesTileSource;
28
28
  };
29
29
  export type PMTilesTileSourceProps = DataSourceProps & {
30
- url: string | Blob;
31
30
  attributions?: string[];
32
31
  pmtiles?: {
33
32
  loadOptions?: TileJSONLoaderOptions & MVTLoaderOptions & ImageLoaderOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"pmtiles-source.d.ts","sourceRoot":"","sources":["../src/pmtiles-source.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAC,eAAe,EAAE,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAC,UAAU,EAAE,eAAe,EAAc,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAc,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAY,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAEnF,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAC,eAAe,EAAC,+BAA4B;AAMzD;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;4BAYT,MAAM;qCACG,MAAM,GAAG,IAAI,SAAS,sBAAsB;CAEA,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG;IACrD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,qBAAqB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;KAE7E,CAAC;CACH,CAAC;AAEF;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,UAAW,YAAW,eAAe,EAAE,gBAAgB;IAC5F,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;gBAEvB,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,sBAAsB;IAUxD,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;IAoBvC,OAAO,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAcnE,WAAW,CAAC,UAAU,EAAE,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC;IAa5D,YAAY,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAOtE,aAAa,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAc5E"}
1
+ {"version":3,"file":"pmtiles-source.d.ts","sourceRoot":"","sources":["../src/pmtiles-source.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAC,eAAe,EAAE,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAC,UAAU,EAAE,eAAe,EAAc,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAc,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAY,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAEnF,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAC,eAAe,EAAC,+BAA4B;AAMzD;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;4BAYT,MAAM;qCACG,MAAM,GAAG,IAAI,SAAS,sBAAsB;CAEA,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG;IACrD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,qBAAqB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;KAE7E,CAAC;CACH,CAAC;AAEF;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,UAAW,YAAW,eAAe,EAAE,gBAAgB;IAC5F,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;gBAEvB,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,sBAAsB;IAUxD,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;IAoBvC,OAAO,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAcnE,WAAW,CAAC,UAAU,EAAE,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC;IAa5D,YAAY,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAOtE,aAAa,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAc5E"}
@@ -40,7 +40,7 @@ export class PMTilesTileSource extends DataSource {
40
40
  super(props);
41
41
  this.props = props;
42
42
  const url = typeof data === 'string' ? resolvePath(data) : new BlobSource(data, 'pmtiles');
43
- this.data = props.url;
43
+ this.data = data;
44
44
  this.pmtiles = new PMTiles(url);
45
45
  this.getTileData = this.getTileData.bind(this);
46
46
  this.metadata = this.getMetadata();
@@ -50,7 +50,7 @@ export class PMTilesTileSource extends DataSource {
50
50
  }
51
51
  async getMetadata() {
52
52
  const pmtilesHeader = await this.pmtiles.getHeader();
53
- const pmtilesMetadata = await this.pmtiles.getMetadata();
53
+ const pmtilesMetadata = (await this.pmtiles.getMetadata()) || {};
54
54
  const metadata = parsePMTilesHeader(pmtilesHeader, pmtilesMetadata, { includeFormatHeader: false }, this.loadOptions);
55
55
  // Add additional attribution if necessary
56
56
  if (this.props.attributions) {
@@ -0,0 +1,25 @@
1
+ import { Schema } from '@loaders.gl/schema';
2
+ export type SourceInfo = VectorSourceInfo | ImageSourceInfo;
3
+ /** Information about a vector source */
4
+ export type VectorSourceInfo = {
5
+ shape: 'vector-source';
6
+ /** List of geospatial tables */
7
+ layers: {
8
+ name: string;
9
+ schema: Schema;
10
+ }[];
11
+ /** List of nongeospatial tables */
12
+ tables: {
13
+ name: string;
14
+ schema: Schema;
15
+ }[];
16
+ /** Format specific metadata */
17
+ formatSpecificMetadata?: Record<string, any>;
18
+ };
19
+ /** Information about an image source */
20
+ export type ImageSourceInfo = {
21
+ shape: 'image-source';
22
+ /** Format specific metadata */
23
+ formatSpecificMetadata?: Record<string, any>;
24
+ };
25
+ //# sourceMappingURL=source-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-info.d.ts","sourceRoot":"","sources":["../src/source-info.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAE1C,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAE5D,wCAAwC;AACxC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,eAAe,CAAC;IACvB,gCAAgC;IAChC,MAAM,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACzC,mCAAmC;IACnC,MAAM,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACzC,+BAA+B;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9C,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,cAAc,CAAC;IACtB,+BAA+B;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9C,CAAC"}
@@ -0,0 +1,4 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/pmtiles",
3
- "version": "4.3.0-alpha.3",
3
+ "version": "4.3.0-alpha.5",
4
4
  "description": "Framework-independent loader for the pmtiles format",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -46,14 +46,14 @@
46
46
  "build-bundle-dev": "ocular-bundle ./bundle.ts --env=dev --output=dist/dist.dev.js"
47
47
  },
48
48
  "dependencies": {
49
- "@loaders.gl/images": "4.3.0-alpha.3",
50
- "@loaders.gl/loader-utils": "4.3.0-alpha.3",
51
- "@loaders.gl/mvt": "4.3.0-alpha.3",
52
- "@loaders.gl/schema": "4.3.0-alpha.3",
49
+ "@loaders.gl/images": "4.3.0-alpha.5",
50
+ "@loaders.gl/loader-utils": "4.3.0-alpha.5",
51
+ "@loaders.gl/mvt": "4.3.0-alpha.5",
52
+ "@loaders.gl/schema": "4.3.0-alpha.5",
53
53
  "pmtiles": "^3.0.4"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "@loaders.gl/core": "^4.0.0"
57
57
  },
58
- "gitHead": "3213679d79e6ff2814d48fd3337acfa446c74099"
58
+ "gitHead": "b57553345b3cbf621c95ad9b22aa672217451f61"
59
59
  }
package/src/index.ts CHANGED
@@ -7,3 +7,6 @@ export {PMTilesSource} from './pmtiles-source';
7
7
  export type {PMTilesMetadata} from './lib/parse-pmtiles';
8
8
  export type {PMTilesTileSourceProps} from './pmtiles-source';
9
9
  export {PMTilesTileSource} from './pmtiles-source';
10
+
11
+ export {PMTilesLoader as _PMTilesLoader} from './pmtiles-loader';
12
+ export type {PMTilesLoaderOptions} from './pmtiles-loader';
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import type {LoaderOptions} from '@loaders.gl/loader-utils';
5
+ import {LoaderOptions} from '@loaders.gl/loader-utils';
6
6
  import type {TileJSON} from '@loaders.gl/mvt';
7
7
  import {TileJSONLoader} from '@loaders.gl/mvt';
8
8
  // import {Source, PMTiles, Header, TileType} from 'pmtiles';
@@ -61,12 +61,10 @@ export type PMTilesMetadata = {
61
61
  */
62
62
  export function parsePMTilesHeader(
63
63
  header: pmtiles.Header,
64
- pmmetadata: unknown,
64
+ pmtilesMetadata: Record<string, unknown> | null,
65
65
  options?: {includeFormatHeader?: boolean},
66
66
  loadOptions?: LoaderOptions
67
67
  ): PMTilesMetadata {
68
- const pmtilesMetadata = pmmetadata as Record<string, unknown> | null;
69
-
70
68
  // Ironically, to use the TileJSON loader we need to stringify the metadata again.
71
69
  // This is the price of integrating with the existing pmtiles library.
72
70
  // TODO - provide a non-standard TileJSONLoader parsers that accepts a JSON object?
@@ -0,0 +1,8 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ // Version constant cannot be imported, it needs to correspond to the build version of **this** module.
6
+ // __VERSION__ is injected by babel-plugin-version-inline
7
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
8
+ export const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
@@ -0,0 +1,65 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {LoaderWithParser, LoaderOptions, ReadableFile} from '@loaders.gl/loader-utils';
6
+ import {BlobFile} from '@loaders.gl/loader-utils';
7
+ import {VERSION} from './lib/version';
8
+
9
+ import {VectorSourceInfo, ImageSourceInfo} from './source-info';
10
+ import {PMTilesTileSource, PMTilesTileSourceProps} from './pmtiles-source';
11
+
12
+ export type PMTilesLoaderOptions = LoaderOptions & {
13
+ pmtiles?: PMTilesTileSourceProps['pmtiles'];
14
+ };
15
+
16
+ /**
17
+ * Loader for PMTiles metadata
18
+ * @note This loader is intended to allow PMTiles to be treated like other file types in top-level loading logic.
19
+ * @note For actual access to the tile data, use the PMTilesSource class.
20
+ */
21
+ export const PMTilesLoader = {
22
+ name: 'PMTiles',
23
+ id: 'pmtiles',
24
+ module: 'pmtiles',
25
+ version: VERSION,
26
+ extensions: ['pmtiles'],
27
+ mimeTypes: ['application/octet-stream'],
28
+ tests: ['PMTiles'],
29
+ options: {
30
+ pmtiles: {}
31
+ },
32
+ parse: async (arrayBuffer: ArrayBuffer, options?: PMTilesLoaderOptions) =>
33
+ parseFileAsPMTiles(new BlobFile(new Blob([arrayBuffer])), options),
34
+ parseFile: parseFileAsPMTiles
35
+ } as const satisfies LoaderWithParser<
36
+ VectorSourceInfo | ImageSourceInfo,
37
+ never,
38
+ PMTilesLoaderOptions
39
+ >;
40
+
41
+ async function parseFileAsPMTiles(
42
+ file: ReadableFile,
43
+ options?: PMTilesLoaderOptions
44
+ ): Promise<VectorSourceInfo | ImageSourceInfo> {
45
+ const source = new PMTilesTileSource(file.handle as string | Blob, {
46
+ pmtiles: options?.pmtiles || {}
47
+ });
48
+ const formatSpecificMetadata = await source.getMetadata();
49
+ const {tileMIMEType, tilejson = {}} = formatSpecificMetadata;
50
+ const {layers = []} = tilejson;
51
+ switch (tileMIMEType) {
52
+ case 'application/vnd.mapbox-vector-tile':
53
+ return {
54
+ shape: 'vector-source',
55
+ layers: layers.map((layer) => ({name: layer.name, schema: layer.schema})),
56
+ tables: [],
57
+ formatSpecificMetadata
58
+ } as VectorSourceInfo;
59
+ case 'image/png':
60
+ case 'image/jpeg':
61
+ return {shape: 'image-source', formatSpecificMetadata} as ImageSourceInfo;
62
+ default:
63
+ throw new Error(`PMTilesLoader: Unsupported tile MIME type ${tileMIMEType}`);
64
+ }
65
+ }
@@ -44,7 +44,6 @@ export const PMTilesSource = {
44
44
  } as const satisfies Source<PMTilesTileSource, PMTilesTileSourceProps>;
45
45
 
46
46
  export type PMTilesTileSourceProps = DataSourceProps & {
47
- url: string | Blob;
48
47
  attributions?: string[];
49
48
  pmtiles?: {
50
49
  loadOptions?: TileJSONLoaderOptions & MVTLoaderOptions & ImageLoaderOptions;
@@ -67,7 +66,7 @@ export class PMTilesTileSource extends DataSource implements ImageTileSource, Ve
67
66
  super(props);
68
67
  this.props = props;
69
68
  const url = typeof data === 'string' ? resolvePath(data) : new BlobSource(data, 'pmtiles');
70
- this.data = props.url;
69
+ this.data = data;
71
70
  this.pmtiles = new PMTiles(url);
72
71
  this.getTileData = this.getTileData.bind(this);
73
72
  this.metadata = this.getMetadata();
@@ -79,7 +78,7 @@ export class PMTilesTileSource extends DataSource implements ImageTileSource, Ve
79
78
 
80
79
  async getMetadata(): Promise<PMTilesMetadata> {
81
80
  const pmtilesHeader = await this.pmtiles.getHeader();
82
- const pmtilesMetadata = await this.pmtiles.getMetadata();
81
+ const pmtilesMetadata = ((await this.pmtiles.getMetadata()) as Record<string, unknown>) || {};
83
82
  const metadata: PMTilesMetadata = parsePMTilesHeader(
84
83
  pmtilesHeader,
85
84
  pmtilesMetadata,
@@ -0,0 +1,25 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {Schema} from '@loaders.gl/schema';
6
+
7
+ export type SourceInfo = VectorSourceInfo | ImageSourceInfo;
8
+
9
+ /** Information about a vector source */
10
+ export type VectorSourceInfo = {
11
+ shape: 'vector-source';
12
+ /** List of geospatial tables */
13
+ layers: {name: string; schema: Schema}[];
14
+ /** List of nongeospatial tables */
15
+ tables: {name: string; schema: Schema}[];
16
+ /** Format specific metadata */
17
+ formatSpecificMetadata?: Record<string, any>;
18
+ };
19
+
20
+ /** Information about an image source */
21
+ export type ImageSourceInfo = {
22
+ shape: 'image-source';
23
+ /** Format specific metadata */
24
+ formatSpecificMetadata?: Record<string, any>;
25
+ };