hoodini-viz 0.1.0

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.
@@ -0,0 +1,1862 @@
1
+ const le = [
2
+ "BOOLEAN",
3
+ "INT32",
4
+ "INT64",
5
+ "INT96",
6
+ // deprecated
7
+ "FLOAT",
8
+ "DOUBLE",
9
+ "BYTE_ARRAY",
10
+ "FIXED_LEN_BYTE_ARRAY"
11
+ ], O = [
12
+ "PLAIN",
13
+ "GROUP_VAR_INT",
14
+ // deprecated
15
+ "PLAIN_DICTIONARY",
16
+ "RLE",
17
+ "BIT_PACKED",
18
+ // deprecated
19
+ "DELTA_BINARY_PACKED",
20
+ "DELTA_LENGTH_BYTE_ARRAY",
21
+ "DELTA_BYTE_ARRAY",
22
+ "RLE_DICTIONARY",
23
+ "BYTE_STREAM_SPLIT"
24
+ ], Ve = [
25
+ "REQUIRED",
26
+ "OPTIONAL",
27
+ "REPEATED"
28
+ ], je = [
29
+ "UTF8",
30
+ "MAP",
31
+ "MAP_KEY_VALUE",
32
+ "LIST",
33
+ "ENUM",
34
+ "DECIMAL",
35
+ "DATE",
36
+ "TIME_MILLIS",
37
+ "TIME_MICROS",
38
+ "TIMESTAMP_MILLIS",
39
+ "TIMESTAMP_MICROS",
40
+ "UINT_8",
41
+ "UINT_16",
42
+ "UINT_32",
43
+ "UINT_64",
44
+ "INT_8",
45
+ "INT_16",
46
+ "INT_32",
47
+ "INT_64",
48
+ "JSON",
49
+ "BSON",
50
+ "INTERVAL"
51
+ ], ze = [
52
+ "UNCOMPRESSED",
53
+ "SNAPPY",
54
+ "GZIP",
55
+ "LZO",
56
+ "BROTLI",
57
+ "LZ4",
58
+ "ZSTD",
59
+ "LZ4_RAW"
60
+ ], ve = [
61
+ "DATA_PAGE",
62
+ "INDEX_PAGE",
63
+ "DICTIONARY_PAGE",
64
+ "DATA_PAGE_V2"
65
+ ], We = [
66
+ "UNORDERED",
67
+ "ASCENDING",
68
+ "DESCENDING"
69
+ ], He = [
70
+ "SPHERICAL",
71
+ "VINCENTY",
72
+ "THOMAS",
73
+ "ANDOYER",
74
+ "KARNEY"
75
+ ];
76
+ function J(e) {
77
+ const t = Y(e);
78
+ if (t.type === 1)
79
+ return { type: "Point", coordinates: X(e, t) };
80
+ if (t.type === 2)
81
+ return { type: "LineString", coordinates: ee(e, t) };
82
+ if (t.type === 3)
83
+ return { type: "Polygon", coordinates: ce(e, t) };
84
+ if (t.type === 4) {
85
+ const n = [];
86
+ for (let i = 0; i < t.count; i++)
87
+ n.push(X(e, Y(e)));
88
+ return { type: "MultiPoint", coordinates: n };
89
+ } else if (t.type === 5) {
90
+ const n = [];
91
+ for (let i = 0; i < t.count; i++)
92
+ n.push(ee(e, Y(e)));
93
+ return { type: "MultiLineString", coordinates: n };
94
+ } else if (t.type === 6) {
95
+ const n = [];
96
+ for (let i = 0; i < t.count; i++)
97
+ n.push(ce(e, Y(e)));
98
+ return { type: "MultiPolygon", coordinates: n };
99
+ } else if (t.type === 7) {
100
+ const n = [];
101
+ for (let i = 0; i < t.count; i++)
102
+ n.push(J(e));
103
+ return { type: "GeometryCollection", geometries: n };
104
+ } else
105
+ throw new Error(`Unsupported geometry type: ${t.type}`);
106
+ }
107
+ function Y(e) {
108
+ const { view: t } = e, n = t.getUint8(e.offset++) === 1, i = t.getUint32(e.offset, n);
109
+ e.offset += 4;
110
+ const f = i % 1e3, r = Math.floor(i / 1e3);
111
+ let s = 0;
112
+ f > 1 && f <= 7 && (s = t.getUint32(e.offset, n), e.offset += 4);
113
+ let o = 2;
114
+ return r && o++, r === 3 && o++, { littleEndian: n, type: f, dim: o, count: s };
115
+ }
116
+ function X(e, t) {
117
+ const n = [];
118
+ for (let i = 0; i < t.dim; i++) {
119
+ const f = e.view.getFloat64(e.offset, t.littleEndian);
120
+ e.offset += 8, n.push(f);
121
+ }
122
+ return n;
123
+ }
124
+ function ee(e, t) {
125
+ const n = [];
126
+ for (let i = 0; i < t.count; i++)
127
+ n.push(X(e, t));
128
+ return n;
129
+ }
130
+ function ce(e, t) {
131
+ const { view: n } = e, i = [];
132
+ for (let f = 0; f < t.count; f++) {
133
+ const r = n.getUint32(e.offset, t.littleEndian);
134
+ e.offset += 4, i.push(ee(e, { ...t, count: r }));
135
+ }
136
+ return i;
137
+ }
138
+ const be = new TextDecoder(), C = {
139
+ timestampFromMilliseconds(e) {
140
+ return new Date(Number(e));
141
+ },
142
+ timestampFromMicroseconds(e) {
143
+ return new Date(Number(e / 1000n));
144
+ },
145
+ timestampFromNanoseconds(e) {
146
+ return new Date(Number(e / 1000000n));
147
+ },
148
+ dateFromDays(e) {
149
+ return new Date(e * 864e5);
150
+ },
151
+ stringFromBytes(e) {
152
+ return e && be.decode(e);
153
+ },
154
+ geometryFromBytes(e) {
155
+ return e && J({ view: new DataView(e.buffer, e.byteOffset, e.byteLength), offset: 0 });
156
+ },
157
+ geographyFromBytes(e) {
158
+ return e && J({ view: new DataView(e.buffer, e.byteOffset, e.byteLength), offset: 0 });
159
+ }
160
+ };
161
+ function ue(e, t, n, i) {
162
+ if (t && n.endsWith("_DICTIONARY")) {
163
+ let f = e;
164
+ e instanceof Uint8Array && !(t instanceof Uint8Array) && (f = new t.constructor(e.length));
165
+ for (let r = 0; r < e.length; r++)
166
+ f[r] = t[e[r]];
167
+ return f;
168
+ } else
169
+ return Te(e, i);
170
+ }
171
+ function Te(e, t) {
172
+ const { element: n, parsers: i, utf8: f = !0, schemaPath: r } = t, { type: s, converted_type: o, logical_type: u } = n;
173
+ if (r?.some((c) => c.element.logical_type?.type === "VARIANT") && s === "BYTE_ARRAY" && o !== "UTF8" && u?.type !== "STRING")
174
+ return e;
175
+ if (o === "DECIMAL") {
176
+ const l = 10 ** -(n.scale || 0), _ = new Array(e.length);
177
+ for (let h = 0; h < _.length; h++)
178
+ e[h] instanceof Uint8Array ? _[h] = Le(e[h]) * l : _[h] = Number(e[h]) * l;
179
+ return _;
180
+ }
181
+ if (!o && s === "INT96")
182
+ return Array.from(e).map((c) => i.timestampFromNanoseconds(Ke(c)));
183
+ if (o === "DATE")
184
+ return Array.from(e).map((c) => i.dateFromDays(c));
185
+ if (o === "TIMESTAMP_MILLIS")
186
+ return Array.from(e).map((c) => i.timestampFromMilliseconds(c));
187
+ if (o === "TIMESTAMP_MICROS")
188
+ return Array.from(e).map((c) => i.timestampFromMicroseconds(c));
189
+ if (o === "JSON")
190
+ return e.map((c) => JSON.parse(be.decode(c)));
191
+ if (o === "BSON")
192
+ throw new Error("parquet bson not supported");
193
+ if (o === "INTERVAL")
194
+ throw new Error("parquet interval not supported");
195
+ if (u?.type === "GEOMETRY")
196
+ return e.map((c) => i.geometryFromBytes(c));
197
+ if (u?.type === "GEOGRAPHY")
198
+ return e.map((c) => i.geographyFromBytes(c));
199
+ if (o === "UTF8" || u?.type === "STRING" || f && s === "BYTE_ARRAY")
200
+ return e.map((c) => i.stringFromBytes(c));
201
+ if (o === "UINT_64" || u?.type === "INTEGER" && u.bitWidth === 64 && !u.isSigned) {
202
+ if (e instanceof BigInt64Array)
203
+ return new BigUint64Array(e.buffer, e.byteOffset, e.length);
204
+ const c = new BigUint64Array(e.length);
205
+ for (let l = 0; l < c.length; l++) c[l] = BigInt(e[l]);
206
+ return c;
207
+ }
208
+ if (o === "UINT_32" || u?.type === "INTEGER" && u.bitWidth === 32 && !u.isSigned) {
209
+ if (e instanceof Int32Array)
210
+ return new Uint32Array(e.buffer, e.byteOffset, e.length);
211
+ const c = new Uint32Array(e.length);
212
+ for (let l = 0; l < c.length; l++) c[l] = e[l];
213
+ return c;
214
+ }
215
+ if (u?.type === "FLOAT16")
216
+ return Array.from(e).map(Ne);
217
+ if (u?.type === "TIMESTAMP") {
218
+ const { unit: c } = u;
219
+ let l = i.timestampFromMilliseconds;
220
+ c === "MICROS" && (l = i.timestampFromMicroseconds), c === "NANOS" && (l = i.timestampFromNanoseconds);
221
+ const _ = new Array(e.length);
222
+ for (let h = 0; h < _.length; h++)
223
+ _[h] = l(e[h]);
224
+ return _;
225
+ }
226
+ return e;
227
+ }
228
+ function Le(e) {
229
+ if (!e.length) return 0;
230
+ let t = 0n;
231
+ for (const i of e)
232
+ t = t * 256n + BigInt(i);
233
+ const n = e.length * 8;
234
+ return t >= 2n ** BigInt(n - 1) && (t -= 2n ** BigInt(n)), Number(t);
235
+ }
236
+ function Ke(e) {
237
+ const t = (e >> 64n) - 2440588n, n = e & 0xffffffffffffffffn;
238
+ return t * 86400000000000n + n;
239
+ }
240
+ function Ne(e) {
241
+ if (!e) return;
242
+ const t = e[1] << 8 | e[0], n = t >> 15 ? -1 : 1, i = t >> 10 & 31, f = t & 1023;
243
+ return i === 0 ? n * 2 ** -14 * (f / 1024) : i === 31 ? f ? NaN : n * (1 / 0) : n * 2 ** (i - 15) * (1 + f / 1024);
244
+ }
245
+ function Re(e, t, n) {
246
+ const i = e[t], f = [];
247
+ let r = 1;
248
+ if (i.num_children)
249
+ for (; f.length < i.num_children; ) {
250
+ const s = e[t + r], o = Re(e, t + r, [...n, s.name]);
251
+ r += o.count, f.push(o);
252
+ }
253
+ return { count: r, element: i, children: f, path: n };
254
+ }
255
+ function Oe(e, t) {
256
+ let n = Re(e, 0, []);
257
+ const i = [n];
258
+ for (const f of t) {
259
+ const r = n.children.find((s) => s.element.name === f);
260
+ if (!r) throw new Error(`parquet schema element not found: ${t}`);
261
+ i.push(r), n = r;
262
+ }
263
+ return i;
264
+ }
265
+ function Ze(e) {
266
+ const t = [];
267
+ function n(i) {
268
+ if (i.children.length)
269
+ for (const f of i.children)
270
+ n(f);
271
+ else
272
+ t.push(i.path.join("."));
273
+ }
274
+ return n(e), t;
275
+ }
276
+ function Se(e) {
277
+ let t = 0;
278
+ for (const { element: n } of e)
279
+ n.repetition_type === "REPEATED" && t++;
280
+ return t;
281
+ }
282
+ function fe(e) {
283
+ let t = 0;
284
+ for (const { element: n } of e.slice(1))
285
+ n.repetition_type !== "REQUIRED" && t++;
286
+ return t;
287
+ }
288
+ function Qe(e) {
289
+ if (!e || e.element.converted_type !== "LIST" || e.children.length > 1) return !1;
290
+ const t = e.children[0];
291
+ return !(t.children.length > 1 || t.element.repetition_type !== "REPEATED");
292
+ }
293
+ function Je(e) {
294
+ if (!e || e.element.converted_type !== "MAP" || e.children.length > 1) return !1;
295
+ const t = e.children[0];
296
+ return !(t.children.length !== 2 || t.element.repetition_type !== "REPEATED" || t.children.find((f) => f.element.name === "key")?.element.repetition_type === "REPEATED" || t.children.find((f) => f.element.name === "value")?.element.repetition_type === "REPEATED");
297
+ }
298
+ function Be(e) {
299
+ if (e.length !== 2) return !1;
300
+ const [, t] = e;
301
+ return !(t.element.repetition_type === "REPEATED" || t.children.length);
302
+ }
303
+ const E = {
304
+ STOP: 0,
305
+ TRUE: 1,
306
+ FALSE: 2,
307
+ BYTE: 3,
308
+ I16: 4,
309
+ I32: 5,
310
+ I64: 6,
311
+ DOUBLE: 7,
312
+ BINARY: 8,
313
+ LIST: 9,
314
+ STRUCT: 12
315
+ };
316
+ function W(e) {
317
+ let t = 0;
318
+ const n = {};
319
+ for (; e.offset < e.view.byteLength; ) {
320
+ const [i, f, r] = Ue(e, t);
321
+ if (t = r, i === E.STOP)
322
+ break;
323
+ n[`field_${f}`] = k(e, i);
324
+ }
325
+ return n;
326
+ }
327
+ function k(e, t) {
328
+ switch (t) {
329
+ case E.TRUE:
330
+ return !0;
331
+ case E.FALSE:
332
+ return !1;
333
+ case E.BYTE:
334
+ return e.view.getInt8(e.offset++);
335
+ case E.I16:
336
+ case E.I32:
337
+ return De(e);
338
+ case E.I64:
339
+ return te(e);
340
+ case E.DOUBLE: {
341
+ const n = e.view.getFloat64(e.offset, !0);
342
+ return e.offset += 8, n;
343
+ }
344
+ case E.BINARY: {
345
+ const n = S(e), i = new Uint8Array(e.view.buffer, e.view.byteOffset + e.offset, n);
346
+ return e.offset += n, i;
347
+ }
348
+ case E.LIST: {
349
+ const n = e.view.getUint8(e.offset++), i = n & 15;
350
+ let f = n >> 4;
351
+ f === 15 && (f = S(e));
352
+ const r = i === E.TRUE || i === E.FALSE, s = new Array(f);
353
+ for (let o = 0; o < f; o++)
354
+ s[o] = r ? k(e, E.BYTE) === 1 : k(e, i);
355
+ return s;
356
+ }
357
+ case E.STRUCT: {
358
+ const n = {};
359
+ let i = 0;
360
+ for (; ; ) {
361
+ const [f, r, s] = Ue(e, i);
362
+ if (i = s, f === E.STOP)
363
+ break;
364
+ n[`field_${r}`] = k(e, f);
365
+ }
366
+ return n;
367
+ }
368
+ // TODO: MAP, SET, UUID
369
+ default:
370
+ throw new Error(`thrift unhandled type: ${t}`);
371
+ }
372
+ }
373
+ function S(e) {
374
+ let t = 0, n = 0;
375
+ for (; ; ) {
376
+ const i = e.view.getUint8(e.offset++);
377
+ if (t |= (i & 127) << n, !(i & 128))
378
+ return t;
379
+ n += 7;
380
+ }
381
+ }
382
+ function Xe(e) {
383
+ let t = 0n, n = 0n;
384
+ for (; ; ) {
385
+ const i = e.view.getUint8(e.offset++);
386
+ if (t |= BigInt(i & 127) << n, !(i & 128))
387
+ return t;
388
+ n += 7n;
389
+ }
390
+ }
391
+ function De(e) {
392
+ const t = S(e);
393
+ return t >>> 1 ^ -(t & 1);
394
+ }
395
+ function te(e) {
396
+ const t = Xe(e);
397
+ return t >> 1n ^ -(t & 1n);
398
+ }
399
+ function Ue(e, t) {
400
+ const n = e.view.getUint8(e.offset++), i = n & 15;
401
+ if (i === E.STOP)
402
+ return [0, 0, t];
403
+ const f = n >> 4, r = f ? t + f : De(e);
404
+ return [i, r, r];
405
+ }
406
+ function et(e, t) {
407
+ const n = /* @__PURE__ */ new Map(), i = t?.find(({ key: r }) => r === "geo")?.value, f = (i && JSON.parse(i)?.columns) ?? {};
408
+ for (const [r, s] of Object.entries(f)) {
409
+ if (s.encoding !== "WKB")
410
+ continue;
411
+ const o = s.edges === "spherical" ? "GEOGRAPHY" : "GEOMETRY", u = s.crs?.id ?? s.crs?.ids?.[0], a = u ? `${u.authority}:${u.code.toString()}` : void 0;
412
+ n.set(r, { type: o, crs: a });
413
+ }
414
+ for (let r = 1; r < e.length; r++) {
415
+ const s = e[r], { logical_type: o, name: u, num_children: a, repetition_type: c, type: l } = s;
416
+ if (a) {
417
+ r += a;
418
+ continue;
419
+ }
420
+ l === "BYTE_ARRAY" && o === void 0 && c !== "REPEATED" && (s.logical_type = n.get(u));
421
+ }
422
+ }
423
+ const xe = 1 << 19, tt = new TextDecoder();
424
+ function v(e) {
425
+ return e && tt.decode(e);
426
+ }
427
+ async function H(e, { parsers: t, initialFetchSize: n = xe, geoparquet: i = !0 } = {}) {
428
+ if (!e || !(e.byteLength >= 0)) throw new Error("parquet expected AsyncBuffer");
429
+ const f = Math.max(0, e.byteLength - n), r = await e.slice(f, e.byteLength), s = new DataView(r);
430
+ if (s.getUint32(r.byteLength - 4, !0) !== 827474256)
431
+ throw new Error("parquet file invalid (footer != PAR1)");
432
+ const o = s.getUint32(r.byteLength - 8, !0);
433
+ if (o > e.byteLength - 8)
434
+ throw new Error(`parquet metadata length ${o} exceeds available buffer ${e.byteLength - 8}`);
435
+ if (o + 8 > n) {
436
+ const u = e.byteLength - o - 8, a = await e.slice(u, f), c = new ArrayBuffer(o + 8), l = new Uint8Array(c);
437
+ return l.set(new Uint8Array(a)), l.set(new Uint8Array(r), f - u), ae(c, { parsers: t, geoparquet: i });
438
+ } else
439
+ return ae(r, { parsers: t, geoparquet: i });
440
+ }
441
+ function ae(e, { parsers: t, geoparquet: n = !0 } = {}) {
442
+ if (!(e instanceof ArrayBuffer)) throw new Error("parquet expected ArrayBuffer");
443
+ const i = new DataView(e);
444
+ if (t = { ...C, ...t }, i.byteLength < 8)
445
+ throw new Error("parquet file is too short");
446
+ if (i.getUint32(i.byteLength - 4, !0) !== 827474256)
447
+ throw new Error("parquet file invalid (footer != PAR1)");
448
+ const f = i.byteLength - 8, r = i.getUint32(f, !0);
449
+ if (r > i.byteLength - 8)
450
+ throw new Error(`parquet metadata length ${r} exceeds available buffer ${i.byteLength - 8}`);
451
+ const s = f - r, u = W({ view: i, offset: s }), a = u.field_1, c = u.field_2.map((w) => ({
452
+ type: le[w.field_1],
453
+ type_length: w.field_2,
454
+ repetition_type: Ve[w.field_3],
455
+ name: v(w.field_4),
456
+ num_children: w.field_5,
457
+ converted_type: je[w.field_6],
458
+ scale: w.field_7,
459
+ precision: w.field_8,
460
+ field_id: w.field_9,
461
+ logical_type: nt(w.field_10)
462
+ })), l = c.filter((w) => w.type), _ = u.field_3, h = u.field_4.map((w) => ({
463
+ columns: w.field_1.map((d, m) => ({
464
+ file_path: v(d.field_1),
465
+ file_offset: d.field_2,
466
+ meta_data: d.field_3 && {
467
+ type: le[d.field_3.field_1],
468
+ encodings: d.field_3.field_2?.map((p) => O[p]),
469
+ path_in_schema: d.field_3.field_3.map(v),
470
+ codec: ze[d.field_3.field_4],
471
+ num_values: d.field_3.field_5,
472
+ total_uncompressed_size: d.field_3.field_6,
473
+ total_compressed_size: d.field_3.field_7,
474
+ key_value_metadata: d.field_3.field_8?.map((p) => ({
475
+ key: v(p.field_1),
476
+ value: v(p.field_2)
477
+ })),
478
+ data_page_offset: d.field_3.field_9,
479
+ index_page_offset: d.field_3.field_10,
480
+ dictionary_page_offset: d.field_3.field_11,
481
+ statistics: it(d.field_3.field_12, l[m], t),
482
+ encoding_stats: d.field_3.field_13?.map((p) => ({
483
+ page_type: ve[p.field_1],
484
+ encoding: O[p.field_2],
485
+ count: p.field_3
486
+ })),
487
+ bloom_filter_offset: d.field_3.field_14,
488
+ bloom_filter_length: d.field_3.field_15,
489
+ size_statistics: d.field_3.field_16 && {
490
+ unencoded_byte_array_data_bytes: d.field_3.field_16.field_1,
491
+ repetition_level_histogram: d.field_3.field_16.field_2,
492
+ definition_level_histogram: d.field_3.field_16.field_3
493
+ },
494
+ geospatial_statistics: d.field_3.field_17 && {
495
+ bbox: d.field_3.field_17.field_1 && {
496
+ xmin: d.field_3.field_17.field_1.field_1,
497
+ xmax: d.field_3.field_17.field_1.field_2,
498
+ ymin: d.field_3.field_17.field_1.field_3,
499
+ ymax: d.field_3.field_17.field_1.field_4,
500
+ zmin: d.field_3.field_17.field_1.field_5,
501
+ zmax: d.field_3.field_17.field_1.field_6,
502
+ mmin: d.field_3.field_17.field_1.field_7,
503
+ mmax: d.field_3.field_17.field_1.field_8
504
+ },
505
+ geospatial_types: d.field_3.field_17.field_2
506
+ }
507
+ },
508
+ offset_index_offset: d.field_4,
509
+ offset_index_length: d.field_5,
510
+ column_index_offset: d.field_6,
511
+ column_index_length: d.field_7,
512
+ crypto_metadata: d.field_8,
513
+ encrypted_column_metadata: d.field_9
514
+ })),
515
+ total_byte_size: w.field_2,
516
+ num_rows: w.field_3,
517
+ sorting_columns: w.field_4?.map((d) => ({
518
+ column_idx: d.field_1,
519
+ descending: d.field_2,
520
+ nulls_first: d.field_3
521
+ })),
522
+ file_offset: w.field_5,
523
+ total_compressed_size: w.field_6,
524
+ ordinal: w.field_7
525
+ })), g = u.field_5?.map((w) => ({
526
+ key: v(w.field_1),
527
+ value: v(w.field_2)
528
+ })), y = v(u.field_6);
529
+ return n && et(c, g), {
530
+ version: a,
531
+ schema: c,
532
+ num_rows: _,
533
+ row_groups: h,
534
+ key_value_metadata: g,
535
+ created_by: y,
536
+ metadata_length: r
537
+ };
538
+ }
539
+ function $({ schema: e }) {
540
+ return Oe(e, [])[0];
541
+ }
542
+ function nt(e) {
543
+ return e?.field_1 ? { type: "STRING" } : e?.field_2 ? { type: "MAP" } : e?.field_3 ? { type: "LIST" } : e?.field_4 ? { type: "ENUM" } : e?.field_5 ? {
544
+ type: "DECIMAL",
545
+ scale: e.field_5.field_1,
546
+ precision: e.field_5.field_2
547
+ } : e?.field_6 ? { type: "DATE" } : e?.field_7 ? {
548
+ type: "TIME",
549
+ isAdjustedToUTC: e.field_7.field_1,
550
+ unit: _e(e.field_7.field_2)
551
+ } : e?.field_8 ? {
552
+ type: "TIMESTAMP",
553
+ isAdjustedToUTC: e.field_8.field_1,
554
+ unit: _e(e.field_8.field_2)
555
+ } : e?.field_10 ? {
556
+ type: "INTEGER",
557
+ bitWidth: e.field_10.field_1,
558
+ isSigned: e.field_10.field_2
559
+ } : e?.field_11 ? { type: "NULL" } : e?.field_12 ? { type: "JSON" } : e?.field_13 ? { type: "BSON" } : e?.field_14 ? { type: "UUID" } : e?.field_15 ? { type: "FLOAT16" } : e?.field_16 ? {
560
+ type: "VARIANT",
561
+ specification_version: e.field_16.field_1
562
+ } : e?.field_17 ? {
563
+ type: "GEOMETRY",
564
+ crs: v(e.field_17.field_1)
565
+ } : e?.field_18 ? {
566
+ type: "GEOGRAPHY",
567
+ crs: v(e.field_18.field_1),
568
+ algorithm: He[e.field_18.field_2]
569
+ } : e;
570
+ }
571
+ function _e(e) {
572
+ if (e.field_1) return "MILLIS";
573
+ if (e.field_2) return "MICROS";
574
+ if (e.field_3) return "NANOS";
575
+ throw new Error("parquet time unit required");
576
+ }
577
+ function it(e, t, n) {
578
+ return e && {
579
+ max: D(e.field_1, t, n),
580
+ min: D(e.field_2, t, n),
581
+ null_count: e.field_3,
582
+ distinct_count: e.field_4,
583
+ max_value: D(e.field_5, t, n),
584
+ min_value: D(e.field_6, t, n),
585
+ is_max_value_exact: e.field_7,
586
+ is_min_value_exact: e.field_8
587
+ };
588
+ }
589
+ function D(e, t, n) {
590
+ const { type: i, converted_type: f, logical_type: r } = t;
591
+ if (e === void 0) return e;
592
+ if (i === "BOOLEAN") return e[0] === 1;
593
+ if (i === "BYTE_ARRAY") return n.stringFromBytes(e);
594
+ const s = new DataView(e.buffer, e.byteOffset, e.byteLength);
595
+ return i === "FLOAT" && s.byteLength === 4 ? s.getFloat32(0, !0) : i === "DOUBLE" && s.byteLength === 8 ? s.getFloat64(0, !0) : i === "INT32" && f === "DATE" ? n.dateFromDays(s.getInt32(0, !0)) : i === "INT64" && f === "TIMESTAMP_MILLIS" ? n.timestampFromMilliseconds(s.getBigInt64(0, !0)) : i === "INT64" && f === "TIMESTAMP_MICROS" ? n.timestampFromMicroseconds(s.getBigInt64(0, !0)) : i === "INT64" && r?.type === "TIMESTAMP" && r?.unit === "NANOS" ? n.timestampFromNanoseconds(s.getBigInt64(0, !0)) : i === "INT64" && r?.type === "TIMESTAMP" && r?.unit === "MICROS" ? n.timestampFromMicroseconds(s.getBigInt64(0, !0)) : i === "INT64" && r?.type === "TIMESTAMP" ? n.timestampFromMilliseconds(s.getBigInt64(0, !0)) : i === "INT32" && s.byteLength === 4 ? s.getInt32(0, !0) : i === "INT64" && s.byteLength === 8 ? s.getBigInt64(0, !0) : f === "DECIMAL" ? Le(e) * 10 ** -(t.scale || 0) : r?.type === "FLOAT16" ? Ne(e) : e;
596
+ }
597
+ function Yt(e, t, n = void 0) {
598
+ n = { ...C, ...n };
599
+ const i = W(e);
600
+ return {
601
+ null_pages: i.field_1,
602
+ min_values: i.field_2.map((f) => D(f, t, n)),
603
+ max_values: i.field_3.map((f) => D(f, t, n)),
604
+ boundary_order: We[i.field_4],
605
+ null_counts: i.field_5,
606
+ repetition_level_histograms: i.field_6,
607
+ definition_level_histograms: i.field_7
608
+ };
609
+ }
610
+ function ft(e) {
611
+ const t = W(e);
612
+ return {
613
+ page_locations: t.field_1.map(rt),
614
+ unencoded_byte_array_data_bytes: t.field_2
615
+ };
616
+ }
617
+ function rt(e) {
618
+ return {
619
+ offset: e.field_1,
620
+ compressed_page_size: e.field_2,
621
+ first_row_index: e.field_3
622
+ };
623
+ }
624
+ function de(e) {
625
+ if (e === void 0) return null;
626
+ if (typeof e == "bigint") return Number(e);
627
+ if (Object.is(e, -0)) return 0;
628
+ if (Array.isArray(e)) return e.map(de);
629
+ if (e instanceof Uint8Array) return Array.from(e);
630
+ if (e instanceof Date) return e.toISOString();
631
+ if (e instanceof Object) {
632
+ const t = {};
633
+ for (const n of Object.keys(e))
634
+ e[n] !== void 0 && (t[n] = de(e[n]));
635
+ return t;
636
+ }
637
+ return e;
638
+ }
639
+ function Pe(e, t) {
640
+ for (let i = 0; i < t.length; i += 1e4)
641
+ e.push(...t.slice(i, i + 1e4));
642
+ }
643
+ function b(e, t, n = !0) {
644
+ if (n ? e === t : e == t) return !0;
645
+ if (e instanceof Uint8Array && t instanceof Uint8Array) return b(Array.from(e), Array.from(t), n);
646
+ if (!e || !t || typeof e != typeof t) return !1;
647
+ if (Array.isArray(e) && Array.isArray(t)) {
648
+ if (e.length !== t.length) return !1;
649
+ for (let f = 0; f < e.length; f++)
650
+ if (!b(e[f], t[f], n)) return !1;
651
+ return !0;
652
+ }
653
+ if (typeof e != "object") return !1;
654
+ const i = Object.keys(e);
655
+ if (i.length !== Object.keys(t).length) return !1;
656
+ for (const f of i)
657
+ if (!b(e[f], t[f], n)) return !1;
658
+ return !0;
659
+ }
660
+ async function he(e, t = {}, n = globalThis.fetch) {
661
+ const i = new AbortController(), f = new Headers(t.headers);
662
+ f.set("Range", "bytes=0-0");
663
+ const r = await n(e, {
664
+ ...t,
665
+ headers: f,
666
+ signal: i.signal
667
+ });
668
+ if (!r.ok) throw new Error(`fetch with range failed ${r.status}`);
669
+ if (r.status === 206) {
670
+ const s = r.headers.get("Content-Range");
671
+ if (!s) throw new Error("missing content-range header");
672
+ const o = s.match(/bytes \d+-\d+\/(\d+)/);
673
+ if (!o) throw new Error(`invalid content-range header: ${s}`);
674
+ return parseInt(o[1]);
675
+ }
676
+ if (r.status === 200) {
677
+ const s = r.headers.get("Content-Length");
678
+ if (i.abort(), s) return parseInt(s);
679
+ }
680
+ throw new Error("server does not support range requests and missing content-length");
681
+ }
682
+ async function ot(e, t, n) {
683
+ const i = n ?? globalThis.fetch, f = await i(e, { ...t, method: "HEAD" });
684
+ if (f.status === 403)
685
+ return he(e, t, i);
686
+ if (!f.ok) throw new Error(`fetch head failed ${f.status}`);
687
+ const r = f.headers.get("Content-Length");
688
+ return r ? parseInt(r) : he(e, t, i);
689
+ }
690
+ async function kt({ url: e, byteLength: t, requestInit: n, fetch: i }) {
691
+ if (!e) throw new Error("missing url");
692
+ const f = i ?? globalThis.fetch;
693
+ t ??= await ot(e, n, f);
694
+ let r;
695
+ const s = n || {};
696
+ return {
697
+ byteLength: t,
698
+ async slice(o, u) {
699
+ if (r)
700
+ return r.then((_) => _.slice(o, u));
701
+ const a = new Headers(s.headers), c = u === void 0 ? "" : u - 1;
702
+ a.set("Range", `bytes=${o}-${c}`);
703
+ const l = await f(e, { ...s, headers: a });
704
+ if (!l.ok || !l.body) throw new Error(`fetch failed ${l.status}`);
705
+ if (l.status === 200)
706
+ return r = l.arrayBuffer(), r.then((_) => _.slice(o, u));
707
+ if (l.status === 206)
708
+ return l.arrayBuffer();
709
+ throw new Error(`fetch received unexpected status code ${l.status}`);
710
+ }
711
+ };
712
+ }
713
+ function qt({ byteLength: e, slice: t }, { minSize: n = xe } = {}) {
714
+ if (e < n) {
715
+ const f = t(0, e);
716
+ return {
717
+ byteLength: e,
718
+ async slice(r, s) {
719
+ return (await f).slice(r, s);
720
+ }
721
+ };
722
+ }
723
+ const i = /* @__PURE__ */ new Map();
724
+ return {
725
+ byteLength: e,
726
+ /**
727
+ * @param {number} start
728
+ * @param {number} [end]
729
+ * @returns {Awaitable<ArrayBuffer>}
730
+ */
731
+ slice(f, r) {
732
+ const s = st(f, r, e), o = i.get(s);
733
+ if (o) return o;
734
+ const u = t(f, r);
735
+ return i.set(s, u), u;
736
+ }
737
+ };
738
+ }
739
+ function st(e, t, n) {
740
+ if (e < 0) {
741
+ if (t !== void 0) throw new Error(`invalid suffix range [${e}, ${t}]`);
742
+ return n === void 0 ? `${e},` : `${n + e},${n}`;
743
+ } else if (t !== void 0) {
744
+ if (e > t) throw new Error(`invalid empty range [${e}, ${t}]`);
745
+ return `${e},${t}`;
746
+ } else return n === void 0 ? `${e},` : `${e},${n}`;
747
+ }
748
+ function j(e) {
749
+ if (!e) return [];
750
+ if (e.length === 1) return e[0];
751
+ const t = [];
752
+ for (const n of e)
753
+ Pe(t, n);
754
+ return t;
755
+ }
756
+ function q(e) {
757
+ if (!e) return [];
758
+ const t = [];
759
+ return "$and" in e && Array.isArray(e.$and) ? t.push(...e.$and.flatMap(q)) : "$or" in e && Array.isArray(e.$or) ? t.push(...e.$or.flatMap(q)) : "$nor" in e && Array.isArray(e.$nor) ? t.push(...e.$nor.flatMap(q)) : t.push(...Object.keys(e)), t;
760
+ }
761
+ function U(e, t, n = !0) {
762
+ return "$and" in t && Array.isArray(t.$and) ? t.$and.every((i) => U(e, i, n)) : "$or" in t && Array.isArray(t.$or) ? t.$or.some((i) => U(e, i, n)) : "$nor" in t && Array.isArray(t.$nor) ? !t.$nor.some((i) => U(e, i, n)) : Object.entries(t).every(([i, f]) => {
763
+ const r = e[i];
764
+ return typeof f != "object" || f === null || Array.isArray(f) ? b(r, f, n) : Object.entries(f || {}).every(([s, o]) => s === "$gt" ? r > o : s === "$gte" ? r >= o : s === "$lt" ? r < o : s === "$lte" ? r <= o : s === "$eq" ? b(r, o, n) : s === "$ne" ? !b(r, o, n) : s === "$in" ? Array.isArray(o) && o.includes(r) : s === "$nin" ? Array.isArray(o) && !o.includes(r) : s === "$not" ? !U({ [i]: r }, { [i]: o }, n) : !0);
765
+ });
766
+ }
767
+ function ne({ rowGroup: e, physicalColumns: t, filter: n, strict: i = !0 }) {
768
+ if (!n) return !1;
769
+ if ("$and" in n && Array.isArray(n.$and))
770
+ return n.$and.some((f) => ne({ rowGroup: e, physicalColumns: t, filter: f, strict: i }));
771
+ if ("$or" in n && Array.isArray(n.$or))
772
+ return n.$or.every((f) => ne({ rowGroup: e, physicalColumns: t, filter: f, strict: i }));
773
+ if ("$nor" in n && Array.isArray(n.$nor))
774
+ return !1;
775
+ for (const [f, r] of Object.entries(n)) {
776
+ const s = t.indexOf(f);
777
+ if (s === -1) continue;
778
+ const o = e.columns[s].meta_data?.statistics;
779
+ if (!o) continue;
780
+ const { min: u, max: a, min_value: c, max_value: l } = o, _ = c !== void 0 ? c : u, h = l !== void 0 ? l : a;
781
+ if (!(_ === void 0 || h === void 0)) {
782
+ for (const [g, y] of Object.entries(r || {}))
783
+ if (g === "$gt" && h <= y || g === "$gte" && h < y || g === "$lt" && _ >= y || g === "$lte" && _ > y || g === "$eq" && (y < _ || y > h) || g === "$ne" && b(_, h, i) && b(_, y, i) || g === "$in" && Array.isArray(y) && y.every((w) => w < _ || w > h) || g === "$nin" && Array.isArray(y) && b(_, h, i) && y.includes(_)) return !0;
784
+ }
785
+ }
786
+ return !1;
787
+ }
788
+ const lt = 1 << 21;
789
+ function ct({ metadata: e, rowStart: t = 0, rowEnd: n = 1 / 0, columns: i, filter: f, filterStrict: r = !0, useOffsetIndex: s = !1 }) {
790
+ if (!e) throw new Error("parquetPlan requires metadata");
791
+ const o = [], u = [], a = [], c = Ze($(e));
792
+ let l = 0;
793
+ for (const _ of e.row_groups) {
794
+ const h = Number(_.num_rows), g = l + h;
795
+ if (h > 0 && g > t && l < n && !ne({ rowGroup: _, physicalColumns: c, filter: f, strict: r })) {
796
+ const y = [];
797
+ for (const p of _.columns) {
798
+ const A = p.meta_data;
799
+ if (p.file_path) throw new Error("parquet file_path not supported");
800
+ if (!A) throw new Error("parquet column metadata is undefined");
801
+ if (!i || i.includes(A.path_in_schema[0])) {
802
+ const I = A.dictionary_page_offset || A.data_page_offset, N = Number(I), T = Number(I + A.total_compressed_size);
803
+ if (s && p.offset_index_offset && p.offset_index_length) {
804
+ const R = Number(p.offset_index_offset);
805
+ y.push({
806
+ columnMetadata: A,
807
+ offsetIndex: {
808
+ startByte: R,
809
+ endByte: R + p.offset_index_length
810
+ },
811
+ bounds: { startByte: N, endByte: T }
812
+ });
813
+ } else
814
+ y.push({
815
+ columnMetadata: A,
816
+ range: { startByte: N, endByte: T }
817
+ });
818
+ }
819
+ }
820
+ const w = Math.max(t - l, 0), d = Math.min(n - l, h);
821
+ o.push({ chunks: y, rowGroup: _, groupStart: l, groupRows: h, selectStart: w, selectEnd: d });
822
+ let m;
823
+ for (const p of y)
824
+ if ("offsetIndex" in p)
825
+ a.push(p.offsetIndex);
826
+ else {
827
+ const { range: A } = p;
828
+ i ? u.push(A) : m && A.endByte - m.startByte <= lt ? m.endByte = A.endByte : (m && u.push(m), m = { ...A });
829
+ }
830
+ m && u.push(m);
831
+ }
832
+ l = g;
833
+ }
834
+ return isFinite(n) || (n = l), u.push(...a), { metadata: e, rowStart: t, rowEnd: n, columns: i, fetches: u, groups: o };
835
+ }
836
+ function ut(e, { fetches: t }) {
837
+ const n = t.map(({ startByte: i, endByte: f }) => e.slice(i, f));
838
+ return {
839
+ byteLength: e.byteLength,
840
+ slice(i, f = e.byteLength) {
841
+ const r = t.findIndex(({ startByte: s, endByte: o }) => s <= i && f <= o);
842
+ if (r < 0)
843
+ return e.slice(i, f);
844
+ if (t[r].startByte !== i || t[r].endByte !== f) {
845
+ const s = i - t[r].startByte, o = f - t[r].startByte;
846
+ return n[r] instanceof Promise ? n[r].then((u) => u.slice(s, o)) : n[r].slice(s, o);
847
+ } else
848
+ return n[r];
849
+ }
850
+ };
851
+ }
852
+ const re = new TextDecoder(), we = /* @__PURE__ */ new WeakMap();
853
+ function $e(e, t = C) {
854
+ if (Array.isArray(e))
855
+ return e.map((n) => $e(n, t));
856
+ if (typeof e != "object") return e;
857
+ if ("metadata" in e) {
858
+ const n = at(e.metadata), i = e.typed_value && G(e.typed_value, n, t), f = e.value && M(z(e.value), n, t);
859
+ return i && f ? { ...f, ...i } : i ?? f;
860
+ }
861
+ return e;
862
+ }
863
+ function G(e, t, n) {
864
+ if (e && typeof e == "object" && !Array.isArray(e) && !(e instanceof Uint8Array)) {
865
+ if ("typed_value" in e)
866
+ return G(e.typed_value, t, n);
867
+ if ("value" in e && e.value instanceof Uint8Array)
868
+ return M(z(e.value), t, n);
869
+ const i = {};
870
+ for (const [f, r] of Object.entries(e))
871
+ i[f] = G(r, t, n);
872
+ return i;
873
+ }
874
+ return e instanceof Uint8Array ? M(z(e), t, n) : Array.isArray(e) ? e.map((i) => G(i, t, n)) : e;
875
+ }
876
+ function z(e) {
877
+ return { view: new DataView(e.buffer, e.byteOffset, e.byteLength), offset: 0 };
878
+ }
879
+ function at(e) {
880
+ let t = we.get(e.buffer);
881
+ t || (t = /* @__PURE__ */ new Map(), we.set(e.buffer, t));
882
+ const n = `${e.byteOffset}:${e.byteLength}`, i = t.get(n);
883
+ if (i) return i;
884
+ const f = z(e), r = f.view.getUint8(f.offset++), s = r & 15;
885
+ if (s !== 1) throw new Error(`parquet unsupported variant metadata version: ${s}`);
886
+ const o = (r >> 4 & 1) === 1, u = (r >> 6 & 3) + 1, a = B(f, u), c = new Array(a + 1);
887
+ for (let g = 0; g < c.length; g++)
888
+ c[g] = B(f, u);
889
+ const l = f.offset, _ = new Array(a);
890
+ for (let g = 0; g < a; g++) {
891
+ const y = c[g], w = c[g + 1], d = new Uint8Array(e.buffer, e.byteOffset + l + y, w - y);
892
+ _[g] = re.decode(d);
893
+ }
894
+ const h = { dictionary: _, sorted: o };
895
+ return t.set(n, h), h;
896
+ }
897
+ function B(e, t) {
898
+ let n = 0;
899
+ for (let i = 0; i < t; i++)
900
+ n |= e.view.getUint8(e.offset + i) << i * 8;
901
+ return e.offset += t, n;
902
+ }
903
+ function M(e, t, n) {
904
+ const i = e.view.getUint8(e.offset++), f = i & 3, r = i >> 2;
905
+ if (f === 0) return _t(e, r, n);
906
+ if (f === 2) return dt(e, r, t, n);
907
+ if (f === 3) return ht(e, r, t, n);
908
+ const s = new Uint8Array(e.view.buffer, e.view.byteOffset + e.offset, r);
909
+ return e.offset += r, re.decode(s);
910
+ }
911
+ function _t(e, t, n) {
912
+ switch (t) {
913
+ case 0:
914
+ return null;
915
+ case 1:
916
+ return !0;
917
+ case 2:
918
+ return !1;
919
+ case 3: {
920
+ const i = e.view.getInt8(e.offset);
921
+ return e.offset += 1, i;
922
+ }
923
+ case 4: {
924
+ const i = e.view.getInt16(e.offset, !0);
925
+ return e.offset += 2, i;
926
+ }
927
+ case 5: {
928
+ const i = e.view.getInt32(e.offset, !0);
929
+ return e.offset += 4, i;
930
+ }
931
+ case 6: {
932
+ const i = e.view.getBigInt64(e.offset, !0);
933
+ return e.offset += 8, i;
934
+ }
935
+ case 7: {
936
+ const i = e.view.getFloat64(e.offset, !0);
937
+ return e.offset += 8, i;
938
+ }
939
+ case 8:
940
+ return Q(e, 4);
941
+ case 9:
942
+ return Q(e, 8);
943
+ case 10:
944
+ return Q(e, 16);
945
+ case 11: {
946
+ const i = e.view.getInt32(e.offset, !0);
947
+ return e.offset += 4, n.dateFromDays(i);
948
+ }
949
+ case 12:
950
+ // timestamp_micros (utc)
951
+ case 13: {
952
+ const i = e.view.getBigInt64(e.offset, !0);
953
+ return e.offset += 8, n.timestampFromMicroseconds(i);
954
+ }
955
+ case 14: {
956
+ const i = e.view.getFloat32(e.offset, !0);
957
+ return e.offset += 4, i;
958
+ }
959
+ case 15:
960
+ return ge(e);
961
+ case 16: {
962
+ const i = ge(e);
963
+ return re.decode(i);
964
+ }
965
+ case 17: {
966
+ const i = e.view.getBigInt64(e.offset, !0);
967
+ return e.offset += 8, i;
968
+ }
969
+ case 18:
970
+ // timestamp_nanos (utc)
971
+ case 19: {
972
+ const i = e.view.getBigInt64(e.offset, !0);
973
+ return e.offset += 8, n.timestampFromNanoseconds(i);
974
+ }
975
+ case 20: {
976
+ const i = new Uint8Array(e.view.buffer, e.view.byteOffset + e.offset, 16);
977
+ e.offset += 16;
978
+ const f = Array.from(i, (r) => r.toString(16).padStart(2, "0")).join("");
979
+ return `${f.slice(0, 8)}-${f.slice(8, 12)}-${f.slice(12, 16)}-${f.slice(16, 20)}-${f.slice(20)}`;
980
+ }
981
+ default:
982
+ throw new Error(`parquet unsupported variant primitive type: ${t}`);
983
+ }
984
+ }
985
+ function dt(e, t, n, i) {
986
+ const f = (t & 3) + 1, r = (t >> 2 & 3) + 1, o = t >> 4 & 1 ? B(e, 4) : e.view.getUint8(e.offset++), u = new Array(o);
987
+ for (let l = 0; l < o; l++)
988
+ u[l] = B(e, r);
989
+ const a = new Array(o + 1);
990
+ for (let l = 0; l < a.length; l++)
991
+ a[l] = B(e, f);
992
+ const c = {};
993
+ for (let l = 0; l < o; l++) {
994
+ const _ = n.dictionary[u[l]], h = {
995
+ view: e.view,
996
+ offset: e.offset + a[l]
997
+ };
998
+ c[_] = M(h, n, i);
999
+ }
1000
+ return e.offset += a[a.length - 1], c;
1001
+ }
1002
+ function ht(e, t, n, i) {
1003
+ const f = t & 3, r = t >> 2 & 1, s = f + 1, o = B(e, r ? 4 : 1), u = new Array(o + 1);
1004
+ for (let l = 0; l < u.length; l++)
1005
+ u[l] = B(e, s);
1006
+ const a = e.offset, c = new Array(o);
1007
+ for (let l = 0; l < o; l++) {
1008
+ const _ = {
1009
+ view: e.view,
1010
+ offset: a + u[l]
1011
+ };
1012
+ c[l] = M(_, n, i);
1013
+ }
1014
+ return e.offset = a + u[u.length - 1], c;
1015
+ }
1016
+ function Q(e, t) {
1017
+ const n = e.view.getUint8(e.offset);
1018
+ e.offset += 1;
1019
+ let i;
1020
+ if (t === 4)
1021
+ i = BigInt(e.view.getInt32(e.offset, !0)), e.offset += 4;
1022
+ else if (t === 8)
1023
+ i = e.view.getBigInt64(e.offset, !0), e.offset += 8;
1024
+ else {
1025
+ const f = e.view.getBigUint64(e.offset, !0);
1026
+ i = e.view.getBigInt64(e.offset + 8, !0) << 64n | f, e.offset += 16;
1027
+ }
1028
+ return Number(i) * 10 ** -n;
1029
+ }
1030
+ function ge(e) {
1031
+ const t = e.view.getUint32(e.offset, !0);
1032
+ e.offset += 4;
1033
+ const n = new Uint8Array(e.view.buffer, e.view.byteOffset + e.offset, t);
1034
+ return e.offset += t, n;
1035
+ }
1036
+ function ye(e, t, n, i, f) {
1037
+ const r = fe(f);
1038
+ if (!t?.length && !n.length) {
1039
+ if (!r || !i.length) return i;
1040
+ t = new Array(i.length).fill(r);
1041
+ }
1042
+ const s = t?.length || n.length, o = f.map(({ element: g }) => g.repetition_type);
1043
+ let u = 0;
1044
+ const a = [e];
1045
+ let c = e, l = 0, _ = 0, h = 0;
1046
+ if (n[0])
1047
+ for (; l < o.length - 2 && h < n[0]; )
1048
+ l++, o[l] !== "REQUIRED" && (c = c.at(-1), a.push(c), _++), o[l] === "REPEATED" && h++;
1049
+ for (let g = 0; g < s; g++) {
1050
+ const y = t?.length ? t[g] : r, w = n[g];
1051
+ for (; l && (w < h || o[l] !== "REPEATED"); )
1052
+ o[l] !== "REQUIRED" && (a.pop(), _--), o[l] === "REPEATED" && h--, l--;
1053
+ for (c = a.at(-1); (l < o.length - 2 || o[l + 1] === "REPEATED") && (_ < y || o[l + 1] === "REQUIRED"); ) {
1054
+ if (l++, o[l] !== "REQUIRED") {
1055
+ const d = [];
1056
+ c.push(d), c = d, a.push(d), _++;
1057
+ }
1058
+ o[l] === "REPEATED" && h++;
1059
+ }
1060
+ y === r ? c.push(i[u++]) : l === o.length - 2 ? c.push(null) : c.push([]);
1061
+ }
1062
+ if (!e.length)
1063
+ for (let g = 0; g < r; g++) {
1064
+ const y = [];
1065
+ c.push(y), c = y;
1066
+ }
1067
+ return e;
1068
+ }
1069
+ function x(e, t, n, i = 0) {
1070
+ const f = t.path.join("."), r = t.element.repetition_type === "OPTIONAL", s = r ? i + 1 : i;
1071
+ if (Qe(t)) {
1072
+ let o = t.children[0], u = s;
1073
+ o.children.length === 1 && (o = o.children[0], u++), x(e, o, n, u);
1074
+ const a = o.path.join("."), c = e.get(a);
1075
+ if (!c) throw new Error("parquet list column missing values");
1076
+ r && V(c, i), e.set(f, c), e.delete(a);
1077
+ return;
1078
+ }
1079
+ if (Je(t)) {
1080
+ const o = t.children[0].element.name;
1081
+ x(e, t.children[0].children[0], n, s + 1), x(e, t.children[0].children[1], n, s + 1);
1082
+ const u = e.get(`${f}.${o}.key`), a = e.get(`${f}.${o}.value`);
1083
+ if (!u) throw new Error("parquet map column missing keys");
1084
+ if (!a) throw new Error("parquet map column missing values");
1085
+ if (u.length !== a.length)
1086
+ throw new Error("parquet map column key/value length mismatch");
1087
+ const c = Me(u, a, s);
1088
+ r && V(c, i), e.delete(`${f}.${o}.key`), e.delete(`${f}.${o}.value`), e.set(f, c);
1089
+ return;
1090
+ }
1091
+ if (t.children.length) {
1092
+ const o = t.element.repetition_type === "REQUIRED" ? i : i + 1, u = {};
1093
+ for (const c of t.children) {
1094
+ x(e, c, n, o);
1095
+ const l = e.get(c.path.join("."));
1096
+ if (!l) throw new Error("parquet struct missing child data");
1097
+ u[c.element.name] = l;
1098
+ }
1099
+ for (const c of t.children)
1100
+ e.delete(c.path.join("."));
1101
+ let a = Fe(u, o);
1102
+ t.element.logical_type?.type === "VARIANT" && (a = $e(a, n)), r && V(a, i), e.set(f, a);
1103
+ }
1104
+ }
1105
+ function V(e, t) {
1106
+ for (let n = 0; n < e.length; n++)
1107
+ t ? V(e[n], t - 1) : e[n] = e[n][0];
1108
+ }
1109
+ function Me(e, t, n) {
1110
+ const i = [];
1111
+ for (let f = 0; f < e.length; f++)
1112
+ if (n)
1113
+ i.push(Me(e[f], t[f], n - 1));
1114
+ else if (e[f]) {
1115
+ const r = {};
1116
+ for (let s = 0; s < e[f].length; s++) {
1117
+ const o = t[f][s];
1118
+ r[e[f][s]] = o === void 0 ? null : o;
1119
+ }
1120
+ i.push(r);
1121
+ } else
1122
+ i.push(void 0);
1123
+ return i;
1124
+ }
1125
+ function Fe(e, t) {
1126
+ const n = Object.keys(e), i = e[n[0]]?.length, f = [];
1127
+ for (let r = 0; r < i; r++) {
1128
+ const s = {};
1129
+ for (const o of n) {
1130
+ if (e[o].length !== i) throw new Error("parquet struct parsing error");
1131
+ s[o] = e[o][r];
1132
+ }
1133
+ t ? f.push(Fe(s, t - 1)) : f.push(s);
1134
+ }
1135
+ return f;
1136
+ }
1137
+ function F(e, t, n) {
1138
+ const i = n instanceof Int32Array, f = S(e), r = S(e);
1139
+ S(e);
1140
+ let s = te(e), o = 0;
1141
+ n[o++] = i ? Number(s) : s;
1142
+ const u = f / r;
1143
+ for (; o < t; ) {
1144
+ const a = te(e), c = new Uint8Array(r);
1145
+ for (let l = 0; l < r; l++)
1146
+ c[l] = e.view.getUint8(e.offset++);
1147
+ for (let l = 0; l < r && o < t; l++) {
1148
+ const _ = BigInt(c[l]);
1149
+ if (_) {
1150
+ let h = 0n, g = u;
1151
+ const y = (1n << _) - 1n;
1152
+ for (; g && o < t; ) {
1153
+ let w = BigInt(e.view.getUint8(e.offset)) >> h & y;
1154
+ for (h += _; h >= 8; )
1155
+ h -= 8n, e.offset++, h && (w |= BigInt(e.view.getUint8(e.offset)) << _ - h & y);
1156
+ const d = a + w;
1157
+ s += d, n[o++] = i ? Number(s) : s, g--;
1158
+ }
1159
+ g && (e.offset += Math.ceil((g * Number(_) + Number(h)) / 8));
1160
+ } else
1161
+ for (let h = 0; h < u && o < t; h++)
1162
+ s += a, n[o++] = i ? Number(s) : s;
1163
+ }
1164
+ }
1165
+ }
1166
+ function Ce(e, t, n) {
1167
+ const i = new Int32Array(t);
1168
+ F(e, t, i);
1169
+ for (let f = 0; f < t; f++)
1170
+ n[f] = new Uint8Array(e.view.buffer, e.view.byteOffset + e.offset, i[f]), e.offset += i[f];
1171
+ }
1172
+ function wt(e, t, n) {
1173
+ const i = new Int32Array(t);
1174
+ F(e, t, i);
1175
+ const f = new Int32Array(t);
1176
+ F(e, t, f);
1177
+ for (let r = 0; r < t; r++) {
1178
+ const s = new Uint8Array(e.view.buffer, e.view.byteOffset + e.offset, f[r]);
1179
+ i[r] ? (n[r] = new Uint8Array(i[r] + f[r]), n[r].set(n[r - 1].subarray(0, i[r])), n[r].set(s, i[r])) : n[r] = s, e.offset += f[r];
1180
+ }
1181
+ }
1182
+ function K(e) {
1183
+ return 32 - Math.clz32(e);
1184
+ }
1185
+ function L(e, t, n, i) {
1186
+ i === void 0 && (i = e.view.getUint32(e.offset, !0), e.offset += 4);
1187
+ const f = e.offset;
1188
+ let r = 0;
1189
+ for (; r < n.length; ) {
1190
+ const s = S(e);
1191
+ if (s & 1)
1192
+ r = yt(e, s, t, n, r);
1193
+ else {
1194
+ const o = s >>> 1;
1195
+ gt(e, o, t, n, r), r += o;
1196
+ }
1197
+ }
1198
+ e.offset = f + i;
1199
+ }
1200
+ function gt(e, t, n, i, f) {
1201
+ const r = n + 7 >> 3;
1202
+ let s = 0;
1203
+ for (let o = 0; o < r; o++)
1204
+ s |= e.view.getUint8(e.offset++) << (o << 3);
1205
+ for (let o = 0; o < t; o++)
1206
+ i[f + o] = s;
1207
+ }
1208
+ function yt(e, t, n, i, f) {
1209
+ let r = t >> 1 << 3;
1210
+ const s = (1 << n) - 1;
1211
+ let o = 0;
1212
+ if (e.offset < e.view.byteLength)
1213
+ o = e.view.getUint8(e.offset++);
1214
+ else if (s)
1215
+ throw new Error(`parquet bitpack offset ${e.offset} out of range`);
1216
+ let u = 8, a = 0;
1217
+ for (; r; )
1218
+ a > 8 ? (a -= 8, u -= 8, o >>>= 8) : u - a < n ? (o |= e.view.getUint8(e.offset) << u, e.offset++, u += 8) : (f < i.length && (i[f++] = o >> a & s), r--, a += n);
1219
+ return f;
1220
+ }
1221
+ function Ye(e, t, n, i) {
1222
+ const f = mt(n, i), r = new Uint8Array(t * f);
1223
+ for (let s = 0; s < f; s++)
1224
+ for (let o = 0; o < t; o++)
1225
+ r[o * f + s] = e.view.getUint8(e.offset++);
1226
+ if (n === "FLOAT") return new Float32Array(r.buffer);
1227
+ if (n === "DOUBLE") return new Float64Array(r.buffer);
1228
+ if (n === "INT32") return new Int32Array(r.buffer);
1229
+ if (n === "INT64") return new BigInt64Array(r.buffer);
1230
+ if (n === "FIXED_LEN_BYTE_ARRAY") {
1231
+ const s = new Array(t);
1232
+ for (let o = 0; o < t; o++)
1233
+ s[o] = r.subarray(o * f, (o + 1) * f);
1234
+ return s;
1235
+ }
1236
+ throw new Error(`parquet byte_stream_split unsupported type: ${n}`);
1237
+ }
1238
+ function mt(e, t) {
1239
+ switch (e) {
1240
+ case "INT32":
1241
+ case "FLOAT":
1242
+ return 4;
1243
+ case "INT64":
1244
+ case "DOUBLE":
1245
+ return 8;
1246
+ case "FIXED_LEN_BYTE_ARRAY":
1247
+ if (!t) throw new Error("parquet byteWidth missing type_length");
1248
+ return t;
1249
+ default:
1250
+ throw new Error(`parquet unsupported type: ${e}`);
1251
+ }
1252
+ }
1253
+ function oe(e, t, n, i) {
1254
+ if (n === 0) return [];
1255
+ if (t === "BOOLEAN")
1256
+ return pt(e, n);
1257
+ if (t === "INT32")
1258
+ return At(e, n);
1259
+ if (t === "INT64")
1260
+ return Et(e, n);
1261
+ if (t === "INT96")
1262
+ return It(e, n);
1263
+ if (t === "FLOAT")
1264
+ return vt(e, n);
1265
+ if (t === "DOUBLE")
1266
+ return bt(e, n);
1267
+ if (t === "BYTE_ARRAY")
1268
+ return Tt(e, n);
1269
+ if (t === "FIXED_LEN_BYTE_ARRAY") {
1270
+ if (!i) throw new Error("parquet missing fixed length");
1271
+ return Lt(e, n, i);
1272
+ } else
1273
+ throw new Error(`parquet unhandled type: ${t}`);
1274
+ }
1275
+ function pt(e, t) {
1276
+ const n = new Array(t);
1277
+ for (let i = 0; i < t; i++) {
1278
+ const f = e.offset + (i / 8 | 0), r = i % 8, s = e.view.getUint8(f);
1279
+ n[i] = (s & 1 << r) !== 0;
1280
+ }
1281
+ return e.offset += Math.ceil(t / 8), n;
1282
+ }
1283
+ function At(e, t) {
1284
+ const n = (e.view.byteOffset + e.offset) % 4 ? new Int32Array(Z(e.view.buffer, e.view.byteOffset + e.offset, t * 4)) : new Int32Array(e.view.buffer, e.view.byteOffset + e.offset, t);
1285
+ return e.offset += t * 4, n;
1286
+ }
1287
+ function Et(e, t) {
1288
+ const n = (e.view.byteOffset + e.offset) % 8 ? new BigInt64Array(Z(e.view.buffer, e.view.byteOffset + e.offset, t * 8)) : new BigInt64Array(e.view.buffer, e.view.byteOffset + e.offset, t);
1289
+ return e.offset += t * 8, n;
1290
+ }
1291
+ function It(e, t) {
1292
+ const n = new Array(t);
1293
+ for (let i = 0; i < t; i++) {
1294
+ const f = e.view.getBigInt64(e.offset + i * 12, !0), r = e.view.getInt32(e.offset + i * 12 + 8, !0);
1295
+ n[i] = BigInt(r) << 64n | f;
1296
+ }
1297
+ return e.offset += t * 12, n;
1298
+ }
1299
+ function vt(e, t) {
1300
+ const n = (e.view.byteOffset + e.offset) % 4 ? new Float32Array(Z(e.view.buffer, e.view.byteOffset + e.offset, t * 4)) : new Float32Array(e.view.buffer, e.view.byteOffset + e.offset, t);
1301
+ return e.offset += t * 4, n;
1302
+ }
1303
+ function bt(e, t) {
1304
+ const n = (e.view.byteOffset + e.offset) % 8 ? new Float64Array(Z(e.view.buffer, e.view.byteOffset + e.offset, t * 8)) : new Float64Array(e.view.buffer, e.view.byteOffset + e.offset, t);
1305
+ return e.offset += t * 8, n;
1306
+ }
1307
+ function Tt(e, t) {
1308
+ const n = new Array(t);
1309
+ for (let i = 0; i < t; i++) {
1310
+ const f = e.view.getUint32(e.offset, !0);
1311
+ e.offset += 4, n[i] = new Uint8Array(e.view.buffer, e.view.byteOffset + e.offset, f), e.offset += f;
1312
+ }
1313
+ return n;
1314
+ }
1315
+ function Lt(e, t, n) {
1316
+ const i = new Array(t);
1317
+ for (let f = 0; f < t; f++)
1318
+ i[f] = new Uint8Array(e.view.buffer, e.view.byteOffset + e.offset, n), e.offset += n;
1319
+ return i;
1320
+ }
1321
+ function Z(e, t, n) {
1322
+ const i = new ArrayBuffer(n);
1323
+ return new Uint8Array(i).set(new Uint8Array(e, t, n)), i;
1324
+ }
1325
+ const Nt = [0, 255, 65535, 16777215, 4294967295];
1326
+ function me(e, t, n, i, f) {
1327
+ for (let r = 0; r < f; r++)
1328
+ n[i + r] = e[t + r];
1329
+ }
1330
+ function Rt(e, t) {
1331
+ const n = e.byteLength, i = t.byteLength;
1332
+ let f = 0, r = 0;
1333
+ for (; f < n; ) {
1334
+ const s = e[f];
1335
+ if (f++, s < 128)
1336
+ break;
1337
+ }
1338
+ if (i && f >= n)
1339
+ throw new Error("invalid snappy length header");
1340
+ for (; f < n; ) {
1341
+ const s = e[f];
1342
+ let o = 0;
1343
+ if (f++, f >= n)
1344
+ throw new Error("missing eof marker");
1345
+ if ((s & 3) === 0) {
1346
+ let u = (s >>> 2) + 1;
1347
+ if (u > 60) {
1348
+ if (f + 3 >= n)
1349
+ throw new Error("snappy error literal pos + 3 >= inputLength");
1350
+ const a = u - 60;
1351
+ u = e[f] + (e[f + 1] << 8) + (e[f + 2] << 16) + (e[f + 3] << 24), u = (u & Nt[a]) + 1, f += a;
1352
+ }
1353
+ if (f + u > n)
1354
+ throw new Error("snappy error literal exceeds input length");
1355
+ me(e, f, t, r, u), f += u, r += u;
1356
+ } else {
1357
+ let u = 0;
1358
+ switch (s & 3) {
1359
+ case 1:
1360
+ o = (s >>> 2 & 7) + 4, u = e[f] + (s >>> 5 << 8), f++;
1361
+ break;
1362
+ case 2:
1363
+ if (n <= f + 1)
1364
+ throw new Error("snappy error end of input");
1365
+ o = (s >>> 2) + 1, u = e[f] + (e[f + 1] << 8), f += 2;
1366
+ break;
1367
+ case 3:
1368
+ if (n <= f + 3)
1369
+ throw new Error("snappy error end of input");
1370
+ o = (s >>> 2) + 1, u = e[f] + (e[f + 1] << 8) + (e[f + 2] << 16) + (e[f + 3] << 24), f += 4;
1371
+ break;
1372
+ }
1373
+ if (u === 0 || isNaN(u))
1374
+ throw new Error(`invalid offset ${u} pos ${f} inputLength ${n}`);
1375
+ if (u > r)
1376
+ throw new Error("cannot copy from before start of buffer");
1377
+ me(t, r - u, t, r, o), r += o;
1378
+ }
1379
+ }
1380
+ if (r !== i) throw new Error("premature end of input");
1381
+ }
1382
+ function Ot(e, t, { type: n, element: i, schemaPath: f }) {
1383
+ const r = new DataView(e.buffer, e.byteOffset, e.byteLength), s = { view: r, offset: 0 };
1384
+ let o;
1385
+ const u = St(s, t, f), { definitionLevels: a, numNulls: c } = Bt(s, t, f), l = t.num_values - c;
1386
+ if (t.encoding === "PLAIN")
1387
+ o = oe(s, n, l, i.type_length);
1388
+ else if (t.encoding === "PLAIN_DICTIONARY" || t.encoding === "RLE_DICTIONARY" || t.encoding === "RLE") {
1389
+ const _ = n === "BOOLEAN" ? 1 : r.getUint8(s.offset++);
1390
+ _ ? (o = new Array(l), n === "BOOLEAN" ? (L(s, _, o), o = o.map((h) => !!h)) : L(s, _, o, r.byteLength - s.offset)) : o = new Uint8Array(l);
1391
+ } else if (t.encoding === "BYTE_STREAM_SPLIT")
1392
+ o = Ye(s, l, n, i.type_length);
1393
+ else if (t.encoding === "DELTA_BINARY_PACKED")
1394
+ o = n === "INT32" ? new Int32Array(l) : new BigInt64Array(l), F(s, l, o);
1395
+ else if (t.encoding === "DELTA_LENGTH_BYTE_ARRAY")
1396
+ o = new Array(l), Ce(s, l, o);
1397
+ else
1398
+ throw new Error(`parquet unsupported encoding: ${t.encoding}`);
1399
+ return { definitionLevels: a, repetitionLevels: u, dataPage: o };
1400
+ }
1401
+ function St(e, t, n) {
1402
+ if (n.length > 1) {
1403
+ const i = Se(n);
1404
+ if (i) {
1405
+ const f = new Array(t.num_values);
1406
+ return L(e, K(i), f), f;
1407
+ }
1408
+ }
1409
+ return [];
1410
+ }
1411
+ function Bt(e, t, n) {
1412
+ const i = fe(n);
1413
+ if (!i) return { definitionLevels: [], numNulls: 0 };
1414
+ const f = new Array(t.num_values);
1415
+ L(e, K(i), f);
1416
+ let r = t.num_values;
1417
+ for (const s of f)
1418
+ s === i && r--;
1419
+ return r === 0 && (f.length = 0), { definitionLevels: f, numNulls: r };
1420
+ }
1421
+ function ie(e, t, n, i) {
1422
+ let f;
1423
+ const r = i?.[n];
1424
+ if (n === "UNCOMPRESSED")
1425
+ f = e;
1426
+ else if (r)
1427
+ f = r(e, t);
1428
+ else if (n === "SNAPPY")
1429
+ f = new Uint8Array(t), Rt(e, f);
1430
+ else
1431
+ throw new Error(`parquet unsupported compression codec: ${n}`);
1432
+ if (f?.length !== t)
1433
+ throw new Error(`parquet decompressed page length ${f?.length} does not match header ${t}`);
1434
+ return f;
1435
+ }
1436
+ function Dt(e, t, n) {
1437
+ const f = { view: new DataView(e.buffer, e.byteOffset, e.byteLength), offset: 0 }, { type: r, element: s, schemaPath: o, codec: u, compressors: a } = n, c = t.data_page_header_v2;
1438
+ if (!c) throw new Error("parquet data page header v2 is undefined");
1439
+ const l = Ut(f, c, o);
1440
+ f.offset = c.repetition_levels_byte_length;
1441
+ const _ = xt(f, c, o), h = t.uncompressed_page_size - c.definition_levels_byte_length - c.repetition_levels_byte_length;
1442
+ let g = e.subarray(f.offset);
1443
+ c.is_compressed !== !1 && (g = ie(g, h, u, a));
1444
+ const y = new DataView(g.buffer, g.byteOffset, g.byteLength), w = { view: y, offset: 0 };
1445
+ let d;
1446
+ const m = c.num_values - c.num_nulls;
1447
+ if (c.encoding === "PLAIN")
1448
+ d = oe(w, r, m, s.type_length);
1449
+ else if (c.encoding === "RLE")
1450
+ d = new Array(m), L(w, 1, d), d = d.map((p) => !!p);
1451
+ else if (c.encoding === "PLAIN_DICTIONARY" || c.encoding === "RLE_DICTIONARY") {
1452
+ const p = y.getUint8(w.offset++);
1453
+ d = new Array(m), L(w, p, d, h - 1);
1454
+ } else if (c.encoding === "DELTA_BINARY_PACKED")
1455
+ d = r === "INT32" ? new Int32Array(m) : new BigInt64Array(m), F(w, m, d);
1456
+ else if (c.encoding === "DELTA_LENGTH_BYTE_ARRAY")
1457
+ d = new Array(m), Ce(w, m, d);
1458
+ else if (c.encoding === "DELTA_BYTE_ARRAY")
1459
+ d = new Array(m), wt(w, m, d);
1460
+ else if (c.encoding === "BYTE_STREAM_SPLIT")
1461
+ d = Ye(w, m, r, s.type_length);
1462
+ else
1463
+ throw new Error(`parquet unsupported encoding: ${c.encoding}`);
1464
+ return { definitionLevels: _, repetitionLevels: l, dataPage: d };
1465
+ }
1466
+ function Ut(e, t, n) {
1467
+ const i = Se(n);
1468
+ if (!i) return [];
1469
+ const f = new Array(t.num_values);
1470
+ return L(e, K(i), f, t.repetition_levels_byte_length), f;
1471
+ }
1472
+ function xt(e, t, n) {
1473
+ const i = fe(n);
1474
+ if (i) {
1475
+ const f = new Array(t.num_values);
1476
+ return L(e, K(i), f, t.definition_levels_byte_length), f;
1477
+ }
1478
+ }
1479
+ function pe(e, { groupStart: t, selectStart: n, selectEnd: i }, f, r) {
1480
+ const { pathInSchema: s, schemaPath: o } = f, u = Be(o), a = [];
1481
+ let c, l, _ = 0;
1482
+ const h = r && (() => {
1483
+ l && r({
1484
+ pathInSchema: s,
1485
+ columnData: l,
1486
+ rowStart: t + _ - l.length,
1487
+ rowEnd: t + _
1488
+ });
1489
+ });
1490
+ for (; (u ? _ < i : e.offset < e.view.byteLength - 1) && !(e.offset >= e.view.byteLength - 1); ) {
1491
+ const g = Pt(e);
1492
+ if (g.type === "DICTIONARY_PAGE")
1493
+ c = Ae(e, g, f, c, void 0, 0), c = Te(c, f);
1494
+ else {
1495
+ const y = l?.length || 0, w = Ae(e, g, f, c, l, n - _);
1496
+ l === w ? _ += w.length - y : (h?.(), a.push(w), _ += w.length, l = w);
1497
+ }
1498
+ }
1499
+ return h?.(), a;
1500
+ }
1501
+ function Ae(e, t, n, i, f, r) {
1502
+ const { type: s, element: o, schemaPath: u, codec: a, compressors: c } = n, l = new Uint8Array(
1503
+ e.view.buffer,
1504
+ e.view.byteOffset + e.offset,
1505
+ t.compressed_page_size
1506
+ );
1507
+ if (e.offset += t.compressed_page_size, t.type === "DATA_PAGE") {
1508
+ const _ = t.data_page_header;
1509
+ if (!_) throw new Error("parquet data page header is undefined");
1510
+ if (r > _.num_values && Be(u))
1511
+ return new Array(_.num_values);
1512
+ const h = ie(l, Number(t.uncompressed_page_size), a, c), { definitionLevels: g, repetitionLevels: y, dataPage: w } = Ot(h, _, n), d = ue(w, i, _.encoding, n), m = Array.isArray(f) ? f : [];
1513
+ return ye(m, g, y, d, u);
1514
+ } else if (t.type === "DATA_PAGE_V2") {
1515
+ const _ = t.data_page_header_v2;
1516
+ if (!_) throw new Error("parquet data page header v2 is undefined");
1517
+ if (r > _.num_rows)
1518
+ return new Array(_.num_values);
1519
+ const { definitionLevels: h, repetitionLevels: g, dataPage: y } = Dt(l, t, n), w = ue(y, i, _.encoding, n), d = Array.isArray(f) ? f : [];
1520
+ return ye(d, h, g, w, u);
1521
+ } else if (t.type === "DICTIONARY_PAGE") {
1522
+ const _ = t.dictionary_page_header;
1523
+ if (!_) throw new Error("parquet dictionary page header is undefined");
1524
+ const h = ie(
1525
+ l,
1526
+ Number(t.uncompressed_page_size),
1527
+ a,
1528
+ c
1529
+ ), g = { view: new DataView(h.buffer, h.byteOffset, h.byteLength), offset: 0 };
1530
+ return oe(g, s, _.num_values, o.type_length);
1531
+ } else
1532
+ throw new Error(`parquet unsupported page type: ${t.type}`);
1533
+ }
1534
+ function Pt(e) {
1535
+ const t = W(e), n = ve[t.field_1], i = t.field_2, f = t.field_3, r = t.field_4, s = t.field_5 && {
1536
+ num_values: t.field_5.field_1,
1537
+ encoding: O[t.field_5.field_2],
1538
+ definition_level_encoding: O[t.field_5.field_3],
1539
+ repetition_level_encoding: O[t.field_5.field_4],
1540
+ statistics: t.field_5.field_5 && {
1541
+ max: t.field_5.field_5.field_1,
1542
+ min: t.field_5.field_5.field_2,
1543
+ null_count: t.field_5.field_5.field_3,
1544
+ distinct_count: t.field_5.field_5.field_4,
1545
+ max_value: t.field_5.field_5.field_5,
1546
+ min_value: t.field_5.field_5.field_6
1547
+ }
1548
+ }, o = t.field_6, u = t.field_7 && {
1549
+ num_values: t.field_7.field_1,
1550
+ encoding: O[t.field_7.field_2],
1551
+ is_sorted: t.field_7.field_3
1552
+ }, a = t.field_8 && {
1553
+ num_values: t.field_8.field_1,
1554
+ num_nulls: t.field_8.field_2,
1555
+ num_rows: t.field_8.field_3,
1556
+ encoding: O[t.field_8.field_4],
1557
+ definition_levels_byte_length: t.field_8.field_5,
1558
+ repetition_levels_byte_length: t.field_8.field_6,
1559
+ is_compressed: t.field_8.field_7 === void 0 ? !0 : t.field_8.field_7,
1560
+ // default true
1561
+ statistics: t.field_8.field_8
1562
+ };
1563
+ return {
1564
+ type: n,
1565
+ uncompressed_page_size: i,
1566
+ compressed_page_size: f,
1567
+ crc: r,
1568
+ data_page_header: s,
1569
+ index_page_header: o,
1570
+ dictionary_page_header: u,
1571
+ data_page_header_v2: a
1572
+ };
1573
+ }
1574
+ function $t(e, { metadata: t }, n) {
1575
+ const { file: i, compressors: f, utf8: r } = e, s = [], o = { ...C, ...e.parsers };
1576
+ for (const u of n.chunks) {
1577
+ const { columnMetadata: a } = u, c = Oe(t.schema, a.path_in_schema), l = {
1578
+ pathInSchema: a.path_in_schema,
1579
+ type: a.type,
1580
+ element: c[c.length - 1].element,
1581
+ schemaPath: c,
1582
+ codec: a.codec,
1583
+ parsers: o,
1584
+ compressors: f,
1585
+ utf8: r
1586
+ };
1587
+ if (!("offsetIndex" in u)) {
1588
+ s.push({
1589
+ pathInSchema: a.path_in_schema,
1590
+ data: Promise.resolve(i.slice(u.range.startByte, u.range.endByte)).then((_) => {
1591
+ const h = { view: new DataView(_), offset: 0 };
1592
+ return {
1593
+ pageSkip: 0,
1594
+ data: pe(h, n, l, e.onPage)
1595
+ };
1596
+ })
1597
+ });
1598
+ continue;
1599
+ }
1600
+ s.push({
1601
+ pathInSchema: a.path_in_schema,
1602
+ // fetch offset index
1603
+ data: Promise.resolve(i.slice(u.offsetIndex.startByte, u.offsetIndex.endByte)).then(async (_) => {
1604
+ const h = ft({ view: new DataView(_), offset: 0 }), { selectStart: g, selectEnd: y } = n, w = h.page_locations;
1605
+ let d = NaN, m = NaN, p = 0;
1606
+ for (let T = 0; T < w.length; T++) {
1607
+ const R = w[T], se = Number(R.first_row_index), Ge = T + 1 < w.length ? Number(w[T + 1].first_row_index) : n.groupRows;
1608
+ se < y && Ge > g && (Number.isNaN(d) && (d = Number(R.offset), p = se), m = Number(R.offset) + R.compressed_page_size);
1609
+ }
1610
+ const A = await i.slice(d, m), I = { view: new DataView(A), offset: 0 }, N = p ? {
1611
+ ...n,
1612
+ groupStart: n.groupStart + p,
1613
+ selectStart: n.selectStart - p,
1614
+ selectEnd: n.selectEnd - p
1615
+ } : n;
1616
+ return {
1617
+ data: pe(I, N, l, e.onPage),
1618
+ pageSkip: p
1619
+ };
1620
+ })
1621
+ });
1622
+ }
1623
+ return { groupStart: n.groupStart, groupRows: n.groupRows, asyncColumns: s };
1624
+ }
1625
+ async function Ee({ asyncColumns: e }, t, n, i, f) {
1626
+ const r = await Promise.all(e.map(async ({ data: l }) => {
1627
+ const _ = await l;
1628
+ return {
1629
+ ..._,
1630
+ data: j(_.data)
1631
+ };
1632
+ })), s = e.map((l) => l.pathInSchema[0]).filter((l) => !i || i.includes(l)), o = i ?? s, u = o.map((l) => e.findIndex((_) => _.pathInSchema[0] === l)), a = n - t;
1633
+ if (f === "object") {
1634
+ const l = Array(a);
1635
+ for (let _ = 0; _ < a; _++) {
1636
+ const h = t + _, g = {};
1637
+ for (let y = 0; y < e.length; y++) {
1638
+ const { data: w, pageSkip: d } = r[y];
1639
+ g[e[y].pathInSchema[0]] = w[h - d];
1640
+ }
1641
+ l[_] = g;
1642
+ }
1643
+ return l;
1644
+ }
1645
+ const c = Array(a);
1646
+ for (let l = 0; l < a; l++) {
1647
+ const _ = t + l, h = Array(e.length);
1648
+ for (let g = 0; g < o.length; g++) {
1649
+ const y = u[g];
1650
+ if (y >= 0) {
1651
+ const { data: w, pageSkip: d } = r[y];
1652
+ h[g] = w[_ - d];
1653
+ }
1654
+ }
1655
+ c[l] = h;
1656
+ }
1657
+ return c;
1658
+ }
1659
+ function ke(e, t, n) {
1660
+ const { asyncColumns: i } = e;
1661
+ n = { ...C, ...n };
1662
+ const f = [];
1663
+ for (const r of t.children)
1664
+ if (r.children.length) {
1665
+ const s = i.filter((a) => a.pathInSchema[0] === r.element.name);
1666
+ if (!s.length) continue;
1667
+ const o = /* @__PURE__ */ new Map(), u = Promise.all(s.map((a) => a.data.then(({ data: c }) => {
1668
+ o.set(a.pathInSchema.join("."), j(c));
1669
+ }))).then(() => {
1670
+ x(o, r, n);
1671
+ const a = o.get(r.path.join("."));
1672
+ if (!a) throw new Error("parquet column data not assembled");
1673
+ return { data: [a], pageSkip: 0 };
1674
+ });
1675
+ f.push({ pathInSchema: r.path, data: u });
1676
+ } else {
1677
+ const s = i.find((o) => o.pathInSchema[0] === r.element.name);
1678
+ s && f.push(s);
1679
+ }
1680
+ return { ...e, asyncColumns: f };
1681
+ }
1682
+ async function Mt(e) {
1683
+ e.metadata ??= await H(e.file, e);
1684
+ const { rowStart: t = 0, rowEnd: n, columns: i, onChunk: f, onComplete: r, rowFormat: s, filter: o, filterStrict: u = !0 } = e;
1685
+ if (o && s !== "object")
1686
+ throw new Error('parquet filter requires rowFormat: "object"');
1687
+ const a = q(o);
1688
+ if (a.length) {
1689
+ const w = $(e.metadata).children.map((m) => m.element.name), d = a.filter((m) => !w.includes(m));
1690
+ if (d.length)
1691
+ throw new Error(`parquet filter columns not found: ${d.join(", ")}`);
1692
+ }
1693
+ let c = i, l = !1;
1694
+ if (i && o) {
1695
+ const w = a.filter((d) => !i.includes(d));
1696
+ w.length && (c = [...i, ...w], l = !0);
1697
+ }
1698
+ const _ = c !== i ? { ...e, columns: c } : e, h = qe(_);
1699
+ if (!r && !f) {
1700
+ for (const { asyncColumns: w } of h)
1701
+ for (const { data: d } of w) await d;
1702
+ return;
1703
+ }
1704
+ const g = $(e.metadata), y = h.map((w) => ke(w, g, e.parsers));
1705
+ if (f)
1706
+ for (const w of y)
1707
+ for (const d of w.asyncColumns)
1708
+ d.data.then(({ data: m, pageSkip: p }) => {
1709
+ let A = w.groupStart + p;
1710
+ for (const I of m)
1711
+ f({
1712
+ columnName: d.pathInSchema[0],
1713
+ columnData: I,
1714
+ rowStart: A,
1715
+ rowEnd: A + I.length
1716
+ }), A += I.length;
1717
+ });
1718
+ if (r) {
1719
+ const w = [];
1720
+ for (const d of y) {
1721
+ const m = Math.max(t - d.groupStart, 0), p = Math.min((n ?? 1 / 0) - d.groupStart, d.groupRows), A = s === "object" ? await Ee(d, m, p, c, "object") : await Ee(d, m, p, i, "array");
1722
+ if (o) {
1723
+ for (
1724
+ const I of
1725
+ /** @type {Record<string, any>[]} */
1726
+ A
1727
+ )
1728
+ if (U(I, o, u)) {
1729
+ if (l && i)
1730
+ for (const N of a)
1731
+ i.includes(N) || delete I[N];
1732
+ w.push(I);
1733
+ }
1734
+ } else
1735
+ Pe(w, A);
1736
+ }
1737
+ r(w);
1738
+ } else
1739
+ for (const { asyncColumns: w } of y)
1740
+ for (const { data: d } of w) await d;
1741
+ }
1742
+ function qe(e) {
1743
+ if (!e.metadata) throw new Error("parquet requires metadata");
1744
+ const t = ct(e);
1745
+ return e.file = ut(e.file, t), t.groups.map((n) => $t(e, t, n));
1746
+ }
1747
+ async function Ft(e) {
1748
+ if (e.columns?.length !== 1)
1749
+ throw new Error("parquetReadColumn expected columns: [columnName]");
1750
+ e.metadata ??= await H(e.file, e);
1751
+ const t = qe(e), n = $(e.metadata), i = t.map((r) => ke(r, n, e.parsers)), f = [];
1752
+ for (const r of i)
1753
+ f.push(j((await r.asyncColumns[0].data).data));
1754
+ return j(f);
1755
+ }
1756
+ function P(e) {
1757
+ return new Promise((t, n) => {
1758
+ Mt({
1759
+ ...e,
1760
+ rowFormat: "object",
1761
+ // force object output
1762
+ onComplete: t
1763
+ }).catch(n);
1764
+ });
1765
+ }
1766
+ async function Gt(e) {
1767
+ if (!e.file || !(e.file.byteLength >= 0))
1768
+ throw new Error("parquet expected AsyncBuffer");
1769
+ e.metadata ??= await H(e.file, e);
1770
+ const { metadata: t, rowStart: n = 0, columns: i, orderBy: f, filter: r } = e;
1771
+ if (n < 0) throw new Error("parquet rowStart must be positive");
1772
+ const s = e.rowEnd ?? Number(t.num_rows);
1773
+ if (f && !$(e.metadata).children.map((u) => u.element.name).includes(f))
1774
+ throw new Error(`parquet orderBy column not found: ${f}`);
1775
+ if (r && !f && s < t.num_rows) {
1776
+ const o = [];
1777
+ let u = 0;
1778
+ for (const a of t.row_groups) {
1779
+ const c = u + Number(a.num_rows), l = await P({
1780
+ ...e,
1781
+ rowStart: u,
1782
+ rowEnd: c
1783
+ });
1784
+ if (o.push(...l), o.length >= s) break;
1785
+ u = c;
1786
+ }
1787
+ return o.slice(n, s);
1788
+ } else if (r && f) {
1789
+ const o = i && !i.includes(f) ? [...i, f] : i, u = await P({
1790
+ ...e,
1791
+ rowStart: void 0,
1792
+ rowEnd: void 0,
1793
+ columns: o
1794
+ });
1795
+ if (u.sort((a, c) => Ie(a[f], c[f])), o !== i)
1796
+ for (const a of u)
1797
+ delete a[f];
1798
+ return u.slice(n, s);
1799
+ } else {
1800
+ if (r)
1801
+ return (await P({
1802
+ ...e,
1803
+ rowStart: void 0,
1804
+ rowEnd: void 0
1805
+ })).slice(n, s);
1806
+ if (typeof f == "string") {
1807
+ const o = await Ft({
1808
+ ...e,
1809
+ rowStart: void 0,
1810
+ rowEnd: void 0,
1811
+ columns: [f]
1812
+ }), u = Array.from(o, (l, _) => _).sort((l, _) => Ie(o[l], o[_])).slice(n, s), a = await Ct({ ...e, rows: u });
1813
+ return u.map((l) => a[l]);
1814
+ } else
1815
+ return await P(e);
1816
+ }
1817
+ }
1818
+ async function Ct(e) {
1819
+ const { file: t, rows: n } = e;
1820
+ e.metadata ??= await H(t, e);
1821
+ const { row_groups: i } = e.metadata, f = Array(i.length).fill(!1);
1822
+ let r = 0;
1823
+ const s = i.map((c) => r += Number(c.num_rows));
1824
+ for (const c of n) {
1825
+ const l = s.findIndex((_) => c < _);
1826
+ f[l] = !0;
1827
+ }
1828
+ const o = [];
1829
+ let u;
1830
+ r = 0;
1831
+ for (let c = 0; c < f.length; c++) {
1832
+ const l = r + Number(i[c].num_rows);
1833
+ f[c] ? u === void 0 && (u = r) : u !== void 0 && (o.push([u, l]), u = void 0), r = l;
1834
+ }
1835
+ u !== void 0 && o.push([u, r]);
1836
+ const a = Array(Number(e.metadata.num_rows));
1837
+ for (const [c, l] of o) {
1838
+ const _ = await P({ ...e, rowStart: c, rowEnd: l });
1839
+ for (let h = c; h < l; h++)
1840
+ a[h] = { __index__: h, ..._[h - c] };
1841
+ }
1842
+ return a;
1843
+ }
1844
+ function Ie(e, t) {
1845
+ return e < t ? -1 : e > t ? 1 : 0;
1846
+ }
1847
+ export {
1848
+ kt as asyncBufferFromUrl,
1849
+ ot as byteLengthFromUrl,
1850
+ qt as cachedAsyncBuffer,
1851
+ j as flatten,
1852
+ ae as parquetMetadata,
1853
+ H as parquetMetadataAsync,
1854
+ Gt as parquetQuery,
1855
+ Mt as parquetRead,
1856
+ P as parquetReadObjects,
1857
+ $ as parquetSchema,
1858
+ Yt as readColumnIndex,
1859
+ ft as readOffsetIndex,
1860
+ Rt as snappyUncompress,
1861
+ de as toJson
1862
+ };