@ducklings/browser 1.4.3-dev.2 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts","../src/cdn.ts","../src/errors.ts","../src/worker/protocol.ts","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/constants.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/util/arrays.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/util/objects.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/data-types.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/util/numbers.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/util/strings.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/util/read.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/util/struct.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/batch.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/column.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/table.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/batch-type.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/decode/block.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/decode/record-batch.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/decode/dictionary-batch.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/decode/data-type.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/decode/metadata.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/decode/schema.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/decode/message.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/decode/decode-ipc.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/decode/table-from-ipc.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/encode/schema.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/buffer.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/batch.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/validity.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/dictionary.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/infer-type.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/binary.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/bool.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/decimal.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/fixed-size-binary.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/fixed-size-list.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/interval.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/list.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/struct.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/map.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/run-end-encoded.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/union.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/utf8.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builders/values.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/builder.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/column-from-values.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/column-from-array.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/table-from-columns.js","../../../node_modules/.pnpm/@uwdata+flechette@2.2.6/node_modules/@uwdata/flechette/src/build/table-from-arrays.js","../src/async/prepared-statement.ts","../src/async/data-chunk.ts","../src/async/streaming-result.ts","../src/async/connection.ts","../src/async/bindings.ts","../src/types.ts"],"names":["PACKAGE_NAME","PACKAGE_VERSION","getJsDelivrBundle","version","base","getUnpkgBundle","createWorker","url","response","blob","blobUrl","DuckDBError","_DuckDBError","message","code","query","obj","WorkerTask","messageId","type","resolve","reject","value","error","MAGIC","Version","Endianness","MessageHeader","Type","Precision","DateUnit","TimeUnit","IntervalUnit","UnionMode","uint8Array","uint16Array","uint32Array","uint64Array","int8Array","int16Array","int32Array","int64Array","float32Array","float64Array","isArrayBufferLike","data","intArrayType","bitWidth","signed","i","TypedArray","isTypedArray","isArray","isInt64ArrayType","bisect","offsets","index","a","b","mid","align64","length","bpe","align","array","alignedLength","resize","newLength","offset","newArray","grow","shift","isDate","isIterable","check","test","checkOneOf","set","keyFor","object","key","val","invalidDataType","typeId","field","name","nullable","metadata","isField","isDataType","asField","defaultName","defaultNullable","basicType","dictionary","indexType","ordered","id","int32","nullType","int","int8","int16","int64","uint8","uint16","uint32","uint64","float","precision","float32","float64","binary","utf8","bool","decimal","scale","date","unit","dateDay","time","timestamp","timezone","interval","list","child","struct","children","union","mode","typeIds","typeIdForValue","v","m","fixedSizeBinary","stride","fixedSizeList","mapType","keysSorted","duration","largeBinary","largeUtf8","largeList","runEndEncoded","runsField","valuesField","listView","largeListView","f64","buf","i64","u32","i32","u8","identity","toBigInt","toOffset","toDateDay","toTimestamp","toMonthDayNanoBytes","d","n","toNumber","divide","num","div","toDecimal32","toDecimal","asUint64","fromDecimal64","fromDecimal128","x","fromDecimal256","toFloat16","sign","expo","sigf","textDecoder","textEncoder","decodeUtf8","encodeUtf8","str","keyString","objectKey","s","k","SIZEOF_INT","decodeBit","bitmap","readObject","pos","readInt32","vtable","size","readInt16","read","fallback","off","readOffset","readBoolean","readInt8","readUint8","readUint16","readUint32","readInt64","readString","readVector","extract","_","RowIndex","proxyFactory","names","batches","RowObject","structObject","proto","batch","objectFactory","isDirectBatch","DirectBatch","Batch","nullCount","validity","values","sizes","start","end","options","NumberBatch","ArrayBatch","NullBatch","Int64Batch","Float16Batch","BoolBatch","Decimal32NumberBatch","DecimalBatch","DecimalNumberBatch","DecimalBigIntBatch","DateBatch","DateDayBatch","DateDayMillisecondBatch","TimestampSecondBatch","TimestampMillisecondBatch","TimestampMicrosecondBatch","TimestampNanosecondBatch","IntervalDayTimeBatch","IntervalMonthDayNanoBatch","offset32","offset64","BinaryBatch","LargeBinaryBatch","Utf8Batch","LargeUtf8Batch","ListBatch","LargeListBatch","ListViewBatch","LargeListViewBatch","FixedBatch","FixedBinaryBatch","FixedListBatch","pairs","keys","vals","entries","MapEntryBatch","MapBatch","SparseUnionBatch","typeMap","DenseUnionBatch","StructBatch","factory","StructProxyBatch","RunEndEncodedBatch","runs","DictionaryBatch","ViewBatch","BinaryViewBatch","Utf8ViewBatch","columnBuilder","Column","c","batchedIterator","copy","ArrayType","copyArray","extractArray","iter","next","j","Table","_Table","schema","useProxy","f","gen","indices","as","fields","renameField","all","cols","getFactory","numRows","output","row","batchType","useBigInt","useDate","useDecimalInt","useMap","wrap","BaseClass","WrapperClass","decodeBlock","decodeBlocks","decodeRecordBatch","get","decodeDictionaryBatch","decodeDataType","decodeMetadata","decodeSchema","decodeSchemaFields","fieldsOffset","decodeField","typeOffset","dict","decodeDictionary","decodeFieldChildren","fieldOffset","decodeInt","invalidMessageMetadata","expected","actual","invalidMessageBodyLength","invalidMessageType","decodeMessage","metadataLength","head","bodyLength","content","decoder","body","decodeIPC","source","isArrowFileFormat","decodeIPCFile","decodeIPCStream","stream","records","dictionaries","dicts","recs","tableFromIPC","createTable","dictionaryMap","context","contextGenerator","dictionaryTypes","visitSchemaFields","isDelta","visit","ctx","visitor","visitField","nodes","regions","variadic","nodeIndex","bufferIndex","variadicIndex","node","buffer","BatchType","arrayType","Buffer","bytes","Bitmap","BatchBuilder","ValidityBuilder","isValid","dictionaryContext","idMap","dictionaryValues","valueType","DictionaryBuilder","inferType","profile","profiler","boolCount","numberCount","intCount","bigintCount","dateCount","dayCount","stringCount","arrayCount","structCount","min","max","minLength","maxLength","minBigInt","maxBigInt","arrayProfile","structProfiles","len","valid","intType","bigintType","unionType","BinaryBuilder","BoolBuilder","DecimalBuilder","FixedSizeBinaryBuilder","FixedSizeListBuilder","IntervalDayTimeBuilder","IntervalMonthDayNanoBuilder","AbstractListBuilder","offsetType","ListBuilder","AbstractStructBuilder","StructBuilder","setters","MapBuilder","MapStructBuilder","keyValuePair","NO_VALUE","RunEndEncodedBuilder","AbstractUnionBuilder","lookup","SparseUnionBuilder","DenseUnionBuilder","Utf8Builder","DirectBuilder","Int64Builder","TransformBuilder","transform","builderContext","builder","columnFromValues","callback","maxBatchRows","opt","nullBatches","limit","numBatches","rem","columnFromArray","columnFromTypedArray","typeForTypedArray","add","idx","tableFromColumns","columns","col","tableFromArrays","types","PreparedStatement","db","connectionId","preparedStatementId","_sql","rows","DataChunk","rowCount","AsyncStreamingResult","streamingResultId","results","chunk","allRows","columnArrays","colIdx","colName","Connection","sql","fn","result","tableName","ipcBuffer","path","globalDB","initPromise","init","opts","baseUrl","workerUrl","wasmUrl","wasmJsUrl","worker","timeout","handler","event","DuckDB","getDB","task","errorData","transfer","request","config","protocol","directIO","text","srcName","dstPath","pattern","DuckDBType","AccessMode"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Package version constants\n *\n * These are injected at build time via tsup's define option.\n *\n * @packageDocumentation\n */\n\ndeclare const __PACKAGE_NAME__: string;\ndeclare const __PACKAGE_VERSION__: string;\n\n/** Package name for CDN URL generation */\nexport const PACKAGE_NAME =\n typeof __PACKAGE_NAME__ !== 'undefined' ? __PACKAGE_NAME__ : '@ducklings/browser';\n\n/** Package version for CDN URL generation */\nexport const PACKAGE_VERSION =\n typeof __PACKAGE_VERSION__ !== 'undefined' ? __PACKAGE_VERSION__ : '1.4.3';\n","/**\n * CDN utilities for loading DuckDB from CDNs like jsDelivr\n *\n * When loading the library from a CDN, browsers block cross-origin Worker creation.\n * Use {@link createWorker} to work around this limitation.\n *\n * @packageDocumentation\n */\n\nimport { PACKAGE_NAME, PACKAGE_VERSION } from './version.js';\n\n/**\n * Bundle URLs for loading from CDN\n *\n * @category CDN\n */\nexport interface DuckDBBundle {\n /** URL to the main library entry point */\n mainModule: string;\n /** URL to the worker script */\n mainWorker: string;\n /** URL to the WASM binary */\n wasmModule: string;\n /** URL to the Emscripten JS glue */\n wasmJs: string;\n}\n\n/**\n * Get pre-configured bundle URLs for loading from jsDelivr CDN\n *\n * @category CDN\n * @param version - Optional version to use (defaults to current package version)\n * @returns Bundle URLs for jsDelivr\n *\n * @example\n * ```typescript\n * import { getJsDelivrBundle, createWorker, init } from '@ducklings/browser';\n *\n * const bundle = getJsDelivrBundle();\n * const worker = await createWorker(bundle.mainWorker);\n *\n * await init({\n * worker,\n * wasmUrl: bundle.wasmModule,\n * wasmJsUrl: bundle.wasmJs,\n * });\n * ```\n */\nexport function getJsDelivrBundle(version?: string): DuckDBBundle {\n const ver = version ?? PACKAGE_VERSION;\n const base = `https://cdn.jsdelivr.net/npm/${PACKAGE_NAME}@${ver}/dist/`;\n\n return {\n mainModule: `${base}index.js`,\n mainWorker: `${base}worker.js`,\n wasmModule: `${base}wasm/duckdb.wasm`,\n wasmJs: `${base}wasm/duckdb.js`,\n };\n}\n\n/**\n * Get pre-configured bundle URLs for loading from unpkg CDN\n *\n * @category CDN\n * @param version - Optional version to use (defaults to current package version)\n * @returns Bundle URLs for unpkg\n */\nexport function getUnpkgBundle(version?: string): DuckDBBundle {\n const ver = version ?? PACKAGE_VERSION;\n const base = `https://unpkg.com/${PACKAGE_NAME}@${ver}/dist/`;\n\n return {\n mainModule: `${base}index.js`,\n mainWorker: `${base}worker.js`,\n wasmModule: `${base}wasm/duckdb.wasm`,\n wasmJs: `${base}wasm/duckdb.js`,\n };\n}\n\n/**\n * Create a Worker from a cross-origin URL using Blob URL workaround.\n *\n * Browsers block creating Workers from cross-origin scripts (like those served from CDNs).\n * This function fetches the worker script and creates a same-origin Blob URL from it.\n *\n * @category CDN\n * @param url - URL to the worker script (can be cross-origin)\n * @returns Promise resolving to a same-origin Worker\n *\n * @example\n * ```typescript\n * import { createWorker, getJsDelivrBundle, init } from '@ducklings/browser';\n *\n * const bundle = getJsDelivrBundle();\n * const worker = await createWorker(bundle.mainWorker);\n *\n * await init({ worker });\n * ```\n */\nexport async function createWorker(url: string): Promise<Worker> {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch worker script: ${response.status} ${response.statusText}`);\n }\n const blob = await response.blob();\n const blobUrl = URL.createObjectURL(blob);\n return new Worker(blobUrl, { type: 'module' });\n}\n","/**\n * Error handling for Ducklings\n * @packageDocumentation\n */\n\n/**\n * Error thrown by DuckDB operations.\n *\n * This error is thrown when DuckDB encounters an error during query execution,\n * connection management, or other database operations.\n *\n * @example\n * ```typescript\n * try {\n * await conn.query('SELECT * FROM nonexistent_table');\n * } catch (e) {\n * if (e instanceof DuckDBError) {\n * console.error('DuckDB error:', e.message);\n * console.error('Query:', e.query);\n * }\n * }\n * ```\n */\nexport class DuckDBError extends Error {\n /** Error code if available */\n public readonly code?: string;\n /** The SQL query that caused the error */\n public readonly query?: string;\n\n constructor(message: string, code?: string, query?: string) {\n super(message);\n this.name = 'DuckDBError';\n this.code = code;\n this.query = query;\n // Maintains proper stack trace for where error was thrown (V8 only)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, DuckDBError);\n }\n }\n\n /**\n * Create a DuckDBError from a plain object (for worker message deserialization).\n * @internal\n */\n static fromObject(obj: { message: string; code?: string; query?: string }): DuckDBError {\n return new DuckDBError(obj.message, obj.code, obj.query);\n }\n\n /**\n * Convert to a plain object for worker message serialization.\n * @internal\n */\n toObject(): { message: string; code?: string; query?: string } {\n return {\n message: this.message,\n code: this.code,\n query: this.query,\n };\n }\n}\n","/**\n * Worker message protocol for Ducklings\n * @packageDocumentation\n */\n\nimport type { ColumnInfo, CSVInsertOptions, DuckDBConfig, JSONInsertOptions } from '../types.js';\n\n/**\n * Request types sent from main thread to worker.\n */\nexport enum WorkerRequestType {\n // Lifecycle\n PING = 'PING',\n INSTANTIATE = 'INSTANTIATE',\n GET_VERSION = 'GET_VERSION',\n OPEN = 'OPEN',\n CLOSE = 'CLOSE',\n CONNECT = 'CONNECT',\n DISCONNECT = 'DISCONNECT',\n\n // Query operations\n QUERY = 'QUERY',\n QUERY_ARROW = 'QUERY_ARROW',\n QUERY_STREAMING = 'QUERY_STREAMING',\n EXECUTE = 'EXECUTE',\n FETCH_CHUNK = 'FETCH_CHUNK',\n CLOSE_STREAMING_RESULT = 'CLOSE_STREAMING_RESULT',\n RESET_STREAMING_RESULT = 'RESET_STREAMING_RESULT',\n\n // Prepared statements\n PREPARE = 'PREPARE',\n RUN_PREPARED = 'RUN_PREPARED',\n EXECUTE_PREPARED = 'EXECUTE_PREPARED',\n CLOSE_PREPARED = 'CLOSE_PREPARED',\n\n // Transactions\n BEGIN_TRANSACTION = 'BEGIN_TRANSACTION',\n COMMIT = 'COMMIT',\n ROLLBACK = 'ROLLBACK',\n\n // File registration\n REGISTER_FILE_URL = 'REGISTER_FILE_URL',\n REGISTER_FILE_BUFFER = 'REGISTER_FILE_BUFFER',\n REGISTER_FILE_HANDLE = 'REGISTER_FILE_HANDLE',\n REGISTER_FILE_TEXT = 'REGISTER_FILE_TEXT',\n\n // File operations\n DROP_FILE = 'DROP_FILE',\n DROP_FILES = 'DROP_FILES',\n FLUSH_FILES = 'FLUSH_FILES',\n COPY_FILE_TO_BUFFER = 'COPY_FILE_TO_BUFFER',\n COPY_FILE_TO_PATH = 'COPY_FILE_TO_PATH',\n GLOB_FILES = 'GLOB_FILES',\n\n // Data insertion\n INSERT_ARROW_FROM_IPC = 'INSERT_ARROW_FROM_IPC',\n INSERT_CSV_FROM_PATH = 'INSERT_CSV_FROM_PATH',\n INSERT_JSON_FROM_PATH = 'INSERT_JSON_FROM_PATH',\n}\n\n/**\n * Response types sent from worker to main thread.\n */\nexport enum WorkerResponseType {\n OK = 'OK',\n ERROR = 'ERROR',\n VERSION = 'VERSION',\n CONNECTION_ID = 'CONNECTION_ID',\n QUERY_RESULT = 'QUERY_RESULT',\n ARROW_IPC = 'ARROW_IPC',\n STREAMING_RESULT_INFO = 'STREAMING_RESULT_INFO',\n DATA_CHUNK = 'DATA_CHUNK',\n ROWS_CHANGED = 'ROWS_CHANGED',\n PREPARED_STATEMENT_ID = 'PREPARED_STATEMENT_ID',\n FILE_BUFFER = 'FILE_BUFFER',\n FILE_INFO_LIST = 'FILE_INFO_LIST',\n}\n\n// ============================================================================\n// Request payload types\n// ============================================================================\n\nexport interface InstantiateRequest {\n wasmUrl?: string;\n wasmJsUrl?: string;\n}\n\nexport interface OpenRequest {\n config?: DuckDBConfig;\n}\n\nexport interface QueryRequest {\n connectionId: number;\n sql: string;\n}\n\nexport interface QueryArrowRequest {\n connectionId: number;\n sql: string;\n}\n\nexport interface QueryStreamingRequest {\n connectionId: number;\n sql: string;\n}\n\nexport interface ExecuteRequest {\n connectionId: number;\n sql: string;\n}\n\nexport interface FetchChunkRequest {\n connectionId: number;\n streamingResultId: number;\n}\n\nexport interface CloseStreamingResultRequest {\n connectionId: number;\n streamingResultId: number;\n}\n\nexport interface ResetStreamingResultRequest {\n connectionId: number;\n streamingResultId: number;\n}\n\nexport interface PrepareRequest {\n connectionId: number;\n sql: string;\n}\n\nexport interface RunPreparedRequest {\n connectionId: number;\n preparedStatementId: number;\n bindings: PreparedStatementBinding[];\n}\n\nexport interface ExecutePreparedRequest {\n connectionId: number;\n preparedStatementId: number;\n bindings: PreparedStatementBinding[];\n}\n\nexport interface ClosePreparedRequest {\n connectionId: number;\n preparedStatementId: number;\n}\n\nexport interface TransactionRequest {\n connectionId: number;\n}\n\nexport interface RegisterFileURLRequest {\n name: string;\n url: string;\n protocol?: string;\n directIO?: boolean;\n}\n\nexport interface RegisterFileBufferRequest {\n name: string;\n buffer: Uint8Array;\n}\n\nexport interface RegisterFileHandleRequest {\n name: string;\n handle: FileSystemFileHandle;\n protocol?: string;\n directIO?: boolean;\n}\n\nexport interface RegisterFileTextRequest {\n name: string;\n text: string;\n}\n\nexport interface DropFileRequest {\n name: string;\n}\n\nexport interface CopyFileToBufferRequest {\n name: string;\n}\n\nexport interface CopyFileToPathRequest {\n srcName: string;\n dstPath: string;\n}\n\nexport interface GlobFilesRequest {\n pattern: string;\n}\n\nexport interface InsertArrowFromIPCRequest {\n connectionId: number;\n tableName: string;\n ipcBuffer: Uint8Array;\n}\n\nexport interface InsertCSVFromPathRequest {\n connectionId: number;\n tableName: string;\n path: string;\n options?: CSVInsertOptions;\n}\n\nexport interface InsertJSONFromPathRequest {\n connectionId: number;\n tableName: string;\n path: string;\n options?: JSONInsertOptions;\n}\n\nexport interface DisconnectRequest {\n connectionId: number;\n}\n\n// ============================================================================\n// Response payload types\n// ============================================================================\n\nexport interface ErrorResponse {\n message: string;\n code?: string;\n query?: string;\n}\n\nexport interface VersionResponse {\n version: string;\n}\n\nexport interface ConnectionIdResponse {\n connectionId: number;\n}\n\nexport interface QueryResultResponse {\n columns: ColumnInfo[];\n rows: unknown[][];\n}\n\nexport interface ArrowIPCResponse {\n ipcBuffer: Uint8Array;\n}\n\nexport interface StreamingResultInfoResponse {\n streamingResultId: number;\n columns: ColumnInfo[];\n}\n\nexport interface DataChunkResponse {\n columns: ColumnInfo[];\n rows: unknown[][];\n rowCount: number;\n done: boolean;\n}\n\nexport interface RowsChangedResponse {\n rowsChanged: number;\n}\n\nexport interface PreparedStatementIdResponse {\n preparedStatementId: number;\n}\n\nexport interface FileBufferResponse {\n buffer: Uint8Array;\n}\n\nexport interface FileInfoListResponse {\n files: { name: string; size: number }[];\n}\n\n// ============================================================================\n// Prepared statement binding\n// ============================================================================\n\nexport type PreparedStatementBindingType =\n | 'null'\n | 'boolean'\n | 'int8'\n | 'int16'\n | 'int32'\n | 'int64'\n | 'uint8'\n | 'uint16'\n | 'uint32'\n | 'uint64'\n | 'float'\n | 'double'\n | 'varchar'\n | 'blob'\n | 'date'\n | 'time'\n | 'timestamp'\n | 'interval';\n\nexport interface PreparedStatementBinding {\n index: number;\n type: PreparedStatementBindingType;\n value: unknown;\n}\n\n// ============================================================================\n// Message wrappers\n// ============================================================================\n\n/**\n * Base request message from main thread to worker.\n */\nexport interface WorkerRequest<T extends WorkerRequestType = WorkerRequestType, D = unknown> {\n messageId: number;\n type: T;\n data: D;\n}\n\n/**\n * Base response message from worker to main thread.\n */\nexport interface WorkerResponse<T extends WorkerResponseType = WorkerResponseType, D = unknown> {\n messageId: number;\n requestId: number;\n type: T;\n data: D;\n}\n\n// ============================================================================\n// Worker task for tracking pending requests\n// ============================================================================\n\n/**\n * Represents a pending request to the worker.\n * @internal\n */\nexport class WorkerTask<T = unknown> {\n readonly messageId: number;\n readonly type: WorkerRequestType;\n private _resolve: (value: T) => void;\n private _reject: (error: Error) => void;\n readonly promise: Promise<T>;\n\n constructor(messageId: number, type: WorkerRequestType) {\n this.messageId = messageId;\n this.type = type;\n this._resolve = () => {};\n this._reject = () => {};\n this.promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n\n /**\n * Resolve the task with a successful result.\n */\n resolve(value: T): void {\n this._resolve(value);\n }\n\n /**\n * Reject the task with an error.\n */\n reject(error: Error): void {\n this._reject(error);\n }\n}\n\n// ============================================================================\n// Type-safe request/response mapping\n// ============================================================================\n\n/**\n * Maps request types to their payload types.\n */\nexport type RequestPayloadMap = {\n [WorkerRequestType.PING]: undefined;\n [WorkerRequestType.INSTANTIATE]: InstantiateRequest;\n [WorkerRequestType.GET_VERSION]: undefined;\n [WorkerRequestType.OPEN]: OpenRequest;\n [WorkerRequestType.CLOSE]: undefined;\n [WorkerRequestType.CONNECT]: undefined;\n [WorkerRequestType.DISCONNECT]: DisconnectRequest;\n [WorkerRequestType.QUERY]: QueryRequest;\n [WorkerRequestType.QUERY_ARROW]: QueryArrowRequest;\n [WorkerRequestType.QUERY_STREAMING]: QueryStreamingRequest;\n [WorkerRequestType.EXECUTE]: ExecuteRequest;\n [WorkerRequestType.FETCH_CHUNK]: FetchChunkRequest;\n [WorkerRequestType.CLOSE_STREAMING_RESULT]: CloseStreamingResultRequest;\n [WorkerRequestType.RESET_STREAMING_RESULT]: ResetStreamingResultRequest;\n [WorkerRequestType.PREPARE]: PrepareRequest;\n [WorkerRequestType.RUN_PREPARED]: RunPreparedRequest;\n [WorkerRequestType.EXECUTE_PREPARED]: ExecutePreparedRequest;\n [WorkerRequestType.CLOSE_PREPARED]: ClosePreparedRequest;\n [WorkerRequestType.BEGIN_TRANSACTION]: TransactionRequest;\n [WorkerRequestType.COMMIT]: TransactionRequest;\n [WorkerRequestType.ROLLBACK]: TransactionRequest;\n [WorkerRequestType.REGISTER_FILE_URL]: RegisterFileURLRequest;\n [WorkerRequestType.REGISTER_FILE_BUFFER]: RegisterFileBufferRequest;\n [WorkerRequestType.REGISTER_FILE_HANDLE]: RegisterFileHandleRequest;\n [WorkerRequestType.REGISTER_FILE_TEXT]: RegisterFileTextRequest;\n [WorkerRequestType.DROP_FILE]: DropFileRequest;\n [WorkerRequestType.DROP_FILES]: undefined;\n [WorkerRequestType.FLUSH_FILES]: undefined;\n [WorkerRequestType.COPY_FILE_TO_BUFFER]: CopyFileToBufferRequest;\n [WorkerRequestType.COPY_FILE_TO_PATH]: CopyFileToPathRequest;\n [WorkerRequestType.GLOB_FILES]: GlobFilesRequest;\n [WorkerRequestType.INSERT_ARROW_FROM_IPC]: InsertArrowFromIPCRequest;\n [WorkerRequestType.INSERT_CSV_FROM_PATH]: InsertCSVFromPathRequest;\n [WorkerRequestType.INSERT_JSON_FROM_PATH]: InsertJSONFromPathRequest;\n};\n","/** Magic bytes 'ARROW1' indicating the Arrow 'file' format. */\nexport const MAGIC = Uint8Array.of(65, 82, 82, 79, 87, 49);\n\n/** Bytes for an 'end of stream' message. */\nexport const EOS = Uint8Array.of(255, 255, 255, 255, 0, 0, 0, 0);\n\n/**\n * Apache Arrow version.\n */\nexport const Version = /** @type {const} */ ({\n /** 0.1.0 (October 2016). */\n V1: 0,\n /** 0.2.0 (February 2017). Non-backwards compatible with V1. */\n V2: 1,\n /** 0.3.0 -> 0.7.1 (May - December 2017). Non-backwards compatible with V2. */\n V3: 2,\n /** >= 0.8.0 (December 2017). Non-backwards compatible with V3. */\n V4: 3,\n /**\n * >= 1.0.0 (July 2020). Backwards compatible with V4 (V5 readers can read V4\n * metadata and IPC messages). Implementations are recommended to provide a\n * V4 compatibility mode with V5 format changes disabled.\n *\n * Incompatible changes between V4 and V5:\n * - Union buffer layout has changed.\n * In V5, Unions don't have a validity bitmap buffer.\n */\n V5: 4\n});\n\n/**\n * Endianness of Arrow-encoded data.\n */\nexport const Endianness = /** @type {const} */ ({\n Little: 0,\n Big: 1\n});\n\n/**\n * Message header type codes.\n */\nexport const MessageHeader = /** @type {const} */ ({\n NONE: 0,\n /**\n * A Schema describes the columns in a record batch.\n */\n Schema: 1,\n /**\n * For sending dictionary encoding information. Any Field can be\n * dictionary-encoded, but in this case none of its children may be\n * dictionary-encoded.\n * There is one vector / column per dictionary, but that vector / column\n * may be spread across multiple dictionary batches by using the isDelta\n * flag.\n */\n DictionaryBatch: 2,\n /**\n * A data header describing the shared memory layout of a \"record\" or \"row\"\n * batch. Some systems call this a \"row batch\" internally and others a \"record\n * batch\".\n */\n RecordBatch: 3,\n /**\n * EXPERIMENTAL: Metadata for n-dimensional arrays, aka \"tensors\" or\n * \"ndarrays\". Arrow implementations in general are not required to implement\n * this type.\n *\n * Not currently supported by Flechette.\n */\n Tensor: 4,\n /**\n * EXPERIMENTAL: Metadata for n-dimensional sparse arrays, aka \"sparse\n * tensors\". Arrow implementations in general are not required to implement\n * this type.\n *\n * Not currently supported by Flechette.\n */\n SparseTensor: 5\n});\n\n/**\n * Field data type ids.\n * Only non-negative values ever occur in IPC flatbuffer binary data.\n */\nexport const Type = /** @type {const} */ ({\n /**\n * Dictionary types compress data by using a set of integer indices to\n * lookup potentially repeated vales in a separate dictionary of values.\n *\n * This type entry is provided for API convenience, it does not occur\n * in actual Arrow IPC binary data.\n */\n Dictionary: -1,\n /** No data type. Included for flatbuffer compatibility. */\n NONE: 0,\n /** Null values only. */\n Null: 1,\n /** Integers, either signed or unsigned, with 8, 16, 32, or 64 bit widths. */\n Int: 2,\n /** Floating point numbers with 16, 32, or 64 bit precision. */\n Float: 3,\n /** Opaque binary data. */\n Binary: 4,\n /** Unicode with UTF-8 encoding. */\n Utf8: 5,\n /** Booleans represented as 8 bit bytes. */\n Bool: 6,\n /**\n * Exact decimal value represented as an integer value in two's complement.\n * Currently only 128-bit (16-byte) and 256-bit (32-byte) integers are used.\n * The representation uses the endianness indicated in the schema.\n */\n Decimal: 7,\n /**\n * Date is either a 32-bit or 64-bit signed integer type representing an\n * elapsed time since UNIX epoch (1970-01-01), stored in either of two units:\n * - Milliseconds (64 bits) indicating UNIX time elapsed since the epoch (no\n * leap seconds), where the values are evenly divisible by 86400000\n * - Days (32 bits) since the UNIX epoch\n */\n Date: 8,\n /**\n * Time is either a 32-bit or 64-bit signed integer type representing an\n * elapsed time since midnight, stored in either of four units: seconds,\n * milliseconds, microseconds or nanoseconds.\n *\n * The integer `bitWidth` depends on the `unit` and must be one of the following:\n * - SECOND and MILLISECOND: 32 bits\n * - MICROSECOND and NANOSECOND: 64 bits\n *\n * The allowed values are between 0 (inclusive) and 86400 (=24*60*60) seconds\n * (exclusive), adjusted for the time unit (for example, up to 86400000\n * exclusive for the MILLISECOND unit).\n * This definition doesn't allow for leap seconds. Time values from\n * measurements with leap seconds will need to be corrected when ingesting\n * into Arrow (for example by replacing the value 86400 with 86399).\n */\n Time: 9,\n /**\n * Timestamp is a 64-bit signed integer representing an elapsed time since a\n * fixed epoch, stored in either of four units: seconds, milliseconds,\n * microseconds or nanoseconds, and is optionally annotated with a timezone.\n *\n * Timestamp values do not include any leap seconds (in other words, all\n * days are considered 86400 seconds long).\n *\n * The timezone is an optional string for the name of a timezone, one of:\n *\n * - As used in the Olson timezone database (the \"tz database\" or\n * \"tzdata\"), such as \"America/New_York\".\n * - An absolute timezone offset of the form \"+XX:XX\" or \"-XX:XX\",\n * such as \"+07:30\".\n *\n * Whether a timezone string is present indicates different semantics about\n * the data.\n */\n Timestamp: 10,\n /**\n * A \"calendar\" interval which models types that don't necessarily\n * have a precise duration without the context of a base timestamp (e.g.\n * days can differ in length during day light savings time transitions).\n * All integers in the units below are stored in the endianness indicated\n * by the schema.\n *\n * - YEAR_MONTH - Indicates the number of elapsed whole months, stored as\n * 4-byte signed integers.\n * - DAY_TIME - Indicates the number of elapsed days and milliseconds (no\n * leap seconds), stored as 2 contiguous 32-bit signed integers (8-bytes\n * in total). Support of this IntervalUnit is not required for full arrow\n * compatibility.\n * - MONTH_DAY_NANO - A triple of the number of elapsed months, days, and\n * nanoseconds. The values are stored contiguously in 16-byte blocks.\n * Months and days are encoded as 32-bit signed integers and nanoseconds\n * is encoded as a 64-bit signed integer. Nanoseconds does not allow for\n * leap seconds. Each field is independent (e.g. there is no constraint\n * that nanoseconds have the same sign as days or that the quantity of\n * nanoseconds represents less than a day's worth of time).\n */\n Interval: 11,\n /**\n * List (vector) data supporting variably-sized lists.\n * A list has a single child data type for list entries.\n */\n List: 12,\n /**\n * A struct consisting of multiple named child data types.\n */\n Struct: 13,\n /**\n * A union is a complex type with parallel child data types. By default ids\n * in the type vector refer to the offsets in the children. Optionally\n * typeIds provides an indirection between the child offset and the type id.\n * For each child `typeIds[offset]` is the id used in the type vector.\n */\n Union: 14,\n /**\n * Binary data where each entry has the same fixed size.\n */\n FixedSizeBinary: 15,\n /**\n * List (vector) data where every list has the same fixed size.\n * A list has a single child data type for list entries.\n */\n FixedSizeList: 16,\n /**\n * A Map is a logical nested type that is represented as\n * List<entries: Struct<key: K, value: V>>\n *\n * In this layout, the keys and values are each respectively contiguous. We do\n * not constrain the key and value types, so the application is responsible\n * for ensuring that the keys are hashable and unique. Whether the keys are sorted\n * may be set in the metadata for this field.\n *\n * In a field with Map type, the field has a child Struct field, which then\n * has two children: key type and the second the value type. The names of the\n * child fields may be respectively \"entries\", \"key\", and \"value\", but this is\n * not enforced.\n *\n * Map\n * ```text\n * - child[0] entries: Struct\n * - child[0] key: K\n * - child[1] value: V\n * ```\n * Neither the \"entries\" field nor the \"key\" field may be nullable.\n *\n * The metadata is structured so that Arrow systems without special handling\n * for Map can make Map an alias for List. The \"layout\" attribute for the Map\n * field must have the same contents as a List.\n */\n Map: 17,\n /**\n * An absolute length of time unrelated to any calendar artifacts. For the\n * purposes of Arrow implementations, adding this value to a Timestamp\n * (\"t1\") naively (i.e. simply summing the two numbers) is acceptable even\n * though in some cases the resulting Timestamp (t2) would not account for\n * leap-seconds during the elapsed time between \"t1\" and \"t2\". Similarly,\n * representing the difference between two Unix timestamp is acceptable, but\n * would yield a value that is possibly a few seconds off from the true\n * elapsed time.\n *\n * The resolution defaults to millisecond, but can be any of the other\n * supported TimeUnit values as with Timestamp and Time types. This type is\n * always represented as an 8-byte integer.\n */\n Duration: 18,\n /**\n * Same as Binary, but with 64-bit offsets, allowing representation of\n * extremely large data values.\n */\n LargeBinary: 19,\n /**\n * Same as Utf8, but with 64-bit offsets, allowing representation of\n * extremely large data values.\n */\n LargeUtf8: 20,\n /**\n * Same as List, but with 64-bit offsets, allowing representation of\n * extremely large data values.\n */\n LargeList: 21,\n /**\n * Contains two child arrays, run_ends and values. The run_ends child array\n * must be a 16/32/64-bit integer array which encodes the indices at which\n * the run with the value in each corresponding index in the values child\n * array ends. Like list/struct types, the value array can be of any type.\n */\n RunEndEncoded: 22,\n /**\n * Logically the same as Binary, but the internal representation uses a view\n * struct that contains the string length and either the string's entire data\n * inline (for small strings) or an inlined prefix, an index of another buffer,\n * and an offset pointing to a slice in that buffer (for non-small strings).\n *\n * Since it uses a variable number of data buffers, each Field with this type\n * must have a corresponding entry in `variadicBufferCounts`.\n */\n BinaryView: 23,\n /**\n * Logically the same as Utf8, but the internal representation uses a view\n * struct that contains the string length and either the string's entire data\n * inline (for small strings) or an inlined prefix, an index of another buffer,\n * and an offset pointing to a slice in that buffer (for non-small strings).\n *\n * Since it uses a variable number of data buffers, each Field with this type\n * must have a corresponding entry in `variadicBufferCounts`.\n */\n Utf8View: 24,\n /**\n * Represents the same logical types that List can, but contains offsets and\n * sizes allowing for writes in any order and sharing of child values among\n * list values.\n */\n ListView: 25,\n /**\n * Same as ListView, but with 64-bit offsets and sizes, allowing to represent\n * extremely large data values.\n */\n LargeListView: 26\n});\n\n/**\n * Floating point number precision.\n */\nexport const Precision = /** @type {const} */ ({\n /** 16-bit floating point number. */\n HALF: 0,\n /** 32-bit floating point number. */\n SINGLE: 1,\n /** 64-bit floating point number. */\n DOUBLE: 2\n});\n\n/**\n * Date units.\n */\nexport const DateUnit = /** @type {const} */ ({\n /* Days (as 32 bit int) since the UNIX epoch. */\n DAY: 0,\n /**\n * Milliseconds (as 64 bit int) indicating UNIX time elapsed since the epoch\n * (no leap seconds), with values evenly divisible by 86400000.\n */\n MILLISECOND: 1\n});\n\n/**\n * Time units.\n */\nexport const TimeUnit = /** @type {const} */ ({\n /** Seconds. */\n SECOND: 0,\n /** Milliseconds. */\n MILLISECOND: 1,\n /** Microseconds. */\n MICROSECOND: 2,\n /** Nanoseconds. */\n NANOSECOND: 3\n});\n\n/**\n * Date/time interval units.\n */\nexport const IntervalUnit = /** @type {const} */ ({\n /**\n * Indicates the number of elapsed whole months, stored as 4-byte signed\n * integers.\n */\n YEAR_MONTH: 0,\n /**\n * Indicates the number of elapsed days and milliseconds (no leap seconds),\n * stored as 2 contiguous 32-bit signed integers (8-bytes in total). Support\n * of this IntervalUnit is not required for full arrow compatibility.\n */\n DAY_TIME: 1,\n /**\n * A triple of the number of elapsed months, days, and nanoseconds.\n * The values are stored contiguously in 16-byte blocks. Months and days are\n * encoded as 32-bit signed integers and nanoseconds is encoded as a 64-bit\n * signed integer. Nanoseconds does not allow for leap seconds. Each field is\n * independent (e.g. there is no constraint that nanoseconds have the same\n * sign as days or that the quantity of nanoseconds represents less than a\n * day's worth of time).\n */\n MONTH_DAY_NANO: 2\n});\n\n/**\n * Union type modes.\n */\nexport const UnionMode = /** @type {const} */ ({\n /** Sparse union layout with full arrays for each sub-type. */\n Sparse: 0,\n /** Dense union layout with offsets into value arrays. */\n Dense: 1\n});\n","/**\n * @import { Int64ArrayConstructor, IntArrayConstructor, IntegerArray, TypedArray } from '../types.js'\n */\nexport const uint8Array = Uint8Array;\nexport const uint16Array = Uint16Array;\nexport const uint32Array = Uint32Array;\nexport const uint64Array = BigUint64Array;\nexport const int8Array = Int8Array;\nexport const int16Array = Int16Array;\nexport const int32Array = Int32Array;\nexport const int64Array = BigInt64Array;\nexport const float32Array = Float32Array;\nexport const float64Array = Float64Array;\n\n/**\n * Check if an input value is an ArrayBuffer or SharedArrayBuffer.\n * @param {unknown} data\n * @returns {data is ArrayBufferLike}\n */\nexport function isArrayBufferLike(data) {\n return data instanceof ArrayBuffer || (\n typeof SharedArrayBuffer !== 'undefined' &&\n data instanceof SharedArrayBuffer\n );\n}\n\n/**\n * Return the appropriate typed array constructor for the given\n * integer type metadata.\n * @param {number} bitWidth The integer size in bits.\n * @param {boolean} signed Flag indicating if the integer is signed.\n * @returns {IntArrayConstructor}\n */\nexport function intArrayType(bitWidth, signed) {\n const i = Math.log2(bitWidth) - 3;\n return (\n signed\n ? [int8Array, int16Array, int32Array, int64Array]\n : [uint8Array, uint16Array, uint32Array, uint64Array]\n )[i];\n}\n\n/** Shared prototype for typed arrays. */\nconst TypedArray = Object.getPrototypeOf(Int8Array);\n\n/**\n * Check if a value is a typed array.\n * @param {*} value The value to check.\n * @returns {value is TypedArray}\n * True if value is a typed array, false otherwise.\n */\nexport function isTypedArray(value) {\n return value instanceof TypedArray;\n}\n\n/**\n * Check if a value is either a standard array or typed array.\n * @param {*} value The value to check.\n * @returns {value is (Array | TypedArray)}\n * True if value is an array, false otherwise.\n */\nexport function isArray(value) {\n return Array.isArray(value) || isTypedArray(value);\n}\n\n/**\n * Check if a value is an array type (constructor) for 64-bit integers,\n * one of BigInt64Array or BigUint64Array.\n * @param {*} value The value to check.\n * @returns {value is Int64ArrayConstructor}\n * True if value is a 64-bit array type, false otherwise.\n */\nexport function isInt64ArrayType(value) {\n return value === int64Array || value === uint64Array;\n}\n\n/**\n * Determine the correct index into an offset array for a given\n * full column row index. Assumes offset indices can be manipulated\n * as 32-bit signed integers.\n * @param {IntegerArray} offsets The offsets array.\n * @param {number} index The full column row index.\n */\nexport function bisect(offsets, index) {\n let a = 0;\n let b = offsets.length;\n if (b <= 2147483648) { // 2 ** 31\n // fast version, use unsigned bit shift\n // array length fits within 32-bit signed integer\n do {\n const mid = (a + b) >>> 1;\n if (offsets[mid] <= index) a = mid + 1;\n else b = mid;\n } while (a < b);\n } else {\n // slow version, use division and truncate\n // array length exceeds 32-bit signed integer\n do {\n const mid = Math.trunc((a + b) / 2);\n if (offsets[mid] <= index) a = mid + 1;\n else b = mid;\n } while (a < b);\n }\n return a;\n}\n\n/**\n * Compute a 64-bit aligned buffer size.\n * @param {number} length The starting size.\n * @param {number} bpe Bytes per element.\n * @returns {number} The aligned size.\n */\nfunction align64(length, bpe = 1) {\n return (((length * bpe) + 7) & ~7) / bpe;\n}\n\n/**\n * Return a 64-bit aligned version of the array.\n * @template {TypedArray} T\n * @param {T} array The array.\n * @param {number} length The current array length.\n * @returns {T} The aligned array.\n */\nexport function align(array, length = array.length) {\n const alignedLength = align64(length, array.BYTES_PER_ELEMENT);\n return array.length > alignedLength ? /** @type {T} */ (array.subarray(0, alignedLength))\n : array.length < alignedLength ? resize(array, alignedLength)\n : array;\n}\n\n/**\n * Resize a typed array to exactly the specified length.\n * @template {TypedArray} T\n * @param {T} array The array.\n * @param {number} newLength The new length.\n * @param {number} [offset] The offset at which to copy the old array.\n * @returns {T} The resized array.\n */\nexport function resize(array, newLength, offset = 0) {\n // @ts-ignore\n const newArray = new array.constructor(newLength);\n newArray.set(array, offset);\n return newArray;\n}\n\n/**\n * Grow a typed array to accommdate a minimum index. The array size is\n * doubled until it exceeds the minimum index.\n * @template {TypedArray} T\n * @param {T} array The array.\n * @param {number} index The minimum index.\n * @param {boolean} [shift] Flag to shift copied bytes to back of array.\n * @returns {T} The resized array.\n */\nexport function grow(array, index, shift) {\n while (array.length <= index) {\n array = resize(array, array.length << 1, shift ? array.length : 0);\n }\n return array;\n}\n","/**\n * Check if a value is a Date instance\n * @param {*} value The value to check.\n * @returns {value is Date} True if value is a Date, false otherwise.\n */\nexport function isDate(value) {\n return value instanceof Date;\n}\n\n/**\n * Check if a value is iterable.\n * @param {*} value The value to check.\n * @returns {value is Iterable} True if value is iterable, false otherwise.\n */\nexport function isIterable(value) {\n return typeof value[Symbol.iterator] === 'function';\n}\n\n/**\n * Return the input value if it passes a test.\n * Otherwise throw an error using the given message generator.\n * @template T\n * @param {T} value The value to check.\n * @param {(value: T) => boolean} test The test function.\n * @param {(value: *) => string} message Message generator.\n * @returns {T} The input value.\n * @throws if the value does not pass the test\n */\nexport function check(value, test, message) {\n if (test(value)) return value;\n throw new Error(message(value));\n}\n\n/**\n * Return the input value if it exists in the provided set.\n * Otherwise throw an error using the given message generator.\n * @template T\n * @param {T} value The value to check.\n * @param {T[] | Record<string,T>} set The set of valid values.\n * @param {(value: *) => string} [message] Message generator.\n * @returns {T} The input value.\n * @throws if the value is not included in the set\n */\nexport function checkOneOf(value, set, message) {\n set = Array.isArray(set) ? set : Object.values(set);\n return check(\n value,\n (value) => set.includes(value),\n message ?? (() => `${value} must be one of ${set}`)\n );\n}\n\n/**\n * Return the first object key that pairs with the given value.\n * @param {Record<string,any>} object The object to search.\n * @param {any} value The value to lookup.\n * @returns {string} The first matching key, or '<Unknown>' if not found.\n */\nexport function keyFor(object, value) {\n for (const [key, val] of Object.entries(object)) {\n if (val === value) return key;\n }\n return '<Unknown>';\n}\n","/**\n * @import { BinaryType, BinaryViewType, BoolType, DataType, DateType, DateUnit_, DecimalType, DictionaryType, DurationType, Field, FixedSizeBinaryType, FixedSizeListType, FloatType, IntBitWidth, IntervalType, IntervalUnit_, IntType, LargeBinaryType, LargeListType, LargeListViewType, LargeUtf8Type, ListType, ListViewType, MapType, NullType, Precision_, RunEndEncodedType, StructType, TimestampType, TimeType, TimeUnit_, UnionMode_, UnionType, Utf8Type, Utf8ViewType } from './types.js'\n */\nimport { DateUnit, IntervalUnit, Precision, TimeUnit, Type, UnionMode } from './constants.js';\nimport { intArrayType, float32Array, float64Array, int32Array, int64Array, uint16Array, uint64Array } from './util/arrays.js';\nimport { check, checkOneOf, keyFor } from './util/objects.js';\n\n/**\n * @typedef {Field | DataType} FieldInput\n */\n\nexport const invalidDataType = (typeId) =>\n `Unsupported data type: \"${keyFor(Type, typeId)}\" (id ${typeId})`;\n\n/**\n * Return a new field instance for use in a schema or type definition. A field\n * represents a field name, data type, and additional metadata. Fields are used\n * to represent child types within nested types like List, Struct, and Union.\n * @param {string} name The field name.\n * @param {DataType} type The field data type.\n * @param {boolean} [nullable=true] Flag indicating if the field is nullable\n * (default `true`).\n * @param {Map<string,string>|null} [metadata=null] Custom field metadata\n * annotations (default `null`).\n * @returns {Field} The field instance.\n */\nexport const field = (name, type, nullable = true, metadata = null) => ({\n name,\n type,\n nullable,\n metadata\n});\n\n/**\n * Checks if a value is a field instance.\n * @param {any} value\n * @returns {value is Field}\n */\nfunction isField(value) {\n return Object.hasOwn(value, 'name') && isDataType(value.type)\n}\n\n/**\n * Checks if a value is a data type instance.\n * @param {any} value\n * @returns {value is DataType}\n */\nfunction isDataType(value) {\n return typeof value?.typeId === 'number';\n}\n\n/**\n * Return a field instance from a field or data type input.\n * @param {FieldInput} value\n * The value to map to a field.\n * @param {string} [defaultName] The default field name.\n * @param {boolean} [defaultNullable=true] The default nullable value.\n * @returns {Field} The field instance.\n */\nfunction asField(value, defaultName = '', defaultNullable = true) {\n return isField(value)\n ? value\n : field(\n defaultName,\n check(value, isDataType, () => `Data type expected.`),\n defaultNullable\n );\n}\n\n/////\n\n/**\n * Return a basic type with only a type id.\n * @template {typeof Type[keyof typeof Type]} T\n * @param {T} typeId The type id.\n */\nconst basicType = (typeId) => ({ typeId });\n\n/**\n * Return a Dictionary data type instance. A dictionary type consists of a\n * dictionary of values (which may be of any type) and corresponding integer\n * indices that reference those values. If values are repeated, a dictionary\n * encoding can provide substantial space savings. In the IPC format,\n * dictionary indices reside alongside other columns in a record batch, while\n * dictionary values are written to special dictionary batches, linked by a\n * unique dictionary *id*.\n * @param {DataType} type The data type of dictionary\n * values.\n * @param {IntType} [indexType] The data type of\n * dictionary indices. Must be an integer type (default `int32`).\n * @param {boolean} [ordered=false] Indicates if dictionary values are\n * ordered (default `false`).\n * @param {number} [id=-1] The dictionary id. The default value (-1) indicates\n * the dictionary applies to a single column only. Provide an explicit id in\n * order to reuse a dictionary across columns when building, in which case\n * different dictionaries *must* have different unique ids. All dictionary\n * ids are later resolved (possibly to new values) upon IPC encoding.\n * @returns {DictionaryType}\n */\nexport const dictionary = (type, indexType, ordered = false, id = -1) => ({\n typeId: Type.Dictionary,\n id,\n dictionary: type,\n indices: indexType || int32(),\n ordered\n});\n\n/**\n * Return a Null data type instance. Null data requires no storage and all\n * extracted values are `null`.\n * @returns {NullType} The null data type.\n */\nexport const nullType = () => basicType(Type.Null);\n\n/**\n * Return an Int data type instance.\n * @param {IntBitWidth} [bitWidth=32] The integer bit width.\n * One of `8`, `16`, `32` (default), or `64`.\n * @param {boolean} [signed=true] Flag for signed or unsigned integers\n * (default `true`).\n * @returns {IntType} The integer data type.\n */\nexport const int = (bitWidth = 32, signed = true) => ({\n typeId: Type.Int,\n bitWidth: checkOneOf(bitWidth, [8, 16, 32, 64]),\n signed,\n values: intArrayType(bitWidth, signed)\n});\n/**\n * Return an Int data type instance for 8 bit signed integers.\n * @returns {IntType} The integer data type.\n */\nexport const int8 = () => int(8);\n/**\n * Return an Int data type instance for 16 bit signed integers.\n * @returns {IntType} The integer data type.\n */\nexport const int16 = () => int(16);\n/**\n * Return an Int data type instance for 32 bit signed integers.\n * @returns {IntType} The integer data type.\n */\nexport const int32 = () => int(32);\n/**\n * Return an Int data type instance for 64 bit signed integers.\n * @returns {IntType} The integer data type.\n */\nexport const int64 = () => int(64);\n/**\n * Return an Int data type instance for 8 bit unsigned integers.\n * @returns {IntType} The integer data type.\n */\nexport const uint8 = () => int(8, false);\n/**\n * Return an Int data type instance for 16 bit unsigned integers.\n * @returns {IntType} The integer data type.\n */\nexport const uint16 = () => int(16, false);\n/**\n * Return an Int data type instance for 32 bit unsigned integers.\n * @returns {IntType} The integer data type.\n */\nexport const uint32 = () => int(32, false);\n/**\n * Return an Int data type instance for 64 bit unsigned integers.\n * @returns {IntType} The integer data type.\n */\nexport const uint64 = () => int(64, false);\n\n/**\n * Return a Float data type instance for floating point numbers.\n * @param {Precision_} [precision=2] The floating point\n * precision. One of `Precision.HALF` (16-bit), `Precision.SINGLE` (32-bit)\n * or `Precision.DOUBLE` (64-bit, default).\n * @returns {FloatType} The floating point data type.\n */\nexport const float = (precision = 2) => ({\n typeId: Type.Float,\n precision: checkOneOf(precision, Precision),\n values: [uint16Array, float32Array, float64Array][precision]\n});\n/**\n * Return a Float data type instance for half-precision (16 bit) numbers.\n * @returns {FloatType} The floating point data type.\n */\nexport const float16 = () => float(Precision.HALF);\n/**\n * Return a Float data type instance for single-precision (32 bit) numbers.\n * @returns {FloatType} The floating point data type.\n */\nexport const float32 = () => float(Precision.SINGLE);\n/**\n * Return a Float data type instance for double-precision (64 bit) numbers.\n * @returns {FloatType} The floating point data type.\n */\nexport const float64 = () => float(Precision.DOUBLE);\n\n/**\n * Return a Binary data type instance for variably-sized opaque binary data\n * with 32-bit offsets.\n * @returns {BinaryType} The binary data type.\n */\nexport const binary = () => ({\n typeId: Type.Binary,\n offsets: int32Array\n});\n\n/**\n * Return a Utf8 data type instance for Unicode string data.\n * [UTF-8](https://en.wikipedia.org/wiki/UTF-8) code points are stored as\n * binary data.\n * @returns {Utf8Type} The utf8 data type.\n */\nexport const utf8 = () => ({\n typeId: Type.Utf8,\n offsets: int32Array\n});\n\n/**\n * Return a Bool data type instance. Bool values are stored compactly in\n * bitmaps with eight values per byte.\n * @returns {BoolType} The bool data type.\n */\nexport const bool = () => basicType(Type.Bool);\n\n/**\n * Return a Decimal data type instance. Decimal values are represented as 32,\n * 64, 128, or 256 bit integers in two's complement. Decimals are fixed point\n * numbers with a set *precision* (total number of decimal digits) and *scale*\n * (number of fractional digits). For example, the number `35.42` can be\n * represented as `3542` with *precision* ≥ 4 and *scale* = 2.\n * @param {number} precision The decimal precision: the total number of\n * decimal digits that can be represented.\n * @param {number} scale The number of fractional digits, beyond the\n * decimal point.\n * @param {32 | 64 | 128 | 256} [bitWidth] The decimal bit width.\n * One of 32, 64, 128 (default), or 256.\n * @returns {DecimalType} The decimal data type.\n */\nexport const decimal = (precision, scale, bitWidth = 128) => ({\n typeId: Type.Decimal,\n precision,\n scale,\n bitWidth: checkOneOf(bitWidth, [32, 64, 128, 256]),\n values: bitWidth === 32 ? int32Array : uint64Array\n});\n/**\n * Return an Decimal data type instance with a bit width of 32.\n * @param {number} precision The decimal precision: the total number of\n * decimal digits that can be represented.\n * @param {number} scale The number of fractional digits, beyond the\n * decimal point.\n * @returns {DecimalType} The decimal data type.\n */\nexport const decimal32 = (precision, scale) => decimal(precision, scale, 32);\n/**\n * Return an Decimal data type instance with a bit width of 64.\n * @param {number} precision The decimal precision: the total number of\n * decimal digits that can be represented.\n * @param {number} scale The number of fractional digits, beyond the\n * decimal point.\n * @returns {DecimalType} The decimal data type.\n */\nexport const decimal64 = (precision, scale) => decimal(precision, scale, 64);\n/**\n * Return an Decimal data type instance with a bit width of 128.\n * @param {number} precision The decimal precision: the total number of\n * decimal digits that can be represented.\n * @param {number} scale The number of fractional digits, beyond the\n * decimal point.\n * @returns {DecimalType} The decimal data type.\n */\nexport const decimal128 = (precision, scale) => decimal(precision, scale, 128);\n/**\n * Return an Decimal data type instance with a bit width of 256.\n * @param {number} precision The decimal precision: the total number of\n * decimal digits that can be represented.\n * @param {number} scale The number of fractional digits, beyond the\n * decimal point.\n * @returns {DecimalType} The decimal data type.\n */\nexport const decimal256 = (precision, scale) => decimal(precision, scale, 256);\n\n/**\n * Return a Date data type instance. Date values are 32-bit or 64-bit signed\n * integers representing elapsed time since the UNIX epoch (Jan 1, 1970 UTC),\n * either in units of days (32 bits) or milliseconds (64 bits, with values\n * evenly divisible by 86400000).\n * @param {DateUnit_} unit The date unit.\n * One of `DateUnit.DAY` or `DateUnit.MILLISECOND`.\n * @returns {DateType} The date data type.\n */\nexport const date = (unit) => ({\n typeId: Type.Date,\n unit: checkOneOf(unit, DateUnit),\n values: unit === DateUnit.DAY ? int32Array : int64Array\n});\n/**\n * Return a Date data type instance with units of days.\n * @returns {DateType} The date data type.\n */\nexport const dateDay = () => date(DateUnit.DAY);\n/**\n * Return a Date data type instance with units of milliseconds.\n * @returns {DateType} The date data type.\n */\nexport const dateMillisecond = () => date(DateUnit.MILLISECOND);\n\n/**\n * Return a Time data type instance, stored in one of four *unit*s: seconds,\n * milliseconds, microseconds or nanoseconds. The integer *bitWidth* is\n * inferred from the *unit* and is 32 bits for seconds and milliseconds or\n * 64 bits for microseconds and nanoseconds. The allowed values are between 0\n * (inclusive) and 86400 (=24*60*60) seconds (exclusive), adjusted for the\n * time unit (for example, up to 86400000 exclusive for the\n * `DateUnit.MILLISECOND` unit.\n *\n * This definition doesn't allow for leap seconds. Time values from\n * measurements with leap seconds will need to be corrected when ingesting\n * into Arrow (for example by replacing the value 86400 with 86399).\n * @param {TimeUnit_} unit The time unit.\n * One of `TimeUnit.SECOND`, `TimeUnit.MILLISECOND` (default),\n * `TimeUnit.MICROSECOND`, or `TimeUnit.NANOSECOND`.\n * @returns {TimeType} The time data type.\n */\nexport const time = (unit = TimeUnit.MILLISECOND) => {\n unit = checkOneOf(unit, TimeUnit);\n const bitWidth = unit === TimeUnit.SECOND || unit === TimeUnit.MILLISECOND ? 32 : 64;\n return {\n typeId: Type.Time,\n unit,\n bitWidth,\n values: bitWidth === 32 ? int32Array : int64Array\n };\n};\n/**\n * Return a Time data type instance, represented as seconds.\n * @returns {TimeType} The time data type.\n */\nexport const timeSecond = () => time(TimeUnit.SECOND);\n/**\n * Return a Time data type instance, represented as milliseconds.\n * @returns {TimeType} The time data type.\n */\nexport const timeMillisecond = () => time(TimeUnit.MILLISECOND);\n/**\n * Return a Time data type instance, represented as microseconds.\n * @returns {TimeType} The time data type.\n */\nexport const timeMicrosecond = () => time(TimeUnit.MICROSECOND);\n/**\n * Return a Time data type instance, represented as nanoseconds.\n * @returns {TimeType} The time data type.\n */\nexport const timeNanosecond = () => time(TimeUnit.NANOSECOND);\n\n/**\n * Return a Timestamp data type instance. Timestamp values are 64-bit signed\n * integers representing an elapsed time since a fixed epoch, stored in either\n * of four units: seconds, milliseconds, microseconds or nanoseconds, and are\n * optionally annotated with a timezone. Timestamp values do not include any\n * leap seconds (in other words, all days are considered 86400 seconds long).\n * @param {TimeUnit_} [unit] The time unit.\n * One of `TimeUnit.SECOND`, `TimeUnit.MILLISECOND` (default),\n * `TimeUnit.MICROSECOND`, or `TimeUnit.NANOSECOND`.\n * @param {string|null} [timezone=null] An optional string for the name of a\n * timezone. If provided, the value should either be a string as used in the\n * Olson timezone database (the \"tz database\" or \"tzdata\"), such as\n * \"America/New_York\", or an absolute timezone offset of the form \"+XX:XX\" or\n * \"-XX:XX\", such as \"+07:30\".Whether a timezone string is present indicates\n * different semantics about the data.\n * @returns {TimestampType} The time data type.\n */\nexport const timestamp = (unit = TimeUnit.MILLISECOND, timezone = null) => ({\n typeId: Type.Timestamp,\n unit: checkOneOf(unit, TimeUnit),\n timezone,\n values: int64Array\n});\n\n/**\n * Return an Interval type instance. Values represent calendar intervals stored\n * as integers for each date part. The supported *unit*s are year/moth,\n * day/time, and month/day/nanosecond intervals.\n *\n * `IntervalUnit.YEAR_MONTH` indicates the number of elapsed whole months,\n * stored as 32-bit signed integers.\n *\n * `IntervalUnit.DAY_TIME` indicates the number of elapsed days and\n * milliseconds (no leap seconds), stored as 2 contiguous 32-bit signed\n * integers (8-bytes in total).\n *\n * `IntervalUnit.MONTH_DAY_NANO` is a triple of the number of elapsed months,\n * days, and nanoseconds. The values are stored contiguously in 16-byte blocks.\n * Months and days are encoded as 32-bit signed integers and nanoseconds is\n * encoded as a 64-bit signed integer. Nanoseconds does not allow for leap\n * seconds. Each field is independent (e.g. there is no constraint that\n * nanoseconds have the same sign as days or that the quantity of nanoseconds\n * represents less than a day's worth of time).\n * @param {IntervalUnit_} unit The interval unit.\n * One of `IntervalUnit.YEAR_MONTH`, `IntervalUnit.DAY_TIME`, or\n * `IntervalUnit.MONTH_DAY_NANO` (default).\n * @returns {IntervalType} The interval data type.\n */\nexport const interval = (unit = IntervalUnit.MONTH_DAY_NANO) => ({\n typeId: Type.Interval,\n unit: checkOneOf(unit, IntervalUnit),\n values: unit === IntervalUnit.MONTH_DAY_NANO ? undefined : int32Array\n});\n\n/**\n * Return a List data type instance, representing variably-sized lists\n * (arrays) with 32-bit offsets. A list has a single child data type for\n * list entries. Lists are represented using integer offsets that indicate\n * list extents within a single child array containing all list values.\n * @param {FieldInput} child The child (list item) field or data type.\n * @returns {ListType} The list data type.\n */\nexport const list = (child) => ({\n typeId: Type.List,\n children: [ asField(child) ],\n offsets: int32Array\n});\n\n/**\n * Return a Struct data type instance. A struct consists of multiple named\n * child data types. Struct values are stored as parallel child batches, one\n * per child type, and extracted to standard JavaScript objects.\n * @param {Field[] | Record<string, DataType>} children\n * An array of property fields, or an object mapping property names to data\n * types. If an object, the instantiated fields are assumed to be nullable\n * and have no metadata.\n * @returns {StructType} The struct data type.\n */\nexport const struct = (children) => ({\n typeId: Type.Struct,\n children: Array.isArray(children) && isField(children[0])\n ? /** @type {Field[]} */ (children)\n : Object.entries(children).map(([name, type]) => field(name, type))\n});\n\n/**\n * Return a Union type instance. A union is a complex type with parallel\n * *children* data types. Union values are stored in either a sparse\n * (`UnionMode.Sparse`) or dense (`UnionMode.Dense`) layout *mode*. In a\n * sparse layout, child types are stored in parallel arrays with the same\n * lengths, resulting in many unused, empty values. In a dense layout, child\n * types have variable lengths and an offsets array is used to index the\n * appropriate value.\n *\n * By default, ids in the type vector refer to the index in the children\n * array. Optionally, *typeIds* provide an indirection between the child\n * index and the type id. For each child, `typeIds[index]` is the id used\n * in the type vector. The *typeIdForValue* argument provides a lookup\n * function for mapping input data to the proper child type id, and is\n * required if using builder methods.\n * @param {UnionMode_} mode The union mode.\n * One of `UnionMode.Sparse` or `UnionMode.Dense`.\n * @param {FieldInput[]} children The children fields or data types.\n * Types are mapped to nullable fields with no metadata.\n * @param {number[]} [typeIds] Children type ids, in the same order as the\n * children types. Type ids provide a level of indirection over children\n * types. If not provided, the children indices are used as the type ids.\n * @param {(value: any, index: number) => number} [typeIdForValue]\n * A function that takes an arbitrary value and a row index and returns a\n * correponding union type id. Required by builder methods.\n * @returns {UnionType} The union data type.\n */\nexport const union = (mode, children, typeIds, typeIdForValue) => {\n typeIds ??= children.map((v, i) => i);\n return {\n typeId: Type.Union,\n mode: checkOneOf(mode, UnionMode),\n typeIds,\n typeMap: typeIds.reduce((m, id, i) => ((m[id] = i), m), {}),\n children: children.map((v, i) => asField(v, `_${i}`)),\n typeIdForValue,\n offsets: int32Array,\n };\n};\n\n/**\n * Create a FixedSizeBinary data type instance for opaque binary data where\n * each entry has the same fixed size.\n * @param {number} stride The fixed size in bytes.\n * @returns {FixedSizeBinaryType} The fixed size binary data type.\n */\nexport const fixedSizeBinary = (stride) => ({\n typeId: Type.FixedSizeBinary,\n stride\n});\n\n/**\n * Return a FixedSizeList type instance for list (array) data where every list\n * has the same fixed size. A list has a single child data type for list\n * entries. Fixed size lists are represented as a single child array containing\n * all list values, indexed using the known stride.\n * @param {FieldInput} child The list item data type.\n * @param {number} stride The fixed list size.\n * @returns {FixedSizeListType} The fixed size list data type.\n */\nexport const fixedSizeList = (child, stride) => ({\n typeId: Type.FixedSizeList,\n stride,\n children: [ asField(child) ]\n});\n\n/**\n * Internal method to create a Map type instance.\n * @param {boolean} keysSorted Flag indicating if the map keys are sorted.\n * @param {Field} child The child fields.\n * @returns {MapType} The map data type.\n */\nexport const mapType = (keysSorted, child) => ({\n typeId: Type.Map,\n keysSorted,\n children: [child],\n offsets: int32Array\n});\n\n/**\n * Return a Map data type instance representing collections of key-value pairs.\n * A Map is a logical nested type that is represented as a list of key-value\n * structs. The key and value types are not constrained, so the application is\n * responsible for ensuring that the keys are hashable and unique, and that\n * keys are properly sorted if *keysSorted* is `true`.\n * @param {FieldInput} keyField The map key field or data type.\n * @param {FieldInput} valueField The map value field or data type.\n * @param {boolean} [keysSorted=false] Flag indicating if the map keys are\n * sorted (default `false`).\n * @returns {MapType} The map data type.\n */\nexport const map = (keyField, valueField, keysSorted = false) => mapType(\n keysSorted,\n field(\n 'entries',\n struct([ asField(keyField, 'key', false), asField(valueField, 'value') ]),\n false\n )\n);\n\n/**\n * Return a Duration data type instance. Durations represent an absolute length\n * of time unrelated to any calendar artifacts. The resolution defaults to\n * millisecond, but can be any of the other `TimeUnit` values. This type is\n * always represented as a 64-bit integer.\n * @param {TimeUnit_} unit\n * @returns {DurationType} The duration data type.\n */\nexport const duration = (unit = TimeUnit.MILLISECOND) => ({\n typeId: Type.Duration,\n unit: checkOneOf(unit, TimeUnit),\n values: int64Array\n});\n\n/**\n * Return a LargeBinary data type instance for variably-sized opaque binary\n * data with 64-bit offsets, allowing representation of extremely large data\n * values.\n * @returns {LargeBinaryType} The large binary data type.\n */\nexport const largeBinary = () => ({\n typeId: Type.LargeBinary,\n offsets: int64Array\n});\n\n/**\n * Return a LargeUtf8 data type instance for Unicode string data of variable\n * length with 64-bit offsets, allowing representation of extremely large data\n * values. [UTF-8](https://en.wikipedia.org/wiki/UTF-8) code points are stored\n * as binary data.\n * @returns {LargeUtf8Type} The large utf8 data type.\n */\nexport const largeUtf8 = () => ({\n typeId: Type.LargeUtf8,\n offsets: int64Array\n});\n\n/**\n * Return a LargeList data type instance, representing variably-sized lists\n * (arrays) with 64-bit offsets, allowing representation of extremely large\n * data values. A list has a single child data type for list entries. Lists\n * are represented using integer offsets that indicate list extents within a\n * single child array containing all list values.\n * @param {FieldInput} child The child (list item) field or data type.\n * @returns {LargeListType} The large list data type.\n */\nexport const largeList = (child) => ({\n typeId: Type.LargeList,\n children: [ asField(child) ],\n offsets: int64Array\n});\n\n/**\n * Return a RunEndEncoded data type instance, which compresses data by\n * representing consecutive repeated values as a run. This data type uses two\n * child arrays, `run_ends` and `values`. The `run_ends` child array must be\n * a 16, 32, or 64 bit integer array which encodes the indices at which the\n * run with the value in each corresponding index in the values child array\n * ends. Like list and struct types, the `values` array can be of any type.\n * @param {FieldInput} runsField The run-ends field or data type.\n * @param {FieldInput} valuesField The values field or data type.\n * @returns {RunEndEncodedType} The large list data type.\n */\nexport const runEndEncoded = (runsField, valuesField) => ({\n typeId: Type.RunEndEncoded,\n children: [\n check(\n asField(runsField, 'run_ends'),\n (field) => field.type.typeId === Type.Int,\n () => 'Run-ends must have an integer type.'\n ),\n asField(valuesField, 'values')\n ]\n});\n\n/**\n * Return a BinaryView data type instance. BinaryView data is logically the\n * same as the Binary type, but the internal representation uses a view struct\n * that contains the string length and either the string's entire data inline\n * (for small strings) or an inlined prefix, an index of another buffer, and an\n * offset pointing to a slice in that buffer (for non-small strings).\n *\n * Flechette can encode and decode BinaryView data; however, Flechette does\n * not currently support building BinaryView columns from JavaScript values.\n * @returns {BinaryViewType} The binary view data type.\n */\nexport const binaryView = () => /** @type {BinaryViewType} */\n (basicType(Type.BinaryView));\n\n/**\n * Return a Utf8View data type instance. Utf8View data is logically the same as\n * the Utf8 type, but the internal representation uses a view struct that\n * contains the string length and either the string's entire data inline (for\n * small strings) or an inlined prefix, an index of another buffer, and an\n * offset pointing to a slice in that buffer (for non-small strings).\n *\n * Flechette can encode and decode Utf8View data; however, Flechette does\n * not currently support building Utf8View columns from JavaScript values.\n * @returns {Utf8ViewType} The utf8 view data type.\n */\nexport const utf8View = () => /** @type {Utf8ViewType} */\n (basicType(Type.Utf8View));\n\n/**\n * Return a ListView data type instance, representing variably-sized lists\n * (arrays) with 32-bit offsets. ListView data represents the same logical\n * types that List can, but contains both offsets and sizes allowing for\n * writes in any order and sharing of child values among list values.\n *\n * Flechette can encode and decode ListView data; however, Flechette does not\n * currently support building ListView columns from JavaScript values.\n * @param {FieldInput} child The child (list item) field or data type.\n * @returns {ListViewType} The list view data type.\n */\nexport const listView = (child) => ({\n typeId: Type.ListView,\n children: [ asField(child, 'value') ],\n offsets: int32Array\n});\n\n/**\n * Return a LargeListView data type instance, representing variably-sized lists\n * (arrays) with 64-bit offsets, allowing representation of extremely large\n * data values. LargeListView data represents the same logical types that\n * LargeList can, but contains both offsets and sizes allowing for writes\n * in any order and sharing of child values among list values.\n *\n * Flechette can encode and decode LargeListView data; however, Flechette does\n * not currently support building LargeListView columns from JavaScript values.\n * @param {FieldInput} child The child (list item) field or data type.\n * @returns {LargeListViewType} The large list view data type.\n */\nexport const largeListView = (child) => ({\n typeId: Type.LargeListView,\n children: [ asField(child, 'value') ],\n offsets: int64Array\n});\n","/**\n * @import { TimeUnit_, TypedArray } from '../types.js';\n */\nimport { float64Array, int32Array, int64Array, isInt64ArrayType, uint32Array, uint8Array } from './arrays.js';\nimport { TimeUnit } from '../constants.js';\n\n// typed arrays over a shared buffer to aid binary conversion\nconst f64 = new float64Array(2);\nconst buf = f64.buffer;\nconst i64 = new int64Array(buf);\nconst u32 = new uint32Array(buf);\nconst i32 = new int32Array(buf);\nconst u8 = new uint8Array(buf);\n\n/**\n * Return a value unchanged.\n * @template T\n * @param {T} value The value.\n * @returns {T} The value.\n */\nexport function identity(value) {\n return value;\n}\n\n/**\n * Return a value coerced to a BigInt.\n * @param {*} value The value.\n * @returns {bigint} The BigInt value.\n */\nexport function toBigInt(value) {\n return BigInt(value);\n}\n\n/**\n * Return an offset conversion method for the given data type.\n * @param {{ offsets: TypedArray}} type The array type.\n */\nexport function toOffset(type) {\n return isInt64ArrayType(type) ? toBigInt : identity;\n}\n\n/**\n * Return the number of days from a millisecond timestamp.\n * @param {number} value The millisecond timestamp.\n * @returns {number} The number of days.\n */\nexport function toDateDay(value) {\n return (value / 864e5) | 0;\n}\n\n/**\n * Return a timestamp conversion method for the given time unit.\n * @param {TimeUnit_} unit The time unit.\n * @returns {(value: number) => bigint} The conversion method.\n */\nexport function toTimestamp(unit) {\n return unit === TimeUnit.SECOND ? value => toBigInt(value / 1e3)\n : unit === TimeUnit.MILLISECOND ? toBigInt\n : unit === TimeUnit.MICROSECOND ? value => toBigInt(value * 1e3)\n : value => toBigInt(value * 1e6);\n}\n\n/**\n * Write month/day/nanosecond interval to a byte buffer.\n * @param {Array | Float64Array} interval The interval data.\n * @returns {Uint8Array} A byte buffer with the interval data.\n * The returned buffer is reused across calls, and so should be\n * copied to a target buffer immediately.\n */\nexport function toMonthDayNanoBytes([m, d, n]) {\n i32[0] = m;\n i32[1] = d;\n i64[1] = toBigInt(n);\n return u8;\n}\n\n/**\n * Coerce a bigint value to a number. Throws an error if the bigint value\n * lies outside the range of what a number can precisely represent.\n * @param {bigint} value The value to check and possibly convert.\n * @returns {number} The converted number value.\n */\nexport function toNumber(value) {\n if (value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER) {\n throw Error(`BigInt exceeds integer number representation: ${value}`);\n }\n return Number(value);\n}\n\n/**\n * Divide one BigInt value by another, and return the result as a number.\n * The division may involve unsafe integers and a loss of precision.\n * @param {bigint} num The numerator.\n * @param {bigint} div The divisor.\n * @returns {number} The result of the division as a floating point number.\n */\nexport function divide(num, div) {\n return Number(num / div) + Number(num % div) / Number(div);\n}\n\n/**\n * Return a 32-bit decimal conversion method for the given decimal scale.\n * @param {number} scale The scale mapping fractional digits to integers.\n * @returns {(value: number|bigint) => number} A conversion method that maps\n * floating point numbers to 32-bit decimals.\n */\nexport function toDecimal32(scale) {\n return (value) => typeof value === 'bigint'\n ? Number(value)\n : Math.trunc(value * scale);\n}\n\n/**\n * Convert a floating point number or bigint to decimal bytes.\n * @param {number|bigint} value The number to encode. If a bigint, we assume\n * it already represents the decimal in integer form with the correct scale.\n * Otherwise, we assume a float that requires scaled integer conversion.\n * @param {BigUint64Array} buf The uint64 array to write to.\n * @param {number} offset The starting index offset into the array.\n * @param {number} stride The stride of an encoded decimal, in 64-bit steps.\n * @param {number} scale The scale mapping fractional digits to integers.\n */\nexport function toDecimal(value, buf, offset, stride, scale) {\n const v = typeof value === 'bigint'\n ? value\n : toBigInt(Math.trunc(value * scale));\n // assignment into uint64array performs needed truncation for us\n buf[offset] = v;\n if (stride > 1) {\n buf[offset + 1] = (v >> 64n);\n if (stride > 2) {\n buf[offset + 2] = (v >> 128n);\n buf[offset + 3] = (v >> 192n);\n }\n }\n}\n\n// helper method to extract uint64 values from bigints\nconst asUint64 = v => BigInt.asUintN(64, v);\n\n/**\n * Convert a 64-bit decimal value to a bigint.\n * @param {BigUint64Array} buf The uint64 array containing the decimal bytes.\n * @param {number} offset The starting index offset into the array.\n * @returns {bigint} The converted decimal as a bigint, such that all\n * fractional digits are scaled up to integers (for example, 1.12 -> 112).\n */\nexport function fromDecimal64(buf, offset) {\n return BigInt.asIntN(64, buf[offset]);\n}\n\n/**\n * Convert a 128-bit decimal value to a bigint.\n * @param {BigUint64Array} buf The uint64 array containing the decimal bytes.\n * @param {number} offset The starting index offset into the array.\n * @returns {bigint} The converted decimal as a bigint, such that all\n * fractional digits are scaled up to integers (for example, 1.12 -> 112).\n */\nexport function fromDecimal128(buf, offset) {\n const i = offset << 1;\n let x;\n if (BigInt.asIntN(64, buf[i + 1]) < 0) {\n x = asUint64(~buf[i]) | (asUint64(~buf[i + 1]) << 64n);\n x = -(x + 1n);\n } else {\n x = buf[i] | (buf[i + 1] << 64n);\n }\n return x;\n}\n\n/**\n * Convert a 256-bit decimal value to a bigint.\n * @param {BigUint64Array} buf The uint64 array containing the decimal bytes.\n * @param {number} offset The starting index offset into the array.\n * @returns {bigint} The converted decimal as a bigint, such that all\n * fractional digits are scaled up to integers (for example, 1.12 -> 112).\n */\nexport function fromDecimal256(buf, offset) {\n const i = offset << 2;\n let x;\n if (BigInt.asIntN(64, buf[i + 3]) < 0) {\n x = asUint64(~buf[i])\n | (asUint64(~buf[i + 1]) << 64n)\n | (asUint64(~buf[i + 2]) << 128n)\n | (asUint64(~buf[i + 3]) << 192n);\n x = -(x + 1n);\n } else {\n x = buf[i]\n | (buf[i + 1] << 64n)\n | (buf[i + 2] << 128n)\n | (buf[i + 3] << 192n);\n }\n return x;\n}\n\n/**\n * Convert a 16-bit float from integer bytes to a number.\n * Adapted from https://github.com/apache/arrow/blob/main/js/src/util/math.ts\n * @param {number} value The float as a 16-bit integer.\n * @returns {number} The converted 64-bit floating point number.\n */\nexport function fromFloat16(value) {\n const expo = (value & 0x7C00) >> 10;\n const sigf = (value & 0x03FF) / 1024;\n const sign = (-1) ** ((value & 0x8000) >> 15);\n switch (expo) {\n case 0x1F: return sign * (sigf ? Number.NaN : 1 / 0);\n case 0x00: return sign * (sigf ? 6.103515625e-5 * sigf : 0);\n }\n return sign * (2 ** (expo - 15)) * (1 + sigf);\n}\n\n/**\n * Convert a number to a 16-bit float as integer bytes..\n * Inspired by numpy's `npy_double_to_half`:\n * https://github.com/numpy/numpy/blob/5a5987291dc95376bb098be8d8e5391e89e77a2c/numpy/core/src/npymath/halffloat.c#L43\n * Adapted from https://github.com/apache/arrow/blob/main/js/src/util/math.ts\n * @param {number} value The 64-bit floating point number to convert.\n * @returns {number} The converted 16-bit integer.\n */\nexport function toFloat16(value) {\n if (value !== value) return 0x7E00; // NaN\n f64[0] = value;\n\n // Magic numbers:\n // 0x80000000 = 10000000 00000000 00000000 00000000 -- masks the 32nd bit\n // 0x7ff00000 = 01111111 11110000 00000000 00000000 -- masks the 21st-31st bits\n // 0x000fffff = 00000000 00001111 11111111 11111111 -- masks the 1st-20th bit\n const sign = (u32[1] & 0x80000000) >> 16 & 0xFFFF;\n let expo = (u32[1] & 0x7FF00000), sigf = 0x0000;\n\n if (expo >= 0x40F00000) {\n //\n // If exponent overflowed, the float16 is either NaN or Infinity.\n // Rules to propagate the sign bit: mantissa > 0 ? NaN : +/-Infinity\n //\n // Magic numbers:\n // 0x40F00000 = 01000000 11110000 00000000 00000000 -- 6-bit exponent overflow\n // 0x7C000000 = 01111100 00000000 00000000 00000000 -- masks the 27th-31st bits\n //\n // returns:\n // qNaN, aka 32256 decimal, 0x7E00 hex, or 01111110 00000000 binary\n // sNaN, aka 32000 decimal, 0x7D00 hex, or 01111101 00000000 binary\n // +inf, aka 31744 decimal, 0x7C00 hex, or 01111100 00000000 binary\n // -inf, aka 64512 decimal, 0xFC00 hex, or 11111100 00000000 binary\n //\n // If mantissa is greater than 23 bits, set to +Infinity like numpy\n if (u32[0] > 0) {\n expo = 0x7C00;\n } else {\n expo = (expo & 0x7C000000) >> 16;\n sigf = (u32[1] & 0x000FFFFF) >> 10;\n }\n } else if (expo <= 0x3F000000) {\n //\n // If exponent underflowed, the float is either signed zero or subnormal.\n //\n // Magic numbers:\n // 0x3F000000 = 00111111 00000000 00000000 00000000 -- 6-bit exponent underflow\n //\n sigf = 0x100000 + (u32[1] & 0x000FFFFF);\n sigf = 0x100000 + (sigf << ((expo >> 20) - 998)) >> 21;\n expo = 0;\n } else {\n //\n // No overflow or underflow, rebase the exponent and round the mantissa\n // Magic numbers:\n // 0x200 = 00000010 00000000 -- masks off the 10th bit\n //\n // Ensure the first mantissa bit (the 10th one) is 1 and round\n expo = (expo - 0x3F000000) >> 10;\n sigf = ((u32[1] & 0x000FFFFF) + 0x200) >> 10;\n }\n return sign | expo | sigf & 0xFFFF;\n}\n","import { isArray } from './arrays.js';\nimport { isDate } from './objects.js';\n\nconst textDecoder = new TextDecoder('utf-8');\nconst textEncoder = new TextEncoder();\n\n/**\n * Return a UTF-8 string decoded from a byte buffer.\n * @param {Uint8Array} buf The byte buffer.\n * @returns {string} The decoded string.\n */\nexport function decodeUtf8(buf) {\n return textDecoder.decode(buf);\n}\n\n/**\n * Return a byte buffer encoded from a UTF-8 string.\n * @param {string } str The string to encode.\n * @returns {Uint8Array} The encoded byte buffer.\n */\nexport function encodeUtf8(str) {\n return textEncoder.encode(str);\n}\n\n/**\n * Return a string-coercible key value that uniquely identifies a value.\n * @param {*} value The input value.\n * @returns {string} The key string.\n */\nexport function keyString(value) {\n const val = typeof value !== 'object' || !value ? (value ?? null)\n : isDate(value) ? +value\n // @ts-ignore\n : isArray(value) ? `[${value.map(keyString)}]`\n : objectKey(value);\n return `${val}`;\n}\n\nfunction objectKey(value) {\n let s = '';\n let i = -1;\n for (const k in value) {\n if (++i > 0) s += ',';\n s += `\"${k}\":${keyString(value[k])}`;\n }\n return `{${s}}`;\n}\n","import { toNumber } from './numbers.js';\nimport { decodeUtf8 } from './strings.js';\n\n/** The size in bytes of a 32-bit integer. */\nexport const SIZEOF_INT = 4;\n\n/** The size in bytes of a 16-bit integer. */\nexport const SIZEOF_SHORT = 2;\n\n/**\n * Return a boolean for a single bit in a bitmap.\n * @param {Uint8Array} bitmap The bitmap.\n * @param {number} index The bit index to read.\n * @returns {boolean} The boolean bitmap value.\n */\nexport function decodeBit(bitmap, index) {\n return (bitmap[index >> 3] & 1 << (index % 8)) !== 0;\n}\n\n/**\n * Lookup helper for flatbuffer object (table) entries.\n * @param {Uint8Array} buf The byte buffer.\n * @param {number} index The base index of the object.\n */\nexport function readObject(buf, index) {\n const pos = index + readInt32(buf, index);\n const vtable = pos - readInt32(buf, pos);\n const size = readInt16(buf, vtable);\n /**\n * Retrieve a value from a flatbuffer table layout.\n * @template T\n * @param {number} index The table entry index.\n * @param {(buf: Uint8Array, offset: number) => T} read Read function to invoke.\n * @param {T} [fallback=null] The default fallback value.\n * @returns {T}\n */\n return (index, read, fallback = null) => {\n if (index < size) {\n const off = readInt16(buf, vtable + index);\n if (off) return read(buf, pos + off);\n }\n return fallback;\n };\n}\n\n/**\n * Return a buffer offset value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readOffset(buf, offset) {\n return offset;\n}\n\n/**\n * Return a boolean value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {boolean}\n */\nexport function readBoolean(buf, offset) {\n return !!readInt8(buf, offset);\n}\n\n/**\n * Return a signed 8-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readInt8(buf, offset) {\n return readUint8(buf, offset) << 24 >> 24;\n}\n\n/**\n * Return an unsigned 8-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readUint8(buf, offset) {\n return buf[offset];\n}\n\n/**\n * Return a signed 16-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readInt16(buf, offset) {\n return readUint16(buf, offset) << 16 >> 16;\n}\n\n/**\n * Return an unsigned 16-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readUint16(buf, offset) {\n return buf[offset] | buf[offset + 1] << 8;\n}\n\n/**\n * Return a signed 32-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readInt32(buf, offset) {\n return buf[offset]\n | buf[offset + 1] << 8\n | buf[offset + 2] << 16\n | buf[offset + 3] << 24;\n}\n\n/**\n * Return an unsigned 32-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readUint32(buf, offset) {\n return readInt32(buf, offset) >>> 0;\n}\n\n/**\n * Return a signed 64-bit integer value coerced to a JS number.\n * Throws an error if the value exceeds what a JS number can represent.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readInt64(buf, offset) {\n return toNumber(BigInt.asIntN(\n 64,\n BigInt(readUint32(buf, offset)) +\n (BigInt(readUint32(buf, offset + SIZEOF_INT)) << 32n)\n ));\n}\n\n/**\n * Create a JavaScript string from UTF-8 data stored inside the FlatBuffer.\n * This allocates a new string and converts to wide chars upon each access.\n * @param {Uint8Array} buf The byte buffer.\n * @param {number} index The index of the string entry.\n * @returns {string} The decoded string.\n */\nexport function readString(buf, index) {\n let offset = index + readInt32(buf, index); // get the string offset\n const length = readInt32(buf, offset); // get the string length\n offset += SIZEOF_INT; // skip length value\n return decodeUtf8(buf.subarray(offset, offset + length));\n}\n\n/**\n * Extract a flatbuffer vector to an array.\n * @template T\n * @param {Uint8Array} buf The byte buffer.\n * @param {number} offset The offset location of the vector.\n * @param {number} stride The stride between vector entries.\n * @param {(buf: Uint8Array, pos: number) => T} extract Vector entry extraction function.\n * @returns {T[]} The extracted vector entries.\n */\nexport function readVector(buf, offset, stride, extract) {\n if (!offset) return [];\n\n // get base position by adding offset delta\n const base = offset + readInt32(buf, offset);\n\n // read vector size, extract entries\n return Array.from(\n { length: readInt32(buf, base) },\n (_, i) => extract(buf, base + SIZEOF_INT + i * stride)\n );\n}\n","/**\n * @import { Batch } from '../batch.js';\n */\n\n/**\n * Symbol for the row index value of a struct object proxy.\n */\nexport const RowIndex = Symbol('rowIndex');\n\n/**\n * Returns a row proxy object factory. The resulting method takes a\n * batch-level row index as input and returns an object that proxies\n * access to underlying batches.\n * @param {string[]} names The column (property) names\n * @param {Batch[]} batches The value batches.\n * @returns {(index: number) => Record<string, any>}\n */\nexport function proxyFactory(names, batches) {\n class RowObject {\n /**\n * Create a new proxy row object representing a struct or table row.\n * @param {number} index The record batch row index.\n */\n constructor(index) {\n this[RowIndex] = index;\n }\n\n /**\n * Return a JSON-compatible object representation.\n */\n toJSON() {\n return structObject(names, batches, this[RowIndex]);\n }\n };\n\n // prototype for row proxy objects\n const proto = RowObject.prototype;\n\n for (let i = 0; i < names.length; ++i) {\n // skip duplicated column names\n if (Object.hasOwn(proto, names[i])) continue;\n\n // add a getter method for the current batch\n const batch = batches[i];\n Object.defineProperty(proto, names[i], {\n get() { return batch.at(this[RowIndex]); },\n enumerable: true\n });\n }\n\n return index => new RowObject(index);\n}\n\n/**\n * Returns a row object factory. The resulting method takes a\n * batch-level row index as input and returns an object whose property\n * values have been extracted from the batches.\n * @param {string[]} names The column (property) names\n * @param {Batch[]} batches The value batches.\n * @returns {(index: number) => Record<string, any>}\n */\nexport function objectFactory(names, batches) {\n return index => structObject(names, batches, index);\n}\n\n/**\n * Return a vanilla object representing a struct (row object) type.\n * @param {string[]} names The column (property) names\n * @param {Batch[]} batches The value batches.\n * @param {number} index The record batch row index.\n * @returns {Record<string, any>}\n */\nexport function structObject(names, batches, index) {\n const obj = {};\n for (let i = 0; i < names.length; ++i) {\n obj[names[i]] = batches[i].at(index);\n }\n return obj;\n}\n","/**\n * @import { Column } from './column.js'\n * @import { DataType, DecimalType, IntegerArray, OffsetArray, TypedArray, TypedArrayConstructor, ValueArray } from './types.js'\n */\nimport { bisect, float64Array } from './util/arrays.js';\nimport { divide, fromDecimal128, fromDecimal256, fromDecimal64, toNumber } from './util/numbers.js';\nimport { decodeBit, readInt32, readInt64 } from './util/read.js';\nimport { decodeUtf8 } from './util/strings.js';\nimport { objectFactory, proxyFactory } from './util/struct.js';\n\n/**\n * Check if the input is a batch that supports direct access to\n * binary data in the form of typed arrays.\n * @param {Batch<any>?} batch The data batch to check.\n * @returns {boolean} True if a direct batch, false otherwise.\n */\nexport function isDirectBatch(batch) {\n return batch instanceof DirectBatch;\n}\n\n/**\n * Column values from a single record batch.\n * A column may contain multiple batches.\n * @template T\n */\nexport class Batch {\n /**\n * The array type to use when extracting data from the batch.\n * A null value indicates that the array type should match\n * the type of the batch's values array.\n * @type {ArrayConstructor | TypedArrayConstructor | null}\n */\n static ArrayType = null;\n\n /**\n * Create a new column batch.\n * @param {object} options\n * @param {number} options.length The length of the batch\n * @param {number} options.nullCount The null value count\n * @param {DataType} options.type The data type.\n * @param {Uint8Array} [options.validity] Validity bitmap buffer\n * @param {TypedArray} [options.values] Values buffer\n * @param {OffsetArray} [options.offsets] Offsets buffer\n * @param {OffsetArray} [options.sizes] Sizes buffer\n * @param {Batch[]} [options.children] Children batches\n */\n constructor({\n length,\n nullCount,\n type,\n validity,\n values,\n offsets,\n sizes,\n children\n }) {\n this.length = length;\n this.nullCount = nullCount;\n this.type = type;\n this.validity = validity;\n this.values = values;\n this.offsets = offsets;\n this.sizes = sizes;\n this.children = children;\n\n // optimize access if this batch has no null values\n // some types (like union) may have null values in\n // child batches, but no top-level validity buffer\n if (!nullCount || !this.validity) {\n /** @type {(index: number) => T | null} */\n this.at = index => this.value(index);\n }\n }\n\n /**\n * Provide an informative object string tag.\n */\n get [Symbol.toStringTag]() {\n return 'Batch';\n }\n\n /**\n * Return the value at the given index.\n * @param {number} index The value index.\n * @returns {T | null} The value.\n */\n at(index) {\n return this.isValid(index) ? this.value(index) : null;\n }\n\n /**\n * Check if a value at the given index is valid (non-null).\n * @param {number} index The value index.\n * @returns {boolean} True if valid, false otherwise.\n */\n isValid(index) {\n return decodeBit(this.validity, index);\n }\n\n /**\n * Return the value at the given index. This method does not check the\n * validity bitmap and is intended primarily for internal use. In most\n * cases, callers should use the `at()` method instead.\n * @param {number} index The value index\n * @returns {T} The value, ignoring the validity bitmap.\n */\n value(index) {\n return /** @type {T} */ (this.values[index]);\n }\n\n /**\n * Extract an array of values within the given index range. Unlike\n * Array.slice, all arguments are required and may not be negative indices.\n * @param {number} start The starting index, inclusive\n * @param {number} end The ending index, exclusive\n * @returns {ValueArray<T?>} The slice of values\n */\n slice(start, end) {\n const n = end - start;\n const values = Array(n);\n for (let i = 0; i < n; ++i) {\n values[i] = this.at(start + i);\n }\n return values;\n }\n\n /**\n * Return an iterator over the values in this batch.\n * @returns {Iterator<T?>}\n */\n *[Symbol.iterator]() {\n for (let i = 0; i < this.length; ++i) {\n yield this.at(i);\n }\n }\n}\n\n/**\n * A batch whose value buffer can be used directly, without transformation.\n * @template T\n * @extends {Batch<T>}\n */\nexport class DirectBatch extends Batch {\n /**\n * Create a new column batch with direct value array access.\n * @param {object} options\n * @param {number} options.length The length of the batch\n * @param {number} options.nullCount The null value count\n * @param {DataType} options.type The data type.\n * @param {Uint8Array} [options.validity] Validity bitmap buffer\n * @param {TypedArray} options.values Values buffer\n */\n constructor(options) {\n super(options);\n // underlying buffers may be padded, exceeding the logical batch length\n // we trim the values array so we can safely access it directly\n const { length, values } = this;\n this.values = values.subarray(0, length);\n }\n\n /**\n * Extract an array of values within the given index range. Unlike\n * Array.slice, all arguments are required and may not be negative indices.\n * When feasible, a zero-copy subarray of a typed array is returned.\n * @param {number} start The starting index, inclusive\n * @param {number} end The ending index, exclusive\n * @returns {ValueArray<T?>} The slice of values\n */\n slice(start, end) {\n // @ts-ignore\n return this.nullCount\n ? super.slice(start, end)\n : this.values.subarray(start, end);\n }\n\n /**\n * Return an iterator over the values in this batch.\n * @returns {Iterator<T?>}\n */\n [Symbol.iterator]() {\n return this.nullCount\n ? super[Symbol.iterator]()\n : /** @type {Iterator<T?>} */ (this.values[Symbol.iterator]());\n }\n}\n\n/**\n * A batch whose values are transformed to 64-bit numbers.\n * @extends {Batch<number>}\n */\nexport class NumberBatch extends Batch {\n static ArrayType = float64Array;\n}\n\n/**\n * A batch whose values should be returned in a standard array.\n * @template T\n * @extends {Batch<T>}\n */\nexport class ArrayBatch extends Batch {\n static ArrayType = Array;\n}\n\n/**\n * A batch of null values only.\n * @extends {ArrayBatch<null>}\n */\nexport class NullBatch extends ArrayBatch {\n /**\n * @param {number} index The value index\n * @returns {null}\n */\n value(index) { // eslint-disable-line no-unused-vars\n return null;\n }\n}\n\n/**\n * A batch that coerces BigInt values to 64-bit numbers.\n * @extends {NumberBatch}\n */\nexport class Int64Batch extends NumberBatch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n return toNumber(/** @type {bigint} */ (this.values[index]));\n }\n}\n\n/**\n * A batch of 16-bit floating point numbers, accessed as unsigned\n * 16-bit ints and transformed to 64-bit numbers.\n */\nexport class Float16Batch extends NumberBatch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n const v = /** @type {number} */ (this.values[index]);\n const expo = (v & 0x7C00) >> 10;\n const sigf = (v & 0x03FF) / 1024;\n const sign = (-1) ** ((v & 0x8000) >> 15);\n switch (expo) {\n case 0x1F: return sign * (sigf ? Number.NaN : 1 / 0);\n case 0x00: return sign * (sigf ? 6.103515625e-5 * sigf : 0);\n }\n return sign * (2 ** (expo - 15)) * (1 + sigf);\n }\n}\n\n/**\n * A batch of boolean values stored as a bitmap.\n * @extends {ArrayBatch<boolean>}\n */\nexport class BoolBatch extends ArrayBatch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n return decodeBit(/** @type {Uint8Array} */ (this.values), index);\n }\n}\n\n/**\n * A batch of 32-bit decimal numbers, returned as converted 64-bit floating\n * point numbers. Number coercion may be lossy if the decimal precision can\n * not be represented in a 64-bit floating point format.\n * @extends {NumberBatch}\n */\nexport class Decimal32NumberBatch extends NumberBatch {\n constructor(options) {\n super(options);\n const { scale } = /** @type {DecimalType} */ (this.type);\n this.scale = 10 ** scale;\n }\n /**\n * @param {number} index The value index\n */\n value(index) {\n return /** @type {number} */(this.values[index]) / this.scale;\n }\n}\n\n/**\n * An abstract class for a batch of 64-, 128- or 256-bit decimal numbers,\n * accessed in strided BigUint64Arrays.\n * @template T\n * @extends {Batch<T>}\n */\nexport class DecimalBatch extends Batch {\n constructor(options) {\n super(options);\n const { bitWidth, scale } = /** @type {DecimalType} */ (this.type);\n this.decimal = bitWidth === 64 ? fromDecimal64\n : bitWidth === 128 ? fromDecimal128\n : fromDecimal256;\n this.scale = 10n ** BigInt(scale);\n }\n}\n\n/**\n * A batch of 64-, 128- or 256-bit decimal numbers, returned as converted\n * 64-bit floating point numbers. Number coercion may be lossy if the decimal\n * precision can not be represented in a 64-bit floating point format.\n * @extends {DecimalBatch<number>}\n */\nexport class DecimalNumberBatch extends DecimalBatch {\n static ArrayType = float64Array;\n /**\n * @param {number} index The value index\n */\n value(index) {\n return divide(\n this.decimal(/** @type {BigUint64Array} */ (this.values), index),\n this.scale\n );\n }\n}\n\n/**\n * A batch of 64-, 128- or 256-bit decimal numbers, returned as scaled\n * bigint values, such that all fractional digits have been shifted\n * to integer places by the decimal type scale factor.\n * @extends {DecimalBatch<bigint>}\n */\nexport class DecimalBigIntBatch extends DecimalBatch {\n static ArrayType = Array;\n /**\n * @param {number} index The value index\n */\n value(index) {\n return this.decimal(/** @type {BigUint64Array} */ (this.values), index);\n }\n}\n\n/**\n * A batch of date or timestamp values that are coerced to UNIX epoch timestamps\n * and returned as JS Date objects. This batch wraps a source batch that provides\n * timestamp values.\n * @extends {ArrayBatch<Date>}\n */\nexport class DateBatch extends ArrayBatch {\n /**\n * Create a new date batch.\n * @param {Batch<number>} batch A batch of timestamp values.\n */\n constructor(batch) {\n super(batch);\n this.source = batch;\n }\n\n /**\n * @param {number} index The value index\n */\n value(index) {\n return new Date(this.source.value(index));\n }\n}\n\n/**\n * A batch of dates as day counts, coerced to timestamp numbers.\n */\nexport class DateDayBatch extends NumberBatch {\n /**\n * @param {number} index The value index\n * @returns {number}\n */\n value(index) {\n // epoch days to milliseconds\n return 86400000 * /** @type {number} */ (this.values[index]);\n }\n}\n\n/**\n * A batch of dates as millisecond timestamps, coerced to numbers.\n */\nexport const DateDayMillisecondBatch = Int64Batch;\n\n/**\n * A batch of timestaps in seconds, coerced to millisecond numbers.\n */\nexport class TimestampSecondBatch extends Int64Batch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n return super.value(index) * 1e3; // seconds to milliseconds\n }\n}\n\n/**\n * A batch of timestaps in milliseconds, coerced to numbers.\n */\nexport const TimestampMillisecondBatch = Int64Batch;\n\n/**\n * A batch of timestaps in microseconds, coerced to millisecond numbers.\n */\nexport class TimestampMicrosecondBatch extends Int64Batch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n // microseconds to milliseconds\n return divide(/** @type {bigint} */ (this.values[index]), 1000n);\n }\n}\n\n/**\n * A batch of timestaps in nanoseconds, coerced to millisecond numbers.\n */\nexport class TimestampNanosecondBatch extends Int64Batch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n // nanoseconds to milliseconds\n return divide(/** @type {bigint} */ (this.values[index]), 1000000n);\n }\n}\n\n/**\n * A batch of day/time intervals, returned as two-element 32-bit int arrays.\n * @extends {ArrayBatch<Int32Array>}\n */\nexport class IntervalDayTimeBatch extends ArrayBatch {\n /**\n * @param {number} index The value index\n * @returns {Int32Array}\n */\n value(index) {\n const values = /** @type {Int32Array} */ (this.values);\n return values.subarray(index << 1, (index + 1) << 1);\n }\n}\n\n/**\n * A batch of month/day/nanosecond intervals, returned as three-element arrays.\n * @extends {ArrayBatch<Float64Array>}\n */\nexport class IntervalMonthDayNanoBatch extends ArrayBatch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n const values = /** @type {Uint8Array} */ (this.values);\n const base = index << 4;\n return Float64Array.of(\n readInt32(values, base),\n readInt32(values, base + 4),\n readInt64(values, base + 8)\n );\n }\n}\n\nconst offset32 = ({values, offsets}, index) => values.subarray(offsets[index], offsets[index + 1]);\nconst offset64 = ({values, offsets}, index) => values.subarray(toNumber(offsets[index]), toNumber(offsets[index + 1]));\n\n/**\n * A batch of binary blobs with variable offsets, returned as byte buffers of\n * unsigned 8-bit integers. The offsets are 32-bit ints.\n * @extends {ArrayBatch<Uint8Array>}\n */\nexport class BinaryBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {Uint8Array}\n */\n value(index) {\n return offset32(this, index);\n }\n}\n\n/**\n * A batch of binary blobs with variable offsets, returned as byte buffers of\n * unsigned 8-bit integers. The offsets are 64-bit ints. Value extraction will\n * fail if an offset exceeds `Number.MAX_SAFE_INTEGER`.\n * @extends {ArrayBatch<Uint8Array>}\n */\nexport class LargeBinaryBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {Uint8Array}\n */\n value(index) {\n return offset64(this, index);\n }\n}\n\n/**\n * A batch of UTF-8 strings with variable offsets. The offsets are 32-bit ints.\n * @extends {ArrayBatch<string>}\n */\nexport class Utf8Batch extends ArrayBatch {\n /**\n * @param {number} index\n */\n value(index) {\n return decodeUtf8(offset32(this, index));\n }\n}\n\n/**\n * A batch of UTF-8 strings with variable offsets. The offsets are 64-bit ints.\n * Value extraction will fail if an offset exceeds `Number.MAX_SAFE_INTEGER`.\n * @extends {ArrayBatch<string>}\n */\nexport class LargeUtf8Batch extends ArrayBatch {\n /**\n * @param {number} index\n */\n value(index) {\n return decodeUtf8(offset64(this, index));\n }\n}\n\n/**\n * A batch of list (array) values of variable length. The list offsets are\n * 32-bit ints.\n * @template V\n * @extends {ArrayBatch<ValueArray<V>>}\n */\nexport class ListBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {ValueArray<V>}\n */\n value(index) {\n const offsets = /** @type {Int32Array} */ (this.offsets);\n return this.children[0].slice(offsets[index], offsets[index + 1]);\n }\n}\n\n/**\n * A batch of list (array) values of variable length. The list offsets are\n * 64-bit ints. Value extraction will fail if an offset exceeds\n * `Number.MAX_SAFE_INTEGER`.\n * @template V\n * @extends {ArrayBatch<ValueArray<V>>}\n */\nexport class LargeListBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {ValueArray<V>}\n */\n value(index) {\n const offsets = /** @type {BigInt64Array} */ (this.offsets);\n return this.children[0].slice(toNumber(offsets[index]), toNumber(offsets[index + 1]));\n }\n}\n\n/**\n * A batch of list (array) values of variable length. The list offsets and\n * sizes are 32-bit ints.\n * @template V\n * @extends {ArrayBatch<ValueArray<V>>}\n */\nexport class ListViewBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {ValueArray<V>}\n */\n value(index) {\n const a = /** @type {number} */ (this.offsets[index]);\n const b = a + /** @type {number} */ (this.sizes[index]);\n return this.children[0].slice(a, b);\n }\n}\n\n/**\n * A batch of list (array) values of variable length. The list offsets and\n * sizes are 64-bit ints. Value extraction will fail if an offset or size\n * exceeds `Number.MAX_SAFE_INTEGER`.\n * @template V\n * @extends {ArrayBatch<ValueArray<V>>}\n */\nexport class LargeListViewBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {ValueArray<V>}\n */\n value(index) {\n const a = /** @type {bigint} */ (this.offsets[index]);\n const b = a + /** @type {bigint} */ (this.sizes[index]);\n return this.children[0].slice(toNumber(a), toNumber(b));\n }\n}\n\n/**\n * A batch with a fixed stride.\n * @template T\n * @extends {ArrayBatch<T>}\n */\nclass FixedBatch extends ArrayBatch {\n constructor(options) {\n super(options);\n /** @type {number} */\n // @ts-ignore\n this.stride = this.type.stride;\n }\n}\n\n/**\n * A batch of binary blobs of fixed size, returned as byte buffers of unsigned\n * 8-bit integers.\n * @extends {FixedBatch<Uint8Array>}\n */\nexport class FixedBinaryBatch extends FixedBatch {\n /**\n * @param {number} index\n * @returns {Uint8Array}\n */\n value(index) {\n const { stride, values } = this;\n return /** @type {Uint8Array} */ (values)\n .subarray(index * stride, (index + 1) * stride);\n }\n}\n\n/**\n * A batch of list (array) values of fixed length.\n * @template V\n * @extends {FixedBatch<ValueArray<V>>}\n */\nexport class FixedListBatch extends FixedBatch {\n /**\n * @param {number} index\n * @returns {ValueArray<V>}\n */\n value(index) {\n const { children, stride } = this;\n return children[0].slice(index * stride, (index + 1) * stride);\n }\n}\n\n/**\n * Extract Map key-value pairs from parallel child batches.\n */\nfunction pairs({ children, offsets }, index) {\n const [ keys, vals ] = children[0].children;\n const start = offsets[index];\n const end = offsets[index + 1];\n const entries = [];\n for (let i = start; i < end; ++i) {\n entries.push([keys.at(i), vals.at(i)]);\n }\n return entries;\n}\n\n/**\n * A batch of map (key, value) values. The map is represented as a list of\n * key-value structs.\n * @template K, V\n * @extends {ArrayBatch<[K, V][]>}\n */\nexport class MapEntryBatch extends ArrayBatch {\n /**\n * Return the value at the given index.\n * @param {number} index The value index.\n * @returns {[K, V][]} The map entries as an array of [key, value] arrays.\n */\n value(index) {\n return /** @type {[K, V][]} */ (pairs(this, index));\n }\n}\n\n/**\n * A batch of map (key, value) values. The map is represented as a list of\n * key-value structs.\n * @template K, V\n * @extends {ArrayBatch<Map<K, V>>}\n */\nexport class MapBatch extends ArrayBatch {\n /**\n * Return the value at the given index.\n * @param {number} index The value index.\n * @returns {Map<K, V>} The map value.\n */\n value(index) {\n return new Map(/** @type {[K, V][]} */ (pairs(this, index)));\n }\n}\n\n/**\n * A batch of union-type values with a sparse layout, enabling direct\n * lookup from the child value batches.\n * @template T\n * @extends {ArrayBatch<T>}\n */\nexport class SparseUnionBatch extends ArrayBatch {\n /**\n * Create a new column batch.\n * @param {object} options\n * @param {number} options.length The length of the batch\n * @param {number} options.nullCount The null value count\n * @param {DataType} options.type The data type.\n * @param {Uint8Array} [options.validity] Validity bitmap buffer\n * @param {Int32Array} [options.offsets] Offsets buffer\n * @param {Batch[]} options.children Children batches\n * @param {Int8Array} options.typeIds Union type ids buffer\n * @param {Record<string, number>} options.map A typeId to children index map\n */\n constructor({ typeIds, ...options }) {\n super(options);\n /** @type {Int8Array} */\n this.typeIds = typeIds;\n /** @type {Record<string, number>} */\n // @ts-ignore\n this.typeMap = this.type.typeMap;\n }\n\n /**\n * @param {number} index The value index.\n */\n value(index, offset = index) {\n const { typeIds, children, typeMap } = this;\n return children[typeMap[typeIds[index]]].at(offset);\n }\n}\n\n/**\n * A batch of union-type values with a dense layout, reqiring offset\n * lookups from the child value batches.\n * @template T\n * @extends {SparseUnionBatch<T>}\n */\nexport class DenseUnionBatch extends SparseUnionBatch {\n /**\n * @param {number} index The value index.\n */\n value(index) {\n return super.value(index, /** @type {number} */ (this.offsets[index]));\n }\n}\n\n/**\n * A batch of struct values, containing a set of named properties.\n * Struct property values are extracted and returned as JS objects.\n * @extends {ArrayBatch<Record<string, any>>}\n */\nexport class StructBatch extends ArrayBatch {\n constructor(options, factory = objectFactory) {\n super(options);\n /** @type {string[]} */\n // @ts-ignore\n this.names = this.type.children.map(child => child.name);\n this.factory = factory(this.names, this.children);\n }\n\n /**\n * @param {number} index The value index.\n * @returns {Record<string, any>}\n */\n value(index) {\n return this.factory(index);\n }\n}\n\n/**\n * A batch of struct values, containing a set of named properties.\n * Structs are returned as proxy objects that extract data directly\n * from underlying Arrow batches.\n * @extends {StructBatch}\n */\nexport class StructProxyBatch extends StructBatch {\n constructor(options) {\n super(options, proxyFactory);\n }\n}\n\n/**\n * A batch of run-end-encoded values.\n * @template T\n * @extends {ArrayBatch<T>}\n */\nexport class RunEndEncodedBatch extends ArrayBatch {\n /**\n * @param {number} index The value index.\n */\n value(index) {\n const [ { values: runs }, vals ] = this.children;\n return vals.at(\n bisect(/** @type {IntegerArray} */(runs), index)\n );\n }\n}\n\n/**\n * A batch of dictionary-encoded values.\n * @template T\n * @extends {ArrayBatch<T>}\n */\nexport class DictionaryBatch extends ArrayBatch {\n /**\n * Register the backing dictionary. Dictionaries are added\n * after batch creation as the complete dictionary may not\n * be finished across multiple record batches.\n * @param {Column<T>} dictionary\n * The dictionary of column values.\n */\n setDictionary(dictionary) {\n this.dictionary = dictionary;\n this.cache = dictionary.cache();\n return this;\n }\n\n /**\n * @param {number} index The value index.\n */\n value(index) {\n return this.cache[this.key(index)];\n }\n\n /**\n * @param {number} index The value index.\n * @returns {number} The dictionary key\n */\n key(index) {\n return /** @type {number} */ (this.values[index]);\n }\n}\n\n/**\n * @template T\n * @extends {ArrayBatch<T>}\n */\nclass ViewBatch extends ArrayBatch {\n /**\n * Create a new view batch.\n * @param {object} options Batch options.\n * @param {number} options.length The length of the batch\n * @param {number} options.nullCount The null value count\n * @param {DataType} options.type The data type.\n * @param {Uint8Array} [options.validity] Validity bitmap buffer\n * @param {Uint8Array} options.values Values buffer\n * @param {Uint8Array[]} options.data View data buffers\n */\n constructor({ data, ...options }) {\n super(options);\n this.data = data;\n }\n\n /**\n * Get the binary data at the provided index.\n * @param {number} index The value index.\n * @returns {Uint8Array}\n */\n view(index) {\n const { values, data } = this;\n const offset = index << 4; // each entry is 16 bytes\n let start = offset + 4;\n let buf = /** @type {Uint8Array} */ (values);\n const length = readInt32(buf, offset);\n if (length > 12) {\n // longer strings are in a data buffer\n start = readInt32(buf, offset + 12);\n buf = data[readInt32(buf, offset + 8)];\n }\n return buf.subarray(start, start + length);\n }\n}\n\n/**\n * A batch of binary blobs from variable data buffers, returned as byte\n * buffers of unsigned 8-bit integers.\n * @extends {ViewBatch<Uint8Array>}\n */\nexport class BinaryViewBatch extends ViewBatch {\n /**\n * @param {number} index The value index.\n */\n value(index) {\n return this.view(index);\n }\n}\n\n/**\n * A batch of UTF-8 strings from variable data buffers.\n * @extends {ViewBatch<string>}\n */\nexport class Utf8ViewBatch extends ViewBatch {\n /**\n * @param {number} index The value index.\n */\n value(index) {\n return decodeUtf8(this.view(index));\n }\n}\n","/**\n * @import { Batch } from './batch.js'\n * @import { DataType, ValueArray } from './types.js'\n */\nimport { bisect } from './util/arrays.js';\nimport { isDirectBatch } from './batch.js';\n\n/**\n * Build up a column from batches.\n */\nexport function columnBuilder(type) {\n let data = [];\n return {\n add(batch) { data.push(batch); return this; },\n clear: () => data = [],\n done: () => new Column(data, type)\n };\n}\n\n/**\n * A data column. A column provides a view over one or more value batches,\n * each drawn from an Arrow record batch. This class supports random access\n * to column values by integer index; however, extracting arrays using\n * `toArray()` or iterating over values (`for (const value of column) {...}`)\n * provide more efficient ways for bulk access or scanning.\n * @template T\n */\nexport class Column {\n /**\n * Create a new column instance.\n * @param {Batch<T>[]} data The value batches.\n * @param {DataType} [type] The column data type.\n * If not specified, the type is extracted from the batches.\n */\n constructor(data, type = data[0]?.type) {\n /**\n * The column data type.\n * @type {DataType}\n * @readonly\n */\n this.type = type;\n /**\n * The column length.\n * @type {number}\n * @readonly\n */\n this.length = data.reduce((m, c) => m + c.length, 0);\n /**\n * The count of null values in the column.\n * @type {number}\n * @readonly\n */\n this.nullCount = data.reduce((m, c) => m + c.nullCount, 0);\n /**\n * An array of column data batches.\n * @type {readonly Batch<T>[]}\n * @readonly\n */\n this.data = data;\n\n const n = data.length;\n const offsets = new Int32Array(n + 1);\n if (n === 1) {\n const [ batch ] = data;\n offsets[1] = batch.length;\n // optimize access to single batch\n this.at = index => batch.at(index);\n } else {\n for (let i = 0, s = 0; i < n; ++i) {\n offsets[i + 1] = (s += data[i].length);\n }\n }\n\n /**\n * Index offsets for data batches.\n * Used to map a column row index to a batch-specific index.\n * @type {Int32Array}\n * @readonly\n */\n this.offsets = offsets;\n }\n\n /**\n * Provide an informative object string tag.\n */\n get [Symbol.toStringTag]() {\n return 'Column';\n }\n\n /**\n * Return an iterator over the values in this column.\n * @returns {Iterator<T?>}\n */\n [Symbol.iterator]() {\n const data = this.data;\n return data.length === 1\n ? data[0][Symbol.iterator]()\n : batchedIterator(data);\n }\n\n /**\n * Return the column value at the given index. If a column has multiple\n * batches, this method performs binary search over the batch lengths to\n * determine the batch from which to retrieve the value. The search makes\n * lookup less efficient than a standard array access. If making a full\n * scan of a column, consider extracting arrays via `toArray()` or using an\n * iterator (`for (const value of column) {...}`).\n * @param {number} index The row index.\n * @returns {T | null} The value.\n */\n at(index) {\n // NOTE: if there is only one batch, this method is replaced with an\n // optimized version in the Column constructor.\n const { data, offsets } = this;\n const i = bisect(offsets, index) - 1;\n return data[i]?.at(index - offsets[i]); // undefined if out of range\n }\n\n /**\n * Return the column value at the given index. This method is the same as\n * `at()` and is provided for better compatibility with Apache Arrow JS.\n * @param {number} index The row index.\n * @returns {T | null} The value.\n */\n get(index) {\n return this.at(index);\n }\n\n /**\n * Extract column values into a single array instance. When possible,\n * a zero-copy subarray of the input Arrow data is returned.\n * @returns {ValueArray<T?>}\n */\n toArray() {\n const { length, nullCount, data } = this;\n const copy = !nullCount && isDirectBatch(data[0]);\n const n = data.length;\n\n if (copy && n === 1) {\n // use batch array directly\n // @ts-ignore\n return data[0].values;\n }\n\n // determine output array type\n const ArrayType = !n || nullCount > 0 ? Array\n // @ts-ignore\n : (data[0].constructor.ArrayType ?? data[0].values.constructor);\n\n const array = new ArrayType(length);\n return copy ? copyArray(array, data) : extractArray(array, data);\n }\n\n /**\n * Return an array of cached column values.\n * Used internally to accelerate dictionary types.\n */\n cache() {\n return this._cache ?? (this._cache = this.toArray());\n }\n}\n\nfunction *batchedIterator(data) {\n for (let i = 0; i < data.length; ++i) {\n const iter = data[i][Symbol.iterator]();\n for (let next = iter.next(); !next.done; next = iter.next()) {\n yield next.value;\n }\n }\n}\n\nfunction copyArray(array, data) {\n for (let i = 0, offset = 0; i < data.length; ++i) {\n const { values } = data[i];\n array.set(values, offset);\n offset += values.length;\n }\n return array;\n}\n\nfunction extractArray(array, data) {\n let index = -1;\n for (let i = 0; i < data.length; ++i) {\n const batch = data[i];\n for (let j = 0; j < batch.length; ++j) {\n array[++index] = batch.at(j);\n }\n }\n return array;\n}\n","/**\n * @import { Column } from './column.js'\n * @import { Schema, StructFactory, TypeMap, ValueArray } from './types.js'\n */\nimport { bisect } from './util/arrays.js';\nimport { objectFactory, proxyFactory } from './util/struct.js';\n\n/**\n * A table consists of a collection of named columns (or 'children').\n * To work with table data directly in JavaScript, use `toColumns()`\n * to extract an object that maps column names to extracted value arrays,\n * or `toArray()` to extract an array of row objects. For random access\n * by row index, use `getChild()` to access data for a specific column.\n * @template {TypeMap} [T=TypeMap]\n */\nexport class Table {\n /**\n * Create a new table with the given schema and columns (children).\n * @param {Schema} schema The table schema.\n * @param {Column[]} children The table columns.\n * @param {boolean} [useProxy=false] Flag indicating if row proxy\n * objects should be used to represent table rows (default `false`).\n */\n constructor(schema, children, useProxy = false) {\n const names = schema.fields.map(f => f.name);\n\n /**\n * @type {Schema}\n * @readonly\n */\n this.schema = schema;\n /**\n * @type {(keyof T)[]}\n * @readonly\n */\n this.names = names;\n /**\n * @type {Column[]}\n * @readonly\n */\n this.children = children;\n /**\n * @type {StructFactory}\n * @readonly\n */\n this.factory = useProxy ? proxyFactory : objectFactory;\n\n // lazily created row object generators\n const gen = [];\n\n /**\n * Returns a row object generator for the given batch index.\n * @private\n * @readonly\n * @param {number} b The batch index.\n * @returns {(index: number) => { [P in keyof T]: T[P] }}\n */\n this.getFactory = b => gen[b]\n ?? (gen[b] = this.factory(names, children.map(c => c.data[b])));\n }\n\n /**\n * Provide an informative object string tag.\n */\n get [Symbol.toStringTag]() {\n return 'Table';\n }\n\n /**\n * The number of columns in this table.\n * @return {number} The number of columns.\n */\n get numCols() {\n return this.names.length;\n }\n\n /**\n * The number of rows in this table.\n * @return {number} The number of rows.\n */\n get numRows() {\n return this.children[0]?.length ?? 0;\n }\n\n /**\n * Return the child column at the given index position.\n * @template {T[keyof T]} R\n * @param {number} index The column index.\n * @returns {Column<R>}\n */\n getChildAt(index) {\n return this.children[index];\n }\n\n /**\n * Return the first child column with the given name.\n * @template {keyof T} P\n * @param {P} name The column name.\n * @returns {Column<T[P]>}\n */\n getChild(name) {\n const i = this.names.findIndex(x => x === name);\n return i > -1 ? this.children[i] : undefined;\n }\n\n /**\n * Construct a new table containing only columns at the specified indices.\n * The order of columns in the new table matches the order of input indices.\n * @template {T[keyof T]} V\n * @param {number[]} indices The indices of columns to keep.\n * @param {string[]} [as] Optional new names for selected columns.\n * @returns {Table<{ [key: string]: V }>} A new table with selected columns.\n */\n selectAt(indices, as = []) {\n const { children, factory, schema } = this;\n const { fields } = schema;\n return new Table(\n {\n ...schema,\n fields: indices.map((i, j) => renameField(fields[i], as[j]))\n },\n indices.map(i => children[i]),\n factory === proxyFactory\n );\n }\n\n /**\n * Construct a new table containing only columns with the specified names.\n * If columns have duplicate names, the first (with lowest index) is used.\n * The order of columns in the new table matches the order of input names.\n * @template {keyof T} K\n * @param {K[]} names Names of columns to keep.\n * @param {string[]} [as] Optional new names for selected columns.\n * @returns A new table with columns matching the specified names.\n */\n select(names, as) {\n const all = /** @type {K[]} */(this.names);\n const indices = names.map(name => all.indexOf(name));\n return this.selectAt(indices, as);\n }\n\n /**\n * Return an object mapping column names to extracted value arrays.\n * @returns {{ [P in keyof T]: ValueArray<T[P]> }}\n */\n toColumns() {\n const { children, names } = this;\n /** @type {{ [P in keyof T]: ValueArray<T[P]> }} */\n // @ts-expect-error assign to empty object\n const cols = {};\n names.forEach((name, i) => cols[name] = children[i]?.toArray() ?? [] );\n return cols;\n }\n\n /**\n * Return an array of objects representing the rows of this table.\n * @returns {{ [P in keyof T]: T[P] }[]}\n */\n toArray() {\n const { children, getFactory, numRows } = this;\n const data = children[0]?.data ?? [];\n const output = Array(numRows);\n for (let b = 0, row = -1; b < data.length; ++b) {\n const f = getFactory(b);\n for (let i = 0; i < data[b].length; ++i) {\n output[++row] = f(i);\n }\n }\n return output;\n }\n\n /**\n * Return an iterator over objects representing the rows of this table.\n * @returns {Generator<{ [P in keyof T]: T[P] }, any, any>}\n */\n *[Symbol.iterator]() {\n const { children, getFactory } = this;\n const data = children[0]?.data ?? [];\n for (let b = 0; b < data.length; ++b) {\n const f = getFactory(b);\n for (let i = 0; i < data[b].length; ++i) {\n yield f(i);\n }\n }\n }\n\n /**\n * Return a row object for the given index.\n * @param {number} index The row index.\n * @returns {{ [P in keyof T]: T[P] }} The row object.\n */\n at(index) {\n const { children, getFactory, numRows } = this;\n if (index < 0 || index >= numRows) return null;\n const [{ offsets }] = children;\n const b = bisect(offsets, index) - 1;\n return getFactory(b)(index - offsets[b]);\n }\n\n /**\n * Return a row object for the given index. This method is the same as\n * `at()` and is provided for better compatibility with Apache Arrow JS.\n * @param {number} index The row index.\n * @returns {{ [P in keyof T]: T[P] }} The row object.\n */\n get(index) {\n return this.at(index);\n }\n}\n\nfunction renameField(field, name) {\n return (name != null && name !== field.name)\n ? { ...field, name }\n : field;\n}\n","/**\n * @import { DataType, ExtractionOptions } from './types.js';\n */\nimport { BinaryBatch, BinaryViewBatch, BoolBatch, DateBatch, DateDayBatch, DateDayMillisecondBatch, Decimal32NumberBatch, DecimalBigIntBatch, DecimalNumberBatch, DenseUnionBatch, DictionaryBatch, DirectBatch, FixedBinaryBatch, FixedListBatch, Float16Batch, Int64Batch, IntervalDayTimeBatch, IntervalMonthDayNanoBatch, LargeBinaryBatch, LargeListBatch, LargeListViewBatch, LargeUtf8Batch, ListBatch, ListViewBatch, MapBatch, MapEntryBatch, NullBatch, RunEndEncodedBatch, SparseUnionBatch, StructBatch, StructProxyBatch, TimestampMicrosecondBatch, TimestampMillisecondBatch, TimestampNanosecondBatch, TimestampSecondBatch, Utf8Batch, Utf8ViewBatch } from './batch.js';\nimport { DateUnit, IntervalUnit, TimeUnit, Type } from './constants.js';\nimport { invalidDataType } from './data-types.js';\n\n/**\n * Return a batch constructor for the given data type and extraction options.\n * @param {DataType} type The data type.\n * @param {ExtractionOptions} options The extraction options.\n */\nexport function batchType(type, options = {}) {\n const { typeId, bitWidth, mode, precision, unit } = /** @type {any} */(type);\n const { useBigInt, useDate, useDecimalInt, useMap, useProxy } = options;\n\n switch (typeId) {\n case Type.Null: return NullBatch;\n case Type.Bool: return BoolBatch;\n case Type.Int:\n case Type.Time:\n case Type.Duration:\n return useBigInt || bitWidth < 64 ? DirectBatch : Int64Batch;\n case Type.Float:\n return precision ? DirectBatch : Float16Batch;\n case Type.Date:\n return wrap(\n unit === DateUnit.DAY ? DateDayBatch : DateDayMillisecondBatch,\n useDate && DateBatch\n );\n case Type.Timestamp:\n return wrap(\n unit === TimeUnit.SECOND ? TimestampSecondBatch\n : unit === TimeUnit.MILLISECOND ? TimestampMillisecondBatch\n : unit === TimeUnit.MICROSECOND ? TimestampMicrosecondBatch\n : TimestampNanosecondBatch,\n useDate && DateBatch\n );\n case Type.Decimal:\n return bitWidth === 32\n ? (useDecimalInt ? DirectBatch : Decimal32NumberBatch)\n : (useDecimalInt ? DecimalBigIntBatch : DecimalNumberBatch);\n case Type.Interval:\n return unit === IntervalUnit.DAY_TIME ? IntervalDayTimeBatch\n : unit === IntervalUnit.YEAR_MONTH ? DirectBatch\n : IntervalMonthDayNanoBatch;\n case Type.FixedSizeBinary: return FixedBinaryBatch;\n case Type.Utf8: return Utf8Batch;\n case Type.LargeUtf8: return LargeUtf8Batch;\n case Type.Binary: return BinaryBatch;\n case Type.LargeBinary: return LargeBinaryBatch;\n case Type.BinaryView: return BinaryViewBatch;\n case Type.Utf8View: return Utf8ViewBatch;\n case Type.List: return ListBatch;\n case Type.LargeList: return LargeListBatch;\n case Type.Map: return useMap ? MapBatch : MapEntryBatch;\n case Type.ListView: return ListViewBatch;\n case Type.LargeListView: return LargeListViewBatch;\n case Type.FixedSizeList: return FixedListBatch;\n case Type.Struct: return useProxy ? StructProxyBatch : StructBatch;\n case Type.RunEndEncoded: return RunEndEncodedBatch;\n case Type.Dictionary: return DictionaryBatch;\n case Type.Union: return mode ? DenseUnionBatch : SparseUnionBatch;\n }\n throw new Error(invalidDataType(typeId));\n}\n\nfunction wrap(BaseClass, WrapperClass) {\n return WrapperClass\n ? class WrapBatch extends WrapperClass {\n constructor(options) {\n super(new BaseClass(options));\n }\n }\n : BaseClass;\n}\n","import { readInt32, readInt64, readVector } from '../util/read.js';\n\n/**\n * Decode a block that points to messages within an Arrow 'file' format.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @returns The file block.\n */\nexport function decodeBlock(buf, index) {\n // 0: offset\n // 8: metadataLength\n // 16: bodyLength\n return {\n offset: readInt64(buf, index),\n metadataLength: readInt32(buf, index + 8),\n bodyLength: readInt64(buf, index + 16)\n }\n}\n\n/**\n * Decode a vector of blocks.\n * @param {Uint8Array} buf\n * @param {number} index\n * @returns An array of file blocks.\n */\nexport function decodeBlocks(buf, index) {\n return readVector(buf, index, 24, decodeBlock);\n}\n","/**\n * @import { RecordBatch, Version_ } from '../types.js'\n */\nimport { Version } from '../constants.js';\nimport { readInt64, readObject, readOffset, readVector } from '../util/read.js';\n\n/**\n * Decode a record batch.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @param {Version_} version Arrow version value\n * @returns {RecordBatch} The record batch\n */\nexport function decodeRecordBatch(buf, index, version) {\n // 4: length\n // 6: nodes\n // 8: buffers\n // 10: compression (not supported)\n // 12: variadicBuffers (buffer counts for view-typed fields)\n const get = readObject(buf, index);\n if (get(10, readOffset, 0)) {\n throw new Error('Record batch compression not implemented');\n }\n\n // If an Arrow buffer was written before version 4,\n // advance 8 bytes to skip the now-removed page_id field\n const offset = version < Version.V4 ? 8 : 0;\n\n return {\n length: get(4, readInt64, 0),\n nodes: readVector(buf, get(6, readOffset), 16, (buf, pos) => ({\n length: readInt64(buf, pos),\n nullCount: readInt64(buf, pos + 8)\n })),\n regions: readVector(buf, get(8, readOffset), 16 + offset, (buf, pos) => ({\n offset: readInt64(buf, pos + offset),\n length: readInt64(buf, pos + offset + 8)\n })),\n variadic: readVector(buf, get(12, readOffset), 8, readInt64)\n };\n}\n","/**\n * @import { DictionaryBatch, Version_ } from '../types.js'\n */\nimport { readBoolean, readInt64, readObject } from '../util/read.js';\nimport { decodeRecordBatch } from './record-batch.js';\n\n/**\n * Decode a dictionary batch.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @param {Version_} version Arrow version value\n * @returns {DictionaryBatch} The dictionary batch\n */\nexport function decodeDictionaryBatch(buf, index, version) {\n // 4: id\n // 6: data\n // 8: isDelta\n const get = readObject(buf, index);\n return {\n id: get(4, readInt64, 0),\n data: get(6, (buf, off) => decodeRecordBatch(buf, off, version)),\n /**\n * If isDelta is true the values in the dictionary are to be appended to a\n * dictionary with the indicated id. If isDelta is false this dictionary\n * should replace the existing dictionary.\n */\n isDelta: get(8, readBoolean, false)\n };\n}\n","/**\n * @import { DataType, Field } from '../types.js'\n */\nimport { DateUnit, IntervalUnit, Precision, TimeUnit, Type, UnionMode } from '../constants.js';\nimport { binary, date, decimal, duration, fixedSizeBinary, fixedSizeList, float, int, interval, invalidDataType, largeBinary, largeList, largeListView, largeUtf8, list, listView, mapType, runEndEncoded, struct, time, timestamp, union, utf8 } from '../data-types.js';\nimport { checkOneOf } from '../util/objects.js';\nimport { readBoolean, readInt16, readInt32, readObject, readOffset, readString, readVector } from '../util/read.js';\n\n/**\n * Decode a data type definition for a field.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data.\n * @param {number} index The starting index in the byte buffer.\n * @param {number} typeId The data type id.\n * @param {Field[]} [children] A list of parsed child fields.\n * @returns {DataType} The data type.\n */\nexport function decodeDataType(buf, index, typeId, children) {\n checkOneOf(typeId, Type, invalidDataType);\n const get = readObject(buf, index);\n\n switch (typeId) {\n // types without flatbuffer objects\n case Type.Binary: return binary();\n case Type.Utf8: return utf8();\n case Type.LargeBinary: return largeBinary();\n case Type.LargeUtf8: return largeUtf8();\n case Type.List: return list(children[0]);\n case Type.ListView: return listView(children[0]);\n case Type.LargeList: return largeList(children[0]);\n case Type.LargeListView: return largeListView(children[0]);\n case Type.Struct: return struct(children);\n case Type.RunEndEncoded: return runEndEncoded(children[0], children[1]);\n\n // types with flatbuffer objects\n case Type.Int: return int(\n // @ts-ignore\n get(4, readInt32, 0), // bitwidth\n get(6, readBoolean, false) // signed\n );\n case Type.Float: return float(\n // @ts-ignore\n get(4, readInt16, Precision.HALF) // precision\n );\n case Type.Decimal: return decimal(\n get(4, readInt32, 0), // precision\n get(6, readInt32, 0), // scale\n // @ts-ignore\n get(8, readInt32, 128) // bitwidth\n );\n case Type.Date: return date(\n // @ts-ignore\n get(4, readInt16, DateUnit.MILLISECOND) // unit\n );\n case Type.Time: return time(\n // @ts-ignore\n get(4, readInt16, TimeUnit.MILLISECOND) // unit\n );\n case Type.Timestamp: return timestamp(\n // @ts-ignore\n get(4, readInt16, TimeUnit.SECOND), // unit\n get(6, readString) // timezone\n );\n case Type.Interval: return interval(\n // @ts-ignore\n get(4, readInt16, IntervalUnit.YEAR_MONTH) // unit\n );\n case Type.Duration: return duration(\n // @ts-ignore\n get(4, readInt16, TimeUnit.MILLISECOND) // unit\n );\n\n case Type.FixedSizeBinary: return fixedSizeBinary(\n get(4, readInt32, 0) // stride\n );\n case Type.FixedSizeList: return fixedSizeList(\n children[0],\n get(4, readInt32, 0), // stride\n );\n case Type.Map: return mapType(\n get(4, readBoolean, false), // keysSorted\n children[0]\n );\n\n case Type.Union: return union(\n // @ts-ignore\n get(4, readInt16, UnionMode.Sparse), // mode\n children,\n readVector(buf, get(6, readOffset), 4, readInt32) // type ids\n );\n }\n // case Type.NONE:\n // case Type.Null:\n // case Type.Bool:\n // case Type.BinaryView:\n // case Type.Utf8View:\n // @ts-ignore\n return { typeId };\n}\n","/**\n * @import { Metadata } from '../types.js'\n */\nimport { readObject, readString, readVector } from '../util/read.js';\n\n/**\n * Decode custom metadata consisting of key-value string pairs.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @returns {Metadata | null} The custom metadata map\n */\nexport function decodeMetadata(buf, index) {\n const entries = readVector(buf, index, 4, (buf, pos) => {\n const get = readObject(buf, pos);\n return /** @type {[string, string]} */ ([\n get(4, readString), // 4: key (string)\n get(6, readString) // 6: key (string)\n ]);\n });\n return entries.length ? new Map(entries) : null;\n}\n","/**\n * @import { DictionaryType, Endianness_, Field, IntType, Schema, Version_ } from '../types.js'\n */\nimport { Type } from '../constants.js';\nimport { dictionary, int32 } from '../data-types.js';\nimport { readBoolean, readInt16, readInt64, readObject, readOffset, readString, readUint8, readVector } from '../util/read.js';\nimport { decodeDataType } from './data-type.js';\nimport { decodeMetadata } from './metadata.js';\n\n/**\n * Decode a table schema describing the fields and their data types.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @param {Version_} version Arrow version value\n * @returns {Schema} The schema\n */\nexport function decodeSchema(buf, index, version) {\n // 4: endianness (int16)\n // 6: fields (vector)\n // 8: metadata (vector)\n // 10: features (int64[])\n const get = readObject(buf, index);\n return {\n version,\n endianness: /** @type {Endianness_} */ (get(4, readInt16, 0)),\n fields: get(6, decodeSchemaFields, []),\n metadata: get(8, decodeMetadata)\n };\n}\n\n/**\n * @returns {Field[] | null}\n */\nfunction decodeSchemaFields(buf, fieldsOffset) {\n return readVector(buf, fieldsOffset, 4, decodeField);\n}\n\n/**\n * @returns {Field}\n */\nfunction decodeField(buf, index) {\n // 4: name (string)\n // 6: nullable (bool)\n // 8: type id (uint8)\n // 10: type (union)\n // 12: dictionary (table)\n // 14: children (vector)\n // 16: metadata (vector)\n const get = readObject(buf, index);\n const typeId = get(8, readUint8, Type.NONE);\n const typeOffset = get(10, readOffset, 0);\n const dict = get(12, decodeDictionary);\n const children = get(14, (buf, off) => decodeFieldChildren(buf, off));\n\n let type = decodeDataType(buf, typeOffset, typeId, children);\n if (dict) {\n dict.dictionary = type;\n type = dict;\n }\n\n return {\n name: get(4, readString),\n type,\n nullable: get(6, readBoolean, false),\n metadata: get(16, decodeMetadata)\n };\n}\n\n/**\n * @returns {Field[] | null}\n */\nfunction decodeFieldChildren(buf, fieldOffset) {\n const children = readVector(buf, fieldOffset, 4, decodeField);\n return children.length ? children : null;\n}\n\n/**\n * @param {Uint8Array} buf\n * @param {number} index\n * @returns {DictionaryType}\n */\nfunction decodeDictionary(buf, index) {\n if (!index) return null;\n // 4: id (int64)\n // 6: indexType (Int type)\n // 8: isOrdered (boolean)\n // 10: kind (int16) currently only dense array is supported\n const get = readObject(buf, index);\n return dictionary(\n null, // data type will be populated by caller\n get(6, decodeInt, int32()), // index type\n get(8, readBoolean, false), // ordered\n get(4, readInt64, 0), // id\n );\n}\n\n/**\n * Decode an integer data type.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data.\n * @param {number} index The starting index in the byte buffer.\n * @returns {IntType}\n */\nfunction decodeInt(buf, index) {\n return /** @type {IntType} */ (\n decodeDataType(buf, index, Type.Int)\n );\n}\n","/**\n * @import { Message, MessageHeader_, Version_ } from '../types.js'\n */\nimport { MessageHeader, Version } from '../constants.js';\nimport { keyFor } from '../util/objects.js';\nimport { SIZEOF_INT, readInt16, readInt32, readInt64, readObject, readOffset, readUint8 } from '../util/read.js';\nimport { decodeDictionaryBatch } from './dictionary-batch.js';\nimport { decodeRecordBatch } from './record-batch.js';\nimport { decodeSchema } from './schema.js';\n\nconst invalidMessageMetadata = (expected, actual) =>\n `Expected to read ${expected} metadata bytes, but only read ${actual}.`;\n\nconst invalidMessageBodyLength = (expected, actual) =>\n `Expected to read ${expected} bytes for message body, but only read ${actual}.`;\n\nconst invalidMessageType = (type) =>\n `Unsupported message type: ${type} (${keyFor(MessageHeader, type)})`;\n\n/**\n * A \"message\" contains a block of Apache Arrow data, such as a schema,\n * record batch, or dictionary batch. This message decodes a single\n * message, returning its associated metadata and content.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @returns {Message} The decoded message.\n */\nexport function decodeMessage(buf, index) {\n // get message start\n let metadataLength = readInt32(buf, index) || 0;\n index += SIZEOF_INT;\n\n // ARROW-6313: If the first 4 bytes are continuation indicator (-1), read\n // the next 4 for the 32-bit metadata length. Otherwise, assume this is a\n // pre-v0.15 message, where the first 4 bytes are the metadata length.\n if (metadataLength === -1) {\n metadataLength = readInt32(buf, index) || 0;\n index += SIZEOF_INT;\n }\n if (metadataLength === 0) return null;\n\n const head = buf.subarray(index, index += metadataLength);\n if (head.byteLength < metadataLength) {\n throw new Error(invalidMessageMetadata(metadataLength, head.byteLength));\n }\n\n // decode message metadata\n // 4: version\n // 6: headerType\n // 8: headerIndex\n // 10: bodyLength\n const get = readObject(head, 0);\n const version = /** @type {Version_} */\n (get(4, readInt16, Version.V1));\n const type = /** @type {MessageHeader_} */\n (get(6, readUint8, MessageHeader.NONE));\n const offset = get(8, readOffset, 0);\n const bodyLength = get(10, readInt64, 0);\n let content;\n\n if (offset) {\n // decode message header\n const decoder = type === MessageHeader.Schema ? decodeSchema\n : type === MessageHeader.DictionaryBatch ? decodeDictionaryBatch\n : type === MessageHeader.RecordBatch ? decodeRecordBatch\n : null;\n if (!decoder) throw new Error(invalidMessageType(type));\n content = decoder(head, offset, version);\n\n // extract message body\n if (bodyLength > 0) {\n const body = buf.subarray(index, index += bodyLength);\n if (body.byteLength < bodyLength) {\n throw new Error(invalidMessageBodyLength(bodyLength, body.byteLength));\n }\n // @ts-ignore\n content.body = body;\n } else if (type !== MessageHeader.Schema) {\n // table-from-ipc.js buffer accessor requires body to exist, even for empty batches\n // @ts-ignore\n content.body = new Uint8Array(0);\n }\n }\n\n return { version, type, index, content };\n}\n","/**\n * @import { ArrowData, Version_ } from '../types.js'\n */\nimport { MAGIC, MessageHeader, Version } from '../constants.js';\nimport { isArrayBufferLike } from '../util/arrays.js';\nimport { readInt16, readInt32, readObject } from '../util/read.js';\nimport { decodeBlocks } from './block.js';\nimport { decodeMessage } from './message.js';\nimport { decodeMetadata } from './metadata.js';\nimport { decodeSchema } from './schema.js';\n\n/**\n * Decode [Apache Arrow IPC data][1] and return parsed schema, record batch,\n * and dictionary batch definitions. The input binary data may be either\n * an `ArrayBuffer` or `Uint8Array`. For Arrow data in the IPC 'stream' format,\n * an array of `Uint8Array` instances is also supported.\n *\n * This method stops short of generating views over field buffers. Use the\n * `createData()` method on the result to enable column data access.\n *\n * [1]: https://arrow.apache.org/docs/format/Columnar.html#serialization-and-interprocess-communication-ipc\n * @param {ArrayBufferLike | Uint8Array | Uint8Array[]} data\n * The source byte buffer, or an array of buffers. If an array, each byte\n * array may contain one or more self-contained messages. Messages may NOT\n * span multiple byte arrays.\n * @returns {import('../types.js').ArrowData}\n */\nexport function decodeIPC(data) {\n const source = isArrayBufferLike(data) ? new Uint8Array(data) : data;\n return source instanceof Uint8Array && isArrowFileFormat(source)\n ? decodeIPCFile(source)\n : decodeIPCStream(source);\n}\n\n/**\n * @param {Uint8Array} buf\n * @returns {boolean}\n */\nfunction isArrowFileFormat(buf) {\n if (!buf || buf.length < 4) return false;\n for (let i = 0; i < 6; ++i) {\n if (MAGIC[i] !== buf[i]) return false;\n }\n return true;\n}\n\n/**\n * Decode data in the [Arrow IPC 'stream' format][1].\n *\n * [1]: https://arrow.apache.org/docs/format/Columnar.html#ipc-streaming-format\n * @param {Uint8Array | Uint8Array[]} data The source byte buffer, or an\n * array of buffers. If an array, each byte array may contain one or more\n * self-contained messages. Messages may NOT span multiple byte arrays.\n * @returns {ArrowData}\n */\nexport function decodeIPCStream(data) {\n const stream = [data].flat();\n\n let schema;\n const records = [];\n const dictionaries = [];\n\n // consume each message in the stream\n for (const buf of stream) {\n if (!(buf instanceof Uint8Array)) {\n throw new Error(`IPC data batch was not a Uint8Array.`);\n }\n let offset = 0;\n\n // decode all messages in current buffer\n while (true) {\n const m = decodeMessage(buf, offset);\n if (m === null) break; // end of messages\n offset = m.index;\n if (!m.content) continue;\n switch (m.type) {\n case MessageHeader.Schema:\n // ignore repeated schema messages\n if (!schema) schema = m.content;\n break;\n case MessageHeader.RecordBatch:\n records.push(m.content);\n break;\n case MessageHeader.DictionaryBatch:\n dictionaries.push(m.content);\n break;\n }\n }\n }\n\n return /** @type {ArrowData} */ (\n { schema, dictionaries, records, metadata: null }\n );\n}\n\n/**\n * Decode data in the [Arrow IPC 'file' format][1].\n *\n * [1]: https://arrow.apache.org/docs/format/Columnar.html#ipc-file-format\n * @param {Uint8Array} data The source byte buffer.\n * @returns {ArrowData}\n */\nexport function decodeIPCFile(data) {\n // find footer location\n const offset = data.byteLength - (MAGIC.length + 4);\n const length = readInt32(data, offset);\n\n // decode file footer\n // 4: version\n // 6: schema\n // 8: dictionaries (vector)\n // 10: batches (vector)\n // 12: metadata\n const get = readObject(data, offset - length);\n const version = /** @type {Version_} */\n (get(4, readInt16, Version.V1));\n const dicts = get(8, decodeBlocks, []);\n const recs = get(10, decodeBlocks, []);\n\n return /** @type {ArrowData} */ ({\n schema: get(6, (buf, index) => decodeSchema(buf, index, version)),\n dictionaries: dicts.map(({ offset }) => decodeMessage(data, offset).content),\n records: recs.map(({ offset }) => decodeMessage(data, offset).content),\n metadata: get(12, decodeMetadata)\n });\n}\n","/**\n * @import { ArrowData, ExtractionOptions, Field, RecordBatch, Schema } from '../types.js'\n */\nimport { batchType } from '../batch-type.js';\nimport { columnBuilder } from '../column.js';\nimport { Type, UnionMode, Version } from '../constants.js';\nimport { invalidDataType } from '../data-types.js';\nimport { Table } from '../table.js';\nimport { int8Array } from '../util/arrays.js';\nimport { decodeIPC } from './decode-ipc.js';\n\n/**\n * Decode [Apache Arrow IPC data][1] and return a new Table. The input binary\n * data may be either an `ArrayBuffer` or `Uint8Array`. For Arrow data in the\n * [IPC 'stream' format][2], an array of `Uint8Array` values is also supported.\n *\n * [1]: https://arrow.apache.org/docs/format/Columnar.html#serialization-and-interprocess-communication-ipc\n * [2]: https://arrow.apache.org/docs/format/Columnar.html#ipc-streaming-format\n * @param {ArrayBufferLike | Uint8Array | Uint8Array[]} data\n * The source byte buffer, or an array of buffers. If an array, each byte\n * array may contain one or more self-contained messages. Messages may NOT\n * span multiple byte arrays.\n * @param {ExtractionOptions} [options]\n * Options for controlling how values are transformed when extracted\n * from an Arrow binary representation.\n * @returns {Table} A Table instance.\n */\nexport function tableFromIPC(data, options) {\n return createTable(decodeIPC(data), options);\n}\n\n/**\n * Create a table from parsed IPC data.\n * @param {ArrowData} data\n * The IPC data, as returned by parseIPC.\n * @param {ExtractionOptions} [options]\n * Options for controlling how values are transformed when extracted\n * from am Arrow binary representation.\n * @returns {Table} A Table instance.\n */\nexport function createTable(data, options = {}) {\n const { schema = { fields: [] }, dictionaries, records } = data;\n const { version, fields } = schema;\n const dictionaryMap = new Map;\n const context = contextGenerator(options, version, dictionaryMap);\n\n // build dictionary type map\n const dictionaryTypes = new Map;\n visitSchemaFields(schema, field => {\n const type = field.type;\n if (type.typeId === Type.Dictionary) {\n dictionaryTypes.set(type.id, type.dictionary);\n }\n });\n\n // decode dictionaries, build dictionary column map\n const dicts = new Map;\n for (const dict of dictionaries) {\n const { id, data, isDelta, body } = dict;\n const type = dictionaryTypes.get(id);\n const batch = visit(type, context({ ...data, body }));\n if (!dicts.has(id)) {\n if (isDelta) {\n throw new Error('Delta update can not be first dictionary batch.');\n }\n dicts.set(id, columnBuilder(type).add(batch));\n } else {\n const dict = dicts.get(id);\n if (!isDelta) dict.clear();\n dict.add(batch);\n }\n }\n dicts.forEach((value, key) => dictionaryMap.set(key, value.done()));\n\n // decode column fields\n const cols = fields.map(f => columnBuilder(f.type));\n for (const batch of records) {\n const ctx = context(batch);\n fields.forEach((f, i) => cols[i].add(visit(f.type, ctx)));\n }\n\n return new Table(schema, cols.map(c => c.done()), options.useProxy);\n}\n\n/**\n * Visit all fields within a schema.\n * @param {Schema} schema\n * @param {(field: Field) => void} visitor\n */\nfunction visitSchemaFields(schema, visitor) {\n schema.fields.forEach(function visitField(field) {\n visitor(field);\n // @ts-ignore\n field.type.dictionary?.children?.forEach(visitField);\n // @ts-ignore\n field.type.children?.forEach(visitField);\n });\n}\n\n/**\n * Context object generator for field visitation and buffer definition.\n */\nfunction contextGenerator(options, version, dictionaryMap) {\n const base = {\n version,\n options,\n dictionary: id => dictionaryMap.get(id),\n };\n\n /**\n * Return a context generator.\n * @param {RecordBatch} batch\n */\n return batch => {\n const { length, nodes, regions, variadic, body } = batch;\n let nodeIndex = -1;\n let bufferIndex = -1;\n let variadicIndex = -1;\n return {\n ...base,\n length,\n node: () => nodes[++nodeIndex],\n buffer: (ArrayType) => {\n const { length, offset } = regions[++bufferIndex];\n return ArrayType\n ? new ArrayType(body.buffer, body.byteOffset + offset, length / ArrayType.BYTES_PER_ELEMENT)\n : body.subarray(offset, offset + length)\n },\n variadic: () => variadic[++variadicIndex],\n visit(children) { return children.map(f => visit(f.type, this)); }\n };\n };\n}\n\n/**\n * Visit a field, instantiating views of buffer regions.\n */\nfunction visit(type, ctx) {\n const { typeId } = type;\n const { options, node, buffer, variadic, version } = ctx;\n const BatchType = batchType(type, options);\n\n // extract the next { length, nullCount } field node - ALL fields have field nodes\n const base = { ...node(), type };\n\n if (typeId === Type.Null) {\n // null fields have field nodes but no data buffers\n return new BatchType({ ...base, nullCount: base.length });\n }\n\n switch (typeId) {\n // validity and data value buffers\n case Type.Bool:\n case Type.Int:\n case Type.Time:\n case Type.Duration:\n case Type.Float:\n case Type.Decimal:\n case Type.Date:\n case Type.Timestamp:\n case Type.Interval:\n case Type.FixedSizeBinary:\n return new BatchType({\n ...base,\n validity: buffer(),\n values: buffer(type.values)\n });\n\n // validity, offset, and value buffers\n case Type.Utf8:\n case Type.LargeUtf8:\n case Type.Binary:\n case Type.LargeBinary:\n return new BatchType({\n ...base,\n validity: buffer(),\n offsets: buffer(type.offsets),\n values: buffer()\n });\n\n // views with variadic buffers\n case Type.BinaryView:\n case Type.Utf8View:\n return new BatchType({\n ...base,\n validity: buffer(),\n values: buffer(), // views buffer\n data: Array.from({ length: variadic() }, () => buffer()) // data buffers\n });\n\n // validity, offset, and list child\n case Type.List:\n case Type.LargeList:\n case Type.Map:\n return new BatchType({\n ...base,\n validity: buffer(),\n offsets: buffer(type.offsets),\n children: ctx.visit(type.children)\n });\n\n // validity, offset, size, and list child\n case Type.ListView:\n case Type.LargeListView:\n return new BatchType({\n ...base,\n validity: buffer(),\n offsets: buffer(type.offsets),\n sizes: buffer(type.offsets),\n children: ctx.visit(type.children)\n });\n\n // validity and children\n case Type.FixedSizeList:\n case Type.Struct:\n return new BatchType({\n ...base,\n validity: buffer(),\n children: ctx.visit(type.children)\n });\n\n // children only\n case Type.RunEndEncoded:\n return new BatchType({\n ...base,\n children: ctx.visit(type.children)\n });\n\n // dictionary\n case Type.Dictionary: {\n const { id, indices } = type;\n return new BatchType({\n ...base,\n validity: buffer(),\n values: buffer(indices.values),\n }).setDictionary(ctx.dictionary(id));\n }\n\n // union\n case Type.Union: {\n if (version < Version.V5) {\n buffer(); // skip unused null bitmap\n }\n return new BatchType({\n ...base,\n typeIds: buffer(int8Array),\n offsets: type.mode === UnionMode.Sparse ? null : buffer(type.offsets),\n children: ctx.visit(type.children)\n });\n }\n\n // unsupported type\n default:\n throw new Error(invalidDataType(typeId));\n }\n}\n","/**\n * @import { DictionaryType, Field, Schema } from '../types.js';\n * @import { Builder } from './builder.js';\n */\nimport { Type } from '../constants.js';\nimport { encodeDataType } from './data-type.js';\nimport { encodeMetadata } from './metadata.js';\n\nconst isLittleEndian = new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\n\n/**\n * @param {Builder} builder\n * @param {Schema} schema\n * @returns {number}\n */\nexport function encodeSchema(builder, schema) {\n const { fields, metadata } = schema;\n const fieldOffsets = fields.map(f => encodeField(builder, f));\n const fieldsVectorOffset = builder.addOffsetVector(fieldOffsets);\n const metadataOffset = encodeMetadata(builder, metadata);\n return builder.addObject(4, b => {\n b.addInt16(0, +(!isLittleEndian), 0);\n b.addOffset(1, fieldsVectorOffset, 0);\n b.addOffset(2, metadataOffset, 0);\n // NOT SUPPORTED: 3, features\n });\n}\n\n/**\n * @param {Builder} builder\n * @param {Field} field\n * @returns {number}\n */\nfunction encodeField(builder, field) {\n const { name, nullable, type, metadata } = field;\n let { typeId } = type;\n\n // encode field data type\n let typeOffset = 0;\n let dictionaryOffset = 0;\n if (typeId !== Type.Dictionary) {\n typeOffset = encodeDataType(builder, type);\n } else {\n const dict = /** @type {DictionaryType} */ (type).dictionary;\n typeId = dict.typeId;\n dictionaryOffset = encodeDataType(builder, type);\n typeOffset = encodeDataType(builder, dict);\n }\n\n // encode children, metadata, name, and field object\n // @ts-ignore\n const childOffsets = (type.children || []).map(f => encodeField(builder, f));\n const childrenVectorOffset = builder.addOffsetVector(childOffsets);\n const metadataOffset = encodeMetadata(builder, metadata);\n const nameOffset = builder.addString(name);\n return builder.addObject(7, b => {\n b.addOffset(0, nameOffset, 0);\n b.addInt8(1, +nullable, +false);\n b.addInt8(2, typeId, Type.NONE);\n b.addOffset(3, typeOffset, 0);\n b.addOffset(4, dictionaryOffset, 0);\n b.addOffset(5, childrenVectorOffset, 0);\n b.addOffset(6, metadataOffset, 0);\n });\n}\n","/**\n * @import { TypedArray, TypedArrayConstructor } from '../types.js'\n */\nimport { align, grow, uint8Array } from '../util/arrays.js';\n\n/**\n * Create a new resizable buffer instance.\n * @param {TypedArrayConstructor} [arrayType]\n * The array type.\n * @returns {Buffer} The buffer.\n */\nexport function buffer(arrayType) {\n return new Buffer(arrayType);\n}\n\n/**\n * Resizable byte buffer.\n */\nexport class Buffer {\n /**\n * Create a new resizable buffer instance.\n * @param {TypedArrayConstructor} arrayType\n */\n constructor(arrayType = uint8Array) {\n this.buf = new arrayType(512);\n }\n /**\n * Return the underlying data as a 64-bit aligned array of minimum size.\n * @param {number} size The desired minimum array size.\n * @returns {TypedArray} The 64-bit aligned array.\n */\n array(size) {\n return align(this.buf, size);\n }\n /**\n * Prepare for writes to the given index, resizing as necessary.\n * @param {number} index The array index to prepare to write to.\n */\n prep(index) {\n if (index >= this.buf.length) {\n this.buf = grow(this.buf, index);\n }\n }\n /**\n * Return the value at the given index.\n * @param {number} index The array index.\n */\n get(index) {\n return this.buf[index];\n }\n /**\n * Set a value at the given index.\n * @param {number | bigint} value The value to set.\n * @param {number} index The index to write to.\n */\n set(value, index) {\n this.prep(index);\n this.buf[index] = value;\n }\n /**\n * Write a byte array at the given index. The method should be called\n * only when the underlying buffer is of type Uint8Array.\n * @param {Uint8Array} bytes The byte array.\n * @param {number} index The starting index to write to.\n */\n write(bytes, index) {\n this.prep(index + bytes.length);\n /** @type {Uint8Array} */ (this.buf).set(bytes, index);\n }\n}\n\n/**\n * Create a new resizable bitmap instance.\n * @returns {Bitmap} The bitmap buffer.\n */\nexport function bitmap() {\n return new Bitmap();\n}\n\n/**\n * Resizable bitmap buffer.\n */\nexport class Bitmap extends Buffer {\n /**\n * Set a bit to true at the given bitmap index.\n * @param {number} index The index to write to.\n */\n set(index) {\n const i = index >> 3;\n this.prep(i);\n /** @type {Uint8Array} */ (this.buf)[i] |= (1 << (index % 8));\n }\n}\n","/**\n * @import { Batch } from '../../batch.js'\n */\n\n/**\n * Abstract class for building a column data batch.\n */\nexport class BatchBuilder {\n constructor(type, ctx) {\n this.type = type;\n this.ctx = ctx;\n this.batchClass = ctx.batchType(type);\n }\n\n /**\n * Initialize the builder state.\n * @returns {this} This builder.\n */\n init() {\n this.index = -1;\n return this;\n }\n\n /**\n * Write a value to the builder.\n * @param {*} value\n * @param {number} index\n * @returns {boolean | void}\n */\n set(value, index) {\n this.index = index;\n return false;\n }\n\n /**\n * Returns a batch constructor options object.\n * Used internally to marshal batch data.\n * @returns {Record<string, any>}\n */\n done() {\n return null;\n }\n\n /**\n * Returns a completed batch and reinitializes the builder state.\n * @returns {Batch}\n */\n batch() {\n const b = new this.batchClass(this.done());\n this.init();\n return b;\n }\n}\n","import { uint8Array } from '../../util/arrays.js';\nimport { bitmap } from '../buffer.js';\nimport { BatchBuilder } from './batch.js';\n\n/**\n * Builder for validity bitmaps within batches.\n */\nexport class ValidityBuilder extends BatchBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n }\n\n init() {\n this.nullCount = 0;\n this.validity = bitmap();\n return super.init();\n }\n\n /**\n * @param {*} value\n * @param {number} index\n * @returns {boolean | void}\n */\n set(value, index) {\n this.index = index;\n const isValid = value != null;\n if (isValid) {\n this.validity.set(index);\n } else {\n this.nullCount++;\n }\n return isValid;\n }\n\n done() {\n const { index, nullCount, type, validity } = this;\n return {\n length: index + 1,\n nullCount,\n type,\n validity: nullCount\n ? validity.array((index >> 3) + 1)\n : new uint8Array(0)\n };\n }\n}\n","/**\n * @import { builderContext } from '../builder.js'\n * @import { DictionaryType, ExtractionOptions } from '../../types.js'\n */\nimport { Column } from '../../column.js';\nimport { keyString } from '../../util/strings.js';\nimport { batchType } from '../../batch-type.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Create a context object for managing dictionary builders.\n */\nexport function dictionaryContext() {\n const idMap = new Map;\n const dicts = new Set;\n return {\n /**\n * Get a dictionary values builder for the given dictionary type.\n * @param {DictionaryType} type\n * The dictionary type.\n * @param {*} ctx The builder context.\n * @returns {ReturnType<dictionaryValues>}\n */\n get(type, ctx) {\n // if a dictionary has a non-negative id, assume it was set\n // intentionally and track it for potential reuse across columns\n // otherwise the dictionary is used for a single column only\n const id = type.id;\n if (id >= 0 && idMap.has(id)) {\n return idMap.get(id);\n } else {\n const dict = dictionaryValues(type, ctx);\n if (id >= 0) idMap.set(id, dict);\n dicts.add(dict);\n return dict;\n }\n },\n /**\n * Finish building dictionary values columns and assign them to\n * their corresponding dictionary batches.\n * @param {ExtractionOptions} options\n */\n finish(options) {\n dicts.forEach(dict => dict.finish(options));\n }\n };\n}\n\n/**\n * Builder helper for creating dictionary values.\n * @param {DictionaryType} type\n * The dictionary data type.\n * @param {ReturnType<builderContext>} ctx\n * The builder context.\n */\nexport function dictionaryValues(type, ctx) {\n const keys = Object.create(null);\n const values = ctx.builder(type.dictionary);\n const batches = [];\n\n values.init();\n let index = -1;\n\n return {\n type,\n values,\n\n add(batch) {\n batches.push(batch);\n return batch;\n },\n\n key(value) {\n const v = keyString(value);\n let k = keys[v];\n if (k === undefined) {\n keys[v] = k = ++index;\n values.set(value, k);\n }\n return k;\n },\n\n finish(options) {\n const valueType = type.dictionary;\n const batch = new (batchType(valueType, options))(values.done());\n const dictionary = new Column([batch]);\n batches.forEach(batch => batch.setDictionary(dictionary));\n }\n };\n}\n\n/**\n * Builder for dictionary-typed data batches.\n */\nexport class DictionaryBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.dict = ctx.dictionary(type);\n }\n\n init() {\n this.values = buffer(this.type.indices.values);\n return super.init();\n }\n\n set(value, index) {\n if (super.set(value, index)) {\n this.values.set(this.dict.key(value), index);\n }\n }\n\n done() {\n return {\n ...super.done(),\n values: this.values.array(this.index + 1)\n };\n }\n\n batch() {\n // register batch with dictionary\n // batch will be updated when the dictionary is finished\n return this.dict.add(super.batch());\n }\n}\n","/**\n * @import { DataType, IntType, UnionType } from '../types.js'\n */\nimport { bool, dateDay, dictionary, field, fixedSizeList, float64, int16, int32, int64, int8, list, nullType, struct, timestamp, utf8 } from '../data-types.js';\nimport { isArray } from '../util/arrays.js';\n\n/**\n * Infer the data type for a given input array.\n * @param {(visitor: (value: any) => void) => void} visit\n * A function that applies a callback to successive data values.\n * @returns {DataType} The data type.\n */\nexport function inferType(visit) {\n const profile = profiler();\n visit(value => profile.add(value));\n return profile.type();\n}\n\nfunction profiler() {\n let length = 0;\n let nullCount = 0;\n let boolCount = 0;\n let numberCount = 0;\n let intCount = 0;\n let bigintCount = 0;\n let dateCount = 0;\n let dayCount = 0;\n let stringCount = 0;\n let arrayCount = 0;\n let structCount = 0;\n let min = Infinity;\n let max = -Infinity;\n let minLength = Infinity;\n let maxLength = -Infinity;\n let minBigInt;\n let maxBigInt;\n let arrayProfile;\n let structProfiles = {};\n\n return {\n add(value) {\n length++;\n if (value == null) {\n nullCount++;\n return;\n }\n switch (typeof value) {\n case 'string':\n stringCount++;\n break;\n case 'number':\n numberCount++;\n if (value < min) min = value;\n if (value > max) max = value;\n if (Number.isInteger(value)) intCount++;\n break;\n case 'bigint':\n bigintCount++;\n if (minBigInt === undefined) {\n minBigInt = maxBigInt = value;\n } else {\n if (value < minBigInt) minBigInt = value;\n if (value > maxBigInt) maxBigInt = value;\n }\n break;\n case 'boolean':\n boolCount++;\n break;\n case 'object':\n if (value instanceof Date) {\n dateCount++;\n // 1 day = 1000ms * 60s * 60min * 24hr = 86400000\n if ((+value % 864e5) === 0) dayCount++;\n } else if (isArray(value)) {\n arrayCount++;\n const len = value.length;\n if (len < minLength) minLength = len;\n if (len > maxLength) maxLength = len;\n arrayProfile ??= profiler();\n value.forEach(arrayProfile.add);\n } else {\n structCount++;\n for (const key in value) {\n const fieldProfiler = structProfiles[key]\n ?? (structProfiles[key] = profiler());\n fieldProfiler.add(value[key]);\n }\n }\n }\n },\n type() {\n const valid = length - nullCount;\n return valid === 0 ? nullType()\n : intCount === valid ? intType(min, max)\n : numberCount === valid ? float64()\n : bigintCount === valid ? bigintType(minBigInt, maxBigInt)\n : boolCount === valid ? bool()\n : dayCount === valid ? dateDay()\n : dateCount === valid ? timestamp()\n : stringCount === valid ? dictionary(utf8())\n : arrayCount === valid ? arrayType(arrayProfile.type(), minLength, maxLength)\n : structCount === valid ? struct(\n Object.entries(structProfiles).map(_ => field(_[0], _[1].type()))\n )\n : unionType();\n }\n };\n}\n\n/**\n * Return a list or fixed list type.\n * @param {DataType} type The child data type.\n * @param {number} minLength The minumum list length.\n * @param {number} maxLength The maximum list length.\n * @returns {DataType} The data type.\n */\nfunction arrayType(type, minLength, maxLength) {\n return maxLength === minLength\n ? fixedSizeList(type, minLength)\n : list(type);\n}\n\n/**\n * @param {number} min\n * @param {number} max\n * @returns {DataType}\n */\nfunction intType(min, max) {\n const v = Math.max(Math.abs(min) - 1, max);\n return v < (1 << 7) ? int8()\n : v < (1 << 15) ? int16()\n : v < (2 ** 31) ? int32()\n : float64();\n}\n\n/**\n * @param {bigint} min\n * @param {bigint} max\n * @returns {IntType}\n */\nfunction bigintType(min, max) {\n const v = -min > max ? -min - 1n : max;\n if (v >= 2 ** 63) {\n throw new Error(`BigInt exceeds 64 bits: ${v}`);\n }\n return int64();\n}\n\n/**\n * @returns {UnionType}\n */\nfunction unionType() {\n throw new Error('Mixed types detected, please define a union type.');\n}\n","import { toOffset } from '../../util/numbers.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for batches of binary-typed data.\n */\nexport class BinaryBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.toOffset = toOffset(type.offsets);\n }\n\n init() {\n this.offsets = buffer(this.type.offsets);\n this.values = buffer();\n this.pos = 0;\n return super.init();\n }\n\n set(value, index) {\n const { offsets, values, toOffset } = this;\n if (super.set(value, index)) {\n values.write(value, this.pos);\n this.pos += value.length;\n }\n offsets.set(toOffset(this.pos), index + 1);\n }\n\n done() {\n return {\n ...super.done(),\n offsets: this.offsets.array(this.index + 2),\n values: this.values.array(this.pos + 1)\n };\n }\n}\n","import { bitmap } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for batches of bool-typed data.\n */\nexport class BoolBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n }\n\n init() {\n this.values = bitmap();\n return super.init();\n }\n\n set(value, index) {\n super.set(value, index);\n if (value) this.values.set(index);\n }\n\n done() {\n return {\n ...super.done(),\n values: this.values.array((this.index >> 3) + 1)\n }\n }\n}\n","import { toDecimal } from '../../util/numbers.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for batches of decimal-typed data (64-bits or more).\n */\nexport class DecimalBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.scale = 10 ** type.scale;\n this.stride = type.bitWidth >> 6;\n }\n\n init() {\n this.values = buffer(this.type.values);\n return super.init();\n }\n\n set(value, index) {\n const { scale, stride, values } = this;\n if (super.set(value, index)) {\n values.prep((index + 1) * stride);\n // @ts-ignore\n toDecimal(value, values.buf, index * stride, stride, scale);\n }\n }\n\n done() {\n const { index, stride, values } = this;\n return {\n ...super.done(),\n values: values.array((index + 1) * stride)\n };\n }\n}\n","import { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for fixed-size-binary-typed data batches.\n */\nexport class FixedSizeBinaryBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.stride = type.stride;\n }\n\n init() {\n this.values = buffer();\n return super.init();\n }\n\n set(value, index) {\n if (super.set(value, index)) {\n this.values.write(value, index * this.stride);\n }\n }\n\n done() {\n const { stride, values } = this;\n return {\n ...super.done(),\n values: values.array(stride * (this.index + 1))\n };\n }\n}\n","import { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for fixed-size-list-typed data batches.\n */\nexport class FixedSizeListBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.child = ctx.builder(this.type.children[0].type);\n this.stride = type.stride;\n }\n\n init() {\n this.child.init();\n return super.init();\n }\n\n set(value, index) {\n const { child, stride } = this;\n const base = index * stride;\n if (super.set(value, index)) {\n for (let i = 0; i < stride; ++i) {\n child.set(value[i], base + i);\n }\n } else {\n child.index = base + stride;\n }\n }\n\n done() {\n const { child } = this;\n return {\n ...super.done(),\n children: [ child.batch() ]\n };\n }\n}\n","import { toMonthDayNanoBytes } from '../../util/numbers.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for day/time interval-typed data batches.\n */\nexport class IntervalDayTimeBuilder extends ValidityBuilder {\n init() {\n this.values = buffer(this.type.values);\n return super.init();\n }\n\n set(value, index) {\n if (super.set(value, index)) {\n const i = index << 1;\n this.values.set(value[0], i);\n this.values.set(value[1], i + 1);\n }\n }\n\n done() {\n return {\n ...super.done(),\n values: this.values.array((this.index + 1) << 1)\n }\n }\n}\n\n/**\n * Builder for month/day/nano interval-typed data batches.\n */\nexport class IntervalMonthDayNanoBuilder extends ValidityBuilder {\n init() {\n this.values = buffer();\n return super.init();\n }\n\n set(value, index) {\n if (super.set(value, index)) {\n this.values.write(toMonthDayNanoBytes(value), index << 4);\n }\n }\n\n done() {\n return {\n ...super.done(),\n values: this.values.array((this.index + 1) << 4)\n }\n }\n}\n","import { toOffset } from '../../util/numbers.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Abstract class for building list data batches.\n */\nexport class AbstractListBuilder extends ValidityBuilder {\n constructor(type, ctx, child) {\n super(type, ctx);\n this.child = child;\n }\n\n init() {\n this.child.init();\n const offsetType = this.type.offsets;\n this.offsets = buffer(offsetType);\n this.toOffset = toOffset(offsetType);\n this.pos = 0;\n return super.init();\n }\n\n done() {\n return {\n ...super.done(),\n offsets: this.offsets.array(this.index + 2),\n children: [ this.child.batch() ]\n };\n }\n}\n\n/**\n * Builder for list-typed data batches.\n */\nexport class ListBuilder extends AbstractListBuilder {\n constructor(type, ctx) {\n super(type, ctx, ctx.builder(type.children[0].type));\n }\n\n set(value, index) {\n const { child, offsets, toOffset } = this;\n if (super.set(value, index)) {\n value.forEach(v => child.set(v, this.pos++));\n }\n offsets.set(toOffset(this.pos), index + 1);\n }\n}\n","import { ValidityBuilder } from './validity.js';\n\n/**\n * Abstract class for building list-typed data batches.\n */\nexport class AbstractStructBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.children = type.children.map(c => ctx.builder(c.type));\n }\n\n init() {\n this.children.forEach(c => c.init());\n return super.init();\n }\n\n done() {\n const { children } = this;\n children.forEach(c => c.index = this.index);\n return {\n ...super.done(),\n children: children.map(c => c.batch())\n };\n }\n}\n\n/**\n * Builder for struct-typed data batches.\n */\nexport class StructBuilder extends AbstractStructBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.setters = this.children.map((child, i) => {\n const name = type.children[i].name;\n return (value, index) => child.set(value?.[name], index);\n });\n }\n\n set(value, index) {\n super.set(value, index);\n const setters = this.setters;\n for (let i = 0; i < setters.length; ++i) {\n setters[i](value, index);\n }\n }\n}\n","import { AbstractListBuilder } from './list.js';\nimport { AbstractStructBuilder } from './struct.js';\n\n/**\n * Builder for map-typed data batches.\n */\nexport class MapBuilder extends AbstractListBuilder {\n constructor(type, ctx) {\n super(type, ctx, new MapStructBuilder(type.children[0].type, ctx));\n }\n\n set(value, index) {\n const { child, offsets, toOffset } = this;\n if (super.set(value, index)) {\n for (const keyValuePair of value) {\n child.set(keyValuePair, this.pos++);\n }\n }\n offsets.set(toOffset(this.pos), index + 1);\n }\n}\n\n/**\n * Builder for key-value struct batches within a map.\n */\nclass MapStructBuilder extends AbstractStructBuilder {\n set(value, index) {\n super.set(value, index);\n const [key, val] = this.children;\n key.set(value[0], index);\n val.set(value[1], index);\n }\n}\n","import { keyString } from '../../util/strings.js';\nimport { BatchBuilder } from './batch.js';\n\nconst NO_VALUE = {}; // empty object that fails strict equality\n\n/**\n * Builder for run-end-encoded-typed data batches.\n */\nexport class RunEndEncodedBuilder extends BatchBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.children = type.children.map(c => ctx.builder(c.type));\n }\n\n init() {\n this.pos = 0;\n this.key = null;\n this.value = NO_VALUE;\n this.children.forEach(c => c.init());\n return super.init();\n }\n\n next() {\n const [runs, vals] = this.children;\n runs.set(this.index + 1, this.pos);\n vals.set(this.value, this.pos++);\n }\n\n set(value, index) {\n // perform fast strict equality test\n if (value !== this.value) {\n // if no match, fallback to key string test\n const key = keyString(value);\n if (key !== this.key) {\n // if key doesn't match, write prior run and update\n if (this.key) this.next();\n this.key = key;\n this.value = value;\n }\n }\n this.index = index;\n }\n\n done() {\n this.next();\n const { children, index, type } = this;\n return {\n length: index + 1,\n nullCount: 0,\n type,\n children: children.map(c => c.batch())\n };\n }\n}\n","import { int8Array } from '../../util/arrays.js';\nimport { BatchBuilder } from './batch.js';\nimport { buffer } from '../buffer.js';\n\n/**\n * Abstract class for building union-typed data batches.\n */\nexport class AbstractUnionBuilder extends BatchBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.children = type.children.map(c => ctx.builder(c.type));\n this.typeMap = type.typeMap;\n this.lookup = type.typeIdForValue;\n }\n\n init() {\n this.nullCount = 0;\n this.typeIds = buffer(int8Array);\n this.children.forEach(c => c.init());\n return super.init();\n }\n\n set(value, index) {\n const { children, lookup, typeMap, typeIds } = this;\n this.index = index;\n const typeId = lookup(value, index);\n const child = children[typeMap[typeId]];\n typeIds.set(typeId, index);\n if (value == null) ++this.nullCount;\n // @ts-ignore\n this.update(value, index, child);\n }\n\n done() {\n const { children, nullCount, type, typeIds } = this;\n const length = this.index + 1;\n return {\n length,\n nullCount,\n type,\n typeIds: typeIds.array(length),\n children: children.map(c => c.batch())\n };\n }\n}\n\n/**\n * Builder for sparse union-typed data batches.\n */\nexport class SparseUnionBuilder extends AbstractUnionBuilder {\n update(value, index, child) {\n // update selected child with value\n // then set all other children to null\n child.set(value, index);\n this.children.forEach(c => { if (c !== child) c.set(null, index) });\n }\n}\n\n/**\n * Builder for dense union-typed data batches.\n */\nexport class DenseUnionBuilder extends AbstractUnionBuilder {\n init() {\n this.offsets = buffer(this.type.offsets);\n return super.init();\n }\n\n update(value, index, child) {\n const offset = child.index + 1;\n child.set(value, offset);\n this.offsets.set(offset, index);\n }\n\n done() {\n return {\n ...super.done(),\n offsets: this.offsets.array(this.index + 1)\n };\n }\n}\n","import { encodeUtf8 } from '../../util/strings.js';\nimport { BinaryBuilder } from './binary.js';\n\n/**\n * Builder for utf8-typed data batches.\n */\nexport class Utf8Builder extends BinaryBuilder {\n set(value, index) {\n super.set(value && encodeUtf8(value), index);\n }\n}\n","import { toBigInt } from '../../util/numbers.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for data batches that can be accessed directly as typed arrays.\n */\nexport class DirectBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.values = buffer(type.values);\n }\n\n init() {\n this.values = buffer(this.type.values);\n return super.init();\n }\n\n /**\n * @param {*} value\n * @param {number} index\n * @returns {boolean | void}\n */\n set(value, index) {\n if (super.set(value, index)) {\n this.values.set(value, index);\n }\n }\n\n done() {\n return {\n ...super.done(),\n values: this.values.array(this.index + 1)\n };\n }\n}\n\n/**\n * Builder for int64/uint64 data batches written as bigints.\n */\nexport class Int64Builder extends DirectBuilder {\n set(value, index) {\n super.set(value == null ? value : toBigInt(value), index);\n }\n}\n\n/**\n * Builder for data batches whose values must pass through a transform\n * function prior to be written to a backing buffer.\n */\nexport class TransformBuilder extends DirectBuilder {\n constructor(type, ctx, transform) {\n super(type, ctx);\n this.transform = transform;\n }\n set(value, index) {\n super.set(value == null ? value : this.transform(value), index);\n }\n}\n","/**\n * @import { DataType, ExtractionOptions } from '../types.js'\n * @import { BatchBuilder } from './builders/batch.js'\n */\nimport { batchType } from '../batch-type.js';\nimport { IntervalUnit, Type } from '../constants.js';\nimport { invalidDataType } from '../data-types.js';\nimport { isInt64ArrayType } from '../util/arrays.js';\nimport { toBigInt, toDateDay, toDecimal32, toFloat16, toTimestamp } from '../util/numbers.js';\nimport { BinaryBuilder } from './builders/binary.js';\nimport { BoolBuilder } from './builders/bool.js';\nimport { DecimalBuilder } from './builders/decimal.js';\nimport { DictionaryBuilder, dictionaryContext } from './builders/dictionary.js';\nimport { FixedSizeBinaryBuilder } from './builders/fixed-size-binary.js';\nimport { FixedSizeListBuilder } from './builders/fixed-size-list.js';\nimport { IntervalDayTimeBuilder, IntervalMonthDayNanoBuilder } from './builders/interval.js';\nimport { ListBuilder } from './builders/list.js';\nimport { MapBuilder } from './builders/map.js';\nimport { RunEndEncodedBuilder } from './builders/run-end-encoded.js';\nimport { StructBuilder } from './builders/struct.js';\nimport { DenseUnionBuilder, SparseUnionBuilder } from './builders/union.js';\nimport { Utf8Builder } from './builders/utf8.js';\nimport { DirectBuilder, Int64Builder, TransformBuilder } from './builders/values.js';\n\n/**\n * Create a context object for shared builder state.\n * @param {ExtractionOptions} [options] Batch extraction options.\n* @param {ReturnType<dictionaryContext>} [dictionaries]\n * Context object for tracking dictionaries.\n */\nexport function builderContext(\n options = {},\n dictionaries = dictionaryContext()\n) {\n return {\n batchType: type => batchType(type, options),\n builder(type) { return builder(type, this); },\n dictionary(type) { return dictionaries.get(type, this); },\n finish: () => dictionaries.finish(options)\n };\n}\n\n/**\n * Returns a batch builder for the given type and builder context.\n * @param {DataType} type A data type.\n * @param {ReturnType<builderContext>} [ctx] A builder context.\n * @returns {BatchBuilder}\n */\nexport function builder(type, ctx = builderContext()) {\n const { typeId } = type;\n switch (typeId) {\n case Type.Int:\n case Type.Time:\n case Type.Duration:\n return isInt64ArrayType(type.values)\n ? new Int64Builder(type, ctx)\n : new DirectBuilder(type, ctx);\n case Type.Float:\n return type.precision\n ? new DirectBuilder(type, ctx)\n : new TransformBuilder(type, ctx, toFloat16)\n case Type.Binary:\n case Type.LargeBinary:\n return new BinaryBuilder(type, ctx);\n case Type.Utf8:\n case Type.LargeUtf8:\n return new Utf8Builder(type, ctx);\n case Type.Bool:\n return new BoolBuilder(type, ctx);\n case Type.Decimal:\n return type.bitWidth === 32\n ? new TransformBuilder(type, ctx, toDecimal32(type.scale))\n : new DecimalBuilder(type, ctx);\n case Type.Date:\n return new TransformBuilder(type, ctx, type.unit ? toBigInt : toDateDay);\n case Type.Timestamp:\n return new TransformBuilder(type, ctx, toTimestamp(type.unit));\n case Type.Interval:\n switch (type.unit) {\n case IntervalUnit.DAY_TIME:\n return new IntervalDayTimeBuilder(type, ctx);\n case IntervalUnit.MONTH_DAY_NANO:\n return new IntervalMonthDayNanoBuilder(type, ctx);\n }\n // case IntervalUnit.YEAR_MONTH:\n return new DirectBuilder(type, ctx);\n case Type.List:\n case Type.LargeList:\n return new ListBuilder(type, ctx);\n case Type.Struct:\n return new StructBuilder(type, ctx);\n case Type.Union:\n return type.mode\n ? new DenseUnionBuilder(type, ctx)\n : new SparseUnionBuilder(type, ctx);\n case Type.FixedSizeBinary:\n return new FixedSizeBinaryBuilder(type, ctx);\n case Type.FixedSizeList:\n return new FixedSizeListBuilder(type, ctx);\n case Type.Map:\n return new MapBuilder(type, ctx);\n case Type.RunEndEncoded:\n return new RunEndEncodedBuilder(type, ctx);\n\n case Type.Dictionary:\n return new DictionaryBuilder(type, ctx);\n }\n // case Type.BinaryView:\n // case Type.Utf8View:\n // case Type.ListView:\n // case Type.LargeListView:\n throw new Error(invalidDataType(typeId));\n}\n","/**\n * @import { ColumnBuilderOptions, DataType, NullType } from '../types.js'\n * @import { dictionaryContext } from './builders/dictionary.js'\n */\nimport { NullBatch } from '../batch.js';\nimport { Column } from '../column.js';\nimport { inferType } from './infer-type.js';\nimport { builder, builderContext } from './builder.js';\nimport { Type } from '../constants.js';\nimport { isIterable } from '../util/objects.js';\n\n/**\n * Create a new column by iterating over provided values.\n * @template T\n * @param {Iterable | ((callback: (value: any) => void) => void)} values\n * Either an iterable object or a visitor function that applies a callback\n * to successive data values (akin to Array.forEach).\n * @param {DataType} [type] The data type.\n * @param {ColumnBuilderOptions} [options]\n * Builder options for the generated column.\n * @param {ReturnType<dictionaryContext>} [dicts]\n * Dictionary context object, for internal use only.\n * @returns {Column<T>} The generated column.\n */\nexport function columnFromValues(values, type, options = {}, dicts) {\n const visit = isIterable(values)\n ? callback => { for (const value of values) callback(value); }\n : values;\n\n type ??= inferType(visit);\n const { maxBatchRows = Infinity, ...opt } = options;\n let data;\n\n if (type.typeId === Type.Null) {\n let length = 0;\n visit(() => ++length);\n data = nullBatches(type, length, maxBatchRows);\n } else {\n const ctx = builderContext(opt, dicts);\n const b = builder(type, ctx).init();\n const next = b => data.push(b.batch());\n data = [];\n\n let row = 0;\n visit(value => {\n b.set(value, row++);\n if (row >= maxBatchRows) {\n next(b);\n row = 0;\n }\n });\n if (row) next(b);\n\n // resolve dictionaries\n ctx.finish();\n }\n\n return new Column(data, type);\n}\n\n/**\n * Create null batches with the given batch size limit.\n * @param {NullType} type The null data type.\n * @param {number} length The total column length.\n * @param {number} limit The maximum batch size.\n * @returns {NullBatch[]} The null batches.\n */\nfunction nullBatches(type, length, limit) {\n const data = [];\n const batch = length => new NullBatch({ length, nullCount: length, type });\n const numBatches = Math.floor(length / limit);\n for (let i = 0; i < numBatches; ++i) {\n data.push(batch(limit));\n }\n const rem = length % limit;\n if (rem) data.push(batch(rem));\n return data;\n}\n","/**\n * @import { ColumnBuilderOptions, DataType, TypedArray, TypedArrayConstructor } from '../types.js'\n * @import { dictionaryContext } from './builders/dictionary.js'\n */\nimport { float32Array, float64Array, int16Array, int32Array, int64Array, int8Array, isInt64ArrayType, isTypedArray, uint16Array, uint32Array, uint64Array, uint8Array } from '../util/arrays.js';\nimport { DirectBatch, Int64Batch } from '../batch.js';\nimport { Column } from '../column.js';\nimport { float32, float64, int16, int32, int64, int8, uint16, uint32, uint64, uint8 } from '../data-types.js';\nimport { columnFromValues } from './column-from-values.js';\n\n/**\n * Create a new column from a provided data array.\n * @template T\n * @param {Array | TypedArray} array The input data.\n * @param {DataType} [type] The data type.\n * If not specified, type inference is attempted.\n * @param {ColumnBuilderOptions} [options]\n * Builder options for the generated column.\n * @param {ReturnType<dictionaryContext>} [dicts]\n * Builder context object, for internal use only.\n * @returns {Column<T>} The generated column.\n */\nexport function columnFromArray(array, type, options = {}, dicts) {\n return !type && isTypedArray(array)\n ? columnFromTypedArray(array, options)\n : columnFromValues(v => array.forEach(v), type, options, dicts);\n}\n\n/**\n * Create a new column from a typed array input.\n * @template T\n * @param {TypedArray} values The input data.\n * @param {ColumnBuilderOptions} options\n * Builder options for the generated column.\n * @returns {Column<T>} The generated column.\n */\nfunction columnFromTypedArray(values, { maxBatchRows, useBigInt }) {\n const arrayType = /** @type {TypedArrayConstructor} */ (\n values.constructor\n );\n const type = typeForTypedArray(arrayType);\n const length = values.length;\n const limit = Math.min(maxBatchRows || Infinity, length);\n const numBatches = Math.floor(length / limit);\n\n const batches = [];\n const batchType = isInt64ArrayType(arrayType) && !useBigInt ? Int64Batch : DirectBatch;\n const add = (start, end) => batches.push(new batchType({\n length: end - start,\n nullCount: 0,\n type,\n validity: new uint8Array(0),\n values: values.subarray(start, end)\n }));\n\n let idx = 0;\n for (let i = 0; i < numBatches; ++i) add(idx, idx += limit);\n if (idx < length) add(idx, length);\n\n return new Column(batches);\n}\n\n/**\n * Return an Arrow data type for a given typed array type.\n * @param {TypedArrayConstructor} arrayType The typed array type.\n * @returns {DataType} The data type.\n */\nfunction typeForTypedArray(arrayType) {\n switch (arrayType) {\n case float32Array: return float32();\n case float64Array: return float64();\n case int8Array: return int8();\n case int16Array: return int16();\n case int32Array: return int32();\n case int64Array: return int64();\n case uint8Array: return uint8();\n case uint16Array: return uint16();\n case uint32Array: return uint32();\n case uint64Array: return uint64();\n }\n}\n","/**\n * @import { Column } from '../column.js'\n */\nimport { Endianness, Version } from '../constants.js';\nimport { field } from '../data-types.js';\nimport { Table } from '../table.js';\n\n/**\n * Create a new table from a collection of columns. Columns are assumed\n * to have the same record batch sizes.\n * @param {[string, Column][] | Record<string, Column>} data The columns,\n * as an object with name keys, or an array of [name, column] pairs.\n * @param {boolean} [useProxy] Flag indicating if row proxy\n * objects should be used to represent table rows (default `false`).\n * @returns {Table} The new table.\n */\nexport function tableFromColumns(data, useProxy) {\n const fields = [];\n const entries = Array.isArray(data) ? data : Object.entries(data);\n const length = entries[0]?.[1].length;\n\n const columns = entries.map(([name, col]) => {\n if (col.length !== length) {\n throw new Error('All columns must have the same length.');\n }\n fields.push(field(name, col.type));\n return col;\n });\n\n const schema = {\n version: Version.V5,\n endianness: Endianness.Little,\n fields,\n metadata: null\n };\n\n return new Table(schema, columns, useProxy);\n}\n","/**\n * @import { Column } from '../column.js'\n * @import { TableBuilderOptions, TypedArray } from '../types.js'\n * @import { Table } from '../table.js'\n */\nimport { dictionaryContext } from './builders/dictionary.js';\nimport { columnFromArray } from './column-from-array.js';\nimport { tableFromColumns } from './table-from-columns.js';\n\n/**\n * Create a new table from the provided arrays.\n * @param {[string, Array | TypedArray][]\n * | Record<string, Array | TypedArray>} data\n * The input data as a collection of named arrays.\n * @param {TableBuilderOptions} options\n * Table builder options, including an optional type map.\n * @returns {Table} The new table.\n */\nexport function tableFromArrays(data, options = {}) {\n const { types = {}, ...opt } = options;\n const dicts = dictionaryContext();\n const entries = Array.isArray(data) ? data : Object.entries(data);\n const columns = entries.map(([name, array]) =>\n /** @type {[string, Column]} */ (\n [ name, columnFromArray(array, types[name], opt, dicts)]\n ));\n return tableFromColumns(columns, options.useProxy);\n}\n","/**\n * Async Prepared Statement class\n *\n * @packageDocumentation\n */\n\nimport { DuckDBError } from '../errors.js';\nimport {\n type PreparedStatementBinding,\n type QueryResultResponse,\n type RowsChangedResponse,\n WorkerRequestType,\n} from '../worker/protocol.js';\nimport type { DuckDB } from './bindings.js';\n\n/**\n * A prepared SQL statement with parameter binding.\n *\n * Prepared statements are more secure (prevent SQL injection) and can be\n * more efficient when executing the same query multiple times with different parameters.\n *\n * Bind methods are synchronous (store locally), while run() and execute() are async\n * (send to worker).\n *\n * @category Query Results\n * @example\n * ```typescript\n * const stmt = await conn.prepare('SELECT * FROM users WHERE id = ? AND active = ?');\n * stmt.bindInt32(1, userId);\n * stmt.bindBoolean(2, true);\n * const result = await stmt.run();\n * await stmt.close();\n * ```\n */\nexport class PreparedStatement {\n private db: DuckDB;\n private connectionId: number;\n private preparedStatementId: number;\n private closed = false;\n private bindings: PreparedStatementBinding[] = [];\n\n /**\n * @internal\n */\n constructor(db: DuckDB, connectionId: number, preparedStatementId: number, _sql: string) {\n this.db = db;\n this.connectionId = connectionId;\n this.preparedStatementId = preparedStatementId;\n // sql kept for future debugging/logging purposes\n }\n\n private checkClosed(): void {\n if (this.closed) {\n throw new DuckDBError('Statement is closed');\n }\n }\n\n /**\n * Clear all parameter bindings.\n */\n clearBindings(): void {\n this.checkClosed();\n this.bindings = [];\n }\n\n // ============================================================================\n // Bind methods (synchronous - store locally)\n // ============================================================================\n\n /**\n * Bind a NULL value to a parameter.\n *\n * @param index - 1-based parameter index\n */\n bindNull(index: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'null', value: null });\n }\n\n /**\n * Bind a boolean value to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The boolean value\n */\n bindBoolean(index: number, value: boolean): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'boolean', value });\n }\n\n /**\n * Bind an 8-bit signed integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (-128 to 127)\n */\n bindInt8(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'int8', value });\n }\n\n /**\n * Bind a 16-bit signed integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (-32768 to 32767)\n */\n bindInt16(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'int16', value });\n }\n\n /**\n * Bind a 32-bit signed integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value\n */\n bindInt32(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'int32', value });\n }\n\n /**\n * Bind a 64-bit signed integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (BigInt or number)\n */\n bindInt64(index: number, value: bigint | number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'int64', value });\n }\n\n /**\n * Bind an 8-bit unsigned integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (0 to 255)\n */\n bindUInt8(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'uint8', value });\n }\n\n /**\n * Bind a 16-bit unsigned integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (0 to 65535)\n */\n bindUInt16(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'uint16', value });\n }\n\n /**\n * Bind a 32-bit unsigned integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value\n */\n bindUInt32(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'uint32', value });\n }\n\n /**\n * Bind a 64-bit unsigned integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (BigInt or number)\n */\n bindUInt64(index: number, value: bigint | number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'uint64', value });\n }\n\n /**\n * Bind a 32-bit float to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The float value\n */\n bindFloat(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'float', value });\n }\n\n /**\n * Bind a 64-bit double to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The double value\n */\n bindDouble(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'double', value });\n }\n\n /**\n * Bind a string value to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The string value\n */\n bindVarchar(index: number, value: string): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'varchar', value });\n }\n\n /**\n * Bind a blob (binary) value to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The binary data\n */\n bindBlob(index: number, value: Uint8Array): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'blob', value });\n }\n\n // ============================================================================\n // Execute methods (async - send to worker)\n // ============================================================================\n\n /**\n * Execute the prepared statement and return results.\n *\n * @returns Promise resolving to array of result rows as objects\n *\n * @example\n * ```typescript\n * const stmt = await conn.prepare('SELECT * FROM users WHERE id = ?');\n * stmt.bindInt32(1, 42);\n * const rows = await stmt.run();\n * ```\n */\n async run<T = Record<string, unknown>>(): Promise<T[]> {\n this.checkClosed();\n\n const response = await this.db.postTask<QueryResultResponse>(WorkerRequestType.RUN_PREPARED, {\n connectionId: this.connectionId,\n preparedStatementId: this.preparedStatementId,\n bindings: this.bindings,\n });\n\n // Convert row arrays to objects\n const { columns, rows } = response;\n return rows.map((row) => {\n const obj: Record<string, unknown> = {};\n for (let i = 0; i < columns.length; i++) {\n obj[columns[i].name] = row[i];\n }\n return obj as T;\n });\n }\n\n /**\n * Execute the prepared statement and return the number of affected rows.\n *\n * Use this for INSERT, UPDATE, DELETE statements.\n *\n * @returns Promise resolving to the number of rows affected\n *\n * @example\n * ```typescript\n * const stmt = await conn.prepare('DELETE FROM users WHERE id = ?');\n * stmt.bindInt32(1, 42);\n * const deleted = await stmt.execute();\n * ```\n */\n async execute(): Promise<number> {\n this.checkClosed();\n\n const response = await this.db.postTask<RowsChangedResponse>(\n WorkerRequestType.EXECUTE_PREPARED,\n {\n connectionId: this.connectionId,\n preparedStatementId: this.preparedStatementId,\n bindings: this.bindings,\n },\n );\n\n return response.rowsChanged;\n }\n\n /**\n * Close the prepared statement and release resources.\n */\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n await this.db.postTask(WorkerRequestType.CLOSE_PREPARED, {\n connectionId: this.connectionId,\n preparedStatementId: this.preparedStatementId,\n });\n this.closed = true;\n }\n}\n","/**\n * Data Chunk class\n *\n * @packageDocumentation\n */\n\nimport type { ColumnInfo } from '../types.js';\n\n/**\n * A chunk of data from a streaming query result.\n *\n * DataChunks contain a fixed number of rows and provide methods to\n * access the data in various formats.\n *\n * @category Query Results\n * @example\n * ```typescript\n * for await (const chunk of stream) {\n * console.log(`Chunk has ${chunk.rowCount} rows`);\n *\n * // Get as array of objects\n * for (const row of chunk.toArray()) {\n * console.log(row);\n * }\n *\n * // Or access raw columnar data\n * const column = chunk.getColumn(0);\n * console.log(column);\n * }\n * ```\n */\nexport class DataChunk {\n private columns: ColumnInfo[];\n private rows: unknown[][];\n private _rowCount: number;\n\n /**\n * @internal\n */\n constructor(columns: ColumnInfo[], rows: unknown[][], rowCount: number) {\n this.columns = columns;\n this.rows = rows;\n this._rowCount = rowCount;\n }\n\n /**\n * Get the number of rows in this chunk.\n */\n get rowCount(): number {\n return this._rowCount;\n }\n\n /**\n * Get the number of columns.\n */\n get columnCount(): number {\n return this.columns.length;\n }\n\n /**\n * Get the column information.\n */\n getColumns(): ColumnInfo[] {\n return this.columns;\n }\n\n /**\n * Get the raw row data.\n *\n * Each row is an array of values in column order.\n */\n getRows(): unknown[][] {\n return this.rows;\n }\n\n /**\n * Get a single column's values.\n *\n * @param index - The 0-based column index\n * @returns Array of values for that column\n */\n getColumn(index: number): unknown[] {\n if (index < 0 || index >= this.columns.length) {\n throw new Error(`Column index ${index} out of bounds`);\n }\n return this.rows.map((row) => row[index]);\n }\n\n /**\n * Get a single column's values by name.\n *\n * @param name - The column name\n * @returns Array of values for that column\n */\n getColumnByName(name: string): unknown[] {\n const index = this.columns.findIndex((col) => col.name === name);\n if (index === -1) {\n throw new Error(`Column \"${name}\" not found`);\n }\n return this.getColumn(index);\n }\n\n /**\n * Get a single row.\n *\n * @param index - The 0-based row index\n * @returns The row as an array of values\n */\n getRow(index: number): unknown[] {\n if (index < 0 || index >= this._rowCount) {\n throw new Error(`Row index ${index} out of bounds`);\n }\n return this.rows[index];\n }\n\n /**\n * Get a single row as an object.\n *\n * @param index - The 0-based row index\n * @returns The row as an object with column names as keys\n */\n getRowObject<T = Record<string, unknown>>(index: number): T {\n const row = this.getRow(index);\n const obj: Record<string, unknown> = {};\n for (let i = 0; i < this.columns.length; i++) {\n obj[this.columns[i].name] = row[i];\n }\n return obj as T;\n }\n\n /**\n * Convert all rows to an array of objects.\n *\n * @returns Array of row objects with column names as keys\n */\n toArray<T = Record<string, unknown>>(): T[] {\n return this.rows.map((row) => {\n const obj: Record<string, unknown> = {};\n for (let i = 0; i < this.columns.length; i++) {\n obj[this.columns[i].name] = row[i];\n }\n return obj as T;\n });\n }\n\n /**\n * Iterate over rows as objects.\n */\n *[Symbol.iterator](): Iterator<Record<string, unknown>> {\n for (let i = 0; i < this._rowCount; i++) {\n yield this.getRowObject(i);\n }\n }\n}\n","/**\n * Async Streaming Result class\n *\n * @packageDocumentation\n */\n\nimport { type Table, tableFromArrays } from '@uwdata/flechette';\nimport { DuckDBError } from '../errors.js';\nimport type { ColumnInfo } from '../types.js';\nimport { type DataChunkResponse, WorkerRequestType } from '../worker/protocol.js';\nimport type { DuckDB } from './bindings.js';\nimport { DataChunk } from './data-chunk.js';\n\n/**\n * An async streaming query result.\n *\n * This class allows you to process large result sets in chunks,\n * which is more memory-efficient than loading everything at once.\n *\n * Implements AsyncIterable for use with `for await...of`.\n *\n * @category Query Results\n * @example\n * ```typescript\n * const stream = await conn.queryStreaming('SELECT * FROM large_table');\n *\n * // Using for await...of\n * for await (const chunk of stream) {\n * console.log(`Processing ${chunk.rowCount} rows`);\n * for (const row of chunk.toArray()) {\n * processRow(row);\n * }\n * }\n *\n * // Or manually\n * let chunk;\n * while ((chunk = await stream.nextChunk()) !== null) {\n * console.log(chunk.rowCount);\n * }\n *\n * await stream.close();\n * ```\n */\nexport class AsyncStreamingResult implements AsyncIterable<DataChunk> {\n private db: DuckDB;\n private connectionId: number;\n private streamingResultId: number;\n private columns: ColumnInfo[];\n private closed = false;\n private done = false;\n\n /**\n * @internal\n */\n constructor(db: DuckDB, connectionId: number, streamingResultId: number, columns: ColumnInfo[]) {\n this.db = db;\n this.connectionId = connectionId;\n this.streamingResultId = streamingResultId;\n this.columns = columns;\n }\n\n /**\n * Get the column information for this result.\n */\n getColumns(): ColumnInfo[] {\n return this.columns;\n }\n\n /**\n * Check if the result has been fully consumed.\n */\n isDone(): boolean {\n return this.done;\n }\n\n /**\n * Check if the result is closed.\n */\n isClosed(): boolean {\n return this.closed;\n }\n\n private checkClosed(): void {\n if (this.closed) {\n throw new DuckDBError('Streaming result is closed');\n }\n }\n\n /**\n * Fetch the next chunk of data.\n *\n * @returns Promise resolving to the next DataChunk, or null if no more data\n */\n async nextChunk(): Promise<DataChunk | null> {\n this.checkClosed();\n\n if (this.done) {\n return null;\n }\n\n const response = await this.db.postTask<DataChunkResponse>(WorkerRequestType.FETCH_CHUNK, {\n connectionId: this.connectionId,\n streamingResultId: this.streamingResultId,\n });\n\n if (response.done && response.rowCount === 0) {\n this.done = true;\n return null;\n }\n\n if (response.done) {\n this.done = true;\n }\n\n return new DataChunk(response.columns, response.rows, response.rowCount);\n }\n\n /**\n * Collect all remaining chunks into an array of objects.\n *\n * Warning: This loads all data into memory. Use nextChunk() or\n * for await...of for large result sets.\n *\n * @returns Promise resolving to array of all result rows\n */\n async toArray<T = Record<string, unknown>>(): Promise<T[]> {\n const results: T[] = [];\n for await (const chunk of this) {\n results.push(...chunk.toArray<T>());\n }\n return results;\n }\n\n /**\n * Collect all remaining chunks into an Arrow Table.\n *\n * Warning: This loads all data into memory.\n *\n * @returns Promise resolving to Arrow Table with all results\n */\n async toArrowTable(): Promise<Table> {\n const allRows: unknown[][] = [];\n const columns = this.columns;\n\n for await (const chunk of this) {\n allRows.push(...chunk.getRows());\n }\n\n // Build column arrays\n const columnArrays: Record<string, unknown[]> = {};\n for (let colIdx = 0; colIdx < columns.length; colIdx++) {\n const colName = columns[colIdx].name;\n columnArrays[colName] = allRows.map((row) => row[colIdx]);\n }\n\n return tableFromArrays(columnArrays);\n }\n\n /**\n * Close the streaming result and release resources.\n */\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n await this.db.postTask(WorkerRequestType.CLOSE_STREAMING_RESULT, {\n connectionId: this.connectionId,\n streamingResultId: this.streamingResultId,\n });\n this.closed = true;\n }\n\n // ============================================================================\n // AsyncIterable implementation\n // ============================================================================\n\n /**\n * Returns an async iterator for this streaming result.\n */\n async *[Symbol.asyncIterator](): AsyncIterator<DataChunk> {\n try {\n let chunk = await this.nextChunk();\n while (chunk !== null) {\n yield chunk;\n chunk = await this.nextChunk();\n }\n } finally {\n // Auto-close when iteration completes\n if (!this.closed) {\n await this.close();\n }\n }\n }\n}\n","/**\n * Async Connection class\n *\n * @packageDocumentation\n */\n\nimport { type Table, tableFromIPC } from '@uwdata/flechette';\nimport { DuckDBError } from '../errors.js';\nimport type { CSVInsertOptions, JSONInsertOptions } from '../types.js';\nimport {\n type ArrowIPCResponse,\n type PreparedStatementIdResponse,\n type QueryResultResponse,\n type RowsChangedResponse,\n type StreamingResultInfoResponse,\n WorkerRequestType,\n} from '../worker/protocol.js';\nimport type { DuckDB } from './bindings.js';\nimport { PreparedStatement } from './prepared-statement.js';\nimport { AsyncStreamingResult } from './streaming-result.js';\n\n/**\n * A connection to a DuckDB database.\n *\n * Connections are used to execute queries and manage transactions.\n * All operations are async as they communicate with a Web Worker.\n *\n * @category Connection\n * @example\n * ```typescript\n * const conn = await db.connect();\n *\n * // Query returns array of objects\n * const rows = await conn.query('SELECT * FROM range(10)');\n *\n * // Query returns Arrow Table\n * const table = await conn.queryArrow('SELECT * FROM range(1000)');\n *\n * // Streaming for large results\n * const stream = await conn.queryStreaming('SELECT * FROM large_table');\n * for await (const chunk of stream) {\n * console.log(chunk.rowCount);\n * }\n *\n * await conn.close();\n * ```\n */\nexport class Connection {\n private db: DuckDB;\n private connectionId: number;\n private closed = false;\n\n /**\n * @internal\n */\n constructor(db: DuckDB, connectionId: number) {\n this.db = db;\n this.connectionId = connectionId;\n }\n\n /**\n * Get the connection ID.\n * @internal\n */\n getConnectionId(): number {\n return this.connectionId;\n }\n\n /**\n * Get the database instance.\n * @internal\n */\n getDB(): DuckDB {\n return this.db;\n }\n\n private checkClosed(): void {\n if (this.closed) {\n throw new DuckDBError('Connection is closed');\n }\n }\n\n // ============================================================================\n // Query Operations\n // ============================================================================\n\n /**\n * Executes a SQL query and returns the results as an array of objects.\n *\n * @param sql - The SQL query to execute\n * @returns Promise resolving to array of result rows as objects\n *\n * @example\n * ```typescript\n * const rows = await conn.query<{ id: number; name: string }>(\n * 'SELECT * FROM users WHERE active = true'\n * );\n * for (const row of rows) {\n * console.log(row.id, row.name);\n * }\n * ```\n */\n async query<T = Record<string, unknown>>(sql: string): Promise<T[]> {\n this.checkClosed();\n\n const response = await this.db.postTask<QueryResultResponse>(WorkerRequestType.QUERY, {\n connectionId: this.connectionId,\n sql,\n });\n\n // Convert row arrays to objects\n const { columns, rows } = response;\n return rows.map((row) => {\n const obj: Record<string, unknown> = {};\n for (let i = 0; i < columns.length; i++) {\n obj[columns[i].name] = row[i];\n }\n return obj as T;\n });\n }\n\n /**\n * Executes a SQL query and returns results as a Flechette Arrow Table.\n *\n * This method is more efficient for large result sets and provides\n * proper Arrow/columnar data representation.\n *\n * @param sql - The SQL query to execute\n * @returns Promise resolving to Arrow Table with query results\n *\n * @example\n * ```typescript\n * const table = await conn.queryArrow('SELECT * FROM range(1000000)');\n * console.log(table.numRows);\n * ```\n */\n async queryArrow(sql: string): Promise<Table> {\n this.checkClosed();\n\n const response = await this.db.postTask<ArrowIPCResponse>(WorkerRequestType.QUERY_ARROW, {\n connectionId: this.connectionId,\n sql,\n });\n\n return tableFromIPC(response.ipcBuffer);\n }\n\n /**\n * Executes a SQL query and returns a streaming result.\n *\n * This method is more memory-efficient for large result sets as it\n * processes data in chunks rather than loading everything at once.\n *\n * @param sql - The SQL query to execute\n * @returns Promise resolving to AsyncStreamingResult that can be iterated over\n *\n * @example\n * ```typescript\n * const stream = await conn.queryStreaming('SELECT * FROM large_table');\n * for await (const chunk of stream) {\n * console.log(`Processing ${chunk.rowCount} rows`);\n * for (const row of chunk.toArray()) {\n * processRow(row);\n * }\n * }\n * await stream.close();\n * ```\n */\n async queryStreaming(sql: string): Promise<AsyncStreamingResult> {\n this.checkClosed();\n\n const response = await this.db.postTask<StreamingResultInfoResponse>(\n WorkerRequestType.QUERY_STREAMING,\n { connectionId: this.connectionId, sql },\n );\n\n return new AsyncStreamingResult(\n this.db,\n this.connectionId,\n response.streamingResultId,\n response.columns,\n );\n }\n\n /**\n * Executes a SQL statement and returns the number of affected rows.\n *\n * Use this for INSERT, UPDATE, DELETE, or other statements where you\n * don't need to read result rows.\n *\n * @param sql - The SQL statement to execute\n * @returns Promise resolving to the number of rows affected\n *\n * @example\n * ```typescript\n * const deleted = await conn.execute('DELETE FROM users WHERE inactive = true');\n * console.log(`Deleted ${deleted} users`);\n * ```\n */\n async execute(sql: string): Promise<number> {\n this.checkClosed();\n\n const response = await this.db.postTask<RowsChangedResponse>(WorkerRequestType.EXECUTE, {\n connectionId: this.connectionId,\n sql,\n });\n\n return response.rowsChanged;\n }\n\n // ============================================================================\n // Prepared Statements\n // ============================================================================\n\n /**\n * Prepares a SQL statement for execution.\n *\n * Prepared statements are more secure (prevent SQL injection) and can be\n * more efficient when executing the same query multiple times with different parameters.\n *\n * @param sql - The SQL statement with parameter placeholders (?)\n * @returns Promise resolving to a PreparedStatement instance\n *\n * @example\n * ```typescript\n * const stmt = await conn.prepare('SELECT * FROM users WHERE id = ?');\n * stmt.bindInt32(1, 42);\n * const rows = await stmt.run();\n * await stmt.close();\n * ```\n */\n async prepare(sql: string): Promise<PreparedStatement> {\n this.checkClosed();\n\n const response = await this.db.postTask<PreparedStatementIdResponse>(\n WorkerRequestType.PREPARE,\n { connectionId: this.connectionId, sql },\n );\n\n return new PreparedStatement(this.db, this.connectionId, response.preparedStatementId, sql);\n }\n\n // ============================================================================\n // Transactions\n // ============================================================================\n\n /**\n * Begins a new transaction.\n *\n * @example\n * ```typescript\n * await conn.beginTransaction();\n * try {\n * await conn.execute('INSERT INTO users (name) VALUES ($1)', ['Alice']);\n * await conn.execute('UPDATE balances SET amount = amount - 100 WHERE user = $1', ['Alice']);\n * await conn.commit();\n * } catch (e) {\n * await conn.rollback();\n * throw e;\n * }\n * ```\n */\n async beginTransaction(): Promise<void> {\n this.checkClosed();\n await this.db.postTask(WorkerRequestType.BEGIN_TRANSACTION, {\n connectionId: this.connectionId,\n });\n }\n\n /**\n * Commits the current transaction.\n */\n async commit(): Promise<void> {\n this.checkClosed();\n await this.db.postTask(WorkerRequestType.COMMIT, {\n connectionId: this.connectionId,\n });\n }\n\n /**\n * Rolls back the current transaction.\n */\n async rollback(): Promise<void> {\n this.checkClosed();\n await this.db.postTask(WorkerRequestType.ROLLBACK, {\n connectionId: this.connectionId,\n });\n }\n\n /**\n * Execute a function within a transaction.\n *\n * The transaction is automatically committed on success or rolled back on error.\n *\n * @param fn - The function to execute within the transaction\n * @returns Promise resolving to the function's return value\n *\n * @example\n * ```typescript\n * const result = await conn.transaction(async () => {\n * await conn.execute('INSERT INTO users (name) VALUES ($1)', ['Alice']);\n * return await conn.query('SELECT * FROM users WHERE name = $1', ['Alice']);\n * });\n * ```\n */\n async transaction<T>(fn: () => Promise<T>): Promise<T> {\n await this.beginTransaction();\n try {\n const result = await fn();\n await this.commit();\n return result;\n } catch (e) {\n await this.rollback();\n throw e;\n }\n }\n\n // ============================================================================\n // Data Insertion\n // ============================================================================\n\n /**\n * Insert data from an Arrow IPC buffer.\n *\n * @param tableName - The name of the table to insert into\n * @param ipcBuffer - The Arrow IPC buffer containing the data\n *\n * @example\n * ```typescript\n * import { tableToIPC } from '@uwdata/flechette';\n * const ipcBuffer = tableToIPC(myArrowTable);\n * await conn.insertArrowFromIPCStream('my_table', ipcBuffer);\n * ```\n */\n async insertArrowFromIPCStream(tableName: string, ipcBuffer: Uint8Array): Promise<void> {\n this.checkClosed();\n\n await this.db.postTask(\n WorkerRequestType.INSERT_ARROW_FROM_IPC,\n { connectionId: this.connectionId, tableName, ipcBuffer },\n [ipcBuffer.buffer],\n );\n }\n\n /**\n * Insert data from a CSV file.\n *\n * @param tableName - The name of the table to insert into\n * @param path - The virtual file path of the CSV\n * @param options - Optional CSV parsing options\n *\n * @example\n * ```typescript\n * await db.registerFileBuffer('data.csv', csvData);\n * await conn.insertCSVFromPath('my_table', 'data.csv', { header: true });\n * ```\n */\n async insertCSVFromPath(\n tableName: string,\n path: string,\n options?: CSVInsertOptions,\n ): Promise<void> {\n this.checkClosed();\n\n await this.db.postTask(WorkerRequestType.INSERT_CSV_FROM_PATH, {\n connectionId: this.connectionId,\n tableName,\n path,\n options,\n });\n }\n\n /**\n * Insert data from a JSON file.\n *\n * @param tableName - The name of the table to insert into\n * @param path - The virtual file path of the JSON\n * @param options - Optional JSON parsing options\n *\n * @example\n * ```typescript\n * await db.registerFileBuffer('data.json', jsonData);\n * await conn.insertJSONFromPath('my_table', 'data.json');\n * ```\n */\n async insertJSONFromPath(\n tableName: string,\n path: string,\n options?: JSONInsertOptions,\n ): Promise<void> {\n this.checkClosed();\n\n await this.db.postTask(WorkerRequestType.INSERT_JSON_FROM_PATH, {\n connectionId: this.connectionId,\n tableName,\n path,\n options,\n });\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n /**\n * Closes the connection and releases resources.\n */\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n await this.db.postTask(WorkerRequestType.DISCONNECT, {\n connectionId: this.connectionId,\n });\n this.closed = true;\n }\n}\n","/**\n * Async DuckDB bindings for the main thread\n *\n * @packageDocumentation\n */\n\nimport { createWorker } from '../cdn.js';\nimport { DuckDBError } from '../errors.js';\nimport type { DuckDBConfig, FileInfo, InitOptions } from '../types.js';\nimport {\n type ConnectionIdResponse,\n type ErrorResponse,\n type FileBufferResponse,\n type FileInfoListResponse,\n type VersionResponse,\n type WorkerRequest,\n WorkerRequestType,\n type WorkerResponse,\n WorkerResponseType,\n WorkerTask,\n} from '../worker/protocol.js';\nimport { Connection } from './connection.js';\n\n// Module state\nlet globalDB: DuckDB | null = null;\nlet initPromise: Promise<void> | null = null;\n\n/**\n * Initialize the DuckDB WASM module.\n *\n * This function must be called before creating any DuckDB instances.\n * It spawns a Web Worker and initializes the WebAssembly module inside it.\n *\n * URLs for worker, WASM, and JS files are automatically resolved from the\n * library location. You can override them if needed.\n *\n * @category Database\n * @param options - Optional initialization options\n * @returns Promise that resolves when initialization is complete\n *\n * @example\n * ```typescript\n * import { init, DuckDB } from '@ducklings/browser';\n *\n * await init();\n * const db = new DuckDB();\n * const conn = await db.connect();\n *\n * const rows = await conn.query('SELECT 42 as answer');\n * console.log(rows);\n *\n * await conn.close();\n * await db.close();\n * ```\n */\nexport async function init(options?: string | InitOptions): Promise<void> {\n if (globalDB) {\n return;\n }\n\n if (initPromise) {\n await initPromise;\n return;\n }\n\n // Normalize options\n const opts: InitOptions = typeof options === 'string' ? { wasmUrl: options } : (options ?? {});\n\n initPromise = (async () => {\n // Auto-resolve URLs from library location if not provided\n const baseUrl = new URL('.', import.meta.url).href;\n const workerUrl = opts.workerUrl ?? new URL('worker.js', baseUrl).href;\n const wasmUrl = opts.wasmUrl ?? new URL('wasm/duckdb.wasm', baseUrl).href;\n const wasmJsUrl = opts.wasmJsUrl ?? new URL('wasm/duckdb.js', baseUrl).href;\n\n // Create worker - use provided worker, or create one automatically\n // Auto-detect cross-origin (CDN) and use Blob URL workaround if needed\n let worker: Worker;\n if (opts.worker) {\n worker = opts.worker;\n } else {\n // Check if cross-origin (only in browser environment where location exists)\n const isCrossOrigin =\n typeof location !== 'undefined' && new URL(workerUrl).origin !== location.origin;\n if (isCrossOrigin) {\n // CDN usage: fetch worker script and create Blob URL\n worker = await createWorker(workerUrl);\n } else {\n // Same-origin or Node.js: create worker directly\n worker = new Worker(workerUrl, { type: 'module' });\n }\n }\n\n // Wait for worker to be ready\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new DuckDBError('Worker initialization timeout'));\n }, 30000);\n\n const handler = (event: MessageEvent) => {\n if (event.data?.type === 'WORKER_READY') {\n clearTimeout(timeout);\n worker.removeEventListener('message', handler);\n resolve();\n }\n };\n worker.addEventListener('message', handler);\n });\n\n // Create the global DB instance\n globalDB = new DuckDB(worker);\n\n // Instantiate WASM in worker\n await globalDB.instantiate(wasmUrl, wasmJsUrl);\n\n // Open database with config\n await globalDB.open(opts.config);\n })();\n\n await initPromise;\n}\n\n/**\n * Returns the DuckDB library version.\n *\n * @category Database\n * @returns Promise resolving to version string\n * @throws DuckDBError if WASM module is not initialized\n */\nexport async function version(): Promise<string> {\n if (!globalDB) {\n throw new DuckDBError('DuckDB WASM not initialized. Call init() first.');\n }\n return globalDB.getVersion();\n}\n\n/**\n * Get the global DuckDB instance.\n *\n * @category Database\n * @returns The global DuckDB instance\n * @throws DuckDBError if not initialized\n */\nexport function getDB(): DuckDB {\n if (!globalDB) {\n throw new DuckDBError('DuckDB WASM not initialized. Call init() first.');\n }\n return globalDB;\n}\n\n/**\n * DuckDB database instance.\n *\n * This is the main entry point for using DuckDB in WASM.\n * Create a database instance, then create connections to execute queries.\n *\n * @category Database\n * @example\n * ```typescript\n * import { init, DuckDB } from '@ducklings/browser';\n *\n * await init();\n *\n * const db = new DuckDB();\n * const conn = await db.connect();\n *\n * const result = await conn.query('SELECT 42 as answer');\n * console.log(result);\n *\n * await conn.close();\n * await db.close();\n * ```\n */\nexport class DuckDB {\n private worker: Worker;\n private pendingRequests: Map<number, WorkerTask> = new Map();\n private nextMessageId = 1;\n private closed = false;\n\n /**\n * Creates a new DuckDB instance.\n *\n * @param worker - The Web Worker to use for DuckDB operations\n * @internal Use init() instead of creating directly\n */\n constructor(worker?: Worker) {\n if (worker) {\n this.worker = worker;\n this.setupMessageHandler();\n } else {\n // Use global worker\n if (!globalDB) {\n throw new DuckDBError('DuckDB WASM not initialized. Call init() first.');\n }\n this.worker = globalDB.worker;\n this.pendingRequests = globalDB.pendingRequests;\n this.nextMessageId = globalDB.nextMessageId;\n }\n }\n\n private setupMessageHandler(): void {\n this.worker.onmessage = (event: MessageEvent) => {\n const response = event.data as WorkerResponse;\n const task = this.pendingRequests.get(response.requestId);\n\n if (task) {\n this.pendingRequests.delete(response.requestId);\n\n if (response.type === WorkerResponseType.ERROR) {\n const errorData = response.data as ErrorResponse;\n task.reject(new DuckDBError(errorData.message, errorData.code, errorData.query));\n } else {\n task.resolve(response.data);\n }\n }\n };\n\n this.worker.onerror = (error: ErrorEvent) => {\n // Reject all pending requests\n for (const [, task] of this.pendingRequests) {\n task.reject(new DuckDBError(`Worker error: ${error.message}`));\n }\n this.pendingRequests.clear();\n };\n }\n\n /**\n * Post a request to the worker and return a promise for the response.\n *\n * @internal\n */\n postTask<T>(type: WorkerRequestType, data?: unknown, transfer?: Transferable[]): Promise<T> {\n if (this.closed) {\n return Promise.reject(new DuckDBError('Database is closed'));\n }\n\n const messageId = this.nextMessageId++;\n const task = new WorkerTask<T>(messageId, type);\n this.pendingRequests.set(messageId, task as WorkerTask);\n\n const request: WorkerRequest = {\n messageId,\n type,\n data,\n };\n\n if (transfer && transfer.length > 0) {\n this.worker.postMessage(request, transfer);\n } else {\n this.worker.postMessage(request);\n }\n\n return task.promise;\n }\n\n /**\n * Instantiate the WASM module in the worker.\n *\n * @internal\n */\n async instantiate(wasmUrl?: string, wasmJsUrl?: string): Promise<void> {\n await this.postTask(WorkerRequestType.INSTANTIATE, { wasmUrl, wasmJsUrl });\n }\n\n /**\n * Open the database.\n *\n * @param config - Optional configuration options\n * @internal\n */\n async open(config?: DuckDBConfig): Promise<void> {\n await this.postTask(WorkerRequestType.OPEN, { config });\n }\n\n /**\n * Get the DuckDB library version.\n */\n async getVersion(): Promise<string> {\n const response = await this.postTask<VersionResponse>(WorkerRequestType.GET_VERSION);\n return response.version;\n }\n\n /**\n * Creates a new connection to this database.\n *\n * Multiple connections can be created to the same database.\n * Each connection maintains its own transaction state.\n *\n * @returns Promise resolving to a new Connection instance\n */\n async connect(): Promise<Connection> {\n const response = await this.postTask<ConnectionIdResponse>(WorkerRequestType.CONNECT);\n return new Connection(this, response.connectionId);\n }\n\n /**\n * Creates a new DuckDB database and initializes the WASM module if needed.\n *\n * This is a convenience method that combines init() and connect().\n *\n * @returns Promise that resolves to a new Connection instance\n *\n * @example\n * ```typescript\n * const conn = await DuckDB.createConnection();\n * const rows = await conn.query('SELECT 42 as answer');\n * ```\n */\n static async createConnection(): Promise<Connection> {\n await init();\n return getDB().connect();\n }\n\n // ============================================================================\n // File Registration\n // ============================================================================\n\n /**\n * Register a remote file by URL.\n *\n * @param name - The virtual file name to use\n * @param url - The URL to fetch the file from\n * @param protocol - Optional protocol hint ('HTTP' or 'HTTPS')\n * @param directIO - Whether to use direct I/O\n *\n * @example\n * ```typescript\n * await db.registerFileURL('data.parquet', 'https://example.com/data.parquet');\n * const rows = await conn.query(\"SELECT * FROM 'data.parquet'\");\n * ```\n */\n async registerFileURL(\n name: string,\n url: string,\n protocol?: string,\n directIO?: boolean,\n ): Promise<void> {\n await this.postTask(WorkerRequestType.REGISTER_FILE_URL, {\n name,\n url,\n protocol,\n directIO,\n });\n }\n\n /**\n * Register an in-memory buffer as a virtual file.\n *\n * @param name - The virtual file name to use\n * @param buffer - The file contents\n *\n * @example\n * ```typescript\n * const csvData = new TextEncoder().encode('id,name\\n1,Alice\\n2,Bob');\n * await db.registerFileBuffer('data.csv', csvData);\n * const rows = await conn.query(\"SELECT * FROM read_csv('/data.csv')\");\n * ```\n */\n async registerFileBuffer(name: string, buffer: Uint8Array): Promise<void> {\n await this.postTask(WorkerRequestType.REGISTER_FILE_BUFFER, { name, buffer }, [buffer.buffer]);\n }\n\n /**\n * Register a text string as a virtual file.\n *\n * @param name - The virtual file name to use\n * @param text - The file contents as a string\n */\n async registerFileText(name: string, text: string): Promise<void> {\n await this.postTask(WorkerRequestType.REGISTER_FILE_TEXT, { name, text });\n }\n\n // ============================================================================\n // File Operations\n // ============================================================================\n\n /**\n * Remove a registered file.\n *\n * @param name - The virtual file name to remove\n */\n async dropFile(name: string): Promise<void> {\n await this.postTask(WorkerRequestType.DROP_FILE, { name });\n }\n\n /**\n * Remove all registered files.\n */\n async dropFiles(): Promise<void> {\n await this.postTask(WorkerRequestType.DROP_FILES);\n }\n\n /**\n * Flush all file buffers.\n */\n async flushFiles(): Promise<void> {\n await this.postTask(WorkerRequestType.FLUSH_FILES);\n }\n\n /**\n * Export a file to a buffer.\n *\n * @param name - The virtual file name to export\n * @returns The file contents\n */\n async copyFileToBuffer(name: string): Promise<Uint8Array> {\n const response = await this.postTask<FileBufferResponse>(\n WorkerRequestType.COPY_FILE_TO_BUFFER,\n { name },\n );\n return response.buffer;\n }\n\n /**\n * Copy a file to another path.\n *\n * @param srcName - The source file name\n * @param dstPath - The destination path\n */\n async copyFileToPath(srcName: string, dstPath: string): Promise<void> {\n await this.postTask(WorkerRequestType.COPY_FILE_TO_PATH, { srcName, dstPath });\n }\n\n /**\n * List files matching a glob pattern.\n *\n * @param pattern - The glob pattern to match\n * @returns List of matching files\n */\n async globFiles(pattern: string): Promise<FileInfo[]> {\n const response = await this.postTask<FileInfoListResponse>(WorkerRequestType.GLOB_FILES, {\n pattern,\n });\n return response.files;\n }\n\n /**\n * Closes the database and releases all resources.\n */\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n await this.postTask(WorkerRequestType.CLOSE);\n this.worker.terminate();\n this.closed = true;\n\n if (globalDB === this) {\n globalDB = null;\n initPromise = null;\n }\n }\n}\n","/**\n * Shared type definitions for Ducklings\n * @packageDocumentation\n */\n\n/**\n * DuckDB type constants mapping to the C API type IDs.\n * @category Types\n */\nexport const DuckDBType = {\n INVALID: 0,\n BOOLEAN: 1,\n TINYINT: 2,\n SMALLINT: 3,\n INTEGER: 4,\n BIGINT: 5,\n UTINYINT: 6,\n USMALLINT: 7,\n UINTEGER: 8,\n UBIGINT: 9,\n FLOAT: 10,\n DOUBLE: 11,\n TIMESTAMP: 12,\n DATE: 13,\n TIME: 14,\n INTERVAL: 15,\n HUGEINT: 16,\n UHUGEINT: 32,\n VARCHAR: 17,\n BLOB: 18,\n DECIMAL: 19,\n TIMESTAMP_S: 20,\n TIMESTAMP_MS: 21,\n TIMESTAMP_NS: 22,\n ENUM: 23,\n LIST: 24,\n STRUCT: 25,\n MAP: 26,\n ARRAY: 33,\n UUID: 27,\n UNION: 28,\n BIT: 29,\n TIME_TZ: 30,\n TIMESTAMP_TZ: 31,\n} as const;\n\n/**\n * Type ID from DuckDB type constants.\n * @category Types\n */\nexport type DuckDBTypeId = (typeof DuckDBType)[keyof typeof DuckDBType];\n\n/**\n * Database access mode.\n * @category Configuration\n */\nexport enum AccessMode {\n /** DuckDB determines mode based on context (resolves to READ_WRITE for in-memory) */\n AUTOMATIC = 'automatic',\n /** Read-only mode - all write operations are blocked */\n READ_ONLY = 'read_only',\n /** Read-write mode - allows both reads and writes */\n READ_WRITE = 'read_write',\n}\n\n/**\n * DuckDB configuration options.\n * @category Configuration\n */\nexport interface DuckDBConfig {\n /**\n * Database access mode.\n * Use READ_ONLY to prevent any data modification.\n * @default AccessMode.AUTOMATIC\n */\n accessMode?: AccessMode;\n\n /**\n * Enable external access (file I/O, httpfs, etc.).\n * Set to false to prevent all external data access.\n * WARNING: Setting to false will disable httpfs functionality.\n * @default true\n */\n enableExternalAccess?: boolean;\n\n /**\n * Lock configuration after startup.\n * Prevents runtime configuration changes via SQL SET commands.\n * @default true (secure default)\n */\n lockConfiguration?: boolean;\n\n /**\n * Custom configuration options.\n * Key-value pairs passed directly to duckdb_set_config.\n * @see https://duckdb.org/docs/configuration/overview\n */\n customConfig?: Record<string, string>;\n}\n\n/**\n * Column metadata for query results.\n * @category Types\n */\nexport interface ColumnInfo {\n /** Column name */\n name: string;\n /** DuckDB type ID */\n type: DuckDBTypeId;\n /** Type alias (e.g., \"JSON\" for aliased types) */\n alias?: string;\n}\n\n/**\n * Options for initializing the DuckDB WASM module.\n * @category Types\n */\nexport interface InitOptions {\n /**\n * URL to the WASM file (for browser environments).\n * If not provided, uses the default bundled WASM location.\n */\n wasmUrl?: string;\n\n /**\n * URL to the Emscripten JS file (duckdb.js).\n * Required for proper bundler support.\n */\n wasmJsUrl?: string;\n\n /**\n * URL to the worker script (for browser environments).\n * If not provided, uses the default bundled worker location.\n */\n workerUrl?: string;\n\n /**\n * Pre-created Worker instance.\n * Use {@link createWorker} for CDN loading to work around cross-origin restrictions.\n *\n * @example\n * ```typescript\n * import { createWorker, getJsDelivrBundle, init } from '@ducklings/browser';\n *\n * const bundle = getJsDelivrBundle();\n * const worker = await createWorker(bundle.mainWorker);\n * await init({ worker, wasmUrl: bundle.wasmModule, wasmJsUrl: bundle.wasmJs });\n * ```\n */\n worker?: Worker;\n\n /**\n * Pre-compiled WebAssembly.Module (for Cloudflare Workers).\n * In Workers, import the WASM file directly and pass it here.\n */\n wasmModule?: WebAssembly.Module;\n\n /**\n * Whether to use the main thread instead of a Web Worker.\n * Defaults to false (use Web Worker).\n * Note: Main thread mode blocks the UI during operations.\n */\n useMainThread?: boolean;\n\n /**\n * DuckDB configuration options.\n * Controls access mode, security settings, and custom configuration.\n */\n config?: DuckDBConfig;\n}\n\n/**\n * Emscripten module interface for DuckDB WASM.\n * @internal\n */\nexport interface EmscriptenModule {\n ccall: (\n name: string,\n returnType: string | null,\n argTypes: string[],\n args: unknown[],\n opts?: { async?: boolean },\n ) => unknown | Promise<unknown>;\n cwrap: (\n name: string,\n returnType: string | null,\n argTypes: string[],\n ) => (...args: unknown[]) => unknown;\n getValue: (ptr: number, type: string) => number;\n setValue: (ptr: number, value: number, type: string) => void;\n UTF8ToString: (ptr: number) => string;\n stringToUTF8: (str: string, outPtr: number, maxBytesToWrite: number) => void;\n lengthBytesUTF8: (str: string) => number;\n _malloc: (size: number) => number;\n _free: (ptr: number) => void;\n stackAlloc: (size: number) => number;\n stackSave: () => number;\n stackRestore: (ptr: number) => void;\n HEAPU8: Uint8Array;\n HEAP8: Int8Array;\n HEAP16: Int16Array;\n HEAP32: Int32Array;\n HEAPU16: Uint16Array;\n HEAPU32: Uint32Array;\n HEAPF32: Float32Array;\n HEAPF64: Float64Array;\n}\n\n/**\n * File information returned by globFiles.\n * @category Types\n */\nexport interface FileInfo {\n /** File name/path */\n name: string;\n /** File size in bytes */\n size: number;\n}\n\n/**\n * Options for CSV insertion.\n * @category Types\n */\nexport interface CSVInsertOptions {\n /** Whether the CSV has a header row */\n header?: boolean;\n /** Column delimiter */\n delimiter?: string;\n /** Quote character */\n quote?: string;\n /** Escape character */\n escape?: string;\n /** Skip rows at start */\n skip?: number;\n /** Column names (if no header) */\n columns?: string[];\n}\n\n/**\n * Options for JSON insertion.\n * @category Types\n */\nexport interface JSONInsertOptions {\n /** JSON format: 'auto', 'records', 'values', or 'newline_delimited' */\n format?: 'auto' | 'records' | 'values' | 'newline_delimited';\n /** Column names */\n columns?: string[];\n}\n"]}
1
+ {"version":3,"sources":["../src/version.ts","../src/cdn.ts","../src/errors.ts","../src/worker/protocol.ts","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/constants.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/util/arrays.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/util/objects.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/data-types.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/util/numbers.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/util/strings.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/util/read.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/util/struct.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/batch.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/column.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/table.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/batch-type.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/compression.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/decode/block.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/decode/body-compression.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/decode/record-batch.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/decode/dictionary-batch.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/decode/data-type.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/decode/metadata.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/decode/schema.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/decode/message.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/decode/decode-ipc.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/decode/table-from-ipc.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/encode/schema.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/buffer.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/batch.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/validity.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/dictionary.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/infer-type.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/binary.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/bool.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/decimal.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/fixed-size-binary.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/fixed-size-list.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/interval.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/list.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/struct.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/map.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/run-end-encoded.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/union.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/utf8.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builders/values.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/builder.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/column-from-values.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/column-from-array.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/table-from-columns.js","../../../node_modules/.pnpm/@uwdata+flechette@2.3.0/node_modules/@uwdata/flechette/src/build/table-from-arrays.js","../src/async/prepared-statement.ts","../src/async/data-chunk.ts","../src/async/streaming-result.ts","../src/async/connection.ts","../src/async/bindings.ts","../src/types.ts"],"names":["PACKAGE_NAME","PACKAGE_VERSION","getJsDelivrBundle","version","base","getUnpkgBundle","createWorker","url","response","blob","blobUrl","DuckDBError","_DuckDBError","message","code","query","obj","WorkerTask","messageId","type","resolve","reject","value","error","MAGIC","Version","Endianness","MessageHeader","Type","Precision","DateUnit","TimeUnit","IntervalUnit","UnionMode","CompressionType","BodyCompressionMethod","uint8Array","uint16Array","uint32Array","uint64Array","int8Array","int16Array","int32Array","int64Array","float32Array","float64Array","isArrayBufferLike","data","intArrayType","bitWidth","signed","i","TypedArray","isTypedArray","isArray","isInt64ArrayType","bisect","offsets","index","a","b","mid","align64","length","bpe","align","array","alignedLength","resize","newLength","offset","newArray","grow","shift","isDate","isIterable","check","test","checkOneOf","set","keyFor","object","key","val","invalidDataType","typeId","field","name","nullable","metadata","isField","isDataType","asField","defaultName","defaultNullable","basicType","dictionary","indexType","ordered","id","int32","nullType","int","int8","int16","int64","uint8","uint16","uint32","uint64","float","precision","float32","float64","binary","utf8","bool","decimal","scale","date","unit","dateDay","time","timestamp","timezone","interval","list","child","struct","children","union","mode","typeIds","typeIdForValue","v","m","fixedSizeBinary","stride","fixedSizeList","mapType","keysSorted","duration","largeBinary","largeUtf8","largeList","runEndEncoded","runsField","valuesField","listView","largeListView","f64","buf","i64","u32","i32","u8","identity","toBigInt","toOffset","toDateDay","toTimestamp","toMonthDayNanoBytes","d","n","toNumber","divide","num","div","toDecimal32","toDecimal","asUint64","fromDecimal64","fromDecimal128","x","fromDecimal256","toFloat16","sign","expo","sigf","textDecoder","textEncoder","decodeUtf8","encodeUtf8","str","keyString","objectKey","s","k","SIZEOF_INT","decodeBit","bitmap","readObject","pos","readInt32","vtable","size","readInt16","read","fallback","off","readOffset","readBoolean","readInt8","readUint8","readUint16","readUint32","readInt64","readString","readVector","extract","_","RowIndex","proxyFactory","names","batches","RowObject","structObject","proto","batch","objectFactory","isDirectBatch","DirectBatch","Batch","nullCount","validity","values","sizes","start","end","options","NumberBatch","ArrayBatch","NullBatch","Int64Batch","Float16Batch","BoolBatch","Decimal32NumberBatch","DecimalBatch","DecimalNumberBatch","DecimalBigIntBatch","DateBatch","DateDayBatch","DateDayMillisecondBatch","TimestampSecondBatch","TimestampMillisecondBatch","TimestampMicrosecondBatch","TimestampNanosecondBatch","IntervalDayTimeBatch","IntervalMonthDayNanoBatch","offset32","offset64","BinaryBatch","LargeBinaryBatch","Utf8Batch","LargeUtf8Batch","ListBatch","LargeListBatch","ListViewBatch","LargeListViewBatch","FixedBatch","FixedBinaryBatch","FixedListBatch","pairs","keys","vals","entries","MapEntryBatch","MapBatch","SparseUnionBatch","typeMap","DenseUnionBatch","StructBatch","factory","StructProxyBatch","RunEndEncodedBatch","runs","DictionaryBatch","ViewBatch","BinaryViewBatch","Utf8ViewBatch","columnBuilder","Column","c","batchedIterator","copy","ArrayType","copyArray","extractArray","iter","next","j","Table","_Table","schema","useProxy","f","gen","indices","as","fields","renameField","all","cols","getFactory","numRows","output","row","batchType","useBigInt","useDate","useDecimalInt","useMap","wrap","BaseClass","WrapperClass","LENGTH_NO_COMPRESSED_DATA","COMPRESS_LENGTH_PREFIX","missingCodec","codecs","getCompressionCodec","decompressBuffer","body","codec","ulen","bytes","decodeBlock","decodeBlocks","decodeBodyCompression","get","decodeRecordBatch","decodeDictionaryBatch","decodeDataType","decodeMetadata","decodeSchema","decodeSchemaFields","fieldsOffset","decodeField","typeOffset","dict","decodeDictionary","decodeFieldChildren","fieldOffset","decodeInt","invalidMessageMetadata","expected","actual","invalidMessageBodyLength","invalidMessageType","decodeMessage","metadataLength","head","bodyLength","content","decoder","decodeIPC","source","isArrowFileFormat","decodeIPCFile","decodeIPCStream","stream","records","dictionaries","dicts","recs","tableFromIPC","createTable","dictionaryMap","context","contextGenerator","dictionaryTypes","visitSchemaFields","isDelta","visit","ctx","visitor","visitField","nodes","regions","compression","variadic","nodeIndex","bufferIndex","variadicIndex","maybeDecompress","region","node","buffer","BatchType","arrayType","Buffer","Bitmap","BatchBuilder","ValidityBuilder","isValid","dictionaryContext","idMap","dictionaryValues","valueType","DictionaryBuilder","inferType","profile","profiler","boolCount","numberCount","intCount","bigintCount","dateCount","dayCount","stringCount","arrayCount","structCount","min","max","minLength","maxLength","minBigInt","maxBigInt","arrayProfile","structProfiles","len","valid","intType","bigintType","unionType","BinaryBuilder","BoolBuilder","DecimalBuilder","FixedSizeBinaryBuilder","FixedSizeListBuilder","IntervalDayTimeBuilder","IntervalMonthDayNanoBuilder","AbstractListBuilder","offsetType","ListBuilder","AbstractStructBuilder","StructBuilder","setters","MapBuilder","MapStructBuilder","keyValuePair","NO_VALUE","RunEndEncodedBuilder","AbstractUnionBuilder","lookup","SparseUnionBuilder","DenseUnionBuilder","Utf8Builder","DirectBuilder","Int64Builder","TransformBuilder","transform","builderContext","builder","columnFromValues","callback","maxBatchRows","opt","nullBatches","limit","numBatches","rem","columnFromArray","columnFromTypedArray","typeForTypedArray","add","idx","tableFromColumns","columns","col","tableFromArrays","types","PreparedStatement","db","connectionId","preparedStatementId","_sql","rows","DataChunk","rowCount","AsyncStreamingResult","streamingResultId","results","chunk","allRows","columnArrays","colIdx","colName","Connection","sql","fn","result","tableName","ipcBuffer","path","globalDB","initPromise","init","opts","baseUrl","workerUrl","wasmUrl","wasmJsUrl","worker","timeout","handler","event","DuckDB","getDB","task","errorData","transfer","request","config","protocol","directIO","text","srcName","dstPath","pattern","DuckDBType","AccessMode"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Package version constants\n *\n * These are injected at build time via tsup's define option.\n *\n * @packageDocumentation\n */\n\ndeclare const __PACKAGE_NAME__: string;\ndeclare const __PACKAGE_VERSION__: string;\n\n/** Package name for CDN URL generation */\nexport const PACKAGE_NAME =\n typeof __PACKAGE_NAME__ !== 'undefined' ? __PACKAGE_NAME__ : '@ducklings/browser';\n\n/** Package version for CDN URL generation */\nexport const PACKAGE_VERSION =\n typeof __PACKAGE_VERSION__ !== 'undefined' ? __PACKAGE_VERSION__ : '1.4.3';\n","/**\n * CDN utilities for loading DuckDB from CDNs like jsDelivr\n *\n * When loading the library from a CDN, browsers block cross-origin Worker creation.\n * Use {@link createWorker} to work around this limitation.\n *\n * @packageDocumentation\n */\n\nimport { PACKAGE_NAME, PACKAGE_VERSION } from './version.js';\n\n/**\n * Bundle URLs for loading from CDN\n *\n * @category CDN\n */\nexport interface DuckDBBundle {\n /** URL to the main library entry point */\n mainModule: string;\n /** URL to the worker script */\n mainWorker: string;\n /** URL to the WASM binary */\n wasmModule: string;\n /** URL to the Emscripten JS glue */\n wasmJs: string;\n}\n\n/**\n * Get pre-configured bundle URLs for loading from jsDelivr CDN\n *\n * @category CDN\n * @param version - Optional version to use (defaults to current package version)\n * @returns Bundle URLs for jsDelivr\n *\n * @example\n * ```typescript\n * import { getJsDelivrBundle, createWorker, init } from '@ducklings/browser';\n *\n * const bundle = getJsDelivrBundle();\n * const worker = await createWorker(bundle.mainWorker);\n *\n * await init({\n * worker,\n * wasmUrl: bundle.wasmModule,\n * wasmJsUrl: bundle.wasmJs,\n * });\n * ```\n */\nexport function getJsDelivrBundle(version?: string): DuckDBBundle {\n const ver = version ?? PACKAGE_VERSION;\n const base = `https://cdn.jsdelivr.net/npm/${PACKAGE_NAME}@${ver}/dist/`;\n\n return {\n mainModule: `${base}index.js`,\n mainWorker: `${base}worker.js`,\n wasmModule: `${base}wasm/duckdb.wasm`,\n wasmJs: `${base}wasm/duckdb.js`,\n };\n}\n\n/**\n * Get pre-configured bundle URLs for loading from unpkg CDN\n *\n * @category CDN\n * @param version - Optional version to use (defaults to current package version)\n * @returns Bundle URLs for unpkg\n */\nexport function getUnpkgBundle(version?: string): DuckDBBundle {\n const ver = version ?? PACKAGE_VERSION;\n const base = `https://unpkg.com/${PACKAGE_NAME}@${ver}/dist/`;\n\n return {\n mainModule: `${base}index.js`,\n mainWorker: `${base}worker.js`,\n wasmModule: `${base}wasm/duckdb.wasm`,\n wasmJs: `${base}wasm/duckdb.js`,\n };\n}\n\n/**\n * Create a Worker from a cross-origin URL using Blob URL workaround.\n *\n * Browsers block creating Workers from cross-origin scripts (like those served from CDNs).\n * This function fetches the worker script and creates a same-origin Blob URL from it.\n *\n * @category CDN\n * @param url - URL to the worker script (can be cross-origin)\n * @returns Promise resolving to a same-origin Worker\n *\n * @example\n * ```typescript\n * import { createWorker, getJsDelivrBundle, init } from '@ducklings/browser';\n *\n * const bundle = getJsDelivrBundle();\n * const worker = await createWorker(bundle.mainWorker);\n *\n * await init({ worker });\n * ```\n */\nexport async function createWorker(url: string): Promise<Worker> {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch worker script: ${response.status} ${response.statusText}`);\n }\n const blob = await response.blob();\n const blobUrl = URL.createObjectURL(blob);\n return new Worker(blobUrl, { type: 'module' });\n}\n","/**\n * Error handling for Ducklings\n * @packageDocumentation\n */\n\n/**\n * Error thrown by DuckDB operations.\n *\n * This error is thrown when DuckDB encounters an error during query execution,\n * connection management, or other database operations.\n *\n * @example\n * ```typescript\n * try {\n * await conn.query('SELECT * FROM nonexistent_table');\n * } catch (e) {\n * if (e instanceof DuckDBError) {\n * console.error('DuckDB error:', e.message);\n * console.error('Query:', e.query);\n * }\n * }\n * ```\n */\nexport class DuckDBError extends Error {\n /** Error code if available */\n public readonly code?: string;\n /** The SQL query that caused the error */\n public readonly query?: string;\n\n constructor(message: string, code?: string, query?: string) {\n super(message);\n this.name = 'DuckDBError';\n this.code = code;\n this.query = query;\n // Maintains proper stack trace for where error was thrown (V8 only)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, DuckDBError);\n }\n }\n\n /**\n * Create a DuckDBError from a plain object (for worker message deserialization).\n * @internal\n */\n static fromObject(obj: { message: string; code?: string; query?: string }): DuckDBError {\n return new DuckDBError(obj.message, obj.code, obj.query);\n }\n\n /**\n * Convert to a plain object for worker message serialization.\n * @internal\n */\n toObject(): { message: string; code?: string; query?: string } {\n return {\n message: this.message,\n code: this.code,\n query: this.query,\n };\n }\n}\n","/**\n * Worker message protocol for Ducklings\n * @packageDocumentation\n */\n\nimport type { ColumnInfo, CSVInsertOptions, DuckDBConfig, JSONInsertOptions } from '../types.js';\n\n/**\n * Request types sent from main thread to worker.\n */\nexport enum WorkerRequestType {\n // Lifecycle\n PING = 'PING',\n INSTANTIATE = 'INSTANTIATE',\n GET_VERSION = 'GET_VERSION',\n OPEN = 'OPEN',\n CLOSE = 'CLOSE',\n CONNECT = 'CONNECT',\n DISCONNECT = 'DISCONNECT',\n\n // Query operations\n QUERY = 'QUERY',\n QUERY_ARROW = 'QUERY_ARROW',\n QUERY_STREAMING = 'QUERY_STREAMING',\n EXECUTE = 'EXECUTE',\n FETCH_CHUNK = 'FETCH_CHUNK',\n CLOSE_STREAMING_RESULT = 'CLOSE_STREAMING_RESULT',\n RESET_STREAMING_RESULT = 'RESET_STREAMING_RESULT',\n\n // Prepared statements\n PREPARE = 'PREPARE',\n RUN_PREPARED = 'RUN_PREPARED',\n EXECUTE_PREPARED = 'EXECUTE_PREPARED',\n CLOSE_PREPARED = 'CLOSE_PREPARED',\n\n // Transactions\n BEGIN_TRANSACTION = 'BEGIN_TRANSACTION',\n COMMIT = 'COMMIT',\n ROLLBACK = 'ROLLBACK',\n\n // File registration\n REGISTER_FILE_URL = 'REGISTER_FILE_URL',\n REGISTER_FILE_BUFFER = 'REGISTER_FILE_BUFFER',\n REGISTER_FILE_HANDLE = 'REGISTER_FILE_HANDLE',\n REGISTER_FILE_TEXT = 'REGISTER_FILE_TEXT',\n\n // File operations\n DROP_FILE = 'DROP_FILE',\n DROP_FILES = 'DROP_FILES',\n FLUSH_FILES = 'FLUSH_FILES',\n COPY_FILE_TO_BUFFER = 'COPY_FILE_TO_BUFFER',\n COPY_FILE_TO_PATH = 'COPY_FILE_TO_PATH',\n GLOB_FILES = 'GLOB_FILES',\n\n // Data insertion\n INSERT_ARROW_FROM_IPC = 'INSERT_ARROW_FROM_IPC',\n INSERT_CSV_FROM_PATH = 'INSERT_CSV_FROM_PATH',\n INSERT_JSON_FROM_PATH = 'INSERT_JSON_FROM_PATH',\n}\n\n/**\n * Response types sent from worker to main thread.\n */\nexport enum WorkerResponseType {\n OK = 'OK',\n ERROR = 'ERROR',\n VERSION = 'VERSION',\n CONNECTION_ID = 'CONNECTION_ID',\n QUERY_RESULT = 'QUERY_RESULT',\n ARROW_IPC = 'ARROW_IPC',\n STREAMING_RESULT_INFO = 'STREAMING_RESULT_INFO',\n DATA_CHUNK = 'DATA_CHUNK',\n ROWS_CHANGED = 'ROWS_CHANGED',\n PREPARED_STATEMENT_ID = 'PREPARED_STATEMENT_ID',\n FILE_BUFFER = 'FILE_BUFFER',\n FILE_INFO_LIST = 'FILE_INFO_LIST',\n}\n\n// ============================================================================\n// Request payload types\n// ============================================================================\n\nexport interface InstantiateRequest {\n wasmUrl?: string;\n wasmJsUrl?: string;\n}\n\nexport interface OpenRequest {\n config?: DuckDBConfig;\n}\n\nexport interface QueryRequest {\n connectionId: number;\n sql: string;\n}\n\nexport interface QueryArrowRequest {\n connectionId: number;\n sql: string;\n}\n\nexport interface QueryStreamingRequest {\n connectionId: number;\n sql: string;\n}\n\nexport interface ExecuteRequest {\n connectionId: number;\n sql: string;\n}\n\nexport interface FetchChunkRequest {\n connectionId: number;\n streamingResultId: number;\n}\n\nexport interface CloseStreamingResultRequest {\n connectionId: number;\n streamingResultId: number;\n}\n\nexport interface ResetStreamingResultRequest {\n connectionId: number;\n streamingResultId: number;\n}\n\nexport interface PrepareRequest {\n connectionId: number;\n sql: string;\n}\n\nexport interface RunPreparedRequest {\n connectionId: number;\n preparedStatementId: number;\n bindings: PreparedStatementBinding[];\n}\n\nexport interface ExecutePreparedRequest {\n connectionId: number;\n preparedStatementId: number;\n bindings: PreparedStatementBinding[];\n}\n\nexport interface ClosePreparedRequest {\n connectionId: number;\n preparedStatementId: number;\n}\n\nexport interface TransactionRequest {\n connectionId: number;\n}\n\nexport interface RegisterFileURLRequest {\n name: string;\n url: string;\n protocol?: string;\n directIO?: boolean;\n}\n\nexport interface RegisterFileBufferRequest {\n name: string;\n buffer: Uint8Array;\n}\n\nexport interface RegisterFileHandleRequest {\n name: string;\n handle: FileSystemFileHandle;\n protocol?: string;\n directIO?: boolean;\n}\n\nexport interface RegisterFileTextRequest {\n name: string;\n text: string;\n}\n\nexport interface DropFileRequest {\n name: string;\n}\n\nexport interface CopyFileToBufferRequest {\n name: string;\n}\n\nexport interface CopyFileToPathRequest {\n srcName: string;\n dstPath: string;\n}\n\nexport interface GlobFilesRequest {\n pattern: string;\n}\n\nexport interface InsertArrowFromIPCRequest {\n connectionId: number;\n tableName: string;\n ipcBuffer: Uint8Array;\n}\n\nexport interface InsertCSVFromPathRequest {\n connectionId: number;\n tableName: string;\n path: string;\n options?: CSVInsertOptions;\n}\n\nexport interface InsertJSONFromPathRequest {\n connectionId: number;\n tableName: string;\n path: string;\n options?: JSONInsertOptions;\n}\n\nexport interface DisconnectRequest {\n connectionId: number;\n}\n\n// ============================================================================\n// Response payload types\n// ============================================================================\n\nexport interface ErrorResponse {\n message: string;\n code?: string;\n query?: string;\n}\n\nexport interface VersionResponse {\n version: string;\n}\n\nexport interface ConnectionIdResponse {\n connectionId: number;\n}\n\nexport interface QueryResultResponse {\n columns: ColumnInfo[];\n rows: unknown[][];\n}\n\nexport interface ArrowIPCResponse {\n ipcBuffer: Uint8Array;\n}\n\nexport interface StreamingResultInfoResponse {\n streamingResultId: number;\n columns: ColumnInfo[];\n}\n\nexport interface DataChunkResponse {\n columns: ColumnInfo[];\n rows: unknown[][];\n rowCount: number;\n done: boolean;\n}\n\nexport interface RowsChangedResponse {\n rowsChanged: number;\n}\n\nexport interface PreparedStatementIdResponse {\n preparedStatementId: number;\n}\n\nexport interface FileBufferResponse {\n buffer: Uint8Array;\n}\n\nexport interface FileInfoListResponse {\n files: { name: string; size: number }[];\n}\n\n// ============================================================================\n// Prepared statement binding\n// ============================================================================\n\nexport type PreparedStatementBindingType =\n | 'null'\n | 'boolean'\n | 'int8'\n | 'int16'\n | 'int32'\n | 'int64'\n | 'uint8'\n | 'uint16'\n | 'uint32'\n | 'uint64'\n | 'float'\n | 'double'\n | 'varchar'\n | 'blob'\n | 'date'\n | 'time'\n | 'timestamp'\n | 'interval';\n\nexport interface PreparedStatementBinding {\n index: number;\n type: PreparedStatementBindingType;\n value: unknown;\n}\n\n// ============================================================================\n// Message wrappers\n// ============================================================================\n\n/**\n * Base request message from main thread to worker.\n */\nexport interface WorkerRequest<T extends WorkerRequestType = WorkerRequestType, D = unknown> {\n messageId: number;\n type: T;\n data: D;\n}\n\n/**\n * Base response message from worker to main thread.\n */\nexport interface WorkerResponse<T extends WorkerResponseType = WorkerResponseType, D = unknown> {\n messageId: number;\n requestId: number;\n type: T;\n data: D;\n}\n\n// ============================================================================\n// Worker task for tracking pending requests\n// ============================================================================\n\n/**\n * Represents a pending request to the worker.\n * @internal\n */\nexport class WorkerTask<T = unknown> {\n readonly messageId: number;\n readonly type: WorkerRequestType;\n private _resolve: (value: T) => void;\n private _reject: (error: Error) => void;\n readonly promise: Promise<T>;\n\n constructor(messageId: number, type: WorkerRequestType) {\n this.messageId = messageId;\n this.type = type;\n this._resolve = () => {};\n this._reject = () => {};\n this.promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n\n /**\n * Resolve the task with a successful result.\n */\n resolve(value: T): void {\n this._resolve(value);\n }\n\n /**\n * Reject the task with an error.\n */\n reject(error: Error): void {\n this._reject(error);\n }\n}\n\n// ============================================================================\n// Type-safe request/response mapping\n// ============================================================================\n\n/**\n * Maps request types to their payload types.\n */\nexport type RequestPayloadMap = {\n [WorkerRequestType.PING]: undefined;\n [WorkerRequestType.INSTANTIATE]: InstantiateRequest;\n [WorkerRequestType.GET_VERSION]: undefined;\n [WorkerRequestType.OPEN]: OpenRequest;\n [WorkerRequestType.CLOSE]: undefined;\n [WorkerRequestType.CONNECT]: undefined;\n [WorkerRequestType.DISCONNECT]: DisconnectRequest;\n [WorkerRequestType.QUERY]: QueryRequest;\n [WorkerRequestType.QUERY_ARROW]: QueryArrowRequest;\n [WorkerRequestType.QUERY_STREAMING]: QueryStreamingRequest;\n [WorkerRequestType.EXECUTE]: ExecuteRequest;\n [WorkerRequestType.FETCH_CHUNK]: FetchChunkRequest;\n [WorkerRequestType.CLOSE_STREAMING_RESULT]: CloseStreamingResultRequest;\n [WorkerRequestType.RESET_STREAMING_RESULT]: ResetStreamingResultRequest;\n [WorkerRequestType.PREPARE]: PrepareRequest;\n [WorkerRequestType.RUN_PREPARED]: RunPreparedRequest;\n [WorkerRequestType.EXECUTE_PREPARED]: ExecutePreparedRequest;\n [WorkerRequestType.CLOSE_PREPARED]: ClosePreparedRequest;\n [WorkerRequestType.BEGIN_TRANSACTION]: TransactionRequest;\n [WorkerRequestType.COMMIT]: TransactionRequest;\n [WorkerRequestType.ROLLBACK]: TransactionRequest;\n [WorkerRequestType.REGISTER_FILE_URL]: RegisterFileURLRequest;\n [WorkerRequestType.REGISTER_FILE_BUFFER]: RegisterFileBufferRequest;\n [WorkerRequestType.REGISTER_FILE_HANDLE]: RegisterFileHandleRequest;\n [WorkerRequestType.REGISTER_FILE_TEXT]: RegisterFileTextRequest;\n [WorkerRequestType.DROP_FILE]: DropFileRequest;\n [WorkerRequestType.DROP_FILES]: undefined;\n [WorkerRequestType.FLUSH_FILES]: undefined;\n [WorkerRequestType.COPY_FILE_TO_BUFFER]: CopyFileToBufferRequest;\n [WorkerRequestType.COPY_FILE_TO_PATH]: CopyFileToPathRequest;\n [WorkerRequestType.GLOB_FILES]: GlobFilesRequest;\n [WorkerRequestType.INSERT_ARROW_FROM_IPC]: InsertArrowFromIPCRequest;\n [WorkerRequestType.INSERT_CSV_FROM_PATH]: InsertCSVFromPathRequest;\n [WorkerRequestType.INSERT_JSON_FROM_PATH]: InsertJSONFromPathRequest;\n};\n","/** Magic bytes 'ARROW1' indicating the Arrow 'file' format. */\nexport const MAGIC = Uint8Array.of(65, 82, 82, 79, 87, 49);\n\n/** Bytes for an 'end of stream' message. */\nexport const EOS = Uint8Array.of(255, 255, 255, 255, 0, 0, 0, 0);\n\n/**\n * Apache Arrow version.\n */\nexport const Version = /** @type {const} */ ({\n /** 0.1.0 (October 2016). */\n V1: 0,\n /** 0.2.0 (February 2017). Non-backwards compatible with V1. */\n V2: 1,\n /** 0.3.0 -> 0.7.1 (May - December 2017). Non-backwards compatible with V2. */\n V3: 2,\n /** >= 0.8.0 (December 2017). Non-backwards compatible with V3. */\n V4: 3,\n /**\n * >= 1.0.0 (July 2020). Backwards compatible with V4 (V5 readers can read V4\n * metadata and IPC messages). Implementations are recommended to provide a\n * V4 compatibility mode with V5 format changes disabled.\n *\n * Incompatible changes between V4 and V5:\n * - Union buffer layout has changed.\n * In V5, Unions don't have a validity bitmap buffer.\n */\n V5: 4\n});\n\n/**\n * Endianness of Arrow-encoded data.\n */\nexport const Endianness = /** @type {const} */ ({\n Little: 0,\n Big: 1\n});\n\n/**\n * Message header type codes.\n */\nexport const MessageHeader = /** @type {const} */ ({\n NONE: 0,\n /**\n * A Schema describes the columns in a record batch.\n */\n Schema: 1,\n /**\n * For sending dictionary encoding information. Any Field can be\n * dictionary-encoded, but in this case none of its children may be\n * dictionary-encoded.\n * There is one vector / column per dictionary, but that vector / column\n * may be spread across multiple dictionary batches by using the isDelta\n * flag.\n */\n DictionaryBatch: 2,\n /**\n * A data header describing the shared memory layout of a \"record\" or \"row\"\n * batch. Some systems call this a \"row batch\" internally and others a \"record\n * batch\".\n */\n RecordBatch: 3,\n /**\n * EXPERIMENTAL: Metadata for n-dimensional arrays, aka \"tensors\" or\n * \"ndarrays\". Arrow implementations in general are not required to implement\n * this type.\n *\n * Not currently supported by Flechette.\n */\n Tensor: 4,\n /**\n * EXPERIMENTAL: Metadata for n-dimensional sparse arrays, aka \"sparse\n * tensors\". Arrow implementations in general are not required to implement\n * this type.\n *\n * Not currently supported by Flechette.\n */\n SparseTensor: 5\n});\n\n/**\n * Field data type ids.\n * Only non-negative values ever occur in IPC flatbuffer binary data.\n */\nexport const Type = /** @type {const} */ ({\n /**\n * Dictionary types compress data by using a set of integer indices to\n * lookup potentially repeated vales in a separate dictionary of values.\n *\n * This type entry is provided for API convenience, it does not occur\n * in actual Arrow IPC binary data.\n */\n Dictionary: -1,\n /** No data type. Included for flatbuffer compatibility. */\n NONE: 0,\n /** Null values only. */\n Null: 1,\n /** Integers, either signed or unsigned, with 8, 16, 32, or 64 bit widths. */\n Int: 2,\n /** Floating point numbers with 16, 32, or 64 bit precision. */\n Float: 3,\n /** Opaque binary data. */\n Binary: 4,\n /** Unicode with UTF-8 encoding. */\n Utf8: 5,\n /** Booleans represented as 8 bit bytes. */\n Bool: 6,\n /**\n * Exact decimal value represented as an integer value in two's complement.\n * Currently only 128-bit (16-byte) and 256-bit (32-byte) integers are used.\n * The representation uses the endianness indicated in the schema.\n */\n Decimal: 7,\n /**\n * Date is either a 32-bit or 64-bit signed integer type representing an\n * elapsed time since UNIX epoch (1970-01-01), stored in either of two units:\n * - Milliseconds (64 bits) indicating UNIX time elapsed since the epoch (no\n * leap seconds), where the values are evenly divisible by 86400000\n * - Days (32 bits) since the UNIX epoch\n */\n Date: 8,\n /**\n * Time is either a 32-bit or 64-bit signed integer type representing an\n * elapsed time since midnight, stored in either of four units: seconds,\n * milliseconds, microseconds or nanoseconds.\n *\n * The integer `bitWidth` depends on the `unit` and must be one of the following:\n * - SECOND and MILLISECOND: 32 bits\n * - MICROSECOND and NANOSECOND: 64 bits\n *\n * The allowed values are between 0 (inclusive) and 86400 (=24*60*60) seconds\n * (exclusive), adjusted for the time unit (for example, up to 86400000\n * exclusive for the MILLISECOND unit).\n * This definition doesn't allow for leap seconds. Time values from\n * measurements with leap seconds will need to be corrected when ingesting\n * into Arrow (for example by replacing the value 86400 with 86399).\n */\n Time: 9,\n /**\n * Timestamp is a 64-bit signed integer representing an elapsed time since a\n * fixed epoch, stored in either of four units: seconds, milliseconds,\n * microseconds or nanoseconds, and is optionally annotated with a timezone.\n *\n * Timestamp values do not include any leap seconds (in other words, all\n * days are considered 86400 seconds long).\n *\n * The timezone is an optional string for the name of a timezone, one of:\n *\n * - As used in the Olson timezone database (the \"tz database\" or\n * \"tzdata\"), such as \"America/New_York\".\n * - An absolute timezone offset of the form \"+XX:XX\" or \"-XX:XX\",\n * such as \"+07:30\".\n *\n * Whether a timezone string is present indicates different semantics about\n * the data.\n */\n Timestamp: 10,\n /**\n * A \"calendar\" interval which models types that don't necessarily\n * have a precise duration without the context of a base timestamp (e.g.\n * days can differ in length during day light savings time transitions).\n * All integers in the units below are stored in the endianness indicated\n * by the schema.\n *\n * - YEAR_MONTH - Indicates the number of elapsed whole months, stored as\n * 4-byte signed integers.\n * - DAY_TIME - Indicates the number of elapsed days and milliseconds (no\n * leap seconds), stored as 2 contiguous 32-bit signed integers (8-bytes\n * in total). Support of this IntervalUnit is not required for full arrow\n * compatibility.\n * - MONTH_DAY_NANO - A triple of the number of elapsed months, days, and\n * nanoseconds. The values are stored contiguously in 16-byte blocks.\n * Months and days are encoded as 32-bit signed integers and nanoseconds\n * is encoded as a 64-bit signed integer. Nanoseconds does not allow for\n * leap seconds. Each field is independent (e.g. there is no constraint\n * that nanoseconds have the same sign as days or that the quantity of\n * nanoseconds represents less than a day's worth of time).\n */\n Interval: 11,\n /**\n * List (vector) data supporting variably-sized lists.\n * A list has a single child data type for list entries.\n */\n List: 12,\n /**\n * A struct consisting of multiple named child data types.\n */\n Struct: 13,\n /**\n * A union is a complex type with parallel child data types. By default ids\n * in the type vector refer to the offsets in the children. Optionally\n * typeIds provides an indirection between the child offset and the type id.\n * For each child `typeIds[offset]` is the id used in the type vector.\n */\n Union: 14,\n /**\n * Binary data where each entry has the same fixed size.\n */\n FixedSizeBinary: 15,\n /**\n * List (vector) data where every list has the same fixed size.\n * A list has a single child data type for list entries.\n */\n FixedSizeList: 16,\n /**\n * A Map is a logical nested type that is represented as\n * List<entries: Struct<key: K, value: V>>\n *\n * In this layout, the keys and values are each respectively contiguous. We do\n * not constrain the key and value types, so the application is responsible\n * for ensuring that the keys are hashable and unique. Whether the keys are sorted\n * may be set in the metadata for this field.\n *\n * In a field with Map type, the field has a child Struct field, which then\n * has two children: key type and the second the value type. The names of the\n * child fields may be respectively \"entries\", \"key\", and \"value\", but this is\n * not enforced.\n *\n * Map\n * ```text\n * - child[0] entries: Struct\n * - child[0] key: K\n * - child[1] value: V\n * ```\n * Neither the \"entries\" field nor the \"key\" field may be nullable.\n *\n * The metadata is structured so that Arrow systems without special handling\n * for Map can make Map an alias for List. The \"layout\" attribute for the Map\n * field must have the same contents as a List.\n */\n Map: 17,\n /**\n * An absolute length of time unrelated to any calendar artifacts. For the\n * purposes of Arrow implementations, adding this value to a Timestamp\n * (\"t1\") naively (i.e. simply summing the two numbers) is acceptable even\n * though in some cases the resulting Timestamp (t2) would not account for\n * leap-seconds during the elapsed time between \"t1\" and \"t2\". Similarly,\n * representing the difference between two Unix timestamp is acceptable, but\n * would yield a value that is possibly a few seconds off from the true\n * elapsed time.\n *\n * The resolution defaults to millisecond, but can be any of the other\n * supported TimeUnit values as with Timestamp and Time types. This type is\n * always represented as an 8-byte integer.\n */\n Duration: 18,\n /**\n * Same as Binary, but with 64-bit offsets, allowing representation of\n * extremely large data values.\n */\n LargeBinary: 19,\n /**\n * Same as Utf8, but with 64-bit offsets, allowing representation of\n * extremely large data values.\n */\n LargeUtf8: 20,\n /**\n * Same as List, but with 64-bit offsets, allowing representation of\n * extremely large data values.\n */\n LargeList: 21,\n /**\n * Contains two child arrays, run_ends and values. The run_ends child array\n * must be a 16/32/64-bit integer array which encodes the indices at which\n * the run with the value in each corresponding index in the values child\n * array ends. Like list/struct types, the value array can be of any type.\n */\n RunEndEncoded: 22,\n /**\n * Logically the same as Binary, but the internal representation uses a view\n * struct that contains the string length and either the string's entire data\n * inline (for small strings) or an inlined prefix, an index of another buffer,\n * and an offset pointing to a slice in that buffer (for non-small strings).\n *\n * Since it uses a variable number of data buffers, each Field with this type\n * must have a corresponding entry in `variadicBufferCounts`.\n */\n BinaryView: 23,\n /**\n * Logically the same as Utf8, but the internal representation uses a view\n * struct that contains the string length and either the string's entire data\n * inline (for small strings) or an inlined prefix, an index of another buffer,\n * and an offset pointing to a slice in that buffer (for non-small strings).\n *\n * Since it uses a variable number of data buffers, each Field with this type\n * must have a corresponding entry in `variadicBufferCounts`.\n */\n Utf8View: 24,\n /**\n * Represents the same logical types that List can, but contains offsets and\n * sizes allowing for writes in any order and sharing of child values among\n * list values.\n */\n ListView: 25,\n /**\n * Same as ListView, but with 64-bit offsets and sizes, allowing to represent\n * extremely large data values.\n */\n LargeListView: 26\n});\n\n/**\n * Floating point number precision.\n */\nexport const Precision = /** @type {const} */ ({\n /** 16-bit floating point number. */\n HALF: 0,\n /** 32-bit floating point number. */\n SINGLE: 1,\n /** 64-bit floating point number. */\n DOUBLE: 2\n});\n\n/**\n * Date units.\n */\nexport const DateUnit = /** @type {const} */ ({\n /* Days (as 32 bit int) since the UNIX epoch. */\n DAY: 0,\n /**\n * Milliseconds (as 64 bit int) indicating UNIX time elapsed since the epoch\n * (no leap seconds), with values evenly divisible by 86400000.\n */\n MILLISECOND: 1\n});\n\n/**\n * Time units.\n */\nexport const TimeUnit = /** @type {const} */ ({\n /** Seconds. */\n SECOND: 0,\n /** Milliseconds. */\n MILLISECOND: 1,\n /** Microseconds. */\n MICROSECOND: 2,\n /** Nanoseconds. */\n NANOSECOND: 3\n});\n\n/**\n * Date/time interval units.\n */\nexport const IntervalUnit = /** @type {const} */ ({\n /**\n * Indicates the number of elapsed whole months, stored as 4-byte signed\n * integers.\n */\n YEAR_MONTH: 0,\n /**\n * Indicates the number of elapsed days and milliseconds (no leap seconds),\n * stored as 2 contiguous 32-bit signed integers (8-bytes in total). Support\n * of this IntervalUnit is not required for full arrow compatibility.\n */\n DAY_TIME: 1,\n /**\n * A triple of the number of elapsed months, days, and nanoseconds.\n * The values are stored contiguously in 16-byte blocks. Months and days are\n * encoded as 32-bit signed integers and nanoseconds is encoded as a 64-bit\n * signed integer. Nanoseconds does not allow for leap seconds. Each field is\n * independent (e.g. there is no constraint that nanoseconds have the same\n * sign as days or that the quantity of nanoseconds represents less than a\n * day's worth of time).\n */\n MONTH_DAY_NANO: 2\n});\n\n/**\n * Union type modes.\n */\nexport const UnionMode = /** @type {const} */ ({\n /** Sparse union layout with full arrays for each sub-type. */\n Sparse: 0,\n /** Dense union layout with offsets into value arrays. */\n Dense: 1\n});\n\n/**\n * Compression types.\n */\nexport const CompressionType = /** @type {const} */ ({\n /**\n * LZ4 frame compression.\n * Not to be confused with \"raw\" (also called \"block\") format.\n */\n LZ4_FRAME: 0,\n /** Zstandard compression. */\n ZSTD: 1\n});\n\n/**\n * Body compression methods.\n * Provided for forward compatibility in case Arrow needs to support\n * different strategies for compressing the IPC message body (like\n * whole-body compression rather than buffer-level) in the future.\n */\nexport const BodyCompressionMethod = /** @type {const} */ ({\n /**\n * Each constituent buffer is first compressed with the indicated\n * compressor, and then written with the uncompressed length in the first 8\n * bytes as a 64-bit little-endian signed integer followed by the compressed\n * buffer bytes (and then padding as required by the protocol). The\n * uncompressed length may be set to -1 to indicate that the data that\n * follows is not compressed, which can be useful for cases where\n * compression does not yield appreciable savings.\n */\n BUFFER: 0\n});\n","/**\n * @import { Int64ArrayConstructor, IntArrayConstructor, IntegerArray, TypedArray } from '../types.js'\n */\nexport const uint8Array = Uint8Array;\nexport const uint16Array = Uint16Array;\nexport const uint32Array = Uint32Array;\nexport const uint64Array = BigUint64Array;\nexport const int8Array = Int8Array;\nexport const int16Array = Int16Array;\nexport const int32Array = Int32Array;\nexport const int64Array = BigInt64Array;\nexport const float32Array = Float32Array;\nexport const float64Array = Float64Array;\n\n/**\n * Check if an input value is an ArrayBuffer or SharedArrayBuffer.\n * @param {unknown} data\n * @returns {data is ArrayBufferLike}\n */\nexport function isArrayBufferLike(data) {\n return data instanceof ArrayBuffer || (\n typeof SharedArrayBuffer !== 'undefined' &&\n data instanceof SharedArrayBuffer\n );\n}\n\n/**\n * Return the appropriate typed array constructor for the given\n * integer type metadata.\n * @param {number} bitWidth The integer size in bits.\n * @param {boolean} signed Flag indicating if the integer is signed.\n * @returns {IntArrayConstructor}\n */\nexport function intArrayType(bitWidth, signed) {\n const i = Math.log2(bitWidth) - 3;\n return (\n signed\n ? [int8Array, int16Array, int32Array, int64Array]\n : [uint8Array, uint16Array, uint32Array, uint64Array]\n )[i];\n}\n\n/** Shared prototype for typed arrays. */\nconst TypedArray = Object.getPrototypeOf(Int8Array);\n\n/**\n * Check if a value is a typed array.\n * @param {*} value The value to check.\n * @returns {value is TypedArray}\n * True if value is a typed array, false otherwise.\n */\nexport function isTypedArray(value) {\n return value instanceof TypedArray;\n}\n\n/**\n * Check if a value is either a standard array or typed array.\n * @param {*} value The value to check.\n * @returns {value is (Array | TypedArray)}\n * True if value is an array, false otherwise.\n */\nexport function isArray(value) {\n return Array.isArray(value) || isTypedArray(value);\n}\n\n/**\n * Check if a value is an array type (constructor) for 64-bit integers,\n * one of BigInt64Array or BigUint64Array.\n * @param {*} value The value to check.\n * @returns {value is Int64ArrayConstructor}\n * True if value is a 64-bit array type, false otherwise.\n */\nexport function isInt64ArrayType(value) {\n return value === int64Array || value === uint64Array;\n}\n\n/**\n * Determine the correct index into an offset array for a given\n * full column row index. Assumes offset indices can be manipulated\n * as 32-bit signed integers.\n * @param {IntegerArray} offsets The offsets array.\n * @param {number} index The full column row index.\n */\nexport function bisect(offsets, index) {\n let a = 0;\n let b = offsets.length;\n if (b <= 2147483648) { // 2 ** 31\n // fast version, use unsigned bit shift\n // array length fits within 32-bit signed integer\n do {\n const mid = (a + b) >>> 1;\n if (offsets[mid] <= index) a = mid + 1;\n else b = mid;\n } while (a < b);\n } else {\n // slow version, use division and truncate\n // array length exceeds 32-bit signed integer\n do {\n const mid = Math.trunc((a + b) / 2);\n if (offsets[mid] <= index) a = mid + 1;\n else b = mid;\n } while (a < b);\n }\n return a;\n}\n\n/**\n * Compute a 64-bit aligned buffer size.\n * @param {number} length The starting size.\n * @param {number} bpe Bytes per element.\n * @returns {number} The aligned size.\n */\nfunction align64(length, bpe = 1) {\n return (((length * bpe) + 7) & ~7) / bpe;\n}\n\n/**\n * Return a 64-bit aligned version of the array.\n * @template {TypedArray} T\n * @param {T} array The array.\n * @param {number} length The current array length.\n * @returns {T} The aligned array.\n */\nexport function align(array, length = array.length) {\n const alignedLength = align64(length, array.BYTES_PER_ELEMENT);\n return array.length > alignedLength ? /** @type {T} */ (array.subarray(0, alignedLength))\n : array.length < alignedLength ? resize(array, alignedLength)\n : array;\n}\n\n/**\n * Resize a typed array to exactly the specified length.\n * @template {TypedArray} T\n * @param {T} array The array.\n * @param {number} newLength The new length.\n * @param {number} [offset] The offset at which to copy the old array.\n * @returns {T} The resized array.\n */\nexport function resize(array, newLength, offset = 0) {\n // @ts-ignore\n const newArray = new array.constructor(newLength);\n newArray.set(array, offset);\n return newArray;\n}\n\n/**\n * Grow a typed array to accommdate a minimum index. The array size is\n * doubled until it exceeds the minimum index.\n * @template {TypedArray} T\n * @param {T} array The array.\n * @param {number} index The minimum index.\n * @param {boolean} [shift] Flag to shift copied bytes to back of array.\n * @returns {T} The resized array.\n */\nexport function grow(array, index, shift) {\n while (array.length <= index) {\n array = resize(array, array.length << 1, shift ? array.length : 0);\n }\n return array;\n}\n","/**\n * Check if a value is a Date instance\n * @param {*} value The value to check.\n * @returns {value is Date} True if value is a Date, false otherwise.\n */\nexport function isDate(value) {\n return value instanceof Date;\n}\n\n/**\n * Check if a value is iterable.\n * @param {*} value The value to check.\n * @returns {value is Iterable} True if value is iterable, false otherwise.\n */\nexport function isIterable(value) {\n return typeof value[Symbol.iterator] === 'function';\n}\n\n/**\n * Return the input value if it passes a test.\n * Otherwise throw an error using the given message generator.\n * @template T\n * @param {T} value The value to check.\n * @param {(value: T) => boolean} test The test function.\n * @param {(value: *) => string} message Message generator.\n * @returns {T} The input value.\n * @throws if the value does not pass the test\n */\nexport function check(value, test, message) {\n if (test(value)) return value;\n throw new Error(message(value));\n}\n\n/**\n * Return the input value if it exists in the provided set.\n * Otherwise throw an error using the given message generator.\n * @template T\n * @param {T} value The value to check.\n * @param {T[] | Record<string,T>} set The set of valid values.\n * @param {(value: *) => string} [message] Message generator.\n * @returns {T} The input value.\n * @throws if the value is not included in the set\n */\nexport function checkOneOf(value, set, message) {\n set = Array.isArray(set) ? set : Object.values(set);\n return check(\n value,\n (value) => set.includes(value),\n message ?? (() => `${value} must be one of ${set}`)\n );\n}\n\n/**\n * Return the first object key that pairs with the given value.\n * @param {Record<string,any>} object The object to search.\n * @param {any} value The value to lookup.\n * @returns {string} The first matching key, or '<Unknown>' if not found.\n */\nexport function keyFor(object, value) {\n for (const [key, val] of Object.entries(object)) {\n if (val === value) return key;\n }\n return '<Unknown>';\n}\n","/**\n * @import { BinaryType, BinaryViewType, BoolType, DataType, DateType, DateUnit_, DecimalType, DictionaryType, DurationType, Field, FixedSizeBinaryType, FixedSizeListType, FloatType, IntBitWidth, IntervalType, IntervalUnit_, IntType, LargeBinaryType, LargeListType, LargeListViewType, LargeUtf8Type, ListType, ListViewType, MapType, NullType, Precision_, RunEndEncodedType, StructType, TimestampType, TimeType, TimeUnit_, UnionMode_, UnionType, Utf8Type, Utf8ViewType } from './types.js'\n */\nimport { DateUnit, IntervalUnit, Precision, TimeUnit, Type, UnionMode } from './constants.js';\nimport { intArrayType, float32Array, float64Array, int32Array, int64Array, uint16Array, uint64Array } from './util/arrays.js';\nimport { check, checkOneOf, keyFor } from './util/objects.js';\n\n/**\n * @typedef {Field | DataType} FieldInput\n */\n\nexport const invalidDataType = (typeId) =>\n `Unsupported data type: \"${keyFor(Type, typeId)}\" (id ${typeId})`;\n\n/**\n * Return a new field instance for use in a schema or type definition. A field\n * represents a field name, data type, and additional metadata. Fields are used\n * to represent child types within nested types like List, Struct, and Union.\n * @param {string} name The field name.\n * @param {DataType} type The field data type.\n * @param {boolean} [nullable=true] Flag indicating if the field is nullable\n * (default `true`).\n * @param {Map<string,string>|null} [metadata=null] Custom field metadata\n * annotations (default `null`).\n * @returns {Field} The field instance.\n */\nexport const field = (name, type, nullable = true, metadata = null) => ({\n name,\n type,\n nullable,\n metadata\n});\n\n/**\n * Checks if a value is a field instance.\n * @param {any} value\n * @returns {value is Field}\n */\nfunction isField(value) {\n return Object.hasOwn(value, 'name') && isDataType(value.type)\n}\n\n/**\n * Checks if a value is a data type instance.\n * @param {any} value\n * @returns {value is DataType}\n */\nfunction isDataType(value) {\n return typeof value?.typeId === 'number';\n}\n\n/**\n * Return a field instance from a field or data type input.\n * @param {FieldInput} value\n * The value to map to a field.\n * @param {string} [defaultName] The default field name.\n * @param {boolean} [defaultNullable=true] The default nullable value.\n * @returns {Field} The field instance.\n */\nfunction asField(value, defaultName = '', defaultNullable = true) {\n return isField(value)\n ? value\n : field(\n defaultName,\n check(value, isDataType, () => `Data type expected.`),\n defaultNullable\n );\n}\n\n/////\n\n/**\n * Return a basic type with only a type id.\n * @template {typeof Type[keyof typeof Type]} T\n * @param {T} typeId The type id.\n */\nconst basicType = (typeId) => ({ typeId });\n\n/**\n * Return a Dictionary data type instance. A dictionary type consists of a\n * dictionary of values (which may be of any type) and corresponding integer\n * indices that reference those values. If values are repeated, a dictionary\n * encoding can provide substantial space savings. In the IPC format,\n * dictionary indices reside alongside other columns in a record batch, while\n * dictionary values are written to special dictionary batches, linked by a\n * unique dictionary *id*.\n * @param {DataType} type The data type of dictionary\n * values.\n * @param {IntType} [indexType] The data type of\n * dictionary indices. Must be an integer type (default `int32`).\n * @param {boolean} [ordered=false] Indicates if dictionary values are\n * ordered (default `false`).\n * @param {number} [id=-1] The dictionary id. The default value (-1) indicates\n * the dictionary applies to a single column only. Provide an explicit id in\n * order to reuse a dictionary across columns when building, in which case\n * different dictionaries *must* have different unique ids. All dictionary\n * ids are later resolved (possibly to new values) upon IPC encoding.\n * @returns {DictionaryType}\n */\nexport const dictionary = (type, indexType, ordered = false, id = -1) => ({\n typeId: Type.Dictionary,\n id,\n dictionary: type,\n indices: indexType || int32(),\n ordered\n});\n\n/**\n * Return a Null data type instance. Null data requires no storage and all\n * extracted values are `null`.\n * @returns {NullType} The null data type.\n */\nexport const nullType = () => basicType(Type.Null);\n\n/**\n * Return an Int data type instance.\n * @param {IntBitWidth} [bitWidth=32] The integer bit width.\n * One of `8`, `16`, `32` (default), or `64`.\n * @param {boolean} [signed=true] Flag for signed or unsigned integers\n * (default `true`).\n * @returns {IntType} The integer data type.\n */\nexport const int = (bitWidth = 32, signed = true) => ({\n typeId: Type.Int,\n bitWidth: checkOneOf(bitWidth, [8, 16, 32, 64]),\n signed,\n values: intArrayType(bitWidth, signed)\n});\n/**\n * Return an Int data type instance for 8 bit signed integers.\n * @returns {IntType} The integer data type.\n */\nexport const int8 = () => int(8);\n/**\n * Return an Int data type instance for 16 bit signed integers.\n * @returns {IntType} The integer data type.\n */\nexport const int16 = () => int(16);\n/**\n * Return an Int data type instance for 32 bit signed integers.\n * @returns {IntType} The integer data type.\n */\nexport const int32 = () => int(32);\n/**\n * Return an Int data type instance for 64 bit signed integers.\n * @returns {IntType} The integer data type.\n */\nexport const int64 = () => int(64);\n/**\n * Return an Int data type instance for 8 bit unsigned integers.\n * @returns {IntType} The integer data type.\n */\nexport const uint8 = () => int(8, false);\n/**\n * Return an Int data type instance for 16 bit unsigned integers.\n * @returns {IntType} The integer data type.\n */\nexport const uint16 = () => int(16, false);\n/**\n * Return an Int data type instance for 32 bit unsigned integers.\n * @returns {IntType} The integer data type.\n */\nexport const uint32 = () => int(32, false);\n/**\n * Return an Int data type instance for 64 bit unsigned integers.\n * @returns {IntType} The integer data type.\n */\nexport const uint64 = () => int(64, false);\n\n/**\n * Return a Float data type instance for floating point numbers.\n * @param {Precision_} [precision=2] The floating point\n * precision. One of `Precision.HALF` (16-bit), `Precision.SINGLE` (32-bit)\n * or `Precision.DOUBLE` (64-bit, default).\n * @returns {FloatType} The floating point data type.\n */\nexport const float = (precision = 2) => ({\n typeId: Type.Float,\n precision: checkOneOf(precision, Precision),\n values: [uint16Array, float32Array, float64Array][precision]\n});\n/**\n * Return a Float data type instance for half-precision (16 bit) numbers.\n * @returns {FloatType} The floating point data type.\n */\nexport const float16 = () => float(Precision.HALF);\n/**\n * Return a Float data type instance for single-precision (32 bit) numbers.\n * @returns {FloatType} The floating point data type.\n */\nexport const float32 = () => float(Precision.SINGLE);\n/**\n * Return a Float data type instance for double-precision (64 bit) numbers.\n * @returns {FloatType} The floating point data type.\n */\nexport const float64 = () => float(Precision.DOUBLE);\n\n/**\n * Return a Binary data type instance for variably-sized opaque binary data\n * with 32-bit offsets.\n * @returns {BinaryType} The binary data type.\n */\nexport const binary = () => ({\n typeId: Type.Binary,\n offsets: int32Array\n});\n\n/**\n * Return a Utf8 data type instance for Unicode string data.\n * [UTF-8](https://en.wikipedia.org/wiki/UTF-8) code points are stored as\n * binary data.\n * @returns {Utf8Type} The utf8 data type.\n */\nexport const utf8 = () => ({\n typeId: Type.Utf8,\n offsets: int32Array\n});\n\n/**\n * Return a Bool data type instance. Bool values are stored compactly in\n * bitmaps with eight values per byte.\n * @returns {BoolType} The bool data type.\n */\nexport const bool = () => basicType(Type.Bool);\n\n/**\n * Return a Decimal data type instance. Decimal values are represented as 32,\n * 64, 128, or 256 bit integers in two's complement. Decimals are fixed point\n * numbers with a set *precision* (total number of decimal digits) and *scale*\n * (number of fractional digits). For example, the number `35.42` can be\n * represented as `3542` with *precision* ≥ 4 and *scale* = 2.\n * @param {number} precision The decimal precision: the total number of\n * decimal digits that can be represented.\n * @param {number} scale The number of fractional digits, beyond the\n * decimal point.\n * @param {32 | 64 | 128 | 256} [bitWidth] The decimal bit width.\n * One of 32, 64, 128 (default), or 256.\n * @returns {DecimalType} The decimal data type.\n */\nexport const decimal = (precision, scale, bitWidth = 128) => ({\n typeId: Type.Decimal,\n precision,\n scale,\n bitWidth: checkOneOf(bitWidth, [32, 64, 128, 256]),\n values: bitWidth === 32 ? int32Array : uint64Array\n});\n/**\n * Return an Decimal data type instance with a bit width of 32.\n * @param {number} precision The decimal precision: the total number of\n * decimal digits that can be represented.\n * @param {number} scale The number of fractional digits, beyond the\n * decimal point.\n * @returns {DecimalType} The decimal data type.\n */\nexport const decimal32 = (precision, scale) => decimal(precision, scale, 32);\n/**\n * Return an Decimal data type instance with a bit width of 64.\n * @param {number} precision The decimal precision: the total number of\n * decimal digits that can be represented.\n * @param {number} scale The number of fractional digits, beyond the\n * decimal point.\n * @returns {DecimalType} The decimal data type.\n */\nexport const decimal64 = (precision, scale) => decimal(precision, scale, 64);\n/**\n * Return an Decimal data type instance with a bit width of 128.\n * @param {number} precision The decimal precision: the total number of\n * decimal digits that can be represented.\n * @param {number} scale The number of fractional digits, beyond the\n * decimal point.\n * @returns {DecimalType} The decimal data type.\n */\nexport const decimal128 = (precision, scale) => decimal(precision, scale, 128);\n/**\n * Return an Decimal data type instance with a bit width of 256.\n * @param {number} precision The decimal precision: the total number of\n * decimal digits that can be represented.\n * @param {number} scale The number of fractional digits, beyond the\n * decimal point.\n * @returns {DecimalType} The decimal data type.\n */\nexport const decimal256 = (precision, scale) => decimal(precision, scale, 256);\n\n/**\n * Return a Date data type instance. Date values are 32-bit or 64-bit signed\n * integers representing elapsed time since the UNIX epoch (Jan 1, 1970 UTC),\n * either in units of days (32 bits) or milliseconds (64 bits, with values\n * evenly divisible by 86400000).\n * @param {DateUnit_} unit The date unit.\n * One of `DateUnit.DAY` or `DateUnit.MILLISECOND`.\n * @returns {DateType} The date data type.\n */\nexport const date = (unit) => ({\n typeId: Type.Date,\n unit: checkOneOf(unit, DateUnit),\n values: unit === DateUnit.DAY ? int32Array : int64Array\n});\n/**\n * Return a Date data type instance with units of days.\n * @returns {DateType} The date data type.\n */\nexport const dateDay = () => date(DateUnit.DAY);\n/**\n * Return a Date data type instance with units of milliseconds.\n * @returns {DateType} The date data type.\n */\nexport const dateMillisecond = () => date(DateUnit.MILLISECOND);\n\n/**\n * Return a Time data type instance, stored in one of four *unit*s: seconds,\n * milliseconds, microseconds or nanoseconds. The integer *bitWidth* is\n * inferred from the *unit* and is 32 bits for seconds and milliseconds or\n * 64 bits for microseconds and nanoseconds. The allowed values are between 0\n * (inclusive) and 86400 (=24*60*60) seconds (exclusive), adjusted for the\n * time unit (for example, up to 86400000 exclusive for the\n * `DateUnit.MILLISECOND` unit.\n *\n * This definition doesn't allow for leap seconds. Time values from\n * measurements with leap seconds will need to be corrected when ingesting\n * into Arrow (for example by replacing the value 86400 with 86399).\n * @param {TimeUnit_} unit The time unit.\n * One of `TimeUnit.SECOND`, `TimeUnit.MILLISECOND` (default),\n * `TimeUnit.MICROSECOND`, or `TimeUnit.NANOSECOND`.\n * @returns {TimeType} The time data type.\n */\nexport const time = (unit = TimeUnit.MILLISECOND) => {\n unit = checkOneOf(unit, TimeUnit);\n const bitWidth = unit === TimeUnit.SECOND || unit === TimeUnit.MILLISECOND ? 32 : 64;\n return {\n typeId: Type.Time,\n unit,\n bitWidth,\n values: bitWidth === 32 ? int32Array : int64Array\n };\n};\n/**\n * Return a Time data type instance, represented as seconds.\n * @returns {TimeType} The time data type.\n */\nexport const timeSecond = () => time(TimeUnit.SECOND);\n/**\n * Return a Time data type instance, represented as milliseconds.\n * @returns {TimeType} The time data type.\n */\nexport const timeMillisecond = () => time(TimeUnit.MILLISECOND);\n/**\n * Return a Time data type instance, represented as microseconds.\n * @returns {TimeType} The time data type.\n */\nexport const timeMicrosecond = () => time(TimeUnit.MICROSECOND);\n/**\n * Return a Time data type instance, represented as nanoseconds.\n * @returns {TimeType} The time data type.\n */\nexport const timeNanosecond = () => time(TimeUnit.NANOSECOND);\n\n/**\n * Return a Timestamp data type instance. Timestamp values are 64-bit signed\n * integers representing an elapsed time since a fixed epoch, stored in either\n * of four units: seconds, milliseconds, microseconds or nanoseconds, and are\n * optionally annotated with a timezone. Timestamp values do not include any\n * leap seconds (in other words, all days are considered 86400 seconds long).\n * @param {TimeUnit_} [unit] The time unit.\n * One of `TimeUnit.SECOND`, `TimeUnit.MILLISECOND` (default),\n * `TimeUnit.MICROSECOND`, or `TimeUnit.NANOSECOND`.\n * @param {string|null} [timezone=null] An optional string for the name of a\n * timezone. If provided, the value should either be a string as used in the\n * Olson timezone database (the \"tz database\" or \"tzdata\"), such as\n * \"America/New_York\", or an absolute timezone offset of the form \"+XX:XX\" or\n * \"-XX:XX\", such as \"+07:30\".Whether a timezone string is present indicates\n * different semantics about the data.\n * @returns {TimestampType} The time data type.\n */\nexport const timestamp = (unit = TimeUnit.MILLISECOND, timezone = null) => ({\n typeId: Type.Timestamp,\n unit: checkOneOf(unit, TimeUnit),\n timezone,\n values: int64Array\n});\n\n/**\n * Return an Interval type instance. Values represent calendar intervals stored\n * as integers for each date part. The supported *unit*s are year/moth,\n * day/time, and month/day/nanosecond intervals.\n *\n * `IntervalUnit.YEAR_MONTH` indicates the number of elapsed whole months,\n * stored as 32-bit signed integers.\n *\n * `IntervalUnit.DAY_TIME` indicates the number of elapsed days and\n * milliseconds (no leap seconds), stored as 2 contiguous 32-bit signed\n * integers (8-bytes in total).\n *\n * `IntervalUnit.MONTH_DAY_NANO` is a triple of the number of elapsed months,\n * days, and nanoseconds. The values are stored contiguously in 16-byte blocks.\n * Months and days are encoded as 32-bit signed integers and nanoseconds is\n * encoded as a 64-bit signed integer. Nanoseconds does not allow for leap\n * seconds. Each field is independent (e.g. there is no constraint that\n * nanoseconds have the same sign as days or that the quantity of nanoseconds\n * represents less than a day's worth of time).\n * @param {IntervalUnit_} unit The interval unit.\n * One of `IntervalUnit.YEAR_MONTH`, `IntervalUnit.DAY_TIME`, or\n * `IntervalUnit.MONTH_DAY_NANO` (default).\n * @returns {IntervalType} The interval data type.\n */\nexport const interval = (unit = IntervalUnit.MONTH_DAY_NANO) => ({\n typeId: Type.Interval,\n unit: checkOneOf(unit, IntervalUnit),\n values: unit === IntervalUnit.MONTH_DAY_NANO ? undefined : int32Array\n});\n\n/**\n * Return a List data type instance, representing variably-sized lists\n * (arrays) with 32-bit offsets. A list has a single child data type for\n * list entries. Lists are represented using integer offsets that indicate\n * list extents within a single child array containing all list values.\n * @param {FieldInput} child The child (list item) field or data type.\n * @returns {ListType} The list data type.\n */\nexport const list = (child) => ({\n typeId: Type.List,\n children: [ asField(child) ],\n offsets: int32Array\n});\n\n/**\n * Return a Struct data type instance. A struct consists of multiple named\n * child data types. Struct values are stored as parallel child batches, one\n * per child type, and extracted to standard JavaScript objects.\n * @param {Field[] | Record<string, DataType>} children\n * An array of property fields, or an object mapping property names to data\n * types. If an object, the instantiated fields are assumed to be nullable\n * and have no metadata.\n * @returns {StructType} The struct data type.\n */\nexport const struct = (children) => ({\n typeId: Type.Struct,\n children: Array.isArray(children) && children.length > 0 && isField(children[0])\n ? /** @type {Field[]} */ (children)\n : Object.entries(children).map(([name, type]) => field(name, type))\n});\n\n/**\n * Return a Union type instance. A union is a complex type with parallel\n * *children* data types. Union values are stored in either a sparse\n * (`UnionMode.Sparse`) or dense (`UnionMode.Dense`) layout *mode*. In a\n * sparse layout, child types are stored in parallel arrays with the same\n * lengths, resulting in many unused, empty values. In a dense layout, child\n * types have variable lengths and an offsets array is used to index the\n * appropriate value.\n *\n * By default, ids in the type vector refer to the index in the children\n * array. Optionally, *typeIds* provide an indirection between the child\n * index and the type id. For each child, `typeIds[index]` is the id used\n * in the type vector. The *typeIdForValue* argument provides a lookup\n * function for mapping input data to the proper child type id, and is\n * required if using builder methods.\n * @param {UnionMode_} mode The union mode.\n * One of `UnionMode.Sparse` or `UnionMode.Dense`.\n * @param {FieldInput[]} children The children fields or data types.\n * Types are mapped to nullable fields with no metadata.\n * @param {number[]} [typeIds] Children type ids, in the same order as the\n * children types. Type ids provide a level of indirection over children\n * types. If not provided, the children indices are used as the type ids.\n * @param {(value: any, index: number) => number} [typeIdForValue]\n * A function that takes an arbitrary value and a row index and returns a\n * correponding union type id. Required by builder methods.\n * @returns {UnionType} The union data type.\n */\nexport const union = (mode, children, typeIds, typeIdForValue) => {\n typeIds ??= children.map((v, i) => i);\n return {\n typeId: Type.Union,\n mode: checkOneOf(mode, UnionMode),\n typeIds,\n typeMap: typeIds.reduce((m, id, i) => ((m[id] = i), m), {}),\n children: children.map((v, i) => asField(v, `_${i}`)),\n typeIdForValue,\n offsets: int32Array,\n };\n};\n\n/**\n * Create a FixedSizeBinary data type instance for opaque binary data where\n * each entry has the same fixed size.\n * @param {number} stride The fixed size in bytes.\n * @returns {FixedSizeBinaryType} The fixed size binary data type.\n */\nexport const fixedSizeBinary = (stride) => ({\n typeId: Type.FixedSizeBinary,\n stride\n});\n\n/**\n * Return a FixedSizeList type instance for list (array) data where every list\n * has the same fixed size. A list has a single child data type for list\n * entries. Fixed size lists are represented as a single child array containing\n * all list values, indexed using the known stride.\n * @param {FieldInput} child The list item data type.\n * @param {number} stride The fixed list size.\n * @returns {FixedSizeListType} The fixed size list data type.\n */\nexport const fixedSizeList = (child, stride) => ({\n typeId: Type.FixedSizeList,\n stride,\n children: [ asField(child) ]\n});\n\n/**\n * Internal method to create a Map type instance.\n * @param {boolean} keysSorted Flag indicating if the map keys are sorted.\n * @param {Field} child The child fields.\n * @returns {MapType} The map data type.\n */\nexport const mapType = (keysSorted, child) => ({\n typeId: Type.Map,\n keysSorted,\n children: [child],\n offsets: int32Array\n});\n\n/**\n * Return a Map data type instance representing collections of key-value pairs.\n * A Map is a logical nested type that is represented as a list of key-value\n * structs. The key and value types are not constrained, so the application is\n * responsible for ensuring that the keys are hashable and unique, and that\n * keys are properly sorted if *keysSorted* is `true`.\n * @param {FieldInput} keyField The map key field or data type.\n * @param {FieldInput} valueField The map value field or data type.\n * @param {boolean} [keysSorted=false] Flag indicating if the map keys are\n * sorted (default `false`).\n * @returns {MapType} The map data type.\n */\nexport const map = (keyField, valueField, keysSorted = false) => mapType(\n keysSorted,\n field(\n 'entries',\n struct([ asField(keyField, 'key', false), asField(valueField, 'value') ]),\n false\n )\n);\n\n/**\n * Return a Duration data type instance. Durations represent an absolute length\n * of time unrelated to any calendar artifacts. The resolution defaults to\n * millisecond, but can be any of the other `TimeUnit` values. This type is\n * always represented as a 64-bit integer.\n * @param {TimeUnit_} unit\n * @returns {DurationType} The duration data type.\n */\nexport const duration = (unit = TimeUnit.MILLISECOND) => ({\n typeId: Type.Duration,\n unit: checkOneOf(unit, TimeUnit),\n values: int64Array\n});\n\n/**\n * Return a LargeBinary data type instance for variably-sized opaque binary\n * data with 64-bit offsets, allowing representation of extremely large data\n * values.\n * @returns {LargeBinaryType} The large binary data type.\n */\nexport const largeBinary = () => ({\n typeId: Type.LargeBinary,\n offsets: int64Array\n});\n\n/**\n * Return a LargeUtf8 data type instance for Unicode string data of variable\n * length with 64-bit offsets, allowing representation of extremely large data\n * values. [UTF-8](https://en.wikipedia.org/wiki/UTF-8) code points are stored\n * as binary data.\n * @returns {LargeUtf8Type} The large utf8 data type.\n */\nexport const largeUtf8 = () => ({\n typeId: Type.LargeUtf8,\n offsets: int64Array\n});\n\n/**\n * Return a LargeList data type instance, representing variably-sized lists\n * (arrays) with 64-bit offsets, allowing representation of extremely large\n * data values. A list has a single child data type for list entries. Lists\n * are represented using integer offsets that indicate list extents within a\n * single child array containing all list values.\n * @param {FieldInput} child The child (list item) field or data type.\n * @returns {LargeListType} The large list data type.\n */\nexport const largeList = (child) => ({\n typeId: Type.LargeList,\n children: [ asField(child) ],\n offsets: int64Array\n});\n\n/**\n * Return a RunEndEncoded data type instance, which compresses data by\n * representing consecutive repeated values as a run. This data type uses two\n * child arrays, `run_ends` and `values`. The `run_ends` child array must be\n * a 16, 32, or 64 bit integer array which encodes the indices at which the\n * run with the value in each corresponding index in the values child array\n * ends. Like list and struct types, the `values` array can be of any type.\n * @param {FieldInput} runsField The run-ends field or data type.\n * @param {FieldInput} valuesField The values field or data type.\n * @returns {RunEndEncodedType} The large list data type.\n */\nexport const runEndEncoded = (runsField, valuesField) => ({\n typeId: Type.RunEndEncoded,\n children: [\n check(\n asField(runsField, 'run_ends'),\n (field) => field.type.typeId === Type.Int,\n () => 'Run-ends must have an integer type.'\n ),\n asField(valuesField, 'values')\n ]\n});\n\n/**\n * Return a BinaryView data type instance. BinaryView data is logically the\n * same as the Binary type, but the internal representation uses a view struct\n * that contains the string length and either the string's entire data inline\n * (for small strings) or an inlined prefix, an index of another buffer, and an\n * offset pointing to a slice in that buffer (for non-small strings).\n *\n * Flechette can encode and decode BinaryView data; however, Flechette does\n * not currently support building BinaryView columns from JavaScript values.\n * @returns {BinaryViewType} The binary view data type.\n */\nexport const binaryView = () => /** @type {BinaryViewType} */\n (basicType(Type.BinaryView));\n\n/**\n * Return a Utf8View data type instance. Utf8View data is logically the same as\n * the Utf8 type, but the internal representation uses a view struct that\n * contains the string length and either the string's entire data inline (for\n * small strings) or an inlined prefix, an index of another buffer, and an\n * offset pointing to a slice in that buffer (for non-small strings).\n *\n * Flechette can encode and decode Utf8View data; however, Flechette does\n * not currently support building Utf8View columns from JavaScript values.\n * @returns {Utf8ViewType} The utf8 view data type.\n */\nexport const utf8View = () => /** @type {Utf8ViewType} */\n (basicType(Type.Utf8View));\n\n/**\n * Return a ListView data type instance, representing variably-sized lists\n * (arrays) with 32-bit offsets. ListView data represents the same logical\n * types that List can, but contains both offsets and sizes allowing for\n * writes in any order and sharing of child values among list values.\n *\n * Flechette can encode and decode ListView data; however, Flechette does not\n * currently support building ListView columns from JavaScript values.\n * @param {FieldInput} child The child (list item) field or data type.\n * @returns {ListViewType} The list view data type.\n */\nexport const listView = (child) => ({\n typeId: Type.ListView,\n children: [ asField(child, 'value') ],\n offsets: int32Array\n});\n\n/**\n * Return a LargeListView data type instance, representing variably-sized lists\n * (arrays) with 64-bit offsets, allowing representation of extremely large\n * data values. LargeListView data represents the same logical types that\n * LargeList can, but contains both offsets and sizes allowing for writes\n * in any order and sharing of child values among list values.\n *\n * Flechette can encode and decode LargeListView data; however, Flechette does\n * not currently support building LargeListView columns from JavaScript values.\n * @param {FieldInput} child The child (list item) field or data type.\n * @returns {LargeListViewType} The large list view data type.\n */\nexport const largeListView = (child) => ({\n typeId: Type.LargeListView,\n children: [ asField(child, 'value') ],\n offsets: int64Array\n});\n","/**\n * @import { TimeUnit_, TypedArray } from '../types.js';\n */\nimport { float64Array, int32Array, int64Array, isInt64ArrayType, uint32Array, uint8Array } from './arrays.js';\nimport { TimeUnit } from '../constants.js';\n\n// typed arrays over a shared buffer to aid binary conversion\nconst f64 = new float64Array(2);\nconst buf = f64.buffer;\nconst i64 = new int64Array(buf);\nconst u32 = new uint32Array(buf);\nconst i32 = new int32Array(buf);\nconst u8 = new uint8Array(buf);\n\n/**\n * Return a value unchanged.\n * @template T\n * @param {T} value The value.\n * @returns {T} The value.\n */\nexport function identity(value) {\n return value;\n}\n\n/**\n * Return a value coerced to a BigInt.\n * @param {*} value The value.\n * @returns {bigint} The BigInt value.\n */\nexport function toBigInt(value) {\n return BigInt(value);\n}\n\n/**\n * Return an offset conversion method for the given data type.\n * @param {{ offsets: TypedArray}} type The array type.\n */\nexport function toOffset(type) {\n return isInt64ArrayType(type) ? toBigInt : identity;\n}\n\n/**\n * Return the number of days from a millisecond timestamp.\n * @param {number} value The millisecond timestamp.\n * @returns {number} The number of days.\n */\nexport function toDateDay(value) {\n return (value / 864e5) | 0;\n}\n\n/**\n * Return a timestamp conversion method for the given time unit.\n * @param {TimeUnit_} unit The time unit.\n * @returns {(value: number) => bigint} The conversion method.\n */\nexport function toTimestamp(unit) {\n return unit === TimeUnit.SECOND ? value => toBigInt(value / 1e3)\n : unit === TimeUnit.MILLISECOND ? toBigInt\n : unit === TimeUnit.MICROSECOND ? value => toBigInt(value * 1e3)\n : value => toBigInt(value * 1e6);\n}\n\n/**\n * Write month/day/nanosecond interval to a byte buffer.\n * @param {Array | Float64Array} interval The interval data.\n * @returns {Uint8Array} A byte buffer with the interval data.\n * The returned buffer is reused across calls, and so should be\n * copied to a target buffer immediately.\n */\nexport function toMonthDayNanoBytes([m, d, n]) {\n i32[0] = m;\n i32[1] = d;\n i64[1] = toBigInt(n);\n return u8;\n}\n\n/**\n * Coerce a bigint value to a number. Throws an error if the bigint value\n * lies outside the range of what a number can precisely represent.\n * @param {bigint} value The value to check and possibly convert.\n * @returns {number} The converted number value.\n */\nexport function toNumber(value) {\n if (value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER) {\n throw Error(`BigInt exceeds integer number representation: ${value}`);\n }\n return Number(value);\n}\n\n/**\n * Divide one BigInt value by another, and return the result as a number.\n * The division may involve unsafe integers and a loss of precision.\n * @param {bigint} num The numerator.\n * @param {bigint} div The divisor.\n * @returns {number} The result of the division as a floating point number.\n */\nexport function divide(num, div) {\n return Number(num / div) + Number(num % div) / Number(div);\n}\n\n/**\n * Return a 32-bit decimal conversion method for the given decimal scale.\n * @param {number} scale The scale mapping fractional digits to integers.\n * @returns {(value: number|bigint) => number} A conversion method that maps\n * floating point numbers to 32-bit decimals.\n */\nexport function toDecimal32(scale) {\n return (value) => typeof value === 'bigint'\n ? Number(value)\n : Math.trunc(value * scale);\n}\n\n/**\n * Convert a floating point number or bigint to decimal bytes.\n * @param {number|bigint} value The number to encode. If a bigint, we assume\n * it already represents the decimal in integer form with the correct scale.\n * Otherwise, we assume a float that requires scaled integer conversion.\n * @param {BigUint64Array} buf The uint64 array to write to.\n * @param {number} offset The starting index offset into the array.\n * @param {number} stride The stride of an encoded decimal, in 64-bit steps.\n * @param {number} scale The scale mapping fractional digits to integers.\n */\nexport function toDecimal(value, buf, offset, stride, scale) {\n const v = typeof value === 'bigint'\n ? value\n : toBigInt(Math.trunc(value * scale));\n // assignment into uint64array performs needed truncation for us\n buf[offset] = v;\n if (stride > 1) {\n buf[offset + 1] = (v >> 64n);\n if (stride > 2) {\n buf[offset + 2] = (v >> 128n);\n buf[offset + 3] = (v >> 192n);\n }\n }\n}\n\n// helper method to extract uint64 values from bigints\nconst asUint64 = v => BigInt.asUintN(64, v);\n\n/**\n * Convert a 64-bit decimal value to a bigint.\n * @param {BigUint64Array} buf The uint64 array containing the decimal bytes.\n * @param {number} offset The starting index offset into the array.\n * @returns {bigint} The converted decimal as a bigint, such that all\n * fractional digits are scaled up to integers (for example, 1.12 -> 112).\n */\nexport function fromDecimal64(buf, offset) {\n return BigInt.asIntN(64, buf[offset]);\n}\n\n/**\n * Convert a 128-bit decimal value to a bigint.\n * @param {BigUint64Array} buf The uint64 array containing the decimal bytes.\n * @param {number} offset The starting index offset into the array.\n * @returns {bigint} The converted decimal as a bigint, such that all\n * fractional digits are scaled up to integers (for example, 1.12 -> 112).\n */\nexport function fromDecimal128(buf, offset) {\n const i = offset << 1;\n let x;\n if (BigInt.asIntN(64, buf[i + 1]) < 0) {\n x = asUint64(~buf[i]) | (asUint64(~buf[i + 1]) << 64n);\n x = -(x + 1n);\n } else {\n x = buf[i] | (buf[i + 1] << 64n);\n }\n return x;\n}\n\n/**\n * Convert a 256-bit decimal value to a bigint.\n * @param {BigUint64Array} buf The uint64 array containing the decimal bytes.\n * @param {number} offset The starting index offset into the array.\n * @returns {bigint} The converted decimal as a bigint, such that all\n * fractional digits are scaled up to integers (for example, 1.12 -> 112).\n */\nexport function fromDecimal256(buf, offset) {\n const i = offset << 2;\n let x;\n if (BigInt.asIntN(64, buf[i + 3]) < 0) {\n x = asUint64(~buf[i])\n | (asUint64(~buf[i + 1]) << 64n)\n | (asUint64(~buf[i + 2]) << 128n)\n | (asUint64(~buf[i + 3]) << 192n);\n x = -(x + 1n);\n } else {\n x = buf[i]\n | (buf[i + 1] << 64n)\n | (buf[i + 2] << 128n)\n | (buf[i + 3] << 192n);\n }\n return x;\n}\n\n/**\n * Convert a 16-bit float from integer bytes to a number.\n * Adapted from https://github.com/apache/arrow/blob/main/js/src/util/math.ts\n * @param {number} value The float as a 16-bit integer.\n * @returns {number} The converted 64-bit floating point number.\n */\nexport function fromFloat16(value) {\n const expo = (value & 0x7C00) >> 10;\n const sigf = (value & 0x03FF) / 1024;\n const sign = (-1) ** ((value & 0x8000) >> 15);\n switch (expo) {\n case 0x1F: return sign * (sigf ? Number.NaN : 1 / 0);\n case 0x00: return sign * (sigf ? 6.103515625e-5 * sigf : 0);\n }\n return sign * (2 ** (expo - 15)) * (1 + sigf);\n}\n\n/**\n * Convert a number to a 16-bit float as integer bytes..\n * Inspired by numpy's `npy_double_to_half`:\n * https://github.com/numpy/numpy/blob/5a5987291dc95376bb098be8d8e5391e89e77a2c/numpy/core/src/npymath/halffloat.c#L43\n * Adapted from https://github.com/apache/arrow/blob/main/js/src/util/math.ts\n * @param {number} value The 64-bit floating point number to convert.\n * @returns {number} The converted 16-bit integer.\n */\nexport function toFloat16(value) {\n if (value !== value) return 0x7E00; // NaN\n f64[0] = value;\n\n // Magic numbers:\n // 0x80000000 = 10000000 00000000 00000000 00000000 -- masks the 32nd bit\n // 0x7ff00000 = 01111111 11110000 00000000 00000000 -- masks the 21st-31st bits\n // 0x000fffff = 00000000 00001111 11111111 11111111 -- masks the 1st-20th bit\n const sign = (u32[1] & 0x80000000) >> 16 & 0xFFFF;\n let expo = (u32[1] & 0x7FF00000), sigf = 0x0000;\n\n if (expo >= 0x40F00000) {\n //\n // If exponent overflowed, the float16 is either NaN or Infinity.\n // Rules to propagate the sign bit: mantissa > 0 ? NaN : +/-Infinity\n //\n // Magic numbers:\n // 0x40F00000 = 01000000 11110000 00000000 00000000 -- 6-bit exponent overflow\n // 0x7C000000 = 01111100 00000000 00000000 00000000 -- masks the 27th-31st bits\n //\n // returns:\n // qNaN, aka 32256 decimal, 0x7E00 hex, or 01111110 00000000 binary\n // sNaN, aka 32000 decimal, 0x7D00 hex, or 01111101 00000000 binary\n // +inf, aka 31744 decimal, 0x7C00 hex, or 01111100 00000000 binary\n // -inf, aka 64512 decimal, 0xFC00 hex, or 11111100 00000000 binary\n //\n // If mantissa is greater than 23 bits, set to +Infinity like numpy\n if (u32[0] > 0) {\n expo = 0x7C00;\n } else {\n expo = (expo & 0x7C000000) >> 16;\n sigf = (u32[1] & 0x000FFFFF) >> 10;\n }\n } else if (expo <= 0x3F000000) {\n //\n // If exponent underflowed, the float is either signed zero or subnormal.\n //\n // Magic numbers:\n // 0x3F000000 = 00111111 00000000 00000000 00000000 -- 6-bit exponent underflow\n //\n sigf = 0x100000 + (u32[1] & 0x000FFFFF);\n sigf = 0x100000 + (sigf << ((expo >> 20) - 998)) >> 21;\n expo = 0;\n } else {\n //\n // No overflow or underflow, rebase the exponent and round the mantissa\n // Magic numbers:\n // 0x200 = 00000010 00000000 -- masks off the 10th bit\n //\n // Ensure the first mantissa bit (the 10th one) is 1 and round\n expo = (expo - 0x3F000000) >> 10;\n sigf = ((u32[1] & 0x000FFFFF) + 0x200) >> 10;\n }\n return sign | expo | sigf & 0xFFFF;\n}\n","import { isArray } from './arrays.js';\nimport { isDate } from './objects.js';\n\nconst textDecoder = new TextDecoder('utf-8');\nconst textEncoder = new TextEncoder();\n\n/**\n * Return a UTF-8 string decoded from a byte buffer.\n * @param {Uint8Array} buf The byte buffer.\n * @returns {string} The decoded string.\n */\nexport function decodeUtf8(buf) {\n return textDecoder.decode(buf);\n}\n\n/**\n * Return a byte buffer encoded from a UTF-8 string.\n * @param {string } str The string to encode.\n * @returns {Uint8Array} The encoded byte buffer.\n */\nexport function encodeUtf8(str) {\n return textEncoder.encode(str);\n}\n\n/**\n * Return a string-coercible key value that uniquely identifies a value.\n * @param {*} value The input value.\n * @returns {string} The key string.\n */\nexport function keyString(value) {\n const val = typeof value !== 'object' || !value ? (value ?? null)\n : isDate(value) ? +value\n // @ts-ignore\n : isArray(value) ? `[${value.map(keyString)}]`\n : objectKey(value);\n return `${val}`;\n}\n\nfunction objectKey(value) {\n let s = '';\n let i = -1;\n for (const k in value) {\n if (++i > 0) s += ',';\n s += `\"${k}\":${keyString(value[k])}`;\n }\n return `{${s}}`;\n}\n","import { toNumber } from './numbers.js';\nimport { decodeUtf8 } from './strings.js';\n\n/** The size in bytes of a 32-bit integer. */\nexport const SIZEOF_INT = 4;\n\n/** The size in bytes of a 16-bit integer. */\nexport const SIZEOF_SHORT = 2;\n\n/**\n * Return a boolean for a single bit in a bitmap.\n * @param {Uint8Array} bitmap The bitmap.\n * @param {number} index The bit index to read.\n * @returns {boolean} The boolean bitmap value.\n */\nexport function decodeBit(bitmap, index) {\n return (bitmap[index >> 3] & 1 << (index % 8)) !== 0;\n}\n\n/**\n * Lookup helper for flatbuffer object (table) entries.\n * @param {Uint8Array} buf The byte buffer.\n * @param {number} index The base index of the object.\n */\nexport function readObject(buf, index) {\n const pos = index + readInt32(buf, index);\n const vtable = pos - readInt32(buf, pos);\n const size = readInt16(buf, vtable);\n /**\n * Retrieve a value from a flatbuffer table layout.\n * @template T\n * @param {number} index The table entry index.\n * @param {(buf: Uint8Array, offset: number) => T} read Read function to invoke.\n * @param {T} [fallback=null] The default fallback value.\n * @returns {T}\n */\n return (index, read, fallback = null) => {\n if (index < size) {\n const off = readInt16(buf, vtable + index);\n if (off) return read(buf, pos + off);\n }\n return fallback;\n };\n}\n\n/**\n * Return a buffer offset value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readOffset(buf, offset) {\n return offset;\n}\n\n/**\n * Return a boolean value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {boolean}\n */\nexport function readBoolean(buf, offset) {\n return !!readInt8(buf, offset);\n}\n\n/**\n * Return a signed 8-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readInt8(buf, offset) {\n return readUint8(buf, offset) << 24 >> 24;\n}\n\n/**\n * Return an unsigned 8-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readUint8(buf, offset) {\n return buf[offset];\n}\n\n/**\n * Return a signed 16-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readInt16(buf, offset) {\n return readUint16(buf, offset) << 16 >> 16;\n}\n\n/**\n * Return an unsigned 16-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readUint16(buf, offset) {\n return buf[offset] | buf[offset + 1] << 8;\n}\n\n/**\n * Return a signed 32-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readInt32(buf, offset) {\n return buf[offset]\n | buf[offset + 1] << 8\n | buf[offset + 2] << 16\n | buf[offset + 3] << 24;\n}\n\n/**\n * Return an unsigned 32-bit integer value.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readUint32(buf, offset) {\n return readInt32(buf, offset) >>> 0;\n}\n\n/**\n * Return a signed 64-bit integer value coerced to a JS number.\n * Throws an error if the value exceeds what a JS number can represent.\n * @param {Uint8Array} buf\n * @param {number} offset\n * @returns {number}\n */\nexport function readInt64(buf, offset) {\n return toNumber(BigInt.asIntN(\n 64,\n BigInt(readUint32(buf, offset)) +\n (BigInt(readUint32(buf, offset + SIZEOF_INT)) << 32n)\n ));\n}\n\n/**\n * Create a JavaScript string from UTF-8 data stored inside the FlatBuffer.\n * This allocates a new string and converts to wide chars upon each access.\n * @param {Uint8Array} buf The byte buffer.\n * @param {number} index The index of the string entry.\n * @returns {string} The decoded string.\n */\nexport function readString(buf, index) {\n let offset = index + readInt32(buf, index); // get the string offset\n const length = readInt32(buf, offset); // get the string length\n offset += SIZEOF_INT; // skip length value\n return decodeUtf8(buf.subarray(offset, offset + length));\n}\n\n/**\n * Extract a flatbuffer vector to an array.\n * @template T\n * @param {Uint8Array} buf The byte buffer.\n * @param {number} offset The offset location of the vector.\n * @param {number} stride The stride between vector entries.\n * @param {(buf: Uint8Array, pos: number) => T} extract Vector entry extraction function.\n * @returns {T[]} The extracted vector entries.\n */\nexport function readVector(buf, offset, stride, extract) {\n if (!offset) return [];\n\n // get base position by adding offset delta\n const base = offset + readInt32(buf, offset);\n\n // read vector size, extract entries\n return Array.from(\n { length: readInt32(buf, base) },\n (_, i) => extract(buf, base + SIZEOF_INT + i * stride)\n );\n}\n","/**\n * @import { Batch } from '../batch.js';\n */\n\n/**\n * Symbol for the row index value of a struct object proxy.\n */\nexport const RowIndex = Symbol('rowIndex');\n\n/**\n * Returns a row proxy object factory. The resulting method takes a\n * batch-level row index as input and returns an object that proxies\n * access to underlying batches.\n * @param {string[]} names The column (property) names\n * @param {Batch[]} batches The value batches.\n * @returns {(index: number) => Record<string, any>}\n */\nexport function proxyFactory(names, batches) {\n class RowObject {\n /**\n * Create a new proxy row object representing a struct or table row.\n * @param {number} index The record batch row index.\n */\n constructor(index) {\n this[RowIndex] = index;\n }\n\n /**\n * Return a JSON-compatible object representation.\n */\n toJSON() {\n return structObject(names, batches, this[RowIndex]);\n }\n };\n\n // prototype for row proxy objects\n const proto = RowObject.prototype;\n\n for (let i = 0; i < names.length; ++i) {\n // skip duplicated column names\n if (Object.hasOwn(proto, names[i])) continue;\n\n // add a getter method for the current batch\n const batch = batches[i];\n Object.defineProperty(proto, names[i], {\n get() { return batch.at(this[RowIndex]); },\n enumerable: true\n });\n }\n\n return index => new RowObject(index);\n}\n\n/**\n * Returns a row object factory. The resulting method takes a\n * batch-level row index as input and returns an object whose property\n * values have been extracted from the batches.\n * @param {string[]} names The column (property) names\n * @param {Batch[]} batches The value batches.\n * @returns {(index: number) => Record<string, any>}\n */\nexport function objectFactory(names, batches) {\n return index => structObject(names, batches, index);\n}\n\n/**\n * Return a vanilla object representing a struct (row object) type.\n * @param {string[]} names The column (property) names\n * @param {Batch[]} batches The value batches.\n * @param {number} index The record batch row index.\n * @returns {Record<string, any>}\n */\nexport function structObject(names, batches, index) {\n const obj = {};\n for (let i = 0; i < names.length; ++i) {\n obj[names[i]] = batches[i].at(index);\n }\n return obj;\n}\n","/**\n * @import { Column } from './column.js'\n * @import { DataType, DecimalType, IntegerArray, OffsetArray, TypedArray, TypedArrayConstructor, ValueArray } from './types.js'\n */\nimport { bisect, float64Array } from './util/arrays.js';\nimport { divide, fromDecimal128, fromDecimal256, fromDecimal64, toNumber } from './util/numbers.js';\nimport { decodeBit, readInt32, readInt64 } from './util/read.js';\nimport { decodeUtf8 } from './util/strings.js';\nimport { objectFactory, proxyFactory } from './util/struct.js';\n\n/**\n * Check if the input is a batch that supports direct access to\n * binary data in the form of typed arrays.\n * @param {Batch<any>?} batch The data batch to check.\n * @returns {boolean} True if a direct batch, false otherwise.\n */\nexport function isDirectBatch(batch) {\n return batch instanceof DirectBatch;\n}\n\n/**\n * Column values from a single record batch.\n * A column may contain multiple batches.\n * @template T\n */\nexport class Batch {\n /**\n * The array type to use when extracting data from the batch.\n * A null value indicates that the array type should match\n * the type of the batch's values array.\n * @type {ArrayConstructor | TypedArrayConstructor | null}\n */\n static ArrayType = null;\n\n /**\n * Create a new column batch.\n * @param {object} options\n * @param {number} options.length The length of the batch\n * @param {number} options.nullCount The null value count\n * @param {DataType} options.type The data type.\n * @param {Uint8Array} [options.validity] Validity bitmap buffer\n * @param {TypedArray} [options.values] Values buffer\n * @param {OffsetArray} [options.offsets] Offsets buffer\n * @param {OffsetArray} [options.sizes] Sizes buffer\n * @param {Batch[]} [options.children] Children batches\n */\n constructor({\n length,\n nullCount,\n type,\n validity,\n values,\n offsets,\n sizes,\n children\n }) {\n this.length = length;\n this.nullCount = nullCount;\n this.type = type;\n this.validity = validity;\n this.values = values;\n this.offsets = offsets;\n this.sizes = sizes;\n this.children = children;\n\n // optimize access if this batch has no null values\n // some types (like union) may have null values in\n // child batches, but no top-level validity buffer\n if (!nullCount || !this.validity) {\n /** @type {(index: number) => T | null} */\n this.at = index => this.value(index);\n }\n }\n\n /**\n * Provide an informative object string tag.\n */\n get [Symbol.toStringTag]() {\n return 'Batch';\n }\n\n /**\n * Return the value at the given index.\n * @param {number} index The value index.\n * @returns {T | null} The value.\n */\n at(index) {\n return this.isValid(index) ? this.value(index) : null;\n }\n\n /**\n * Check if a value at the given index is valid (non-null).\n * @param {number} index The value index.\n * @returns {boolean} True if valid, false otherwise.\n */\n isValid(index) {\n return decodeBit(this.validity, index);\n }\n\n /**\n * Return the value at the given index. This method does not check the\n * validity bitmap and is intended primarily for internal use. In most\n * cases, callers should use the `at()` method instead.\n * @param {number} index The value index\n * @returns {T} The value, ignoring the validity bitmap.\n */\n value(index) {\n return /** @type {T} */ (this.values[index]);\n }\n\n /**\n * Extract an array of values within the given index range. Unlike\n * Array.slice, all arguments are required and may not be negative indices.\n * @param {number} start The starting index, inclusive\n * @param {number} end The ending index, exclusive\n * @returns {ValueArray<T?>} The slice of values\n */\n slice(start, end) {\n const n = end - start;\n const values = Array(n);\n for (let i = 0; i < n; ++i) {\n values[i] = this.at(start + i);\n }\n return values;\n }\n\n /**\n * Return an iterator over the values in this batch.\n * @returns {Iterator<T?>}\n */\n *[Symbol.iterator]() {\n for (let i = 0; i < this.length; ++i) {\n yield this.at(i);\n }\n }\n}\n\n/**\n * A batch whose value buffer can be used directly, without transformation.\n * @template T\n * @extends {Batch<T>}\n */\nexport class DirectBatch extends Batch {\n /**\n * Create a new column batch with direct value array access.\n * @param {object} options\n * @param {number} options.length The length of the batch\n * @param {number} options.nullCount The null value count\n * @param {DataType} options.type The data type.\n * @param {Uint8Array} [options.validity] Validity bitmap buffer\n * @param {TypedArray} options.values Values buffer\n */\n constructor(options) {\n super(options);\n // underlying buffers may be padded, exceeding the logical batch length\n // we trim the values array so we can safely access it directly\n const { length, values } = this;\n this.values = values.subarray(0, length);\n }\n\n /**\n * Extract an array of values within the given index range. Unlike\n * Array.slice, all arguments are required and may not be negative indices.\n * When feasible, a zero-copy subarray of a typed array is returned.\n * @param {number} start The starting index, inclusive\n * @param {number} end The ending index, exclusive\n * @returns {ValueArray<T?>} The slice of values\n */\n slice(start, end) {\n // @ts-ignore\n return this.nullCount\n ? super.slice(start, end)\n : this.values.subarray(start, end);\n }\n\n /**\n * Return an iterator over the values in this batch.\n * @returns {Iterator<T?>}\n */\n [Symbol.iterator]() {\n return this.nullCount\n ? super[Symbol.iterator]()\n : /** @type {Iterator<T?>} */ (this.values[Symbol.iterator]());\n }\n}\n\n/**\n * A batch whose values are transformed to 64-bit numbers.\n * @extends {Batch<number>}\n */\nexport class NumberBatch extends Batch {\n static ArrayType = float64Array;\n}\n\n/**\n * A batch whose values should be returned in a standard array.\n * @template T\n * @extends {Batch<T>}\n */\nexport class ArrayBatch extends Batch {\n static ArrayType = Array;\n}\n\n/**\n * A batch of null values only.\n * @extends {ArrayBatch<null>}\n */\nexport class NullBatch extends ArrayBatch {\n /**\n * @param {number} index The value index\n * @returns {null}\n */\n value(index) { // eslint-disable-line no-unused-vars\n return null;\n }\n}\n\n/**\n * A batch that coerces BigInt values to 64-bit numbers.\n * @extends {NumberBatch}\n */\nexport class Int64Batch extends NumberBatch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n return toNumber(/** @type {bigint} */ (this.values[index]));\n }\n}\n\n/**\n * A batch of 16-bit floating point numbers, accessed as unsigned\n * 16-bit ints and transformed to 64-bit numbers.\n */\nexport class Float16Batch extends NumberBatch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n const v = /** @type {number} */ (this.values[index]);\n const expo = (v & 0x7C00) >> 10;\n const sigf = (v & 0x03FF) / 1024;\n const sign = (-1) ** ((v & 0x8000) >> 15);\n switch (expo) {\n case 0x1F: return sign * (sigf ? Number.NaN : 1 / 0);\n case 0x00: return sign * (sigf ? 6.103515625e-5 * sigf : 0);\n }\n return sign * (2 ** (expo - 15)) * (1 + sigf);\n }\n}\n\n/**\n * A batch of boolean values stored as a bitmap.\n * @extends {ArrayBatch<boolean>}\n */\nexport class BoolBatch extends ArrayBatch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n return decodeBit(/** @type {Uint8Array} */ (this.values), index);\n }\n}\n\n/**\n * A batch of 32-bit decimal numbers, returned as converted 64-bit floating\n * point numbers. Number coercion may be lossy if the decimal precision can\n * not be represented in a 64-bit floating point format.\n * @extends {NumberBatch}\n */\nexport class Decimal32NumberBatch extends NumberBatch {\n constructor(options) {\n super(options);\n const { scale } = /** @type {DecimalType} */ (this.type);\n this.scale = 10 ** scale;\n }\n /**\n * @param {number} index The value index\n */\n value(index) {\n return /** @type {number} */(this.values[index]) / this.scale;\n }\n}\n\n/**\n * An abstract class for a batch of 64-, 128- or 256-bit decimal numbers,\n * accessed in strided BigUint64Arrays.\n * @template T\n * @extends {Batch<T>}\n */\nexport class DecimalBatch extends Batch {\n constructor(options) {\n super(options);\n const { bitWidth, scale } = /** @type {DecimalType} */ (this.type);\n this.decimal = bitWidth === 64 ? fromDecimal64\n : bitWidth === 128 ? fromDecimal128\n : fromDecimal256;\n this.scale = 10n ** BigInt(scale);\n }\n}\n\n/**\n * A batch of 64-, 128- or 256-bit decimal numbers, returned as converted\n * 64-bit floating point numbers. Number coercion may be lossy if the decimal\n * precision can not be represented in a 64-bit floating point format.\n * @extends {DecimalBatch<number>}\n */\nexport class DecimalNumberBatch extends DecimalBatch {\n static ArrayType = float64Array;\n /**\n * @param {number} index The value index\n */\n value(index) {\n return divide(\n this.decimal(/** @type {BigUint64Array} */ (this.values), index),\n this.scale\n );\n }\n}\n\n/**\n * A batch of 64-, 128- or 256-bit decimal numbers, returned as scaled\n * bigint values, such that all fractional digits have been shifted\n * to integer places by the decimal type scale factor.\n * @extends {DecimalBatch<bigint>}\n */\nexport class DecimalBigIntBatch extends DecimalBatch {\n static ArrayType = Array;\n /**\n * @param {number} index The value index\n */\n value(index) {\n return this.decimal(/** @type {BigUint64Array} */ (this.values), index);\n }\n}\n\n/**\n * A batch of date or timestamp values that are coerced to UNIX epoch timestamps\n * and returned as JS Date objects. This batch wraps a source batch that provides\n * timestamp values.\n * @extends {ArrayBatch<Date>}\n */\nexport class DateBatch extends ArrayBatch {\n /**\n * Create a new date batch.\n * @param {Batch<number>} batch A batch of timestamp values.\n */\n constructor(batch) {\n super(batch);\n this.source = batch;\n }\n\n /**\n * @param {number} index The value index\n */\n value(index) {\n return new Date(this.source.value(index));\n }\n}\n\n/**\n * A batch of dates as day counts, coerced to timestamp numbers.\n */\nexport class DateDayBatch extends NumberBatch {\n /**\n * @param {number} index The value index\n * @returns {number}\n */\n value(index) {\n // epoch days to milliseconds\n return 86400000 * /** @type {number} */ (this.values[index]);\n }\n}\n\n/**\n * A batch of dates as millisecond timestamps, coerced to numbers.\n */\nexport const DateDayMillisecondBatch = Int64Batch;\n\n/**\n * A batch of timestaps in seconds, coerced to millisecond numbers.\n */\nexport class TimestampSecondBatch extends Int64Batch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n return super.value(index) * 1e3; // seconds to milliseconds\n }\n}\n\n/**\n * A batch of timestaps in milliseconds, coerced to numbers.\n */\nexport const TimestampMillisecondBatch = Int64Batch;\n\n/**\n * A batch of timestaps in microseconds, coerced to millisecond numbers.\n */\nexport class TimestampMicrosecondBatch extends Int64Batch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n // microseconds to milliseconds\n return divide(/** @type {bigint} */ (this.values[index]), 1000n);\n }\n}\n\n/**\n * A batch of timestaps in nanoseconds, coerced to millisecond numbers.\n */\nexport class TimestampNanosecondBatch extends Int64Batch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n // nanoseconds to milliseconds\n return divide(/** @type {bigint} */ (this.values[index]), 1000000n);\n }\n}\n\n/**\n * A batch of day/time intervals, returned as two-element 32-bit int arrays.\n * @extends {ArrayBatch<Int32Array>}\n */\nexport class IntervalDayTimeBatch extends ArrayBatch {\n /**\n * @param {number} index The value index\n * @returns {Int32Array}\n */\n value(index) {\n const values = /** @type {Int32Array} */ (this.values);\n return values.subarray(index << 1, (index + 1) << 1);\n }\n}\n\n/**\n * A batch of month/day/nanosecond intervals, returned as three-element arrays.\n * @extends {ArrayBatch<Float64Array>}\n */\nexport class IntervalMonthDayNanoBatch extends ArrayBatch {\n /**\n * @param {number} index The value index\n */\n value(index) {\n const values = /** @type {Uint8Array} */ (this.values);\n const base = index << 4;\n return Float64Array.of(\n readInt32(values, base),\n readInt32(values, base + 4),\n readInt64(values, base + 8)\n );\n }\n}\n\nconst offset32 = ({values, offsets}, index) => values.subarray(offsets[index], offsets[index + 1]);\nconst offset64 = ({values, offsets}, index) => values.subarray(toNumber(offsets[index]), toNumber(offsets[index + 1]));\n\n/**\n * A batch of binary blobs with variable offsets, returned as byte buffers of\n * unsigned 8-bit integers. The offsets are 32-bit ints.\n * @extends {ArrayBatch<Uint8Array>}\n */\nexport class BinaryBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {Uint8Array}\n */\n value(index) {\n return offset32(this, index);\n }\n}\n\n/**\n * A batch of binary blobs with variable offsets, returned as byte buffers of\n * unsigned 8-bit integers. The offsets are 64-bit ints. Value extraction will\n * fail if an offset exceeds `Number.MAX_SAFE_INTEGER`.\n * @extends {ArrayBatch<Uint8Array>}\n */\nexport class LargeBinaryBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {Uint8Array}\n */\n value(index) {\n return offset64(this, index);\n }\n}\n\n/**\n * A batch of UTF-8 strings with variable offsets. The offsets are 32-bit ints.\n * @extends {ArrayBatch<string>}\n */\nexport class Utf8Batch extends ArrayBatch {\n /**\n * @param {number} index\n */\n value(index) {\n return decodeUtf8(offset32(this, index));\n }\n}\n\n/**\n * A batch of UTF-8 strings with variable offsets. The offsets are 64-bit ints.\n * Value extraction will fail if an offset exceeds `Number.MAX_SAFE_INTEGER`.\n * @extends {ArrayBatch<string>}\n */\nexport class LargeUtf8Batch extends ArrayBatch {\n /**\n * @param {number} index\n */\n value(index) {\n return decodeUtf8(offset64(this, index));\n }\n}\n\n/**\n * A batch of list (array) values of variable length. The list offsets are\n * 32-bit ints.\n * @template V\n * @extends {ArrayBatch<ValueArray<V>>}\n */\nexport class ListBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {ValueArray<V>}\n */\n value(index) {\n const offsets = /** @type {Int32Array} */ (this.offsets);\n return this.children[0].slice(offsets[index], offsets[index + 1]);\n }\n}\n\n/**\n * A batch of list (array) values of variable length. The list offsets are\n * 64-bit ints. Value extraction will fail if an offset exceeds\n * `Number.MAX_SAFE_INTEGER`.\n * @template V\n * @extends {ArrayBatch<ValueArray<V>>}\n */\nexport class LargeListBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {ValueArray<V>}\n */\n value(index) {\n const offsets = /** @type {BigInt64Array} */ (this.offsets);\n return this.children[0].slice(toNumber(offsets[index]), toNumber(offsets[index + 1]));\n }\n}\n\n/**\n * A batch of list (array) values of variable length. The list offsets and\n * sizes are 32-bit ints.\n * @template V\n * @extends {ArrayBatch<ValueArray<V>>}\n */\nexport class ListViewBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {ValueArray<V>}\n */\n value(index) {\n const a = /** @type {number} */ (this.offsets[index]);\n const b = a + /** @type {number} */ (this.sizes[index]);\n return this.children[0].slice(a, b);\n }\n}\n\n/**\n * A batch of list (array) values of variable length. The list offsets and\n * sizes are 64-bit ints. Value extraction will fail if an offset or size\n * exceeds `Number.MAX_SAFE_INTEGER`.\n * @template V\n * @extends {ArrayBatch<ValueArray<V>>}\n */\nexport class LargeListViewBatch extends ArrayBatch {\n /**\n * @param {number} index\n * @returns {ValueArray<V>}\n */\n value(index) {\n const a = /** @type {bigint} */ (this.offsets[index]);\n const b = a + /** @type {bigint} */ (this.sizes[index]);\n return this.children[0].slice(toNumber(a), toNumber(b));\n }\n}\n\n/**\n * A batch with a fixed stride.\n * @template T\n * @extends {ArrayBatch<T>}\n */\nclass FixedBatch extends ArrayBatch {\n constructor(options) {\n super(options);\n /** @type {number} */\n // @ts-ignore\n this.stride = this.type.stride;\n }\n}\n\n/**\n * A batch of binary blobs of fixed size, returned as byte buffers of unsigned\n * 8-bit integers.\n * @extends {FixedBatch<Uint8Array>}\n */\nexport class FixedBinaryBatch extends FixedBatch {\n /**\n * @param {number} index\n * @returns {Uint8Array}\n */\n value(index) {\n const { stride, values } = this;\n return /** @type {Uint8Array} */ (values)\n .subarray(index * stride, (index + 1) * stride);\n }\n}\n\n/**\n * A batch of list (array) values of fixed length.\n * @template V\n * @extends {FixedBatch<ValueArray<V>>}\n */\nexport class FixedListBatch extends FixedBatch {\n /**\n * @param {number} index\n * @returns {ValueArray<V>}\n */\n value(index) {\n const { children, stride } = this;\n return children[0].slice(index * stride, (index + 1) * stride);\n }\n}\n\n/**\n * Extract Map key-value pairs from parallel child batches.\n */\nfunction pairs({ children, offsets }, index) {\n const [ keys, vals ] = children[0].children;\n const start = offsets[index];\n const end = offsets[index + 1];\n const entries = [];\n for (let i = start; i < end; ++i) {\n entries.push([keys.at(i), vals.at(i)]);\n }\n return entries;\n}\n\n/**\n * A batch of map (key, value) values. The map is represented as a list of\n * key-value structs.\n * @template K, V\n * @extends {ArrayBatch<[K, V][]>}\n */\nexport class MapEntryBatch extends ArrayBatch {\n /**\n * Return the value at the given index.\n * @param {number} index The value index.\n * @returns {[K, V][]} The map entries as an array of [key, value] arrays.\n */\n value(index) {\n return /** @type {[K, V][]} */ (pairs(this, index));\n }\n}\n\n/**\n * A batch of map (key, value) values. The map is represented as a list of\n * key-value structs.\n * @template K, V\n * @extends {ArrayBatch<Map<K, V>>}\n */\nexport class MapBatch extends ArrayBatch {\n /**\n * Return the value at the given index.\n * @param {number} index The value index.\n * @returns {Map<K, V>} The map value.\n */\n value(index) {\n return new Map(/** @type {[K, V][]} */ (pairs(this, index)));\n }\n}\n\n/**\n * A batch of union-type values with a sparse layout, enabling direct\n * lookup from the child value batches.\n * @template T\n * @extends {ArrayBatch<T>}\n */\nexport class SparseUnionBatch extends ArrayBatch {\n /**\n * Create a new column batch.\n * @param {object} options\n * @param {number} options.length The length of the batch\n * @param {number} options.nullCount The null value count\n * @param {DataType} options.type The data type.\n * @param {Uint8Array} [options.validity] Validity bitmap buffer\n * @param {Int32Array} [options.offsets] Offsets buffer\n * @param {Batch[]} options.children Children batches\n * @param {Int8Array} options.typeIds Union type ids buffer\n * @param {Record<string, number>} options.map A typeId to children index map\n */\n constructor({ typeIds, ...options }) {\n super(options);\n /** @type {Int8Array} */\n this.typeIds = typeIds;\n /** @type {Record<string, number>} */\n // @ts-ignore\n this.typeMap = this.type.typeMap;\n }\n\n /**\n * @param {number} index The value index.\n */\n value(index, offset = index) {\n const { typeIds, children, typeMap } = this;\n return children[typeMap[typeIds[index]]].at(offset);\n }\n}\n\n/**\n * A batch of union-type values with a dense layout, reqiring offset\n * lookups from the child value batches.\n * @template T\n * @extends {SparseUnionBatch<T>}\n */\nexport class DenseUnionBatch extends SparseUnionBatch {\n /**\n * @param {number} index The value index.\n */\n value(index) {\n return super.value(index, /** @type {number} */ (this.offsets[index]));\n }\n}\n\n/**\n * A batch of struct values, containing a set of named properties.\n * Struct property values are extracted and returned as JS objects.\n * @extends {ArrayBatch<Record<string, any>>}\n */\nexport class StructBatch extends ArrayBatch {\n constructor(options, factory = objectFactory) {\n super(options);\n /** @type {string[]} */\n // @ts-ignore\n this.names = this.type.children.map(child => child.name);\n this.factory = factory(this.names, this.children);\n }\n\n /**\n * @param {number} index The value index.\n * @returns {Record<string, any>}\n */\n value(index) {\n return this.factory(index);\n }\n}\n\n/**\n * A batch of struct values, containing a set of named properties.\n * Structs are returned as proxy objects that extract data directly\n * from underlying Arrow batches.\n * @extends {StructBatch}\n */\nexport class StructProxyBatch extends StructBatch {\n constructor(options) {\n super(options, proxyFactory);\n }\n}\n\n/**\n * A batch of run-end-encoded values.\n * @template T\n * @extends {ArrayBatch<T>}\n */\nexport class RunEndEncodedBatch extends ArrayBatch {\n /**\n * @param {number} index The value index.\n */\n value(index) {\n const [ { values: runs }, vals ] = this.children;\n return vals.at(\n bisect(/** @type {IntegerArray} */(runs), index)\n );\n }\n}\n\n/**\n * A batch of dictionary-encoded values.\n * @template T\n * @extends {ArrayBatch<T>}\n */\nexport class DictionaryBatch extends ArrayBatch {\n /**\n * Register the backing dictionary. Dictionaries are added\n * after batch creation as the complete dictionary may not\n * be finished across multiple record batches.\n * @param {Column<T>} dictionary\n * The dictionary of column values.\n */\n setDictionary(dictionary) {\n this.dictionary = dictionary;\n this.cache = dictionary.cache();\n return this;\n }\n\n /**\n * @param {number} index The value index.\n */\n value(index) {\n return this.cache[this.key(index)];\n }\n\n /**\n * @param {number} index The value index.\n * @returns {number} The dictionary key\n */\n key(index) {\n return /** @type {number} */ (this.values[index]);\n }\n}\n\n/**\n * @template T\n * @extends {ArrayBatch<T>}\n */\nclass ViewBatch extends ArrayBatch {\n /**\n * Create a new view batch.\n * @param {object} options Batch options.\n * @param {number} options.length The length of the batch\n * @param {number} options.nullCount The null value count\n * @param {DataType} options.type The data type.\n * @param {Uint8Array} [options.validity] Validity bitmap buffer\n * @param {Uint8Array} options.values Values buffer\n * @param {Uint8Array[]} options.data View data buffers\n */\n constructor({ data, ...options }) {\n super(options);\n this.data = data;\n }\n\n /**\n * Get the binary data at the provided index.\n * @param {number} index The value index.\n * @returns {Uint8Array}\n */\n view(index) {\n const { values, data } = this;\n const offset = index << 4; // each entry is 16 bytes\n let start = offset + 4;\n let buf = /** @type {Uint8Array} */ (values);\n const length = readInt32(buf, offset);\n if (length > 12) {\n // longer strings are in a data buffer\n start = readInt32(buf, offset + 12);\n buf = data[readInt32(buf, offset + 8)];\n }\n return buf.subarray(start, start + length);\n }\n}\n\n/**\n * A batch of binary blobs from variable data buffers, returned as byte\n * buffers of unsigned 8-bit integers.\n * @extends {ViewBatch<Uint8Array>}\n */\nexport class BinaryViewBatch extends ViewBatch {\n /**\n * @param {number} index The value index.\n */\n value(index) {\n return this.view(index);\n }\n}\n\n/**\n * A batch of UTF-8 strings from variable data buffers.\n * @extends {ViewBatch<string>}\n */\nexport class Utf8ViewBatch extends ViewBatch {\n /**\n * @param {number} index The value index.\n */\n value(index) {\n return decodeUtf8(this.view(index));\n }\n}\n","/**\n * @import { Batch } from './batch.js'\n * @import { DataType, ValueArray } from './types.js'\n */\nimport { bisect } from './util/arrays.js';\nimport { isDirectBatch } from './batch.js';\n\n/**\n * Build up a column from batches.\n */\nexport function columnBuilder(type) {\n let data = [];\n return {\n add(batch) { data.push(batch); return this; },\n clear: () => data = [],\n done: () => new Column(data, type)\n };\n}\n\n/**\n * A data column. A column provides a view over one or more value batches,\n * each drawn from an Arrow record batch. This class supports random access\n * to column values by integer index; however, extracting arrays using\n * `toArray()` or iterating over values (`for (const value of column) {...}`)\n * provide more efficient ways for bulk access or scanning.\n * @template T\n */\nexport class Column {\n /**\n * Create a new column instance.\n * @param {Batch<T>[]} data The value batches.\n * @param {DataType} [type] The column data type.\n * If not specified, the type is extracted from the batches.\n */\n constructor(data, type = data[0]?.type) {\n /**\n * The column data type.\n * @type {DataType}\n * @readonly\n */\n this.type = type;\n /**\n * The column length.\n * @type {number}\n * @readonly\n */\n this.length = data.reduce((m, c) => m + c.length, 0);\n /**\n * The count of null values in the column.\n * @type {number}\n * @readonly\n */\n this.nullCount = data.reduce((m, c) => m + c.nullCount, 0);\n /**\n * An array of column data batches.\n * @type {readonly Batch<T>[]}\n * @readonly\n */\n this.data = data;\n\n const n = data.length;\n const offsets = new Int32Array(n + 1);\n if (n === 1) {\n const [ batch ] = data;\n offsets[1] = batch.length;\n // optimize access to single batch\n this.at = index => batch.at(index);\n } else {\n for (let i = 0, s = 0; i < n; ++i) {\n offsets[i + 1] = (s += data[i].length);\n }\n }\n\n /**\n * Index offsets for data batches.\n * Used to map a column row index to a batch-specific index.\n * @type {Int32Array}\n * @readonly\n */\n this.offsets = offsets;\n }\n\n /**\n * Provide an informative object string tag.\n */\n get [Symbol.toStringTag]() {\n return 'Column';\n }\n\n /**\n * Return an iterator over the values in this column.\n * @returns {Iterator<T?>}\n */\n [Symbol.iterator]() {\n const data = this.data;\n return data.length === 1\n ? data[0][Symbol.iterator]()\n : batchedIterator(data);\n }\n\n /**\n * Return the column value at the given index. If a column has multiple\n * batches, this method performs binary search over the batch lengths to\n * determine the batch from which to retrieve the value. The search makes\n * lookup less efficient than a standard array access. If making a full\n * scan of a column, consider extracting arrays via `toArray()` or using an\n * iterator (`for (const value of column) {...}`).\n * @param {number} index The row index.\n * @returns {T | null} The value.\n */\n at(index) {\n // NOTE: if there is only one batch, this method is replaced with an\n // optimized version in the Column constructor.\n const { data, offsets } = this;\n const i = bisect(offsets, index) - 1;\n return data[i]?.at(index - offsets[i]); // undefined if out of range\n }\n\n /**\n * Return the column value at the given index. This method is the same as\n * `at()` and is provided for better compatibility with Apache Arrow JS.\n * @param {number} index The row index.\n * @returns {T | null} The value.\n */\n get(index) {\n return this.at(index);\n }\n\n /**\n * Extract column values into a single array instance. When possible,\n * a zero-copy subarray of the input Arrow data is returned.\n * @returns {ValueArray<T?>}\n */\n toArray() {\n const { length, nullCount, data } = this;\n const copy = !nullCount && isDirectBatch(data[0]);\n const n = data.length;\n\n if (copy && n === 1) {\n // use batch array directly\n // @ts-ignore\n return data[0].values;\n }\n\n // determine output array type\n const ArrayType = !n || nullCount > 0 ? Array\n // @ts-ignore\n : (data[0].constructor.ArrayType ?? data[0].values.constructor);\n\n const array = new ArrayType(length);\n return copy ? copyArray(array, data) : extractArray(array, data);\n }\n\n /**\n * Return an array of cached column values.\n * Used internally to accelerate dictionary types.\n */\n cache() {\n return this._cache ?? (this._cache = this.toArray());\n }\n}\n\nfunction *batchedIterator(data) {\n for (let i = 0; i < data.length; ++i) {\n const iter = data[i][Symbol.iterator]();\n for (let next = iter.next(); !next.done; next = iter.next()) {\n yield next.value;\n }\n }\n}\n\nfunction copyArray(array, data) {\n for (let i = 0, offset = 0; i < data.length; ++i) {\n const { values } = data[i];\n array.set(values, offset);\n offset += values.length;\n }\n return array;\n}\n\nfunction extractArray(array, data) {\n let index = -1;\n for (let i = 0; i < data.length; ++i) {\n const batch = data[i];\n for (let j = 0; j < batch.length; ++j) {\n array[++index] = batch.at(j);\n }\n }\n return array;\n}\n","/**\n * @import { Column } from './column.js'\n * @import { Schema, StructFactory, TypeMap, ValueArray } from './types.js'\n */\nimport { bisect } from './util/arrays.js';\nimport { objectFactory, proxyFactory } from './util/struct.js';\n\n/**\n * A table consists of a collection of named columns (or 'children').\n * To work with table data directly in JavaScript, use `toColumns()`\n * to extract an object that maps column names to extracted value arrays,\n * or `toArray()` to extract an array of row objects. For random access\n * by row index, use `getChild()` to access data for a specific column.\n * @template {TypeMap} [T=TypeMap]\n */\nexport class Table {\n /**\n * Create a new table with the given schema and columns (children).\n * @param {Schema} schema The table schema.\n * @param {Column[]} children The table columns.\n * @param {boolean} [useProxy=false] Flag indicating if row proxy\n * objects should be used to represent table rows (default `false`).\n */\n constructor(schema, children, useProxy = false) {\n const names = schema.fields.map(f => f.name);\n\n /**\n * @type {Schema}\n * @readonly\n */\n this.schema = schema;\n /**\n * @type {(keyof T)[]}\n * @readonly\n */\n this.names = names;\n /**\n * @type {Column[]}\n * @readonly\n */\n this.children = children;\n /**\n * @type {StructFactory}\n * @readonly\n */\n this.factory = useProxy ? proxyFactory : objectFactory;\n\n // lazily created row object generators\n const gen = [];\n\n /**\n * Returns a row object generator for the given batch index.\n * @private\n * @readonly\n * @param {number} b The batch index.\n * @returns {(index: number) => { [P in keyof T]: T[P] }}\n */\n this.getFactory = b => gen[b]\n ?? (gen[b] = this.factory(names, children.map(c => c.data[b])));\n }\n\n /**\n * Provide an informative object string tag.\n */\n get [Symbol.toStringTag]() {\n return 'Table';\n }\n\n /**\n * The number of columns in this table.\n * @return {number} The number of columns.\n */\n get numCols() {\n return this.names.length;\n }\n\n /**\n * The number of rows in this table.\n * @return {number} The number of rows.\n */\n get numRows() {\n return this.children[0]?.length ?? 0;\n }\n\n /**\n * Return the child column at the given index position.\n * @template {T[keyof T]} R\n * @param {number} index The column index.\n * @returns {Column<R>}\n */\n getChildAt(index) {\n return this.children[index];\n }\n\n /**\n * Return the first child column with the given name.\n * @template {keyof T} P\n * @param {P} name The column name.\n * @returns {Column<T[P]>}\n */\n getChild(name) {\n const i = this.names.findIndex(x => x === name);\n return i > -1 ? this.children[i] : undefined;\n }\n\n /**\n * Construct a new table containing only columns at the specified indices.\n * The order of columns in the new table matches the order of input indices.\n * @template {T[keyof T]} V\n * @param {number[]} indices The indices of columns to keep.\n * @param {string[]} [as] Optional new names for selected columns.\n * @returns {Table<{ [key: string]: V }>} A new table with selected columns.\n */\n selectAt(indices, as = []) {\n const { children, factory, schema } = this;\n const { fields } = schema;\n return new Table(\n {\n ...schema,\n fields: indices.map((i, j) => renameField(fields[i], as[j]))\n },\n indices.map(i => children[i]),\n factory === proxyFactory\n );\n }\n\n /**\n * Construct a new table containing only columns with the specified names.\n * If columns have duplicate names, the first (with lowest index) is used.\n * The order of columns in the new table matches the order of input names.\n * @template {keyof T} K\n * @param {K[]} names Names of columns to keep.\n * @param {string[]} [as] Optional new names for selected columns.\n * @returns A new table with columns matching the specified names.\n */\n select(names, as) {\n const all = /** @type {K[]} */(this.names);\n const indices = names.map(name => all.indexOf(name));\n return this.selectAt(indices, as);\n }\n\n /**\n * Return an object mapping column names to extracted value arrays.\n * @returns {{ [P in keyof T]: ValueArray<T[P]> }}\n */\n toColumns() {\n const { children, names } = this;\n /** @type {{ [P in keyof T]: ValueArray<T[P]> }} */\n // @ts-expect-error assign to empty object\n const cols = {};\n names.forEach((name, i) => cols[name] = children[i]?.toArray() ?? [] );\n return cols;\n }\n\n /**\n * Return an array of objects representing the rows of this table.\n * @returns {{ [P in keyof T]: T[P] }[]}\n */\n toArray() {\n const { children, getFactory, numRows } = this;\n const data = children[0]?.data ?? [];\n const output = Array(numRows);\n for (let b = 0, row = -1; b < data.length; ++b) {\n const f = getFactory(b);\n for (let i = 0; i < data[b].length; ++i) {\n output[++row] = f(i);\n }\n }\n return output;\n }\n\n /**\n * Return an iterator over objects representing the rows of this table.\n * @returns {Generator<{ [P in keyof T]: T[P] }, any, any>}\n */\n *[Symbol.iterator]() {\n const { children, getFactory } = this;\n const data = children[0]?.data ?? [];\n for (let b = 0; b < data.length; ++b) {\n const f = getFactory(b);\n for (let i = 0; i < data[b].length; ++i) {\n yield f(i);\n }\n }\n }\n\n /**\n * Return a row object for the given index.\n * @param {number} index The row index.\n * @returns {{ [P in keyof T]: T[P] }} The row object.\n */\n at(index) {\n const { children, getFactory, numRows } = this;\n if (index < 0 || index >= numRows) return null;\n const [{ offsets }] = children;\n const b = bisect(offsets, index) - 1;\n return getFactory(b)(index - offsets[b]);\n }\n\n /**\n * Return a row object for the given index. This method is the same as\n * `at()` and is provided for better compatibility with Apache Arrow JS.\n * @param {number} index The row index.\n * @returns {{ [P in keyof T]: T[P] }} The row object.\n */\n get(index) {\n return this.at(index);\n }\n}\n\nfunction renameField(field, name) {\n return (name != null && name !== field.name)\n ? { ...field, name }\n : field;\n}\n","/**\n * @import { DataType, ExtractionOptions } from './types.js';\n */\nimport { BinaryBatch, BinaryViewBatch, BoolBatch, DateBatch, DateDayBatch, DateDayMillisecondBatch, Decimal32NumberBatch, DecimalBigIntBatch, DecimalNumberBatch, DenseUnionBatch, DictionaryBatch, DirectBatch, FixedBinaryBatch, FixedListBatch, Float16Batch, Int64Batch, IntervalDayTimeBatch, IntervalMonthDayNanoBatch, LargeBinaryBatch, LargeListBatch, LargeListViewBatch, LargeUtf8Batch, ListBatch, ListViewBatch, MapBatch, MapEntryBatch, NullBatch, RunEndEncodedBatch, SparseUnionBatch, StructBatch, StructProxyBatch, TimestampMicrosecondBatch, TimestampMillisecondBatch, TimestampNanosecondBatch, TimestampSecondBatch, Utf8Batch, Utf8ViewBatch } from './batch.js';\nimport { DateUnit, IntervalUnit, TimeUnit, Type } from './constants.js';\nimport { invalidDataType } from './data-types.js';\n\n/**\n * Return a batch constructor for the given data type and extraction options.\n * @param {DataType} type The data type.\n * @param {ExtractionOptions} options The extraction options.\n */\nexport function batchType(type, options = {}) {\n const { typeId, bitWidth, mode, precision, unit } = /** @type {any} */(type);\n const { useBigInt, useDate, useDecimalInt, useMap, useProxy } = options;\n\n switch (typeId) {\n case Type.Null: return NullBatch;\n case Type.Bool: return BoolBatch;\n case Type.Int:\n case Type.Time:\n case Type.Duration:\n return useBigInt || bitWidth < 64 ? DirectBatch : Int64Batch;\n case Type.Float:\n return precision ? DirectBatch : Float16Batch;\n case Type.Date:\n return wrap(\n unit === DateUnit.DAY ? DateDayBatch : DateDayMillisecondBatch,\n useDate && DateBatch\n );\n case Type.Timestamp:\n return wrap(\n unit === TimeUnit.SECOND ? TimestampSecondBatch\n : unit === TimeUnit.MILLISECOND ? TimestampMillisecondBatch\n : unit === TimeUnit.MICROSECOND ? TimestampMicrosecondBatch\n : TimestampNanosecondBatch,\n useDate && DateBatch\n );\n case Type.Decimal:\n return bitWidth === 32\n ? (useDecimalInt ? DirectBatch : Decimal32NumberBatch)\n : (useDecimalInt ? DecimalBigIntBatch : DecimalNumberBatch);\n case Type.Interval:\n return unit === IntervalUnit.DAY_TIME ? IntervalDayTimeBatch\n : unit === IntervalUnit.YEAR_MONTH ? DirectBatch\n : IntervalMonthDayNanoBatch;\n case Type.FixedSizeBinary: return FixedBinaryBatch;\n case Type.Utf8: return Utf8Batch;\n case Type.LargeUtf8: return LargeUtf8Batch;\n case Type.Binary: return BinaryBatch;\n case Type.LargeBinary: return LargeBinaryBatch;\n case Type.BinaryView: return BinaryViewBatch;\n case Type.Utf8View: return Utf8ViewBatch;\n case Type.List: return ListBatch;\n case Type.LargeList: return LargeListBatch;\n case Type.Map: return useMap ? MapBatch : MapEntryBatch;\n case Type.ListView: return ListViewBatch;\n case Type.LargeListView: return LargeListViewBatch;\n case Type.FixedSizeList: return FixedListBatch;\n case Type.Struct: return useProxy ? StructProxyBatch : StructBatch;\n case Type.RunEndEncoded: return RunEndEncodedBatch;\n case Type.Dictionary: return DictionaryBatch;\n case Type.Union: return mode ? DenseUnionBatch : SparseUnionBatch;\n }\n throw new Error(invalidDataType(typeId));\n}\n\nfunction wrap(BaseClass, WrapperClass) {\n return WrapperClass\n ? class WrapBatch extends WrapperClass {\n constructor(options) {\n super(new BaseClass(options));\n }\n }\n : BaseClass;\n}\n","/** @import { Codec, CompressionType_ } from './types.js' */\nimport { CompressionType } from './constants.js';\nimport { writeInt64 } from './encode/builder.js';\nimport { keyFor } from './util/objects.js';\nimport { readInt64 } from './util/read.js';\n\nconst LENGTH_NO_COMPRESSED_DATA = -1;\nconst COMPRESS_LENGTH_PREFIX = 8;\n\n/**\n * Return an error message for a missing codec.\n * @param {CompressionType_} type The codec type.\n */\nexport function missingCodec(type) {\n return `Missing compression codec \"${keyFor(CompressionType, type)}\" (id ${type})`;\n}\n\n/** @type {Map<CompressionType_, Codec>} */\nconst codecs = new Map;\n\n/**\n * Register a codec to use for compressing or decompressing Arrow buffers.\n * @param {CompressionType_} type The compression type.\n * @param {Codec} codec The codec implementation.\n */\nexport function setCompressionCodec(type, codec) {\n codecs.set(type, codec);\n}\n\n/**\n * Returns a compression codec for the provided type, or null if not found.\n * Compression codecs must first be registered using *setCompressionCodec*.\n * @param {CompressionType_ | null} [type] The compression type.\n * @returns {Codec | null} The compression codec, or null if not registered.\n */\nexport function getCompressionCodec(type) {\n return (type != null && codecs.get(type)) || null;\n}\n\n/**\n * Decompress an Arrow buffer, return decompressed bytes and region metadata.\n * @param {Uint8Array} body The message body.\n * @param {{ offset: number, length: number }} region Buffer region metadata.\n * @param {Codec} codec A compression codec.\n * @returns {{ bytes: Uint8Array, offset: number, length: number }}\n */\nexport function decompressBuffer(body, { offset, length }, codec) {\n if (length === 0) {\n return { bytes: new Uint8Array(0), offset: 0, length: 0 };\n }\n const ulen = readInt64(body, offset); // uncompressed length\n const buf = body.subarray(offset + COMPRESS_LENGTH_PREFIX, offset + length);\n const bytes = (ulen === LENGTH_NO_COMPRESSED_DATA) ? buf : codec.decode(buf);\n return { bytes, offset: 0, length: bytes.length };\n}\n\n/**\n * Compress an Arrow buffer, return encoded bytes. If the compression does\n * not decrease the overall length, retains uncompressed bytes.\n * @param {Uint8Array} bytes The byte buffer to compress.\n * @param {Codec} codec A compression codec.\n */\nexport function compressBuffer(bytes, codec) {\n const compressed = codec.encode(bytes);\n const keep = compressed.length < bytes.length;\n const data = keep ? compressed : bytes;\n const buf = new Uint8Array(COMPRESS_LENGTH_PREFIX + data.length);\n writeInt64(buf, 0, keep ? bytes.length : LENGTH_NO_COMPRESSED_DATA);\n buf.set(data, COMPRESS_LENGTH_PREFIX);\n return buf;\n}\n","import { readInt32, readInt64, readVector } from '../util/read.js';\n\n/**\n * Decode a block that points to messages within an Arrow 'file' format.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @returns The file block.\n */\nexport function decodeBlock(buf, index) {\n // 0: offset\n // 8: metadataLength\n // 16: bodyLength\n return {\n offset: readInt64(buf, index),\n metadataLength: readInt32(buf, index + 8),\n bodyLength: readInt64(buf, index + 16)\n }\n}\n\n/**\n * Decode a vector of blocks.\n * @param {Uint8Array} buf\n * @param {number} index\n * @returns An array of file blocks.\n */\nexport function decodeBlocks(buf, index) {\n return readVector(buf, index, 24, decodeBlock);\n}\n","/**\n * @import { BodyCompression, BodyCompressionMethod_, CompressionType_ } from '../types.js'\n */\nimport { BodyCompressionMethod, CompressionType } from '../constants.js';\nimport { readInt8, readObject } from '../util/read.js';\n\n/**\n * Decode record batch body compression metadata.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @returns {BodyCompression | undefined} The body compression metadata\n */\nexport function decodeBodyCompression(buf, index) {\n // 4: codec\n // 6: method\n const get = readObject(buf, index);\n return {\n codec: /** @type {CompressionType_} */(\n get(4, readInt8, CompressionType.LZ4_FRAME)),\n method: /** @type {BodyCompressionMethod_} */(\n get(6, readInt8, BodyCompressionMethod.BUFFER))\n };\n}\n","/**\n * @import { RecordBatch, Version_ } from '../types.js'\n */\nimport { Version } from '../constants.js';\nimport { readInt64, readObject, readOffset, readVector } from '../util/read.js';\nimport { decodeBodyCompression } from './body-compression.js';\n\n/**\n * Decode a record batch.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @param {Version_} version Arrow version value\n * @returns {RecordBatch} The record batch\n */\nexport function decodeRecordBatch(buf, index, version) {\n // 4: length\n // 6: nodes\n // 8: buffers\n // 10: compression (requires codec plug-in)\n // 12: variadicBuffers (buffer counts for view-typed fields)\n const get = readObject(buf, index);\n\n // If an Arrow buffer was written before version 4,\n // advance 8 bytes to skip the now-removed page_id field\n const offset = version < Version.V4 ? 8 : 0;\n\n return {\n length: get(4, readInt64, 0),\n nodes: readVector(buf, get(6, readOffset), 16, (buf, pos) => ({\n length: readInt64(buf, pos),\n nullCount: readInt64(buf, pos + 8)\n })),\n regions: readVector(buf, get(8, readOffset), 16 + offset, (buf, pos) => ({\n offset: readInt64(buf, pos + offset),\n length: readInt64(buf, pos + offset + 8)\n })),\n compression: get(10, decodeBodyCompression),\n variadic: readVector(buf, get(12, readOffset), 8, readInt64)\n };\n}\n","/**\n * @import { DictionaryBatch, Version_ } from '../types.js'\n */\nimport { readBoolean, readInt64, readObject } from '../util/read.js';\nimport { decodeRecordBatch } from './record-batch.js';\n\n/**\n * Decode a dictionary batch.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @param {Version_} version Arrow version value\n * @returns {DictionaryBatch} The dictionary batch\n */\nexport function decodeDictionaryBatch(buf, index, version) {\n // 4: id\n // 6: data\n // 8: isDelta\n const get = readObject(buf, index);\n return {\n id: get(4, readInt64, 0),\n data: get(6, (buf, off) => decodeRecordBatch(buf, off, version)),\n /**\n * If isDelta is true the values in the dictionary are to be appended to a\n * dictionary with the indicated id. If isDelta is false this dictionary\n * should replace the existing dictionary.\n */\n isDelta: get(8, readBoolean, false)\n };\n}\n","/**\n * @import { DataType, Field } from '../types.js'\n */\nimport { DateUnit, IntervalUnit, Precision, TimeUnit, Type, UnionMode } from '../constants.js';\nimport { binary, date, decimal, duration, fixedSizeBinary, fixedSizeList, float, int, interval, invalidDataType, largeBinary, largeList, largeListView, largeUtf8, list, listView, mapType, runEndEncoded, struct, time, timestamp, union, utf8 } from '../data-types.js';\nimport { checkOneOf } from '../util/objects.js';\nimport { readBoolean, readInt16, readInt32, readObject, readOffset, readString, readVector } from '../util/read.js';\n\n/**\n * Decode a data type definition for a field.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data.\n * @param {number} index The starting index in the byte buffer.\n * @param {number} typeId The data type id.\n * @param {Field[]} [children] A list of parsed child fields.\n * @returns {DataType} The data type.\n */\nexport function decodeDataType(buf, index, typeId, children) {\n checkOneOf(typeId, Type, invalidDataType);\n const get = readObject(buf, index);\n\n switch (typeId) {\n // types without flatbuffer objects\n case Type.Binary: return binary();\n case Type.Utf8: return utf8();\n case Type.LargeBinary: return largeBinary();\n case Type.LargeUtf8: return largeUtf8();\n case Type.List: return list(children[0]);\n case Type.ListView: return listView(children[0]);\n case Type.LargeList: return largeList(children[0]);\n case Type.LargeListView: return largeListView(children[0]);\n case Type.Struct: return struct(children);\n case Type.RunEndEncoded: return runEndEncoded(children[0], children[1]);\n\n // types with flatbuffer objects\n case Type.Int: return int(\n // @ts-ignore\n get(4, readInt32, 0), // bitwidth\n get(6, readBoolean, false) // signed\n );\n case Type.Float: return float(\n // @ts-ignore\n get(4, readInt16, Precision.HALF) // precision\n );\n case Type.Decimal: return decimal(\n get(4, readInt32, 0), // precision\n get(6, readInt32, 0), // scale\n // @ts-ignore\n get(8, readInt32, 128) // bitwidth\n );\n case Type.Date: return date(\n // @ts-ignore\n get(4, readInt16, DateUnit.MILLISECOND) // unit\n );\n case Type.Time: return time(\n // @ts-ignore\n get(4, readInt16, TimeUnit.MILLISECOND) // unit\n );\n case Type.Timestamp: return timestamp(\n // @ts-ignore\n get(4, readInt16, TimeUnit.SECOND), // unit\n get(6, readString) // timezone\n );\n case Type.Interval: return interval(\n // @ts-ignore\n get(4, readInt16, IntervalUnit.YEAR_MONTH) // unit\n );\n case Type.Duration: return duration(\n // @ts-ignore\n get(4, readInt16, TimeUnit.MILLISECOND) // unit\n );\n\n case Type.FixedSizeBinary: return fixedSizeBinary(\n get(4, readInt32, 0) // stride\n );\n case Type.FixedSizeList: return fixedSizeList(\n children[0],\n get(4, readInt32, 0), // stride\n );\n case Type.Map: return mapType(\n get(4, readBoolean, false), // keysSorted\n children[0]\n );\n\n case Type.Union: return union(\n // @ts-ignore\n get(4, readInt16, UnionMode.Sparse), // mode\n children,\n readVector(buf, get(6, readOffset), 4, readInt32) // type ids\n );\n }\n // case Type.NONE:\n // case Type.Null:\n // case Type.Bool:\n // case Type.BinaryView:\n // case Type.Utf8View:\n // @ts-ignore\n return { typeId };\n}\n","/**\n * @import { Metadata } from '../types.js'\n */\nimport { readObject, readString, readVector } from '../util/read.js';\n\n/**\n * Decode custom metadata consisting of key-value string pairs.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @returns {Metadata | null} The custom metadata map\n */\nexport function decodeMetadata(buf, index) {\n const entries = readVector(buf, index, 4, (buf, pos) => {\n const get = readObject(buf, pos);\n return /** @type {[string, string]} */ ([\n get(4, readString), // 4: key (string)\n get(6, readString) // 6: key (string)\n ]);\n });\n return entries.length ? new Map(entries) : null;\n}\n","/**\n * @import { DictionaryType, Endianness_, Field, IntType, Schema, Version_ } from '../types.js'\n */\nimport { Type } from '../constants.js';\nimport { dictionary, int32 } from '../data-types.js';\nimport { readBoolean, readInt16, readInt64, readObject, readOffset, readString, readUint8, readVector } from '../util/read.js';\nimport { decodeDataType } from './data-type.js';\nimport { decodeMetadata } from './metadata.js';\n\n/**\n * Decode a table schema describing the fields and their data types.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @param {Version_} version Arrow version value\n * @returns {Schema} The schema\n */\nexport function decodeSchema(buf, index, version) {\n // 4: endianness (int16)\n // 6: fields (vector)\n // 8: metadata (vector)\n // 10: features (int64[])\n const get = readObject(buf, index);\n return {\n version,\n endianness: /** @type {Endianness_} */ (get(4, readInt16, 0)),\n fields: get(6, decodeSchemaFields, []),\n metadata: get(8, decodeMetadata)\n };\n}\n\n/**\n * @returns {Field[] | null}\n */\nfunction decodeSchemaFields(buf, fieldsOffset) {\n return readVector(buf, fieldsOffset, 4, decodeField);\n}\n\n/**\n * @returns {Field}\n */\nfunction decodeField(buf, index) {\n // 4: name (string)\n // 6: nullable (bool)\n // 8: type id (uint8)\n // 10: type (union)\n // 12: dictionary (table)\n // 14: children (vector)\n // 16: metadata (vector)\n const get = readObject(buf, index);\n const typeId = get(8, readUint8, Type.NONE);\n const typeOffset = get(10, readOffset, 0);\n const dict = get(12, decodeDictionary);\n const children = get(14, decodeFieldChildren, []);\n\n let type = decodeDataType(buf, typeOffset, typeId, children);\n if (dict) {\n dict.dictionary = type;\n type = dict;\n }\n\n return {\n name: get(4, readString),\n type,\n nullable: get(6, readBoolean, false),\n metadata: get(16, decodeMetadata)\n };\n}\n\n/**\n * @returns {Field[]}\n */\nfunction decodeFieldChildren(buf, fieldOffset) {\n return readVector(buf, fieldOffset, 4, decodeField);\n}\n\n/**\n * @param {Uint8Array} buf\n * @param {number} index\n * @returns {DictionaryType}\n */\nfunction decodeDictionary(buf, index) {\n if (!index) return null;\n // 4: id (int64)\n // 6: indexType (Int type)\n // 8: isOrdered (boolean)\n // 10: kind (int16) currently only dense array is supported\n const get = readObject(buf, index);\n return dictionary(\n null, // data type will be populated by caller\n get(6, decodeInt, int32()), // index type\n get(8, readBoolean, false), // ordered\n get(4, readInt64, 0), // id\n );\n}\n\n/**\n * Decode an integer data type.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data.\n * @param {number} index The starting index in the byte buffer.\n * @returns {IntType}\n */\nfunction decodeInt(buf, index) {\n return /** @type {IntType} */ (\n decodeDataType(buf, index, Type.Int)\n );\n}\n","/**\n * @import { Message, MessageHeader_, Version_ } from '../types.js'\n */\nimport { MessageHeader, Version } from '../constants.js';\nimport { keyFor } from '../util/objects.js';\nimport { SIZEOF_INT, readInt16, readInt32, readInt64, readObject, readOffset, readUint8 } from '../util/read.js';\nimport { decodeDictionaryBatch } from './dictionary-batch.js';\nimport { decodeRecordBatch } from './record-batch.js';\nimport { decodeSchema } from './schema.js';\n\nconst invalidMessageMetadata = (expected, actual) =>\n `Expected to read ${expected} metadata bytes, but only read ${actual}.`;\n\nconst invalidMessageBodyLength = (expected, actual) =>\n `Expected to read ${expected} bytes for message body, but only read ${actual}.`;\n\nconst invalidMessageType = (type) =>\n `Unsupported message type: ${type} (${keyFor(MessageHeader, type)})`;\n\n/**\n * A \"message\" contains a block of Apache Arrow data, such as a schema,\n * record batch, or dictionary batch. This message decodes a single\n * message, returning its associated metadata and content.\n * @param {Uint8Array} buf A byte buffer of binary Arrow IPC data\n * @param {number} index The starting index in the byte buffer\n * @returns {Message} The decoded message.\n */\nexport function decodeMessage(buf, index) {\n // get message start\n let metadataLength = readInt32(buf, index) || 0;\n index += SIZEOF_INT;\n\n // ARROW-6313: If the first 4 bytes are continuation indicator (-1), read\n // the next 4 for the 32-bit metadata length. Otherwise, assume this is a\n // pre-v0.15 message, where the first 4 bytes are the metadata length.\n if (metadataLength === -1) {\n metadataLength = readInt32(buf, index) || 0;\n index += SIZEOF_INT;\n }\n if (metadataLength === 0) return null;\n\n const head = buf.subarray(index, index += metadataLength);\n if (head.byteLength < metadataLength) {\n throw new Error(invalidMessageMetadata(metadataLength, head.byteLength));\n }\n\n // decode message metadata\n // 4: version\n // 6: headerType\n // 8: headerIndex\n // 10: bodyLength\n const get = readObject(head, 0);\n const version = /** @type {Version_} */\n (get(4, readInt16, Version.V1));\n const type = /** @type {MessageHeader_} */\n (get(6, readUint8, MessageHeader.NONE));\n const offset = get(8, readOffset, 0);\n const bodyLength = get(10, readInt64, 0);\n let content;\n\n if (offset) {\n // decode message header\n const decoder = type === MessageHeader.Schema ? decodeSchema\n : type === MessageHeader.DictionaryBatch ? decodeDictionaryBatch\n : type === MessageHeader.RecordBatch ? decodeRecordBatch\n : null;\n if (!decoder) throw new Error(invalidMessageType(type));\n content = decoder(head, offset, version);\n\n // extract message body\n if (bodyLength > 0) {\n const body = buf.subarray(index, index += bodyLength);\n if (body.byteLength < bodyLength) {\n throw new Error(invalidMessageBodyLength(bodyLength, body.byteLength));\n }\n // @ts-ignore\n content.body = body;\n } else if (type !== MessageHeader.Schema) {\n // table-from-ipc.js buffer accessor requires body to exist, even for empty batches\n // @ts-ignore\n content.body = new Uint8Array(0);\n }\n }\n\n return { version, type, index, content };\n}\n","/**\n * @import { ArrowData, Version_ } from '../types.js'\n */\nimport { MAGIC, MessageHeader, Version } from '../constants.js';\nimport { isArrayBufferLike } from '../util/arrays.js';\nimport { readInt16, readInt32, readObject } from '../util/read.js';\nimport { decodeBlocks } from './block.js';\nimport { decodeMessage } from './message.js';\nimport { decodeMetadata } from './metadata.js';\nimport { decodeSchema } from './schema.js';\n\n/**\n * Decode [Apache Arrow IPC data][1] and return parsed schema, record batch,\n * and dictionary batch definitions. The input binary data may be either\n * an `ArrayBuffer` or `Uint8Array`. For Arrow data in the IPC 'stream' format,\n * an array of `Uint8Array` instances is also supported.\n *\n * This method stops short of generating views over field buffers. Use the\n * `createData()` method on the result to enable column data access.\n *\n * [1]: https://arrow.apache.org/docs/format/Columnar.html#serialization-and-interprocess-communication-ipc\n * @param {ArrayBufferLike | Uint8Array | Uint8Array[]} data\n * The source byte buffer, or an array of buffers. If an array, each byte\n * array may contain one or more self-contained messages. Messages may NOT\n * span multiple byte arrays.\n * @returns {import('../types.js').ArrowData}\n */\nexport function decodeIPC(data) {\n const source = isArrayBufferLike(data) ? new Uint8Array(data) : data;\n return source instanceof Uint8Array && isArrowFileFormat(source)\n ? decodeIPCFile(source)\n : decodeIPCStream(source);\n}\n\n/**\n * @param {Uint8Array} buf\n * @returns {boolean}\n */\nfunction isArrowFileFormat(buf) {\n if (!buf || buf.length < 4) return false;\n for (let i = 0; i < 6; ++i) {\n if (MAGIC[i] !== buf[i]) return false;\n }\n return true;\n}\n\n/**\n * Decode data in the [Arrow IPC 'stream' format][1].\n *\n * [1]: https://arrow.apache.org/docs/format/Columnar.html#ipc-streaming-format\n * @param {Uint8Array | Uint8Array[]} data The source byte buffer, or an\n * array of buffers. If an array, each byte array may contain one or more\n * self-contained messages. Messages may NOT span multiple byte arrays.\n * @returns {ArrowData}\n */\nexport function decodeIPCStream(data) {\n const stream = [data].flat();\n\n let schema;\n const records = [];\n const dictionaries = [];\n\n // consume each message in the stream\n for (const buf of stream) {\n if (!(buf instanceof Uint8Array)) {\n throw new Error(`IPC data batch was not a Uint8Array.`);\n }\n let offset = 0;\n\n // decode all messages in current buffer\n while (true) {\n const m = decodeMessage(buf, offset);\n if (m === null) break; // end of messages\n offset = m.index;\n if (!m.content) continue;\n switch (m.type) {\n case MessageHeader.Schema:\n // ignore repeated schema messages\n if (!schema) schema = m.content;\n break;\n case MessageHeader.RecordBatch:\n records.push(m.content);\n break;\n case MessageHeader.DictionaryBatch:\n dictionaries.push(m.content);\n break;\n }\n }\n }\n\n return /** @type {ArrowData} */ (\n { schema, dictionaries, records, metadata: null }\n );\n}\n\n/**\n * Decode data in the [Arrow IPC 'file' format][1].\n *\n * [1]: https://arrow.apache.org/docs/format/Columnar.html#ipc-file-format\n * @param {Uint8Array} data The source byte buffer.\n * @returns {ArrowData}\n */\nexport function decodeIPCFile(data) {\n // find footer location\n const offset = data.byteLength - (MAGIC.length + 4);\n const length = readInt32(data, offset);\n\n // decode file footer\n // 4: version\n // 6: schema\n // 8: dictionaries (vector)\n // 10: batches (vector)\n // 12: metadata\n const get = readObject(data, offset - length);\n const version = /** @type {Version_} */\n (get(4, readInt16, Version.V1));\n const dicts = get(8, decodeBlocks, []);\n const recs = get(10, decodeBlocks, []);\n\n return /** @type {ArrowData} */ ({\n schema: get(6, (buf, index) => decodeSchema(buf, index, version)),\n dictionaries: dicts.map(({ offset }) => decodeMessage(data, offset).content),\n records: recs.map(({ offset }) => decodeMessage(data, offset).content),\n metadata: get(12, decodeMetadata)\n });\n}\n","/**\n * @import { ArrowData, BodyCompression, ExtractionOptions, Field, RecordBatch, Schema } from '../types.js'\n */\nimport { batchType } from '../batch-type.js';\nimport { columnBuilder } from '../column.js';\nimport { decompressBuffer, getCompressionCodec, missingCodec } from '../compression.js';\nimport { BodyCompressionMethod, Type, UnionMode, Version } from '../constants.js';\nimport { invalidDataType } from '../data-types.js';\nimport { Table } from '../table.js';\nimport { int8Array } from '../util/arrays.js';\nimport { decodeIPC } from './decode-ipc.js';\n\n/**\n * Decode [Apache Arrow IPC data][1] and return a new Table. The input binary\n * data may be either an `ArrayBuffer` or `Uint8Array`. For Arrow data in the\n * [IPC 'stream' format][2], an array of `Uint8Array` values is also supported.\n *\n * [1]: https://arrow.apache.org/docs/format/Columnar.html#serialization-and-interprocess-communication-ipc\n * [2]: https://arrow.apache.org/docs/format/Columnar.html#ipc-streaming-format\n * @param {ArrayBufferLike | Uint8Array | Uint8Array[]} data\n * The source byte buffer, or an array of buffers. If an array, each byte\n * array may contain one or more self-contained messages. Messages may NOT\n * span multiple byte arrays.\n * @param {ExtractionOptions} [options]\n * Options for controlling how values are transformed when extracted\n * from an Arrow binary representation.\n * @returns {Table} A Table instance.\n */\nexport function tableFromIPC(data, options) {\n return createTable(decodeIPC(data), options);\n}\n\n/**\n * Create a table from parsed IPC data.\n * @param {ArrowData} data\n * The IPC data, as returned by parseIPC.\n * @param {ExtractionOptions} [options]\n * Options for controlling how values are transformed when extracted\n * from am Arrow binary representation.\n * @returns {Table} A Table instance.\n */\nexport function createTable(data, options = {}) {\n const { schema = { fields: [] }, dictionaries, records } = data;\n const { version, fields } = schema;\n const dictionaryMap = new Map;\n const context = contextGenerator(options, version, dictionaryMap);\n\n // build dictionary type map\n const dictionaryTypes = new Map;\n visitSchemaFields(schema, field => {\n const type = field.type;\n if (type.typeId === Type.Dictionary) {\n dictionaryTypes.set(type.id, type.dictionary);\n }\n });\n\n // decode dictionaries, build dictionary column map\n const dicts = new Map;\n for (const dict of dictionaries) {\n const { id, data, isDelta, body } = dict;\n const type = dictionaryTypes.get(id);\n const batch = visit(type, context({ ...data, body }));\n if (!dicts.has(id)) {\n if (isDelta) {\n throw new Error('Delta update can not be first dictionary batch.');\n }\n dicts.set(id, columnBuilder(type).add(batch));\n } else {\n const dict = dicts.get(id);\n if (!isDelta) dict.clear();\n dict.add(batch);\n }\n }\n dicts.forEach((value, key) => dictionaryMap.set(key, value.done()));\n\n // decode column fields\n const cols = fields.map(f => columnBuilder(f.type));\n for (const batch of records) {\n const ctx = context(batch);\n fields.forEach((f, i) => cols[i].add(visit(f.type, ctx)));\n }\n\n return new Table(schema, cols.map(c => c.done()), options.useProxy);\n}\n\n/**\n * Visit all fields within a schema.\n * @param {Schema} schema\n * @param {(field: Field) => void} visitor\n */\nfunction visitSchemaFields(schema, visitor) {\n schema.fields.forEach(function visitField(field) {\n visitor(field);\n // @ts-ignore\n field.type.dictionary?.children?.forEach(visitField);\n // @ts-ignore\n field.type.children?.forEach(visitField);\n });\n}\n\n/**\n * Context object generator for field visitation and buffer definition.\n */\nfunction contextGenerator(options, version, dictionaryMap) {\n const base = {\n version,\n options,\n dictionary: id => dictionaryMap.get(id),\n };\n\n /**\n * Return a context generator.\n * @param {RecordBatch} batch\n */\n return batch => {\n const { length, nodes, regions, compression, variadic, body } = batch;\n let nodeIndex = -1;\n let bufferIndex = -1;\n let variadicIndex = -1;\n return {\n ...base,\n length,\n node: () => nodes[++nodeIndex],\n buffer: (ArrayType) => {\n const { bytes, length, offset } = maybeDecompress(body, regions[++bufferIndex], compression);\n return ArrayType\n ? new ArrayType(bytes.buffer, bytes.byteOffset + offset, length / ArrayType.BYTES_PER_ELEMENT)\n : bytes.subarray(offset, offset + length)\n },\n variadic: () => variadic[++variadicIndex],\n visit(children) { return children.map(f => visit(f.type, this)); }\n };\n };\n}\n\n/**\n * Prepare an arrow buffer for use, potentially decompressing it.\n * @param {Uint8Array} body\n * @param {{offset: number, length: number}} region\n * @param {BodyCompression} compression\n */\nfunction maybeDecompress(body, region, compression) {\n if (!compression) {\n return { bytes: body, ...region };\n } else if (compression.method !== BodyCompressionMethod.BUFFER) {\n throw new Error(`Unknown compression method (${compression.method})`);\n } else {\n const id = compression.codec;\n const codec = getCompressionCodec(id);\n if (!codec) throw new Error(missingCodec(id));\n return decompressBuffer(body, region, codec);\n }\n}\n\n/**\n * Visit a field, instantiating views of buffer regions.\n */\nfunction visit(type, ctx) {\n const { typeId } = type;\n const { options, node, buffer, variadic, version } = ctx;\n const BatchType = batchType(type, options);\n\n // extract the next { length, nullCount } field node - ALL fields have field nodes\n const base = { ...node(), type };\n\n if (typeId === Type.Null) {\n // null fields have field nodes but no data buffers\n return new BatchType({ ...base, nullCount: base.length });\n }\n\n switch (typeId) {\n // validity and data value buffers\n case Type.Bool:\n case Type.Int:\n case Type.Time:\n case Type.Duration:\n case Type.Float:\n case Type.Decimal:\n case Type.Date:\n case Type.Timestamp:\n case Type.Interval:\n case Type.FixedSizeBinary:\n return new BatchType({\n ...base,\n validity: buffer(),\n values: buffer(type.values)\n });\n\n // validity, offset, and value buffers\n case Type.Utf8:\n case Type.LargeUtf8:\n case Type.Binary:\n case Type.LargeBinary:\n return new BatchType({\n ...base,\n validity: buffer(),\n offsets: buffer(type.offsets),\n values: buffer()\n });\n\n // views with variadic buffers\n case Type.BinaryView:\n case Type.Utf8View:\n return new BatchType({\n ...base,\n validity: buffer(),\n values: buffer(), // views buffer\n data: Array.from({ length: variadic() }, () => buffer()) // data buffers\n });\n\n // validity, offset, and list child\n case Type.List:\n case Type.LargeList:\n case Type.Map:\n return new BatchType({\n ...base,\n validity: buffer(),\n offsets: buffer(type.offsets),\n children: ctx.visit(type.children)\n });\n\n // validity, offset, size, and list child\n case Type.ListView:\n case Type.LargeListView:\n return new BatchType({\n ...base,\n validity: buffer(),\n offsets: buffer(type.offsets),\n sizes: buffer(type.offsets),\n children: ctx.visit(type.children)\n });\n\n // validity and children\n case Type.FixedSizeList:\n case Type.Struct:\n return new BatchType({\n ...base,\n validity: buffer(),\n children: ctx.visit(type.children)\n });\n\n // children only\n case Type.RunEndEncoded:\n return new BatchType({\n ...base,\n children: ctx.visit(type.children)\n });\n\n // dictionary\n case Type.Dictionary: {\n const { id, indices } = type;\n return new BatchType({\n ...base,\n validity: buffer(),\n values: buffer(indices.values),\n }).setDictionary(ctx.dictionary(id));\n }\n\n // union\n case Type.Union: {\n if (version < Version.V5) {\n buffer(); // skip unused null bitmap\n }\n return new BatchType({\n ...base,\n typeIds: buffer(int8Array),\n offsets: type.mode === UnionMode.Sparse ? null : buffer(type.offsets),\n children: ctx.visit(type.children)\n });\n }\n\n // unsupported type\n default:\n throw new Error(invalidDataType(typeId));\n }\n}\n","/**\n * @import { DictionaryType, Field, Schema } from '../types.js';\n * @import { Builder } from './builder.js';\n */\nimport { Type } from '../constants.js';\nimport { encodeDataType } from './data-type.js';\nimport { encodeMetadata } from './metadata.js';\n\nconst isLittleEndian = new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\n\n/**\n * @param {Builder} builder\n * @param {Schema} schema\n * @returns {number}\n */\nexport function encodeSchema(builder, schema) {\n const { fields, metadata } = schema;\n const fieldOffsets = fields.map(f => encodeField(builder, f));\n const fieldsVectorOffset = builder.addOffsetVector(fieldOffsets);\n const metadataOffset = encodeMetadata(builder, metadata);\n return builder.addObject(4, b => {\n b.addInt16(0, +(!isLittleEndian), 0);\n b.addOffset(1, fieldsVectorOffset, 0);\n b.addOffset(2, metadataOffset, 0);\n // NOT SUPPORTED: 3, features\n });\n}\n\n/**\n * @param {Builder} builder\n * @param {Field} field\n * @returns {number}\n */\nfunction encodeField(builder, field) {\n const { name, nullable, type, metadata } = field;\n let { typeId } = type;\n\n // encode field data type\n let typeOffset = 0;\n let dictionaryOffset = 0;\n if (typeId !== Type.Dictionary) {\n typeOffset = encodeDataType(builder, type);\n } else {\n const dict = /** @type {DictionaryType} */ (type).dictionary;\n typeId = dict.typeId;\n dictionaryOffset = encodeDataType(builder, type);\n typeOffset = encodeDataType(builder, dict);\n }\n\n // encode children, metadata, name, and field object\n // @ts-ignore\n const childOffsets = (type.children || []).map(f => encodeField(builder, f));\n const childrenVectorOffset = builder.addOffsetVector(childOffsets);\n const metadataOffset = encodeMetadata(builder, metadata);\n const nameOffset = builder.addString(name);\n return builder.addObject(7, b => {\n b.addOffset(0, nameOffset, 0);\n b.addInt8(1, +nullable, +false);\n b.addInt8(2, typeId, Type.NONE);\n b.addOffset(3, typeOffset, 0);\n b.addOffset(4, dictionaryOffset, 0);\n b.addOffset(5, childrenVectorOffset, 0);\n b.addOffset(6, metadataOffset, 0);\n });\n}\n","/**\n * @import { TypedArray, TypedArrayConstructor } from '../types.js'\n */\nimport { align, grow, uint8Array } from '../util/arrays.js';\n\n/**\n * Create a new resizable buffer instance.\n * @param {TypedArrayConstructor} [arrayType]\n * The array type.\n * @returns {Buffer} The buffer.\n */\nexport function buffer(arrayType) {\n return new Buffer(arrayType);\n}\n\n/**\n * Resizable byte buffer.\n */\nexport class Buffer {\n /**\n * Create a new resizable buffer instance.\n * @param {TypedArrayConstructor} arrayType\n */\n constructor(arrayType = uint8Array) {\n this.buf = new arrayType(512);\n }\n /**\n * Return the underlying data as a 64-bit aligned array of minimum size.\n * @param {number} size The desired minimum array size.\n * @returns {TypedArray} The 64-bit aligned array.\n */\n array(size) {\n return align(this.buf, size);\n }\n /**\n * Prepare for writes to the given index, resizing as necessary.\n * @param {number} index The array index to prepare to write to.\n */\n prep(index) {\n if (index >= this.buf.length) {\n this.buf = grow(this.buf, index);\n }\n }\n /**\n * Return the value at the given index.\n * @param {number} index The array index.\n */\n get(index) {\n return this.buf[index];\n }\n /**\n * Set a value at the given index.\n * @param {number | bigint} value The value to set.\n * @param {number} index The index to write to.\n */\n set(value, index) {\n this.prep(index);\n this.buf[index] = value;\n }\n /**\n * Write a byte array at the given index. The method should be called\n * only when the underlying buffer is of type Uint8Array.\n * @param {Uint8Array} bytes The byte array.\n * @param {number} index The starting index to write to.\n */\n write(bytes, index) {\n this.prep(index + bytes.length);\n /** @type {Uint8Array} */ (this.buf).set(bytes, index);\n }\n}\n\n/**\n * Create a new resizable bitmap instance.\n * @returns {Bitmap} The bitmap buffer.\n */\nexport function bitmap() {\n return new Bitmap();\n}\n\n/**\n * Resizable bitmap buffer.\n */\nexport class Bitmap extends Buffer {\n /**\n * Set a bit to true at the given bitmap index.\n * @param {number} index The index to write to.\n */\n set(index) {\n const i = index >> 3;\n this.prep(i);\n /** @type {Uint8Array} */ (this.buf)[i] |= (1 << (index % 8));\n }\n}\n","/**\n * @import { Batch } from '../../batch.js'\n */\n\n/**\n * Abstract class for building a column data batch.\n */\nexport class BatchBuilder {\n constructor(type, ctx) {\n this.type = type;\n this.ctx = ctx;\n this.batchClass = ctx.batchType(type);\n }\n\n /**\n * Initialize the builder state.\n * @returns {this} This builder.\n */\n init() {\n this.index = -1;\n return this;\n }\n\n /**\n * Write a value to the builder.\n * @param {*} value\n * @param {number} index\n * @returns {boolean | void}\n */\n set(value, index) {\n this.index = index;\n return false;\n }\n\n /**\n * Returns a batch constructor options object.\n * Used internally to marshal batch data.\n * @returns {Record<string, any>}\n */\n done() {\n return null;\n }\n\n /**\n * Returns a completed batch and reinitializes the builder state.\n * @returns {Batch}\n */\n batch() {\n const b = new this.batchClass(this.done());\n this.init();\n return b;\n }\n}\n","import { uint8Array } from '../../util/arrays.js';\nimport { bitmap } from '../buffer.js';\nimport { BatchBuilder } from './batch.js';\n\n/**\n * Builder for validity bitmaps within batches.\n */\nexport class ValidityBuilder extends BatchBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n }\n\n init() {\n this.nullCount = 0;\n this.validity = bitmap();\n return super.init();\n }\n\n /**\n * @param {*} value\n * @param {number} index\n * @returns {boolean | void}\n */\n set(value, index) {\n this.index = index;\n const isValid = value != null;\n if (isValid) {\n this.validity.set(index);\n } else {\n this.nullCount++;\n }\n return isValid;\n }\n\n done() {\n const { index, nullCount, type, validity } = this;\n return {\n length: index + 1,\n nullCount,\n type,\n validity: nullCount\n ? validity.array((index >> 3) + 1)\n : new uint8Array(0)\n };\n }\n}\n","/**\n * @import { builderContext } from '../builder.js'\n * @import { DictionaryType, ExtractionOptions } from '../../types.js'\n */\nimport { Column } from '../../column.js';\nimport { keyString } from '../../util/strings.js';\nimport { batchType } from '../../batch-type.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Create a context object for managing dictionary builders.\n */\nexport function dictionaryContext() {\n const idMap = new Map;\n const dicts = new Set;\n return {\n /**\n * Get a dictionary values builder for the given dictionary type.\n * @param {DictionaryType} type\n * The dictionary type.\n * @param {*} ctx The builder context.\n * @returns {ReturnType<dictionaryValues>}\n */\n get(type, ctx) {\n // if a dictionary has a non-negative id, assume it was set\n // intentionally and track it for potential reuse across columns\n // otherwise the dictionary is used for a single column only\n const id = type.id;\n if (id >= 0 && idMap.has(id)) {\n return idMap.get(id);\n } else {\n const dict = dictionaryValues(type, ctx);\n if (id >= 0) idMap.set(id, dict);\n dicts.add(dict);\n return dict;\n }\n },\n /**\n * Finish building dictionary values columns and assign them to\n * their corresponding dictionary batches.\n * @param {ExtractionOptions} options\n */\n finish(options) {\n dicts.forEach(dict => dict.finish(options));\n }\n };\n}\n\n/**\n * Builder helper for creating dictionary values.\n * @param {DictionaryType} type\n * The dictionary data type.\n * @param {ReturnType<builderContext>} ctx\n * The builder context.\n */\nexport function dictionaryValues(type, ctx) {\n const keys = Object.create(null);\n const values = ctx.builder(type.dictionary);\n const batches = [];\n\n values.init();\n let index = -1;\n\n return {\n type,\n values,\n\n add(batch) {\n batches.push(batch);\n return batch;\n },\n\n key(value) {\n const v = keyString(value);\n let k = keys[v];\n if (k === undefined) {\n keys[v] = k = ++index;\n values.set(value, k);\n }\n return k;\n },\n\n finish(options) {\n const valueType = type.dictionary;\n const batch = new (batchType(valueType, options))(values.done());\n const dictionary = new Column([batch]);\n batches.forEach(batch => batch.setDictionary(dictionary));\n }\n };\n}\n\n/**\n * Builder for dictionary-typed data batches.\n */\nexport class DictionaryBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.dict = ctx.dictionary(type);\n }\n\n init() {\n this.values = buffer(this.type.indices.values);\n return super.init();\n }\n\n set(value, index) {\n if (super.set(value, index)) {\n this.values.set(this.dict.key(value), index);\n }\n }\n\n done() {\n return {\n ...super.done(),\n values: this.values.array(this.index + 1)\n };\n }\n\n batch() {\n // register batch with dictionary\n // batch will be updated when the dictionary is finished\n return this.dict.add(super.batch());\n }\n}\n","/**\n * @import { DataType, IntType, UnionType } from '../types.js'\n */\nimport { bool, dateDay, dictionary, field, fixedSizeList, float64, int16, int32, int64, int8, list, nullType, struct, timestamp, utf8 } from '../data-types.js';\nimport { isArray } from '../util/arrays.js';\n\n/**\n * Infer the data type for a given input array.\n * @param {(visitor: (value: any) => void) => void} visit\n * A function that applies a callback to successive data values.\n * @returns {DataType} The data type.\n */\nexport function inferType(visit) {\n const profile = profiler();\n visit(value => profile.add(value));\n return profile.type();\n}\n\nfunction profiler() {\n let length = 0;\n let nullCount = 0;\n let boolCount = 0;\n let numberCount = 0;\n let intCount = 0;\n let bigintCount = 0;\n let dateCount = 0;\n let dayCount = 0;\n let stringCount = 0;\n let arrayCount = 0;\n let structCount = 0;\n let min = Infinity;\n let max = -Infinity;\n let minLength = Infinity;\n let maxLength = -Infinity;\n let minBigInt;\n let maxBigInt;\n let arrayProfile;\n let structProfiles = {};\n\n return {\n add(value) {\n length++;\n if (value == null) {\n nullCount++;\n return;\n }\n switch (typeof value) {\n case 'string':\n stringCount++;\n break;\n case 'number':\n numberCount++;\n if (value < min) min = value;\n if (value > max) max = value;\n if (Number.isInteger(value)) intCount++;\n break;\n case 'bigint':\n bigintCount++;\n if (minBigInt === undefined) {\n minBigInt = maxBigInt = value;\n } else {\n if (value < minBigInt) minBigInt = value;\n if (value > maxBigInt) maxBigInt = value;\n }\n break;\n case 'boolean':\n boolCount++;\n break;\n case 'object':\n if (value instanceof Date) {\n dateCount++;\n // 1 day = 1000ms * 60s * 60min * 24hr = 86400000\n if ((+value % 864e5) === 0) dayCount++;\n } else if (isArray(value)) {\n arrayCount++;\n const len = value.length;\n if (len < minLength) minLength = len;\n if (len > maxLength) maxLength = len;\n arrayProfile ??= profiler();\n value.forEach(arrayProfile.add);\n } else {\n structCount++;\n for (const key in value) {\n const fieldProfiler = structProfiles[key]\n ?? (structProfiles[key] = profiler());\n fieldProfiler.add(value[key]);\n }\n }\n }\n },\n type() {\n const valid = length - nullCount;\n return valid === 0 ? nullType()\n : intCount === valid ? intType(min, max)\n : numberCount === valid ? float64()\n : bigintCount === valid ? bigintType(minBigInt, maxBigInt)\n : boolCount === valid ? bool()\n : dayCount === valid ? dateDay()\n : dateCount === valid ? timestamp()\n : stringCount === valid ? dictionary(utf8())\n : arrayCount === valid ? arrayType(arrayProfile.type(), minLength, maxLength)\n : structCount === valid ? struct(\n Object.entries(structProfiles).map(_ => field(_[0], _[1].type()))\n )\n : unionType();\n }\n };\n}\n\n/**\n * Return a list or fixed list type.\n * @param {DataType} type The child data type.\n * @param {number} minLength The minumum list length.\n * @param {number} maxLength The maximum list length.\n * @returns {DataType} The data type.\n */\nfunction arrayType(type, minLength, maxLength) {\n return maxLength === minLength\n ? fixedSizeList(type, minLength)\n : list(type);\n}\n\n/**\n * @param {number} min\n * @param {number} max\n * @returns {DataType}\n */\nfunction intType(min, max) {\n const v = Math.max(Math.abs(min) - 1, max);\n return v < (1 << 7) ? int8()\n : v < (1 << 15) ? int16()\n : v < (2 ** 31) ? int32()\n : float64();\n}\n\n/**\n * @param {bigint} min\n * @param {bigint} max\n * @returns {IntType}\n */\nfunction bigintType(min, max) {\n const v = -min > max ? -min - 1n : max;\n if (v >= 2 ** 63) {\n throw new Error(`BigInt exceeds 64 bits: ${v}`);\n }\n return int64();\n}\n\n/**\n * @returns {UnionType}\n */\nfunction unionType() {\n throw new Error('Mixed types detected, please define a union type.');\n}\n","import { toOffset } from '../../util/numbers.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for batches of binary-typed data.\n */\nexport class BinaryBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.toOffset = toOffset(type.offsets);\n }\n\n init() {\n this.offsets = buffer(this.type.offsets);\n this.values = buffer();\n this.pos = 0;\n return super.init();\n }\n\n set(value, index) {\n const { offsets, values, toOffset } = this;\n if (super.set(value, index)) {\n values.write(value, this.pos);\n this.pos += value.length;\n }\n offsets.set(toOffset(this.pos), index + 1);\n }\n\n done() {\n return {\n ...super.done(),\n offsets: this.offsets.array(this.index + 2),\n values: this.values.array(this.pos + 1)\n };\n }\n}\n","import { bitmap } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for batches of bool-typed data.\n */\nexport class BoolBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n }\n\n init() {\n this.values = bitmap();\n return super.init();\n }\n\n set(value, index) {\n super.set(value, index);\n if (value) this.values.set(index);\n }\n\n done() {\n return {\n ...super.done(),\n values: this.values.array((this.index >> 3) + 1)\n }\n }\n}\n","import { toDecimal } from '../../util/numbers.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for batches of decimal-typed data (64-bits or more).\n */\nexport class DecimalBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.scale = 10 ** type.scale;\n this.stride = type.bitWidth >> 6;\n }\n\n init() {\n this.values = buffer(this.type.values);\n return super.init();\n }\n\n set(value, index) {\n const { scale, stride, values } = this;\n if (super.set(value, index)) {\n values.prep((index + 1) * stride);\n // @ts-ignore\n toDecimal(value, values.buf, index * stride, stride, scale);\n }\n }\n\n done() {\n const { index, stride, values } = this;\n return {\n ...super.done(),\n values: values.array((index + 1) * stride)\n };\n }\n}\n","import { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for fixed-size-binary-typed data batches.\n */\nexport class FixedSizeBinaryBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.stride = type.stride;\n }\n\n init() {\n this.values = buffer();\n return super.init();\n }\n\n set(value, index) {\n if (super.set(value, index)) {\n this.values.write(value, index * this.stride);\n }\n }\n\n done() {\n const { stride, values } = this;\n return {\n ...super.done(),\n values: values.array(stride * (this.index + 1))\n };\n }\n}\n","import { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for fixed-size-list-typed data batches.\n */\nexport class FixedSizeListBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.child = ctx.builder(this.type.children[0].type);\n this.stride = type.stride;\n }\n\n init() {\n this.child.init();\n return super.init();\n }\n\n set(value, index) {\n const { child, stride } = this;\n const base = index * stride;\n if (super.set(value, index)) {\n for (let i = 0; i < stride; ++i) {\n child.set(value[i], base + i);\n }\n } else {\n child.index = base + stride;\n }\n }\n\n done() {\n const { child } = this;\n return {\n ...super.done(),\n children: [ child.batch() ]\n };\n }\n}\n","import { toMonthDayNanoBytes } from '../../util/numbers.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for day/time interval-typed data batches.\n */\nexport class IntervalDayTimeBuilder extends ValidityBuilder {\n init() {\n this.values = buffer(this.type.values);\n return super.init();\n }\n\n set(value, index) {\n if (super.set(value, index)) {\n const i = index << 1;\n this.values.set(value[0], i);\n this.values.set(value[1], i + 1);\n }\n }\n\n done() {\n return {\n ...super.done(),\n values: this.values.array((this.index + 1) << 1)\n }\n }\n}\n\n/**\n * Builder for month/day/nano interval-typed data batches.\n */\nexport class IntervalMonthDayNanoBuilder extends ValidityBuilder {\n init() {\n this.values = buffer();\n return super.init();\n }\n\n set(value, index) {\n if (super.set(value, index)) {\n this.values.write(toMonthDayNanoBytes(value), index << 4);\n }\n }\n\n done() {\n return {\n ...super.done(),\n values: this.values.array((this.index + 1) << 4)\n }\n }\n}\n","import { toOffset } from '../../util/numbers.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Abstract class for building list data batches.\n */\nexport class AbstractListBuilder extends ValidityBuilder {\n constructor(type, ctx, child) {\n super(type, ctx);\n this.child = child;\n }\n\n init() {\n this.child.init();\n const offsetType = this.type.offsets;\n this.offsets = buffer(offsetType);\n this.toOffset = toOffset(offsetType);\n this.pos = 0;\n return super.init();\n }\n\n done() {\n return {\n ...super.done(),\n offsets: this.offsets.array(this.index + 2),\n children: [ this.child.batch() ]\n };\n }\n}\n\n/**\n * Builder for list-typed data batches.\n */\nexport class ListBuilder extends AbstractListBuilder {\n constructor(type, ctx) {\n super(type, ctx, ctx.builder(type.children[0].type));\n }\n\n set(value, index) {\n const { child, offsets, toOffset } = this;\n if (super.set(value, index)) {\n value.forEach(v => child.set(v, this.pos++));\n }\n offsets.set(toOffset(this.pos), index + 1);\n }\n}\n","import { ValidityBuilder } from './validity.js';\n\n/**\n * Abstract class for building list-typed data batches.\n */\nexport class AbstractStructBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.children = type.children.map(c => ctx.builder(c.type));\n }\n\n init() {\n this.children.forEach(c => c.init());\n return super.init();\n }\n\n done() {\n const { children } = this;\n children.forEach(c => c.index = this.index);\n return {\n ...super.done(),\n children: children.map(c => c.batch())\n };\n }\n}\n\n/**\n * Builder for struct-typed data batches.\n */\nexport class StructBuilder extends AbstractStructBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.setters = this.children.map((child, i) => {\n const name = type.children[i].name;\n return (value, index) => child.set(value?.[name], index);\n });\n }\n\n set(value, index) {\n super.set(value, index);\n const setters = this.setters;\n for (let i = 0; i < setters.length; ++i) {\n setters[i](value, index);\n }\n }\n}\n","import { AbstractListBuilder } from './list.js';\nimport { AbstractStructBuilder } from './struct.js';\n\n/**\n * Builder for map-typed data batches.\n */\nexport class MapBuilder extends AbstractListBuilder {\n constructor(type, ctx) {\n super(type, ctx, new MapStructBuilder(type.children[0].type, ctx));\n }\n\n set(value, index) {\n const { child, offsets, toOffset } = this;\n if (super.set(value, index)) {\n for (const keyValuePair of value) {\n child.set(keyValuePair, this.pos++);\n }\n }\n offsets.set(toOffset(this.pos), index + 1);\n }\n}\n\n/**\n * Builder for key-value struct batches within a map.\n */\nclass MapStructBuilder extends AbstractStructBuilder {\n set(value, index) {\n super.set(value, index);\n const [key, val] = this.children;\n key.set(value[0], index);\n val.set(value[1], index);\n }\n}\n","import { keyString } from '../../util/strings.js';\nimport { BatchBuilder } from './batch.js';\n\nconst NO_VALUE = {}; // empty object that fails strict equality\n\n/**\n * Builder for run-end-encoded-typed data batches.\n */\nexport class RunEndEncodedBuilder extends BatchBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.children = type.children.map(c => ctx.builder(c.type));\n }\n\n init() {\n this.pos = 0;\n this.key = null;\n this.value = NO_VALUE;\n this.children.forEach(c => c.init());\n return super.init();\n }\n\n next() {\n const [runs, vals] = this.children;\n runs.set(this.index + 1, this.pos);\n vals.set(this.value, this.pos++);\n }\n\n set(value, index) {\n // perform fast strict equality test\n if (value !== this.value) {\n // if no match, fallback to key string test\n const key = keyString(value);\n if (key !== this.key) {\n // if key doesn't match, write prior run and update\n if (this.key) this.next();\n this.key = key;\n this.value = value;\n }\n }\n this.index = index;\n }\n\n done() {\n this.next();\n const { children, index, type } = this;\n return {\n length: index + 1,\n nullCount: 0,\n type,\n children: children.map(c => c.batch())\n };\n }\n}\n","import { int8Array } from '../../util/arrays.js';\nimport { BatchBuilder } from './batch.js';\nimport { buffer } from '../buffer.js';\n\n/**\n * Abstract class for building union-typed data batches.\n */\nexport class AbstractUnionBuilder extends BatchBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.children = type.children.map(c => ctx.builder(c.type));\n this.typeMap = type.typeMap;\n this.lookup = type.typeIdForValue;\n }\n\n init() {\n this.nullCount = 0;\n this.typeIds = buffer(int8Array);\n this.children.forEach(c => c.init());\n return super.init();\n }\n\n set(value, index) {\n const { children, lookup, typeMap, typeIds } = this;\n this.index = index;\n const typeId = lookup(value, index);\n const child = children[typeMap[typeId]];\n typeIds.set(typeId, index);\n if (value == null) ++this.nullCount;\n // @ts-ignore\n this.update(value, index, child);\n }\n\n done() {\n const { children, nullCount, type, typeIds } = this;\n const length = this.index + 1;\n return {\n length,\n nullCount,\n type,\n typeIds: typeIds.array(length),\n children: children.map(c => c.batch())\n };\n }\n}\n\n/**\n * Builder for sparse union-typed data batches.\n */\nexport class SparseUnionBuilder extends AbstractUnionBuilder {\n update(value, index, child) {\n // update selected child with value\n // then set all other children to null\n child.set(value, index);\n this.children.forEach(c => { if (c !== child) c.set(null, index) });\n }\n}\n\n/**\n * Builder for dense union-typed data batches.\n */\nexport class DenseUnionBuilder extends AbstractUnionBuilder {\n init() {\n this.offsets = buffer(this.type.offsets);\n return super.init();\n }\n\n update(value, index, child) {\n const offset = child.index + 1;\n child.set(value, offset);\n this.offsets.set(offset, index);\n }\n\n done() {\n return {\n ...super.done(),\n offsets: this.offsets.array(this.index + 1)\n };\n }\n}\n","import { encodeUtf8 } from '../../util/strings.js';\nimport { BinaryBuilder } from './binary.js';\n\n/**\n * Builder for utf8-typed data batches.\n */\nexport class Utf8Builder extends BinaryBuilder {\n set(value, index) {\n super.set(value && encodeUtf8(value), index);\n }\n}\n","import { toBigInt } from '../../util/numbers.js';\nimport { buffer } from '../buffer.js';\nimport { ValidityBuilder } from './validity.js';\n\n/**\n * Builder for data batches that can be accessed directly as typed arrays.\n */\nexport class DirectBuilder extends ValidityBuilder {\n constructor(type, ctx) {\n super(type, ctx);\n this.values = buffer(type.values);\n }\n\n init() {\n this.values = buffer(this.type.values);\n return super.init();\n }\n\n /**\n * @param {*} value\n * @param {number} index\n * @returns {boolean | void}\n */\n set(value, index) {\n if (super.set(value, index)) {\n this.values.set(value, index);\n }\n }\n\n done() {\n return {\n ...super.done(),\n values: this.values.array(this.index + 1)\n };\n }\n}\n\n/**\n * Builder for int64/uint64 data batches written as bigints.\n */\nexport class Int64Builder extends DirectBuilder {\n set(value, index) {\n super.set(value == null ? value : toBigInt(value), index);\n }\n}\n\n/**\n * Builder for data batches whose values must pass through a transform\n * function prior to be written to a backing buffer.\n */\nexport class TransformBuilder extends DirectBuilder {\n constructor(type, ctx, transform) {\n super(type, ctx);\n this.transform = transform;\n }\n set(value, index) {\n super.set(value == null ? value : this.transform(value), index);\n }\n}\n","/**\n * @import { DataType, ExtractionOptions } from '../types.js'\n * @import { BatchBuilder } from './builders/batch.js'\n */\nimport { batchType } from '../batch-type.js';\nimport { IntervalUnit, Type } from '../constants.js';\nimport { invalidDataType } from '../data-types.js';\nimport { isInt64ArrayType } from '../util/arrays.js';\nimport { toBigInt, toDateDay, toDecimal32, toFloat16, toTimestamp } from '../util/numbers.js';\nimport { BinaryBuilder } from './builders/binary.js';\nimport { BoolBuilder } from './builders/bool.js';\nimport { DecimalBuilder } from './builders/decimal.js';\nimport { DictionaryBuilder, dictionaryContext } from './builders/dictionary.js';\nimport { FixedSizeBinaryBuilder } from './builders/fixed-size-binary.js';\nimport { FixedSizeListBuilder } from './builders/fixed-size-list.js';\nimport { IntervalDayTimeBuilder, IntervalMonthDayNanoBuilder } from './builders/interval.js';\nimport { ListBuilder } from './builders/list.js';\nimport { MapBuilder } from './builders/map.js';\nimport { RunEndEncodedBuilder } from './builders/run-end-encoded.js';\nimport { StructBuilder } from './builders/struct.js';\nimport { DenseUnionBuilder, SparseUnionBuilder } from './builders/union.js';\nimport { Utf8Builder } from './builders/utf8.js';\nimport { DirectBuilder, Int64Builder, TransformBuilder } from './builders/values.js';\n\n/**\n * Create a context object for shared builder state.\n * @param {ExtractionOptions} [options] Batch extraction options.\n* @param {ReturnType<dictionaryContext>} [dictionaries]\n * Context object for tracking dictionaries.\n */\nexport function builderContext(\n options = {},\n dictionaries = dictionaryContext()\n) {\n return {\n batchType: type => batchType(type, options),\n builder(type) { return builder(type, this); },\n dictionary(type) { return dictionaries.get(type, this); },\n finish: () => dictionaries.finish(options)\n };\n}\n\n/**\n * Returns a batch builder for the given type and builder context.\n * @param {DataType} type A data type.\n * @param {ReturnType<builderContext>} [ctx] A builder context.\n * @returns {BatchBuilder}\n */\nexport function builder(type, ctx = builderContext()) {\n const { typeId } = type;\n switch (typeId) {\n case Type.Int:\n case Type.Time:\n case Type.Duration:\n return isInt64ArrayType(type.values)\n ? new Int64Builder(type, ctx)\n : new DirectBuilder(type, ctx);\n case Type.Float:\n return type.precision\n ? new DirectBuilder(type, ctx)\n : new TransformBuilder(type, ctx, toFloat16)\n case Type.Binary:\n case Type.LargeBinary:\n return new BinaryBuilder(type, ctx);\n case Type.Utf8:\n case Type.LargeUtf8:\n return new Utf8Builder(type, ctx);\n case Type.Bool:\n return new BoolBuilder(type, ctx);\n case Type.Decimal:\n return type.bitWidth === 32\n ? new TransformBuilder(type, ctx, toDecimal32(type.scale))\n : new DecimalBuilder(type, ctx);\n case Type.Date:\n return new TransformBuilder(type, ctx, type.unit ? toBigInt : toDateDay);\n case Type.Timestamp:\n return new TransformBuilder(type, ctx, toTimestamp(type.unit));\n case Type.Interval:\n switch (type.unit) {\n case IntervalUnit.DAY_TIME:\n return new IntervalDayTimeBuilder(type, ctx);\n case IntervalUnit.MONTH_DAY_NANO:\n return new IntervalMonthDayNanoBuilder(type, ctx);\n }\n // case IntervalUnit.YEAR_MONTH:\n return new DirectBuilder(type, ctx);\n case Type.List:\n case Type.LargeList:\n return new ListBuilder(type, ctx);\n case Type.Struct:\n return new StructBuilder(type, ctx);\n case Type.Union:\n return type.mode\n ? new DenseUnionBuilder(type, ctx)\n : new SparseUnionBuilder(type, ctx);\n case Type.FixedSizeBinary:\n return new FixedSizeBinaryBuilder(type, ctx);\n case Type.FixedSizeList:\n return new FixedSizeListBuilder(type, ctx);\n case Type.Map:\n return new MapBuilder(type, ctx);\n case Type.RunEndEncoded:\n return new RunEndEncodedBuilder(type, ctx);\n\n case Type.Dictionary:\n return new DictionaryBuilder(type, ctx);\n }\n // case Type.BinaryView:\n // case Type.Utf8View:\n // case Type.ListView:\n // case Type.LargeListView:\n throw new Error(invalidDataType(typeId));\n}\n","/**\n * @import { ColumnBuilderOptions, DataType, NullType } from '../types.js'\n * @import { dictionaryContext } from './builders/dictionary.js'\n */\nimport { NullBatch } from '../batch.js';\nimport { Column } from '../column.js';\nimport { inferType } from './infer-type.js';\nimport { builder, builderContext } from './builder.js';\nimport { Type } from '../constants.js';\nimport { isIterable } from '../util/objects.js';\n\n/**\n * Create a new column by iterating over provided values.\n * @template T\n * @param {Iterable | ((callback: (value: any) => void) => void)} values\n * Either an iterable object or a visitor function that applies a callback\n * to successive data values (akin to Array.forEach).\n * @param {DataType} [type] The data type.\n * @param {ColumnBuilderOptions} [options]\n * Builder options for the generated column.\n * @param {ReturnType<dictionaryContext>} [dicts]\n * Dictionary context object, for internal use only.\n * @returns {Column<T>} The generated column.\n */\nexport function columnFromValues(values, type, options = {}, dicts) {\n const visit = isIterable(values)\n ? callback => { for (const value of values) callback(value); }\n : values;\n\n type ??= inferType(visit);\n const { maxBatchRows = Infinity, ...opt } = options;\n let data;\n\n if (type.typeId === Type.Null) {\n let length = 0;\n visit(() => ++length);\n data = nullBatches(type, length, maxBatchRows);\n } else {\n const ctx = builderContext(opt, dicts);\n const b = builder(type, ctx).init();\n const next = b => data.push(b.batch());\n data = [];\n\n let row = 0;\n visit(value => {\n b.set(value, row++);\n if (row >= maxBatchRows) {\n next(b);\n row = 0;\n }\n });\n if (row) next(b);\n\n // resolve dictionaries\n ctx.finish();\n }\n\n return new Column(data, type);\n}\n\n/**\n * Create null batches with the given batch size limit.\n * @param {NullType} type The null data type.\n * @param {number} length The total column length.\n * @param {number} limit The maximum batch size.\n * @returns {NullBatch[]} The null batches.\n */\nfunction nullBatches(type, length, limit) {\n const data = [];\n const batch = length => new NullBatch({ length, nullCount: length, type });\n const numBatches = Math.floor(length / limit);\n for (let i = 0; i < numBatches; ++i) {\n data.push(batch(limit));\n }\n const rem = length % limit;\n if (rem) data.push(batch(rem));\n return data;\n}\n","/**\n * @import { ColumnBuilderOptions, DataType, TypedArray, TypedArrayConstructor } from '../types.js'\n * @import { dictionaryContext } from './builders/dictionary.js'\n */\nimport { float32Array, float64Array, int16Array, int32Array, int64Array, int8Array, isInt64ArrayType, isTypedArray, uint16Array, uint32Array, uint64Array, uint8Array } from '../util/arrays.js';\nimport { DirectBatch, Int64Batch } from '../batch.js';\nimport { Column } from '../column.js';\nimport { float32, float64, int16, int32, int64, int8, uint16, uint32, uint64, uint8 } from '../data-types.js';\nimport { columnFromValues } from './column-from-values.js';\n\n/**\n * Create a new column from a provided data array.\n * @template T\n * @param {Array | TypedArray} array The input data.\n * @param {DataType} [type] The data type.\n * If not specified, type inference is attempted.\n * @param {ColumnBuilderOptions} [options]\n * Builder options for the generated column.\n * @param {ReturnType<dictionaryContext>} [dicts]\n * Builder context object, for internal use only.\n * @returns {Column<T>} The generated column.\n */\nexport function columnFromArray(array, type, options = {}, dicts) {\n return !type && isTypedArray(array)\n ? columnFromTypedArray(array, options)\n : columnFromValues(v => array.forEach(v), type, options, dicts);\n}\n\n/**\n * Create a new column from a typed array input.\n * @template T\n * @param {TypedArray} values The input data.\n * @param {ColumnBuilderOptions} options\n * Builder options for the generated column.\n * @returns {Column<T>} The generated column.\n */\nfunction columnFromTypedArray(values, { maxBatchRows, useBigInt }) {\n const arrayType = /** @type {TypedArrayConstructor} */ (\n values.constructor\n );\n const type = typeForTypedArray(arrayType);\n const length = values.length;\n const limit = Math.min(maxBatchRows || Infinity, length);\n const numBatches = Math.floor(length / limit);\n\n const batches = [];\n const batchType = isInt64ArrayType(arrayType) && !useBigInt ? Int64Batch : DirectBatch;\n const add = (start, end) => batches.push(new batchType({\n length: end - start,\n nullCount: 0,\n type,\n validity: new uint8Array(0),\n values: values.subarray(start, end)\n }));\n\n let idx = 0;\n for (let i = 0; i < numBatches; ++i) add(idx, idx += limit);\n if (idx < length) add(idx, length);\n\n return new Column(batches);\n}\n\n/**\n * Return an Arrow data type for a given typed array type.\n * @param {TypedArrayConstructor} arrayType The typed array type.\n * @returns {DataType} The data type.\n */\nfunction typeForTypedArray(arrayType) {\n switch (arrayType) {\n case float32Array: return float32();\n case float64Array: return float64();\n case int8Array: return int8();\n case int16Array: return int16();\n case int32Array: return int32();\n case int64Array: return int64();\n case uint8Array: return uint8();\n case uint16Array: return uint16();\n case uint32Array: return uint32();\n case uint64Array: return uint64();\n }\n}\n","/**\n * @import { Column } from '../column.js'\n */\nimport { Endianness, Version } from '../constants.js';\nimport { field } from '../data-types.js';\nimport { Table } from '../table.js';\n\n/**\n * Create a new table from a collection of columns. Columns are assumed\n * to have the same record batch sizes.\n * @param {[string, Column][] | Record<string, Column>} data The columns,\n * as an object with name keys, or an array of [name, column] pairs.\n * @param {boolean} [useProxy] Flag indicating if row proxy\n * objects should be used to represent table rows (default `false`).\n * @returns {Table} The new table.\n */\nexport function tableFromColumns(data, useProxy) {\n const fields = [];\n const entries = Array.isArray(data) ? data : Object.entries(data);\n const length = entries[0]?.[1].length;\n\n const columns = entries.map(([name, col]) => {\n if (col.length !== length) {\n throw new Error('All columns must have the same length.');\n }\n fields.push(field(name, col.type));\n return col;\n });\n\n const schema = {\n version: Version.V5,\n endianness: Endianness.Little,\n fields,\n metadata: null\n };\n\n return new Table(schema, columns, useProxy);\n}\n","/**\n * @import { Column } from '../column.js'\n * @import { TableBuilderOptions, TypedArray } from '../types.js'\n * @import { Table } from '../table.js'\n */\nimport { dictionaryContext } from './builders/dictionary.js';\nimport { columnFromArray } from './column-from-array.js';\nimport { tableFromColumns } from './table-from-columns.js';\n\n/**\n * Create a new table from the provided arrays.\n * @param {[string, Array | TypedArray][]\n * | Record<string, Array | TypedArray>} data\n * The input data as a collection of named arrays.\n * @param {TableBuilderOptions} options\n * Table builder options, including an optional type map.\n * @returns {Table} The new table.\n */\nexport function tableFromArrays(data, options = {}) {\n const { types = {}, ...opt } = options;\n const dicts = dictionaryContext();\n const entries = Array.isArray(data) ? data : Object.entries(data);\n const columns = entries.map(([name, array]) =>\n /** @type {[string, Column]} */ (\n [ name, columnFromArray(array, types[name], opt, dicts)]\n ));\n return tableFromColumns(columns, options.useProxy);\n}\n","/**\n * Async Prepared Statement class\n *\n * @packageDocumentation\n */\n\nimport { DuckDBError } from '../errors.js';\nimport {\n type PreparedStatementBinding,\n type QueryResultResponse,\n type RowsChangedResponse,\n WorkerRequestType,\n} from '../worker/protocol.js';\nimport type { DuckDB } from './bindings.js';\n\n/**\n * A prepared SQL statement with parameter binding.\n *\n * Prepared statements are more secure (prevent SQL injection) and can be\n * more efficient when executing the same query multiple times with different parameters.\n *\n * Bind methods are synchronous (store locally), while run() and execute() are async\n * (send to worker).\n *\n * @category Query Results\n * @example\n * ```typescript\n * const stmt = await conn.prepare('SELECT * FROM users WHERE id = ? AND active = ?');\n * stmt.bindInt32(1, userId);\n * stmt.bindBoolean(2, true);\n * const result = await stmt.run();\n * await stmt.close();\n * ```\n */\nexport class PreparedStatement {\n private db: DuckDB;\n private connectionId: number;\n private preparedStatementId: number;\n private closed = false;\n private bindings: PreparedStatementBinding[] = [];\n\n /**\n * @internal\n */\n constructor(db: DuckDB, connectionId: number, preparedStatementId: number, _sql: string) {\n this.db = db;\n this.connectionId = connectionId;\n this.preparedStatementId = preparedStatementId;\n // sql kept for future debugging/logging purposes\n }\n\n private checkClosed(): void {\n if (this.closed) {\n throw new DuckDBError('Statement is closed');\n }\n }\n\n /**\n * Clear all parameter bindings.\n */\n clearBindings(): void {\n this.checkClosed();\n this.bindings = [];\n }\n\n // ============================================================================\n // Bind methods (synchronous - store locally)\n // ============================================================================\n\n /**\n * Bind a NULL value to a parameter.\n *\n * @param index - 1-based parameter index\n */\n bindNull(index: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'null', value: null });\n }\n\n /**\n * Bind a boolean value to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The boolean value\n */\n bindBoolean(index: number, value: boolean): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'boolean', value });\n }\n\n /**\n * Bind an 8-bit signed integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (-128 to 127)\n */\n bindInt8(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'int8', value });\n }\n\n /**\n * Bind a 16-bit signed integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (-32768 to 32767)\n */\n bindInt16(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'int16', value });\n }\n\n /**\n * Bind a 32-bit signed integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value\n */\n bindInt32(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'int32', value });\n }\n\n /**\n * Bind a 64-bit signed integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (BigInt or number)\n */\n bindInt64(index: number, value: bigint | number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'int64', value });\n }\n\n /**\n * Bind an 8-bit unsigned integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (0 to 255)\n */\n bindUInt8(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'uint8', value });\n }\n\n /**\n * Bind a 16-bit unsigned integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (0 to 65535)\n */\n bindUInt16(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'uint16', value });\n }\n\n /**\n * Bind a 32-bit unsigned integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value\n */\n bindUInt32(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'uint32', value });\n }\n\n /**\n * Bind a 64-bit unsigned integer to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The integer value (BigInt or number)\n */\n bindUInt64(index: number, value: bigint | number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'uint64', value });\n }\n\n /**\n * Bind a 32-bit float to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The float value\n */\n bindFloat(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'float', value });\n }\n\n /**\n * Bind a 64-bit double to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The double value\n */\n bindDouble(index: number, value: number): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'double', value });\n }\n\n /**\n * Bind a string value to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The string value\n */\n bindVarchar(index: number, value: string): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'varchar', value });\n }\n\n /**\n * Bind a blob (binary) value to a parameter.\n *\n * @param index - 1-based parameter index\n * @param value - The binary data\n */\n bindBlob(index: number, value: Uint8Array): void {\n this.checkClosed();\n this.bindings.push({ index, type: 'blob', value });\n }\n\n // ============================================================================\n // Execute methods (async - send to worker)\n // ============================================================================\n\n /**\n * Execute the prepared statement and return results.\n *\n * @returns Promise resolving to array of result rows as objects\n *\n * @example\n * ```typescript\n * const stmt = await conn.prepare('SELECT * FROM users WHERE id = ?');\n * stmt.bindInt32(1, 42);\n * const rows = await stmt.run();\n * ```\n */\n async run<T = Record<string, unknown>>(): Promise<T[]> {\n this.checkClosed();\n\n const response = await this.db.postTask<QueryResultResponse>(WorkerRequestType.RUN_PREPARED, {\n connectionId: this.connectionId,\n preparedStatementId: this.preparedStatementId,\n bindings: this.bindings,\n });\n\n // Convert row arrays to objects\n const { columns, rows } = response;\n return rows.map((row) => {\n const obj: Record<string, unknown> = {};\n for (let i = 0; i < columns.length; i++) {\n obj[columns[i].name] = row[i];\n }\n return obj as T;\n });\n }\n\n /**\n * Execute the prepared statement and return the number of affected rows.\n *\n * Use this for INSERT, UPDATE, DELETE statements.\n *\n * @returns Promise resolving to the number of rows affected\n *\n * @example\n * ```typescript\n * const stmt = await conn.prepare('DELETE FROM users WHERE id = ?');\n * stmt.bindInt32(1, 42);\n * const deleted = await stmt.execute();\n * ```\n */\n async execute(): Promise<number> {\n this.checkClosed();\n\n const response = await this.db.postTask<RowsChangedResponse>(\n WorkerRequestType.EXECUTE_PREPARED,\n {\n connectionId: this.connectionId,\n preparedStatementId: this.preparedStatementId,\n bindings: this.bindings,\n },\n );\n\n return response.rowsChanged;\n }\n\n /**\n * Close the prepared statement and release resources.\n */\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n await this.db.postTask(WorkerRequestType.CLOSE_PREPARED, {\n connectionId: this.connectionId,\n preparedStatementId: this.preparedStatementId,\n });\n this.closed = true;\n }\n}\n","/**\n * Data Chunk class\n *\n * @packageDocumentation\n */\n\nimport type { ColumnInfo } from '../types.js';\n\n/**\n * A chunk of data from a streaming query result.\n *\n * DataChunks contain a fixed number of rows and provide methods to\n * access the data in various formats.\n *\n * @category Query Results\n * @example\n * ```typescript\n * for await (const chunk of stream) {\n * console.log(`Chunk has ${chunk.rowCount} rows`);\n *\n * // Get as array of objects\n * for (const row of chunk.toArray()) {\n * console.log(row);\n * }\n *\n * // Or access raw columnar data\n * const column = chunk.getColumn(0);\n * console.log(column);\n * }\n * ```\n */\nexport class DataChunk {\n private columns: ColumnInfo[];\n private rows: unknown[][];\n private _rowCount: number;\n\n /**\n * @internal\n */\n constructor(columns: ColumnInfo[], rows: unknown[][], rowCount: number) {\n this.columns = columns;\n this.rows = rows;\n this._rowCount = rowCount;\n }\n\n /**\n * Get the number of rows in this chunk.\n */\n get rowCount(): number {\n return this._rowCount;\n }\n\n /**\n * Get the number of columns.\n */\n get columnCount(): number {\n return this.columns.length;\n }\n\n /**\n * Get the column information.\n */\n getColumns(): ColumnInfo[] {\n return this.columns;\n }\n\n /**\n * Get the raw row data.\n *\n * Each row is an array of values in column order.\n */\n getRows(): unknown[][] {\n return this.rows;\n }\n\n /**\n * Get a single column's values.\n *\n * @param index - The 0-based column index\n * @returns Array of values for that column\n */\n getColumn(index: number): unknown[] {\n if (index < 0 || index >= this.columns.length) {\n throw new Error(`Column index ${index} out of bounds`);\n }\n return this.rows.map((row) => row[index]);\n }\n\n /**\n * Get a single column's values by name.\n *\n * @param name - The column name\n * @returns Array of values for that column\n */\n getColumnByName(name: string): unknown[] {\n const index = this.columns.findIndex((col) => col.name === name);\n if (index === -1) {\n throw new Error(`Column \"${name}\" not found`);\n }\n return this.getColumn(index);\n }\n\n /**\n * Get a single row.\n *\n * @param index - The 0-based row index\n * @returns The row as an array of values\n */\n getRow(index: number): unknown[] {\n if (index < 0 || index >= this._rowCount) {\n throw new Error(`Row index ${index} out of bounds`);\n }\n return this.rows[index];\n }\n\n /**\n * Get a single row as an object.\n *\n * @param index - The 0-based row index\n * @returns The row as an object with column names as keys\n */\n getRowObject<T = Record<string, unknown>>(index: number): T {\n const row = this.getRow(index);\n const obj: Record<string, unknown> = {};\n for (let i = 0; i < this.columns.length; i++) {\n obj[this.columns[i].name] = row[i];\n }\n return obj as T;\n }\n\n /**\n * Convert all rows to an array of objects.\n *\n * @returns Array of row objects with column names as keys\n */\n toArray<T = Record<string, unknown>>(): T[] {\n return this.rows.map((row) => {\n const obj: Record<string, unknown> = {};\n for (let i = 0; i < this.columns.length; i++) {\n obj[this.columns[i].name] = row[i];\n }\n return obj as T;\n });\n }\n\n /**\n * Iterate over rows as objects.\n */\n *[Symbol.iterator](): Iterator<Record<string, unknown>> {\n for (let i = 0; i < this._rowCount; i++) {\n yield this.getRowObject(i);\n }\n }\n}\n","/**\n * Async Streaming Result class\n *\n * @packageDocumentation\n */\n\nimport { type Table, tableFromArrays } from '@uwdata/flechette';\nimport { DuckDBError } from '../errors.js';\nimport type { ColumnInfo } from '../types.js';\nimport { type DataChunkResponse, WorkerRequestType } from '../worker/protocol.js';\nimport type { DuckDB } from './bindings.js';\nimport { DataChunk } from './data-chunk.js';\n\n/**\n * An async streaming query result.\n *\n * This class allows you to process large result sets in chunks,\n * which is more memory-efficient than loading everything at once.\n *\n * Implements AsyncIterable for use with `for await...of`.\n *\n * @category Query Results\n * @example\n * ```typescript\n * const stream = await conn.queryStreaming('SELECT * FROM large_table');\n *\n * // Using for await...of\n * for await (const chunk of stream) {\n * console.log(`Processing ${chunk.rowCount} rows`);\n * for (const row of chunk.toArray()) {\n * processRow(row);\n * }\n * }\n *\n * // Or manually\n * let chunk;\n * while ((chunk = await stream.nextChunk()) !== null) {\n * console.log(chunk.rowCount);\n * }\n *\n * await stream.close();\n * ```\n */\nexport class AsyncStreamingResult implements AsyncIterable<DataChunk> {\n private db: DuckDB;\n private connectionId: number;\n private streamingResultId: number;\n private columns: ColumnInfo[];\n private closed = false;\n private done = false;\n\n /**\n * @internal\n */\n constructor(db: DuckDB, connectionId: number, streamingResultId: number, columns: ColumnInfo[]) {\n this.db = db;\n this.connectionId = connectionId;\n this.streamingResultId = streamingResultId;\n this.columns = columns;\n }\n\n /**\n * Get the column information for this result.\n */\n getColumns(): ColumnInfo[] {\n return this.columns;\n }\n\n /**\n * Check if the result has been fully consumed.\n */\n isDone(): boolean {\n return this.done;\n }\n\n /**\n * Check if the result is closed.\n */\n isClosed(): boolean {\n return this.closed;\n }\n\n private checkClosed(): void {\n if (this.closed) {\n throw new DuckDBError('Streaming result is closed');\n }\n }\n\n /**\n * Fetch the next chunk of data.\n *\n * @returns Promise resolving to the next DataChunk, or null if no more data\n */\n async nextChunk(): Promise<DataChunk | null> {\n this.checkClosed();\n\n if (this.done) {\n return null;\n }\n\n const response = await this.db.postTask<DataChunkResponse>(WorkerRequestType.FETCH_CHUNK, {\n connectionId: this.connectionId,\n streamingResultId: this.streamingResultId,\n });\n\n if (response.done && response.rowCount === 0) {\n this.done = true;\n return null;\n }\n\n if (response.done) {\n this.done = true;\n }\n\n return new DataChunk(response.columns, response.rows, response.rowCount);\n }\n\n /**\n * Collect all remaining chunks into an array of objects.\n *\n * Warning: This loads all data into memory. Use nextChunk() or\n * for await...of for large result sets.\n *\n * @returns Promise resolving to array of all result rows\n */\n async toArray<T = Record<string, unknown>>(): Promise<T[]> {\n const results: T[] = [];\n for await (const chunk of this) {\n results.push(...chunk.toArray<T>());\n }\n return results;\n }\n\n /**\n * Collect all remaining chunks into an Arrow Table.\n *\n * Warning: This loads all data into memory.\n *\n * @returns Promise resolving to Arrow Table with all results\n */\n async toArrowTable(): Promise<Table> {\n const allRows: unknown[][] = [];\n const columns = this.columns;\n\n for await (const chunk of this) {\n allRows.push(...chunk.getRows());\n }\n\n // Build column arrays\n const columnArrays: Record<string, unknown[]> = {};\n for (let colIdx = 0; colIdx < columns.length; colIdx++) {\n const colName = columns[colIdx].name;\n columnArrays[colName] = allRows.map((row) => row[colIdx]);\n }\n\n return tableFromArrays(columnArrays);\n }\n\n /**\n * Close the streaming result and release resources.\n */\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n await this.db.postTask(WorkerRequestType.CLOSE_STREAMING_RESULT, {\n connectionId: this.connectionId,\n streamingResultId: this.streamingResultId,\n });\n this.closed = true;\n }\n\n // ============================================================================\n // AsyncIterable implementation\n // ============================================================================\n\n /**\n * Returns an async iterator for this streaming result.\n */\n async *[Symbol.asyncIterator](): AsyncIterator<DataChunk> {\n try {\n let chunk = await this.nextChunk();\n while (chunk !== null) {\n yield chunk;\n chunk = await this.nextChunk();\n }\n } finally {\n // Auto-close when iteration completes\n if (!this.closed) {\n await this.close();\n }\n }\n }\n}\n","/**\n * Async Connection class\n *\n * @packageDocumentation\n */\n\nimport { type Table, tableFromIPC } from '@uwdata/flechette';\nimport { DuckDBError } from '../errors.js';\nimport type { CSVInsertOptions, JSONInsertOptions } from '../types.js';\nimport {\n type ArrowIPCResponse,\n type PreparedStatementIdResponse,\n type QueryResultResponse,\n type RowsChangedResponse,\n type StreamingResultInfoResponse,\n WorkerRequestType,\n} from '../worker/protocol.js';\nimport type { DuckDB } from './bindings.js';\nimport { PreparedStatement } from './prepared-statement.js';\nimport { AsyncStreamingResult } from './streaming-result.js';\n\n/**\n * A connection to a DuckDB database.\n *\n * Connections are used to execute queries and manage transactions.\n * All operations are async as they communicate with a Web Worker.\n *\n * @category Connection\n * @example\n * ```typescript\n * const conn = await db.connect();\n *\n * // Query returns array of objects\n * const rows = await conn.query('SELECT * FROM range(10)');\n *\n * // Query returns Arrow Table\n * const table = await conn.queryArrow('SELECT * FROM range(1000)');\n *\n * // Streaming for large results\n * const stream = await conn.queryStreaming('SELECT * FROM large_table');\n * for await (const chunk of stream) {\n * console.log(chunk.rowCount);\n * }\n *\n * await conn.close();\n * ```\n */\nexport class Connection {\n private db: DuckDB;\n private connectionId: number;\n private closed = false;\n\n /**\n * @internal\n */\n constructor(db: DuckDB, connectionId: number) {\n this.db = db;\n this.connectionId = connectionId;\n }\n\n /**\n * Get the connection ID.\n * @internal\n */\n getConnectionId(): number {\n return this.connectionId;\n }\n\n /**\n * Get the database instance.\n * @internal\n */\n getDB(): DuckDB {\n return this.db;\n }\n\n private checkClosed(): void {\n if (this.closed) {\n throw new DuckDBError('Connection is closed');\n }\n }\n\n // ============================================================================\n // Query Operations\n // ============================================================================\n\n /**\n * Executes a SQL query and returns the results as an array of objects.\n *\n * @param sql - The SQL query to execute\n * @returns Promise resolving to array of result rows as objects\n *\n * @example\n * ```typescript\n * const rows = await conn.query<{ id: number; name: string }>(\n * 'SELECT * FROM users WHERE active = true'\n * );\n * for (const row of rows) {\n * console.log(row.id, row.name);\n * }\n * ```\n */\n async query<T = Record<string, unknown>>(sql: string): Promise<T[]> {\n this.checkClosed();\n\n const response = await this.db.postTask<QueryResultResponse>(WorkerRequestType.QUERY, {\n connectionId: this.connectionId,\n sql,\n });\n\n // Convert row arrays to objects\n const { columns, rows } = response;\n return rows.map((row) => {\n const obj: Record<string, unknown> = {};\n for (let i = 0; i < columns.length; i++) {\n obj[columns[i].name] = row[i];\n }\n return obj as T;\n });\n }\n\n /**\n * Executes a SQL query and returns results as a Flechette Arrow Table.\n *\n * This method is more efficient for large result sets and provides\n * proper Arrow/columnar data representation.\n *\n * @param sql - The SQL query to execute\n * @returns Promise resolving to Arrow Table with query results\n *\n * @example\n * ```typescript\n * const table = await conn.queryArrow('SELECT * FROM range(1000000)');\n * console.log(table.numRows);\n * ```\n */\n async queryArrow(sql: string): Promise<Table> {\n this.checkClosed();\n\n const response = await this.db.postTask<ArrowIPCResponse>(WorkerRequestType.QUERY_ARROW, {\n connectionId: this.connectionId,\n sql,\n });\n\n return tableFromIPC(response.ipcBuffer);\n }\n\n /**\n * Executes a SQL query and returns a streaming result.\n *\n * This method is more memory-efficient for large result sets as it\n * processes data in chunks rather than loading everything at once.\n *\n * @param sql - The SQL query to execute\n * @returns Promise resolving to AsyncStreamingResult that can be iterated over\n *\n * @example\n * ```typescript\n * const stream = await conn.queryStreaming('SELECT * FROM large_table');\n * for await (const chunk of stream) {\n * console.log(`Processing ${chunk.rowCount} rows`);\n * for (const row of chunk.toArray()) {\n * processRow(row);\n * }\n * }\n * await stream.close();\n * ```\n */\n async queryStreaming(sql: string): Promise<AsyncStreamingResult> {\n this.checkClosed();\n\n const response = await this.db.postTask<StreamingResultInfoResponse>(\n WorkerRequestType.QUERY_STREAMING,\n { connectionId: this.connectionId, sql },\n );\n\n return new AsyncStreamingResult(\n this.db,\n this.connectionId,\n response.streamingResultId,\n response.columns,\n );\n }\n\n /**\n * Executes a SQL statement and returns the number of affected rows.\n *\n * Use this for INSERT, UPDATE, DELETE, or other statements where you\n * don't need to read result rows.\n *\n * @param sql - The SQL statement to execute\n * @returns Promise resolving to the number of rows affected\n *\n * @example\n * ```typescript\n * const deleted = await conn.execute('DELETE FROM users WHERE inactive = true');\n * console.log(`Deleted ${deleted} users`);\n * ```\n */\n async execute(sql: string): Promise<number> {\n this.checkClosed();\n\n const response = await this.db.postTask<RowsChangedResponse>(WorkerRequestType.EXECUTE, {\n connectionId: this.connectionId,\n sql,\n });\n\n return response.rowsChanged;\n }\n\n // ============================================================================\n // Prepared Statements\n // ============================================================================\n\n /**\n * Prepares a SQL statement for execution.\n *\n * Prepared statements are more secure (prevent SQL injection) and can be\n * more efficient when executing the same query multiple times with different parameters.\n *\n * @param sql - The SQL statement with parameter placeholders (?)\n * @returns Promise resolving to a PreparedStatement instance\n *\n * @example\n * ```typescript\n * const stmt = await conn.prepare('SELECT * FROM users WHERE id = ?');\n * stmt.bindInt32(1, 42);\n * const rows = await stmt.run();\n * await stmt.close();\n * ```\n */\n async prepare(sql: string): Promise<PreparedStatement> {\n this.checkClosed();\n\n const response = await this.db.postTask<PreparedStatementIdResponse>(\n WorkerRequestType.PREPARE,\n { connectionId: this.connectionId, sql },\n );\n\n return new PreparedStatement(this.db, this.connectionId, response.preparedStatementId, sql);\n }\n\n // ============================================================================\n // Transactions\n // ============================================================================\n\n /**\n * Begins a new transaction.\n *\n * @example\n * ```typescript\n * await conn.beginTransaction();\n * try {\n * await conn.execute('INSERT INTO users (name) VALUES ($1)', ['Alice']);\n * await conn.execute('UPDATE balances SET amount = amount - 100 WHERE user = $1', ['Alice']);\n * await conn.commit();\n * } catch (e) {\n * await conn.rollback();\n * throw e;\n * }\n * ```\n */\n async beginTransaction(): Promise<void> {\n this.checkClosed();\n await this.db.postTask(WorkerRequestType.BEGIN_TRANSACTION, {\n connectionId: this.connectionId,\n });\n }\n\n /**\n * Commits the current transaction.\n */\n async commit(): Promise<void> {\n this.checkClosed();\n await this.db.postTask(WorkerRequestType.COMMIT, {\n connectionId: this.connectionId,\n });\n }\n\n /**\n * Rolls back the current transaction.\n */\n async rollback(): Promise<void> {\n this.checkClosed();\n await this.db.postTask(WorkerRequestType.ROLLBACK, {\n connectionId: this.connectionId,\n });\n }\n\n /**\n * Execute a function within a transaction.\n *\n * The transaction is automatically committed on success or rolled back on error.\n *\n * @param fn - The function to execute within the transaction\n * @returns Promise resolving to the function's return value\n *\n * @example\n * ```typescript\n * const result = await conn.transaction(async () => {\n * await conn.execute('INSERT INTO users (name) VALUES ($1)', ['Alice']);\n * return await conn.query('SELECT * FROM users WHERE name = $1', ['Alice']);\n * });\n * ```\n */\n async transaction<T>(fn: () => Promise<T>): Promise<T> {\n await this.beginTransaction();\n try {\n const result = await fn();\n await this.commit();\n return result;\n } catch (e) {\n await this.rollback();\n throw e;\n }\n }\n\n // ============================================================================\n // Data Insertion\n // ============================================================================\n\n /**\n * Insert data from an Arrow IPC buffer.\n *\n * @param tableName - The name of the table to insert into\n * @param ipcBuffer - The Arrow IPC buffer containing the data\n *\n * @example\n * ```typescript\n * import { tableToIPC } from '@uwdata/flechette';\n * const ipcBuffer = tableToIPC(myArrowTable);\n * await conn.insertArrowFromIPCStream('my_table', ipcBuffer);\n * ```\n */\n async insertArrowFromIPCStream(tableName: string, ipcBuffer: Uint8Array): Promise<void> {\n this.checkClosed();\n\n await this.db.postTask(\n WorkerRequestType.INSERT_ARROW_FROM_IPC,\n { connectionId: this.connectionId, tableName, ipcBuffer },\n [ipcBuffer.buffer],\n );\n }\n\n /**\n * Insert data from a CSV file.\n *\n * @param tableName - The name of the table to insert into\n * @param path - The virtual file path of the CSV\n * @param options - Optional CSV parsing options\n *\n * @example\n * ```typescript\n * await db.registerFileBuffer('data.csv', csvData);\n * await conn.insertCSVFromPath('my_table', 'data.csv', { header: true });\n * ```\n */\n async insertCSVFromPath(\n tableName: string,\n path: string,\n options?: CSVInsertOptions,\n ): Promise<void> {\n this.checkClosed();\n\n await this.db.postTask(WorkerRequestType.INSERT_CSV_FROM_PATH, {\n connectionId: this.connectionId,\n tableName,\n path,\n options,\n });\n }\n\n /**\n * Insert data from a JSON file.\n *\n * @param tableName - The name of the table to insert into\n * @param path - The virtual file path of the JSON\n * @param options - Optional JSON parsing options\n *\n * @example\n * ```typescript\n * await db.registerFileBuffer('data.json', jsonData);\n * await conn.insertJSONFromPath('my_table', 'data.json');\n * ```\n */\n async insertJSONFromPath(\n tableName: string,\n path: string,\n options?: JSONInsertOptions,\n ): Promise<void> {\n this.checkClosed();\n\n await this.db.postTask(WorkerRequestType.INSERT_JSON_FROM_PATH, {\n connectionId: this.connectionId,\n tableName,\n path,\n options,\n });\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n /**\n * Closes the connection and releases resources.\n */\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n await this.db.postTask(WorkerRequestType.DISCONNECT, {\n connectionId: this.connectionId,\n });\n this.closed = true;\n }\n}\n","/**\n * Async DuckDB bindings for the main thread\n *\n * @packageDocumentation\n */\n\nimport { createWorker } from '../cdn.js';\nimport { DuckDBError } from '../errors.js';\nimport type { DuckDBConfig, FileInfo, InitOptions } from '../types.js';\nimport {\n type ConnectionIdResponse,\n type ErrorResponse,\n type FileBufferResponse,\n type FileInfoListResponse,\n type VersionResponse,\n type WorkerRequest,\n WorkerRequestType,\n type WorkerResponse,\n WorkerResponseType,\n WorkerTask,\n} from '../worker/protocol.js';\nimport { Connection } from './connection.js';\n\n// Module state\nlet globalDB: DuckDB | null = null;\nlet initPromise: Promise<void> | null = null;\n\n/**\n * Initialize the DuckDB WASM module.\n *\n * This function must be called before creating any DuckDB instances.\n * It spawns a Web Worker and initializes the WebAssembly module inside it.\n *\n * URLs for worker, WASM, and JS files are automatically resolved from the\n * library location. You can override them if needed.\n *\n * @category Database\n * @param options - Optional initialization options\n * @returns Promise that resolves when initialization is complete\n *\n * @example\n * ```typescript\n * import { init, DuckDB } from '@ducklings/browser';\n *\n * await init();\n * const db = new DuckDB();\n * const conn = await db.connect();\n *\n * const rows = await conn.query('SELECT 42 as answer');\n * console.log(rows);\n *\n * await conn.close();\n * await db.close();\n * ```\n */\nexport async function init(options?: string | InitOptions): Promise<void> {\n if (globalDB) {\n return;\n }\n\n if (initPromise) {\n await initPromise;\n return;\n }\n\n // Normalize options\n const opts: InitOptions = typeof options === 'string' ? { wasmUrl: options } : (options ?? {});\n\n initPromise = (async () => {\n // Auto-resolve URLs from library location if not provided\n const baseUrl = new URL('.', import.meta.url).href;\n const workerUrl = opts.workerUrl ?? new URL('worker.js', baseUrl).href;\n const wasmUrl = opts.wasmUrl ?? new URL('wasm/duckdb.wasm', baseUrl).href;\n const wasmJsUrl = opts.wasmJsUrl ?? new URL('wasm/duckdb.js', baseUrl).href;\n\n // Create worker - use provided worker, or create one automatically\n // Auto-detect cross-origin (CDN) and use Blob URL workaround if needed\n let worker: Worker;\n if (opts.worker) {\n worker = opts.worker;\n } else {\n // Check if cross-origin (only in browser environment where location exists)\n const isCrossOrigin =\n typeof location !== 'undefined' && new URL(workerUrl).origin !== location.origin;\n if (isCrossOrigin) {\n // CDN usage: fetch worker script and create Blob URL\n worker = await createWorker(workerUrl);\n } else {\n // Same-origin or Node.js: create worker directly\n worker = new Worker(workerUrl, { type: 'module' });\n }\n }\n\n // Wait for worker to be ready\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new DuckDBError('Worker initialization timeout'));\n }, 30000);\n\n const handler = (event: MessageEvent) => {\n if (event.data?.type === 'WORKER_READY') {\n clearTimeout(timeout);\n worker.removeEventListener('message', handler);\n resolve();\n }\n };\n worker.addEventListener('message', handler);\n });\n\n // Create the global DB instance\n globalDB = new DuckDB(worker);\n\n // Instantiate WASM in worker\n await globalDB.instantiate(wasmUrl, wasmJsUrl);\n\n // Open database with config\n await globalDB.open(opts.config);\n })();\n\n await initPromise;\n}\n\n/**\n * Returns the DuckDB library version.\n *\n * @category Database\n * @returns Promise resolving to version string\n * @throws DuckDBError if WASM module is not initialized\n */\nexport async function version(): Promise<string> {\n if (!globalDB) {\n throw new DuckDBError('DuckDB WASM not initialized. Call init() first.');\n }\n return globalDB.getVersion();\n}\n\n/**\n * Get the global DuckDB instance.\n *\n * @category Database\n * @returns The global DuckDB instance\n * @throws DuckDBError if not initialized\n */\nexport function getDB(): DuckDB {\n if (!globalDB) {\n throw new DuckDBError('DuckDB WASM not initialized. Call init() first.');\n }\n return globalDB;\n}\n\n/**\n * DuckDB database instance.\n *\n * This is the main entry point for using DuckDB in WASM.\n * Create a database instance, then create connections to execute queries.\n *\n * @category Database\n * @example\n * ```typescript\n * import { init, DuckDB } from '@ducklings/browser';\n *\n * await init();\n *\n * const db = new DuckDB();\n * const conn = await db.connect();\n *\n * const result = await conn.query('SELECT 42 as answer');\n * console.log(result);\n *\n * await conn.close();\n * await db.close();\n * ```\n */\nexport class DuckDB {\n private worker: Worker;\n private pendingRequests: Map<number, WorkerTask> = new Map();\n private nextMessageId = 1;\n private closed = false;\n\n /**\n * Creates a new DuckDB instance.\n *\n * @param worker - The Web Worker to use for DuckDB operations\n * @internal Use init() instead of creating directly\n */\n constructor(worker?: Worker) {\n if (worker) {\n this.worker = worker;\n this.setupMessageHandler();\n } else {\n // Use global worker\n if (!globalDB) {\n throw new DuckDBError('DuckDB WASM not initialized. Call init() first.');\n }\n this.worker = globalDB.worker;\n this.pendingRequests = globalDB.pendingRequests;\n this.nextMessageId = globalDB.nextMessageId;\n }\n }\n\n private setupMessageHandler(): void {\n this.worker.onmessage = (event: MessageEvent) => {\n const response = event.data as WorkerResponse;\n const task = this.pendingRequests.get(response.requestId);\n\n if (task) {\n this.pendingRequests.delete(response.requestId);\n\n if (response.type === WorkerResponseType.ERROR) {\n const errorData = response.data as ErrorResponse;\n task.reject(new DuckDBError(errorData.message, errorData.code, errorData.query));\n } else {\n task.resolve(response.data);\n }\n }\n };\n\n this.worker.onerror = (error: ErrorEvent) => {\n // Reject all pending requests\n for (const [, task] of this.pendingRequests) {\n task.reject(new DuckDBError(`Worker error: ${error.message}`));\n }\n this.pendingRequests.clear();\n };\n }\n\n /**\n * Post a request to the worker and return a promise for the response.\n *\n * @internal\n */\n postTask<T>(type: WorkerRequestType, data?: unknown, transfer?: Transferable[]): Promise<T> {\n if (this.closed) {\n return Promise.reject(new DuckDBError('Database is closed'));\n }\n\n const messageId = this.nextMessageId++;\n const task = new WorkerTask<T>(messageId, type);\n this.pendingRequests.set(messageId, task as WorkerTask);\n\n const request: WorkerRequest = {\n messageId,\n type,\n data,\n };\n\n if (transfer && transfer.length > 0) {\n this.worker.postMessage(request, transfer);\n } else {\n this.worker.postMessage(request);\n }\n\n return task.promise;\n }\n\n /**\n * Instantiate the WASM module in the worker.\n *\n * @internal\n */\n async instantiate(wasmUrl?: string, wasmJsUrl?: string): Promise<void> {\n await this.postTask(WorkerRequestType.INSTANTIATE, { wasmUrl, wasmJsUrl });\n }\n\n /**\n * Open the database.\n *\n * @param config - Optional configuration options\n * @internal\n */\n async open(config?: DuckDBConfig): Promise<void> {\n await this.postTask(WorkerRequestType.OPEN, { config });\n }\n\n /**\n * Get the DuckDB library version.\n */\n async getVersion(): Promise<string> {\n const response = await this.postTask<VersionResponse>(WorkerRequestType.GET_VERSION);\n return response.version;\n }\n\n /**\n * Creates a new connection to this database.\n *\n * Multiple connections can be created to the same database.\n * Each connection maintains its own transaction state.\n *\n * @returns Promise resolving to a new Connection instance\n */\n async connect(): Promise<Connection> {\n const response = await this.postTask<ConnectionIdResponse>(WorkerRequestType.CONNECT);\n return new Connection(this, response.connectionId);\n }\n\n /**\n * Creates a new DuckDB database and initializes the WASM module if needed.\n *\n * This is a convenience method that combines init() and connect().\n *\n * @returns Promise that resolves to a new Connection instance\n *\n * @example\n * ```typescript\n * const conn = await DuckDB.createConnection();\n * const rows = await conn.query('SELECT 42 as answer');\n * ```\n */\n static async createConnection(): Promise<Connection> {\n await init();\n return getDB().connect();\n }\n\n // ============================================================================\n // File Registration\n // ============================================================================\n\n /**\n * Register a remote file by URL.\n *\n * @param name - The virtual file name to use\n * @param url - The URL to fetch the file from\n * @param protocol - Optional protocol hint ('HTTP' or 'HTTPS')\n * @param directIO - Whether to use direct I/O\n *\n * @example\n * ```typescript\n * await db.registerFileURL('data.parquet', 'https://example.com/data.parquet');\n * const rows = await conn.query(\"SELECT * FROM 'data.parquet'\");\n * ```\n */\n async registerFileURL(\n name: string,\n url: string,\n protocol?: string,\n directIO?: boolean,\n ): Promise<void> {\n await this.postTask(WorkerRequestType.REGISTER_FILE_URL, {\n name,\n url,\n protocol,\n directIO,\n });\n }\n\n /**\n * Register an in-memory buffer as a virtual file.\n *\n * @param name - The virtual file name to use\n * @param buffer - The file contents\n *\n * @example\n * ```typescript\n * const csvData = new TextEncoder().encode('id,name\\n1,Alice\\n2,Bob');\n * await db.registerFileBuffer('data.csv', csvData);\n * const rows = await conn.query(\"SELECT * FROM read_csv('/data.csv')\");\n * ```\n */\n async registerFileBuffer(name: string, buffer: Uint8Array): Promise<void> {\n await this.postTask(WorkerRequestType.REGISTER_FILE_BUFFER, { name, buffer }, [buffer.buffer]);\n }\n\n /**\n * Register a text string as a virtual file.\n *\n * @param name - The virtual file name to use\n * @param text - The file contents as a string\n */\n async registerFileText(name: string, text: string): Promise<void> {\n await this.postTask(WorkerRequestType.REGISTER_FILE_TEXT, { name, text });\n }\n\n // ============================================================================\n // File Operations\n // ============================================================================\n\n /**\n * Remove a registered file.\n *\n * @param name - The virtual file name to remove\n */\n async dropFile(name: string): Promise<void> {\n await this.postTask(WorkerRequestType.DROP_FILE, { name });\n }\n\n /**\n * Remove all registered files.\n */\n async dropFiles(): Promise<void> {\n await this.postTask(WorkerRequestType.DROP_FILES);\n }\n\n /**\n * Flush all file buffers.\n */\n async flushFiles(): Promise<void> {\n await this.postTask(WorkerRequestType.FLUSH_FILES);\n }\n\n /**\n * Export a file to a buffer.\n *\n * @param name - The virtual file name to export\n * @returns The file contents\n */\n async copyFileToBuffer(name: string): Promise<Uint8Array> {\n const response = await this.postTask<FileBufferResponse>(\n WorkerRequestType.COPY_FILE_TO_BUFFER,\n { name },\n );\n return response.buffer;\n }\n\n /**\n * Copy a file to another path.\n *\n * @param srcName - The source file name\n * @param dstPath - The destination path\n */\n async copyFileToPath(srcName: string, dstPath: string): Promise<void> {\n await this.postTask(WorkerRequestType.COPY_FILE_TO_PATH, { srcName, dstPath });\n }\n\n /**\n * List files matching a glob pattern.\n *\n * @param pattern - The glob pattern to match\n * @returns List of matching files\n */\n async globFiles(pattern: string): Promise<FileInfo[]> {\n const response = await this.postTask<FileInfoListResponse>(WorkerRequestType.GLOB_FILES, {\n pattern,\n });\n return response.files;\n }\n\n /**\n * Closes the database and releases all resources.\n */\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n\n await this.postTask(WorkerRequestType.CLOSE);\n this.worker.terminate();\n this.closed = true;\n\n if (globalDB === this) {\n globalDB = null;\n initPromise = null;\n }\n }\n}\n","/**\n * Shared type definitions for Ducklings\n * @packageDocumentation\n */\n\n/**\n * DuckDB type constants mapping to the C API type IDs.\n * @category Types\n */\nexport const DuckDBType = {\n INVALID: 0,\n BOOLEAN: 1,\n TINYINT: 2,\n SMALLINT: 3,\n INTEGER: 4,\n BIGINT: 5,\n UTINYINT: 6,\n USMALLINT: 7,\n UINTEGER: 8,\n UBIGINT: 9,\n FLOAT: 10,\n DOUBLE: 11,\n TIMESTAMP: 12,\n DATE: 13,\n TIME: 14,\n INTERVAL: 15,\n HUGEINT: 16,\n UHUGEINT: 32,\n VARCHAR: 17,\n BLOB: 18,\n DECIMAL: 19,\n TIMESTAMP_S: 20,\n TIMESTAMP_MS: 21,\n TIMESTAMP_NS: 22,\n ENUM: 23,\n LIST: 24,\n STRUCT: 25,\n MAP: 26,\n ARRAY: 33,\n UUID: 27,\n UNION: 28,\n BIT: 29,\n TIME_TZ: 30,\n TIMESTAMP_TZ: 31,\n} as const;\n\n/**\n * Type ID from DuckDB type constants.\n * @category Types\n */\nexport type DuckDBTypeId = (typeof DuckDBType)[keyof typeof DuckDBType];\n\n/**\n * Database access mode.\n * @category Configuration\n */\nexport enum AccessMode {\n /** DuckDB determines mode based on context (resolves to READ_WRITE for in-memory) */\n AUTOMATIC = 'automatic',\n /** Read-only mode - all write operations are blocked */\n READ_ONLY = 'read_only',\n /** Read-write mode - allows both reads and writes */\n READ_WRITE = 'read_write',\n}\n\n/**\n * DuckDB configuration options.\n * @category Configuration\n */\nexport interface DuckDBConfig {\n /**\n * Database access mode.\n * Use READ_ONLY to prevent any data modification.\n * @default AccessMode.AUTOMATIC\n */\n accessMode?: AccessMode;\n\n /**\n * Enable external access (file I/O, httpfs, etc.).\n * Set to false to prevent all external data access.\n * WARNING: Setting to false will disable httpfs functionality.\n * @default true\n */\n enableExternalAccess?: boolean;\n\n /**\n * Lock configuration after startup.\n * Prevents runtime configuration changes via SQL SET commands.\n * @default true (secure default)\n */\n lockConfiguration?: boolean;\n\n /**\n * Custom configuration options.\n * Key-value pairs passed directly to duckdb_set_config.\n * @see https://duckdb.org/docs/configuration/overview\n */\n customConfig?: Record<string, string>;\n}\n\n/**\n * Column metadata for query results.\n * @category Types\n */\nexport interface ColumnInfo {\n /** Column name */\n name: string;\n /** DuckDB type ID */\n type: DuckDBTypeId;\n /** Type alias (e.g., \"JSON\" for aliased types) */\n alias?: string;\n}\n\n/**\n * Options for initializing the DuckDB WASM module.\n * @category Types\n */\nexport interface InitOptions {\n /**\n * URL to the WASM file (for browser environments).\n * If not provided, uses the default bundled WASM location.\n */\n wasmUrl?: string;\n\n /**\n * URL to the Emscripten JS file (duckdb.js).\n * Required for proper bundler support.\n */\n wasmJsUrl?: string;\n\n /**\n * URL to the worker script (for browser environments).\n * If not provided, uses the default bundled worker location.\n */\n workerUrl?: string;\n\n /**\n * Pre-created Worker instance.\n * Use {@link createWorker} for CDN loading to work around cross-origin restrictions.\n *\n * @example\n * ```typescript\n * import { createWorker, getJsDelivrBundle, init } from '@ducklings/browser';\n *\n * const bundle = getJsDelivrBundle();\n * const worker = await createWorker(bundle.mainWorker);\n * await init({ worker, wasmUrl: bundle.wasmModule, wasmJsUrl: bundle.wasmJs });\n * ```\n */\n worker?: Worker;\n\n /**\n * Pre-compiled WebAssembly.Module (for Cloudflare Workers).\n * In Workers, import the WASM file directly and pass it here.\n */\n wasmModule?: WebAssembly.Module;\n\n /**\n * Whether to use the main thread instead of a Web Worker.\n * Defaults to false (use Web Worker).\n * Note: Main thread mode blocks the UI during operations.\n */\n useMainThread?: boolean;\n\n /**\n * DuckDB configuration options.\n * Controls access mode, security settings, and custom configuration.\n */\n config?: DuckDBConfig;\n}\n\n/**\n * Emscripten module interface for DuckDB WASM.\n * @internal\n */\nexport interface EmscriptenModule {\n ccall: (\n name: string,\n returnType: string | null,\n argTypes: string[],\n args: unknown[],\n opts?: { async?: boolean },\n ) => unknown | Promise<unknown>;\n cwrap: (\n name: string,\n returnType: string | null,\n argTypes: string[],\n ) => (...args: unknown[]) => unknown;\n getValue: (ptr: number, type: string) => number;\n setValue: (ptr: number, value: number, type: string) => void;\n UTF8ToString: (ptr: number) => string;\n stringToUTF8: (str: string, outPtr: number, maxBytesToWrite: number) => void;\n lengthBytesUTF8: (str: string) => number;\n _malloc: (size: number) => number;\n _free: (ptr: number) => void;\n stackAlloc: (size: number) => number;\n stackSave: () => number;\n stackRestore: (ptr: number) => void;\n HEAPU8: Uint8Array;\n HEAP8: Int8Array;\n HEAP16: Int16Array;\n HEAP32: Int32Array;\n HEAPU16: Uint16Array;\n HEAPU32: Uint32Array;\n HEAPF32: Float32Array;\n HEAPF64: Float64Array;\n}\n\n/**\n * File information returned by globFiles.\n * @category Types\n */\nexport interface FileInfo {\n /** File name/path */\n name: string;\n /** File size in bytes */\n size: number;\n}\n\n/**\n * Options for CSV insertion.\n * @category Types\n */\nexport interface CSVInsertOptions {\n /** Whether the CSV has a header row */\n header?: boolean;\n /** Column delimiter */\n delimiter?: string;\n /** Quote character */\n quote?: string;\n /** Escape character */\n escape?: string;\n /** Skip rows at start */\n skip?: number;\n /** Column names (if no header) */\n columns?: string[];\n}\n\n/**\n * Options for JSON insertion.\n * @category Types\n */\nexport interface JSONInsertOptions {\n /** JSON format: 'auto', 'records', 'values', or 'newline_delimited' */\n format?: 'auto' | 'records' | 'values' | 'newline_delimited';\n /** Column names */\n columns?: string[];\n}\n"]}