@seed-ship/mcp-ui-solid 3.0.5 → 4.0.1
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/CHANGELOG.md +115 -0
- package/README.md +253 -280
- package/dist/components/ChartJSRenderer.cjs +37 -15
- package/dist/components/ChartJSRenderer.cjs.map +1 -1
- package/dist/components/ChartJSRenderer.d.ts.map +1 -1
- package/dist/components/ChartJSRenderer.js +37 -15
- package/dist/components/ChartJSRenderer.js.map +1 -1
- package/dist/components/DataPreviewSection.cjs +213 -0
- package/dist/components/DataPreviewSection.cjs.map +1 -0
- package/dist/components/DataPreviewSection.d.ts +19 -0
- package/dist/components/DataPreviewSection.d.ts.map +1 -0
- package/dist/components/DataPreviewSection.js +213 -0
- package/dist/components/DataPreviewSection.js.map +1 -0
- package/dist/components/MapRenderer.cjs +168 -26
- package/dist/components/MapRenderer.cjs.map +1 -1
- package/dist/components/MapRenderer.d.ts +2 -2
- package/dist/components/MapRenderer.d.ts.map +1 -1
- package/dist/components/MapRenderer.js +169 -27
- package/dist/components/MapRenderer.js.map +1 -1
- package/dist/components/ScratchpadPanel.cjs +83 -1
- package/dist/components/ScratchpadPanel.cjs.map +1 -1
- package/dist/components/ScratchpadPanel.d.ts.map +1 -1
- package/dist/components/ScratchpadPanel.js +84 -2
- package/dist/components/ScratchpadPanel.js.map +1 -1
- package/dist/components/VerifiedText.cjs +166 -0
- package/dist/components/VerifiedText.cjs.map +1 -0
- package/dist/components/VerifiedText.d.ts +22 -0
- package/dist/components/VerifiedText.d.ts.map +1 -0
- package/dist/components/VerifiedText.js +166 -0
- package/dist/components/VerifiedText.js.map +1 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components.cjs +4 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.cts +4 -0
- package/dist/components.d.ts +4 -0
- package/dist/components.js +4 -0
- package/dist/components.js.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useDataValidator.cjs +31 -0
- package/dist/hooks/useDataValidator.cjs.map +1 -0
- package/dist/hooks/useDataValidator.d.ts +42 -0
- package/dist/hooks/useDataValidator.d.ts.map +1 -0
- package/dist/hooks/useDataValidator.js +31 -0
- package/dist/hooks/useDataValidator.js.map +1 -0
- package/dist/hooks.cjs +2 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.cts +2 -0
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.js +2 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +8 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -5
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@mapbox_point-geometry@1.1.0/node_modules/@mapbox/point-geometry/index.cjs +290 -0
- package/dist/node_modules/.pnpm/@mapbox_point-geometry@1.1.0/node_modules/@mapbox/point-geometry/index.cjs.map +1 -0
- package/dist/node_modules/.pnpm/@mapbox_point-geometry@1.1.0/node_modules/@mapbox/point-geometry/index.js +291 -0
- package/dist/node_modules/.pnpm/@mapbox_point-geometry@1.1.0/node_modules/@mapbox/point-geometry/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@mapbox_vector-tile@2.0.4/node_modules/@mapbox/vector-tile/index.cjs +243 -0
- package/dist/node_modules/.pnpm/@mapbox_vector-tile@2.0.4/node_modules/@mapbox/vector-tile/index.cjs.map +1 -0
- package/dist/node_modules/.pnpm/@mapbox_vector-tile@2.0.4/node_modules/@mapbox/vector-tile/index.js +243 -0
- package/dist/node_modules/.pnpm/@mapbox_vector-tile@2.0.4/node_modules/@mapbox/vector-tile/index.js.map +1 -0
- package/dist/node_modules/.pnpm/color2k@2.0.3/node_modules/color2k/dist/index.exports.import.es.cjs +137 -0
- package/dist/node_modules/.pnpm/color2k@2.0.3/node_modules/color2k/dist/index.exports.import.es.cjs.map +1 -0
- package/dist/node_modules/.pnpm/color2k@2.0.3/node_modules/color2k/dist/index.exports.import.es.js +137 -0
- package/dist/node_modules/.pnpm/color2k@2.0.3/node_modules/color2k/dist/index.exports.import.es.js.map +1 -0
- package/dist/node_modules/.pnpm/pbf@4.0.1/node_modules/pbf/index.cjs +686 -0
- package/dist/node_modules/.pnpm/pbf@4.0.1/node_modules/pbf/index.cjs.map +1 -0
- package/dist/node_modules/.pnpm/pbf@4.0.1/node_modules/pbf/index.js +687 -0
- package/dist/node_modules/.pnpm/pbf@4.0.1/node_modules/pbf/index.js.map +1 -0
- package/dist/node_modules/.pnpm/pmtiles@3.2.1/node_modules/pmtiles/dist/index.cjs +1366 -0
- package/dist/node_modules/.pnpm/pmtiles@3.2.1/node_modules/pmtiles/dist/index.cjs.map +1 -0
- package/dist/node_modules/.pnpm/pmtiles@3.2.1/node_modules/pmtiles/dist/index.js +1366 -0
- package/dist/node_modules/.pnpm/pmtiles@3.2.1/node_modules/pmtiles/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/potpack@1.0.2/node_modules/potpack/index.cjs +54 -0
- package/dist/node_modules/.pnpm/potpack@1.0.2/node_modules/potpack/index.cjs.map +1 -0
- package/dist/node_modules/.pnpm/potpack@1.0.2/node_modules/potpack/index.js +55 -0
- package/dist/node_modules/.pnpm/potpack@1.0.2/node_modules/potpack/index.js.map +1 -0
- package/dist/node_modules/.pnpm/protomaps-leaflet@4.1.1/node_modules/protomaps-leaflet/dist/esm/index.cjs +1256 -0
- package/dist/node_modules/.pnpm/protomaps-leaflet@4.1.1/node_modules/protomaps-leaflet/dist/esm/index.cjs.map +1 -0
- package/dist/node_modules/.pnpm/protomaps-leaflet@4.1.1/node_modules/protomaps-leaflet/dist/esm/index.js +1256 -0
- package/dist/node_modules/.pnpm/protomaps-leaflet@4.1.1/node_modules/protomaps-leaflet/dist/esm/index.js.map +1 -0
- package/dist/node_modules/.pnpm/quickselect@2.0.0/node_modules/quickselect/index.cjs +47 -0
- package/dist/node_modules/.pnpm/quickselect@2.0.0/node_modules/quickselect/index.cjs.map +1 -0
- package/dist/node_modules/.pnpm/quickselect@2.0.0/node_modules/quickselect/index.js +48 -0
- package/dist/node_modules/.pnpm/quickselect@2.0.0/node_modules/quickselect/index.js.map +1 -0
- package/dist/node_modules/.pnpm/rbush@3.0.1/node_modules/rbush/index.cjs +378 -0
- package/dist/node_modules/.pnpm/rbush@3.0.1/node_modules/rbush/index.cjs.map +1 -0
- package/dist/node_modules/.pnpm/rbush@3.0.1/node_modules/rbush/index.js +379 -0
- package/dist/node_modules/.pnpm/rbush@3.0.1/node_modules/rbush/index.js.map +1 -0
- package/dist/services/data-validator.cjs +85 -0
- package/dist/services/data-validator.cjs.map +1 -0
- package/dist/services/data-validator.d.ts +28 -0
- package/dist/services/data-validator.d.ts.map +1 -0
- package/dist/services/data-validator.js +85 -0
- package/dist/services/data-validator.js.map +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/types/chat-bus.d.ts +88 -1
- package/dist/types/chat-bus.d.ts.map +1 -1
- package/dist/types/index.d.ts +135 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types.d.cts +135 -6
- package/dist/types.d.ts +135 -6
- package/package.json +5 -1
- package/src/components/ChartJSRenderer.tsx +35 -13
- package/src/components/DataPreviewSection.tsx +251 -0
- package/src/components/MapRenderer.test.tsx +94 -5
- package/src/components/MapRenderer.tsx +246 -45
- package/src/components/ScratchpadPanel.tsx +19 -3
- package/src/components/VerifiedText.tsx +187 -0
- package/src/components/index.ts +7 -0
- package/src/hooks/index.ts +7 -0
- package/src/hooks/useDataValidator.ts +68 -0
- package/src/index.ts +26 -1
- package/src/services/data-validator.test.ts +151 -0
- package/src/services/data-validator.ts +149 -0
- package/src/services/index.ts +2 -0
- package/src/types/chat-bus.ts +98 -1
- package/src/types/index.ts +145 -6
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,1366 @@
|
|
|
1
|
+
var __pow = Math.pow;
|
|
2
|
+
var __async = (__this, __arguments, generator) => {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
var fulfilled = (value) => {
|
|
5
|
+
try {
|
|
6
|
+
step(generator.next(value));
|
|
7
|
+
} catch (e) {
|
|
8
|
+
reject(e);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
var rejected = (value) => {
|
|
12
|
+
try {
|
|
13
|
+
step(generator.throw(value));
|
|
14
|
+
} catch (e) {
|
|
15
|
+
reject(e);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
var step = (x2) => x2.done ? resolve(x2.value) : Promise.resolve(x2.value).then(fulfilled, rejected);
|
|
19
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var u8 = Uint8Array;
|
|
23
|
+
var u16 = Uint16Array;
|
|
24
|
+
var i32 = Int32Array;
|
|
25
|
+
var fleb = new u8([
|
|
26
|
+
0,
|
|
27
|
+
0,
|
|
28
|
+
0,
|
|
29
|
+
0,
|
|
30
|
+
0,
|
|
31
|
+
0,
|
|
32
|
+
0,
|
|
33
|
+
0,
|
|
34
|
+
1,
|
|
35
|
+
1,
|
|
36
|
+
1,
|
|
37
|
+
1,
|
|
38
|
+
2,
|
|
39
|
+
2,
|
|
40
|
+
2,
|
|
41
|
+
2,
|
|
42
|
+
3,
|
|
43
|
+
3,
|
|
44
|
+
3,
|
|
45
|
+
3,
|
|
46
|
+
4,
|
|
47
|
+
4,
|
|
48
|
+
4,
|
|
49
|
+
4,
|
|
50
|
+
5,
|
|
51
|
+
5,
|
|
52
|
+
5,
|
|
53
|
+
5,
|
|
54
|
+
0,
|
|
55
|
+
/* unused */
|
|
56
|
+
0,
|
|
57
|
+
0,
|
|
58
|
+
/* impossible */
|
|
59
|
+
0
|
|
60
|
+
]);
|
|
61
|
+
var fdeb = new u8([
|
|
62
|
+
0,
|
|
63
|
+
0,
|
|
64
|
+
0,
|
|
65
|
+
0,
|
|
66
|
+
1,
|
|
67
|
+
1,
|
|
68
|
+
2,
|
|
69
|
+
2,
|
|
70
|
+
3,
|
|
71
|
+
3,
|
|
72
|
+
4,
|
|
73
|
+
4,
|
|
74
|
+
5,
|
|
75
|
+
5,
|
|
76
|
+
6,
|
|
77
|
+
6,
|
|
78
|
+
7,
|
|
79
|
+
7,
|
|
80
|
+
8,
|
|
81
|
+
8,
|
|
82
|
+
9,
|
|
83
|
+
9,
|
|
84
|
+
10,
|
|
85
|
+
10,
|
|
86
|
+
11,
|
|
87
|
+
11,
|
|
88
|
+
12,
|
|
89
|
+
12,
|
|
90
|
+
13,
|
|
91
|
+
13,
|
|
92
|
+
/* unused */
|
|
93
|
+
0,
|
|
94
|
+
0
|
|
95
|
+
]);
|
|
96
|
+
var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
|
|
97
|
+
var freb = function(eb, start) {
|
|
98
|
+
var b = new u16(31);
|
|
99
|
+
for (var i2 = 0; i2 < 31; ++i2) {
|
|
100
|
+
b[i2] = start += 1 << eb[i2 - 1];
|
|
101
|
+
}
|
|
102
|
+
var r = new i32(b[30]);
|
|
103
|
+
for (var i2 = 1; i2 < 30; ++i2) {
|
|
104
|
+
for (var j = b[i2]; j < b[i2 + 1]; ++j) {
|
|
105
|
+
r[j] = j - b[i2] << 5 | i2;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return { b, r };
|
|
109
|
+
};
|
|
110
|
+
var _a = freb(fleb, 2);
|
|
111
|
+
var fl = _a.b;
|
|
112
|
+
var revfl = _a.r;
|
|
113
|
+
fl[28] = 258, revfl[258] = 28;
|
|
114
|
+
var _b = freb(fdeb, 0);
|
|
115
|
+
var fd = _b.b;
|
|
116
|
+
var rev = new u16(32768);
|
|
117
|
+
for (i = 0; i < 32768; ++i) {
|
|
118
|
+
x = (i & 43690) >> 1 | (i & 21845) << 1;
|
|
119
|
+
x = (x & 52428) >> 2 | (x & 13107) << 2;
|
|
120
|
+
x = (x & 61680) >> 4 | (x & 3855) << 4;
|
|
121
|
+
rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1;
|
|
122
|
+
}
|
|
123
|
+
var x;
|
|
124
|
+
var i;
|
|
125
|
+
var hMap = function(cd, mb, r) {
|
|
126
|
+
var s = cd.length;
|
|
127
|
+
var i2 = 0;
|
|
128
|
+
var l = new u16(mb);
|
|
129
|
+
for (; i2 < s; ++i2) {
|
|
130
|
+
if (cd[i2])
|
|
131
|
+
++l[cd[i2] - 1];
|
|
132
|
+
}
|
|
133
|
+
var le = new u16(mb);
|
|
134
|
+
for (i2 = 1; i2 < mb; ++i2) {
|
|
135
|
+
le[i2] = le[i2 - 1] + l[i2 - 1] << 1;
|
|
136
|
+
}
|
|
137
|
+
var co;
|
|
138
|
+
{
|
|
139
|
+
co = new u16(1 << mb);
|
|
140
|
+
var rvb = 15 - mb;
|
|
141
|
+
for (i2 = 0; i2 < s; ++i2) {
|
|
142
|
+
if (cd[i2]) {
|
|
143
|
+
var sv = i2 << 4 | cd[i2];
|
|
144
|
+
var r_1 = mb - cd[i2];
|
|
145
|
+
var v = le[cd[i2] - 1]++ << r_1;
|
|
146
|
+
for (var m = v | (1 << r_1) - 1; v <= m; ++v) {
|
|
147
|
+
co[rev[v] >> rvb] = sv;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return co;
|
|
153
|
+
};
|
|
154
|
+
var flt = new u8(288);
|
|
155
|
+
for (i = 0; i < 144; ++i)
|
|
156
|
+
flt[i] = 8;
|
|
157
|
+
var i;
|
|
158
|
+
for (i = 144; i < 256; ++i)
|
|
159
|
+
flt[i] = 9;
|
|
160
|
+
var i;
|
|
161
|
+
for (i = 256; i < 280; ++i)
|
|
162
|
+
flt[i] = 7;
|
|
163
|
+
var i;
|
|
164
|
+
for (i = 280; i < 288; ++i)
|
|
165
|
+
flt[i] = 8;
|
|
166
|
+
var i;
|
|
167
|
+
var fdt = new u8(32);
|
|
168
|
+
for (i = 0; i < 32; ++i)
|
|
169
|
+
fdt[i] = 5;
|
|
170
|
+
var i;
|
|
171
|
+
var flrm = /* @__PURE__ */ hMap(flt, 9);
|
|
172
|
+
var fdrm = /* @__PURE__ */ hMap(fdt, 5);
|
|
173
|
+
var max = function(a) {
|
|
174
|
+
var m = a[0];
|
|
175
|
+
for (var i2 = 1; i2 < a.length; ++i2) {
|
|
176
|
+
if (a[i2] > m)
|
|
177
|
+
m = a[i2];
|
|
178
|
+
}
|
|
179
|
+
return m;
|
|
180
|
+
};
|
|
181
|
+
var bits = function(d, p, m) {
|
|
182
|
+
var o = p / 8 | 0;
|
|
183
|
+
return (d[o] | d[o + 1] << 8) >> (p & 7) & m;
|
|
184
|
+
};
|
|
185
|
+
var bits16 = function(d, p) {
|
|
186
|
+
var o = p / 8 | 0;
|
|
187
|
+
return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);
|
|
188
|
+
};
|
|
189
|
+
var shft = function(p) {
|
|
190
|
+
return (p + 7) / 8 | 0;
|
|
191
|
+
};
|
|
192
|
+
var slc = function(v, s, e) {
|
|
193
|
+
if (e == null || e > v.length)
|
|
194
|
+
e = v.length;
|
|
195
|
+
var n = new u8(e - s);
|
|
196
|
+
n.set(v.subarray(s, e));
|
|
197
|
+
return n;
|
|
198
|
+
};
|
|
199
|
+
var ec = [
|
|
200
|
+
"unexpected EOF",
|
|
201
|
+
"invalid block type",
|
|
202
|
+
"invalid length/literal",
|
|
203
|
+
"invalid distance",
|
|
204
|
+
"stream finished",
|
|
205
|
+
"no stream handler",
|
|
206
|
+
,
|
|
207
|
+
"no callback",
|
|
208
|
+
"invalid UTF-8 data",
|
|
209
|
+
"extra field too long",
|
|
210
|
+
"date not in range 1980-2099",
|
|
211
|
+
"filename too long",
|
|
212
|
+
"stream finishing",
|
|
213
|
+
"invalid zip data"
|
|
214
|
+
// determined by unknown compression method
|
|
215
|
+
];
|
|
216
|
+
var err = function(ind, msg, nt) {
|
|
217
|
+
var e = new Error(msg || ec[ind]);
|
|
218
|
+
e.code = ind;
|
|
219
|
+
if (Error.captureStackTrace)
|
|
220
|
+
Error.captureStackTrace(e, err);
|
|
221
|
+
if (!nt)
|
|
222
|
+
throw e;
|
|
223
|
+
return e;
|
|
224
|
+
};
|
|
225
|
+
var inflt = function(dat, st, buf, dict) {
|
|
226
|
+
var sl = dat.length, dl = 0;
|
|
227
|
+
if (!sl || st.f && !st.l)
|
|
228
|
+
return buf || new u8(0);
|
|
229
|
+
var noBuf = !buf || st.i != 2;
|
|
230
|
+
var noSt = st.i;
|
|
231
|
+
if (!buf)
|
|
232
|
+
buf = new u8(sl * 3);
|
|
233
|
+
var cbuf = function(l2) {
|
|
234
|
+
var bl = buf.length;
|
|
235
|
+
if (l2 > bl) {
|
|
236
|
+
var nbuf = new u8(Math.max(bl * 2, l2));
|
|
237
|
+
nbuf.set(buf);
|
|
238
|
+
buf = nbuf;
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
|
|
242
|
+
var tbts = sl * 8;
|
|
243
|
+
do {
|
|
244
|
+
if (!lm) {
|
|
245
|
+
final = bits(dat, pos, 1);
|
|
246
|
+
var type = bits(dat, pos + 1, 3);
|
|
247
|
+
pos += 3;
|
|
248
|
+
if (!type) {
|
|
249
|
+
var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;
|
|
250
|
+
if (t > sl) {
|
|
251
|
+
if (noSt)
|
|
252
|
+
err(0);
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
if (noBuf)
|
|
256
|
+
cbuf(bt + l);
|
|
257
|
+
buf.set(dat.subarray(s, t), bt);
|
|
258
|
+
st.b = bt += l, st.p = pos = t * 8, st.f = final;
|
|
259
|
+
continue;
|
|
260
|
+
} else if (type == 1)
|
|
261
|
+
lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
|
|
262
|
+
else if (type == 2) {
|
|
263
|
+
var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
|
|
264
|
+
var tl = hLit + bits(dat, pos + 5, 31) + 1;
|
|
265
|
+
pos += 14;
|
|
266
|
+
var ldt = new u8(tl);
|
|
267
|
+
var clt = new u8(19);
|
|
268
|
+
for (var i2 = 0; i2 < hcLen; ++i2) {
|
|
269
|
+
clt[clim[i2]] = bits(dat, pos + i2 * 3, 7);
|
|
270
|
+
}
|
|
271
|
+
pos += hcLen * 3;
|
|
272
|
+
var clb = max(clt), clbmsk = (1 << clb) - 1;
|
|
273
|
+
var clm = hMap(clt, clb);
|
|
274
|
+
for (var i2 = 0; i2 < tl; ) {
|
|
275
|
+
var r = clm[bits(dat, pos, clbmsk)];
|
|
276
|
+
pos += r & 15;
|
|
277
|
+
var s = r >> 4;
|
|
278
|
+
if (s < 16) {
|
|
279
|
+
ldt[i2++] = s;
|
|
280
|
+
} else {
|
|
281
|
+
var c = 0, n = 0;
|
|
282
|
+
if (s == 16)
|
|
283
|
+
n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i2 - 1];
|
|
284
|
+
else if (s == 17)
|
|
285
|
+
n = 3 + bits(dat, pos, 7), pos += 3;
|
|
286
|
+
else if (s == 18)
|
|
287
|
+
n = 11 + bits(dat, pos, 127), pos += 7;
|
|
288
|
+
while (n--)
|
|
289
|
+
ldt[i2++] = c;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
|
|
293
|
+
lbt = max(lt);
|
|
294
|
+
dbt = max(dt);
|
|
295
|
+
lm = hMap(lt, lbt);
|
|
296
|
+
dm = hMap(dt, dbt);
|
|
297
|
+
} else
|
|
298
|
+
err(1);
|
|
299
|
+
if (pos > tbts) {
|
|
300
|
+
if (noSt)
|
|
301
|
+
err(0);
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
if (noBuf)
|
|
306
|
+
cbuf(bt + 131072);
|
|
307
|
+
var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
|
|
308
|
+
var lpos = pos;
|
|
309
|
+
for (; ; lpos = pos) {
|
|
310
|
+
var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
|
|
311
|
+
pos += c & 15;
|
|
312
|
+
if (pos > tbts) {
|
|
313
|
+
if (noSt)
|
|
314
|
+
err(0);
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
if (!c)
|
|
318
|
+
err(2);
|
|
319
|
+
if (sym < 256)
|
|
320
|
+
buf[bt++] = sym;
|
|
321
|
+
else if (sym == 256) {
|
|
322
|
+
lpos = pos, lm = null;
|
|
323
|
+
break;
|
|
324
|
+
} else {
|
|
325
|
+
var add = sym - 254;
|
|
326
|
+
if (sym > 264) {
|
|
327
|
+
var i2 = sym - 257, b = fleb[i2];
|
|
328
|
+
add = bits(dat, pos, (1 << b) - 1) + fl[i2];
|
|
329
|
+
pos += b;
|
|
330
|
+
}
|
|
331
|
+
var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
|
|
332
|
+
if (!d)
|
|
333
|
+
err(3);
|
|
334
|
+
pos += d & 15;
|
|
335
|
+
var dt = fd[dsym];
|
|
336
|
+
if (dsym > 3) {
|
|
337
|
+
var b = fdeb[dsym];
|
|
338
|
+
dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
|
|
339
|
+
}
|
|
340
|
+
if (pos > tbts) {
|
|
341
|
+
if (noSt)
|
|
342
|
+
err(0);
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
if (noBuf)
|
|
346
|
+
cbuf(bt + 131072);
|
|
347
|
+
var end = bt + add;
|
|
348
|
+
if (bt < dt) {
|
|
349
|
+
var shift2 = dl - dt, dend = Math.min(dt, end);
|
|
350
|
+
if (shift2 + bt < 0)
|
|
351
|
+
err(3);
|
|
352
|
+
for (; bt < dend; ++bt)
|
|
353
|
+
buf[bt] = dict[shift2 + bt];
|
|
354
|
+
}
|
|
355
|
+
for (; bt < end; bt += 4) {
|
|
356
|
+
buf[bt] = buf[bt - dt];
|
|
357
|
+
buf[bt + 1] = buf[bt + 1 - dt];
|
|
358
|
+
buf[bt + 2] = buf[bt + 2 - dt];
|
|
359
|
+
buf[bt + 3] = buf[bt + 3 - dt];
|
|
360
|
+
}
|
|
361
|
+
bt = end;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
st.l = lm, st.p = lpos, st.b = bt, st.f = final;
|
|
365
|
+
if (lm)
|
|
366
|
+
final = 1, st.m = lbt, st.d = dm, st.n = dbt;
|
|
367
|
+
} while (!final);
|
|
368
|
+
return bt == buf.length ? buf : slc(buf, 0, bt);
|
|
369
|
+
};
|
|
370
|
+
var et = /* @__PURE__ */ new u8(0);
|
|
371
|
+
var gzs = function(d) {
|
|
372
|
+
if (d[0] != 31 || d[1] != 139 || d[2] != 8)
|
|
373
|
+
err(6, "invalid gzip data");
|
|
374
|
+
var flg = d[3];
|
|
375
|
+
var st = 10;
|
|
376
|
+
if (flg & 4)
|
|
377
|
+
st += (d[10] | d[11] << 8) + 2;
|
|
378
|
+
for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])
|
|
379
|
+
;
|
|
380
|
+
return st + (flg & 2);
|
|
381
|
+
};
|
|
382
|
+
var gzl = function(d) {
|
|
383
|
+
var l = d.length;
|
|
384
|
+
return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;
|
|
385
|
+
};
|
|
386
|
+
var zls = function(d, dict) {
|
|
387
|
+
if ((d[0] & 15) != 8 || d[0] >> 4 > 7 || (d[0] << 8 | d[1]) % 31)
|
|
388
|
+
err(6, "invalid zlib data");
|
|
389
|
+
if ((d[1] >> 5 & 1) == 1)
|
|
390
|
+
err(6, "invalid zlib data: " + (d[1] & 32 ? "need" : "unexpected") + " dictionary");
|
|
391
|
+
return (d[1] >> 3 & 4) + 2;
|
|
392
|
+
};
|
|
393
|
+
function inflateSync(data, opts) {
|
|
394
|
+
return inflt(data, { i: 2 }, opts, opts);
|
|
395
|
+
}
|
|
396
|
+
function gunzipSync(data, opts) {
|
|
397
|
+
var st = gzs(data);
|
|
398
|
+
if (st + 8 > data.length)
|
|
399
|
+
err(6, "invalid gzip data");
|
|
400
|
+
return inflt(data.subarray(st, -8), { i: 2 }, new u8(gzl(data)), opts);
|
|
401
|
+
}
|
|
402
|
+
function unzlibSync(data, opts) {
|
|
403
|
+
return inflt(data.subarray(zls(data), -4), { i: 2 }, opts, opts);
|
|
404
|
+
}
|
|
405
|
+
function decompressSync(data, opts) {
|
|
406
|
+
return data[0] == 31 && data[1] == 139 && data[2] == 8 ? gunzipSync(data, opts) : (data[0] & 15) != 8 || data[0] >> 4 > 7 || (data[0] << 8 | data[1]) % 31 ? inflateSync(data, opts) : unzlibSync(data, opts);
|
|
407
|
+
}
|
|
408
|
+
var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();
|
|
409
|
+
var tds = 0;
|
|
410
|
+
try {
|
|
411
|
+
td.decode(et, { stream: true });
|
|
412
|
+
tds = 1;
|
|
413
|
+
} catch (e) {
|
|
414
|
+
}
|
|
415
|
+
var shift = (n, shift2) => {
|
|
416
|
+
return n * __pow(2, shift2);
|
|
417
|
+
};
|
|
418
|
+
var unshift = (n, shift2) => {
|
|
419
|
+
return Math.floor(n / __pow(2, shift2));
|
|
420
|
+
};
|
|
421
|
+
var getUint24 = (view, pos) => {
|
|
422
|
+
return shift(view.getUint16(pos + 1, true), 8) + view.getUint8(pos);
|
|
423
|
+
};
|
|
424
|
+
var getUint48 = (view, pos) => {
|
|
425
|
+
return shift(view.getUint32(pos + 2, true), 16) + view.getUint16(pos, true);
|
|
426
|
+
};
|
|
427
|
+
var compare = (tz, tx, ty, view, i2) => {
|
|
428
|
+
if (tz !== view.getUint8(i2))
|
|
429
|
+
return tz - view.getUint8(i2);
|
|
430
|
+
const x2 = getUint24(view, i2 + 1);
|
|
431
|
+
if (tx !== x2)
|
|
432
|
+
return tx - x2;
|
|
433
|
+
const y = getUint24(view, i2 + 4);
|
|
434
|
+
if (ty !== y)
|
|
435
|
+
return ty - y;
|
|
436
|
+
return 0;
|
|
437
|
+
};
|
|
438
|
+
var queryLeafdir = (view, z, x2, y) => {
|
|
439
|
+
const offsetLen = queryView(view, z | 128, x2, y);
|
|
440
|
+
if (offsetLen) {
|
|
441
|
+
return {
|
|
442
|
+
z,
|
|
443
|
+
x: x2,
|
|
444
|
+
y,
|
|
445
|
+
offset: offsetLen[0],
|
|
446
|
+
length: offsetLen[1],
|
|
447
|
+
isDir: true
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
return null;
|
|
451
|
+
};
|
|
452
|
+
var queryTile = (view, z, x2, y) => {
|
|
453
|
+
const offsetLen = queryView(view, z, x2, y);
|
|
454
|
+
if (offsetLen) {
|
|
455
|
+
return {
|
|
456
|
+
z,
|
|
457
|
+
x: x2,
|
|
458
|
+
y,
|
|
459
|
+
offset: offsetLen[0],
|
|
460
|
+
length: offsetLen[1],
|
|
461
|
+
isDir: false
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
return null;
|
|
465
|
+
};
|
|
466
|
+
var queryView = (view, z, x2, y) => {
|
|
467
|
+
let m = 0;
|
|
468
|
+
let n = view.byteLength / 17 - 1;
|
|
469
|
+
while (m <= n) {
|
|
470
|
+
const k = n + m >> 1;
|
|
471
|
+
const cmp = compare(z, x2, y, view, k * 17);
|
|
472
|
+
if (cmp > 0) {
|
|
473
|
+
m = k + 1;
|
|
474
|
+
} else if (cmp < 0) {
|
|
475
|
+
n = k - 1;
|
|
476
|
+
} else {
|
|
477
|
+
return [getUint48(view, k * 17 + 7), view.getUint32(k * 17 + 13, true)];
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
return null;
|
|
481
|
+
};
|
|
482
|
+
var entrySort = (a, b) => {
|
|
483
|
+
if (a.isDir && !b.isDir) {
|
|
484
|
+
return 1;
|
|
485
|
+
}
|
|
486
|
+
if (!a.isDir && b.isDir) {
|
|
487
|
+
return -1;
|
|
488
|
+
}
|
|
489
|
+
if (a.z !== b.z) {
|
|
490
|
+
return a.z - b.z;
|
|
491
|
+
}
|
|
492
|
+
if (a.x !== b.x) {
|
|
493
|
+
return a.x - b.x;
|
|
494
|
+
}
|
|
495
|
+
return a.y - b.y;
|
|
496
|
+
};
|
|
497
|
+
var parseEntry = (dataview, i2) => {
|
|
498
|
+
const zRaw = dataview.getUint8(i2 * 17);
|
|
499
|
+
const z = zRaw & 127;
|
|
500
|
+
return {
|
|
501
|
+
z,
|
|
502
|
+
x: getUint24(dataview, i2 * 17 + 1),
|
|
503
|
+
y: getUint24(dataview, i2 * 17 + 4),
|
|
504
|
+
offset: getUint48(dataview, i2 * 17 + 7),
|
|
505
|
+
length: dataview.getUint32(i2 * 17 + 13, true),
|
|
506
|
+
isDir: zRaw >> 7 === 1
|
|
507
|
+
};
|
|
508
|
+
};
|
|
509
|
+
var sortDir = (a) => {
|
|
510
|
+
const entries = [];
|
|
511
|
+
const view = new DataView(a);
|
|
512
|
+
for (let i2 = 0; i2 < view.byteLength / 17; i2++) {
|
|
513
|
+
entries.push(parseEntry(view, i2));
|
|
514
|
+
}
|
|
515
|
+
return createDirectory(entries);
|
|
516
|
+
};
|
|
517
|
+
var createDirectory = (entries) => {
|
|
518
|
+
entries.sort(entrySort);
|
|
519
|
+
const buffer = new ArrayBuffer(17 * entries.length);
|
|
520
|
+
const arr = new Uint8Array(buffer);
|
|
521
|
+
for (let i2 = 0; i2 < entries.length; i2++) {
|
|
522
|
+
const entry = entries[i2];
|
|
523
|
+
let z = entry.z;
|
|
524
|
+
if (entry.isDir)
|
|
525
|
+
z = z | 128;
|
|
526
|
+
arr[i2 * 17] = z;
|
|
527
|
+
arr[i2 * 17 + 1] = entry.x & 255;
|
|
528
|
+
arr[i2 * 17 + 2] = entry.x >> 8 & 255;
|
|
529
|
+
arr[i2 * 17 + 3] = entry.x >> 16 & 255;
|
|
530
|
+
arr[i2 * 17 + 4] = entry.y & 255;
|
|
531
|
+
arr[i2 * 17 + 5] = entry.y >> 8 & 255;
|
|
532
|
+
arr[i2 * 17 + 6] = entry.y >> 16 & 255;
|
|
533
|
+
arr[i2 * 17 + 7] = entry.offset & 255;
|
|
534
|
+
arr[i2 * 17 + 8] = unshift(entry.offset, 8) & 255;
|
|
535
|
+
arr[i2 * 17 + 9] = unshift(entry.offset, 16) & 255;
|
|
536
|
+
arr[i2 * 17 + 10] = unshift(entry.offset, 24) & 255;
|
|
537
|
+
arr[i2 * 17 + 11] = unshift(entry.offset, 32) & 255;
|
|
538
|
+
arr[i2 * 17 + 12] = unshift(entry.offset, 48) & 255;
|
|
539
|
+
arr[i2 * 17 + 13] = entry.length & 255;
|
|
540
|
+
arr[i2 * 17 + 14] = entry.length >> 8 & 255;
|
|
541
|
+
arr[i2 * 17 + 15] = entry.length >> 16 & 255;
|
|
542
|
+
arr[i2 * 17 + 16] = entry.length >> 24 & 255;
|
|
543
|
+
}
|
|
544
|
+
return buffer;
|
|
545
|
+
};
|
|
546
|
+
var deriveLeaf = (view, tile) => {
|
|
547
|
+
if (view.byteLength < 17)
|
|
548
|
+
return null;
|
|
549
|
+
const numEntries = view.byteLength / 17;
|
|
550
|
+
const entry = parseEntry(view, numEntries - 1);
|
|
551
|
+
if (entry.isDir) {
|
|
552
|
+
const leafLevel = entry.z;
|
|
553
|
+
const levelDiff = tile.z - leafLevel;
|
|
554
|
+
const leafX = Math.trunc(tile.x / (1 << levelDiff));
|
|
555
|
+
const leafY = Math.trunc(tile.y / (1 << levelDiff));
|
|
556
|
+
return { z: leafLevel, x: leafX, y: leafY };
|
|
557
|
+
}
|
|
558
|
+
return null;
|
|
559
|
+
};
|
|
560
|
+
function getHeader(source) {
|
|
561
|
+
return __async(this, null, function* () {
|
|
562
|
+
const resp = yield source.getBytes(0, 512e3);
|
|
563
|
+
const dataview = new DataView(resp.data);
|
|
564
|
+
const jsonSize = dataview.getUint32(4, true);
|
|
565
|
+
const rootEntries = dataview.getUint16(8, true);
|
|
566
|
+
const dec = new TextDecoder("utf-8");
|
|
567
|
+
const jsonMetadata = JSON.parse(
|
|
568
|
+
dec.decode(new DataView(resp.data, 10, jsonSize))
|
|
569
|
+
);
|
|
570
|
+
let tileCompression = 0;
|
|
571
|
+
if (jsonMetadata.compression === "gzip") {
|
|
572
|
+
tileCompression = 2;
|
|
573
|
+
}
|
|
574
|
+
let minzoom = 0;
|
|
575
|
+
if ("minzoom" in jsonMetadata) {
|
|
576
|
+
minzoom = +jsonMetadata.minzoom;
|
|
577
|
+
}
|
|
578
|
+
let maxzoom = 0;
|
|
579
|
+
if ("maxzoom" in jsonMetadata) {
|
|
580
|
+
maxzoom = +jsonMetadata.maxzoom;
|
|
581
|
+
}
|
|
582
|
+
let centerLon = 0;
|
|
583
|
+
let centerLat = 0;
|
|
584
|
+
let centerZoom = 0;
|
|
585
|
+
let minLon = -180;
|
|
586
|
+
let minLat = -85;
|
|
587
|
+
let maxLon = 180;
|
|
588
|
+
let maxLat = 85;
|
|
589
|
+
if (jsonMetadata.bounds) {
|
|
590
|
+
const split = jsonMetadata.bounds.split(",");
|
|
591
|
+
minLon = +split[0];
|
|
592
|
+
minLat = +split[1];
|
|
593
|
+
maxLon = +split[2];
|
|
594
|
+
maxLat = +split[3];
|
|
595
|
+
}
|
|
596
|
+
if (jsonMetadata.center) {
|
|
597
|
+
const split = jsonMetadata.center.split(",");
|
|
598
|
+
centerLon = +split[0];
|
|
599
|
+
centerLat = +split[1];
|
|
600
|
+
centerZoom = +split[2];
|
|
601
|
+
}
|
|
602
|
+
const header = {
|
|
603
|
+
specVersion: dataview.getUint16(2, true),
|
|
604
|
+
rootDirectoryOffset: 10 + jsonSize,
|
|
605
|
+
rootDirectoryLength: rootEntries * 17,
|
|
606
|
+
jsonMetadataOffset: 10,
|
|
607
|
+
jsonMetadataLength: jsonSize,
|
|
608
|
+
leafDirectoryOffset: 0,
|
|
609
|
+
leafDirectoryLength: void 0,
|
|
610
|
+
tileDataOffset: 0,
|
|
611
|
+
tileDataLength: void 0,
|
|
612
|
+
numAddressedTiles: 0,
|
|
613
|
+
numTileEntries: 0,
|
|
614
|
+
numTileContents: 0,
|
|
615
|
+
clustered: false,
|
|
616
|
+
internalCompression: 1,
|
|
617
|
+
tileCompression,
|
|
618
|
+
tileType: 1,
|
|
619
|
+
minZoom: minzoom,
|
|
620
|
+
maxZoom: maxzoom,
|
|
621
|
+
minLon,
|
|
622
|
+
minLat,
|
|
623
|
+
maxLon,
|
|
624
|
+
maxLat,
|
|
625
|
+
centerZoom,
|
|
626
|
+
centerLon,
|
|
627
|
+
centerLat,
|
|
628
|
+
etag: resp.etag
|
|
629
|
+
};
|
|
630
|
+
return header;
|
|
631
|
+
});
|
|
632
|
+
}
|
|
633
|
+
function getZxy(header, source, cache, z, x2, y, signal) {
|
|
634
|
+
return __async(this, null, function* () {
|
|
635
|
+
let rootDir = yield cache.getArrayBuffer(
|
|
636
|
+
source,
|
|
637
|
+
header.rootDirectoryOffset,
|
|
638
|
+
header.rootDirectoryLength,
|
|
639
|
+
header
|
|
640
|
+
);
|
|
641
|
+
if (header.specVersion === 1) {
|
|
642
|
+
rootDir = sortDir(rootDir);
|
|
643
|
+
}
|
|
644
|
+
const entry = queryTile(new DataView(rootDir), z, x2, y);
|
|
645
|
+
if (entry) {
|
|
646
|
+
const resp = yield source.getBytes(entry.offset, entry.length, signal);
|
|
647
|
+
let tileData = resp.data;
|
|
648
|
+
const view = new DataView(tileData);
|
|
649
|
+
if (view.getUint8(0) === 31 && view.getUint8(1) === 139) {
|
|
650
|
+
tileData = decompressSync(new Uint8Array(tileData));
|
|
651
|
+
}
|
|
652
|
+
return {
|
|
653
|
+
data: tileData
|
|
654
|
+
};
|
|
655
|
+
}
|
|
656
|
+
const leafcoords = deriveLeaf(new DataView(rootDir), { z, x: x2, y });
|
|
657
|
+
if (leafcoords) {
|
|
658
|
+
const leafdirEntry = queryLeafdir(
|
|
659
|
+
new DataView(rootDir),
|
|
660
|
+
leafcoords.z,
|
|
661
|
+
leafcoords.x,
|
|
662
|
+
leafcoords.y
|
|
663
|
+
);
|
|
664
|
+
if (leafdirEntry) {
|
|
665
|
+
let leafDir = yield cache.getArrayBuffer(
|
|
666
|
+
source,
|
|
667
|
+
leafdirEntry.offset,
|
|
668
|
+
leafdirEntry.length,
|
|
669
|
+
header
|
|
670
|
+
);
|
|
671
|
+
if (header.specVersion === 1) {
|
|
672
|
+
leafDir = sortDir(leafDir);
|
|
673
|
+
}
|
|
674
|
+
const tileEntry = queryTile(new DataView(leafDir), z, x2, y);
|
|
675
|
+
if (tileEntry) {
|
|
676
|
+
const resp = yield source.getBytes(
|
|
677
|
+
tileEntry.offset,
|
|
678
|
+
tileEntry.length,
|
|
679
|
+
signal
|
|
680
|
+
);
|
|
681
|
+
let tileData = resp.data;
|
|
682
|
+
const view = new DataView(tileData);
|
|
683
|
+
if (view.getUint8(0) === 31 && view.getUint8(1) === 139) {
|
|
684
|
+
tileData = decompressSync(new Uint8Array(tileData));
|
|
685
|
+
}
|
|
686
|
+
return {
|
|
687
|
+
data: tileData
|
|
688
|
+
};
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
return void 0;
|
|
693
|
+
});
|
|
694
|
+
}
|
|
695
|
+
var v2_default = {
|
|
696
|
+
getHeader,
|
|
697
|
+
getZxy
|
|
698
|
+
};
|
|
699
|
+
function toNum(low, high) {
|
|
700
|
+
return (high >>> 0) * 4294967296 + (low >>> 0);
|
|
701
|
+
}
|
|
702
|
+
function readVarintRemainder(l, p) {
|
|
703
|
+
const buf = p.buf;
|
|
704
|
+
let b = buf[p.pos++];
|
|
705
|
+
let h = (b & 112) >> 4;
|
|
706
|
+
if (b < 128)
|
|
707
|
+
return toNum(l, h);
|
|
708
|
+
b = buf[p.pos++];
|
|
709
|
+
h |= (b & 127) << 3;
|
|
710
|
+
if (b < 128)
|
|
711
|
+
return toNum(l, h);
|
|
712
|
+
b = buf[p.pos++];
|
|
713
|
+
h |= (b & 127) << 10;
|
|
714
|
+
if (b < 128)
|
|
715
|
+
return toNum(l, h);
|
|
716
|
+
b = buf[p.pos++];
|
|
717
|
+
h |= (b & 127) << 17;
|
|
718
|
+
if (b < 128)
|
|
719
|
+
return toNum(l, h);
|
|
720
|
+
b = buf[p.pos++];
|
|
721
|
+
h |= (b & 127) << 24;
|
|
722
|
+
if (b < 128)
|
|
723
|
+
return toNum(l, h);
|
|
724
|
+
b = buf[p.pos++];
|
|
725
|
+
h |= (b & 1) << 31;
|
|
726
|
+
if (b < 128)
|
|
727
|
+
return toNum(l, h);
|
|
728
|
+
throw new Error("Expected varint not more than 10 bytes");
|
|
729
|
+
}
|
|
730
|
+
function readVarint(p) {
|
|
731
|
+
const buf = p.buf;
|
|
732
|
+
let b = buf[p.pos++];
|
|
733
|
+
let val = b & 127;
|
|
734
|
+
if (b < 128)
|
|
735
|
+
return val;
|
|
736
|
+
b = buf[p.pos++];
|
|
737
|
+
val |= (b & 127) << 7;
|
|
738
|
+
if (b < 128)
|
|
739
|
+
return val;
|
|
740
|
+
b = buf[p.pos++];
|
|
741
|
+
val |= (b & 127) << 14;
|
|
742
|
+
if (b < 128)
|
|
743
|
+
return val;
|
|
744
|
+
b = buf[p.pos++];
|
|
745
|
+
val |= (b & 127) << 21;
|
|
746
|
+
if (b < 128)
|
|
747
|
+
return val;
|
|
748
|
+
b = buf[p.pos];
|
|
749
|
+
val |= (b & 15) << 28;
|
|
750
|
+
return readVarintRemainder(val, p);
|
|
751
|
+
}
|
|
752
|
+
function rotate(n, xy, rx, ry) {
|
|
753
|
+
if (ry === 0) {
|
|
754
|
+
if (rx === 1) {
|
|
755
|
+
xy[0] = n - 1 - xy[0];
|
|
756
|
+
xy[1] = n - 1 - xy[1];
|
|
757
|
+
}
|
|
758
|
+
const t = xy[0];
|
|
759
|
+
xy[0] = xy[1];
|
|
760
|
+
xy[1] = t;
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
var tzValues = [
|
|
764
|
+
0,
|
|
765
|
+
1,
|
|
766
|
+
5,
|
|
767
|
+
21,
|
|
768
|
+
85,
|
|
769
|
+
341,
|
|
770
|
+
1365,
|
|
771
|
+
5461,
|
|
772
|
+
21845,
|
|
773
|
+
87381,
|
|
774
|
+
349525,
|
|
775
|
+
1398101,
|
|
776
|
+
5592405,
|
|
777
|
+
22369621,
|
|
778
|
+
89478485,
|
|
779
|
+
357913941,
|
|
780
|
+
1431655765,
|
|
781
|
+
5726623061,
|
|
782
|
+
22906492245,
|
|
783
|
+
91625968981,
|
|
784
|
+
366503875925,
|
|
785
|
+
1466015503701,
|
|
786
|
+
5864062014805,
|
|
787
|
+
23456248059221,
|
|
788
|
+
93824992236885,
|
|
789
|
+
375299968947541,
|
|
790
|
+
1501199875790165
|
|
791
|
+
];
|
|
792
|
+
function zxyToTileId(z, x2, y) {
|
|
793
|
+
if (z > 26) {
|
|
794
|
+
throw Error("Tile zoom level exceeds max safe number limit (26)");
|
|
795
|
+
}
|
|
796
|
+
if (x2 > __pow(2, z) - 1 || y > __pow(2, z) - 1) {
|
|
797
|
+
throw Error("tile x/y outside zoom level bounds");
|
|
798
|
+
}
|
|
799
|
+
const acc = tzValues[z];
|
|
800
|
+
const n = __pow(2, z);
|
|
801
|
+
let rx = 0;
|
|
802
|
+
let ry = 0;
|
|
803
|
+
let d = 0;
|
|
804
|
+
const xy = [x2, y];
|
|
805
|
+
let s = n / 2;
|
|
806
|
+
while (s > 0) {
|
|
807
|
+
rx = (xy[0] & s) > 0 ? 1 : 0;
|
|
808
|
+
ry = (xy[1] & s) > 0 ? 1 : 0;
|
|
809
|
+
d += s * s * (3 * rx ^ ry);
|
|
810
|
+
rotate(s, xy, rx, ry);
|
|
811
|
+
s = s / 2;
|
|
812
|
+
}
|
|
813
|
+
return acc + d;
|
|
814
|
+
}
|
|
815
|
+
function defaultDecompress(buf, compression) {
|
|
816
|
+
return __async(this, null, function* () {
|
|
817
|
+
if (compression === 1 || compression === 0) {
|
|
818
|
+
return buf;
|
|
819
|
+
}
|
|
820
|
+
if (compression === 2) {
|
|
821
|
+
if (typeof globalThis.DecompressionStream === "undefined") {
|
|
822
|
+
return decompressSync(new Uint8Array(buf));
|
|
823
|
+
}
|
|
824
|
+
const stream = new Response(buf).body;
|
|
825
|
+
if (!stream) {
|
|
826
|
+
throw Error("Failed to read response stream");
|
|
827
|
+
}
|
|
828
|
+
const result = stream.pipeThrough(
|
|
829
|
+
// biome-ignore lint: needed to detect DecompressionStream in browser+node+cloudflare workers
|
|
830
|
+
new globalThis.DecompressionStream("gzip")
|
|
831
|
+
);
|
|
832
|
+
return new Response(result).arrayBuffer();
|
|
833
|
+
}
|
|
834
|
+
throw Error("Compression method not supported");
|
|
835
|
+
});
|
|
836
|
+
}
|
|
837
|
+
function tileTypeExt(t) {
|
|
838
|
+
if (t === 1)
|
|
839
|
+
return ".mvt";
|
|
840
|
+
if (t === 2)
|
|
841
|
+
return ".png";
|
|
842
|
+
if (t === 3)
|
|
843
|
+
return ".jpg";
|
|
844
|
+
if (t === 4)
|
|
845
|
+
return ".webp";
|
|
846
|
+
if (t === 5)
|
|
847
|
+
return ".avif";
|
|
848
|
+
return "";
|
|
849
|
+
}
|
|
850
|
+
var HEADER_SIZE_BYTES = 127;
|
|
851
|
+
function findTile(entries, tileId) {
|
|
852
|
+
let m = 0;
|
|
853
|
+
let n = entries.length - 1;
|
|
854
|
+
while (m <= n) {
|
|
855
|
+
const k = n + m >> 1;
|
|
856
|
+
const cmp = tileId - entries[k].tileId;
|
|
857
|
+
if (cmp > 0) {
|
|
858
|
+
m = k + 1;
|
|
859
|
+
} else if (cmp < 0) {
|
|
860
|
+
n = k - 1;
|
|
861
|
+
} else {
|
|
862
|
+
return entries[k];
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
if (n >= 0) {
|
|
866
|
+
if (entries[n].runLength === 0) {
|
|
867
|
+
return entries[n];
|
|
868
|
+
}
|
|
869
|
+
if (tileId - entries[n].tileId < entries[n].runLength) {
|
|
870
|
+
return entries[n];
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
return null;
|
|
874
|
+
}
|
|
875
|
+
var FetchSource = class {
|
|
876
|
+
constructor(url, customHeaders = new Headers()) {
|
|
877
|
+
this.url = url;
|
|
878
|
+
this.customHeaders = customHeaders;
|
|
879
|
+
this.mustReload = false;
|
|
880
|
+
let userAgent = "";
|
|
881
|
+
if ("navigator" in globalThis) {
|
|
882
|
+
userAgent = globalThis.navigator.userAgent || "";
|
|
883
|
+
}
|
|
884
|
+
const isWindows = userAgent.indexOf("Windows") > -1;
|
|
885
|
+
const isChromiumBased = /Chrome|Chromium|Edg|OPR|Brave/.test(userAgent);
|
|
886
|
+
this.chromeWindowsNoCache = false;
|
|
887
|
+
if (isWindows && isChromiumBased) {
|
|
888
|
+
this.chromeWindowsNoCache = true;
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
getKey() {
|
|
892
|
+
return this.url;
|
|
893
|
+
}
|
|
894
|
+
/**
|
|
895
|
+
* Mutate the custom [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers) set for all requests to the remote archive.
|
|
896
|
+
*/
|
|
897
|
+
setHeaders(customHeaders) {
|
|
898
|
+
this.customHeaders = customHeaders;
|
|
899
|
+
}
|
|
900
|
+
getBytes(offset, length, passedSignal, etag) {
|
|
901
|
+
return __async(this, null, function* () {
|
|
902
|
+
let controller;
|
|
903
|
+
let signal;
|
|
904
|
+
if (passedSignal) {
|
|
905
|
+
signal = passedSignal;
|
|
906
|
+
} else {
|
|
907
|
+
controller = new AbortController();
|
|
908
|
+
signal = controller.signal;
|
|
909
|
+
}
|
|
910
|
+
const requestHeaders = new Headers(this.customHeaders);
|
|
911
|
+
requestHeaders.set("range", `bytes=${offset}-${offset + length - 1}`);
|
|
912
|
+
let cache;
|
|
913
|
+
if (this.mustReload) {
|
|
914
|
+
cache = "reload";
|
|
915
|
+
} else if (this.chromeWindowsNoCache) {
|
|
916
|
+
cache = "no-store";
|
|
917
|
+
}
|
|
918
|
+
let resp = yield fetch(this.url, {
|
|
919
|
+
signal,
|
|
920
|
+
cache,
|
|
921
|
+
headers: requestHeaders
|
|
922
|
+
//biome-ignore lint: "cache" is incompatible between cloudflare workers and browser
|
|
923
|
+
});
|
|
924
|
+
if (offset === 0 && resp.status === 416) {
|
|
925
|
+
const contentRange = resp.headers.get("Content-Range");
|
|
926
|
+
if (!contentRange || !contentRange.startsWith("bytes */")) {
|
|
927
|
+
throw Error("Missing content-length on 416 response");
|
|
928
|
+
}
|
|
929
|
+
const actualLength = +contentRange.substr(8);
|
|
930
|
+
resp = yield fetch(this.url, {
|
|
931
|
+
signal,
|
|
932
|
+
cache: "reload",
|
|
933
|
+
headers: { range: `bytes=0-${actualLength - 1}` }
|
|
934
|
+
//biome-ignore lint: "cache" is incompatible between cloudflare workers and browser
|
|
935
|
+
});
|
|
936
|
+
}
|
|
937
|
+
let newEtag = resp.headers.get("Etag");
|
|
938
|
+
if (newEtag == null ? void 0 : newEtag.startsWith("W/")) {
|
|
939
|
+
newEtag = null;
|
|
940
|
+
}
|
|
941
|
+
if (resp.status === 416 || etag && newEtag && newEtag !== etag) {
|
|
942
|
+
this.mustReload = true;
|
|
943
|
+
throw new EtagMismatch(
|
|
944
|
+
`Server returned non-matching ETag ${etag} after one retry. Check browser extensions and servers for issues that may affect correct ETag headers.`
|
|
945
|
+
);
|
|
946
|
+
}
|
|
947
|
+
if (resp.status >= 300) {
|
|
948
|
+
throw Error(`Bad response code: ${resp.status}`);
|
|
949
|
+
}
|
|
950
|
+
const contentLength = resp.headers.get("Content-Length");
|
|
951
|
+
if (resp.status === 200 && (!contentLength || +contentLength > length)) {
|
|
952
|
+
if (controller)
|
|
953
|
+
controller.abort();
|
|
954
|
+
throw Error(
|
|
955
|
+
"Server returned no content-length header or content-length exceeding request. Check that your storage backend supports HTTP Byte Serving."
|
|
956
|
+
);
|
|
957
|
+
}
|
|
958
|
+
const a = yield resp.arrayBuffer();
|
|
959
|
+
return {
|
|
960
|
+
data: a,
|
|
961
|
+
etag: newEtag || void 0,
|
|
962
|
+
cacheControl: resp.headers.get("Cache-Control") || void 0,
|
|
963
|
+
expires: resp.headers.get("Expires") || void 0
|
|
964
|
+
};
|
|
965
|
+
});
|
|
966
|
+
}
|
|
967
|
+
};
|
|
968
|
+
function getUint64(v, offset) {
|
|
969
|
+
const wh = v.getUint32(offset + 4, true);
|
|
970
|
+
const wl = v.getUint32(offset + 0, true);
|
|
971
|
+
return wh * __pow(2, 32) + wl;
|
|
972
|
+
}
|
|
973
|
+
function bytesToHeader(bytes, etag) {
|
|
974
|
+
const v = new DataView(bytes);
|
|
975
|
+
const specVersion = v.getUint8(7);
|
|
976
|
+
if (specVersion > 3) {
|
|
977
|
+
throw Error(
|
|
978
|
+
`Archive is spec version ${specVersion} but this library supports up to spec version 3`
|
|
979
|
+
);
|
|
980
|
+
}
|
|
981
|
+
return {
|
|
982
|
+
specVersion,
|
|
983
|
+
rootDirectoryOffset: getUint64(v, 8),
|
|
984
|
+
rootDirectoryLength: getUint64(v, 16),
|
|
985
|
+
jsonMetadataOffset: getUint64(v, 24),
|
|
986
|
+
jsonMetadataLength: getUint64(v, 32),
|
|
987
|
+
leafDirectoryOffset: getUint64(v, 40),
|
|
988
|
+
leafDirectoryLength: getUint64(v, 48),
|
|
989
|
+
tileDataOffset: getUint64(v, 56),
|
|
990
|
+
tileDataLength: getUint64(v, 64),
|
|
991
|
+
numAddressedTiles: getUint64(v, 72),
|
|
992
|
+
numTileEntries: getUint64(v, 80),
|
|
993
|
+
numTileContents: getUint64(v, 88),
|
|
994
|
+
clustered: v.getUint8(96) === 1,
|
|
995
|
+
internalCompression: v.getUint8(97),
|
|
996
|
+
tileCompression: v.getUint8(98),
|
|
997
|
+
tileType: v.getUint8(99),
|
|
998
|
+
minZoom: v.getUint8(100),
|
|
999
|
+
maxZoom: v.getUint8(101),
|
|
1000
|
+
minLon: v.getInt32(102, true) / 1e7,
|
|
1001
|
+
minLat: v.getInt32(106, true) / 1e7,
|
|
1002
|
+
maxLon: v.getInt32(110, true) / 1e7,
|
|
1003
|
+
maxLat: v.getInt32(114, true) / 1e7,
|
|
1004
|
+
centerZoom: v.getUint8(118),
|
|
1005
|
+
centerLon: v.getInt32(119, true) / 1e7,
|
|
1006
|
+
centerLat: v.getInt32(123, true) / 1e7,
|
|
1007
|
+
etag
|
|
1008
|
+
};
|
|
1009
|
+
}
|
|
1010
|
+
function deserializeIndex(buffer) {
|
|
1011
|
+
const p = { buf: new Uint8Array(buffer), pos: 0 };
|
|
1012
|
+
const numEntries = readVarint(p);
|
|
1013
|
+
const entries = [];
|
|
1014
|
+
let lastId = 0;
|
|
1015
|
+
for (let i2 = 0; i2 < numEntries; i2++) {
|
|
1016
|
+
const v = readVarint(p);
|
|
1017
|
+
entries.push({ tileId: lastId + v, offset: 0, length: 0, runLength: 1 });
|
|
1018
|
+
lastId += v;
|
|
1019
|
+
}
|
|
1020
|
+
for (let i2 = 0; i2 < numEntries; i2++) {
|
|
1021
|
+
entries[i2].runLength = readVarint(p);
|
|
1022
|
+
}
|
|
1023
|
+
for (let i2 = 0; i2 < numEntries; i2++) {
|
|
1024
|
+
entries[i2].length = readVarint(p);
|
|
1025
|
+
}
|
|
1026
|
+
for (let i2 = 0; i2 < numEntries; i2++) {
|
|
1027
|
+
const v = readVarint(p);
|
|
1028
|
+
if (v === 0 && i2 > 0) {
|
|
1029
|
+
entries[i2].offset = entries[i2 - 1].offset + entries[i2 - 1].length;
|
|
1030
|
+
} else {
|
|
1031
|
+
entries[i2].offset = v - 1;
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
return entries;
|
|
1035
|
+
}
|
|
1036
|
+
function detectVersion(a) {
|
|
1037
|
+
const v = new DataView(a);
|
|
1038
|
+
if (v.getUint16(2, true) === 2) {
|
|
1039
|
+
console.warn(
|
|
1040
|
+
"PMTiles spec version 2 has been deprecated; please see github.com/protomaps/PMTiles for tools to upgrade"
|
|
1041
|
+
);
|
|
1042
|
+
return 2;
|
|
1043
|
+
}
|
|
1044
|
+
if (v.getUint16(2, true) === 1) {
|
|
1045
|
+
console.warn(
|
|
1046
|
+
"PMTiles spec version 1 has been deprecated; please see github.com/protomaps/PMTiles for tools to upgrade"
|
|
1047
|
+
);
|
|
1048
|
+
return 1;
|
|
1049
|
+
}
|
|
1050
|
+
return 3;
|
|
1051
|
+
}
|
|
1052
|
+
var EtagMismatch = class extends Error {
|
|
1053
|
+
};
|
|
1054
|
+
function getHeaderAndRoot(source, decompress) {
|
|
1055
|
+
return __async(this, null, function* () {
|
|
1056
|
+
const resp = yield source.getBytes(0, 16384);
|
|
1057
|
+
const v = new DataView(resp.data);
|
|
1058
|
+
if (v.getUint16(0, true) !== 19792) {
|
|
1059
|
+
throw new Error("Wrong magic number for PMTiles archive");
|
|
1060
|
+
}
|
|
1061
|
+
if (detectVersion(resp.data) < 3) {
|
|
1062
|
+
return [yield v2_default.getHeader(source)];
|
|
1063
|
+
}
|
|
1064
|
+
const headerData = resp.data.slice(0, HEADER_SIZE_BYTES);
|
|
1065
|
+
const header = bytesToHeader(headerData, resp.etag);
|
|
1066
|
+
const rootDirData = resp.data.slice(
|
|
1067
|
+
header.rootDirectoryOffset,
|
|
1068
|
+
header.rootDirectoryOffset + header.rootDirectoryLength
|
|
1069
|
+
);
|
|
1070
|
+
const dirKey = `${source.getKey()}|${header.etag || ""}|${header.rootDirectoryOffset}|${header.rootDirectoryLength}`;
|
|
1071
|
+
const rootDir = deserializeIndex(
|
|
1072
|
+
yield decompress(rootDirData, header.internalCompression)
|
|
1073
|
+
);
|
|
1074
|
+
return [header, [dirKey, rootDir.length, rootDir]];
|
|
1075
|
+
});
|
|
1076
|
+
}
|
|
1077
|
+
function getDirectory(source, decompress, offset, length, header) {
|
|
1078
|
+
return __async(this, null, function* () {
|
|
1079
|
+
const resp = yield source.getBytes(offset, length, void 0, header.etag);
|
|
1080
|
+
const data = yield decompress(resp.data, header.internalCompression);
|
|
1081
|
+
const directory = deserializeIndex(data);
|
|
1082
|
+
if (directory.length === 0) {
|
|
1083
|
+
throw new Error("Empty directory is invalid");
|
|
1084
|
+
}
|
|
1085
|
+
return directory;
|
|
1086
|
+
});
|
|
1087
|
+
}
|
|
1088
|
+
var SharedPromiseCache = class {
|
|
1089
|
+
constructor(maxCacheEntries = 100, prefetch = true, decompress = defaultDecompress) {
|
|
1090
|
+
this.cache = /* @__PURE__ */ new Map();
|
|
1091
|
+
this.invalidations = /* @__PURE__ */ new Map();
|
|
1092
|
+
this.maxCacheEntries = maxCacheEntries;
|
|
1093
|
+
this.counter = 1;
|
|
1094
|
+
this.decompress = decompress;
|
|
1095
|
+
}
|
|
1096
|
+
getHeader(source) {
|
|
1097
|
+
return __async(this, null, function* () {
|
|
1098
|
+
const cacheKey = source.getKey();
|
|
1099
|
+
const cacheValue = this.cache.get(cacheKey);
|
|
1100
|
+
if (cacheValue) {
|
|
1101
|
+
cacheValue.lastUsed = this.counter++;
|
|
1102
|
+
const data = yield cacheValue.data;
|
|
1103
|
+
return data;
|
|
1104
|
+
}
|
|
1105
|
+
const p = new Promise((resolve, reject) => {
|
|
1106
|
+
getHeaderAndRoot(source, this.decompress).then((res) => {
|
|
1107
|
+
if (res[1]) {
|
|
1108
|
+
this.cache.set(res[1][0], {
|
|
1109
|
+
lastUsed: this.counter++,
|
|
1110
|
+
data: Promise.resolve(res[1][2])
|
|
1111
|
+
});
|
|
1112
|
+
}
|
|
1113
|
+
resolve(res[0]);
|
|
1114
|
+
this.prune();
|
|
1115
|
+
}).catch((e) => {
|
|
1116
|
+
reject(e);
|
|
1117
|
+
});
|
|
1118
|
+
});
|
|
1119
|
+
this.cache.set(cacheKey, { lastUsed: this.counter++, data: p });
|
|
1120
|
+
return p;
|
|
1121
|
+
});
|
|
1122
|
+
}
|
|
1123
|
+
getDirectory(source, offset, length, header) {
|
|
1124
|
+
return __async(this, null, function* () {
|
|
1125
|
+
const cacheKey = `${source.getKey()}|${header.etag || ""}|${offset}|${length}`;
|
|
1126
|
+
const cacheValue = this.cache.get(cacheKey);
|
|
1127
|
+
if (cacheValue) {
|
|
1128
|
+
cacheValue.lastUsed = this.counter++;
|
|
1129
|
+
const data = yield cacheValue.data;
|
|
1130
|
+
return data;
|
|
1131
|
+
}
|
|
1132
|
+
const p = new Promise((resolve, reject) => {
|
|
1133
|
+
getDirectory(source, this.decompress, offset, length, header).then((directory) => {
|
|
1134
|
+
resolve(directory);
|
|
1135
|
+
this.prune();
|
|
1136
|
+
}).catch((e) => {
|
|
1137
|
+
reject(e);
|
|
1138
|
+
});
|
|
1139
|
+
});
|
|
1140
|
+
this.cache.set(cacheKey, { lastUsed: this.counter++, data: p });
|
|
1141
|
+
return p;
|
|
1142
|
+
});
|
|
1143
|
+
}
|
|
1144
|
+
// for v2 backwards compatibility
|
|
1145
|
+
getArrayBuffer(source, offset, length, header) {
|
|
1146
|
+
return __async(this, null, function* () {
|
|
1147
|
+
const cacheKey = `${source.getKey()}|${header.etag || ""}|${offset}|${length}`;
|
|
1148
|
+
const cacheValue = this.cache.get(cacheKey);
|
|
1149
|
+
if (cacheValue) {
|
|
1150
|
+
cacheValue.lastUsed = this.counter++;
|
|
1151
|
+
const data = yield cacheValue.data;
|
|
1152
|
+
return data;
|
|
1153
|
+
}
|
|
1154
|
+
const p = new Promise((resolve, reject) => {
|
|
1155
|
+
source.getBytes(offset, length, void 0, header.etag).then((resp) => {
|
|
1156
|
+
resolve(resp.data);
|
|
1157
|
+
if (this.cache.has(cacheKey)) ;
|
|
1158
|
+
this.prune();
|
|
1159
|
+
}).catch((e) => {
|
|
1160
|
+
reject(e);
|
|
1161
|
+
});
|
|
1162
|
+
});
|
|
1163
|
+
this.cache.set(cacheKey, { lastUsed: this.counter++, data: p });
|
|
1164
|
+
return p;
|
|
1165
|
+
});
|
|
1166
|
+
}
|
|
1167
|
+
prune() {
|
|
1168
|
+
if (this.cache.size >= this.maxCacheEntries) {
|
|
1169
|
+
let minUsed = Infinity;
|
|
1170
|
+
let minKey = void 0;
|
|
1171
|
+
this.cache.forEach((cacheValue, key) => {
|
|
1172
|
+
if (cacheValue.lastUsed < minUsed) {
|
|
1173
|
+
minUsed = cacheValue.lastUsed;
|
|
1174
|
+
minKey = key;
|
|
1175
|
+
}
|
|
1176
|
+
});
|
|
1177
|
+
if (minKey) {
|
|
1178
|
+
this.cache.delete(minKey);
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
}
|
|
1182
|
+
invalidate(source) {
|
|
1183
|
+
return __async(this, null, function* () {
|
|
1184
|
+
const key = source.getKey();
|
|
1185
|
+
if (this.invalidations.get(key)) {
|
|
1186
|
+
return yield this.invalidations.get(key);
|
|
1187
|
+
}
|
|
1188
|
+
this.cache.delete(source.getKey());
|
|
1189
|
+
const p = new Promise((resolve, reject) => {
|
|
1190
|
+
this.getHeader(source).then((h) => {
|
|
1191
|
+
resolve();
|
|
1192
|
+
this.invalidations.delete(key);
|
|
1193
|
+
}).catch((e) => {
|
|
1194
|
+
reject(e);
|
|
1195
|
+
});
|
|
1196
|
+
});
|
|
1197
|
+
this.invalidations.set(key, p);
|
|
1198
|
+
});
|
|
1199
|
+
}
|
|
1200
|
+
};
|
|
1201
|
+
var PMTiles = class {
|
|
1202
|
+
constructor(source, cache, decompress) {
|
|
1203
|
+
if (typeof source === "string") {
|
|
1204
|
+
this.source = new FetchSource(source);
|
|
1205
|
+
} else {
|
|
1206
|
+
this.source = source;
|
|
1207
|
+
}
|
|
1208
|
+
if (decompress) {
|
|
1209
|
+
this.decompress = decompress;
|
|
1210
|
+
} else {
|
|
1211
|
+
this.decompress = defaultDecompress;
|
|
1212
|
+
}
|
|
1213
|
+
if (cache) {
|
|
1214
|
+
this.cache = cache;
|
|
1215
|
+
} else {
|
|
1216
|
+
this.cache = new SharedPromiseCache();
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
/**
|
|
1220
|
+
* Return the header of the archive,
|
|
1221
|
+
* including information such as tile type, min/max zoom, bounds, and summary statistics.
|
|
1222
|
+
*/
|
|
1223
|
+
getHeader() {
|
|
1224
|
+
return __async(this, null, function* () {
|
|
1225
|
+
return yield this.cache.getHeader(this.source);
|
|
1226
|
+
});
|
|
1227
|
+
}
|
|
1228
|
+
/** @hidden */
|
|
1229
|
+
getZxyAttempt(z, x2, y, signal) {
|
|
1230
|
+
return __async(this, null, function* () {
|
|
1231
|
+
const tileId = zxyToTileId(z, x2, y);
|
|
1232
|
+
const header = yield this.cache.getHeader(this.source);
|
|
1233
|
+
if (header.specVersion < 3) {
|
|
1234
|
+
return v2_default.getZxy(header, this.source, this.cache, z, x2, y, signal);
|
|
1235
|
+
}
|
|
1236
|
+
if (z < header.minZoom || z > header.maxZoom) {
|
|
1237
|
+
return void 0;
|
|
1238
|
+
}
|
|
1239
|
+
let dO = header.rootDirectoryOffset;
|
|
1240
|
+
let dL = header.rootDirectoryLength;
|
|
1241
|
+
for (let depth = 0; depth <= 3; depth++) {
|
|
1242
|
+
const directory = yield this.cache.getDirectory(
|
|
1243
|
+
this.source,
|
|
1244
|
+
dO,
|
|
1245
|
+
dL,
|
|
1246
|
+
header
|
|
1247
|
+
);
|
|
1248
|
+
const entry = findTile(directory, tileId);
|
|
1249
|
+
if (entry) {
|
|
1250
|
+
if (entry.runLength > 0) {
|
|
1251
|
+
const resp = yield this.source.getBytes(
|
|
1252
|
+
header.tileDataOffset + entry.offset,
|
|
1253
|
+
entry.length,
|
|
1254
|
+
signal,
|
|
1255
|
+
header.etag
|
|
1256
|
+
);
|
|
1257
|
+
return {
|
|
1258
|
+
data: yield this.decompress(resp.data, header.tileCompression),
|
|
1259
|
+
cacheControl: resp.cacheControl,
|
|
1260
|
+
expires: resp.expires
|
|
1261
|
+
};
|
|
1262
|
+
}
|
|
1263
|
+
dO = header.leafDirectoryOffset + entry.offset;
|
|
1264
|
+
dL = entry.length;
|
|
1265
|
+
} else {
|
|
1266
|
+
return void 0;
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
throw Error("Maximum directory depth exceeded");
|
|
1270
|
+
});
|
|
1271
|
+
}
|
|
1272
|
+
/**
|
|
1273
|
+
* Primary method to get a single tile's bytes from an archive.
|
|
1274
|
+
*
|
|
1275
|
+
* Returns undefined if the tile does not exist in the archive.
|
|
1276
|
+
*/
|
|
1277
|
+
getZxy(z, x2, y, signal) {
|
|
1278
|
+
return __async(this, null, function* () {
|
|
1279
|
+
try {
|
|
1280
|
+
return yield this.getZxyAttempt(z, x2, y, signal);
|
|
1281
|
+
} catch (e) {
|
|
1282
|
+
if (e instanceof EtagMismatch) {
|
|
1283
|
+
this.cache.invalidate(this.source);
|
|
1284
|
+
return yield this.getZxyAttempt(z, x2, y, signal);
|
|
1285
|
+
}
|
|
1286
|
+
throw e;
|
|
1287
|
+
}
|
|
1288
|
+
});
|
|
1289
|
+
}
|
|
1290
|
+
/** @hidden */
|
|
1291
|
+
getMetadataAttempt() {
|
|
1292
|
+
return __async(this, null, function* () {
|
|
1293
|
+
const header = yield this.cache.getHeader(this.source);
|
|
1294
|
+
const resp = yield this.source.getBytes(
|
|
1295
|
+
header.jsonMetadataOffset,
|
|
1296
|
+
header.jsonMetadataLength,
|
|
1297
|
+
void 0,
|
|
1298
|
+
header.etag
|
|
1299
|
+
);
|
|
1300
|
+
const decompressed = yield this.decompress(
|
|
1301
|
+
resp.data,
|
|
1302
|
+
header.internalCompression
|
|
1303
|
+
);
|
|
1304
|
+
const dec = new TextDecoder("utf-8");
|
|
1305
|
+
return JSON.parse(dec.decode(decompressed));
|
|
1306
|
+
});
|
|
1307
|
+
}
|
|
1308
|
+
/**
|
|
1309
|
+
* Return the arbitrary JSON metadata of the archive.
|
|
1310
|
+
*/
|
|
1311
|
+
getMetadata() {
|
|
1312
|
+
return __async(this, null, function* () {
|
|
1313
|
+
try {
|
|
1314
|
+
return yield this.getMetadataAttempt();
|
|
1315
|
+
} catch (e) {
|
|
1316
|
+
if (e instanceof EtagMismatch) {
|
|
1317
|
+
this.cache.invalidate(this.source);
|
|
1318
|
+
return yield this.getMetadataAttempt();
|
|
1319
|
+
}
|
|
1320
|
+
throw e;
|
|
1321
|
+
}
|
|
1322
|
+
});
|
|
1323
|
+
}
|
|
1324
|
+
/**
|
|
1325
|
+
* Construct a [TileJSON](https://github.com/mapbox/tilejson-spec) object.
|
|
1326
|
+
*
|
|
1327
|
+
* baseTilesUrl is the desired tiles URL, excluding the suffix `/{z}/{x}/{y}.{ext}`.
|
|
1328
|
+
* For example, if the desired URL is `http://example.com/tileset/{z}/{x}/{y}.mvt`,
|
|
1329
|
+
* the baseTilesUrl should be `https://example.com/tileset`.
|
|
1330
|
+
*/
|
|
1331
|
+
getTileJson(baseTilesUrl) {
|
|
1332
|
+
return __async(this, null, function* () {
|
|
1333
|
+
const header = yield this.getHeader();
|
|
1334
|
+
const metadata = yield this.getMetadata();
|
|
1335
|
+
const ext = tileTypeExt(header.tileType);
|
|
1336
|
+
return {
|
|
1337
|
+
tilejson: "3.0.0",
|
|
1338
|
+
scheme: "xyz",
|
|
1339
|
+
tiles: [`${baseTilesUrl}/{z}/{x}/{y}${ext}`],
|
|
1340
|
+
// biome-ignore lint: TileJSON spec
|
|
1341
|
+
vector_layers: metadata.vector_layers,
|
|
1342
|
+
attribution: metadata.attribution,
|
|
1343
|
+
description: metadata.description,
|
|
1344
|
+
name: metadata.name,
|
|
1345
|
+
version: metadata.version,
|
|
1346
|
+
bounds: [header.minLon, header.minLat, header.maxLon, header.maxLat],
|
|
1347
|
+
center: [header.centerLon, header.centerLat, header.centerZoom],
|
|
1348
|
+
minzoom: header.minZoom,
|
|
1349
|
+
maxzoom: header.maxZoom
|
|
1350
|
+
};
|
|
1351
|
+
});
|
|
1352
|
+
}
|
|
1353
|
+
};
|
|
1354
|
+
export {
|
|
1355
|
+
EtagMismatch,
|
|
1356
|
+
FetchSource,
|
|
1357
|
+
PMTiles,
|
|
1358
|
+
SharedPromiseCache,
|
|
1359
|
+
bytesToHeader,
|
|
1360
|
+
findTile,
|
|
1361
|
+
getUint64,
|
|
1362
|
+
readVarint,
|
|
1363
|
+
tileTypeExt,
|
|
1364
|
+
zxyToTileId
|
|
1365
|
+
};
|
|
1366
|
+
//# sourceMappingURL=index.js.map
|