@ducklings/workers 1.4.3-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +216 -0
- package/dist/index.cjs +4 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +426 -0
- package/dist/index.d.ts +426 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/wasm/duckdb-workers.js +8 -0
- package/dist/wasm/duckdb-workers.wasm +0 -0
- package/package.json +73 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
import { Table } from '@uwdata/flechette';
|
|
2
|
+
export { Table, tableFromArrays, tableFromIPC, tableToIPC } from '@uwdata/flechette';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Ducklings Workers - Minimal DuckDB for Cloudflare Workers
|
|
6
|
+
*
|
|
7
|
+
* This package provides a lightweight DuckDB binding for WebAssembly,
|
|
8
|
+
* designed for Cloudflare Workers and serverless environments.
|
|
9
|
+
*
|
|
10
|
+
* IMPORTANT: In this build, query() and execute() are async and return Promises.
|
|
11
|
+
* Always use: `await conn.query(...)` or `await conn.execute(...)`
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* DuckDB type constants mapping to the C API type IDs.
|
|
18
|
+
* @category Types
|
|
19
|
+
*/
|
|
20
|
+
declare const DuckDBType: {
|
|
21
|
+
readonly INVALID: 0;
|
|
22
|
+
readonly BOOLEAN: 1;
|
|
23
|
+
readonly TINYINT: 2;
|
|
24
|
+
readonly SMALLINT: 3;
|
|
25
|
+
readonly INTEGER: 4;
|
|
26
|
+
readonly BIGINT: 5;
|
|
27
|
+
readonly UTINYINT: 6;
|
|
28
|
+
readonly USMALLINT: 7;
|
|
29
|
+
readonly UINTEGER: 8;
|
|
30
|
+
readonly UBIGINT: 9;
|
|
31
|
+
readonly FLOAT: 10;
|
|
32
|
+
readonly DOUBLE: 11;
|
|
33
|
+
readonly TIMESTAMP: 12;
|
|
34
|
+
readonly DATE: 13;
|
|
35
|
+
readonly TIME: 14;
|
|
36
|
+
readonly INTERVAL: 15;
|
|
37
|
+
readonly HUGEINT: 16;
|
|
38
|
+
readonly UHUGEINT: 32;
|
|
39
|
+
readonly VARCHAR: 17;
|
|
40
|
+
readonly BLOB: 18;
|
|
41
|
+
readonly DECIMAL: 19;
|
|
42
|
+
readonly TIMESTAMP_S: 20;
|
|
43
|
+
readonly TIMESTAMP_MS: 21;
|
|
44
|
+
readonly TIMESTAMP_NS: 22;
|
|
45
|
+
readonly ENUM: 23;
|
|
46
|
+
readonly LIST: 24;
|
|
47
|
+
readonly STRUCT: 25;
|
|
48
|
+
readonly MAP: 26;
|
|
49
|
+
readonly ARRAY: 33;
|
|
50
|
+
readonly UUID: 27;
|
|
51
|
+
readonly UNION: 28;
|
|
52
|
+
readonly BIT: 29;
|
|
53
|
+
readonly TIME_TZ: 30;
|
|
54
|
+
readonly TIMESTAMP_TZ: 31;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Type ID from DuckDB type constants.
|
|
58
|
+
* @category Types
|
|
59
|
+
*/
|
|
60
|
+
type DuckDBTypeId = (typeof DuckDBType)[keyof typeof DuckDBType];
|
|
61
|
+
/**
|
|
62
|
+
* Database access mode.
|
|
63
|
+
* @category Configuration
|
|
64
|
+
*/
|
|
65
|
+
declare enum AccessMode {
|
|
66
|
+
/** DuckDB determines mode based on context (resolves to READ_WRITE for in-memory) */
|
|
67
|
+
AUTOMATIC = "automatic",
|
|
68
|
+
/** Read-only mode - all write operations are blocked */
|
|
69
|
+
READ_ONLY = "read_only",
|
|
70
|
+
/** Read-write mode - allows both reads and writes */
|
|
71
|
+
READ_WRITE = "read_write"
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* DuckDB configuration options.
|
|
75
|
+
* @category Configuration
|
|
76
|
+
*/
|
|
77
|
+
interface DuckDBConfig {
|
|
78
|
+
/**
|
|
79
|
+
* Database access mode.
|
|
80
|
+
* Use READ_ONLY to prevent any data modification.
|
|
81
|
+
* @default AccessMode.AUTOMATIC
|
|
82
|
+
*/
|
|
83
|
+
accessMode?: AccessMode;
|
|
84
|
+
/**
|
|
85
|
+
* Enable external access (file I/O, httpfs, etc.).
|
|
86
|
+
* Set to false to prevent all external data access.
|
|
87
|
+
* WARNING: Setting to false will disable httpfs functionality.
|
|
88
|
+
* @default true
|
|
89
|
+
*/
|
|
90
|
+
enableExternalAccess?: boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Lock configuration after startup.
|
|
93
|
+
* Prevents runtime configuration changes via SQL SET commands.
|
|
94
|
+
* @default true (secure default)
|
|
95
|
+
*/
|
|
96
|
+
lockConfiguration?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Custom configuration options.
|
|
99
|
+
* Key-value pairs passed directly to duckdb_set_config.
|
|
100
|
+
* @see https://duckdb.org/docs/configuration/overview
|
|
101
|
+
*/
|
|
102
|
+
customConfig?: Record<string, string>;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Error thrown by DuckDB operations.
|
|
106
|
+
* @category Types
|
|
107
|
+
*/
|
|
108
|
+
declare class DuckDBError extends Error {
|
|
109
|
+
readonly code?: string;
|
|
110
|
+
readonly query?: string;
|
|
111
|
+
constructor(message: string, code?: string, query?: string);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Options for SQL sanitization.
|
|
115
|
+
* @category Security
|
|
116
|
+
*/
|
|
117
|
+
interface SanitizeSqlOptions {
|
|
118
|
+
/** Allow PRAGMA statements (default: false) */
|
|
119
|
+
allowPragma?: boolean;
|
|
120
|
+
/** Allow COPY ... TO statements (default: false) */
|
|
121
|
+
allowCopyTo?: boolean;
|
|
122
|
+
/** Allow EXPORT DATABASE statements (default: false) */
|
|
123
|
+
allowExportDatabase?: boolean;
|
|
124
|
+
/** Allow duckdb_secrets() function (default: false) */
|
|
125
|
+
allowSecretsFunction?: boolean;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Result of SQL sanitization check.
|
|
129
|
+
* @category Security
|
|
130
|
+
*/
|
|
131
|
+
interface SanitizeResult {
|
|
132
|
+
/** Whether the SQL is considered safe */
|
|
133
|
+
safe: boolean;
|
|
134
|
+
/** The original SQL string */
|
|
135
|
+
sql: string;
|
|
136
|
+
/** Reason why the SQL was blocked (if unsafe) */
|
|
137
|
+
reason?: string;
|
|
138
|
+
/** The pattern that matched (if unsafe) */
|
|
139
|
+
matchedPattern?: string;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Checks if a SQL statement contains dangerous patterns.
|
|
143
|
+
*
|
|
144
|
+
* This function does not throw - it returns a result object indicating
|
|
145
|
+
* whether the SQL is safe or not. Use this when you want to handle
|
|
146
|
+
* unsafe SQL yourself.
|
|
147
|
+
*
|
|
148
|
+
* @category Security
|
|
149
|
+
* @param sql - The SQL statement to check
|
|
150
|
+
* @param options - Options to selectively allow certain patterns
|
|
151
|
+
* @returns A SanitizeResult object with safety status
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```typescript
|
|
155
|
+
* const result = checkSql("SELECT * FROM duckdb_secrets()");
|
|
156
|
+
* if (!result.safe) {
|
|
157
|
+
* console.log(`Blocked: ${result.reason}`);
|
|
158
|
+
* }
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
declare function checkSql(sql: string, options?: SanitizeSqlOptions): SanitizeResult;
|
|
162
|
+
/**
|
|
163
|
+
* Sanitizes a SQL statement by checking for dangerous patterns.
|
|
164
|
+
*
|
|
165
|
+
* This function throws a DuckDBError if the SQL contains dangerous patterns.
|
|
166
|
+
* Use this in request handlers to automatically reject unsafe queries.
|
|
167
|
+
*
|
|
168
|
+
* **Blocked patterns:**
|
|
169
|
+
* - `duckdb_secrets()` - Exposes database credentials
|
|
170
|
+
* - `PRAGMA` - Can modify database settings
|
|
171
|
+
* - `COPY ... TO` - Writes files to disk (COPY FROM is allowed)
|
|
172
|
+
* - `EXPORT DATABASE` - Exports database to files
|
|
173
|
+
*
|
|
174
|
+
* Note: SET commands are blocked separately by `lockConfiguration: true` in DuckDBConfig.
|
|
175
|
+
*
|
|
176
|
+
* @category Security
|
|
177
|
+
* @param sql - The SQL statement to sanitize
|
|
178
|
+
* @param options - Options to selectively allow certain patterns
|
|
179
|
+
* @returns The original SQL if safe
|
|
180
|
+
* @throws DuckDBError with code 'SANITIZE_ERROR' if dangerous patterns detected
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```typescript
|
|
184
|
+
* import { sanitizeSql, DuckDBError } from '@ducklings/workers';
|
|
185
|
+
*
|
|
186
|
+
* // In a request handler
|
|
187
|
+
* try {
|
|
188
|
+
* const safeSql = sanitizeSql(userInput);
|
|
189
|
+
* const result = await conn.query(safeSql);
|
|
190
|
+
* return Response.json({ data: result });
|
|
191
|
+
* } catch (e) {
|
|
192
|
+
* if (e instanceof DuckDBError && e.code === 'SANITIZE_ERROR') {
|
|
193
|
+
* return Response.json({ error: e.message }, { status: 400 });
|
|
194
|
+
* }
|
|
195
|
+
* throw e;
|
|
196
|
+
* }
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
declare function sanitizeSql(sql: string, options?: SanitizeSqlOptions): string;
|
|
200
|
+
/**
|
|
201
|
+
* Column metadata for query results.
|
|
202
|
+
* @category Types
|
|
203
|
+
*/
|
|
204
|
+
interface ColumnInfo {
|
|
205
|
+
name: string;
|
|
206
|
+
type: DuckDBTypeId;
|
|
207
|
+
alias?: string;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Options for initializing the DuckDB WASM module (workers build).
|
|
211
|
+
* @category Types
|
|
212
|
+
*/
|
|
213
|
+
interface InitOptions {
|
|
214
|
+
/**
|
|
215
|
+
* Pre-compiled WebAssembly.Module (required for Cloudflare Workers)
|
|
216
|
+
* In Workers, import the WASM file directly and pass it here.
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```typescript
|
|
220
|
+
* import wasmModule from '@ducklings/workers/wasm';
|
|
221
|
+
* await init({ wasmModule });
|
|
222
|
+
* ```
|
|
223
|
+
*/
|
|
224
|
+
wasmModule: WebAssembly.Module;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Initialize the DuckDB WASM module (workers build with Asyncify).
|
|
228
|
+
*
|
|
229
|
+
* This version is optimized for Cloudflare Workers and uses the workers-specific
|
|
230
|
+
* WASM build that includes Asyncify support for async HTTP operations.
|
|
231
|
+
*
|
|
232
|
+
* @category Database
|
|
233
|
+
* @param options - Initialization options with pre-compiled WASM module
|
|
234
|
+
* @returns Promise that resolves when initialization is complete
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```typescript
|
|
238
|
+
* import { init, DuckDB } from '@ducklings/workers';
|
|
239
|
+
* import wasmModule from '@ducklings/workers/wasm';
|
|
240
|
+
*
|
|
241
|
+
* await init({ wasmModule });
|
|
242
|
+
*
|
|
243
|
+
* const db = new DuckDB();
|
|
244
|
+
* const conn = db.connect();
|
|
245
|
+
*
|
|
246
|
+
* // httpfs works in CF Workers with this build!
|
|
247
|
+
* const result = await conn.query("SELECT * FROM 'https://example.com/data.parquet'");
|
|
248
|
+
* ```
|
|
249
|
+
*/
|
|
250
|
+
declare function init(options: InitOptions): Promise<void>;
|
|
251
|
+
/**
|
|
252
|
+
* Returns the DuckDB library version.
|
|
253
|
+
* @category Database
|
|
254
|
+
*/
|
|
255
|
+
declare function version(): string;
|
|
256
|
+
/**
|
|
257
|
+
* A prepared SQL statement with parameter binding.
|
|
258
|
+
* @category Query Results
|
|
259
|
+
*/
|
|
260
|
+
declare class PreparedStatement {
|
|
261
|
+
private stmtPtr;
|
|
262
|
+
private closed;
|
|
263
|
+
private readonly sql;
|
|
264
|
+
/** @internal */
|
|
265
|
+
constructor(stmtPtr: number, _connPtr: number, sql: string);
|
|
266
|
+
parameterCount(): number;
|
|
267
|
+
bindBoolean(index: number, value: boolean): this;
|
|
268
|
+
bindInt32(index: number, value: number): this;
|
|
269
|
+
bindInt64(index: number, value: bigint | number): this;
|
|
270
|
+
bindFloat(index: number, value: number): this;
|
|
271
|
+
bindDouble(index: number, value: number): this;
|
|
272
|
+
bindString(index: number, value: string): this;
|
|
273
|
+
bindBlob(index: number, value: Uint8Array): this;
|
|
274
|
+
bindNull(index: number): this;
|
|
275
|
+
bindTimestamp(index: number, value: Date): this;
|
|
276
|
+
bindDate(index: number, value: Date): this;
|
|
277
|
+
bind(index: number, value: unknown): this;
|
|
278
|
+
/**
|
|
279
|
+
* Executes the prepared statement and returns results as an array of objects.
|
|
280
|
+
* @returns Promise resolving to array of result rows
|
|
281
|
+
*/
|
|
282
|
+
run<T = Record<string, unknown>>(): Promise<T[]>;
|
|
283
|
+
/**
|
|
284
|
+
* Executes the prepared statement without returning results.
|
|
285
|
+
* @returns Promise resolving to number of rows affected
|
|
286
|
+
*/
|
|
287
|
+
execute(): Promise<number>;
|
|
288
|
+
close(): void;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* A chunk of data from a streaming query result.
|
|
292
|
+
* @category Query Results
|
|
293
|
+
*/
|
|
294
|
+
declare class DataChunk {
|
|
295
|
+
private chunkPtr;
|
|
296
|
+
private destroyed;
|
|
297
|
+
private readonly columns;
|
|
298
|
+
/** @internal */
|
|
299
|
+
constructor(chunkPtr: number, columns: ColumnInfo[]);
|
|
300
|
+
get rowCount(): number;
|
|
301
|
+
get columnCount(): number;
|
|
302
|
+
getColumnInfo(): ColumnInfo[];
|
|
303
|
+
getColumn(columnIndex: number): unknown[];
|
|
304
|
+
toArray<T = Record<string, unknown>>(): T[];
|
|
305
|
+
private readVectorData;
|
|
306
|
+
destroy(): void;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* A streaming query result that yields data in chunks.
|
|
310
|
+
* @category Query Results
|
|
311
|
+
*/
|
|
312
|
+
declare class StreamingResult implements Iterable<DataChunk> {
|
|
313
|
+
private resultPtr;
|
|
314
|
+
private closed;
|
|
315
|
+
private readonly columns;
|
|
316
|
+
private currentChunkIndex;
|
|
317
|
+
private readonly totalChunks;
|
|
318
|
+
/** @internal */
|
|
319
|
+
constructor(resultPtr: number, columns: ColumnInfo[]);
|
|
320
|
+
getColumns(): ColumnInfo[];
|
|
321
|
+
get columnCount(): number;
|
|
322
|
+
get chunkCount(): number;
|
|
323
|
+
nextChunk(): DataChunk | null;
|
|
324
|
+
reset(): void;
|
|
325
|
+
[Symbol.iterator](): Iterator<DataChunk>;
|
|
326
|
+
toArray<T = Record<string, unknown>>(): T[];
|
|
327
|
+
toArrowTable(): Table;
|
|
328
|
+
private getFlechetteType;
|
|
329
|
+
close(): void;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* DuckDB database instance for Cloudflare Workers.
|
|
333
|
+
*
|
|
334
|
+
* @category Database
|
|
335
|
+
* @example
|
|
336
|
+
* ```typescript
|
|
337
|
+
* import { init, DuckDB, AccessMode } from '@ducklings/workers';
|
|
338
|
+
* import wasmModule from '@ducklings/workers/wasm';
|
|
339
|
+
*
|
|
340
|
+
* await init({ wasmModule });
|
|
341
|
+
*
|
|
342
|
+
* // Default configuration (httpfs enabled, config locked)
|
|
343
|
+
* const db = new DuckDB();
|
|
344
|
+
*
|
|
345
|
+
* // Or with custom security configuration
|
|
346
|
+
* const secureDb = new DuckDB({
|
|
347
|
+
* accessMode: AccessMode.READ_ONLY,
|
|
348
|
+
* lockConfiguration: true,
|
|
349
|
+
* });
|
|
350
|
+
*
|
|
351
|
+
* const conn = db.connect();
|
|
352
|
+
* const result = await conn.query('SELECT 42 as answer');
|
|
353
|
+
* console.log(result);
|
|
354
|
+
*
|
|
355
|
+
* conn.close();
|
|
356
|
+
* db.close();
|
|
357
|
+
* ```
|
|
358
|
+
*/
|
|
359
|
+
declare class DuckDB {
|
|
360
|
+
private dbPtr;
|
|
361
|
+
private closed;
|
|
362
|
+
/**
|
|
363
|
+
* Creates a new DuckDB database instance.
|
|
364
|
+
*
|
|
365
|
+
* @param config - Optional configuration options
|
|
366
|
+
*/
|
|
367
|
+
constructor(config?: DuckDBConfig);
|
|
368
|
+
/**
|
|
369
|
+
* Creates a new DuckDB database instance asynchronously.
|
|
370
|
+
*
|
|
371
|
+
* @param config - Optional configuration options
|
|
372
|
+
*/
|
|
373
|
+
static create(config?: DuckDBConfig): Promise<DuckDB>;
|
|
374
|
+
connect(): Connection;
|
|
375
|
+
close(): void;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* A connection to a DuckDB database (async API for Cloudflare Workers).
|
|
379
|
+
*
|
|
380
|
+
* All query methods in this class are async and return Promises.
|
|
381
|
+
* @category Connection
|
|
382
|
+
*/
|
|
383
|
+
declare class Connection {
|
|
384
|
+
private connPtr;
|
|
385
|
+
private closed;
|
|
386
|
+
/** @internal */
|
|
387
|
+
constructor(connPtr: number);
|
|
388
|
+
/**
|
|
389
|
+
* Executes a SQL query and returns the results.
|
|
390
|
+
* This is async to support httpfs in Cloudflare Workers.
|
|
391
|
+
*
|
|
392
|
+
* @param sql - The SQL query to execute
|
|
393
|
+
* @returns Promise resolving to array of result rows as objects
|
|
394
|
+
*/
|
|
395
|
+
query<T = Record<string, unknown>>(sql: string): Promise<T[]>;
|
|
396
|
+
private readColumnData;
|
|
397
|
+
/**
|
|
398
|
+
* Executes a SQL query and returns results as an Arrow table.
|
|
399
|
+
*
|
|
400
|
+
* @param sql - The SQL query to execute
|
|
401
|
+
* @returns Promise resolving to Arrow Table
|
|
402
|
+
*/
|
|
403
|
+
queryArrow(sql: string): Promise<Table>;
|
|
404
|
+
private getFlechetteType;
|
|
405
|
+
/**
|
|
406
|
+
* Executes a SQL statement without returning results.
|
|
407
|
+
*
|
|
408
|
+
* @param sql - The SQL statement to execute
|
|
409
|
+
* @returns Promise resolving to number of rows affected
|
|
410
|
+
*/
|
|
411
|
+
execute(sql: string): Promise<number>;
|
|
412
|
+
/**
|
|
413
|
+
* Creates a prepared statement for the given SQL.
|
|
414
|
+
*
|
|
415
|
+
* @param sql - The SQL statement to prepare (use ? for parameters)
|
|
416
|
+
* @returns A PreparedStatement instance
|
|
417
|
+
*/
|
|
418
|
+
prepare(sql: string): PreparedStatement;
|
|
419
|
+
beginTransaction(): Promise<void>;
|
|
420
|
+
commit(): Promise<void>;
|
|
421
|
+
rollback(): Promise<void>;
|
|
422
|
+
transaction<T>(fn: () => Promise<T>): Promise<T>;
|
|
423
|
+
close(): void;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
export { AccessMode, type ColumnInfo, Connection, DataChunk, DuckDB, type DuckDBConfig, DuckDBError, DuckDBType, type DuckDBTypeId, type InitOptions, PreparedStatement, type SanitizeResult, type SanitizeSqlOptions, StreamingResult, checkSql, init, sanitizeSql, version };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Ducklings Workers - Minimal DuckDB for Cloudflare Workers
|
|
2
|
+
var dt=Uint8Array.of(65,82,82,79,87,49),on=Uint8Array.of(255,255,255,255,0,0,0,0),B={V1:0,V4:3,V5:4},Tr={Little:0},P={NONE:0,Schema:1,DictionaryBatch:2,RecordBatch:3,Tensor:4,SparseTensor:5},l={Dictionary:-1,NONE:0,Null:1,Int:2,Float:3,Binary:4,Utf8:5,Bool:6,Decimal:7,Date:8,Time:9,Timestamp:10,Interval:11,List:12,Struct:13,Union:14,FixedSizeBinary:15,FixedSizeList:16,Map:17,Duration:18,LargeBinary:19,LargeUtf8:20,LargeList:21,RunEndEncoded:22,BinaryView:23,Utf8View:24,ListView:25,LargeListView:26},J={HALF:0,SINGLE:1,DOUBLE:2},H={DAY:0,MILLISECOND:1},w={SECOND:0,MILLISECOND:1,MICROSECOND:2,NANOSECOND:3},N={YEAR_MONTH:0,DAY_TIME:1,MONTH_DAY_NANO:2},z={Sparse:0,Dense:1};var q=Uint8Array,Vt=Uint16Array,Rt=Uint32Array,At=BigUint64Array,mt=Int8Array,Er=Int16Array,U=Int32Array,M=BigInt64Array,se=Float32Array,tt=Float64Array;function cn(r){return r instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&r instanceof SharedArrayBuffer}function an(r,t){let e=Math.log2(r)-3;return (t?[mt,Er,U,M]:[q,Vt,Rt,At])[e]}var es=Object.getPrototypeOf(Int8Array);function _r(r){return r instanceof es}function oe(r){return Array.isArray(r)||_r(r)}function Tt(r){return r===M||r===At}function Et(r,t){let e=0,n=r.length;if(n<=2147483648)do{let i=e+n>>>1;r[i]<=t?e=i+1:n=i;}while(e<n);else do{let i=Math.trunc((e+n)/2);r[i]<=t?e=i+1:n=i;}while(e<n);return e}function rs(r,t=1){return (r*t+7&-8)/t}function un(r,t=r.length){let e=rs(t,r.BYTES_PER_ELEMENT);return r.length>e?r.subarray(0,e):r.length<e?ln(r,e):r}function ln(r,t,e=0){let n=new r.constructor(t);return n.set(r,e),n}function ie(r,t,e){for(;r.length<=t;)r=ln(r,r.length<<1,e?r.length:0);return r}function fn(r){return r instanceof Date}function dn(r){return typeof r[Symbol.iterator]=="function"}function ce(r,t,e){if(t(r))return r;throw new Error(e(r))}function L(r,t,e){return t=Array.isArray(t)?t:Object.values(t),ce(r,n=>t.includes(n),e??(()=>`${r} must be one of ${t}`))}function ae(r,t){for(let[e,n]of Object.entries(r))if(n===t)return e;return "<Unknown>"}var C=r=>`Unsupported data type: "${ae(l,r)}" (id ${r})`,ht=(r,t,e=true,n=null)=>({name:r,type:t,nullable:e,metadata:n});function mn(r){return Object.hasOwn(r,"name")&&hn(r.type)}function hn(r){return typeof r?.typeId=="number"}function nt(r,t="",e=true){return mn(r)?r:ht(t,ce(r,hn,()=>"Data type expected."),e)}var pn=r=>({typeId:r}),Ht=(r,t,e=false,n=-1)=>({typeId:l.Dictionary,id:n,dictionary:r,indices:t||G(),ordered:e}),kr=()=>pn(l.Null),j=(r=32,t=true)=>({typeId:l.Int,bitWidth:L(r,[8,16,32,64]),signed:t,values:an(r,t)}),st=()=>j(8),ot=()=>j(16),G=()=>j(32),it=()=>j(64),_t=()=>j(8,false),kt=()=>j(16,false),Dt=()=>j(32,false),St=()=>j(64,false),zt=(r=2)=>({typeId:l.Float,precision:L(r,J),values:[Vt,se,tt][r]});var Ot=()=>zt(J.SINGLE),et=()=>zt(J.DOUBLE),Dr=()=>({typeId:l.Binary,offsets:U}),$=()=>({typeId:l.Utf8,offsets:U}),Bt=()=>pn(l.Bool),Sr=(r,t,e=128)=>({typeId:l.Decimal,precision:r,scale:t,bitWidth:L(e,[32,64,128,256]),values:e===32?U:At});var ue=r=>({typeId:l.Date,unit:L(r,H),values:r===H.DAY?U:M}),Pt=()=>ue(H.DAY);var Or=(r=w.MILLISECOND)=>{r=L(r,w);let t=r===w.SECOND||r===w.MILLISECOND?32:64;return {typeId:l.Time,unit:r,bitWidth:t,values:t===32?U:M}};var ct=(r=w.MILLISECOND,t=null)=>({typeId:l.Timestamp,unit:L(r,w),timezone:t,values:M}),Br=(r=N.MONTH_DAY_NANO)=>({typeId:l.Interval,unit:L(r,N),values:r===N.MONTH_DAY_NANO?void 0:U}),jt=r=>({typeId:l.List,children:[nt(r)],offsets:U}),Gt=r=>({typeId:l.Struct,children:Array.isArray(r)&&mn(r[0])?r:Object.entries(r).map(([t,e])=>ht(t,e))}),Pr=(r,t,e,n)=>(e??=t.map((i,s)=>s),{typeId:l.Union,mode:L(r,z),typeIds:e,typeMap:e.reduce((i,s,c)=>(i[s]=c,i),{}),children:t.map((i,s)=>nt(i,`_${s}`)),typeIdForValue:n,offsets:U}),Ur=r=>({typeId:l.FixedSizeBinary,stride:r}),$t=(r,t)=>({typeId:l.FixedSizeList,stride:t,children:[nt(r)]}),bn=(r,t)=>({typeId:l.Map,keysSorted:r,children:[t],offsets:U});var vr=(r=w.MILLISECOND)=>({typeId:l.Duration,unit:L(r,w),values:M}),Nr=()=>({typeId:l.LargeBinary,offsets:M}),Mr=()=>({typeId:l.LargeUtf8,offsets:M}),Lr=r=>({typeId:l.LargeList,children:[nt(r)],offsets:M}),Fr=(r,t)=>({typeId:l.RunEndEncoded,children:[ce(nt(r,"run_ends"),e=>e.type.typeId===l.Int,()=>"Run-ends must have an integer type."),nt(t,"values")]});var Cr=r=>({typeId:l.ListView,children:[nt(r,"value")],offsets:U}),Vr=r=>({typeId:l.LargeListView,children:[nt(r,"value")],offsets:M});var gn=new tt(2),le=gn.buffer,ns=new M(le),Ut=new Rt(le),yn=new U(le),ss=new q(le);function os(r){return r}function Y(r){return BigInt(r)}function fe(r){return Tt(r)?Y:os}function In(r){return r/864e5|0}function wn(r){return r===w.SECOND?t=>Y(t/1e3):r===w.MILLISECOND?Y:r===w.MICROSECOND?t=>Y(t*1e3):t=>Y(t*1e6)}function xn([r,t,e]){return yn[0]=r,yn[1]=t,ns[1]=Y(e),ss}function X(r){if(r>Number.MAX_SAFE_INTEGER||r<Number.MIN_SAFE_INTEGER)throw Error(`BigInt exceeds integer number representation: ${r}`);return Number(r)}function de(r,t){return Number(r/t)+Number(r%t)/Number(t)}function An(r){return t=>typeof t=="bigint"?Number(t):Math.trunc(t*r)}function Tn(r,t,e,n,i){let s=typeof r=="bigint"?r:Y(Math.trunc(r*i));t[e]=s,n>1&&(t[e+1]=s>>64n,n>2&&(t[e+2]=s>>128n,t[e+3]=s>>192n));}var vt=r=>BigInt.asUintN(64,r);function En(r,t){return BigInt.asIntN(64,r[t])}function _n(r,t){let e=t<<1,n;return BigInt.asIntN(64,r[e+1])<0?(n=vt(~r[e])|vt(~r[e+1])<<64n,n=-(n+1n)):n=r[e]|r[e+1]<<64n,n}function kn(r,t){let e=t<<2,n;return BigInt.asIntN(64,r[e+3])<0?(n=vt(~r[e])|vt(~r[e+1])<<64n|vt(~r[e+2])<<128n|vt(~r[e+3])<<192n,n=-(n+1n)):n=r[e]|r[e+1]<<64n|r[e+2]<<128n|r[e+3]<<192n,n}function Dn(r){if(r!==r)return 32256;gn[0]=r;let t=(Ut[1]&2147483648)>>16&65535,e=Ut[1]&2146435072,n=0;return e>=1089470464?Ut[0]>0?e=31744:(e=(e&2080374784)>>16,n=(Ut[1]&1048575)>>10):e<=1056964608?(n=1048576+(Ut[1]&1048575),n=1048576+(n<<(e>>20)-998)>>21,e=0):(e=e-1056964608>>10,n=(Ut[1]&1048575)+512>>10),t|e|n&65535}var is=new TextDecoder("utf-8"),cs=new TextEncoder;function Nt(r){return is.decode(r)}function me(r){return cs.encode(r)}function Mt(r){return `${typeof r!="object"||!r?r??null:fn(r)?+r:oe(r)?`[${r.map(Mt)}]`:as(r)}`}function as(r){let t="",e=-1;for(let n in r)++e>0&&(t+=","),t+=`"${n}":${Mt(r[n])}`;return `{${t}}`}var V=4,he=2;function Rr(r,t){return (r[t>>3]&1<<t%8)!==0}function v(r,t){let e=t+x(r,t),n=e-x(r,e),i=k(r,n);return (s,c,a=null)=>{if(s<i){let o=k(r,n+s);if(o)return c(r,e+o)}return a}}function W(r,t){return t}function at(r,t){return !!us(r,t)}function us(r,t){return Yt(r,t)<<24>>24}function Yt(r,t){return r[t]}function k(r,t){return ls(r,t)<<16>>16}function ls(r,t){return r[t]|r[t+1]<<8}function x(r,t){return r[t]|r[t+1]<<8|r[t+2]<<16|r[t+3]<<24}function Sn(r,t){return x(r,t)>>>0}function O(r,t){return X(BigInt.asIntN(64,BigInt(Sn(r,t))+(BigInt(Sn(r,t+V))<<32n)))}function pt(r,t){let e=t+x(r,t),n=x(r,e);return e+=V,Nt(r.subarray(e,e+n))}function F(r,t,e,n){if(!t)return [];let i=t+x(r,t);return Array.from({length:x(r,i)},(s,c)=>n(r,i+V+c*e))}var pe=Symbol("rowIndex");function Wt(r,t){class e{constructor(s){this[pe]=s;}toJSON(){return On(r,t,this[pe])}}let n=e.prototype;for(let i=0;i<r.length;++i){if(Object.hasOwn(n,r[i]))continue;let s=t[i];Object.defineProperty(n,r[i],{get(){return s.at(this[pe])},enumerable:true});}return i=>new e(i)}function be(r,t){return e=>On(r,t,e)}function On(r,t,e){let n={};for(let i=0;i<r.length;++i)n[r[i]]=t[i].at(e);return n}function Bn(r){return r instanceof Q}var bt=class{static ArrayType=null;constructor({length:t,nullCount:e,type:n,validity:i,values:s,offsets:c,sizes:a,children:o}){this.length=t,this.nullCount=e,this.type=n,this.validity=i,this.values=s,this.offsets=c,this.sizes=a,this.children=o,(!e||!this.validity)&&(this.at=u=>this.value(u));}get[Symbol.toStringTag](){return "Batch"}at(t){return this.isValid(t)?this.value(t):null}isValid(t){return Rr(this.validity,t)}value(t){return this.values[t]}slice(t,e){let n=e-t,i=Array(n);for(let s=0;s<n;++s)i[s]=this.at(t+s);return i}*[Symbol.iterator](){for(let t=0;t<this.length;++t)yield this.at(t);}},Q=class extends bt{constructor(t){super(t);let{length:e,values:n}=this;this.values=n.subarray(0,e);}slice(t,e){return this.nullCount?super.slice(t,e):this.values.subarray(t,e)}[Symbol.iterator](){return this.nullCount?super[Symbol.iterator]():this.values[Symbol.iterator]()}},Lt=class extends bt{static ArrayType=tt},A=class extends bt{static ArrayType=Array},Ft=class extends A{value(t){return null}},Z=class extends Lt{value(t){return X(this.values[t])}},ye=class extends Lt{value(t){let e=this.values[t],n=(e&31744)>>10,i=(e&1023)/1024,s=(-1)**((e&32768)>>15);switch(n){case 31:return s*(i?Number.NaN:1/0);case 0:return s*(i?6103515625e-14*i:0)}return s*2**(n-15)*(1+i)}},ge=class extends A{value(t){return Rr(this.values,t)}},Ie=class extends Lt{constructor(t){super(t);let{scale:e}=this.type;this.scale=10**e;}value(t){return this.values[t]/this.scale}},we=class extends bt{constructor(t){super(t);let{bitWidth:e,scale:n}=this.type;this.decimal=e===64?En:e===128?_n:kn,this.scale=10n**BigInt(n);}},xe=class extends we{static ArrayType=tt;value(t){return de(this.decimal(this.values,t),this.scale)}},Ae=class extends we{static ArrayType=Array;value(t){return this.decimal(this.values,t)}},Zt=class extends A{constructor(t){super(t),this.source=t;}value(t){return new Date(this.source.value(t))}},Te=class extends Lt{value(t){return 864e5*this.values[t]}},Pn=Z,Ee=class extends Z{value(t){return super.value(t)*1e3}},Un=Z,_e=class extends Z{value(t){return de(this.values[t],1000n)}},ke=class extends Z{value(t){return de(this.values[t],1000000n)}},De=class extends A{value(t){return this.values.subarray(t<<1,t+1<<1)}},Se=class extends A{value(t){let e=this.values,n=t<<4;return Float64Array.of(x(e,n),x(e,n+4),O(e,n+8))}},vn=({values:r,offsets:t},e)=>r.subarray(t[e],t[e+1]),Nn=({values:r,offsets:t},e)=>r.subarray(X(t[e]),X(t[e+1])),Oe=class extends A{value(t){return vn(this,t)}},Be=class extends A{value(t){return Nn(this,t)}},Pe=class extends A{value(t){return Nt(vn(this,t))}},Ue=class extends A{value(t){return Nt(Nn(this,t))}},ve=class extends A{value(t){let e=this.offsets;return this.children[0].slice(e[t],e[t+1])}},Ne=class extends A{value(t){let e=this.offsets;return this.children[0].slice(X(e[t]),X(e[t+1]))}},Me=class extends A{value(t){let e=this.offsets[t],n=e+this.sizes[t];return this.children[0].slice(e,n)}},Le=class extends A{value(t){let e=this.offsets[t],n=e+this.sizes[t];return this.children[0].slice(X(e),X(n))}},Fe=class extends A{constructor(t){super(t),this.stride=this.type.stride;}},Ce=class extends Fe{value(t){let{stride:e,values:n}=this;return n.subarray(t*e,(t+1)*e)}},Ve=class extends Fe{value(t){let{children:e,stride:n}=this;return e[0].slice(t*n,(t+1)*n)}};function Mn({children:r,offsets:t},e){let[n,i]=r[0].children,s=t[e],c=t[e+1],a=[];for(let o=s;o<c;++o)a.push([n.at(o),i.at(o)]);return a}var Re=class extends A{value(t){return Mn(this,t)}},He=class extends A{value(t){return new Map(Mn(this,t))}},qt=class extends A{constructor({typeIds:t,...e}){super(e),this.typeIds=t,this.typeMap=this.type.typeMap;}value(t,e=t){let{typeIds:n,children:i,typeMap:s}=this;return i[s[n[t]]].at(e)}},ze=class extends qt{value(t){return super.value(t,this.offsets[t])}},Xt=class extends A{constructor(t,e=be){super(t),this.names=this.type.children.map(n=>n.name),this.factory=e(this.names,this.children);}value(t){return this.factory(t)}},je=class extends Xt{constructor(t){super(t,Wt);}},Ge=class extends A{value(t){let[{values:e},n]=this.children;return n.at(Et(e,t))}},$e=class extends A{setDictionary(t){return this.dictionary=t,this.cache=t.cache(),this}value(t){return this.cache[this.key(t)]}key(t){return this.values[t]}},Ye=class extends A{constructor({data:t,...e}){super(e),this.data=t;}view(t){let{values:e,data:n}=this,i=t<<4,s=i+4,c=e,a=x(c,i);return a>12&&(s=x(c,i+12),c=n[x(c,i+8)]),c.subarray(s,s+a)}},We=class extends Ye{value(t){return this.view(t)}},Ze=class extends Ye{value(t){return Nt(this.view(t))}};function Hr(r){let t=[];return {add(e){return t.push(e),this},clear:()=>t=[],done:()=>new K(t,r)}}var K=class{constructor(t,e=t[0]?.type){this.type=e,this.length=t.reduce((s,c)=>s+c.length,0),this.nullCount=t.reduce((s,c)=>s+c.nullCount,0),this.data=t;let n=t.length,i=new Int32Array(n+1);if(n===1){let[s]=t;i[1]=s.length,this.at=c=>s.at(c);}else for(let s=0,c=0;s<n;++s)i[s+1]=c+=t[s].length;this.offsets=i;}get[Symbol.toStringTag](){return "Column"}[Symbol.iterator](){let t=this.data;return t.length===1?t[0][Symbol.iterator]():fs(t)}at(t){let{data:e,offsets:n}=this,i=Et(n,t)-1;return e[i]?.at(t-n[i])}get(t){return this.at(t)}toArray(){let{length:t,nullCount:e,data:n}=this,i=!e&&Bn(n[0]),s=n.length;if(i&&s===1)return n[0].values;let c=!s||e>0?Array:n[0].constructor.ArrayType??n[0].values.constructor,a=new c(t);return i?ds(a,n):ms(a,n)}cache(){return this._cache??(this._cache=this.toArray())}};function*fs(r){for(let t=0;t<r.length;++t){let e=r[t][Symbol.iterator]();for(let n=e.next();!n.done;n=e.next())yield n.value;}}function ds(r,t){for(let e=0,n=0;e<t.length;++e){let{values:i}=t[e];r.set(i,n),n+=i.length;}return r}function ms(r,t){let e=-1;for(let n=0;n<t.length;++n){let i=t[n];for(let s=0;s<i.length;++s)r[++e]=i.at(s);}return r}var yt=class r{constructor(t,e,n=false){let i=t.fields.map(c=>c.name);this.schema=t,this.names=i,this.children=e,this.factory=n?Wt:be;let s=[];this.getFactory=c=>s[c]??(s[c]=this.factory(i,e.map(a=>a.data[c])));}get[Symbol.toStringTag](){return "Table"}get numCols(){return this.names.length}get numRows(){return this.children[0]?.length??0}getChildAt(t){return this.children[t]}getChild(t){let e=this.names.findIndex(n=>n===t);return e>-1?this.children[e]:void 0}selectAt(t,e=[]){let{children:n,factory:i,schema:s}=this,{fields:c}=s;return new r({...s,fields:t.map((a,o)=>hs(c[a],e[o]))},t.map(a=>n[a]),i===Wt)}select(t,e){let n=this.names,i=t.map(s=>n.indexOf(s));return this.selectAt(i,e)}toColumns(){let{children:t,names:e}=this,n={};return e.forEach((i,s)=>n[i]=t[s]?.toArray()??[]),n}toArray(){let{children:t,getFactory:e,numRows:n}=this,i=t[0]?.data??[],s=Array(n);for(let c=0,a=-1;c<i.length;++c){let o=e(c);for(let u=0;u<i[c].length;++u)s[++a]=o(u);}return s}*[Symbol.iterator](){let{children:t,getFactory:e}=this,n=t[0]?.data??[];for(let i=0;i<n.length;++i){let s=e(i);for(let c=0;c<n[i].length;++c)yield s(c);}}at(t){let{children:e,getFactory:n,numRows:i}=this;if(t<0||t>=i)return null;let[{offsets:s}]=e,c=Et(s,t)-1;return n(c)(t-s[c])}get(t){return this.at(t)}};function hs(r,t){return t!=null&&t!==r.name?{...r,name:t}:r}function gt(r,t={}){let{typeId:e,bitWidth:n,mode:i,precision:s,unit:c}=r,{useBigInt:a,useDate:o,useDecimalInt:u,useMap:f,useProxy:m}=t;switch(e){case l.Null:return Ft;case l.Bool:return ge;case l.Int:case l.Time:case l.Duration:return a||n<64?Q:Z;case l.Float:return s?Q:ye;case l.Date:return Ln(c===H.DAY?Te:Pn,o&&Zt);case l.Timestamp:return Ln(c===w.SECOND?Ee:c===w.MILLISECOND?Un:c===w.MICROSECOND?_e:ke,o&&Zt);case l.Decimal:return n===32?u?Q:Ie:u?Ae:xe;case l.Interval:return c===N.DAY_TIME?De:c===N.YEAR_MONTH?Q:Se;case l.FixedSizeBinary:return Ce;case l.Utf8:return Pe;case l.LargeUtf8:return Ue;case l.Binary:return Oe;case l.LargeBinary:return Be;case l.BinaryView:return We;case l.Utf8View:return Ze;case l.List:return ve;case l.LargeList:return Ne;case l.Map:return f?He:Re;case l.ListView:return Me;case l.LargeListView:return Le;case l.FixedSizeList:return Ve;case l.Struct:return m?je:Xt;case l.RunEndEncoded:return Ge;case l.Dictionary:return $e;case l.Union:return i?ze:qt}throw new Error(C(e))}function Ln(r,t){return t?class extends t{constructor(n){super(new r(n));}}:r}function ps(r,t){return {offset:O(r,t),metadataLength:x(r,t+8),bodyLength:O(r,t+16)}}function zr(r,t){return F(r,t,24,ps)}function qe(r,t,e){let n=v(r,t);if(n(10,W,0))throw new Error("Record batch compression not implemented");let i=e<B.V4?8:0;return {length:n(4,O,0),nodes:F(r,n(6,W),16,(s,c)=>({length:O(s,c),nullCount:O(s,c+8)})),regions:F(r,n(8,W),16+i,(s,c)=>({offset:O(s,c+i),length:O(s,c+i+8)})),variadic:F(r,n(12,W),8,O)}}function Fn(r,t,e){let n=v(r,t);return {id:n(4,O,0),data:n(6,(i,s)=>qe(i,s,e)),isDelta:n(8,at,false)}}function jr(r,t,e,n){L(e,l,C);let i=v(r,t);switch(e){case l.Binary:return Dr();case l.Utf8:return $();case l.LargeBinary:return Nr();case l.LargeUtf8:return Mr();case l.List:return jt(n[0]);case l.ListView:return Cr(n[0]);case l.LargeList:return Lr(n[0]);case l.LargeListView:return Vr(n[0]);case l.Struct:return Gt(n);case l.RunEndEncoded:return Fr(n[0],n[1]);case l.Int:return j(i(4,x,0),i(6,at,false));case l.Float:return zt(i(4,k,J.HALF));case l.Decimal:return Sr(i(4,x,0),i(6,x,0),i(8,x,128));case l.Date:return ue(i(4,k,H.MILLISECOND));case l.Time:return Or(i(4,k,w.MILLISECOND));case l.Timestamp:return ct(i(4,k,w.SECOND),i(6,pt));case l.Interval:return Br(i(4,k,N.YEAR_MONTH));case l.Duration:return vr(i(4,k,w.MILLISECOND));case l.FixedSizeBinary:return Ur(i(4,x,0));case l.FixedSizeList:return $t(n[0],i(4,x,0));case l.Map:return bn(i(4,at,false),n[0]);case l.Union:return Pr(i(4,k,z.Sparse),n,F(r,i(6,W),4,x))}return {typeId:e}}function Qt(r,t){let e=F(r,t,4,(n,i)=>{let s=v(n,i);return [s(4,pt),s(6,pt)]});return e.length?new Map(e):null}function Xe(r,t,e){let n=v(r,t);return {version:e,endianness:n(4,k,0),fields:n(6,bs,[]),metadata:n(8,Qt)}}function bs(r,t){return F(r,t,4,Cn)}function Cn(r,t){let e=v(r,t),n=e(8,Yt,l.NONE),i=e(10,W,0),s=e(12,gs),c=e(14,(o,u)=>ys(o,u)),a=jr(r,i,n,c);return s&&(s.dictionary=a,a=s),{name:e(4,pt),type:a,nullable:e(6,at,false),metadata:e(16,Qt)}}function ys(r,t){let e=F(r,t,4,Cn);return e.length?e:null}function gs(r,t){if(!t)return null;let e=v(r,t);return Ht(null,e(6,Is,G()),e(8,at,false),e(4,O,0))}function Is(r,t){return jr(r,t,l.Int)}var ws=(r,t)=>`Expected to read ${r} metadata bytes, but only read ${t}.`,xs=(r,t)=>`Expected to read ${r} bytes for message body, but only read ${t}.`,As=r=>`Unsupported message type: ${r} (${ae(P,r)})`;function Qe(r,t){let e=x(r,t)||0;if(t+=V,e===-1&&(e=x(r,t)||0,t+=V),e===0)return null;let n=r.subarray(t,t+=e);if(n.byteLength<e)throw new Error(ws(e,n.byteLength));let i=v(n,0),s=i(4,k,B.V1),c=i(6,Yt,P.NONE),a=i(8,W,0),o=i(10,O,0),u;if(a){let f=c===P.Schema?Xe:c===P.DictionaryBatch?Fn:c===P.RecordBatch?qe:null;if(!f)throw new Error(As(c));if(u=f(n,a,s),o>0){let m=r.subarray(t,t+=o);if(m.byteLength<o)throw new Error(xs(o,m.byteLength));u.body=m;}else c!==P.Schema&&(u.body=new Uint8Array(0));}return {version:s,type:c,index:t,content:u}}function Vn(r){let t=cn(r)?new Uint8Array(r):r;return t instanceof Uint8Array&&Ts(t)?_s(t):Es(t)}function Ts(r){if(!r||r.length<4)return false;for(let t=0;t<6;++t)if(dt[t]!==r[t])return false;return true}function Es(r){let t=[r].flat(),e,n=[],i=[];for(let s of t){if(!(s instanceof Uint8Array))throw new Error("IPC data batch was not a Uint8Array.");let c=0;for(;;){let a=Qe(s,c);if(a===null)break;if(c=a.index,!!a.content)switch(a.type){case P.Schema:e||(e=a.content);break;case P.RecordBatch:n.push(a.content);break;case P.DictionaryBatch:i.push(a.content);break}}}return {schema:e,dictionaries:i,records:n,metadata:null}}function _s(r){let t=r.byteLength-(dt.length+4),e=x(r,t),n=v(r,t-e),i=n(4,k,B.V1),s=n(8,zr,[]),c=n(10,zr,[]);return {schema:n(6,(a,o)=>Xe(a,o,i)),dictionaries:s.map(({offset:a})=>Qe(r,a).content),records:c.map(({offset:a})=>Qe(r,a).content),metadata:n(12,Qt)}}function Rn(r,t){return ks(Vn(r),t)}function ks(r,t={}){let{schema:e={fields:[]},dictionaries:n,records:i}=r,{version:s,fields:c}=e,a=new Map,o=Ss(t,s,a),u=new Map;Ds(e,b=>{let p=b.type;p.typeId===l.Dictionary&&u.set(p.id,p.dictionary);});let f=new Map;for(let b of n){let{id:p,data:g,isDelta:E,body:S}=b,wt=u.get(p),xt=Gr(wt,o({...g,body:S}));if(f.has(p)){let I=f.get(p);E||I.clear(),I.add(xt);}else {if(E)throw new Error("Delta update can not be first dictionary batch.");f.set(p,Hr(wt).add(xt));}}f.forEach((b,p)=>a.set(p,b.done()));let m=c.map(b=>Hr(b.type));for(let b of i){let p=o(b);c.forEach((g,E)=>m[E].add(Gr(g.type,p)));}return new yt(e,m.map(b=>b.done()),t.useProxy)}function Ds(r,t){r.fields.forEach(function e(n){t(n),n.type.dictionary?.children?.forEach(e),n.type.children?.forEach(e);});}function Ss(r,t,e){let n={version:t,options:r,dictionary:i=>e.get(i)};return i=>{let{length:s,nodes:c,regions:a,variadic:o,body:u}=i,f=-1,m=-1,b=-1;return {...n,length:s,node:()=>c[++f],buffer:p=>{let{length:g,offset:E}=a[++m];return p?new p(u.buffer,u.byteOffset+E,g/p.BYTES_PER_ELEMENT):u.subarray(E,E+g)},variadic:()=>o[++b],visit(p){return p.map(g=>Gr(g.type,this))}}}}function Gr(r,t){let{typeId:e}=r,{options:n,node:i,buffer:s,variadic:c,version:a}=t,o=gt(r,n),u={...i(),type:r};if(e===l.Null)return new o({...u,nullCount:u.length});switch(e){case l.Bool:case l.Int:case l.Time:case l.Duration:case l.Float:case l.Decimal:case l.Date:case l.Timestamp:case l.Interval:case l.FixedSizeBinary:return new o({...u,validity:s(),values:s(r.values)});case l.Utf8:case l.LargeUtf8:case l.Binary:case l.LargeBinary:return new o({...u,validity:s(),offsets:s(r.offsets),values:s()});case l.BinaryView:case l.Utf8View:return new o({...u,validity:s(),values:s(),data:Array.from({length:c()},()=>s())});case l.List:case l.LargeList:case l.Map:return new o({...u,validity:s(),offsets:s(r.offsets),children:t.visit(r.children)});case l.ListView:case l.LargeListView:return new o({...u,validity:s(),offsets:s(r.offsets),sizes:s(r.offsets),children:t.visit(r.children)});case l.FixedSizeList:case l.Struct:return new o({...u,validity:s(),children:t.visit(r.children)});case l.RunEndEncoded:return new o({...u,children:t.visit(r.children)});case l.Dictionary:{let{id:f,indices:m}=r;return new o({...u,validity:s(),values:s(m.values)}).setDictionary(t.dictionary(f))}case l.Union:return a<B.V5&&s(),new o({...u,typeIds:s(mt),offsets:r.mode===z.Sparse?null:s(r.offsets),children:t.visit(r.children)});default:throw new Error(C(e))}}function $r(r,t,e){r[t]=e,r[t+1]=e>>8,r[t+2]=e>>16,r[t+3]=e>>24;}var Ke=1024,Je=class{constructor(t){this.sink=t,this.minalign=1,this.buf=new Uint8Array(Ke),this.space=Ke,this.vtables=[],this.outputBytes=0;}offset(){return this.buf.length-this.space}writeInt8(t){this.buf[this.space-=1]=t;}writeInt16(t){this.buf[this.space-=2]=t,this.buf[this.space+1]=t>>8;}writeInt32(t){$r(this.buf,this.space-=4,t);}writeInt64(t){let e=BigInt(t);this.writeInt32(Number(BigInt.asIntN(32,e>>BigInt(32)))),this.writeInt32(Number(BigInt.asIntN(32,e)));}addInt8(t){rt(this,1,0),this.writeInt8(t);}addInt16(t){rt(this,2,0),this.writeInt16(t);}addInt32(t){rt(this,4,0),this.writeInt32(t);}addInt64(t){rt(this,8,0),this.writeInt64(t);}addOffset(t){rt(this,V,0),this.writeInt32(this.offset()-t+V);}addObject(t,e){let n=Os(this,t);return e?.(n),n.finish()}addVector(t,e,n,i){let s=t?.length;if(!s)return 0;rt(this,V,e*s),rt(this,n,e*s);for(let c=s;--c>=0;)i(this,t[c]);return this.writeInt32(s),this.offset()}addOffsetVector(t){return this.addVector(t,4,4,(e,n)=>e.addOffset(n))}addString(t){if(t==null)return 0;let e=me(t),n=e.length;return this.addInt8(0),rt(this,V,n),this.buf.set(e,this.space-=n),this.writeInt32(n),this.offset()}finish(t){rt(this,this.minalign,V),this.addOffset(t);}flush(){let{buf:t,sink:e}=this,n=t.subarray(this.space,t.length);e.write(n),this.outputBytes+=n.byteLength,this.minalign=1,this.vtables=[],this.buf=new Uint8Array(Ke),this.space=Ke;}addBuffer(t){let e=t.byteLength;if(!e)return 0;this.sink.write(t),this.outputBytes+=e;let n=(e+7&-8)-e;return this.addPadding(n),e+n}addPadding(t){t>0&&(this.sink.write(new Uint8Array(t)),this.outputBytes+=t);}};function rt(r,t,e){let{buf:n,space:i,minalign:s}=r;t>s&&(r.minalign=t);let c=n.length,a=c-i+e,o=~a+1&t-1;n=ie(n,a+o+t-1,true),i+=n.length-c;for(let u=0;u<o;++u)n[--i]=0;r.buf=n,r.space=i;}function Os(r,t){let e=Array(t).fill(0),n=r.offset();function i(s){e[s]=r.offset();}return {addInt8(s,c,a){c!=a&&(r.addInt8(c),i(s));},addInt16(s,c,a){c!=a&&(r.addInt16(c),i(s));},addInt32(s,c,a){c!=a&&(r.addInt32(c),i(s));},addInt64(s,c,a){c!=a&&(r.addInt64(c),i(s));},addOffset(s,c,a){c!=a&&(r.addOffset(c),i(s));},finish(){r.addInt32(0);let s=r.offset(),c=t;for(;--c>=0&&e[c]===0;);let a=c+1;for(;c>=0;--c)r.addInt16(e[c]?s-e[c]:0);let o=2;r.addInt16(s-n);let u=(a+o)*he;r.addInt16(u);let f=0,{buf:m,vtables:b,space:p}=r;t:for(c=0;c<b.length;++c){let g=m.length-b[c];if(u==k(m,g)){for(let E=he;E<u;E+=he)if(k(m,p+E)!=k(m,g+E))continue t;f=b[c];break}}if(f)r.space=m.length-s,$r(m,r.space,f-s);else {let g=r.offset();b.push(g),$r(m,m.length-s,g-s);}return s}}}function tr(r,t){let{nodes:e,regions:n,variadic:i}=t,s=r.addVector(e,16,8,(o,u)=>(o.writeInt64(u.nullCount),o.writeInt64(u.length),o.offset())),c=r.addVector(n,16,8,(o,u)=>(o.writeInt64(u.length),o.writeInt64(u.offset),o.offset())),a=r.addVector(i,8,8,(o,u)=>o.addInt64(u));return r.addObject(5,o=>{o.addInt64(0,e[0].length,0),o.addOffset(1,s,0),o.addOffset(2,c,0),o.addOffset(4,a,0);})}function Hn(r,t){let e=tr(r,t.data);return r.addObject(3,n=>{n.addInt64(0,t.id,0),n.addOffset(1,e,0),n.addInt8(2,+t.isDelta,0);})}function Kt(r,t){return t?.size>0?r.addOffsetVector(Array.from(t,([e,n])=>{let i=r.addString(`${e}`),s=r.addString(`${n}`);return r.addObject(2,c=>{c.addOffset(0,i,0),c.addOffset(1,s,0);})})):0}function Jt(r,t){switch(L(t.typeId,l,C)){case l.Dictionary:return Hs(r,t);case l.Int:return Ms(r,t);case l.Float:return Ns(r,t);case l.Decimal:return Ps(r,t);case l.Date:return Bs(r,t);case l.Time:return Cs(r,t);case l.Timestamp:return Vs(r,t);case l.Interval:return Ls(r,t);case l.Duration:return Us(r,t);case l.FixedSizeBinary:case l.FixedSizeList:return vs(r,t);case l.Map:return Fs(r,t);case l.Union:return Rs(r,t)}return r.addObject(0)}function Bs(r,t){return r.addObject(1,e=>{e.addInt16(0,t.unit,H.MILLISECOND);})}function Ps(r,t){return r.addObject(3,e=>{e.addInt32(0,t.precision,0),e.addInt32(1,t.scale,0),e.addInt32(2,t.bitWidth,128);})}function Us(r,t){return r.addObject(1,e=>{e.addInt16(0,t.unit,w.MILLISECOND);})}function vs(r,t){return r.addObject(1,e=>{e.addInt32(0,t.stride,0);})}function Ns(r,t){return r.addObject(1,e=>{e.addInt16(0,t.precision,J.HALF);})}function Ms(r,t){return r.addObject(2,e=>{e.addInt32(0,t.bitWidth,0),e.addInt8(1,+t.signed,0);})}function Ls(r,t){return r.addObject(1,e=>{e.addInt16(0,t.unit,N.YEAR_MONTH);})}function Fs(r,t){return r.addObject(1,e=>{e.addInt8(0,+t.keysSorted,0);})}function Cs(r,t){return r.addObject(2,e=>{e.addInt16(0,t.unit,w.MILLISECOND),e.addInt32(1,t.bitWidth,32);})}function Vs(r,t){let e=r.addString(t.timezone);return r.addObject(2,n=>{n.addInt16(0,t.unit,w.SECOND),n.addOffset(1,e,0);})}function Rs(r,t){let e=r.addVector(t.typeIds,4,4,(n,i)=>n.addInt32(i));return r.addObject(2,n=>{n.addInt16(0,t.mode,z.Sparse),n.addOffset(1,e,0);})}function Hs(r,t){return r.addObject(4,e=>{e.addInt64(0,t.id,0),e.addOffset(1,Jt(r,t.indices),0),e.addInt8(2,+t.ordered,0);})}var zs=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;function er(r,t){let{fields:e,metadata:n}=t,i=e.map(a=>zn(r,a)),s=r.addOffsetVector(i),c=Kt(r,n);return r.addObject(4,a=>{a.addInt16(0,+!zs,0),a.addOffset(1,s,0),a.addOffset(2,c,0);})}function zn(r,t){let{name:e,nullable:n,type:i,metadata:s}=t,{typeId:c}=i,a=0,o=0;if(c!==l.Dictionary)a=Jt(r,i);else {let p=i.dictionary;c=p.typeId,o=Jt(r,i),a=Jt(r,p);}let u=(i.children||[]).map(p=>zn(r,p)),f=r.addOffsetVector(u),m=Kt(r,s),b=r.addString(e);return r.addObject(7,p=>{p.addOffset(0,b,0),p.addInt8(1,+n,0),p.addInt8(2,c,l.NONE),p.addOffset(3,a,0),p.addOffset(4,o,0),p.addOffset(5,f,0),p.addOffset(6,m,0);})}function Gn(r,t,e,n,i){let s=Kt(r,i),c=r.addVector(n,24,8,jn),a=r.addVector(e,24,8,jn),o=er(r,t);r.finish(r.addObject(5,f=>{f.addInt16(0,B.V5,B.V1),f.addOffset(1,o,0),f.addOffset(2,a,0),f.addOffset(3,c,0),f.addOffset(4,s,0);}));let u=r.offset();r.addInt32(0),r.addInt32(-1),r.flush(),r.sink.write(new Uint8Array(Int32Array.of(u).buffer)),r.sink.write(dt);}function jn(r,{offset:t,metadataLength:e,bodyLength:n}){return r.writeInt64(n),r.writeInt32(0),r.writeInt32(e),r.writeInt64(t),r.offset()}function rr(r,t,e,n,i){r.finish(r.addObject(5,o=>{o.addInt16(0,B.V5,B.V1),o.addInt8(1,t,P.NONE),o.addOffset(2,e,0),o.addInt64(3,n,0);}));let s=8,c=r.offset(),a=c+s+7&-8;i?.push({offset:r.outputBytes,metadataLength:a,bodyLength:n}),r.addInt32(a-s),r.addInt32(-1),r.flush(),r.addPadding(a-c-s);}var Yr=class{write(t){}pad(t){this.write(new Uint8Array(t));}finish(){return null}},nr=class extends Yr{constructor(){super(),this.buffers=[];}write(t){this.buffers.push(t);}finish(){let t=this.buffers,e=t.reduce((i,s)=>i+s.byteLength,0),n=new Uint8Array(e);for(let i=0,s=0;i<t.length;++i)n.set(t[i],s),s+=t[i].byteLength;return n}};var $n="stream",Yn="file";function Zn(r,{sink:t,format:e=$n}={}){if(e!==$n&&e!==Yn)throw new Error(`Unrecognized Arrow IPC format: ${e}`);let{schema:n,dictionaries:i=[],records:s=[],metadata:c}=r,a=new Je(t||new nr),o=e===Yn,u=[],f=[];o&&a.addBuffer(dt),n&&rr(a,P.Schema,er(a,n),0);for(let m of i){let{data:b}=m;rr(a,P.DictionaryBatch,Hn(a,m),b.byteLength,u),Wn(a,b.buffers);}for(let m of s)rr(a,P.RecordBatch,tr(a,m),m.byteLength,f),Wn(a,m.buffers);return a.addBuffer(on),o&&Gn(a,n,u,f,c),a.sink}function Wn(r,t){for(let e=0;e<t.length;++e)r.addBuffer(t[e]);}function qn(r,t){typeof t=="string"&&(t={format:t});let e=r.children;js(e);let{dictionaries:n,idMap:i}=$s(e),s=Ws(e),a={schema:Ys(r.schema,i),dictionaries:n,records:s};return Zn(a,t).finish()}function js(r){let t=r[0]?.data.map(e=>e.length);r.forEach(({data:e})=>{if(e.length!==t.length||e.some((n,i)=>n.length!==t[i]))throw new Error("Columns have inconsistent batch sizes.")});}function Gs(){let r=0,t=[],e=[],n=[],i=[];return {node(s,c){t.push({length:s,nullCount:c});},buffer(s){let c=s.byteLength,a=c+7&-8;e.push({offset:r,length:a}),r+=a,n.push(new Uint8Array(s.buffer,s.byteOffset,c));},variadic(s){i.push(s);},children(s,c){s.children.forEach((a,o)=>{Qn(a.type,c.children[o],this);});},done(){return {byteLength:r,nodes:t,regions:e,variadic:i,buffers:n}}}}function $s(r){let t=[],e=new Map,n=new Map,i=-1,s=c=>{if(e.has(c))n.set(c.type,e.get(c));else {e.set(c,++i);for(let a=0;a<c.data.length;++a)t.push({id:i,isDelta:a>0,data:Xn([c],a)});n.set(c.type,i);}};return r.forEach(c=>Wr(c.data[0],s)),{dictionaries:t,idMap:n}}function Wr(r,t){if(r?.type.typeId===l.Dictionary){let e=r.dictionary;t(e),Wr(e.data[0],t);}r?.children?.forEach(e=>Wr(e,t));}function Ys(r,t){if(!t.size)return r;let e=s=>{s.typeId===l.Dictionary&&(s.id=t.get(s.dictionary),i(s)),s.children&&(s.children=s.children.slice()).forEach(n);},n=(s,c,a)=>{let o={...s.type};a[c]={...s,type:o},e(o);},i=s=>{let c={...s.dictionary};s.dictionary=c,e(c);};return r={...r,fields:r.fields.slice()},r.fields.forEach(n),r}function Ws(r){return (r[0]?.data||[]).map((t,e)=>Xn(r,e))}function Xn(r,t=0){let e=Gs();return r.forEach(n=>{Qn(n.type,n.data[t],e);}),e.done()}function Qn(r,t,e){let{typeId:n}=r;if(e.node(t.length,t.nullCount),n!==l.Null)switch(n){case l.Bool:case l.Int:case l.Time:case l.Duration:case l.Float:case l.Date:case l.Timestamp:case l.Decimal:case l.Interval:case l.FixedSizeBinary:case l.Dictionary:e.buffer(t.validity),e.buffer(t.values);return;case l.Utf8:case l.LargeUtf8:case l.Binary:case l.LargeBinary:e.buffer(t.validity),e.buffer(t.offsets),e.buffer(t.values);return;case l.BinaryView:case l.Utf8View:e.buffer(t.validity),e.buffer(t.values),e.variadic(t.data.length),t.data.forEach(i=>e.buffer(i));return;case l.List:case l.LargeList:case l.Map:e.buffer(t.validity),e.buffer(t.offsets),e.children(r,t);return;case l.ListView:case l.LargeListView:e.buffer(t.validity),e.buffer(t.offsets),e.buffer(t.sizes),e.children(r,t);return;case l.FixedSizeList:case l.Struct:e.buffer(t.validity),e.children(r,t);return;case l.RunEndEncoded:e.children(r,t);return;case l.Union:{e.buffer(t.typeIds),r.mode===z.Dense&&e.buffer(t.offsets),e.children(r,t);return}default:throw new Error(C(n))}}function D(r){return new sr(r)}var sr=class{constructor(t=q){this.buf=new t(512);}array(t){return un(this.buf,t)}prep(t){t>=this.buf.length&&(this.buf=ie(this.buf,t));}get(t){return this.buf[t]}set(t,e){this.prep(e),this.buf[e]=t;}write(t,e){this.prep(e+t.length),this.buf.set(t,e);}};function or(){return new Zr}var Zr=class extends sr{set(t){let e=t>>3;this.prep(e),this.buf[e]|=1<<t%8;}};var ut=class{constructor(t,e){this.type=t,this.ctx=e,this.batchClass=e.batchType(t);}init(){return this.index=-1,this}set(t,e){return this.index=e,false}done(){return null}batch(){let t=new this.batchClass(this.done());return this.init(),t}};var T=class extends ut{constructor(t,e){super(t,e);}init(){return this.nullCount=0,this.validity=or(),super.init()}set(t,e){this.index=e;let n=t!=null;return n?this.validity.set(e):this.nullCount++,n}done(){let{index:t,nullCount:e,type:n,validity:i}=this;return {length:t+1,nullCount:e,type:n,validity:e?i.array((t>>3)+1):new q(0)}}};function te(){let r=new Map,t=new Set;return {get(e,n){let i=e.id;if(i>=0&&r.has(i))return r.get(i);{let s=Zs(e,n);return i>=0&&r.set(i,s),t.add(s),s}},finish(e){t.forEach(n=>n.finish(e));}}}function Zs(r,t){let e=Object.create(null),n=t.builder(r.dictionary),i=[];n.init();let s=-1;return {type:r,values:n,add(c){return i.push(c),c},key(c){let a=Mt(c),o=e[a];return o===void 0&&(e[a]=o=++s,n.set(c,o)),o},finish(c){let a=r.dictionary,o=new(gt(a,c))(n.done()),u=new K([o]);i.forEach(f=>f.setDictionary(u));}}}var ir=class extends T{constructor(t,e){super(t,e),this.dict=e.dictionary(t);}init(){return this.values=D(this.type.indices.values),super.init()}set(t,e){super.set(t,e)&&this.values.set(this.dict.key(t),e);}done(){return {...super.done(),values:this.values.array(this.index+1)}}batch(){return this.dict.add(super.batch())}};function Kn(r){let t=qr();return r(e=>t.add(e)),t.type()}function qr(){let r=0,t=0,e=0,n=0,i=0,s=0,c=0,a=0,o=0,u=0,f=0,m=1/0,b=-1/0,p=1/0,g=-1/0,E,S,wt,xt={};return {add(I){if(r++,I==null){t++;return}switch(typeof I){case "string":o++;break;case "number":n++,I<m&&(m=I),I>b&&(b=I),Number.isInteger(I)&&i++;break;case "bigint":s++,E===void 0?E=S=I:(I<E&&(E=I),I>S&&(S=I));break;case "boolean":e++;break;case "object":if(I instanceof Date)c++,+I%864e5===0&&a++;else if(oe(I)){u++;let R=I.length;R<p&&(p=R),R>g&&(g=R),wt??=qr(),I.forEach(wt.add);}else {f++;for(let R in I)(xt[R]??(xt[R]=qr())).add(I[R]);}}},type(){let I=r-t;return I===0?kr():i===I?Xs(m,b):n===I?et():s===I?Qs(E,S):e===I?Bt():a===I?Pt():c===I?ct():o===I?Ht($()):u===I?qs(wt.type(),p,g):f===I?Gt(Object.entries(xt).map(R=>ht(R[0],R[1].type()))):Ks()}}}function qs(r,t,e){return e===t?$t(r,t):jt(r)}function Xs(r,t){let e=Math.max(Math.abs(r)-1,t);return e<128?st():e<32768?ot():e<2**31?G():et()}function Qs(r,t){let e=-r>t?-r-1n:t;if(e>=2**63)throw new Error(`BigInt exceeds 64 bits: ${e}`);return it()}function Ks(){throw new Error("Mixed types detected, please define a union type.")}var Ct=class extends T{constructor(t,e){super(t,e),this.toOffset=fe(t.offsets);}init(){return this.offsets=D(this.type.offsets),this.values=D(),this.pos=0,super.init()}set(t,e){let{offsets:n,values:i,toOffset:s}=this;super.set(t,e)&&(i.write(t,this.pos),this.pos+=t.length),n.set(s(this.pos),e+1);}done(){return {...super.done(),offsets:this.offsets.array(this.index+2),values:this.values.array(this.pos+1)}}};var cr=class extends T{constructor(t,e){super(t,e);}init(){return this.values=or(),super.init()}set(t,e){super.set(t,e),t&&this.values.set(e);}done(){return {...super.done(),values:this.values.array((this.index>>3)+1)}}};var ar=class extends T{constructor(t,e){super(t,e),this.scale=10**t.scale,this.stride=t.bitWidth>>6;}init(){return this.values=D(this.type.values),super.init()}set(t,e){let{scale:n,stride:i,values:s}=this;super.set(t,e)&&(s.prep((e+1)*i),Tn(t,s.buf,e*i,i,n));}done(){let{index:t,stride:e,values:n}=this;return {...super.done(),values:n.array((t+1)*e)}}};var ur=class extends T{constructor(t,e){super(t,e),this.stride=t.stride;}init(){return this.values=D(),super.init()}set(t,e){super.set(t,e)&&this.values.write(t,e*this.stride);}done(){let{stride:t,values:e}=this;return {...super.done(),values:e.array(t*(this.index+1))}}};var lr=class extends T{constructor(t,e){super(t,e),this.child=e.builder(this.type.children[0].type),this.stride=t.stride;}init(){return this.child.init(),super.init()}set(t,e){let{child:n,stride:i}=this,s=e*i;if(super.set(t,e))for(let c=0;c<i;++c)n.set(t[c],s+c);else n.index=s+i;}done(){let{child:t}=this;return {...super.done(),children:[t.batch()]}}};var fr=class extends T{init(){return this.values=D(this.type.values),super.init()}set(t,e){if(super.set(t,e)){let n=e<<1;this.values.set(t[0],n),this.values.set(t[1],n+1);}}done(){return {...super.done(),values:this.values.array(this.index+1<<1)}}},dr=class extends T{init(){return this.values=D(),super.init()}set(t,e){super.set(t,e)&&this.values.write(xn(t),e<<4);}done(){return {...super.done(),values:this.values.array(this.index+1<<4)}}};var ee=class extends T{constructor(t,e,n){super(t,e),this.child=n;}init(){this.child.init();let t=this.type.offsets;return this.offsets=D(t),this.toOffset=fe(t),this.pos=0,super.init()}done(){return {...super.done(),offsets:this.offsets.array(this.index+2),children:[this.child.batch()]}}},mr=class extends ee{constructor(t,e){super(t,e,e.builder(t.children[0].type));}set(t,e){let{child:n,offsets:i,toOffset:s}=this;super.set(t,e)&&t.forEach(c=>n.set(c,this.pos++)),i.set(s(this.pos),e+1);}};var re=class extends T{constructor(t,e){super(t,e),this.children=t.children.map(n=>e.builder(n.type));}init(){return this.children.forEach(t=>t.init()),super.init()}done(){let{children:t}=this;return t.forEach(e=>e.index=this.index),{...super.done(),children:t.map(e=>e.batch())}}},hr=class extends re{constructor(t,e){super(t,e),this.setters=this.children.map((n,i)=>{let s=t.children[i].name;return (c,a)=>n.set(c?.[s],a)});}set(t,e){super.set(t,e);let n=this.setters;for(let i=0;i<n.length;++i)n[i](t,e);}};var pr=class extends ee{constructor(t,e){super(t,e,new Xr(t.children[0].type,e));}set(t,e){let{child:n,offsets:i,toOffset:s}=this;if(super.set(t,e))for(let c of t)n.set(c,this.pos++);i.set(s(this.pos),e+1);}},Xr=class extends re{set(t,e){super.set(t,e);let[n,i]=this.children;n.set(t[0],e),i.set(t[1],e);}};var Js={},br=class extends ut{constructor(t,e){super(t,e),this.children=t.children.map(n=>e.builder(n.type));}init(){return this.pos=0,this.key=null,this.value=Js,this.children.forEach(t=>t.init()),super.init()}next(){let[t,e]=this.children;t.set(this.index+1,this.pos),e.set(this.value,this.pos++);}set(t,e){if(t!==this.value){let n=Mt(t);n!==this.key&&(this.key&&this.next(),this.key=n,this.value=t);}this.index=e;}done(){this.next();let{children:t,index:e,type:n}=this;return {length:e+1,nullCount:0,type:n,children:t.map(i=>i.batch())}}};var yr=class extends ut{constructor(t,e){super(t,e),this.children=t.children.map(n=>e.builder(n.type)),this.typeMap=t.typeMap,this.lookup=t.typeIdForValue;}init(){return this.nullCount=0,this.typeIds=D(mt),this.children.forEach(t=>t.init()),super.init()}set(t,e){let{children:n,lookup:i,typeMap:s,typeIds:c}=this;this.index=e;let a=i(t,e),o=n[s[a]];c.set(a,e),t==null&&++this.nullCount,this.update(t,e,o);}done(){let{children:t,nullCount:e,type:n,typeIds:i}=this,s=this.index+1;return {length:s,nullCount:e,type:n,typeIds:i.array(s),children:t.map(c=>c.batch())}}},gr=class extends yr{update(t,e,n){n.set(t,e),this.children.forEach(i=>{i!==n&&i.set(null,e);});}},Ir=class extends yr{init(){return this.offsets=D(this.type.offsets),super.init()}update(t,e,n){let i=n.index+1;n.set(t,i),this.offsets.set(i,e);}done(){return {...super.done(),offsets:this.offsets.array(this.index+1)}}};var wr=class extends Ct{set(t,e){super.set(t&&me(t),e);}};var lt=class extends T{constructor(t,e){super(t,e),this.values=D(t.values);}init(){return this.values=D(this.type.values),super.init()}set(t,e){super.set(t,e)&&this.values.set(t,e);}done(){return {...super.done(),values:this.values.array(this.index+1)}}},xr=class extends lt{set(t,e){super.set(t==null?t:Y(t),e);}},It=class extends lt{constructor(t,e,n){super(t,e),this.transform=n;}set(t,e){super.set(t==null?t:this.transform(t),e);}};function Qr(r={},t=te()){return {batchType:e=>gt(e,r),builder(e){return Kr(e,this)},dictionary(e){return t.get(e,this)},finish:()=>t.finish(r)}}function Kr(r,t=Qr()){let{typeId:e}=r;switch(e){case l.Int:case l.Time:case l.Duration:return Tt(r.values)?new xr(r,t):new lt(r,t);case l.Float:return r.precision?new lt(r,t):new It(r,t,Dn);case l.Binary:case l.LargeBinary:return new Ct(r,t);case l.Utf8:case l.LargeUtf8:return new wr(r,t);case l.Bool:return new cr(r,t);case l.Decimal:return r.bitWidth===32?new It(r,t,An(r.scale)):new ar(r,t);case l.Date:return new It(r,t,r.unit?Y:In);case l.Timestamp:return new It(r,t,wn(r.unit));case l.Interval:switch(r.unit){case N.DAY_TIME:return new fr(r,t);case N.MONTH_DAY_NANO:return new dr(r,t)}return new lt(r,t);case l.List:case l.LargeList:return new mr(r,t);case l.Struct:return new hr(r,t);case l.Union:return r.mode?new Ir(r,t):new gr(r,t);case l.FixedSizeBinary:return new ur(r,t);case l.FixedSizeList:return new lr(r,t);case l.Map:return new pr(r,t);case l.RunEndEncoded:return new br(r,t);case l.Dictionary:return new ir(r,t)}throw new Error(C(e))}function Jr(r,t,e={},n){let i=dn(r)?o=>{for(let u of r)o(u);}:r;t??=Kn(i);let{maxBatchRows:s=1/0,...c}=e,a;if(t.typeId===l.Null){let o=0;i(()=>++o),a=to(t,o,s);}else {let o=Qr(c,n),u=Kr(t,o).init(),f=b=>a.push(b.batch());a=[];let m=0;i(b=>{u.set(b,m++),m>=s&&(f(u),m=0);}),m&&f(u),o.finish();}return new K(a,t)}function to(r,t,e){let n=[],i=a=>new Ft({length:a,nullCount:a,type:r}),s=Math.floor(t/e);for(let a=0;a<s;++a)n.push(i(e));let c=t%e;return c&&n.push(i(c)),n}function tn(r,t,e={},n){return !t&&_r(r)?eo(r,e):Jr(i=>r.forEach(i),t,e,n)}function eo(r,{maxBatchRows:t,useBigInt:e}){let n=r.constructor,i=ro(n),s=r.length,c=Math.min(t||1/0,s),a=Math.floor(s/c),o=[],u=Tt(n)&&!e?Z:Q,f=(b,p)=>o.push(new u({length:p-b,nullCount:0,type:i,validity:new q(0),values:r.subarray(b,p)})),m=0;for(let b=0;b<a;++b)f(m,m+=c);return m<s&&f(m,s),new K(o)}function ro(r){switch(r){case se:return Ot();case tt:return et();case mt:return st();case Er:return ot();case U:return G();case M:return it();case q:return _t();case Vt:return kt();case Rt:return Dt();case At:return St()}}function en(r,t){let e=[],n=Array.isArray(r)?r:Object.entries(r),i=n[0]?.[1].length,s=n.map(([a,o])=>{if(o.length!==i)throw new Error("All columns must have the same length.");return e.push(ht(a,o.type)),o}),c={version:B.V5,endianness:Tr.Little,fields:e,metadata:null};return new yt(c,s,t)}function ne(r,t={}){let{types:e={},...n}=t,i=te(),c=(Array.isArray(r)?r:Object.entries(r)).map(([a,o])=>[a,tn(o,e[a],n,i)]);return en(c,t.useProxy)}var h={INVALID:0,BOOLEAN:1,TINYINT:2,SMALLINT:3,INTEGER:4,BIGINT:5,UTINYINT:6,USMALLINT:7,UINTEGER:8,UBIGINT:9,FLOAT:10,DOUBLE:11,TIMESTAMP:12,DATE:13,TIME:14,INTERVAL:15,HUGEINT:16,UHUGEINT:32,VARCHAR:17,BLOB:18,DECIMAL:19,TIMESTAMP_S:20,TIMESTAMP_MS:21,TIMESTAMP_NS:22,ENUM:23,LIST:24,STRUCT:25,MAP:26,ARRAY:33,UUID:27,UNION:28,BIT:29,TIME_TZ:30,TIMESTAMP_TZ:31},no=(n=>(n.AUTOMATIC="automatic",n.READ_ONLY="read_only",n.READ_WRITE="read_write",n))(no||{}),y=class r extends Error{code;query;constructor(t,e,n){super(t),this.name="DuckDBError",this.code=e,this.query=n,Error.captureStackTrace&&Error.captureStackTrace(this,r);}};function so(r){let t=r.replace(/\/\*[\s\S]*?\*\//g," ");return t=t.replace(/--[^\n\r]*/g," "),t=t.replace(/#[^\n\r]*/g," "),t}var ft={secretsFunction:{pattern:/\bduckdb_secrets\s*\(/i,message:"Access to duckdb_secrets() is not allowed"},pragma:{pattern:/^\s*PRAGMA\b/im,message:"PRAGMA statements are not allowed"},copyTo:{pattern:/\bCOPY\b[\s\S]+?\bTO\b\s+['"`]/i,message:"COPY ... TO statements are not allowed"},exportDatabase:{pattern:/\bEXPORT\s+DATABASE\b/i,message:"EXPORT DATABASE statements are not allowed"}};function oo(r,t={}){let e=so(r);return !t.allowSecretsFunction&&ft.secretsFunction.pattern.test(e)?{safe:false,sql:r,reason:ft.secretsFunction.message,matchedPattern:"duckdb_secrets()"}:!t.allowPragma&&ft.pragma.pattern.test(e)?{safe:false,sql:r,reason:ft.pragma.message,matchedPattern:"PRAGMA"}:!t.allowCopyTo&&ft.copyTo.pattern.test(e)?{safe:false,sql:r,reason:ft.copyTo.message,matchedPattern:"COPY ... TO"}:!t.allowExportDatabase&&ft.exportDatabase.pattern.test(e)?{safe:false,sql:r,reason:ft.exportDatabase.message,matchedPattern:"EXPORT DATABASE"}:{safe:true,sql:r}}function Lu(r,t={}){let e=oo(r,t);if(!e.safe)throw new y(e.reason,"SANITIZE_ERROR",r);return r}var d=null,Ar=null;function _(){if(!d)throw new y("DuckDB WASM not initialized. Call init() first.");return d}async function Fu(r){if(!d){if(Ar){await Ar;return}if(!r?.wasmModule)throw new Error("Workers build requires a pre-compiled WASM module. Import the WASM file and pass it as { wasmModule }.");Ar=(async()=>{let t=(await import('./wasm/duckdb-workers.js')).default;return await t({instantiateWasm:(i,s)=>(WebAssembly.instantiate(r.wasmModule,i).then(c=>{s(c);}),{})})})(),d=await Ar;}}function Cu(){if(!d)throw new y("DuckDB WASM not initialized. Call init() first.");let r=d.ccall("duckdb_library_version","number",[],[]);return d.UTF8ToString(r)}function io(r,t,e,n,i){let s=new Array(n),c=e!==0;switch(i){case h.BOOLEAN:{for(let a=0;a<n;a++)c&&r.HEAPU8[e+a]?s[a]=null:s[a]=r.HEAPU8[t+a]!==0;break}case h.TINYINT:{for(let a=0;a<n;a++)c&&r.HEAPU8[e+a]?s[a]=null:s[a]=r.HEAP8[t+a];break}case h.SMALLINT:{let a=t>>1;for(let o=0;o<n;o++)c&&r.HEAPU8[e+o]?s[o]=null:s[o]=r.HEAP16[a+o];break}case h.INTEGER:{let a=t>>2;for(let o=0;o<n;o++)c&&r.HEAPU8[e+o]?s[o]=null:s[o]=r.HEAP32[a+o];break}case h.BIGINT:{let a=t>>2;for(let o=0;o<n;o++)if(c&&r.HEAPU8[e+o])s[o]=null;else {let u=r.HEAPU32[a+o*2],f=r.HEAP32[a+o*2+1];if(f===0&&u<=9007199254740991)s[o]=u;else if(f===-1&&u>=2147483648)s[o]=f*4294967296+u;else {let m=BigInt(f)*BigInt(4294967296)+BigInt(u>>>0);s[o]=m.toString();}}break}case h.UTINYINT:{for(let a=0;a<n;a++)c&&r.HEAPU8[e+a]?s[a]=null:s[a]=r.HEAPU8[t+a];break}case h.USMALLINT:{let a=t>>1;for(let o=0;o<n;o++)c&&r.HEAPU8[e+o]?s[o]=null:s[o]=r.HEAPU16[a+o];break}case h.UINTEGER:{let a=t>>2;for(let o=0;o<n;o++)c&&r.HEAPU8[e+o]?s[o]=null:s[o]=r.HEAPU32[a+o];break}case h.UBIGINT:{let a=t>>2;for(let o=0;o<n;o++)if(c&&r.HEAPU8[e+o])s[o]=null;else {let u=r.HEAPU32[a+o*2],f=r.HEAPU32[a+o*2+1];if(f===0&&u<=9007199254740991)s[o]=u;else {let m=BigInt(f)*BigInt(4294967296)+BigInt(u);s[o]=m.toString();}}break}case h.FLOAT:{let a=t>>2;for(let o=0;o<n;o++)c&&r.HEAPU8[e+o]?s[o]=null:s[o]=r.HEAPF32[a+o];break}case h.DOUBLE:{let a=t>>3;for(let o=0;o<n;o++)c&&r.HEAPU8[e+o]?s[o]=null:s[o]=r.HEAPF64[a+o];break}case h.DATE:{let a=t>>2;for(let o=0;o<n;o++)if(c&&r.HEAPU8[e+o])s[o]=null;else {let u=r.HEAP32[a+o],f=new Date(u*24*60*60*1e3);s[o]=f.toISOString().split("T")[0];}break}case h.TIMESTAMP:case h.TIMESTAMP_TZ:{let a=t>>2;for(let o=0;o<n;o++)if(c&&r.HEAPU8[e+o])s[o]=null;else {let u=r.HEAPU32[a+o*2],f=r.HEAP32[a+o*2+1],m=BigInt(f)*BigInt(4294967296)+BigInt(u>>>0),b=Number(m/BigInt(1e3)),p=new Date(b);s[o]=p.toISOString();}break}default:for(let a=0;a<n;a++)s[a]=null;break}return s}var rn=class{stmtPtr;closed=false;sql;constructor(t,e,n){this.stmtPtr=t,this.sql=n;}parameterCount(){if(this.closed)throw new y("Statement is closed");return _().ccall("duckdb_nparams","number",["number"],[this.stmtPtr])}bindBoolean(t,e){if(this.closed)throw new y("Statement is closed");if(_().ccall("duckdb_bind_boolean","number",["number","number","number","number"],[this.stmtPtr,t,0,e?1:0])!==0)throw new y(`Failed to bind boolean at index ${t}`);return this}bindInt32(t,e){if(this.closed)throw new y("Statement is closed");if(_().ccall("duckdb_bind_int32","number",["number","number","number","number"],[this.stmtPtr,t,0,e])!==0)throw new y(`Failed to bind int32 at index ${t}`);return this}bindInt64(t,e){if(this.closed)throw new y("Statement is closed");let n=_(),i=BigInt(e),s=Number(i&BigInt(4294967295)),c=Number(i>>BigInt(32)&BigInt(4294967295));if(n.ccall("duckdb_bind_int64","number",["number","number","number","number","number"],[this.stmtPtr,t,0,s,c])!==0)throw new y(`Failed to bind int64 at index ${t}`);return this}bindFloat(t,e){if(this.closed)throw new y("Statement is closed");if(_().ccall("duckdb_bind_float","number",["number","number","number","number"],[this.stmtPtr,t,0,e])!==0)throw new y(`Failed to bind float at index ${t}`);return this}bindDouble(t,e){if(this.closed)throw new y("Statement is closed");if(_().ccall("duckdb_bind_double","number",["number","number","number","number"],[this.stmtPtr,t,0,e])!==0)throw new y(`Failed to bind double at index ${t}`);return this}bindString(t,e){if(this.closed)throw new y("Statement is closed");if(_().ccall("duckdb_bind_varchar","number",["number","number","number","string"],[this.stmtPtr,t,0,e])!==0)throw new y(`Failed to bind string at index ${t}`);return this}bindBlob(t,e){if(this.closed)throw new y("Statement is closed");let n=_(),i=n._malloc(e.length);try{if(n.HEAPU8.set(e,i),n.ccall("duckdb_bind_blob","number",["number","number","number","number","number","number"],[this.stmtPtr,t,0,i,e.length,0])!==0)throw new y(`Failed to bind blob at index ${t}`)}finally{n._free(i);}return this}bindNull(t){if(this.closed)throw new y("Statement is closed");if(_().ccall("duckdb_bind_null","number",["number","number","number"],[this.stmtPtr,t,0])!==0)throw new y(`Failed to bind null at index ${t}`);return this}bindTimestamp(t,e){if(this.closed)throw new y("Statement is closed");let n=_(),i=BigInt(e.getTime())*BigInt(1e3),s=Number(i&BigInt(4294967295)),c=Number(i>>BigInt(32)&BigInt(4294967295));if(n.ccall("duckdb_bind_timestamp","number",["number","number","number","number","number"],[this.stmtPtr,t,0,s,c])!==0)throw new y(`Failed to bind timestamp at index ${t}`);return this}bindDate(t,e){if(this.closed)throw new y("Statement is closed");let n=_(),i=Math.floor(e.getTime()/(1440*60*1e3));if(n.ccall("duckdb_bind_date","number",["number","number","number","number"],[this.stmtPtr,t,0,i])!==0)throw new y(`Failed to bind date at index ${t}`);return this}bind(t,e){return e==null?this.bindNull(t):typeof e=="boolean"?this.bindBoolean(t,e):typeof e=="number"?Number.isInteger(e)&&e>=-2147483648&&e<=2147483647?this.bindInt32(t,e):this.bindDouble(t,e):typeof e=="bigint"?this.bindInt64(t,e):typeof e=="string"?this.bindString(t,e):e instanceof Date?this.bindTimestamp(t,e):e instanceof Uint8Array?this.bindBlob(t,e):this.bindString(t,String(e))}async run(){if(this.closed)throw new y("Statement is closed");let t=_(),e=t._malloc(64);try{if(await t.ccall("duckdb_execute_prepared","number",["number","number"],[this.stmtPtr,e],{async:!0})!==0){let u=t.ccall("duckdb_result_error","number",["number"],[e]),f=u?t.UTF8ToString(u):"Prepared statement execution failed";throw t.ccall("duckdb_destroy_result",null,["number"],[e]),new y(f,void 0,this.sql)}let i=t.ccall("duckdb_column_count","number",["number"],[e]),s=t.ccall("duckdb_row_count","number",["number"],[e]),c=[];for(let u=0;u<i;u++){let f=t.ccall("duckdb_column_name","number",["number","number"],[e,u]),m=t.ccall("duckdb_column_type","number",["number","number"],[e,u]);c.push({name:t.UTF8ToString(f),type:m});}let a=[];for(let u=0;u<i;u++){let f=c[u],m=t.ccall("duckdb_column_data","number",["number","number"],[e,u]),b=t.ccall("duckdb_nullmask_data","number",["number","number"],[e,u]);if(f.type===h.VARCHAR||m===0){let p=new Array(s);for(let g=0;g<s;g++)if(t.ccall("duckdb_value_is_null","number",["number","number","number","number","number"],[e,u,0,g,0]))p[g]=null;else {let S=t.ccall("duckdb_value_varchar","number",["number","number","number","number","number"],[e,u,0,g,0]);S?(p[g]=t.UTF8ToString(S),t._free(S)):p[g]=null;}a.push(p);}else a.push(io(t,m,b,s,f.type));}let o=new Array(s);for(let u=0;u<s;u++){let f={};for(let m=0;m<i;m++)f[c[m].name]=a[m][u];o[u]=f;}return t.ccall("duckdb_destroy_result",null,["number"],[e]),o}finally{t._free(e);}}async execute(){if(this.closed)throw new y("Statement is closed");let t=_(),e=t._malloc(64);try{if(await t.ccall("duckdb_execute_prepared","number",["number","number"],[this.stmtPtr,e],{async:!0})!==0){let s=t.ccall("duckdb_result_error","number",["number"],[e]),c=s?t.UTF8ToString(s):"Prepared statement execution failed";throw t.ccall("duckdb_destroy_result",null,["number"],[e]),new y(c,void 0,this.sql)}let i=t.ccall("duckdb_rows_changed","number",["number"],[e]);return t.ccall("duckdb_destroy_result",null,["number"],[e]),i}finally{t._free(e);}}close(){if(this.closed)return;let t=_(),e=t._malloc(4);try{t.setValue(e,this.stmtPtr,"i32"),t.ccall("duckdb_destroy_prepare",null,["number"],[e]);}finally{t._free(e);}this.closed=true,this.stmtPtr=0;}},nn=class{chunkPtr;destroyed=false;columns;constructor(t,e){this.chunkPtr=t,this.columns=e;}get rowCount(){return this.destroyed?0:_().ccall("duckdb_data_chunk_get_size","number",["number"],[this.chunkPtr])}get columnCount(){return this.destroyed?0:_().ccall("duckdb_data_chunk_get_column_count","number",["number"],[this.chunkPtr])}getColumnInfo(){return this.columns}getColumn(t){if(this.destroyed)throw new y("DataChunk has been destroyed");let e=_(),n=this.rowCount,i=e.ccall("duckdb_data_chunk_get_vector","number",["number","number"],[this.chunkPtr,t]);if(!i)throw new y(`Failed to get vector for column ${t}`);let s=e.ccall("duckdb_vector_get_data","number",["number"],[i]),c=e.ccall("duckdb_vector_get_validity","number",["number"],[i]),a=this.columns[t]?.type??h.VARCHAR;return this.readVectorData(s,c,n,a)}toArray(){if(this.destroyed)return [];let t=this.rowCount,e=this.columnCount,n=[];for(let s=0;s<e;s++)n.push(this.getColumn(s));let i=new Array(t);for(let s=0;s<t;s++){let c={};for(let a=0;a<e;a++)c[this.columns[a].name]=n[a][s];i[s]=c;}return i}readVectorData(t,e,n,i){let s=_(),c=new Array(n),a=o=>e===0?false:s.ccall("duckdb_validity_row_is_valid","number",["number","number"],[e,o])===0;switch(i){case h.BOOLEAN:for(let o=0;o<n;o++)c[o]=a(o)?null:s.HEAPU8[t+o]!==0;break;case h.TINYINT:for(let o=0;o<n;o++)c[o]=a(o)?null:s.HEAP8[t+o];break;case h.SMALLINT:{let o=t>>1;for(let u=0;u<n;u++)c[u]=a(u)?null:s.HEAP16[o+u];break}case h.INTEGER:{let o=t>>2;for(let u=0;u<n;u++)c[u]=a(u)?null:s.HEAP32[o+u];break}case h.BIGINT:{let o=t>>2;for(let u=0;u<n;u++)if(a(u))c[u]=null;else {let f=s.HEAPU32[o+u*2],m=s.HEAP32[o+u*2+1];c[u]=m*4294967296+f;}break}case h.FLOAT:{let o=t>>2;for(let u=0;u<n;u++)c[u]=a(u)?null:s.HEAPF32[o+u];break}case h.DOUBLE:{let o=t>>3;for(let u=0;u<n;u++)c[u]=a(u)?null:s.HEAPF64[o+u];break}case h.DATE:{let o=t>>2;for(let u=0;u<n;u++)if(a(u))c[u]=null;else {let f=s.HEAP32[o+u],m=new Date(f*24*60*60*1e3);c[u]=m.toISOString().split("T")[0];}break}case h.TIMESTAMP:case h.TIMESTAMP_TZ:{let o=t>>2;for(let u=0;u<n;u++)if(a(u))c[u]=null;else {let f=s.HEAPU32[o+u*2],b=s.HEAP32[o+u*2+1]*4294967296+f,p=new Date(b/1e3);c[u]=p.toISOString();}break}default:for(let o=0;o<n;o++)if(a(o))c[o]=null;else {let u=t+o*16,f=s.HEAP32[u>>2];if(f<=12){let m="";for(let b=0;b<f;b++)m+=String.fromCharCode(s.HEAPU8[u+4+b]);c[o]=m;}else {let m=s.HEAP32[u+8>>2];c[o]=s.UTF8ToString(m);}}break}return c}destroy(){if(this.destroyed)return;let t=_(),e=t._malloc(4);try{t.setValue(e,this.chunkPtr,"i32"),t.ccall("duckdb_destroy_data_chunk",null,["number"],[e]);}finally{t._free(e);}this.destroyed=true,this.chunkPtr=0;}},Jn=class{resultPtr;closed=false;columns;currentChunkIndex=0;totalChunks;constructor(t,e){this.resultPtr=t,this.columns=e;let n=_();this.totalChunks=n.ccall("duckdb_result_chunk_count","number",["number"],[t]);}getColumns(){return this.columns}get columnCount(){return this.columns.length}get chunkCount(){return this.totalChunks}nextChunk(){if(this.closed||this.currentChunkIndex>=this.totalChunks)return null;let e=_().ccall("duckdb_result_get_chunk","number",["number","number"],[this.resultPtr,this.currentChunkIndex]);return e?(this.currentChunkIndex++,new nn(e,this.columns)):null}reset(){this.currentChunkIndex=0;}*[Symbol.iterator](){this.reset();let t;for(;(t=this.nextChunk())!==null;)try{yield t;}finally{t.destroy();}}toArray(){let t=[];for(let e of this)t.push(...e.toArray());return t}toArrowTable(){let t={},e={};for(let n of this.columns)t[n.name]=[],e[n.name]=this.getFlechetteType(n.type);for(let n of this)for(let i=0;i<this.columns.length;i++){let s=this.columns[i].name,c=n.getColumn(i);t[s].push(...c);}return ne(t,{types:e})}getFlechetteType(t){switch(t){case h.BOOLEAN:return Bt();case h.TINYINT:return st();case h.SMALLINT:return ot();case h.INTEGER:return G();case h.BIGINT:return it();case h.UTINYINT:return _t();case h.USMALLINT:return kt();case h.UINTEGER:return Dt();case h.UBIGINT:return St();case h.FLOAT:return Ot();case h.DOUBLE:return et();case h.VARCHAR:return $();case h.DATE:return Pt();case h.TIMESTAMP:case h.TIMESTAMP_TZ:return ct(w.MICROSECOND);default:return $()}}close(){if(this.closed)return;_().ccall("duckdb_destroy_result",null,["number"],[this.resultPtr]),this.closed=true,this.resultPtr=0;}},ts=class r{dbPtr=0;closed=false;constructor(t={}){if(!d)throw new y("DuckDB WASM not initialized. Call init() first.");let e=d,n={accessMode:t.accessMode??"automatic",enableExternalAccess:t.enableExternalAccess??true,lockConfiguration:t.lockConfiguration??true,customConfig:t.customConfig??{}},i=e._malloc(4);if(e.ccall("duckdb_create_config","number",["number"],[i])!==0)throw e._free(i),new y("Failed to create DuckDB configuration");let c=e.getValue(i,"i32");e._free(i);try{let a=(f,m)=>{if(e.ccall("duckdb_set_config","number",["number","string","string"],[c,f,m])!==0)throw new y(`Failed to set config option: ${f}`)};n.accessMode!=="automatic"&&a("access_mode",n.accessMode),n.enableExternalAccess===!1&&a("enable_external_access","false");for(let[f,m]of Object.entries(n.customConfig))a(f,m);let o=e._malloc(4),u=e._malloc(4);try{if(e.ccall("duckdb_open_ext","number",["string","number","number","number"],[":memory:",o,c,u])!==0){let m=e.getValue(u,"i32"),b=m?e.UTF8ToString(m):"Unknown error";throw new y(`Failed to open database: ${b}`)}this.dbPtr=e.getValue(o,"i32");}finally{e._free(o),e._free(u);}if(n.enableExternalAccess!==!1&&e.ccall("duckdb_wasm_httpfs_init",null,["number"],[this.dbPtr]),n.lockConfiguration!==!1){let f=e._malloc(4);try{if(e.ccall("duckdb_connect","number",["number","number"],[this.dbPtr,f])===0){let b=e.getValue(f,"i32"),p=e._malloc(64);try{e.ccall("duckdb_query","number",["number","string","number"],[b,"SET lock_configuration = true",p]),e.ccall("duckdb_destroy_result",null,["number"],[p]);}finally{e._free(p);}e.ccall("duckdb_disconnect",null,["number"],[f]);}}finally{e._free(f);}}}finally{let a=e._malloc(4);e.setValue(a,c,"i32"),e.ccall("duckdb_destroy_config",null,["number"],[a]),e._free(a);}}static async create(t){return new r(t)}connect(){if(this.closed||!d)throw new y("Database is closed");let t=d._malloc(4);try{if(d.ccall("duckdb_connect","number",["number","number"],[this.dbPtr,t])!==0)throw new y("Failed to create connection");let n=d.getValue(t,"*");return new sn(n)}finally{d._free(t);}}close(){if(this.closed||!d)return;let t=d._malloc(4);try{d.setValue(t,this.dbPtr,"*"),d.ccall("duckdb_close",null,["number"],[t]);}finally{d._free(t);}this.closed=true,this.dbPtr=0;}},sn=class{connPtr;closed=false;constructor(t){this.connPtr=t;}async query(t){if(this.closed||!d)throw new y("Connection is closed");let e=d._malloc(64);try{if(await d.ccall("duckdb_query","number",["number","string","number"],[this.connPtr,t,e],{async:!0})!==0){let u=d.ccall("duckdb_result_error","number",["number"],[e]),f=u?d.UTF8ToString(u):"Query failed";throw d.ccall("duckdb_destroy_result",null,["number"],[e]),new y(f,void 0,t)}let i=d.ccall("duckdb_column_count","number",["number"],[e]),s=[];for(let u=0;u<i;u++){let f=d.ccall("duckdb_column_name","number",["number","number"],[e,u]),m=d.ccall("duckdb_column_type","number",["number","number"],[e,u]);s.push({name:d.UTF8ToString(f),type:m});}let c=d.ccall("duckdb_row_count","number",["number"],[e]),a=[];for(let u=0;u<i;u++){let f=s[u],m=d.ccall("duckdb_column_data","number",["number","number"],[e,u]),b=d.ccall("duckdb_nullmask_data","number",["number","number"],[e,u]);if(f.type===h.VARCHAR||m===0){let p=new Array(c);for(let g=0;g<c;g++)if(d.ccall("duckdb_value_is_null","number",["number","number","number","number","number"],[e,u,0,g,0]))p[g]=null;else {let S=d.ccall("duckdb_value_varchar","number",["number","number","number","number","number"],[e,u,0,g,0]);S?(p[g]=d.UTF8ToString(S),d._free(S)):p[g]=null;}a.push(p);}else a.push(this.readColumnData(m,b,c,f.type));}let o=new Array(c);for(let u=0;u<c;u++){let f={};for(let m=0;m<i;m++)f[s[m].name]=a[m][u];o[u]=f;}return d.ccall("duckdb_destroy_result",null,["number"],[e]),o}finally{d._free(e);}}readColumnData(t,e,n,i){if(!d)return [];let s=new Array(n),c=e!==0;switch(i){case h.BOOLEAN:{let a=t;for(let o=0;o<n;o++)c&&d.HEAPU8[e+o]?s[o]=null:s[o]=d.HEAPU8[a+o]!==0;break}case h.TINYINT:{for(let a=0;a<n;a++)c&&d.HEAPU8[e+a]?s[a]=null:s[a]=d.HEAP8[t+a];break}case h.SMALLINT:{let a=t>>1;for(let o=0;o<n;o++)c&&d.HEAPU8[e+o]?s[o]=null:s[o]=d.HEAP16[a+o];break}case h.INTEGER:{let a=t>>2;for(let o=0;o<n;o++)c&&d.HEAPU8[e+o]?s[o]=null:s[o]=d.HEAP32[a+o];break}case h.BIGINT:{let a=t>>2;for(let o=0;o<n;o++)if(c&&d.HEAPU8[e+o])s[o]=null;else {let u=d.HEAPU32[a+o*2],f=d.HEAP32[a+o*2+1];if(f===0&&u<=9007199254740991)s[o]=u;else if(f===-1&&u>=2147483648)s[o]=f*4294967296+u;else {let m=BigInt(f)*BigInt(4294967296)+BigInt(u>>>0);s[o]=m.toString();}}break}case h.UTINYINT:{for(let a=0;a<n;a++)c&&d.HEAPU8[e+a]?s[a]=null:s[a]=d.HEAPU8[t+a];break}case h.USMALLINT:{let a=t>>1;for(let o=0;o<n;o++)c&&d.HEAPU8[e+o]?s[o]=null:s[o]=d.HEAPU16[a+o];break}case h.UINTEGER:{let a=t>>2;for(let o=0;o<n;o++)c&&d.HEAPU8[e+o]?s[o]=null:s[o]=d.HEAPU32[a+o];break}case h.UBIGINT:{let a=t>>2;for(let o=0;o<n;o++)if(c&&d.HEAPU8[e+o])s[o]=null;else {let u=d.HEAPU32[a+o*2],f=d.HEAPU32[a+o*2+1];if(f===0&&u<=9007199254740991)s[o]=u;else {let m=BigInt(f)*BigInt(4294967296)+BigInt(u);s[o]=m.toString();}}break}case h.FLOAT:{let a=t>>2;for(let o=0;o<n;o++)c&&d.HEAPU8[e+o]?s[o]=null:s[o]=d.HEAPF32[a+o];break}case h.DOUBLE:{let a=t>>3;for(let o=0;o<n;o++)c&&d.HEAPU8[e+o]?s[o]=null:s[o]=d.HEAPF64[a+o];break}case h.DATE:{let a=t>>2;for(let o=0;o<n;o++)if(c&&d.HEAPU8[e+o])s[o]=null;else {let u=d.HEAP32[a+o],f=new Date(u*24*60*60*1e3);s[o]=f.toISOString().split("T")[0];}break}case h.TIMESTAMP:case h.TIMESTAMP_TZ:{let a=t>>2;for(let o=0;o<n;o++)if(c&&d.HEAPU8[e+o])s[o]=null;else {let u=d.HEAPU32[a+o*2],f=d.HEAP32[a+o*2+1],m=BigInt(f)*BigInt(4294967296)+BigInt(u>>>0),b=Number(m/BigInt(1e3)),p=new Date(b);s[o]=p.toISOString();}break}default:for(let a=0;a<n;a++)s[a]=null;break}return s}async queryArrow(t){if(this.closed||!d)throw new y("Connection is closed");let e=d._malloc(64);try{if(await d.ccall("duckdb_query","number",["number","string","number"],[this.connPtr,t,e],{async:!0})!==0){let u=d.ccall("duckdb_result_error","number",["number"],[e]),f=u?d.UTF8ToString(u):"Query failed";throw d.ccall("duckdb_destroy_result",null,["number"],[e]),new y(f,void 0,t)}let i=d.ccall("duckdb_column_count","number",["number"],[e]),s=d.ccall("duckdb_row_count","number",["number"],[e]),c=[];for(let u=0;u<i;u++){let f=d.ccall("duckdb_column_name","number",["number","number"],[e,u]),m=d.ccall("duckdb_column_type","number",["number","number"],[e,u]);c.push({name:d.UTF8ToString(f),type:m,flechetteType:this.getFlechetteType(m)||$()});}let a={},o={};for(let u=0;u<i;u++){let f=c[u],m=d.ccall("duckdb_column_data","number",["number","number"],[e,u]),b=d.ccall("duckdb_nullmask_data","number",["number","number"],[e,u]);if(f.type===h.VARCHAR||m===0){let p=new Array(s);for(let g=0;g<s;g++)if(d.ccall("duckdb_value_is_null","number",["number","number","number","number","number"],[e,u,0,g,0]))p[g]=null;else {let S=d.ccall("duckdb_value_varchar","number",["number","number","number","number","number"],[e,u,0,g,0]);S?(p[g]=d.UTF8ToString(S),d._free(S)):p[g]=null;}a[f.name]=p;}else a[f.name]=this.readColumnData(m,b,s,f.type);o[f.name]=f.flechetteType;}return d.ccall("duckdb_destroy_result",null,["number"],[e]),ne(a,{types:o})}finally{d._free(e);}}getFlechetteType(t){switch(t){case h.BOOLEAN:return Bt();case h.TINYINT:return st();case h.SMALLINT:return ot();case h.INTEGER:return G();case h.BIGINT:return it();case h.UTINYINT:return _t();case h.USMALLINT:return kt();case h.UINTEGER:return Dt();case h.UBIGINT:return St();case h.FLOAT:return Ot();case h.DOUBLE:return et();case h.VARCHAR:return $();case h.DATE:return Pt();case h.TIMESTAMP:case h.TIMESTAMP_TZ:return ct(w.MICROSECOND);default:return $()}}async execute(t){if(this.closed||!d)throw new y("Connection is closed");let e=d._malloc(64);try{if(await d.ccall("duckdb_query","number",["number","string","number"],[this.connPtr,t,e],{async:!0})!==0){let s=d.ccall("duckdb_result_error","number",["number"],[e]),c=s?d.UTF8ToString(s):"Query failed";throw d.ccall("duckdb_destroy_result",null,["number"],[e]),new y(c,void 0,t)}let i=d.ccall("duckdb_rows_changed","number",["number"],[e]);return d.ccall("duckdb_destroy_result",null,["number"],[e]),i}finally{d._free(e);}}prepare(t){if(this.closed||!d)throw new y("Connection is closed");let e=d._malloc(4);try{if(d.ccall("duckdb_prepare","number",["number","string","number"],[this.connPtr,t,e])!==0){let s=d.getValue(e,"*");if(s){let c=d.ccall("duckdb_prepare_error","number",["number"],[s]),a=c?d.UTF8ToString(c):"Failed to prepare statement";throw d.ccall("duckdb_destroy_prepare",null,["number"],[s]),new y(a,void 0,t)}throw new y("Failed to prepare statement",void 0,t)}let i=d.getValue(e,"*");return new rn(i,this.connPtr,t)}finally{d._free(e);}}async beginTransaction(){await this.execute("BEGIN TRANSACTION");}async commit(){await this.execute("COMMIT");}async rollback(){await this.execute("ROLLBACK");}async transaction(t){await this.beginTransaction();try{let e=await t();return await this.commit(),e}catch(e){throw await this.rollback(),e}}close(){if(this.closed||!d)return;let t=d._malloc(4);try{d.setValue(t,this.connPtr,"*"),d.ccall("duckdb_disconnect",null,["number"],[t]);}finally{d._free(t);}this.closed=true,this.connPtr=0;}};
|
|
3
|
+
export{no as AccessMode,sn as Connection,nn as DataChunk,ts as DuckDB,y as DuckDBError,h as DuckDBType,rn as PreparedStatement,Jn as StreamingResult,oo as checkSql,Fu as init,Lu as sanitizeSql,ne as tableFromArrays,Rn as tableFromIPC,qn as tableToIPC,Cu as version};//# sourceMappingURL=index.js.map
|
|
4
|
+
//# sourceMappingURL=index.js.map
|