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