@duckdb/duckdb-wasm 1.33.1-dev16.0 → 1.33.1-dev17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/duckdb-browser-blocking.cjs +1 -1
- package/dist/duckdb-browser-blocking.cjs.map +1 -1
- package/dist/duckdb-browser-blocking.mjs +1 -1
- package/dist/duckdb-browser-blocking.mjs.map +1 -1
- package/dist/duckdb-browser.cjs +1 -1
- package/dist/duckdb-browser.cjs.map +1 -1
- package/dist/duckdb-browser.mjs +1 -1
- package/dist/duckdb-browser.mjs.map +1 -1
- package/dist/duckdb-coi.wasm +0 -0
- package/dist/duckdb-eh.wasm +0 -0
- package/dist/duckdb-node-blocking.cjs +1 -1
- package/dist/duckdb-node-blocking.cjs.map +1 -1
- package/dist/duckdb-node.cjs +1 -1
- package/dist/duckdb-node.cjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../web-worker/cjs/browser.js", "../src/bindings/config.ts", "../src/bindings/tokens.ts", "../src/log.ts", "../src/status.ts", "../src/parallel/async_connection.ts", "../src/parallel/worker_request.ts", "../src/json_typedef.ts", "../src/utils/opfs_util.ts", "../src/parallel/async_bindings.ts", "../src/bindings/runtime.ts", "../src/parallel/worker_dispatcher.ts", "../../wasm-feature-detect/dist/esm/index.js", "../package.json", "../src/version.ts", "../src/platform.ts", "../src/worker.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nmodule.exports = Worker;", "export interface DuckDBQueryConfig {\n /**\n * The polling interval for queries\n */\n queryPollingInterval?: number;\n /**\n * Cast BigInt to Double?\n */\n castBigIntToDouble?: boolean;\n /**\n * Cast Timestamp to Date64?\n */\n castTimestampToDate?: boolean;\n /**\n * Cast Timestamp to Date64?\n */\n castDurationToTime64?: boolean;\n /**\n * Cast Decimal to Double?\n */\n castDecimalToDouble?: boolean;\n}\n\nexport interface DuckDBFilesystemConfig {\n reliableHeadRequests?: boolean;\n /**\n * Allow falling back to full HTTP reads if the server does not support range requests.\n */\n allowFullHTTPReads?: boolean;\n /**\n * Force use of full HTTP reads, suppressing range requests.\n */\n forceFullHTTPReads?: boolean;\n}\n\nexport interface DuckDBOPFSConfig {\n /**\n * Defines how `opfs://` files are handled during SQL execution.\n * - \"auto\": Automatically register `opfs://` files and drop them after execution.\n * - \"manual\": Files must be manually registered and dropped.\n */\n fileHandling?: \"auto\" | \"manual\";\n}\n\nexport enum DuckDBAccessMode {\n UNDEFINED = 0,\n AUTOMATIC = 1,\n READ_ONLY = 2,\n READ_WRITE = 3,\n}\n\nexport interface DuckDBConfig {\n /**\n * The database path\n */\n path?: string;\n /**\n * The access mode\n */\n accessMode?: DuckDBAccessMode;\n /**\n * The maximum number of threads.\n * Note that this will only work with cross-origin isolated sites since it requires SharedArrayBuffers.\n */\n maximumThreads?: number;\n /**\n * The direct io flag\n */\n useDirectIO?: boolean;\n /**\n * The query config\n */\n query?: DuckDBQueryConfig;\n /**\n * The filesystem config\n */\n filesystem?: DuckDBFilesystemConfig;\n /**\n * Whether to allow unsigned extensions\n */\n allowUnsignedExtensions?: boolean;\n /**\n * Whether to use alternate Arrow conversion that preserves full range and precision of data.\n */\n arrowLosslessConversion?: boolean;\n /**\n * Custom user agent string\n */\n customUserAgent?: string;\n /**\n * opfs string\n */\n opfs?: DuckDBOPFSConfig;\n}\n", "export enum TokenType {\n IDENTIFIER = 0,\n NUMERIC_CONSTANT = 1,\n STRING_CONSTANT = 2,\n OPERATOR = 3,\n KEYWORD = 4,\n COMMENT = 5,\n}\n\nexport interface ScriptTokens {\n offsets: number[];\n types: TokenType[];\n}\n", "export enum LogLevel {\n NONE = 0,\n DEBUG = 1,\n INFO = 2,\n WARNING = 3,\n ERROR = 4,\n}\n\nexport enum LogTopic {\n NONE = 0,\n CONNECT = 1,\n DISCONNECT = 2,\n OPEN = 3,\n QUERY = 4,\n INSTANTIATE = 5,\n}\n\nexport enum LogEvent {\n NONE = 0,\n OK = 1,\n ERROR = 2,\n START = 3,\n RUN = 4,\n CAPTURE = 5,\n}\n\nexport enum LogOrigin {\n NONE = 0,\n WEB_WORKER = 1,\n NODE_WORKER = 2,\n BINDINGS = 3,\n ASYNC_DUCKDB = 4,\n}\n\nexport type LogEntry<O, T, E, V> = {\n readonly timestamp: Date;\n readonly level: LogLevel;\n readonly origin: O;\n readonly topic: T;\n readonly event: E;\n readonly value: V;\n};\n\nexport type ProgressEntry = {\n readonly status: string;\n readonly percentage: string;\n readonly repetitions: string;\n};\n\n/** An execution progress handler */\nexport type ExecutionProgressHandler = (p: ProgressEntry) => void;\n\nexport type LogEntryVariant =\n | LogEntry<LogOrigin.BINDINGS, LogTopic.INSTANTIATE, LogEvent.ERROR, string>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.START, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.OK, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.ERROR, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.CONNECT, LogEvent.OK, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.CONNECT, LogEvent.ERROR, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.DISCONNECT, LogEvent.OK, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.DISCONNECT, LogEvent.ERROR, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.START, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.OK, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.ERROR, void>\n | LogEntry<LogOrigin.ASYNC_DUCKDB, LogTopic.QUERY, LogEvent.RUN, string>;\n\nexport interface Logger {\n log(entry: LogEntryVariant): void;\n}\n\nexport class VoidLogger implements Logger {\n public log(_entry: LogEntryVariant): void {}\n}\n\nexport class ConsoleLogger implements Logger {\n constructor(protected level: LogLevel = LogLevel.INFO) {}\n public log(entry: LogEntryVariant): void {\n if (entry.level >= this.level) {\n console.log(entry);\n }\n }\n}\n\nexport function getLogLevelLabel(level: LogLevel): string {\n switch (level) {\n case LogLevel.NONE:\n return 'NONE';\n case LogLevel.DEBUG:\n return 'DEBUG';\n case LogLevel.INFO:\n return 'INFO';\n case LogLevel.WARNING:\n return 'WARNING';\n case LogLevel.ERROR:\n return 'ERROR';\n default:\n return '?';\n }\n}\n\nexport function getLogEventLabel(event: LogEvent): string {\n switch (event) {\n case LogEvent.NONE:\n return 'NONE';\n case LogEvent.OK:\n return 'OK';\n case LogEvent.ERROR:\n return 'ERROR';\n case LogEvent.START:\n return 'START';\n case LogEvent.RUN:\n return 'RUN';\n case LogEvent.CAPTURE:\n return 'CAPTURE';\n default:\n return '?';\n }\n}\n\nexport function getLogTopicLabel(topic: LogTopic): string {\n switch (topic) {\n case LogTopic.CONNECT:\n return 'CONNECT';\n case LogTopic.DISCONNECT:\n return 'DISCONNECT';\n case LogTopic.INSTANTIATE:\n return 'INSTANTIATE';\n case LogTopic.OPEN:\n return 'OPEN';\n case LogTopic.QUERY:\n return 'QUERY';\n default:\n return '?';\n }\n}\n\nexport function getLogOriginLabel(origin: LogOrigin): string {\n switch (origin) {\n case LogOrigin.NONE:\n return 'NONE';\n case LogOrigin.WEB_WORKER:\n return 'WEB WORKER';\n case LogOrigin.NODE_WORKER:\n return 'NODE WORKER';\n case LogOrigin.BINDINGS:\n return 'DUCKDB BINDINGS';\n case LogOrigin.ASYNC_DUCKDB:\n return 'DUCKDB';\n default:\n return '?';\n }\n}\n", "export enum StatusCode {\n SUCCESS = 0,\n MAX_ARROW_ERROR = 255,\n DUCKDB_WASM_RETRY = 256,\n}\n\nexport function IsArrowBuffer(status: StatusCode): boolean {\n return status <= StatusCode.MAX_ARROW_ERROR;\n}\n\nexport function IsDuckDBWasmRetry(status: StatusCode): boolean {\n return status === StatusCode.DUCKDB_WASM_RETRY;\n}\n", "import * as arrow from 'apache-arrow';\nimport { AsyncDuckDB } from './async_bindings';\nimport { LogLevel, LogTopic, LogOrigin, LogEvent } from '../log';\nimport { ArrowInsertOptions, CSVInsertOptions, JSONInsertOptions } from '../bindings/insert_options';\n\n/** A thin helper to memoize the connection id */\nexport class AsyncDuckDBConnection {\n /** The async duckdb */\n protected readonly _bindings: AsyncDuckDB;\n /** The conn handle */\n protected readonly _conn: number;\n\n constructor(bindings: AsyncDuckDB, conn: number) {\n this._bindings = bindings;\n this._conn = conn;\n }\n\n /** Access the database bindings */\n public get bindings(): AsyncDuckDB {\n return this._bindings;\n }\n\n /** Disconnect from the database */\n public async close(): Promise<void> {\n return this._bindings.disconnect(this._conn);\n }\n\n /** Brave souls may use this function to consume the underlying connection id */\n public useUnsafe<R>(callback: (bindings: AsyncDuckDB, conn: number) => R) {\n return callback(this._bindings, this._conn);\n }\n\n /** Run a query */\n public async query<T extends { [key: string]: arrow.DataType } = any>(text: string): Promise<arrow.Table<T>> {\n this._bindings.logger.log({\n timestamp: new Date(),\n level: LogLevel.INFO,\n origin: LogOrigin.ASYNC_DUCKDB,\n topic: LogTopic.QUERY,\n event: LogEvent.RUN,\n value: text,\n });\n const buffer = await this._bindings.runQuery(this._conn, text);\n const reader = arrow.RecordBatchReader.from<T>(buffer);\n console.assert(reader.isSync(), 'Reader is not sync');\n console.assert(reader.isFile(), 'Reader is not file');\n return new arrow.Table(reader as arrow.RecordBatchFileReader);\n }\n\n /** Send a query */\n public async send<T extends { [key: string]: arrow.DataType } = any>(\n text: string,\n allowStreamResult: boolean = false,\n ): Promise<arrow.AsyncRecordBatchStreamReader<T>> {\n this._bindings.logger.log({\n timestamp: new Date(),\n level: LogLevel.INFO,\n origin: LogOrigin.ASYNC_DUCKDB,\n topic: LogTopic.QUERY,\n event: LogEvent.RUN,\n value: text,\n });\n let header = await this._bindings.startPendingQuery(this._conn, text, allowStreamResult);\n while (header == null) {\n // Avoid infinite loop on detached state\n if (this._bindings.isDetached()) {\n console.error('cannot send a message since the worker is not set!');\n return undefined as any;\n }\n header = await this._bindings.pollPendingQuery(this._conn);\n }\n const iter = new AsyncResultStreamIterator(this._bindings, this._conn, header);\n const reader = await arrow.RecordBatchReader.from<T>(iter);\n console.assert(reader.isAsync());\n console.assert(reader.isStream());\n return reader as unknown as arrow.AsyncRecordBatchStreamReader<T>; // XXX\n }\n\n /** Cancel a query that was sent earlier */\n public async cancelSent(): Promise<boolean> {\n return await this._bindings.cancelPendingQuery(this._conn);\n }\n\n /** Get table names */\n public async getTableNames(query: string): Promise<string[]> {\n return await this._bindings.getTableNames(this._conn, query);\n }\n\n /** Create a prepared statement */\n public async prepare<T extends { [key: string]: arrow.DataType } = any>(\n text: string,\n ): Promise<AsyncPreparedStatement<T>> {\n const stmt = await this._bindings.createPrepared(this._conn, text);\n return new AsyncPreparedStatement<T>(this._bindings, this._conn, stmt);\n }\n\n /** Insert an arrow table */\n public async insertArrowTable(table: arrow.Table, options: ArrowInsertOptions): Promise<void> {\n const buffer = arrow.tableToIPC(table, 'stream');\n await this.insertArrowFromIPCStream(buffer, options);\n }\n /** Insert an arrow table from an ipc stream */\n public async insertArrowFromIPCStream(buffer: Uint8Array, options: ArrowInsertOptions): Promise<void> {\n await this._bindings.insertArrowFromIPCStream(this._conn, buffer, options);\n }\n /** Insert csv file from path */\n public async insertCSVFromPath(text: string, options: CSVInsertOptions): Promise<void> {\n await this._bindings.insertCSVFromPath(this._conn, text, options);\n }\n /** Insert json file from path */\n public async insertJSONFromPath(text: string, options: JSONInsertOptions): Promise<void> {\n await this._bindings.insertJSONFromPath(this._conn, text, options);\n }\n}\n\n/** An async result stream iterator */\nexport class AsyncResultStreamIterator implements AsyncIterable<Uint8Array> {\n /** First chunk? */\n protected _first: boolean;\n /** Reached end of stream? */\n protected _depleted: boolean;\n /** In-flight */\n protected _inFlight: Promise<Uint8Array | null> | null;\n\n constructor(\n protected readonly db: AsyncDuckDB,\n protected readonly conn: number,\n protected readonly header: Uint8Array,\n ) {\n this._first = true;\n this._depleted = false;\n this._inFlight = null;\n }\n\n async next(): Promise<IteratorResult<Uint8Array>> {\n if (this._first) {\n this._first = false;\n return { done: false, value: this.header };\n }\n if (this._depleted) {\n return { done: true, value: null };\n }\n let buffer: Uint8Array | null = null;\n if (this._inFlight != null) {\n buffer = await this._inFlight;\n this._inFlight = null;\n }\n\n while (buffer == null) {\n buffer = await this.db.fetchQueryResults(this.conn);\n }\n\n this._depleted = buffer.length == 0;\n if (!this._depleted) {\n this._inFlight = this.db.fetchQueryResults(this.conn);\n }\n\n return {\n done: this._depleted,\n value: buffer,\n };\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n}\n\n/** A thin helper to bind the prepared statement id */\nexport class AsyncPreparedStatement<T extends { [key: string]: arrow.DataType } = any> {\n /** The bindings */\n protected readonly bindings: AsyncDuckDB;\n /** The connection id */\n protected readonly connectionId: number;\n /** The statement id */\n protected readonly statementId: number;\n\n /** Constructor */\n constructor(bindings: AsyncDuckDB, connectionId: number, statementId: number) {\n this.bindings = bindings;\n this.connectionId = connectionId;\n this.statementId = statementId;\n }\n\n /** Close a prepared statement */\n public async close() {\n await this.bindings.closePrepared(this.connectionId, this.statementId);\n }\n\n /** Run a prepared statement */\n public async query(...params: any[]): Promise<arrow.Table<T>> {\n const buffer = await this.bindings.runPrepared(this.connectionId, this.statementId, params);\n const reader = arrow.RecordBatchReader.from<T>(buffer);\n console.assert(reader.isSync());\n console.assert(reader.isFile());\n return new arrow.Table(reader as arrow.RecordBatchFileReader);\n }\n\n /** Send a prepared statement */\n public async send(...params: any[]): Promise<arrow.AsyncRecordBatchStreamReader<T>> {\n const header = await this.bindings.sendPrepared(this.connectionId, this.statementId, params);\n const iter = new AsyncResultStreamIterator(this.bindings, this.connectionId, header);\n const reader = await arrow.RecordBatchReader.from<T>(iter);\n console.assert(reader.isAsync());\n console.assert(reader.isStream());\n return reader as unknown as arrow.AsyncRecordBatchStreamReader<T>; // XXX\n }\n}\n", "import { CSVInsertOptions, JSONInsertOptions, ArrowInsertOptions } from '../bindings/insert_options';\nimport { LogEntryVariant, ProgressEntry } from '../log';\nimport { ScriptTokens } from '../bindings/tokens';\nimport { FileStatistics } from '../bindings/file_stats';\nimport { DuckDBConfig } from '../bindings/config';\nimport { WebFile } from '../bindings/web_file';\nimport { InstantiationProgress } from '../bindings/progress';\nimport { DuckDBDataProtocol } from '../bindings';\n\nexport type ConnectionID = number;\nexport type StatementID = number;\n\nexport enum WorkerRequestType {\n CANCEL_PENDING_QUERY = 'CANCEL_PENDING_QUERY',\n CLOSE_PREPARED = 'CLOSE_PREPARED',\n COLLECT_FILE_STATISTICS = 'COLLECT_FILE_STATISTICS',\n REGISTER_OPFS_FILE_NAME = 'REGISTER_OPFS_FILE_NAME',\n CONNECT = 'CONNECT',\n COPY_FILE_TO_BUFFER = 'COPY_FILE_TO_BUFFER',\n COPY_FILE_TO_PATH = 'COPY_FILE_TO_PATH',\n CREATE_PREPARED = 'CREATE_PREPARED',\n DISCONNECT = 'DISCONNECT',\n DROP_FILE = 'DROP_FILE',\n DROP_FILES = 'DROP_FILES',\n EXPORT_FILE_STATISTICS = 'EXPORT_FILE_STATISTICS',\n FETCH_QUERY_RESULTS = 'FETCH_QUERY_RESULTS',\n FLUSH_FILES = 'FLUSH_FILES',\n GET_FEATURE_FLAGS = 'GET_FEATURE_FLAGS',\n GET_TABLE_NAMES = 'GET_TABLE_NAMES',\n GET_VERSION = 'GET_VERSION',\n GLOB_FILE_INFOS = 'GLOB_FILE_INFOS',\n INSERT_ARROW_FROM_IPC_STREAM = 'INSERT_ARROW_FROM_IPC_STREAM',\n INSERT_CSV_FROM_PATH = 'IMPORT_CSV_FROM_PATH',\n INSERT_JSON_FROM_PATH = 'IMPORT_JSON_FROM_PATH',\n INSTANTIATE = 'INSTANTIATE',\n OPEN = 'OPEN',\n PING = 'PING',\n POLL_PENDING_QUERY = 'POLL_PENDING_QUERY',\n REGISTER_FILE_BUFFER = 'REGISTER_FILE_BUFFER',\n REGISTER_FILE_HANDLE = 'REGISTER_FILE_HANDLE',\n REGISTER_FILE_URL = 'REGISTER_FILE_URL',\n RESET = 'RESET',\n RUN_PREPARED = 'RUN_PREPARED',\n RUN_QUERY = 'RUN_QUERY',\n SEND_PREPARED = 'SEND_PREPARED',\n START_PENDING_QUERY = 'START_PENDING_QUERY',\n TOKENIZE = 'TOKENIZE',\n}\n\nexport enum WorkerResponseType {\n CONNECTION_INFO = 'CONNECTION_INFO',\n ERROR = 'ERROR',\n FEATURE_FLAGS = 'FEATURE_FLAGS',\n FILE_BUFFER = 'FILE_BUFFER',\n FILE_INFOS = 'FILE_INFOS',\n FILE_SIZE = 'FILE_SIZE',\n FILE_STATISTICS = 'FILE_STATISTICS',\n INSTANTIATE_PROGRESS = 'INSTANTIATE_PROGRESS',\n LOG = 'LOG',\n PROGRESS_UPDATE = 'PROGRESS_UPDATE',\n OK = 'OK',\n PREPARED_STATEMENT_ID = 'PREPARED_STATEMENT_ID',\n QUERY_PLAN = 'QUERY_PLAN',\n QUERY_RESULT = 'QUERY_RESULT',\n QUERY_RESULT_CHUNK = 'QUERY_RESULT_CHUNK',\n QUERY_RESULT_HEADER = 'QUERY_RESULT_HEADER',\n QUERY_RESULT_HEADER_OR_NULL = 'QUERY_RESULT_HEADER_OR_NULL',\n REGISTERED_FILE = 'REGISTERED_FILE',\n SCRIPT_TOKENS = 'SCRIPT_TOKENS',\n SUCCESS = 'SUCCESS',\n TABLE_NAMES = 'TABLE_NAMES',\n VERSION_STRING = 'VERSION_STRING',\n}\n\nexport type WorkerRequest<T, P> = {\n readonly messageId: number;\n readonly type: T;\n readonly data: P;\n};\n\nexport type WorkerResponse<T, P> = {\n readonly messageId: number;\n readonly requestId: number;\n readonly type: T;\n readonly data: P;\n};\n\nexport type WorkerTaskReturnType<T extends WorkerTaskVariant> = T extends WorkerTask<any, any, infer P> ? P : never;\n\nexport class WorkerTask<T, D, P> {\n readonly type: T;\n readonly data: D;\n promise: Promise<P>;\n promiseResolver: (value: P | PromiseLike<P>) => void = () => {};\n promiseRejecter: (value: any) => void = () => {};\n\n constructor(type: T, data: D) {\n this.type = type;\n this.data = data;\n this.promise = new Promise<P>(\n (resolve: (value: P | PromiseLike<P>) => void, reject: (reason?: void) => void) => {\n this.promiseResolver = resolve;\n this.promiseRejecter = reject;\n },\n );\n }\n}\n\nexport type WorkerRequestVariant =\n | WorkerRequest<WorkerRequestType.CLOSE_PREPARED, [ConnectionID, StatementID]>\n | WorkerRequest<WorkerRequestType.CANCEL_PENDING_QUERY, number>\n | WorkerRequest<WorkerRequestType.COLLECT_FILE_STATISTICS, [string, boolean]>\n | WorkerRequest<WorkerRequestType.REGISTER_OPFS_FILE_NAME, [string]>\n | WorkerRequest<WorkerRequestType.CONNECT, null>\n | WorkerRequest<WorkerRequestType.COPY_FILE_TO_BUFFER, string>\n | WorkerRequest<WorkerRequestType.COPY_FILE_TO_PATH, [string, string]>\n | WorkerRequest<WorkerRequestType.CREATE_PREPARED, [ConnectionID, string]>\n | WorkerRequest<WorkerRequestType.DISCONNECT, number>\n | WorkerRequest<WorkerRequestType.DROP_FILE, string>\n | WorkerRequest<WorkerRequestType.DROP_FILES, string[] | undefined>\n | WorkerRequest<WorkerRequestType.EXPORT_FILE_STATISTICS, string>\n | WorkerRequest<WorkerRequestType.FETCH_QUERY_RESULTS, number>\n | WorkerRequest<WorkerRequestType.FLUSH_FILES, null>\n | WorkerRequest<WorkerRequestType.GET_FEATURE_FLAGS, null>\n | WorkerRequest<WorkerRequestType.GET_TABLE_NAMES, [number, string]>\n | WorkerRequest<WorkerRequestType.GET_VERSION, null>\n | WorkerRequest<WorkerRequestType.GLOB_FILE_INFOS, string>\n | WorkerRequest<\n WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM,\n [number, Uint8Array, ArrowInsertOptions | undefined]\n >\n | WorkerRequest<WorkerRequestType.INSERT_CSV_FROM_PATH, [number, string, CSVInsertOptions]>\n | WorkerRequest<WorkerRequestType.INSERT_JSON_FROM_PATH, [number, string, JSONInsertOptions]>\n | WorkerRequest<WorkerRequestType.INSTANTIATE, [string, string | null]>\n | WorkerRequest<WorkerRequestType.OPEN, DuckDBConfig>\n | WorkerRequest<WorkerRequestType.PING, null>\n | WorkerRequest<WorkerRequestType.POLL_PENDING_QUERY, number>\n | WorkerRequest<WorkerRequestType.REGISTER_FILE_BUFFER, [string, Uint8Array]>\n | WorkerRequest<WorkerRequestType.REGISTER_FILE_HANDLE, [string, any, DuckDBDataProtocol, boolean]>\n | WorkerRequest<WorkerRequestType.REGISTER_FILE_URL, [string, string, DuckDBDataProtocol, boolean]>\n | WorkerRequest<WorkerRequestType.RESET, null>\n | WorkerRequest<WorkerRequestType.RUN_PREPARED, [number, number, any[]]>\n | WorkerRequest<WorkerRequestType.RUN_QUERY, [number, string]>\n | WorkerRequest<WorkerRequestType.SEND_PREPARED, [number, number, any[]]>\n | WorkerRequest<WorkerRequestType.START_PENDING_QUERY, [number, string, boolean]>\n | WorkerRequest<WorkerRequestType.TOKENIZE, string>;\n\nexport type WorkerResponseVariant =\n | WorkerResponse<WorkerResponseType.CONNECTION_INFO, number>\n | WorkerResponse<WorkerResponseType.ERROR, any>\n | WorkerResponse<WorkerResponseType.FEATURE_FLAGS, number>\n | WorkerResponse<WorkerResponseType.FILE_BUFFER, Uint8Array>\n | WorkerResponse<WorkerResponseType.FILE_INFOS, WebFile[]>\n | WorkerResponse<WorkerResponseType.FILE_SIZE, number>\n | WorkerResponse<WorkerResponseType.FILE_STATISTICS, FileStatistics>\n | WorkerResponse<WorkerResponseType.INSTANTIATE_PROGRESS, InstantiationProgress>\n | WorkerResponse<WorkerResponseType.LOG, LogEntryVariant>\n | WorkerResponse<WorkerResponseType.PROGRESS_UPDATE, ProgressEntry>\n | WorkerResponse<WorkerResponseType.OK, null>\n | WorkerResponse<WorkerResponseType.PREPARED_STATEMENT_ID, number>\n | WorkerResponse<WorkerResponseType.QUERY_PLAN, Uint8Array>\n | WorkerResponse<WorkerResponseType.QUERY_RESULT, Uint8Array>\n | WorkerResponse<WorkerResponseType.QUERY_RESULT_CHUNK, Uint8Array | null>\n | WorkerResponse<WorkerResponseType.QUERY_RESULT_HEADER, Uint8Array>\n | WorkerResponse<WorkerResponseType.QUERY_RESULT_HEADER_OR_NULL, Uint8Array | null>\n | WorkerResponse<WorkerResponseType.SCRIPT_TOKENS, ScriptTokens>\n | WorkerResponse<WorkerResponseType.SUCCESS, boolean>\n | WorkerResponse<WorkerResponseType.TABLE_NAMES, string[]>\n | WorkerResponse<WorkerResponseType.VERSION_STRING, string>;\n\nexport type WorkerTaskVariant =\n | WorkerTask<WorkerRequestType.COLLECT_FILE_STATISTICS, [string, boolean], null>\n | WorkerTask<WorkerRequestType.REGISTER_OPFS_FILE_NAME, [string], null>\n | WorkerTask<WorkerRequestType.CLOSE_PREPARED, [number, number], null>\n | WorkerTask<WorkerRequestType.CONNECT, null, ConnectionID>\n | WorkerTask<WorkerRequestType.COPY_FILE_TO_BUFFER, string, Uint8Array>\n | WorkerTask<WorkerRequestType.COPY_FILE_TO_PATH, [string, string], null>\n | WorkerTask<WorkerRequestType.CREATE_PREPARED, [number, string], number>\n | WorkerTask<WorkerRequestType.DISCONNECT, ConnectionID, null>\n | WorkerTask<WorkerRequestType.DROP_FILE, string, null>\n | WorkerTask<WorkerRequestType.DROP_FILES, string[] | undefined, null>\n | WorkerTask<WorkerRequestType.EXPORT_FILE_STATISTICS, string, FileStatistics>\n | WorkerTask<WorkerRequestType.FETCH_QUERY_RESULTS, ConnectionID, Uint8Array | null>\n | WorkerTask<WorkerRequestType.FLUSH_FILES, null, null>\n | WorkerTask<WorkerRequestType.GET_FEATURE_FLAGS, null, number>\n | WorkerTask<WorkerRequestType.GET_TABLE_NAMES, [number, string], string[]>\n | WorkerTask<WorkerRequestType.GET_VERSION, null, string>\n | WorkerTask<\n WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM,\n [number, Uint8Array, ArrowInsertOptions | undefined],\n null\n >\n | WorkerTask<WorkerRequestType.INSERT_CSV_FROM_PATH, [number, string, CSVInsertOptions], null>\n | WorkerTask<WorkerRequestType.INSERT_JSON_FROM_PATH, [number, string, JSONInsertOptions], null>\n | WorkerTask<WorkerRequestType.INSTANTIATE, [string, string | null], null>\n | WorkerTask<WorkerRequestType.OPEN, DuckDBConfig, null>\n | WorkerTask<WorkerRequestType.PING, null, null>\n | WorkerTask<WorkerRequestType.REGISTER_FILE_BUFFER, [string, Uint8Array], null>\n | WorkerTask<WorkerRequestType.REGISTER_FILE_HANDLE, [string, any, DuckDBDataProtocol, boolean], null>\n | WorkerTask<WorkerRequestType.REGISTER_FILE_URL, [string, string, DuckDBDataProtocol, boolean], null>\n | WorkerTask<WorkerRequestType.GLOB_FILE_INFOS, string, WebFile[]>\n | WorkerTask<WorkerRequestType.RESET, null, null>\n | WorkerTask<WorkerRequestType.RUN_PREPARED, [number, number, any[]], Uint8Array>\n | WorkerTask<WorkerRequestType.RUN_QUERY, [ConnectionID, string], Uint8Array>\n | WorkerTask<WorkerRequestType.SEND_PREPARED, [number, number, any[]], Uint8Array>\n | WorkerTask<WorkerRequestType.START_PENDING_QUERY, [ConnectionID, string, boolean], Uint8Array | null>\n | WorkerTask<WorkerRequestType.POLL_PENDING_QUERY, ConnectionID, Uint8Array | null>\n | WorkerTask<WorkerRequestType.CANCEL_PENDING_QUERY, ConnectionID, boolean>\n | WorkerTask<WorkerRequestType.TOKENIZE, string, ScriptTokens>;\n", "import * as arrow from 'apache-arrow';\n\nexport interface SQLType {\n /// The sql type\n sqlType: string;\n /// Is nullable?\n nullable?: boolean;\n /// Decimal precision\n precision?: number;\n /// Decimal scaling\n scale?: number;\n /// Timezone\n timezone?: string;\n /// Byte width (FixedSizeBinary)\n byteWidth?: number;\n /// Key type\n keyType?: SQLType;\n /// Value type\n valueType?: SQLType;\n /// Fields\n fields?: SQLField[];\n}\n\nexport function arrowToSQLType(type: arrow.DataType): SQLType {\n switch (type.typeId) {\n case arrow.Type.Binary:\n return { sqlType: 'binary' };\n case arrow.Type.Bool:\n return { sqlType: 'bool' };\n case arrow.Type.Date:\n return { sqlType: 'date' };\n case arrow.Type.DateDay:\n return { sqlType: 'date32[d]' };\n case arrow.Type.DateMillisecond:\n return { sqlType: 'date64[ms]' };\n case arrow.Type.Decimal: {\n const dec = type as arrow.Decimal;\n return { sqlType: 'decimal', precision: dec.precision, scale: dec.scale };\n }\n case arrow.Type.Float:\n return { sqlType: 'float' };\n case arrow.Type.Float16:\n return { sqlType: 'float16' };\n case arrow.Type.Float32:\n return { sqlType: 'float32' };\n case arrow.Type.Float64:\n return { sqlType: 'float64' };\n case arrow.Type.Int:\n return { sqlType: 'int32' };\n case arrow.Type.Int16:\n return { sqlType: 'int16' };\n case arrow.Type.Int32:\n return { sqlType: 'int32' };\n case arrow.Type.Int64:\n return { sqlType: 'int64' };\n case arrow.Type.Uint16:\n return { sqlType: 'uint16' };\n case arrow.Type.Uint32:\n return { sqlType: 'uint32' };\n case arrow.Type.Uint64:\n return { sqlType: 'uint64' };\n case arrow.Type.Uint8:\n return { sqlType: 'uint8' };\n case arrow.Type.IntervalDayTime:\n return { sqlType: 'interval[dt]' };\n case arrow.Type.IntervalYearMonth:\n return { sqlType: 'interval[m]' };\n case arrow.Type.List: {\n const list = type as arrow.List;\n return {\n sqlType: 'list',\n valueType: arrowToSQLType(list.valueType),\n };\n }\n case arrow.Type.FixedSizeBinary: {\n const bin = type as arrow.FixedSizeBinary;\n return { sqlType: 'fixedsizebinary', byteWidth: bin.byteWidth };\n }\n case arrow.Type.Null:\n return { sqlType: 'null' };\n case arrow.Type.Utf8:\n return { sqlType: 'utf8' };\n case arrow.Type.Struct: {\n const struct_ = type as arrow.Struct;\n return {\n sqlType: 'struct',\n fields: struct_.children.map(c => arrowToSQLField(c.name, c.type)),\n };\n }\n case arrow.Type.Map: {\n const map_ = type as arrow.Map_;\n return {\n sqlType: 'map',\n keyType: arrowToSQLType(map_.keyType),\n valueType: arrowToSQLType(map_.valueType),\n };\n }\n case arrow.Type.Time:\n return { sqlType: 'time[s]' };\n case arrow.Type.TimeMicrosecond:\n return { sqlType: 'time[us]' };\n case arrow.Type.TimeMillisecond:\n return { sqlType: 'time[ms]' };\n case arrow.Type.TimeNanosecond:\n return { sqlType: 'time[ns]' };\n case arrow.Type.TimeSecond:\n return { sqlType: 'time[s]' };\n case arrow.Type.Timestamp: {\n const ts = type as arrow.Timestamp;\n return { sqlType: 'timestamp', timezone: ts.timezone || undefined };\n }\n case arrow.Type.TimestampSecond: {\n const ts = type as arrow.TimestampSecond;\n return { sqlType: 'timestamp[s]', timezone: ts.timezone || undefined };\n }\n case arrow.Type.TimestampMicrosecond: {\n const ts = type as arrow.TimestampMicrosecond;\n return { sqlType: 'timestamp[us]', timezone: ts.timezone || undefined };\n }\n case arrow.Type.TimestampNanosecond: {\n const ts = type as arrow.TimestampNanosecond;\n return { sqlType: 'timestamp[ns]', timezone: ts.timezone || undefined };\n }\n case arrow.Type.TimestampMillisecond: {\n const ts = type as arrow.TimestampMillisecond;\n return { sqlType: 'timestamp[ms]', timezone: ts.timezone || undefined };\n }\n }\n throw new Error(`unsupported arrow type: ${type.toString()}`);\n}\n\nexport type SQLField = SQLType & { name: string };\n\nexport function arrowToSQLField(name: string, type: arrow.DataType): SQLField {\n const t = arrowToSQLType(type) as SQLField;\n t.name = name;\n return t;\n}\n", "export const REGEX_OPFS_FILE = /'(opfs:\\/\\/\\S*?)'/g;\nexport const REGEX_OPFS_PROTOCOL = /(opfs:\\/\\/\\S*?)/g;\n\nexport function isOPFSProtocol(path: string): boolean {\n return path.search(REGEX_OPFS_PROTOCOL) > -1;\n}\n\nexport function searchOPFSFiles(text: string) {\n return [...text.matchAll(REGEX_OPFS_FILE)].map(match => match[1]);\n}", "import {\n WorkerRequestType,\n WorkerResponseType,\n WorkerResponseVariant,\n WorkerTaskVariant,\n WorkerTask,\n ConnectionID,\n WorkerTaskReturnType,\n} from './worker_request';\nimport { AsyncDuckDBBindings } from './async_bindings_interface';\nimport { Logger } from '../log';\nimport { AsyncDuckDBConnection } from './async_connection';\nimport { CSVInsertOptions, JSONInsertOptions, ArrowInsertOptions } from '../bindings/insert_options';\nimport { ScriptTokens } from '../bindings/tokens';\nimport { FileStatistics } from '../bindings/file_stats';\nimport { DuckDBConfig } from '../bindings/config';\nimport { InstantiationProgress } from '../bindings/progress';\nimport { arrowToSQLField } from '../json_typedef';\nimport { WebFile } from '../bindings/web_file';\nimport { DuckDBDataProtocol } from '../bindings';\nimport { searchOPFSFiles, isOPFSProtocol } from \"../utils/opfs_util\";\nimport { ProgressEntry } from '../log';\n\nconst TEXT_ENCODER = new TextEncoder();\n\nexport class AsyncDuckDB implements AsyncDuckDBBindings {\n /** The message handler */\n protected readonly _onMessageHandler: (event: MessageEvent) => void;\n /** The error handler */\n protected readonly _onErrorHandler: (event: ErrorEvent) => void;\n /** The close handler */\n protected readonly _onCloseHandler: () => void;\n\n /** Instantiate the module */\n protected _onInstantiationProgress: ((p: InstantiationProgress) => void)[] = [];\n\n /** Progress callbacks */\n protected _onExecutionProgress: ((p: ProgressEntry) => void)[] = [];\n\n /** The logger */\n protected readonly _logger: Logger;\n /** The worker */\n protected _worker: Worker | null = null;\n /** The promise for the worker shutdown */\n protected _workerShutdownPromise: Promise<null> | null = null;\n /** Make the worker as terminated */\n protected _workerShutdownResolver: (value: PromiseLike<null> | null) => void = () => {};\n\n /** The next message id */\n protected _nextMessageId = 0;\n /** The pending requests */\n protected _pendingRequests: Map<number, WorkerTaskVariant> = new Map();\n /** The DuckDBConfig */\n protected _config: DuckDBConfig = {};\n\n constructor(logger: Logger, worker: Worker | null = null) {\n this._logger = logger;\n this._onMessageHandler = this.onMessage.bind(this);\n this._onErrorHandler = this.onError.bind(this);\n this._onCloseHandler = this.onClose.bind(this);\n if (worker != null) this.attach(worker);\n }\n\n /** Get the logger */\n public get logger(): Logger {\n return this._logger;\n }\n\n /** Get the logger */\n public get config(): DuckDBConfig {\n return this._config;\n }\n\n /** Attach to worker */\n protected attach(worker: Worker): void {\n this._worker = worker;\n this._worker.addEventListener('message', this._onMessageHandler);\n this._worker.addEventListener('error', this._onErrorHandler);\n this._worker.addEventListener('close', this._onCloseHandler);\n this._workerShutdownPromise = new Promise<null>(\n (resolve: (value: PromiseLike<null> | null) => void, _reject: (reason?: void) => void) => {\n this._workerShutdownResolver = resolve;\n },\n );\n }\n\n /** Detach from worker */\n public detach(): void {\n if (!this._worker) return;\n this._worker.removeEventListener('message', this._onMessageHandler);\n this._worker.removeEventListener('error', this._onErrorHandler);\n this._worker.removeEventListener('close', this._onCloseHandler);\n this._worker = null;\n this._workerShutdownResolver(null);\n this._workerShutdownPromise = null;\n this._workerShutdownResolver = () => {};\n }\n\n /** Kill the worker */\n public async terminate(): Promise<void> {\n if (!this._worker) return;\n this._worker.terminate();\n //await this._workerShutdownPromise; TODO deadlocking in karma?\n this._worker = null;\n this._workerShutdownPromise = null;\n this._workerShutdownResolver = () => {};\n }\n\n /** Post a task */\n protected async postTask<W extends WorkerTaskVariant>(\n task: W,\n transfer: ArrayBuffer[] = [],\n ): Promise<WorkerTaskReturnType<W>> {\n if (!this._worker) {\n console.error('cannot send a message since the worker is not set!:' + task.type+\",\" + task.data);\n return undefined as any;\n }\n const mid = this._nextMessageId++;\n this._pendingRequests.set(mid, task);\n this._worker.postMessage(\n {\n messageId: mid,\n type: task.type,\n data: task.data,\n },\n transfer,\n );\n return (await task.promise) as WorkerTaskReturnType<W>;\n }\n\n /** Received a message */\n protected onMessage(event: MessageEvent): void {\n // Unassociated responses?\n const response = event.data as WorkerResponseVariant;\n switch (response.type) {\n // Request failed?\n case WorkerResponseType.PROGRESS_UPDATE: {\n for (const p of this._onExecutionProgress) {\n p(response.data);\n }\n return;\n }\n case WorkerResponseType.LOG: {\n this._logger.log(response.data);\n return;\n }\n // Call progress callback\n case WorkerResponseType.INSTANTIATE_PROGRESS: {\n for (const p of this._onInstantiationProgress) {\n p(response.data);\n }\n return;\n }\n }\n\n // Get associated task\n const task = this._pendingRequests.get(response.requestId);\n if (!task) {\n console.warn(`unassociated response: [${response.requestId}, ${response.type.toString()}]`);\n return;\n }\n this._pendingRequests.delete(response.requestId);\n\n // Request failed?\n if (response.type == WorkerResponseType.ERROR) {\n // Workaround for Firefox not being able to perform structured-clone on Native Errors\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1556604\n const e = new Error(response.data.message);\n e.name = response.data.name;\n if (Object.getOwnPropertyDescriptor(e, 'stack')?.writable) {\n e.stack = response.data.stack;\n }\n task.promiseRejecter(e);\n return;\n }\n\n // Otherwise differentiate between the tasks first\n switch (task.type) {\n case WorkerRequestType.CLOSE_PREPARED:\n case WorkerRequestType.COLLECT_FILE_STATISTICS:\n case WorkerRequestType.REGISTER_OPFS_FILE_NAME:\n case WorkerRequestType.COPY_FILE_TO_PATH:\n case WorkerRequestType.DISCONNECT:\n case WorkerRequestType.DROP_FILE:\n case WorkerRequestType.DROP_FILES:\n case WorkerRequestType.FLUSH_FILES:\n case WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM:\n case WorkerRequestType.INSERT_CSV_FROM_PATH:\n case WorkerRequestType.INSERT_JSON_FROM_PATH:\n case WorkerRequestType.OPEN:\n case WorkerRequestType.PING:\n case WorkerRequestType.REGISTER_FILE_BUFFER:\n case WorkerRequestType.REGISTER_FILE_HANDLE:\n case WorkerRequestType.REGISTER_FILE_URL:\n case WorkerRequestType.RESET:\n if (response.type == WorkerResponseType.OK) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.INSTANTIATE:\n this._onInstantiationProgress = [];\n if (response.type == WorkerResponseType.OK) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.GLOB_FILE_INFOS:\n if (response.type == WorkerResponseType.FILE_INFOS) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.GET_VERSION:\n if (response.type == WorkerResponseType.VERSION_STRING) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.GET_FEATURE_FLAGS:\n if (response.type == WorkerResponseType.FEATURE_FLAGS) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.GET_TABLE_NAMES:\n if (response.type == WorkerResponseType.TABLE_NAMES) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.TOKENIZE:\n if (response.type == WorkerResponseType.SCRIPT_TOKENS) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.COPY_FILE_TO_BUFFER:\n if (response.type == WorkerResponseType.FILE_BUFFER) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.EXPORT_FILE_STATISTICS:\n if (response.type == WorkerResponseType.FILE_STATISTICS) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.CONNECT:\n if (response.type == WorkerResponseType.CONNECTION_INFO) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.RUN_PREPARED:\n case WorkerRequestType.RUN_QUERY:\n if (response.type == WorkerResponseType.QUERY_RESULT) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.SEND_PREPARED:\n if (response.type == WorkerResponseType.QUERY_RESULT_HEADER) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.START_PENDING_QUERY:\n if (response.type == WorkerResponseType.QUERY_RESULT_HEADER_OR_NULL) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.POLL_PENDING_QUERY:\n if (response.type == WorkerResponseType.QUERY_RESULT_HEADER_OR_NULL) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.CANCEL_PENDING_QUERY:\n this._onInstantiationProgress = [];\n if (response.type == WorkerResponseType.SUCCESS) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.FETCH_QUERY_RESULTS:\n if (response.type == WorkerResponseType.QUERY_RESULT_CHUNK) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.CREATE_PREPARED:\n if (response.type == WorkerResponseType.PREPARED_STATEMENT_ID) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n }\n task.promiseRejecter(new Error(`unexpected response type: ${response.type.toString()}`));\n }\n\n /** Received an error */\n protected onError(event: ErrorEvent): void {\n console.error(event);\n console.error(`error in duckdb worker: ${event.message}`);\n this._pendingRequests.clear();\n }\n\n /** The worker was closed */\n protected onClose(): void {\n this._workerShutdownResolver(null);\n if (this._pendingRequests.size != 0) {\n console.warn(`worker terminated with ${this._pendingRequests.size} pending requests`);\n return;\n }\n this._pendingRequests.clear();\n }\n\n /** Is in detached state, no worker defined */\n public isDetached(): boolean {\n return !this._worker;\n }\n\n /** Reset the duckdb */\n public async reset(): Promise<null> {\n const task = new WorkerTask<WorkerRequestType.RESET, null, null>(WorkerRequestType.RESET, null);\n return await this.postTask(task);\n }\n\n /** Ping the worker thread */\n public async ping(): Promise<any> {\n const task = new WorkerTask<WorkerRequestType.PING, null, null>(WorkerRequestType.PING, null);\n await this.postTask(task);\n }\n /** Try to drop a file */\n public async dropFile(name: string): Promise<null> {\n const task = new WorkerTask<WorkerRequestType.DROP_FILE, string, null>(WorkerRequestType.DROP_FILE, name);\n return await this.postTask(task);\n }\n /** Try to drop files */\n public async dropFiles(names?: string[]): Promise<null> {\n const task = new WorkerTask<WorkerRequestType.DROP_FILES, string[] | undefined, null>(WorkerRequestType.DROP_FILES, names);\n return await this.postTask(task);\n }\n /** Flush all files */\n public async flushFiles(): Promise<null> {\n const task = new WorkerTask<WorkerRequestType.FLUSH_FILES, null, null>(WorkerRequestType.FLUSH_FILES, null);\n return await this.postTask(task);\n }\n\n /** Open the database */\n public async instantiate(\n mainModuleURL: string,\n pthreadWorkerURL: string | null = null,\n progress: (progress: InstantiationProgress) => void = _p => {},\n ): Promise<null> {\n this._onInstantiationProgress.push(progress);\n const task = new WorkerTask<WorkerRequestType.INSTANTIATE, [string, string | null], null>(\n WorkerRequestType.INSTANTIATE,\n [mainModuleURL, pthreadWorkerURL],\n );\n return await this.postTask(task);\n }\n\n /** Get the version */\n public async getVersion(): Promise<string> {\n const task = new WorkerTask<WorkerRequestType.GET_VERSION, null, string>(WorkerRequestType.GET_VERSION, null);\n const version = await this.postTask(task);\n return version;\n }\n\n /** Get the feature flags */\n public async getFeatureFlags(): Promise<number> {\n const task = new WorkerTask<WorkerRequestType.GET_FEATURE_FLAGS, null, number>(\n WorkerRequestType.GET_FEATURE_FLAGS,\n null,\n );\n const feature = await this.postTask(task);\n return feature;\n }\n\n /** Open a new database */\n public async open(config: DuckDBConfig): Promise<void> {\n this._config = config;\n const task = new WorkerTask<WorkerRequestType.OPEN, DuckDBConfig, null>(WorkerRequestType.OPEN, config);\n await this.postTask(task);\n }\n\n /** Tokenize a script text */\n public async tokenize(text: string): Promise<ScriptTokens> {\n const task = new WorkerTask<WorkerRequestType.TOKENIZE, string, ScriptTokens>(WorkerRequestType.TOKENIZE, text);\n const tokens = await this.postTask(task);\n return tokens;\n }\n\n /** Connect to the database */\n public async connectInternal(): Promise<number> {\n const task = new WorkerTask<WorkerRequestType.CONNECT, null, ConnectionID>(WorkerRequestType.CONNECT, null);\n return await this.postTask(task);\n }\n\n /** Connect to the database */\n public async connect(): Promise<AsyncDuckDBConnection> {\n const cid = await this.connectInternal();\n return new AsyncDuckDBConnection(this, cid);\n }\n\n /** Disconnect from the database */\n public async disconnect(conn: ConnectionID): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.DISCONNECT, ConnectionID, null>(\n WorkerRequestType.DISCONNECT,\n conn,\n );\n await this.postTask(task);\n }\n\n /** Run a query */\n public async runQuery(conn: ConnectionID, text: string): Promise<Uint8Array> {\n if( this.shouldOPFSFileHandling() ){\n const files = await this.registerOPFSFileFromSQL(text);\n try {\n return await this._runQueryAsync(conn, text);\n } finally {\n if( files.length > 0 ){\n await this.dropFiles(files);\n }\n }\n } else {\n return await this._runQueryAsync(conn, text);\n }\n }\n\n private async _runQueryAsync(conn: ConnectionID, text: string): Promise<Uint8Array> {\n const task = new WorkerTask<WorkerRequestType.RUN_QUERY, [ConnectionID, string], Uint8Array>(\n WorkerRequestType.RUN_QUERY,\n [conn, text],\n );\n return await this.postTask(task);\n }\n\n /** Start a pending query */\n public async startPendingQuery(\n conn: ConnectionID,\n text: string,\n allowStreamResult: boolean = false,\n ): Promise<Uint8Array | null> {\n if( this.shouldOPFSFileHandling() ){\n const files = await this.registerOPFSFileFromSQL(text);\n try {\n return await this._startPendingQueryAsync(conn, text, allowStreamResult);\n } finally {\n if( files.length > 0 ){\n await this.dropFiles(files);\n }\n }\n } else {\n return await this._startPendingQueryAsync(conn, text, allowStreamResult);\n }\n }\n\n private async _startPendingQueryAsync(\n conn: ConnectionID,\n text: string,\n allowStreamResult: boolean = false,\n ): Promise<Uint8Array | null> {\n const task = new WorkerTask<\n WorkerRequestType.START_PENDING_QUERY,\n [ConnectionID, string, boolean],\n Uint8Array | null\n >(WorkerRequestType.START_PENDING_QUERY, [conn, text, allowStreamResult]);\n return await this.postTask(task);\n }\n\n /** Poll a pending query */\n public async pollPendingQuery(conn: ConnectionID): Promise<Uint8Array | null> {\n const task = new WorkerTask<WorkerRequestType.POLL_PENDING_QUERY, ConnectionID, Uint8Array | null>(\n WorkerRequestType.POLL_PENDING_QUERY,\n conn,\n );\n return await this.postTask(task);\n }\n /** Cancel a pending query */\n public async cancelPendingQuery(conn: ConnectionID): Promise<boolean> {\n const task = new WorkerTask<WorkerRequestType.CANCEL_PENDING_QUERY, ConnectionID, boolean>(\n WorkerRequestType.CANCEL_PENDING_QUERY,\n conn,\n );\n return await this.postTask(task);\n }\n\n /** Fetch query results */\n public async fetchQueryResults(conn: ConnectionID): Promise<Uint8Array | null> {\n const task = new WorkerTask<WorkerRequestType.FETCH_QUERY_RESULTS, ConnectionID, Uint8Array | null>(\n WorkerRequestType.FETCH_QUERY_RESULTS,\n conn,\n );\n return await this.postTask(task);\n }\n\n /** Get table names */\n public async getTableNames(conn: number, text: string): Promise<string[]> {\n const task = new WorkerTask<WorkerRequestType.GET_TABLE_NAMES, [number, string], string[]>(\n WorkerRequestType.GET_TABLE_NAMES,\n [conn, text],\n );\n return await this.postTask(task);\n }\n\n /** Prepare a statement and return its identifier */\n public async createPrepared(conn: number, text: string): Promise<number> {\n const task = new WorkerTask<WorkerRequestType.CREATE_PREPARED, [number, string], number>(\n WorkerRequestType.CREATE_PREPARED,\n [conn, text],\n );\n return await this.postTask(task);\n }\n /** Close a prepared statement */\n public async closePrepared(conn: number, statement: number): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.CLOSE_PREPARED, [number, number], null>(\n WorkerRequestType.CLOSE_PREPARED,\n [conn, statement],\n );\n await this.postTask(task);\n }\n /** Execute a prepared statement and return the full result */\n public async runPrepared(conn: number, statement: number, params: any[]): Promise<Uint8Array> {\n const task = new WorkerTask<WorkerRequestType.RUN_PREPARED, [ConnectionID, number, any[]], Uint8Array>(\n WorkerRequestType.RUN_PREPARED,\n [conn, statement, params],\n );\n return await this.postTask(task);\n }\n /** Execute a prepared statement and stream the result */\n public async sendPrepared(conn: number, statement: number, params: any[]): Promise<Uint8Array> {\n const task = new WorkerTask<WorkerRequestType.SEND_PREPARED, [ConnectionID, number, any[]], Uint8Array>(\n WorkerRequestType.SEND_PREPARED,\n [conn, statement, params],\n );\n return await this.postTask(task);\n }\n /** Glob file infos */\n public async globFiles(path: string): Promise<WebFile[]> {\n const task = new WorkerTask<WorkerRequestType.GLOB_FILE_INFOS, string, WebFile[]>(\n WorkerRequestType.GLOB_FILE_INFOS,\n path,\n );\n return await this.postTask(task);\n }\n /** Register file text */\n public async registerFileText(name: string, text: string): Promise<void> {\n const buffer = TEXT_ENCODER.encode(text);\n await this.registerFileBuffer(name, buffer);\n }\n /** Register a file path. */\n public async registerFileURL(\n name: string,\n url: string,\n proto: DuckDBDataProtocol,\n directIO: boolean,\n ): Promise<void> {\n if (url === undefined) {\n url = name;\n }\n const task = new WorkerTask<\n WorkerRequestType.REGISTER_FILE_URL,\n [string, string, DuckDBDataProtocol, boolean],\n null\n >(WorkerRequestType.REGISTER_FILE_URL, [name, url, proto, directIO]);\n await this.postTask(task);\n }\n\n /** Register an empty file buffer. */\n public async registerEmptyFileBuffer(name: string): Promise<void> {\n /*\n const task = new WorkerTask<WorkerRequestType.REGISTER_FILE_BUFFER, [string, Uint8Array], null>(\n WorkerRequestType.REGISTER_FILE_BUFFER,\n [name, new Uint8Array()],\n );\n await this.postTask(task);\n*/\n }\n\n /** Register a file buffer. */\n public async registerFileBuffer(name: string, buffer: Uint8Array): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.REGISTER_FILE_BUFFER, [string, Uint8Array], null>(\n WorkerRequestType.REGISTER_FILE_BUFFER,\n [name, buffer],\n );\n await this.postTask(task, [buffer.buffer]);\n }\n\n /** Register a file handle. */\n public async registerFileHandle<HandleType>(\n name: string,\n handle: HandleType,\n protocol: DuckDBDataProtocol,\n directIO: boolean,\n ): Promise<void> {\n const task = new WorkerTask<\n WorkerRequestType.REGISTER_FILE_HANDLE,\n [string, any, DuckDBDataProtocol, boolean],\n null\n >(WorkerRequestType.REGISTER_FILE_HANDLE, [name, handle, protocol, directIO]);\n await this.postTask(task, []);\n }\n\n /** Enable file statistics */\n public async registerOPFSFileName(name: string): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.REGISTER_OPFS_FILE_NAME, [string], null>(\n WorkerRequestType.REGISTER_OPFS_FILE_NAME,\n [name],\n );\n await this.postTask(task, []);\n }\n\n /** Enable file statistics */\n public async collectFileStatistics(name: string, enable: boolean): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.COLLECT_FILE_STATISTICS, [string, boolean], null>(\n WorkerRequestType.COLLECT_FILE_STATISTICS,\n [name, enable],\n );\n await this.postTask(task, []);\n }\n\n /** Export file statistics */\n public async exportFileStatistics(name: string): Promise<FileStatistics> {\n const task = new WorkerTask<WorkerRequestType.EXPORT_FILE_STATISTICS, string, FileStatistics>(\n WorkerRequestType.EXPORT_FILE_STATISTICS,\n name,\n );\n return await this.postTask(task, []);\n }\n\n /** Copy a file to a buffer. */\n public async copyFileToBuffer(name: string): Promise<Uint8Array> {\n const task = new WorkerTask<WorkerRequestType.COPY_FILE_TO_BUFFER, string, Uint8Array>(\n WorkerRequestType.COPY_FILE_TO_BUFFER,\n name,\n );\n return await this.postTask(task);\n }\n\n /** Copy a file to a path. */\n public async copyFileToPath(name: string, path: string): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.COPY_FILE_TO_PATH, [string, string], null>(\n WorkerRequestType.COPY_FILE_TO_PATH,\n [name, path],\n );\n await this.postTask(task);\n }\n\n /** Insert arrow from an ipc stream */\n public async insertArrowFromIPCStream(\n conn: ConnectionID,\n buffer: Uint8Array,\n options?: ArrowInsertOptions,\n ): Promise<void> {\n if (buffer.length == 0) return;\n // Pass to the worker\n const task = new WorkerTask<\n WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM,\n [number, Uint8Array, ArrowInsertOptions | undefined],\n null\n >(WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM, [conn, buffer, options]);\n await this.postTask(task, [buffer.buffer]);\n }\n /** Insert a csv file */\n public async insertCSVFromPath(conn: ConnectionID, path: string, options: CSVInsertOptions): Promise<void> {\n // Flatten the table options\n if (options.columns !== undefined) {\n const out = [];\n for (const k in options.columns) {\n const type = options.columns[k];\n out.push(arrowToSQLField(k, type));\n }\n options.columnsFlat = out;\n delete options.columns;\n }\n\n // Pass to the worker\n const task = new WorkerTask<WorkerRequestType.INSERT_CSV_FROM_PATH, [number, string, CSVInsertOptions], null>(\n WorkerRequestType.INSERT_CSV_FROM_PATH,\n [conn, path, options],\n );\n await this.postTask(task);\n }\n /** Insert a json file */\n public async insertJSONFromPath(conn: ConnectionID, path: string, options: JSONInsertOptions): Promise<void> {\n // Flatten the table options\n if (options.columns !== undefined) {\n const out = [];\n for (const k in options.columns) {\n const type = options.columns[k];\n out.push(arrowToSQLField(k, type));\n }\n options.columnsFlat = out;\n delete options.columns;\n }\n\n // Pass to the worker\n const task = new WorkerTask<WorkerRequestType.INSERT_JSON_FROM_PATH, [number, string, JSONInsertOptions], null>(\n WorkerRequestType.INSERT_JSON_FROM_PATH,\n [conn, path, options],\n );\n await this.postTask(task);\n }\n\n private shouldOPFSFileHandling():boolean {\n if( isOPFSProtocol(this.config.path ?? \"\")){\n return this.config.opfs?.fileHandling == \"auto\";\n }\n return false;\n }\n\n private async registerOPFSFileFromSQL(text: string) {\n const files = searchOPFSFiles(text);\n const result: string[] = [];\n for (const file of files) {\n try {\n await this.registerOPFSFileName(file);\n result.push(file);\n } catch (e) {\n console.error(e);\n throw new Error(\"File Not found:\" + file);\n }\n }\n return result;\n }\n}\n", "import { DuckDBModule } from './duckdb_module';\nimport { UDFFunction } from './udf_function';\nimport * as udf_rt from './udf_runtime';\n\n/** Wrapper for TextDecoder to support shared array buffers */\nfunction TextDecoderWrapper(): (input?: BufferSource) => string {\n const decoder = new TextDecoder();\n return (data: any) => {\n if (typeof SharedArrayBuffer !== 'undefined' && data.buffer instanceof SharedArrayBuffer) {\n data = new Uint8Array(data);\n }\n return decoder.decode(data);\n };\n}\n/** Helper to decode text */\nexport const decodeText = TextDecoderWrapper();\n\n/** Copy a buffer */\nexport function failWith(mod: DuckDBModule, msg: string): void {\n console.error(`FAIL WITH: ${msg}`);\n mod.ccall('duckdb_web_fail_with', null, ['string'], [msg]);\n}\n\n/** Copy a buffer */\nexport function copyBuffer(mod: DuckDBModule, begin: number, length: number): Uint8Array {\n const buffer = mod.HEAPU8.subarray(begin, begin + length);\n const copy = new Uint8Array(new ArrayBuffer(buffer.byteLength));\n copy.set(buffer);\n return copy;\n}\n\n/** Decode a string */\nexport function readString(mod: DuckDBModule, begin: number, length: number): string {\n return decodeText(mod.HEAPU8.subarray(begin, begin + length));\n}\n\n/** The data protocol */\nexport enum DuckDBDataProtocol {\n BUFFER = 0,\n NODE_FS = 1,\n BROWSER_FILEREADER = 2,\n BROWSER_FSACCESS = 3,\n HTTP = 4,\n S3 = 5,\n}\n\n/** File flags for opening files*/\nexport enum FileFlags {\n //! Open file with read access\n FILE_FLAGS_READ = 1 << 0,\n //! Open file with write access\n FILE_FLAGS_WRITE = 1 << 1,\n //! Use direct IO when reading/writing to the file\n FILE_FLAGS_DIRECT_IO = 1 << 2,\n //! Create file if not exists, can only be used together with WRITE\n FILE_FLAGS_FILE_CREATE = 1 << 3,\n //! Always create a new file. If a file exists, the file is truncated. Cannot be used together with CREATE.\n FILE_FLAGS_FILE_CREATE_NEW = 1 << 4,\n //! Open file in append mode\n FILE_FLAGS_APPEND = 1 << 5,\n FILE_FLAGS_PRIVATE = 1 << 6,\n FILE_FLAGS_NULL_IF_NOT_EXISTS = 1 << 7,\n FILE_FLAGS_PARALLEL_ACCESS = 1 << 8,\n FILE_FLAGS_EXCLUSIVE_CREATE = 1 << 9,\n FILE_FLAGS_NULL_IF_EXISTS = 1 << 10\n}\n\n/** Configuration for the AWS S3 Filesystem */\nexport interface S3Config {\n region?: string;\n endpoint?: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n sessionToken?: string;\n}\n\n/** An info for a file registered with DuckDB */\nexport interface DuckDBFileInfo {\n cacheEpoch: number;\n fileId: number;\n fileName: string;\n dataProtocol: DuckDBDataProtocol;\n dataUrl: string | null;\n reliableHeadRequests?: boolean;\n allowFullHttpReads?: boolean;\n forceFullHttpReads?: boolean;\n s3Config?: S3Config;\n}\n\n/** Global info for all files registered with DuckDB */\nexport interface DuckDBGlobalFileInfo {\n cacheEpoch: number;\n reliableHeadRequests?: boolean;\n allowFullHttpReads?: boolean;\n forceFullHttpReads?: boolean;\n s3Config?: S3Config;\n}\n\nexport interface PreparedDBFileHandle {\n path: string;\n handle: any;\n fromCached: boolean;\n}\n\n/** Call a function with packed response buffer */\nexport function callSRet(\n mod: DuckDBModule,\n funcName: string,\n argTypes: Array<Emscripten.JSType>,\n args: Array<any>,\n): [number, number, number] {\n const stackPointer = mod.stackSave();\n\n // Allocate the packed response buffer\n const response = mod.stackAlloc(3 * 8);\n argTypes.unshift('number');\n args.unshift(response);\n\n // Do the call\n mod.ccall(funcName, null, argTypes, args);\n\n // Read the response\n const status = mod.HEAPF64[(response >> 3) + 0];\n const data = mod.HEAPF64[(response >> 3) + 1];\n const dataSize = mod.HEAPF64[(response >> 3) + 2];\n\n // Restore the stack\n mod.stackRestore(stackPointer);\n return [status, data, dataSize];\n}\n\n/** Drop response buffers */\nexport function dropResponseBuffers(mod: DuckDBModule): void {\n mod.ccall('duckdb_web_clear_response', null, [], []);\n}\n\n/** The duckdb runtime */\nexport interface DuckDBRuntime {\n _files?: Map<string, any>;\n _udfFunctions: Map<number, UDFFunction>;\n\n // Test a platform feature\n testPlatformFeature(mod: DuckDBModule, feature: number): boolean;\n\n // File APIs with dedicated file identifier\n getDefaultDataProtocol(mod: DuckDBModule): number;\n openFile(mod: DuckDBModule, fileId: number, flags: FileFlags): void;\n syncFile(mod: DuckDBModule, fileId: number): void;\n closeFile(mod: DuckDBModule, fileId: number): void;\n dropFile(mod: DuckDBModule, fileNamePtr: number, fileNameLen: number): void;\n getLastFileModificationTime(mod: DuckDBModule, fileId: number): number;\n truncateFile(mod: DuckDBModule, fileId: number, newSize: number): void;\n readFile(mod: DuckDBModule, fileId: number, buffer: number, bytes: number, location: number): number;\n writeFile(mod: DuckDBModule, fileId: number, buffer: number, bytes: number, location: number): number;\n\n // File APIs with path parameter\n removeDirectory(mod: DuckDBModule, pathPtr: number, pathLen: number): void;\n checkDirectory(mod: DuckDBModule, pathPtr: number, pathLen: number): boolean;\n createDirectory(mod: DuckDBModule, pathPtr: number, pathLen: number): void;\n listDirectoryEntries(mod: DuckDBModule, pathPtr: number, pathLen: number): boolean;\n glob(mod: DuckDBModule, pathPtr: number, pathLen: number): void;\n moveFile(mod: DuckDBModule, fromPtr: number, fromLen: number, toPtr: number, toLen: number): void;\n checkFile(mod: DuckDBModule, pathPtr: number, pathLen: number): boolean;\n removeFile(mod: DuckDBModule, pathPtr: number, pathLen: number): void;\n\n // Prepare a file handle that could only be acquired aschronously\n prepareFileHandle?: (path: string, protocol: DuckDBDataProtocol) => Promise<PreparedDBFileHandle[]>;\n prepareFileHandles?: (path: string[], protocol: DuckDBDataProtocol) => Promise<PreparedDBFileHandle[]>;\n prepareDBFileHandle?: (path: string, protocol: DuckDBDataProtocol) => Promise<PreparedDBFileHandle[]>;\n\n // Internal API - experimental\n progressUpdate(final: number, percentage: number, iteration: number): void;\n\n // Call a scalar UDF function\n callScalarUDF(\n mod: DuckDBModule,\n response: number,\n funcId: number,\n descPtr: number,\n descSize: number,\n ptrsPtr: number,\n ptrsSize: number,\n ): void;\n}\n\nexport const DEFAULT_RUNTIME: DuckDBRuntime = {\n _udfFunctions: new Map(),\n\n testPlatformFeature: (_mod: DuckDBModule, _feature: number): boolean => false,\n getDefaultDataProtocol: (_mod: DuckDBModule): number => DuckDBDataProtocol.BUFFER,\n openFile: (_mod: DuckDBModule, _fileId: number, flags: FileFlags): void => {},\n syncFile: (_mod: DuckDBModule, _fileId: number): void => {},\n closeFile: (_mod: DuckDBModule, _fileId: number): void => {},\n dropFile: (_mod: DuckDBModule, _fileNamePtr: number, _fileNameLen: number): void => {},\n getLastFileModificationTime: (_mod: DuckDBModule, _fileId: number): number => {\n return 0;\n },\n progressUpdate: (_final: number, _percentage: number, _iteration: number): void => {\n return;\n },\n truncateFile: (_mod: DuckDBModule, _fileId: number, _newSize: number): void => {},\n readFile: (_mod: DuckDBModule, _fileId: number, _buffer: number, _bytes: number, _location: number): number => {\n return 0;\n },\n writeFile: (_mod: DuckDBModule, _fileId: number, _buffer: number, _bytes: number, _location: number): number => {\n return 0;\n },\n\n removeDirectory: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): void => {},\n checkDirectory: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): boolean => {\n return false;\n },\n createDirectory: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): void => {},\n listDirectoryEntries: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): boolean => {\n return false;\n },\n glob: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): void => {},\n moveFile: (_mod: DuckDBModule, _fromPtr: number, _fromLen: number, _toPtr: number, _toLen: number): void => {},\n checkFile: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): boolean => {\n return false;\n },\n removeFile: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): void => {},\n callScalarUDF: (\n mod: DuckDBModule,\n response: number,\n funcId: number,\n descPtr: number,\n descSize: number,\n ptrsPtr: number,\n ptrsSize: number,\n ): void => {\n udf_rt.callScalarUDF(DEFAULT_RUNTIME, mod, response, funcId, descPtr, descSize, ptrsPtr, ptrsSize);\n },\n};\n", "import { DuckDBBindings, DuckDBDataProtocol } from '../bindings';\nimport { WorkerResponseVariant, WorkerRequestVariant, WorkerRequestType, WorkerResponseType } from './worker_request';\nimport { Logger, LogEntryVariant } from '../log';\nimport { InstantiationProgress } from '../bindings/progress';\n\nexport abstract class AsyncDuckDBDispatcher implements Logger {\n /** The bindings */\n protected _bindings: DuckDBBindings | null = null;\n /** The next message id */\n protected _nextMessageId = 0;\n\n /** Instantiate the wasm module */\n protected abstract instantiate(\n mainModule: string,\n pthreadWorker: string | null,\n progress: (p: InstantiationProgress) => void,\n ): Promise<DuckDBBindings>;\n /** Post a response to the main thread */\n protected abstract postMessage(response: WorkerResponseVariant, transfer: ArrayBuffer[]): void;\n\n /** Send log entry to the main thread */\n public log(entry: LogEntryVariant): void {\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: 0,\n type: WorkerResponseType.LOG,\n data: entry,\n },\n [],\n );\n }\n\n /** Send plain OK without further data */\n protected sendOK(request: WorkerRequestVariant): void {\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.OK,\n data: null,\n },\n [],\n );\n }\n\n /** Fail with an error */\n protected failWith(request: WorkerRequestVariant, e: Error): void {\n // Workaround for Firefox not being able to perform structured-clone on Native Errors\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1556604\n const obj: any = {\n name: e.name,\n message: e.message,\n stack: e.stack || undefined,\n };\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.ERROR,\n data: obj,\n },\n [],\n );\n return;\n }\n\n /** Process a request from the main thread */\n public async onMessage(request: WorkerRequestVariant): Promise<void> {\n // First process those requests that don't need bindings\n switch (request.type) {\n case WorkerRequestType.PING:\n this.sendOK(request);\n return;\n case WorkerRequestType.INSTANTIATE:\n if (this._bindings != null) {\n this.failWith(request, new Error('duckdb already initialized'));\n }\n try {\n this._bindings = await this.instantiate(request.data[0], request.data[1], p => {\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.INSTANTIATE_PROGRESS,\n data: p,\n },\n [],\n );\n });\n this.sendOK(request);\n } catch (e: any) {\n console.log(e);\n this._bindings = null;\n this.failWith(request, e);\n }\n return;\n default:\n break;\n }\n\n // Bindings not initialized?\n if (!this._bindings) {\n return this.failWith(request, new Error('duckdb is not initialized'));\n }\n\n // Catch every exception and forward it as error message to the main thread\n try {\n switch (request.type) {\n case WorkerRequestType.GET_VERSION:\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.VERSION_STRING,\n data: this._bindings.getVersion(),\n },\n [],\n );\n break;\n case WorkerRequestType.GET_FEATURE_FLAGS:\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.FEATURE_FLAGS,\n data: this._bindings.getFeatureFlags(),\n },\n [],\n );\n break;\n case WorkerRequestType.RESET:\n this._bindings.reset();\n this.sendOK(request);\n break;\n\n case WorkerRequestType.OPEN: {\n const path = request.data.path;\n if (path?.startsWith('opfs://')) {\n await this._bindings.prepareDBFileHandle(path, DuckDBDataProtocol.BROWSER_FSACCESS);\n request.data.useDirectIO = true;\n }\n this._bindings.open(request.data);\n this.sendOK(request);\n break;\n }\n case WorkerRequestType.DROP_FILE:\n this._bindings.dropFile(request.data);\n this.sendOK(request);\n break;\n case WorkerRequestType.DROP_FILES:\n this._bindings.dropFiles(request.data);\n this.sendOK(request);\n break;\n case WorkerRequestType.FLUSH_FILES:\n this._bindings.flushFiles();\n this.sendOK(request);\n break;\n case WorkerRequestType.CONNECT: {\n const conn = this._bindings.connect();\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.CONNECTION_INFO,\n data: conn.useUnsafe((_, c) => c),\n },\n [],\n );\n break;\n }\n case WorkerRequestType.DISCONNECT:\n this._bindings.disconnect(request.data);\n this.sendOK(request);\n break;\n case WorkerRequestType.CREATE_PREPARED: {\n const result = this._bindings.createPrepared(request.data[0], request.data[1]);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.PREPARED_STATEMENT_ID,\n data: result,\n },\n [],\n );\n break;\n }\n case WorkerRequestType.CLOSE_PREPARED: {\n this._bindings.closePrepared(request.data[0], request.data[1]);\n this.sendOK(request);\n break;\n }\n case WorkerRequestType.RUN_PREPARED: {\n const result = this._bindings.runPrepared(request.data[0], request.data[1], request.data[2]);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT,\n data: result,\n },\n [result.buffer],\n );\n break;\n }\n case WorkerRequestType.RUN_QUERY: {\n const result = this._bindings.runQuery(request.data[0], request.data[1]);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT,\n data: result,\n },\n [result.buffer],\n );\n break;\n }\n case WorkerRequestType.SEND_PREPARED: {\n const result = this._bindings.sendPrepared(request.data[0], request.data[1], request.data[2]);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT_HEADER,\n data: result,\n },\n [result.buffer],\n );\n break;\n }\n case WorkerRequestType.START_PENDING_QUERY: {\n const result = this._bindings.startPendingQuery(request.data[0], request.data[1], request.data[2]);\n const transfer = [];\n if (result) {\n transfer.push(result.buffer);\n }\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT_HEADER_OR_NULL,\n data: result,\n },\n transfer,\n );\n break;\n }\n case WorkerRequestType.POLL_PENDING_QUERY: {\n const result = this._bindings.pollPendingQuery(request.data);\n const transfer = [];\n if (result) {\n transfer.push(result.buffer);\n }\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT_HEADER_OR_NULL,\n data: result,\n },\n transfer,\n );\n break;\n }\n case WorkerRequestType.CANCEL_PENDING_QUERY: {\n const result = this._bindings.cancelPendingQuery(request.data);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.SUCCESS,\n data: result,\n },\n [],\n );\n break;\n }\n case WorkerRequestType.FETCH_QUERY_RESULTS: {\n const result = this._bindings.fetchQueryResults(request.data);\n const transfer = result ? [result.buffer] : [];\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT_CHUNK,\n data: result,\n },\n transfer,\n );\n break;\n }\n case WorkerRequestType.GET_TABLE_NAMES: {\n const result = this._bindings.getTableNames(request.data[0], request.data[1]);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.TABLE_NAMES,\n data: result,\n },\n [],\n );\n break;\n }\n case WorkerRequestType.GLOB_FILE_INFOS: {\n const infos = this._bindings.globFiles(request.data);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.FILE_INFOS,\n data: infos,\n },\n [],\n );\n break;\n }\n\n case WorkerRequestType.REGISTER_FILE_URL:\n this._bindings.registerFileURL(request.data[0], request.data[1], request.data[2], request.data[3]);\n this.sendOK(request);\n break;\n\n case WorkerRequestType.REGISTER_FILE_BUFFER:\n this._bindings.registerFileBuffer(request.data[0], request.data[1]);\n this.sendOK(request);\n break;\n\n case WorkerRequestType.REGISTER_FILE_HANDLE:\n await this._bindings.registerFileHandleAsync(\n request.data[0],\n request.data[1],\n request.data[2],\n request.data[3],\n );\n this.sendOK(request);\n break;\n\n case WorkerRequestType.COPY_FILE_TO_PATH:\n this._bindings.copyFileToPath(request.data[0], request.data[1]);\n this.sendOK(request);\n break;\n\n case WorkerRequestType.COPY_FILE_TO_BUFFER: {\n const buffer = this._bindings.copyFileToBuffer(request.data);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.FILE_BUFFER,\n data: buffer,\n },\n [],\n );\n break;\n }\n case WorkerRequestType.COLLECT_FILE_STATISTICS:\n this._bindings.collectFileStatistics(request.data[0], request.data[1]);\n this.sendOK(request);\n break;\n\n case WorkerRequestType.REGISTER_OPFS_FILE_NAME:\n await this._bindings.registerOPFSFileName(request.data[0]);\n this.sendOK(request);\n break;\n\n case WorkerRequestType.EXPORT_FILE_STATISTICS: {\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.FILE_STATISTICS,\n data: this._bindings.exportFileStatistics(request.data),\n },\n [],\n );\n break;\n }\n case WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM: {\n this._bindings.insertArrowFromIPCStream(request.data[0], request.data[1], request.data[2]);\n this.sendOK(request);\n break;\n }\n case WorkerRequestType.INSERT_CSV_FROM_PATH: {\n this._bindings.insertCSVFromPath(request.data[0], request.data[1], request.data[2]);\n this.sendOK(request);\n break;\n }\n case WorkerRequestType.INSERT_JSON_FROM_PATH: {\n this._bindings.insertJSONFromPath(request.data[0], request.data[1], request.data[2]);\n this.sendOK(request);\n break;\n }\n case WorkerRequestType.TOKENIZE: {\n const result = this._bindings.tokenize(request.data);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.SCRIPT_TOKENS,\n data: result,\n },\n [],\n );\n break;\n }\n }\n } catch (e: any) {\n console.log(e);\n return this.failWith(request, e);\n }\n }\n}\n", "export const bigInt=()=>(async e=>{try{return(await WebAssembly.instantiate(e)).instance.exports.b(BigInt(0))===BigInt(0)}catch(e){return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,126,1,126,3,2,1,0,7,5,1,1,98,0,0,10,6,1,4,0,32,0,11])),bulkMemory=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,3,1,0,1,10,14,1,12,0,65,0,65,0,65,0,252,10,0,0,11])),exceptions=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,6,64,25,11,11])),extendedConst=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,5,3,1,0,1,11,9,1,0,65,1,65,2,106,11,0])),gc=()=>(async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,95,1,120,0])))(),jspi=()=>(async()=>\"Suspender\"in WebAssembly)(),memory64=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,5,3,1,4,1])),multiMemory=()=>(async()=>{try{return new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,5,5,2,0,0,0,0])),!0}catch(e){return!1}})(),multiValue=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,0,2,127,127,3,2,1,0,10,8,1,6,0,65,0,65,0,11])),mutableGlobals=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,2,8,1,1,97,1,98,3,127,1,6,6,1,127,1,65,0,11,7,5,1,1,97,3,1])),referenceTypes=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,7,1,5,0,208,112,26,11])),relaxedSimd=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,15,1,13,0,65,1,253,15,65,2,253,15,253,128,2,11])),saturatedFloatToInt=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,12,1,10,0,67,0,0,0,0,252,0,26,11])),signExtensions=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,65,0,192,26,11])),simd=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11])),streamingCompilation=()=>(async()=>\"compileStreaming\"in WebAssembly)(),tailCall=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,6,1,4,0,18,0,11])),threads=()=>(async e=>{try{return\"undefined\"!=typeof MessageChannel&&(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(e)}catch(e){return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11])),typeReflection=()=>(async()=>\"Function\"in WebAssembly)();\n", "{\n \"name\": \"@duckdb/duckdb-wasm\",\n \"version\": \"1.33.1-dev16.0\",\n \"description\": \"DuckDB powered by WebAssembly\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/duckdb/duckdb-wasm.git\"\n },\n \"keywords\": [\n \"sql\",\n \"duckdb\",\n \"relational\",\n \"database\",\n \"data\",\n \"query\",\n \"wasm\",\n \"analytics\",\n \"olap\",\n \"arrow\",\n \"parquet\",\n \"json\",\n \"csv\"\n ],\n \"dependencies\": {\n \"apache-arrow\": \"^17.0.0\",\n \"qs\": \"^6.14.1\"\n },\n \"devDependencies\": {\n \"@types/emscripten\": \"^1.39.10\",\n \"@types/jasmine\": \"^5.1.13\",\n \"@typescript-eslint/eslint-plugin\": \"^6.21.0\",\n \"@typescript-eslint/parser\": \"^6.21.0\",\n \"esbuild\": \"^0.20.2\",\n \"eslint\": \"^8.57.0\",\n \"eslint-plugin-jasmine\": \"^4.1.3\",\n \"eslint-plugin-react\": \"^7.37.5\",\n \"fast-glob\": \"^3.3.2\",\n \"jasmine\": \"^5.13.0\",\n \"jasmine-core\": \"^5.1.2\",\n \"jasmine-spec-reporter\": \"^7.0.0\",\n \"js-sha256\": \"^0.11.1\",\n \"karma\": \"^6.4.2\",\n \"karma-chrome-launcher\": \"^3.2.0\",\n \"karma-coverage\": \"^2.2.1\",\n \"karma-firefox-launcher\": \"^2.1.3\",\n \"karma-jasmine\": \"^5.1.0\",\n \"karma-jasmine-html-reporter\": \"^2.1.0\",\n \"karma-sourcemap-loader\": \"^0.4.0\",\n \"karma-spec-reporter\": \"^0.0.36\",\n \"make-dir\": \"^4.0.0\",\n \"nyc\": \"^15.1.0\",\n \"prettier\": \"^3.2.5\",\n \"puppeteer\": \"^22.8.0\",\n \"rimraf\": \"^5.0.5\",\n \"s3rver\": \"^3.7.1\",\n \"typedoc\": \"^0.28.15\",\n \"typescript\": \"^5.3.3\",\n \"wasm-feature-detect\": \"^1.6.1\",\n \"web-worker\": \"^1.2.0\"\n },\n \"scripts\": {\n \"build:debug\": \"node bundle.mjs debug && tsc --emitDeclarationOnly\",\n \"build:release\": \"node bundle.mjs release && tsc --emitDeclarationOnly\",\n \"docs\": \"typedoc\",\n \"format\": \"prettier --write \\\"**/*.+(js|ts)\\\"\",\n \"report\": \"node ./coverage.mjs\",\n \"test:node\": \"node --enable-source-maps ../jasmine/bin/jasmine ./dist/tests-node.cjs\",\n \"test:node:debug\": \"node --inspect-brk --enable-source-maps ../jasmine/bin/jasmine ./dist/tests-node.cjs\",\n \"test:node:coverage\": \"nyc -r json --report-dir ./coverage/node node ../jasmine/bin/jasmine ./dist/tests-node.cjs\",\n \"test:firefox\": \"karma start ./karma/tests-firefox.cjs\",\n \"test:chrome\": \"karma start ./karma/tests-chrome.cjs\",\n \"test:chrome:eh\": \"karma start ./karma/tests-chrome-eh.cjs\",\n \"test:chrome:coverage\": \"karma start ./karma/tests-chrome-coverage.cjs\",\n \"test:browser\": \"karma start ./karma/tests-all.cjs\",\n \"test:browser:debug\": \"karma start ./karma/tests-debug.cjs\",\n \"test\": \"npm run test:chrome && npm run test:node\",\n \"test:coverage\": \"npm run test:chrome:coverage && npm run test:node:coverage && npm run report\",\n \"lint\": \"eslint src test\"\n },\n \"files\": [\n \"dist\",\n \"!dist/tests-*\",\n \"!dist/duckdb-browser-mvp.worker.js.map\",\n \"!dist/types/test\"\n ],\n \"main\": \"dist/duckdb-browser.cjs\",\n \"module\": \"dist/duckdb-browser.mjs\",\n \"types\": \"dist/duckdb-browser.d.ts\",\n \"jsdelivr\": \"dist/duckdb-browser.cjs\",\n \"unpkg\": \"dist/duckdb-browser.mjs\",\n \"sideEffects\": false,\n \"browser\": {\n \"fs\": false,\n \"path\": false,\n \"perf_hooks\": false,\n \"os\": false,\n \"worker_threads\": false\n },\n \"exports\": {\n \"./dist/duckdb-mvp.wasm\": \"./dist/duckdb-mvp.wasm\",\n \"./dist/duckdb-eh.wasm\": \"./dist/duckdb-eh.wasm\",\n \"./dist/duckdb-coi.wasm\": \"./dist/duckdb-coi.wasm\",\n \"./dist/duckdb-browser\": \"./dist/duckdb-browser.mjs\",\n \"./dist/duckdb-browser.cjs\": \"./dist/duckdb-browser.cjs\",\n \"./dist/duckdb-browser.mjs\": \"./dist/duckdb-browser.mjs\",\n \"./dist/duckdb-browser-coi.pthread.worker.js\": \"./dist/duckdb-browser-coi.pthread.worker.js\",\n \"./dist/duckdb-browser-coi.worker.js\": \"./dist/duckdb-browser-coi.worker.js\",\n \"./dist/duckdb-browser-eh.worker.js\": \"./dist/duckdb-browser-eh.worker.js\",\n \"./dist/duckdb-browser-mvp.worker.js\": \"./dist/duckdb-browser-mvp.worker.js\",\n \"./dist/duckdb-node\": \"./dist/duckdb-node.cjs\",\n \"./dist/duckdb-node.cjs\": \"./dist/duckdb-node.cjs\",\n \"./dist/duckdb-node-blocking\": \"./dist/duckdb-node-blocking.cjs\",\n \"./dist/duckdb-node-blocking.cjs\": \"./dist/duckdb-node-blocking.cjs\",\n \"./dist/duckdb-node-eh.worker.cjs\": \"./dist/duckdb-node-eh.worker.cjs\",\n \"./dist/duckdb-node-mvp.worker.cjs\": \"./dist/duckdb-node-mvp.worker.cjs\",\n \"./blocking\": {\n \"node\": {\n \"types\": \"./dist/duckdb-node-blocking.d.ts\",\n \"require\": \"./dist/duckdb-node-blocking.cjs\",\n \"import\": \"./dist/duckdb-node-blocking.cjs\"\n },\n \"types\": \"./dist/duckdb-node-blocking.d.ts\",\n \"import\": \"./dist/duckdb-node-blocking.mjs\",\n \"require\": \"./dist/duckdb-node-blocking.cjs\"\n },\n \".\": {\n \"browser\": {\n \"types\": \"./dist/duckdb-browser.d.ts\",\n \"import\": \"./dist/duckdb-browser.mjs\",\n \"require\": \"./dist/duckdb-browser.cjs\"\n },\n \"node\": {\n \"types\": \"./dist/duckdb-node.d.ts\",\n \"import\": \"./dist/duckdb-node.cjs\",\n \"require\": \"./dist/duckdb-node.cjs\"\n },\n \"types\": \"./dist/duckdb-browser.d.ts\",\n \"import\": \"./dist/duckdb-browser.mjs\",\n \"require\": \"./dist/duckdb-browser.cjs\"\n }\n }\n}\n", "import config from '../package.json';\n\nexport const PACKAGE_NAME = config.name;\nexport const PACKAGE_VERSION = config.version;\n\nconst VERSION_PARTS = config.version.split('.');\nexport const PACKAGE_VERSION_MAJOR = VERSION_PARTS[0];\nexport const PACKAGE_VERSION_MINOR = VERSION_PARTS[1];\nexport const PACKAGE_VERSION_PATCH = VERSION_PARTS[2];\n", "import * as check from 'wasm-feature-detect';\nimport { PACKAGE_NAME, PACKAGE_VERSION } from './version';\n\n// Platform check taken from here:\n// https://github.com/xtermjs/xterm.js/blob/master/src/common/Platform.ts#L21\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\n\nexport const isNode = () => (typeof navigator === 'undefined' ? true : false);\nconst userAgent = () => (isNode() ? 'node' : navigator.userAgent);\nexport const isFirefox = () => userAgent().includes('Firefox');\nexport const isSafari = () => /^((?!chrome|android).)*safari/i.test(userAgent());\n\n/** Bundles have different characteristics:\n * - MVP: minimum viable product (uses features from first stable version of WebAssembly standard)\n * - EH: exception handling\n * - COI: cross origin isolation\n */\nexport interface DuckDBBundles {\n mvp: {\n mainModule: string;\n mainWorker: string;\n };\n eh?: {\n mainModule: string;\n mainWorker: string;\n };\n coi?: {\n mainModule: string;\n mainWorker: string;\n pthreadWorker: string;\n };\n}\n\nexport function getJsDelivrBundles(): DuckDBBundles {\n const jsdelivr_dist_url = `https://cdn.jsdelivr.net/npm/${PACKAGE_NAME}@${PACKAGE_VERSION}/dist/`;\n return {\n mvp: {\n mainModule: `${jsdelivr_dist_url}duckdb-mvp.wasm`,\n mainWorker: `${jsdelivr_dist_url}duckdb-browser-mvp.worker.js`,\n },\n eh: {\n mainModule: `${jsdelivr_dist_url}duckdb-eh.wasm`,\n mainWorker: `${jsdelivr_dist_url}duckdb-browser-eh.worker.js`,\n },\n // COI is still experimental, let the user opt in explicitly\n };\n}\n\nexport interface DuckDBBundle {\n mainModule: string;\n mainWorker: string | null;\n pthreadWorker: string | null;\n}\n\nexport interface PlatformFeatures {\n bigInt64Array: boolean;\n crossOriginIsolated: boolean;\n wasmExceptions: boolean;\n wasmSIMD: boolean;\n wasmBulkMemory: boolean;\n wasmThreads: boolean;\n}\n\nlet bigInt64Array: boolean | null = null;\nlet wasmExceptions: boolean | null = null;\nlet wasmThreads: boolean | null = null;\nlet wasmSIMD: boolean | null = null;\nlet wasmBulkMemory: boolean | null = null;\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\ndeclare namespace globalThis {\n let crossOriginIsolated: boolean;\n}\n\nexport async function getPlatformFeatures(): Promise<PlatformFeatures> {\n if (bigInt64Array == null) {\n bigInt64Array = typeof BigInt64Array != 'undefined';\n }\n if (wasmExceptions == null) {\n wasmExceptions = await check.exceptions();\n }\n if (wasmThreads == null) {\n wasmThreads = await check.threads();\n }\n if (wasmSIMD == null) {\n wasmSIMD = await check.simd();\n }\n if (wasmBulkMemory == null) {\n wasmBulkMemory = await check.bulkMemory();\n }\n return {\n bigInt64Array: bigInt64Array!,\n crossOriginIsolated: isNode() || globalThis.crossOriginIsolated || false,\n wasmExceptions: wasmExceptions!,\n wasmSIMD: wasmSIMD!,\n wasmThreads: wasmThreads!,\n wasmBulkMemory: wasmBulkMemory!,\n };\n}\n\nexport async function selectBundle(bundles: DuckDBBundles): Promise<DuckDBBundle> {\n const platform = await getPlatformFeatures();\n if (platform.wasmExceptions) {\n if (platform.wasmSIMD && platform.wasmThreads && platform.crossOriginIsolated && bundles.coi) {\n return {\n mainModule: bundles.coi.mainModule,\n mainWorker: bundles.coi.mainWorker,\n pthreadWorker: bundles.coi.pthreadWorker,\n };\n }\n if (bundles.eh) {\n return {\n mainModule: bundles.eh.mainModule,\n mainWorker: bundles.eh.mainWorker,\n pthreadWorker: null,\n };\n }\n }\n return {\n mainModule: bundles.mvp.mainModule,\n mainWorker: bundles.mvp.mainWorker,\n pthreadWorker: null,\n };\n}\n", "import Worker from 'web-worker';\n\nexport async function createWorker(url: string) {\n const request = new Request(url);\n const workerScript = await fetch(request);\n const workerURL = URL.createObjectURL(await workerScript.blob());\n return new Worker(workerURL);\n}\n"],
|
|
4
|
+
"sourcesContent": ["/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nmodule.exports = Worker;", "export interface DuckDBQueryConfig {\n /**\n * The polling interval for queries\n */\n queryPollingInterval?: number;\n /**\n * Cast BigInt to Double?\n */\n castBigIntToDouble?: boolean;\n /**\n * Cast Timestamp to Date64?\n */\n castTimestampToDate?: boolean;\n /**\n * Cast Timestamp to Date64?\n */\n castDurationToTime64?: boolean;\n /**\n * Cast Decimal to Double?\n */\n castDecimalToDouble?: boolean;\n}\n\nexport interface DuckDBFilesystemConfig {\n reliableHeadRequests?: boolean;\n /**\n * Allow falling back to full HTTP reads if the server does not support range requests.\n */\n allowFullHTTPReads?: boolean;\n /**\n * Force use of full HTTP reads, suppressing range requests.\n */\n forceFullHTTPReads?: boolean;\n}\n\nexport interface DuckDBOPFSConfig {\n /**\n * Defines how `opfs://` files are handled during SQL execution.\n * - \"auto\": Automatically register `opfs://` files and drop them after execution.\n * - \"manual\": Files must be manually registered and dropped.\n */\n fileHandling?: \"auto\" | \"manual\";\n}\n\nexport enum DuckDBAccessMode {\n UNDEFINED = 0,\n AUTOMATIC = 1,\n READ_ONLY = 2,\n READ_WRITE = 3,\n}\n\nexport interface DuckDBConfig {\n /**\n * The database path\n */\n path?: string;\n /**\n * The access mode\n */\n accessMode?: DuckDBAccessMode;\n /**\n * The maximum number of threads.\n * Note that this will only work with cross-origin isolated sites since it requires SharedArrayBuffers.\n */\n maximumThreads?: number;\n /**\n * The direct io flag\n */\n useDirectIO?: boolean;\n /**\n * The query config\n */\n query?: DuckDBQueryConfig;\n /**\n * The filesystem config\n */\n filesystem?: DuckDBFilesystemConfig;\n /**\n * Whether to allow unsigned extensions\n */\n allowUnsignedExtensions?: boolean;\n /**\n * Whether to use alternate Arrow conversion that preserves full range and precision of data.\n */\n arrowLosslessConversion?: boolean;\n /**\n * Custom user agent string\n */\n customUserAgent?: string;\n /**\n * opfs string\n */\n opfs?: DuckDBOPFSConfig;\n}\n", "export enum TokenType {\n IDENTIFIER = 0,\n NUMERIC_CONSTANT = 1,\n STRING_CONSTANT = 2,\n OPERATOR = 3,\n KEYWORD = 4,\n COMMENT = 5,\n}\n\nexport interface ScriptTokens {\n offsets: number[];\n types: TokenType[];\n}\n", "export enum LogLevel {\n NONE = 0,\n DEBUG = 1,\n INFO = 2,\n WARNING = 3,\n ERROR = 4,\n}\n\nexport enum LogTopic {\n NONE = 0,\n CONNECT = 1,\n DISCONNECT = 2,\n OPEN = 3,\n QUERY = 4,\n INSTANTIATE = 5,\n}\n\nexport enum LogEvent {\n NONE = 0,\n OK = 1,\n ERROR = 2,\n START = 3,\n RUN = 4,\n CAPTURE = 5,\n}\n\nexport enum LogOrigin {\n NONE = 0,\n WEB_WORKER = 1,\n NODE_WORKER = 2,\n BINDINGS = 3,\n ASYNC_DUCKDB = 4,\n}\n\nexport type LogEntry<O, T, E, V> = {\n readonly timestamp: Date;\n readonly level: LogLevel;\n readonly origin: O;\n readonly topic: T;\n readonly event: E;\n readonly value: V;\n};\n\nexport type ProgressEntry = {\n readonly status: string;\n readonly percentage: string;\n readonly repetitions: string;\n};\n\n/** An execution progress handler */\nexport type ExecutionProgressHandler = (p: ProgressEntry) => void;\n\nexport type LogEntryVariant =\n | LogEntry<LogOrigin.BINDINGS, LogTopic.INSTANTIATE, LogEvent.ERROR, string>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.START, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.OK, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.QUERY, LogEvent.ERROR, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.CONNECT, LogEvent.OK, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.CONNECT, LogEvent.ERROR, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.DISCONNECT, LogEvent.OK, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.DISCONNECT, LogEvent.ERROR, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.START, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.OK, void>\n | LogEntry<LogOrigin.BINDINGS, LogTopic.OPEN, LogEvent.ERROR, void>\n | LogEntry<LogOrigin.ASYNC_DUCKDB, LogTopic.QUERY, LogEvent.RUN, string>;\n\nexport interface Logger {\n log(entry: LogEntryVariant): void;\n}\n\nexport class VoidLogger implements Logger {\n public log(_entry: LogEntryVariant): void {}\n}\n\nexport class ConsoleLogger implements Logger {\n constructor(protected level: LogLevel = LogLevel.INFO) {}\n public log(entry: LogEntryVariant): void {\n if (entry.level >= this.level) {\n console.log(entry);\n }\n }\n}\n\nexport function getLogLevelLabel(level: LogLevel): string {\n switch (level) {\n case LogLevel.NONE:\n return 'NONE';\n case LogLevel.DEBUG:\n return 'DEBUG';\n case LogLevel.INFO:\n return 'INFO';\n case LogLevel.WARNING:\n return 'WARNING';\n case LogLevel.ERROR:\n return 'ERROR';\n default:\n return '?';\n }\n}\n\nexport function getLogEventLabel(event: LogEvent): string {\n switch (event) {\n case LogEvent.NONE:\n return 'NONE';\n case LogEvent.OK:\n return 'OK';\n case LogEvent.ERROR:\n return 'ERROR';\n case LogEvent.START:\n return 'START';\n case LogEvent.RUN:\n return 'RUN';\n case LogEvent.CAPTURE:\n return 'CAPTURE';\n default:\n return '?';\n }\n}\n\nexport function getLogTopicLabel(topic: LogTopic): string {\n switch (topic) {\n case LogTopic.CONNECT:\n return 'CONNECT';\n case LogTopic.DISCONNECT:\n return 'DISCONNECT';\n case LogTopic.INSTANTIATE:\n return 'INSTANTIATE';\n case LogTopic.OPEN:\n return 'OPEN';\n case LogTopic.QUERY:\n return 'QUERY';\n default:\n return '?';\n }\n}\n\nexport function getLogOriginLabel(origin: LogOrigin): string {\n switch (origin) {\n case LogOrigin.NONE:\n return 'NONE';\n case LogOrigin.WEB_WORKER:\n return 'WEB WORKER';\n case LogOrigin.NODE_WORKER:\n return 'NODE WORKER';\n case LogOrigin.BINDINGS:\n return 'DUCKDB BINDINGS';\n case LogOrigin.ASYNC_DUCKDB:\n return 'DUCKDB';\n default:\n return '?';\n }\n}\n", "export enum StatusCode {\n SUCCESS = 0,\n MAX_ARROW_ERROR = 255,\n DUCKDB_WASM_RETRY = 256,\n}\n\nexport function IsArrowBuffer(status: StatusCode): boolean {\n return status <= StatusCode.MAX_ARROW_ERROR;\n}\n\nexport function IsDuckDBWasmRetry(status: StatusCode): boolean {\n return status === StatusCode.DUCKDB_WASM_RETRY;\n}\n", "import * as arrow from 'apache-arrow';\nimport { AsyncDuckDB } from './async_bindings';\nimport { LogLevel, LogTopic, LogOrigin, LogEvent } from '../log';\nimport { ArrowInsertOptions, CSVInsertOptions, JSONInsertOptions } from '../bindings/insert_options';\n\n/** A thin helper to memoize the connection id */\nexport class AsyncDuckDBConnection {\n /** The async duckdb */\n protected readonly _bindings: AsyncDuckDB;\n /** The conn handle */\n protected readonly _conn: number;\n\n constructor(bindings: AsyncDuckDB, conn: number) {\n this._bindings = bindings;\n this._conn = conn;\n }\n\n /** Access the database bindings */\n public get bindings(): AsyncDuckDB {\n return this._bindings;\n }\n\n /** Disconnect from the database */\n public async close(): Promise<void> {\n return this._bindings.disconnect(this._conn);\n }\n\n /** Brave souls may use this function to consume the underlying connection id */\n public useUnsafe<R>(callback: (bindings: AsyncDuckDB, conn: number) => R) {\n return callback(this._bindings, this._conn);\n }\n\n /** Run a query */\n public async query<T extends { [key: string]: arrow.DataType } = any>(text: string): Promise<arrow.Table<T>> {\n this._bindings.logger.log({\n timestamp: new Date(),\n level: LogLevel.INFO,\n origin: LogOrigin.ASYNC_DUCKDB,\n topic: LogTopic.QUERY,\n event: LogEvent.RUN,\n value: text,\n });\n const buffer = await this._bindings.runQuery(this._conn, text);\n const reader = arrow.RecordBatchReader.from<T>(buffer);\n console.assert(reader.isSync(), 'Reader is not sync');\n console.assert(reader.isFile(), 'Reader is not file');\n return new arrow.Table(reader as arrow.RecordBatchFileReader);\n }\n\n /** Send a query */\n public async send<T extends { [key: string]: arrow.DataType } = any>(\n text: string,\n allowStreamResult: boolean = false,\n ): Promise<arrow.AsyncRecordBatchStreamReader<T>> {\n this._bindings.logger.log({\n timestamp: new Date(),\n level: LogLevel.INFO,\n origin: LogOrigin.ASYNC_DUCKDB,\n topic: LogTopic.QUERY,\n event: LogEvent.RUN,\n value: text,\n });\n let header = await this._bindings.startPendingQuery(this._conn, text, allowStreamResult);\n while (header == null) {\n // Avoid infinite loop on detached state\n if (this._bindings.isDetached()) {\n console.error('cannot send a message since the worker is not set!');\n return undefined as any;\n }\n header = await this._bindings.pollPendingQuery(this._conn);\n }\n const iter = new AsyncResultStreamIterator(this._bindings, this._conn, header);\n const reader = await arrow.RecordBatchReader.from<T>(iter);\n console.assert(reader.isAsync());\n console.assert(reader.isStream());\n return reader as unknown as arrow.AsyncRecordBatchStreamReader<T>; // XXX\n }\n\n /** Cancel a query that was sent earlier */\n public async cancelSent(): Promise<boolean> {\n return await this._bindings.cancelPendingQuery(this._conn);\n }\n\n /** Get table names */\n public async getTableNames(query: string): Promise<string[]> {\n return await this._bindings.getTableNames(this._conn, query);\n }\n\n /** Create a prepared statement */\n public async prepare<T extends { [key: string]: arrow.DataType } = any>(\n text: string,\n ): Promise<AsyncPreparedStatement<T>> {\n const stmt = await this._bindings.createPrepared(this._conn, text);\n return new AsyncPreparedStatement<T>(this._bindings, this._conn, stmt);\n }\n\n /** Insert an arrow table */\n public async insertArrowTable(table: arrow.Table, options: ArrowInsertOptions): Promise<void> {\n const buffer = arrow.tableToIPC(table, 'stream');\n await this.insertArrowFromIPCStream(buffer, options);\n }\n /** Insert an arrow table from an ipc stream */\n public async insertArrowFromIPCStream(buffer: Uint8Array, options: ArrowInsertOptions): Promise<void> {\n await this._bindings.insertArrowFromIPCStream(this._conn, buffer, options);\n }\n /** Insert csv file from path */\n public async insertCSVFromPath(text: string, options: CSVInsertOptions): Promise<void> {\n await this._bindings.insertCSVFromPath(this._conn, text, options);\n }\n /** Insert json file from path */\n public async insertJSONFromPath(text: string, options: JSONInsertOptions): Promise<void> {\n await this._bindings.insertJSONFromPath(this._conn, text, options);\n }\n}\n\n/** An async result stream iterator */\nexport class AsyncResultStreamIterator implements AsyncIterable<Uint8Array> {\n /** First chunk? */\n protected _first: boolean;\n /** Reached end of stream? */\n protected _depleted: boolean;\n /** In-flight */\n protected _inFlight: Promise<Uint8Array | null> | null;\n\n constructor(\n protected readonly db: AsyncDuckDB,\n protected readonly conn: number,\n protected readonly header: Uint8Array,\n ) {\n this._first = true;\n this._depleted = false;\n this._inFlight = null;\n }\n\n async next(): Promise<IteratorResult<Uint8Array>> {\n if (this._first) {\n this._first = false;\n return { done: false, value: this.header };\n }\n if (this._depleted) {\n return { done: true, value: null };\n }\n let buffer: Uint8Array | null = null;\n if (this._inFlight != null) {\n buffer = await this._inFlight;\n this._inFlight = null;\n }\n\n while (buffer == null) {\n buffer = await this.db.fetchQueryResults(this.conn);\n }\n\n this._depleted = buffer.length == 0;\n if (!this._depleted) {\n this._inFlight = this.db.fetchQueryResults(this.conn);\n }\n\n return {\n done: this._depleted,\n value: buffer,\n };\n }\n\n [Symbol.asyncIterator]() {\n return this;\n }\n}\n\n/** A thin helper to bind the prepared statement id */\nexport class AsyncPreparedStatement<T extends { [key: string]: arrow.DataType } = any> {\n /** The bindings */\n protected readonly bindings: AsyncDuckDB;\n /** The connection id */\n protected readonly connectionId: number;\n /** The statement id */\n protected readonly statementId: number;\n\n /** Constructor */\n constructor(bindings: AsyncDuckDB, connectionId: number, statementId: number) {\n this.bindings = bindings;\n this.connectionId = connectionId;\n this.statementId = statementId;\n }\n\n /** Close a prepared statement */\n public async close() {\n await this.bindings.closePrepared(this.connectionId, this.statementId);\n }\n\n /** Run a prepared statement */\n public async query(...params: any[]): Promise<arrow.Table<T>> {\n const buffer = await this.bindings.runPrepared(this.connectionId, this.statementId, params);\n const reader = arrow.RecordBatchReader.from<T>(buffer);\n console.assert(reader.isSync());\n console.assert(reader.isFile());\n return new arrow.Table(reader as arrow.RecordBatchFileReader);\n }\n\n /** Send a prepared statement */\n public async send(...params: any[]): Promise<arrow.AsyncRecordBatchStreamReader<T>> {\n const header = await this.bindings.sendPrepared(this.connectionId, this.statementId, params);\n const iter = new AsyncResultStreamIterator(this.bindings, this.connectionId, header);\n const reader = await arrow.RecordBatchReader.from<T>(iter);\n console.assert(reader.isAsync());\n console.assert(reader.isStream());\n return reader as unknown as arrow.AsyncRecordBatchStreamReader<T>; // XXX\n }\n}\n", "import { CSVInsertOptions, JSONInsertOptions, ArrowInsertOptions } from '../bindings/insert_options';\nimport { LogEntryVariant, ProgressEntry } from '../log';\nimport { ScriptTokens } from '../bindings/tokens';\nimport { FileStatistics } from '../bindings/file_stats';\nimport { DuckDBConfig } from '../bindings/config';\nimport { WebFile } from '../bindings/web_file';\nimport { InstantiationProgress } from '../bindings/progress';\nimport { DuckDBDataProtocol } from '../bindings';\n\nexport type ConnectionID = number;\nexport type StatementID = number;\n\nexport enum WorkerRequestType {\n CANCEL_PENDING_QUERY = 'CANCEL_PENDING_QUERY',\n CLOSE_PREPARED = 'CLOSE_PREPARED',\n COLLECT_FILE_STATISTICS = 'COLLECT_FILE_STATISTICS',\n REGISTER_OPFS_FILE_NAME = 'REGISTER_OPFS_FILE_NAME',\n CONNECT = 'CONNECT',\n COPY_FILE_TO_BUFFER = 'COPY_FILE_TO_BUFFER',\n COPY_FILE_TO_PATH = 'COPY_FILE_TO_PATH',\n CREATE_PREPARED = 'CREATE_PREPARED',\n DISCONNECT = 'DISCONNECT',\n DROP_FILE = 'DROP_FILE',\n DROP_FILES = 'DROP_FILES',\n EXPORT_FILE_STATISTICS = 'EXPORT_FILE_STATISTICS',\n FETCH_QUERY_RESULTS = 'FETCH_QUERY_RESULTS',\n FLUSH_FILES = 'FLUSH_FILES',\n GET_FEATURE_FLAGS = 'GET_FEATURE_FLAGS',\n GET_TABLE_NAMES = 'GET_TABLE_NAMES',\n GET_VERSION = 'GET_VERSION',\n GLOB_FILE_INFOS = 'GLOB_FILE_INFOS',\n INSERT_ARROW_FROM_IPC_STREAM = 'INSERT_ARROW_FROM_IPC_STREAM',\n INSERT_CSV_FROM_PATH = 'IMPORT_CSV_FROM_PATH',\n INSERT_JSON_FROM_PATH = 'IMPORT_JSON_FROM_PATH',\n INSTANTIATE = 'INSTANTIATE',\n OPEN = 'OPEN',\n PING = 'PING',\n POLL_PENDING_QUERY = 'POLL_PENDING_QUERY',\n REGISTER_FILE_BUFFER = 'REGISTER_FILE_BUFFER',\n REGISTER_FILE_HANDLE = 'REGISTER_FILE_HANDLE',\n REGISTER_FILE_URL = 'REGISTER_FILE_URL',\n RESET = 'RESET',\n RUN_PREPARED = 'RUN_PREPARED',\n RUN_QUERY = 'RUN_QUERY',\n SEND_PREPARED = 'SEND_PREPARED',\n START_PENDING_QUERY = 'START_PENDING_QUERY',\n TOKENIZE = 'TOKENIZE',\n}\n\nexport enum WorkerResponseType {\n CONNECTION_INFO = 'CONNECTION_INFO',\n ERROR = 'ERROR',\n FEATURE_FLAGS = 'FEATURE_FLAGS',\n FILE_BUFFER = 'FILE_BUFFER',\n FILE_INFOS = 'FILE_INFOS',\n FILE_SIZE = 'FILE_SIZE',\n FILE_STATISTICS = 'FILE_STATISTICS',\n INSTANTIATE_PROGRESS = 'INSTANTIATE_PROGRESS',\n LOG = 'LOG',\n PROGRESS_UPDATE = 'PROGRESS_UPDATE',\n OK = 'OK',\n PREPARED_STATEMENT_ID = 'PREPARED_STATEMENT_ID',\n QUERY_PLAN = 'QUERY_PLAN',\n QUERY_RESULT = 'QUERY_RESULT',\n QUERY_RESULT_CHUNK = 'QUERY_RESULT_CHUNK',\n QUERY_RESULT_HEADER = 'QUERY_RESULT_HEADER',\n QUERY_RESULT_HEADER_OR_NULL = 'QUERY_RESULT_HEADER_OR_NULL',\n REGISTERED_FILE = 'REGISTERED_FILE',\n SCRIPT_TOKENS = 'SCRIPT_TOKENS',\n SUCCESS = 'SUCCESS',\n TABLE_NAMES = 'TABLE_NAMES',\n VERSION_STRING = 'VERSION_STRING',\n}\n\nexport type WorkerRequest<T, P> = {\n readonly messageId: number;\n readonly type: T;\n readonly data: P;\n};\n\nexport type WorkerResponse<T, P> = {\n readonly messageId: number;\n readonly requestId: number;\n readonly type: T;\n readonly data: P;\n};\n\nexport type WorkerTaskReturnType<T extends WorkerTaskVariant> = T extends WorkerTask<any, any, infer P> ? P : never;\n\nexport class WorkerTask<T, D, P> {\n readonly type: T;\n readonly data: D;\n promise: Promise<P>;\n promiseResolver: (value: P | PromiseLike<P>) => void = () => {};\n promiseRejecter: (value: any) => void = () => {};\n\n constructor(type: T, data: D) {\n this.type = type;\n this.data = data;\n this.promise = new Promise<P>(\n (resolve: (value: P | PromiseLike<P>) => void, reject: (reason?: void) => void) => {\n this.promiseResolver = resolve;\n this.promiseRejecter = reject;\n },\n );\n }\n}\n\nexport type WorkerRequestVariant =\n | WorkerRequest<WorkerRequestType.CLOSE_PREPARED, [ConnectionID, StatementID]>\n | WorkerRequest<WorkerRequestType.CANCEL_PENDING_QUERY, number>\n | WorkerRequest<WorkerRequestType.COLLECT_FILE_STATISTICS, [string, boolean]>\n | WorkerRequest<WorkerRequestType.REGISTER_OPFS_FILE_NAME, [string]>\n | WorkerRequest<WorkerRequestType.CONNECT, null>\n | WorkerRequest<WorkerRequestType.COPY_FILE_TO_BUFFER, string>\n | WorkerRequest<WorkerRequestType.COPY_FILE_TO_PATH, [string, string]>\n | WorkerRequest<WorkerRequestType.CREATE_PREPARED, [ConnectionID, string]>\n | WorkerRequest<WorkerRequestType.DISCONNECT, number>\n | WorkerRequest<WorkerRequestType.DROP_FILE, string>\n | WorkerRequest<WorkerRequestType.DROP_FILES, string[] | undefined>\n | WorkerRequest<WorkerRequestType.EXPORT_FILE_STATISTICS, string>\n | WorkerRequest<WorkerRequestType.FETCH_QUERY_RESULTS, number>\n | WorkerRequest<WorkerRequestType.FLUSH_FILES, null>\n | WorkerRequest<WorkerRequestType.GET_FEATURE_FLAGS, null>\n | WorkerRequest<WorkerRequestType.GET_TABLE_NAMES, [number, string]>\n | WorkerRequest<WorkerRequestType.GET_VERSION, null>\n | WorkerRequest<WorkerRequestType.GLOB_FILE_INFOS, string>\n | WorkerRequest<\n WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM,\n [number, Uint8Array, ArrowInsertOptions | undefined]\n >\n | WorkerRequest<WorkerRequestType.INSERT_CSV_FROM_PATH, [number, string, CSVInsertOptions]>\n | WorkerRequest<WorkerRequestType.INSERT_JSON_FROM_PATH, [number, string, JSONInsertOptions]>\n | WorkerRequest<WorkerRequestType.INSTANTIATE, [string, string | null]>\n | WorkerRequest<WorkerRequestType.OPEN, DuckDBConfig>\n | WorkerRequest<WorkerRequestType.PING, null>\n | WorkerRequest<WorkerRequestType.POLL_PENDING_QUERY, number>\n | WorkerRequest<WorkerRequestType.REGISTER_FILE_BUFFER, [string, Uint8Array]>\n | WorkerRequest<WorkerRequestType.REGISTER_FILE_HANDLE, [string, any, DuckDBDataProtocol, boolean]>\n | WorkerRequest<WorkerRequestType.REGISTER_FILE_URL, [string, string, DuckDBDataProtocol, boolean]>\n | WorkerRequest<WorkerRequestType.RESET, null>\n | WorkerRequest<WorkerRequestType.RUN_PREPARED, [number, number, any[]]>\n | WorkerRequest<WorkerRequestType.RUN_QUERY, [number, string]>\n | WorkerRequest<WorkerRequestType.SEND_PREPARED, [number, number, any[]]>\n | WorkerRequest<WorkerRequestType.START_PENDING_QUERY, [number, string, boolean]>\n | WorkerRequest<WorkerRequestType.TOKENIZE, string>;\n\nexport type WorkerResponseVariant =\n | WorkerResponse<WorkerResponseType.CONNECTION_INFO, number>\n | WorkerResponse<WorkerResponseType.ERROR, any>\n | WorkerResponse<WorkerResponseType.FEATURE_FLAGS, number>\n | WorkerResponse<WorkerResponseType.FILE_BUFFER, Uint8Array>\n | WorkerResponse<WorkerResponseType.FILE_INFOS, WebFile[]>\n | WorkerResponse<WorkerResponseType.FILE_SIZE, number>\n | WorkerResponse<WorkerResponseType.FILE_STATISTICS, FileStatistics>\n | WorkerResponse<WorkerResponseType.INSTANTIATE_PROGRESS, InstantiationProgress>\n | WorkerResponse<WorkerResponseType.LOG, LogEntryVariant>\n | WorkerResponse<WorkerResponseType.PROGRESS_UPDATE, ProgressEntry>\n | WorkerResponse<WorkerResponseType.OK, null>\n | WorkerResponse<WorkerResponseType.PREPARED_STATEMENT_ID, number>\n | WorkerResponse<WorkerResponseType.QUERY_PLAN, Uint8Array>\n | WorkerResponse<WorkerResponseType.QUERY_RESULT, Uint8Array>\n | WorkerResponse<WorkerResponseType.QUERY_RESULT_CHUNK, Uint8Array | null>\n | WorkerResponse<WorkerResponseType.QUERY_RESULT_HEADER, Uint8Array>\n | WorkerResponse<WorkerResponseType.QUERY_RESULT_HEADER_OR_NULL, Uint8Array | null>\n | WorkerResponse<WorkerResponseType.SCRIPT_TOKENS, ScriptTokens>\n | WorkerResponse<WorkerResponseType.SUCCESS, boolean>\n | WorkerResponse<WorkerResponseType.TABLE_NAMES, string[]>\n | WorkerResponse<WorkerResponseType.VERSION_STRING, string>;\n\nexport type WorkerTaskVariant =\n | WorkerTask<WorkerRequestType.COLLECT_FILE_STATISTICS, [string, boolean], null>\n | WorkerTask<WorkerRequestType.REGISTER_OPFS_FILE_NAME, [string], null>\n | WorkerTask<WorkerRequestType.CLOSE_PREPARED, [number, number], null>\n | WorkerTask<WorkerRequestType.CONNECT, null, ConnectionID>\n | WorkerTask<WorkerRequestType.COPY_FILE_TO_BUFFER, string, Uint8Array>\n | WorkerTask<WorkerRequestType.COPY_FILE_TO_PATH, [string, string], null>\n | WorkerTask<WorkerRequestType.CREATE_PREPARED, [number, string], number>\n | WorkerTask<WorkerRequestType.DISCONNECT, ConnectionID, null>\n | WorkerTask<WorkerRequestType.DROP_FILE, string, null>\n | WorkerTask<WorkerRequestType.DROP_FILES, string[] | undefined, null>\n | WorkerTask<WorkerRequestType.EXPORT_FILE_STATISTICS, string, FileStatistics>\n | WorkerTask<WorkerRequestType.FETCH_QUERY_RESULTS, ConnectionID, Uint8Array | null>\n | WorkerTask<WorkerRequestType.FLUSH_FILES, null, null>\n | WorkerTask<WorkerRequestType.GET_FEATURE_FLAGS, null, number>\n | WorkerTask<WorkerRequestType.GET_TABLE_NAMES, [number, string], string[]>\n | WorkerTask<WorkerRequestType.GET_VERSION, null, string>\n | WorkerTask<\n WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM,\n [number, Uint8Array, ArrowInsertOptions | undefined],\n null\n >\n | WorkerTask<WorkerRequestType.INSERT_CSV_FROM_PATH, [number, string, CSVInsertOptions], null>\n | WorkerTask<WorkerRequestType.INSERT_JSON_FROM_PATH, [number, string, JSONInsertOptions], null>\n | WorkerTask<WorkerRequestType.INSTANTIATE, [string, string | null], null>\n | WorkerTask<WorkerRequestType.OPEN, DuckDBConfig, null>\n | WorkerTask<WorkerRequestType.PING, null, null>\n | WorkerTask<WorkerRequestType.REGISTER_FILE_BUFFER, [string, Uint8Array], null>\n | WorkerTask<WorkerRequestType.REGISTER_FILE_HANDLE, [string, any, DuckDBDataProtocol, boolean], null>\n | WorkerTask<WorkerRequestType.REGISTER_FILE_URL, [string, string, DuckDBDataProtocol, boolean], null>\n | WorkerTask<WorkerRequestType.GLOB_FILE_INFOS, string, WebFile[]>\n | WorkerTask<WorkerRequestType.RESET, null, null>\n | WorkerTask<WorkerRequestType.RUN_PREPARED, [number, number, any[]], Uint8Array>\n | WorkerTask<WorkerRequestType.RUN_QUERY, [ConnectionID, string], Uint8Array>\n | WorkerTask<WorkerRequestType.SEND_PREPARED, [number, number, any[]], Uint8Array>\n | WorkerTask<WorkerRequestType.START_PENDING_QUERY, [ConnectionID, string, boolean], Uint8Array | null>\n | WorkerTask<WorkerRequestType.POLL_PENDING_QUERY, ConnectionID, Uint8Array | null>\n | WorkerTask<WorkerRequestType.CANCEL_PENDING_QUERY, ConnectionID, boolean>\n | WorkerTask<WorkerRequestType.TOKENIZE, string, ScriptTokens>;\n", "import * as arrow from 'apache-arrow';\n\nexport interface SQLType {\n /// The sql type\n sqlType: string;\n /// Is nullable?\n nullable?: boolean;\n /// Decimal precision\n precision?: number;\n /// Decimal scaling\n scale?: number;\n /// Timezone\n timezone?: string;\n /// Byte width (FixedSizeBinary)\n byteWidth?: number;\n /// Key type\n keyType?: SQLType;\n /// Value type\n valueType?: SQLType;\n /// Fields\n fields?: SQLField[];\n}\n\nexport function arrowToSQLType(type: arrow.DataType): SQLType {\n switch (type.typeId) {\n case arrow.Type.Binary:\n return { sqlType: 'binary' };\n case arrow.Type.Bool:\n return { sqlType: 'bool' };\n case arrow.Type.Date:\n return { sqlType: 'date' };\n case arrow.Type.DateDay:\n return { sqlType: 'date32[d]' };\n case arrow.Type.DateMillisecond:\n return { sqlType: 'date64[ms]' };\n case arrow.Type.Decimal: {\n const dec = type as arrow.Decimal;\n return { sqlType: 'decimal', precision: dec.precision, scale: dec.scale };\n }\n case arrow.Type.Float:\n return { sqlType: 'float' };\n case arrow.Type.Float16:\n return { sqlType: 'float16' };\n case arrow.Type.Float32:\n return { sqlType: 'float32' };\n case arrow.Type.Float64:\n return { sqlType: 'float64' };\n case arrow.Type.Int:\n return { sqlType: 'int32' };\n case arrow.Type.Int16:\n return { sqlType: 'int16' };\n case arrow.Type.Int32:\n return { sqlType: 'int32' };\n case arrow.Type.Int64:\n return { sqlType: 'int64' };\n case arrow.Type.Uint16:\n return { sqlType: 'uint16' };\n case arrow.Type.Uint32:\n return { sqlType: 'uint32' };\n case arrow.Type.Uint64:\n return { sqlType: 'uint64' };\n case arrow.Type.Uint8:\n return { sqlType: 'uint8' };\n case arrow.Type.IntervalDayTime:\n return { sqlType: 'interval[dt]' };\n case arrow.Type.IntervalYearMonth:\n return { sqlType: 'interval[m]' };\n case arrow.Type.List: {\n const list = type as arrow.List;\n return {\n sqlType: 'list',\n valueType: arrowToSQLType(list.valueType),\n };\n }\n case arrow.Type.FixedSizeBinary: {\n const bin = type as arrow.FixedSizeBinary;\n return { sqlType: 'fixedsizebinary', byteWidth: bin.byteWidth };\n }\n case arrow.Type.Null:\n return { sqlType: 'null' };\n case arrow.Type.Utf8:\n return { sqlType: 'utf8' };\n case arrow.Type.Struct: {\n const struct_ = type as arrow.Struct;\n return {\n sqlType: 'struct',\n fields: struct_.children.map(c => arrowToSQLField(c.name, c.type)),\n };\n }\n case arrow.Type.Map: {\n const map_ = type as arrow.Map_;\n return {\n sqlType: 'map',\n keyType: arrowToSQLType(map_.keyType),\n valueType: arrowToSQLType(map_.valueType),\n };\n }\n case arrow.Type.Time:\n return { sqlType: 'time[s]' };\n case arrow.Type.TimeMicrosecond:\n return { sqlType: 'time[us]' };\n case arrow.Type.TimeMillisecond:\n return { sqlType: 'time[ms]' };\n case arrow.Type.TimeNanosecond:\n return { sqlType: 'time[ns]' };\n case arrow.Type.TimeSecond:\n return { sqlType: 'time[s]' };\n case arrow.Type.Timestamp: {\n const ts = type as arrow.Timestamp;\n return { sqlType: 'timestamp', timezone: ts.timezone || undefined };\n }\n case arrow.Type.TimestampSecond: {\n const ts = type as arrow.TimestampSecond;\n return { sqlType: 'timestamp[s]', timezone: ts.timezone || undefined };\n }\n case arrow.Type.TimestampMicrosecond: {\n const ts = type as arrow.TimestampMicrosecond;\n return { sqlType: 'timestamp[us]', timezone: ts.timezone || undefined };\n }\n case arrow.Type.TimestampNanosecond: {\n const ts = type as arrow.TimestampNanosecond;\n return { sqlType: 'timestamp[ns]', timezone: ts.timezone || undefined };\n }\n case arrow.Type.TimestampMillisecond: {\n const ts = type as arrow.TimestampMillisecond;\n return { sqlType: 'timestamp[ms]', timezone: ts.timezone || undefined };\n }\n }\n throw new Error(`unsupported arrow type: ${type.toString()}`);\n}\n\nexport type SQLField = SQLType & { name: string };\n\nexport function arrowToSQLField(name: string, type: arrow.DataType): SQLField {\n const t = arrowToSQLType(type) as SQLField;\n t.name = name;\n return t;\n}\n", "export const REGEX_OPFS_FILE = /'(opfs:\\/\\/\\S*?)'/g;\nexport const REGEX_OPFS_PROTOCOL = /(opfs:\\/\\/\\S*?)/g;\n\nexport function isOPFSProtocol(path: string): boolean {\n return path.search(REGEX_OPFS_PROTOCOL) > -1;\n}\n\nexport function searchOPFSFiles(text: string) {\n return [...text.matchAll(REGEX_OPFS_FILE)].map(match => match[1]);\n}", "import {\n WorkerRequestType,\n WorkerResponseType,\n WorkerResponseVariant,\n WorkerTaskVariant,\n WorkerTask,\n ConnectionID,\n WorkerTaskReturnType,\n} from './worker_request';\nimport { AsyncDuckDBBindings } from './async_bindings_interface';\nimport { Logger } from '../log';\nimport { AsyncDuckDBConnection } from './async_connection';\nimport { CSVInsertOptions, JSONInsertOptions, ArrowInsertOptions } from '../bindings/insert_options';\nimport { ScriptTokens } from '../bindings/tokens';\nimport { FileStatistics } from '../bindings/file_stats';\nimport { DuckDBConfig } from '../bindings/config';\nimport { InstantiationProgress } from '../bindings/progress';\nimport { arrowToSQLField } from '../json_typedef';\nimport { WebFile } from '../bindings/web_file';\nimport { DuckDBDataProtocol } from '../bindings';\nimport { searchOPFSFiles, isOPFSProtocol } from \"../utils/opfs_util\";\nimport { ProgressEntry } from '../log';\n\nconst TEXT_ENCODER = new TextEncoder();\n\nexport class AsyncDuckDB implements AsyncDuckDBBindings {\n /** The message handler */\n protected readonly _onMessageHandler: (event: MessageEvent) => void;\n /** The error handler */\n protected readonly _onErrorHandler: (event: ErrorEvent) => void;\n /** The close handler */\n protected readonly _onCloseHandler: () => void;\n\n /** Instantiate the module */\n protected _onInstantiationProgress: ((p: InstantiationProgress) => void)[] = [];\n\n /** Progress callbacks */\n protected _onExecutionProgress: ((p: ProgressEntry) => void)[] = [];\n\n /** The logger */\n protected readonly _logger: Logger;\n /** The worker */\n protected _worker: Worker | null = null;\n /** The promise for the worker shutdown */\n protected _workerShutdownPromise: Promise<null> | null = null;\n /** Make the worker as terminated */\n protected _workerShutdownResolver: (value: PromiseLike<null> | null) => void = () => {};\n\n /** The next message id */\n protected _nextMessageId = 0;\n /** The pending requests */\n protected _pendingRequests: Map<number, WorkerTaskVariant> = new Map();\n /** The DuckDBConfig */\n protected _config: DuckDBConfig = {};\n\n constructor(logger: Logger, worker: Worker | null = null) {\n this._logger = logger;\n this._onMessageHandler = this.onMessage.bind(this);\n this._onErrorHandler = this.onError.bind(this);\n this._onCloseHandler = this.onClose.bind(this);\n if (worker != null) this.attach(worker);\n }\n\n /** Get the logger */\n public get logger(): Logger {\n return this._logger;\n }\n\n /** Get the logger */\n public get config(): DuckDBConfig {\n return this._config;\n }\n\n /** Attach to worker */\n protected attach(worker: Worker): void {\n this._worker = worker;\n this._worker.addEventListener('message', this._onMessageHandler);\n this._worker.addEventListener('error', this._onErrorHandler);\n this._worker.addEventListener('close', this._onCloseHandler);\n this._workerShutdownPromise = new Promise<null>(\n (resolve: (value: PromiseLike<null> | null) => void, _reject: (reason?: void) => void) => {\n this._workerShutdownResolver = resolve;\n },\n );\n }\n\n /** Detach from worker */\n public detach(): void {\n if (!this._worker) return;\n this._worker.removeEventListener('message', this._onMessageHandler);\n this._worker.removeEventListener('error', this._onErrorHandler);\n this._worker.removeEventListener('close', this._onCloseHandler);\n this._worker = null;\n this._workerShutdownResolver(null);\n this._workerShutdownPromise = null;\n this._workerShutdownResolver = () => {};\n }\n\n /** Kill the worker */\n public async terminate(): Promise<void> {\n if (!this._worker) return;\n this._worker.terminate();\n //await this._workerShutdownPromise; TODO deadlocking in karma?\n this._worker = null;\n this._workerShutdownPromise = null;\n this._workerShutdownResolver = () => {};\n }\n\n /** Post a task */\n protected async postTask<W extends WorkerTaskVariant>(\n task: W,\n transfer: ArrayBuffer[] = [],\n ): Promise<WorkerTaskReturnType<W>> {\n if (!this._worker) {\n console.error('cannot send a message since the worker is not set!:' + task.type+\",\" + task.data);\n return undefined as any;\n }\n const mid = this._nextMessageId++;\n this._pendingRequests.set(mid, task);\n this._worker.postMessage(\n {\n messageId: mid,\n type: task.type,\n data: task.data,\n },\n transfer,\n );\n return (await task.promise) as WorkerTaskReturnType<W>;\n }\n\n /** Received a message */\n protected onMessage(event: MessageEvent): void {\n // Unassociated responses?\n const response = event.data as WorkerResponseVariant;\n switch (response.type) {\n // Request failed?\n case WorkerResponseType.PROGRESS_UPDATE: {\n for (const p of this._onExecutionProgress) {\n p(response.data);\n }\n return;\n }\n case WorkerResponseType.LOG: {\n this._logger.log(response.data);\n return;\n }\n // Call progress callback\n case WorkerResponseType.INSTANTIATE_PROGRESS: {\n for (const p of this._onInstantiationProgress) {\n p(response.data);\n }\n return;\n }\n }\n\n // Get associated task\n const task = this._pendingRequests.get(response.requestId);\n if (!task) {\n console.warn(`unassociated response: [${response.requestId}, ${response.type.toString()}]`);\n return;\n }\n this._pendingRequests.delete(response.requestId);\n\n // Request failed?\n if (response.type == WorkerResponseType.ERROR) {\n // Workaround for Firefox not being able to perform structured-clone on Native Errors\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1556604\n const e = new Error(response.data.message);\n e.name = response.data.name;\n if (Object.getOwnPropertyDescriptor(e, 'stack')?.writable) {\n e.stack = response.data.stack;\n }\n task.promiseRejecter(e);\n return;\n }\n\n // Otherwise differentiate between the tasks first\n switch (task.type) {\n case WorkerRequestType.CLOSE_PREPARED:\n case WorkerRequestType.COLLECT_FILE_STATISTICS:\n case WorkerRequestType.REGISTER_OPFS_FILE_NAME:\n case WorkerRequestType.COPY_FILE_TO_PATH:\n case WorkerRequestType.DISCONNECT:\n case WorkerRequestType.DROP_FILE:\n case WorkerRequestType.DROP_FILES:\n case WorkerRequestType.FLUSH_FILES:\n case WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM:\n case WorkerRequestType.INSERT_CSV_FROM_PATH:\n case WorkerRequestType.INSERT_JSON_FROM_PATH:\n case WorkerRequestType.OPEN:\n case WorkerRequestType.PING:\n case WorkerRequestType.REGISTER_FILE_BUFFER:\n case WorkerRequestType.REGISTER_FILE_HANDLE:\n case WorkerRequestType.REGISTER_FILE_URL:\n case WorkerRequestType.RESET:\n if (response.type == WorkerResponseType.OK) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.INSTANTIATE:\n this._onInstantiationProgress = [];\n if (response.type == WorkerResponseType.OK) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.GLOB_FILE_INFOS:\n if (response.type == WorkerResponseType.FILE_INFOS) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.GET_VERSION:\n if (response.type == WorkerResponseType.VERSION_STRING) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.GET_FEATURE_FLAGS:\n if (response.type == WorkerResponseType.FEATURE_FLAGS) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.GET_TABLE_NAMES:\n if (response.type == WorkerResponseType.TABLE_NAMES) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.TOKENIZE:\n if (response.type == WorkerResponseType.SCRIPT_TOKENS) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.COPY_FILE_TO_BUFFER:\n if (response.type == WorkerResponseType.FILE_BUFFER) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.EXPORT_FILE_STATISTICS:\n if (response.type == WorkerResponseType.FILE_STATISTICS) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.CONNECT:\n if (response.type == WorkerResponseType.CONNECTION_INFO) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.RUN_PREPARED:\n case WorkerRequestType.RUN_QUERY:\n if (response.type == WorkerResponseType.QUERY_RESULT) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.SEND_PREPARED:\n if (response.type == WorkerResponseType.QUERY_RESULT_HEADER) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.START_PENDING_QUERY:\n if (response.type == WorkerResponseType.QUERY_RESULT_HEADER_OR_NULL) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.POLL_PENDING_QUERY:\n if (response.type == WorkerResponseType.QUERY_RESULT_HEADER_OR_NULL) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.CANCEL_PENDING_QUERY:\n this._onInstantiationProgress = [];\n if (response.type == WorkerResponseType.SUCCESS) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.FETCH_QUERY_RESULTS:\n if (response.type == WorkerResponseType.QUERY_RESULT_CHUNK) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n case WorkerRequestType.CREATE_PREPARED:\n if (response.type == WorkerResponseType.PREPARED_STATEMENT_ID) {\n task.promiseResolver(response.data);\n return;\n }\n break;\n }\n task.promiseRejecter(new Error(`unexpected response type: ${response.type.toString()}`));\n }\n\n /** Received an error */\n protected onError(event: ErrorEvent): void {\n console.error(event);\n console.error(`error in duckdb worker: ${event.message}`);\n this._pendingRequests.clear();\n }\n\n /** The worker was closed */\n protected onClose(): void {\n this._workerShutdownResolver(null);\n if (this._pendingRequests.size != 0) {\n console.warn(`worker terminated with ${this._pendingRequests.size} pending requests`);\n return;\n }\n this._pendingRequests.clear();\n }\n\n /** Is in detached state, no worker defined */\n public isDetached(): boolean {\n return !this._worker;\n }\n\n /** Reset the duckdb */\n public async reset(): Promise<null> {\n const task = new WorkerTask<WorkerRequestType.RESET, null, null>(WorkerRequestType.RESET, null);\n return await this.postTask(task);\n }\n\n /** Ping the worker thread */\n public async ping(): Promise<any> {\n const task = new WorkerTask<WorkerRequestType.PING, null, null>(WorkerRequestType.PING, null);\n await this.postTask(task);\n }\n /** Try to drop a file */\n public async dropFile(name: string): Promise<null> {\n const task = new WorkerTask<WorkerRequestType.DROP_FILE, string, null>(WorkerRequestType.DROP_FILE, name);\n return await this.postTask(task);\n }\n /** Try to drop files */\n public async dropFiles(names?: string[]): Promise<null> {\n const task = new WorkerTask<WorkerRequestType.DROP_FILES, string[] | undefined, null>(WorkerRequestType.DROP_FILES, names);\n return await this.postTask(task);\n }\n /** Flush all files */\n public async flushFiles(): Promise<null> {\n const task = new WorkerTask<WorkerRequestType.FLUSH_FILES, null, null>(WorkerRequestType.FLUSH_FILES, null);\n return await this.postTask(task);\n }\n\n /** Open the database */\n public async instantiate(\n mainModuleURL: string,\n pthreadWorkerURL: string | null = null,\n progress: (progress: InstantiationProgress) => void = _p => {},\n ): Promise<null> {\n this._onInstantiationProgress.push(progress);\n const task = new WorkerTask<WorkerRequestType.INSTANTIATE, [string, string | null], null>(\n WorkerRequestType.INSTANTIATE,\n [mainModuleURL, pthreadWorkerURL],\n );\n return await this.postTask(task);\n }\n\n /** Get the version */\n public async getVersion(): Promise<string> {\n const task = new WorkerTask<WorkerRequestType.GET_VERSION, null, string>(WorkerRequestType.GET_VERSION, null);\n const version = await this.postTask(task);\n return version;\n }\n\n /** Get the feature flags */\n public async getFeatureFlags(): Promise<number> {\n const task = new WorkerTask<WorkerRequestType.GET_FEATURE_FLAGS, null, number>(\n WorkerRequestType.GET_FEATURE_FLAGS,\n null,\n );\n const feature = await this.postTask(task);\n return feature;\n }\n\n /** Open a new database */\n public async open(config: DuckDBConfig): Promise<void> {\n this._config = config;\n const task = new WorkerTask<WorkerRequestType.OPEN, DuckDBConfig, null>(WorkerRequestType.OPEN, config);\n await this.postTask(task);\n }\n\n /** Tokenize a script text */\n public async tokenize(text: string): Promise<ScriptTokens> {\n const task = new WorkerTask<WorkerRequestType.TOKENIZE, string, ScriptTokens>(WorkerRequestType.TOKENIZE, text);\n const tokens = await this.postTask(task);\n return tokens;\n }\n\n /** Connect to the database */\n public async connectInternal(): Promise<number> {\n const task = new WorkerTask<WorkerRequestType.CONNECT, null, ConnectionID>(WorkerRequestType.CONNECT, null);\n return await this.postTask(task);\n }\n\n /** Connect to the database */\n public async connect(): Promise<AsyncDuckDBConnection> {\n const cid = await this.connectInternal();\n return new AsyncDuckDBConnection(this, cid);\n }\n\n /** Disconnect from the database */\n public async disconnect(conn: ConnectionID): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.DISCONNECT, ConnectionID, null>(\n WorkerRequestType.DISCONNECT,\n conn,\n );\n await this.postTask(task);\n }\n\n /** Run a query */\n public async runQuery(conn: ConnectionID, text: string): Promise<Uint8Array> {\n if( this.shouldOPFSFileHandling() ){\n const files = await this.registerOPFSFileFromSQL(text);\n try {\n return await this._runQueryAsync(conn, text);\n } finally {\n if( files.length > 0 ){\n await this.dropFiles(files);\n }\n }\n } else {\n return await this._runQueryAsync(conn, text);\n }\n }\n\n private async _runQueryAsync(conn: ConnectionID, text: string): Promise<Uint8Array> {\n const task = new WorkerTask<WorkerRequestType.RUN_QUERY, [ConnectionID, string], Uint8Array>(\n WorkerRequestType.RUN_QUERY,\n [conn, text],\n );\n return await this.postTask(task);\n }\n\n /** Start a pending query */\n public async startPendingQuery(\n conn: ConnectionID,\n text: string,\n allowStreamResult: boolean = false,\n ): Promise<Uint8Array | null> {\n if( this.shouldOPFSFileHandling() ){\n const files = await this.registerOPFSFileFromSQL(text);\n try {\n return await this._startPendingQueryAsync(conn, text, allowStreamResult);\n } finally {\n if( files.length > 0 ){\n await this.dropFiles(files);\n }\n }\n } else {\n return await this._startPendingQueryAsync(conn, text, allowStreamResult);\n }\n }\n\n private async _startPendingQueryAsync(\n conn: ConnectionID,\n text: string,\n allowStreamResult: boolean = false,\n ): Promise<Uint8Array | null> {\n const task = new WorkerTask<\n WorkerRequestType.START_PENDING_QUERY,\n [ConnectionID, string, boolean],\n Uint8Array | null\n >(WorkerRequestType.START_PENDING_QUERY, [conn, text, allowStreamResult]);\n return await this.postTask(task);\n }\n\n /** Poll a pending query */\n public async pollPendingQuery(conn: ConnectionID): Promise<Uint8Array | null> {\n const task = new WorkerTask<WorkerRequestType.POLL_PENDING_QUERY, ConnectionID, Uint8Array | null>(\n WorkerRequestType.POLL_PENDING_QUERY,\n conn,\n );\n return await this.postTask(task);\n }\n /** Cancel a pending query */\n public async cancelPendingQuery(conn: ConnectionID): Promise<boolean> {\n const task = new WorkerTask<WorkerRequestType.CANCEL_PENDING_QUERY, ConnectionID, boolean>(\n WorkerRequestType.CANCEL_PENDING_QUERY,\n conn,\n );\n return await this.postTask(task);\n }\n\n /** Fetch query results */\n public async fetchQueryResults(conn: ConnectionID): Promise<Uint8Array | null> {\n const task = new WorkerTask<WorkerRequestType.FETCH_QUERY_RESULTS, ConnectionID, Uint8Array | null>(\n WorkerRequestType.FETCH_QUERY_RESULTS,\n conn,\n );\n return await this.postTask(task);\n }\n\n /** Get table names */\n public async getTableNames(conn: number, text: string): Promise<string[]> {\n const task = new WorkerTask<WorkerRequestType.GET_TABLE_NAMES, [number, string], string[]>(\n WorkerRequestType.GET_TABLE_NAMES,\n [conn, text],\n );\n return await this.postTask(task);\n }\n\n /** Prepare a statement and return its identifier */\n public async createPrepared(conn: number, text: string): Promise<number> {\n const task = new WorkerTask<WorkerRequestType.CREATE_PREPARED, [number, string], number>(\n WorkerRequestType.CREATE_PREPARED,\n [conn, text],\n );\n return await this.postTask(task);\n }\n /** Close a prepared statement */\n public async closePrepared(conn: number, statement: number): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.CLOSE_PREPARED, [number, number], null>(\n WorkerRequestType.CLOSE_PREPARED,\n [conn, statement],\n );\n await this.postTask(task);\n }\n /** Execute a prepared statement and return the full result */\n public async runPrepared(conn: number, statement: number, params: any[]): Promise<Uint8Array> {\n const task = new WorkerTask<WorkerRequestType.RUN_PREPARED, [ConnectionID, number, any[]], Uint8Array>(\n WorkerRequestType.RUN_PREPARED,\n [conn, statement, params],\n );\n return await this.postTask(task);\n }\n /** Execute a prepared statement and stream the result */\n public async sendPrepared(conn: number, statement: number, params: any[]): Promise<Uint8Array> {\n const task = new WorkerTask<WorkerRequestType.SEND_PREPARED, [ConnectionID, number, any[]], Uint8Array>(\n WorkerRequestType.SEND_PREPARED,\n [conn, statement, params],\n );\n return await this.postTask(task);\n }\n /** Glob file infos */\n public async globFiles(path: string): Promise<WebFile[]> {\n const task = new WorkerTask<WorkerRequestType.GLOB_FILE_INFOS, string, WebFile[]>(\n WorkerRequestType.GLOB_FILE_INFOS,\n path,\n );\n return await this.postTask(task);\n }\n /** Register file text */\n public async registerFileText(name: string, text: string): Promise<void> {\n const buffer = TEXT_ENCODER.encode(text);\n await this.registerFileBuffer(name, buffer);\n }\n /** Register a file path. */\n public async registerFileURL(\n name: string,\n url: string,\n proto: DuckDBDataProtocol,\n directIO: boolean,\n ): Promise<void> {\n if (url === undefined) {\n url = name;\n }\n const task = new WorkerTask<\n WorkerRequestType.REGISTER_FILE_URL,\n [string, string, DuckDBDataProtocol, boolean],\n null\n >(WorkerRequestType.REGISTER_FILE_URL, [name, url, proto, directIO]);\n await this.postTask(task);\n }\n\n /** Register an empty file buffer. */\n public async registerEmptyFileBuffer(name: string): Promise<void> {\n /*\n const task = new WorkerTask<WorkerRequestType.REGISTER_FILE_BUFFER, [string, Uint8Array], null>(\n WorkerRequestType.REGISTER_FILE_BUFFER,\n [name, new Uint8Array()],\n );\n await this.postTask(task);\n*/\n }\n\n /** Register a file buffer. */\n public async registerFileBuffer(name: string, buffer: Uint8Array): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.REGISTER_FILE_BUFFER, [string, Uint8Array], null>(\n WorkerRequestType.REGISTER_FILE_BUFFER,\n [name, buffer],\n );\n await this.postTask(task, [buffer.buffer]);\n }\n\n /** Register a file handle. */\n public async registerFileHandle<HandleType>(\n name: string,\n handle: HandleType,\n protocol: DuckDBDataProtocol,\n directIO: boolean,\n ): Promise<void> {\n const task = new WorkerTask<\n WorkerRequestType.REGISTER_FILE_HANDLE,\n [string, any, DuckDBDataProtocol, boolean],\n null\n >(WorkerRequestType.REGISTER_FILE_HANDLE, [name, handle, protocol, directIO]);\n await this.postTask(task, []);\n }\n\n /** Enable file statistics */\n public async registerOPFSFileName(name: string): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.REGISTER_OPFS_FILE_NAME, [string], null>(\n WorkerRequestType.REGISTER_OPFS_FILE_NAME,\n [name],\n );\n await this.postTask(task, []);\n }\n\n /** Enable file statistics */\n public async collectFileStatistics(name: string, enable: boolean): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.COLLECT_FILE_STATISTICS, [string, boolean], null>(\n WorkerRequestType.COLLECT_FILE_STATISTICS,\n [name, enable],\n );\n await this.postTask(task, []);\n }\n\n /** Export file statistics */\n public async exportFileStatistics(name: string): Promise<FileStatistics> {\n const task = new WorkerTask<WorkerRequestType.EXPORT_FILE_STATISTICS, string, FileStatistics>(\n WorkerRequestType.EXPORT_FILE_STATISTICS,\n name,\n );\n return await this.postTask(task, []);\n }\n\n /** Copy a file to a buffer. */\n public async copyFileToBuffer(name: string): Promise<Uint8Array> {\n const task = new WorkerTask<WorkerRequestType.COPY_FILE_TO_BUFFER, string, Uint8Array>(\n WorkerRequestType.COPY_FILE_TO_BUFFER,\n name,\n );\n return await this.postTask(task);\n }\n\n /** Copy a file to a path. */\n public async copyFileToPath(name: string, path: string): Promise<void> {\n const task = new WorkerTask<WorkerRequestType.COPY_FILE_TO_PATH, [string, string], null>(\n WorkerRequestType.COPY_FILE_TO_PATH,\n [name, path],\n );\n await this.postTask(task);\n }\n\n /** Insert arrow from an ipc stream */\n public async insertArrowFromIPCStream(\n conn: ConnectionID,\n buffer: Uint8Array,\n options?: ArrowInsertOptions,\n ): Promise<void> {\n if (buffer.length == 0) return;\n // Pass to the worker\n const task = new WorkerTask<\n WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM,\n [number, Uint8Array, ArrowInsertOptions | undefined],\n null\n >(WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM, [conn, buffer, options]);\n await this.postTask(task, [buffer.buffer]);\n }\n /** Insert a csv file */\n public async insertCSVFromPath(conn: ConnectionID, path: string, options: CSVInsertOptions): Promise<void> {\n // Flatten the table options\n if (options.columns !== undefined) {\n const out = [];\n for (const k in options.columns) {\n const type = options.columns[k];\n out.push(arrowToSQLField(k, type));\n }\n options.columnsFlat = out;\n delete options.columns;\n }\n\n // Pass to the worker\n const task = new WorkerTask<WorkerRequestType.INSERT_CSV_FROM_PATH, [number, string, CSVInsertOptions], null>(\n WorkerRequestType.INSERT_CSV_FROM_PATH,\n [conn, path, options],\n );\n await this.postTask(task);\n }\n /** Insert a json file */\n public async insertJSONFromPath(conn: ConnectionID, path: string, options: JSONInsertOptions): Promise<void> {\n // Flatten the table options\n if (options.columns !== undefined) {\n const out = [];\n for (const k in options.columns) {\n const type = options.columns[k];\n out.push(arrowToSQLField(k, type));\n }\n options.columnsFlat = out;\n delete options.columns;\n }\n\n // Pass to the worker\n const task = new WorkerTask<WorkerRequestType.INSERT_JSON_FROM_PATH, [number, string, JSONInsertOptions], null>(\n WorkerRequestType.INSERT_JSON_FROM_PATH,\n [conn, path, options],\n );\n await this.postTask(task);\n }\n\n private shouldOPFSFileHandling():boolean {\n if( isOPFSProtocol(this.config.path ?? \"\")){\n return this.config.opfs?.fileHandling == \"auto\";\n }\n return false;\n }\n\n private async registerOPFSFileFromSQL(text: string) {\n const files = searchOPFSFiles(text);\n const result: string[] = [];\n for (const file of files) {\n try {\n await this.registerOPFSFileName(file);\n result.push(file);\n } catch (e) {\n console.error(e);\n throw new Error(\"File Not found:\" + file);\n }\n }\n return result;\n }\n}\n", "import { DuckDBModule } from './duckdb_module';\nimport { UDFFunction } from './udf_function';\nimport * as udf_rt from './udf_runtime';\n\n/** Wrapper for TextDecoder to support shared array buffers */\nfunction TextDecoderWrapper(): (input?: BufferSource) => string {\n const decoder = new TextDecoder();\n return (data: any) => {\n if (typeof SharedArrayBuffer !== 'undefined' && data.buffer instanceof SharedArrayBuffer) {\n data = new Uint8Array(data);\n }\n return decoder.decode(data);\n };\n}\n/** Helper to decode text */\nexport const decodeText = TextDecoderWrapper();\n\n/** Copy a buffer */\nexport function failWith(mod: DuckDBModule, msg: string): void {\n console.error(`FAIL WITH: ${msg}`);\n mod.ccall('duckdb_web_fail_with', null, ['string'], [msg]);\n}\n\n/** Copy a buffer */\nexport function copyBuffer(mod: DuckDBModule, begin: number, length: number): Uint8Array {\n const buffer = mod.HEAPU8.subarray(begin, begin + length);\n const copy = new Uint8Array(new ArrayBuffer(buffer.byteLength));\n copy.set(buffer);\n return copy;\n}\n\n/** Decode a string */\nexport function readString(mod: DuckDBModule, begin: number, length: number): string {\n return decodeText(mod.HEAPU8.subarray(begin, begin + length));\n}\n\n/** The data protocol */\nexport enum DuckDBDataProtocol {\n BUFFER = 0,\n NODE_FS = 1,\n BROWSER_FILEREADER = 2,\n BROWSER_FSACCESS = 3,\n HTTP = 4,\n S3 = 5,\n}\n\n/** File flags for opening files*/\nexport enum FileFlags {\n //! Open file with read access\n FILE_FLAGS_READ = 1 << 0,\n //! Open file with write access\n FILE_FLAGS_WRITE = 1 << 1,\n //! Use direct IO when reading/writing to the file\n FILE_FLAGS_DIRECT_IO = 1 << 2,\n //! Create file if not exists, can only be used together with WRITE\n FILE_FLAGS_FILE_CREATE = 1 << 3,\n //! Always create a new file. If a file exists, the file is truncated. Cannot be used together with CREATE.\n FILE_FLAGS_FILE_CREATE_NEW = 1 << 4,\n //! Open file in append mode\n FILE_FLAGS_APPEND = 1 << 5,\n FILE_FLAGS_PRIVATE = 1 << 6,\n FILE_FLAGS_NULL_IF_NOT_EXISTS = 1 << 7,\n FILE_FLAGS_PARALLEL_ACCESS = 1 << 8,\n FILE_FLAGS_EXCLUSIVE_CREATE = 1 << 9,\n FILE_FLAGS_NULL_IF_EXISTS = 1 << 10\n}\n\n/** Configuration for the AWS S3 Filesystem */\nexport interface S3Config {\n region?: string;\n endpoint?: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n sessionToken?: string;\n}\n\n/** An info for a file registered with DuckDB */\nexport interface DuckDBFileInfo {\n cacheEpoch: number;\n fileId: number;\n fileName: string;\n dataProtocol: DuckDBDataProtocol;\n dataUrl: string | null;\n reliableHeadRequests?: boolean;\n allowFullHttpReads?: boolean;\n forceFullHttpReads?: boolean;\n s3Config?: S3Config;\n}\n\n/** Global info for all files registered with DuckDB */\nexport interface DuckDBGlobalFileInfo {\n cacheEpoch: number;\n reliableHeadRequests?: boolean;\n allowFullHttpReads?: boolean;\n forceFullHttpReads?: boolean;\n s3Config?: S3Config;\n}\n\nexport interface PreparedDBFileHandle {\n path: string;\n handle: any;\n fromCached: boolean;\n}\n\n/** Call a function with packed response buffer */\nexport function callSRet(\n mod: DuckDBModule,\n funcName: string,\n argTypes: Array<Emscripten.JSType>,\n args: Array<any>,\n): [number, number, number] {\n const stackPointer = mod.stackSave();\n\n // Allocate the packed response buffer\n const response = mod.stackAlloc(3 * 8);\n argTypes.unshift('number');\n args.unshift(response);\n\n // Do the call\n mod.ccall(funcName, null, argTypes, args);\n\n // Read the response\n const status = mod.HEAPF64[(response >> 3) + 0];\n const data = mod.HEAPF64[(response >> 3) + 1];\n const dataSize = mod.HEAPF64[(response >> 3) + 2];\n\n // Restore the stack\n mod.stackRestore(stackPointer);\n return [status, data, dataSize];\n}\n\n/** Drop response buffers */\nexport function dropResponseBuffers(mod: DuckDBModule): void {\n mod.ccall('duckdb_web_clear_response', null, [], []);\n}\n\n/** The duckdb runtime */\nexport interface DuckDBRuntime {\n _files?: Map<string, any>;\n _udfFunctions: Map<number, UDFFunction>;\n\n // Test a platform feature\n testPlatformFeature(mod: DuckDBModule, feature: number): boolean;\n\n // File APIs with dedicated file identifier\n getDefaultDataProtocol(mod: DuckDBModule): number;\n openFile(mod: DuckDBModule, fileId: number, flags: FileFlags): void;\n syncFile(mod: DuckDBModule, fileId: number): void;\n closeFile(mod: DuckDBModule, fileId: number): void;\n dropFile(mod: DuckDBModule, fileNamePtr: number, fileNameLen: number): void;\n getLastFileModificationTime(mod: DuckDBModule, fileId: number): number;\n truncateFile(mod: DuckDBModule, fileId: number, newSize: number): void;\n readFile(mod: DuckDBModule, fileId: number, buffer: number, bytes: number, location: number): number;\n writeFile(mod: DuckDBModule, fileId: number, buffer: number, bytes: number, location: number): number;\n\n // File APIs with path parameter\n removeDirectory(mod: DuckDBModule, pathPtr: number, pathLen: number): void;\n checkDirectory(mod: DuckDBModule, pathPtr: number, pathLen: number): boolean;\n createDirectory(mod: DuckDBModule, pathPtr: number, pathLen: number): void;\n listDirectoryEntries(mod: DuckDBModule, pathPtr: number, pathLen: number): boolean;\n glob(mod: DuckDBModule, pathPtr: number, pathLen: number): void;\n moveFile(mod: DuckDBModule, fromPtr: number, fromLen: number, toPtr: number, toLen: number): void;\n checkFile(mod: DuckDBModule, pathPtr: number, pathLen: number): boolean;\n removeFile(mod: DuckDBModule, pathPtr: number, pathLen: number): void;\n\n // Prepare a file handle that could only be acquired aschronously\n prepareFileHandle?: (path: string, protocol: DuckDBDataProtocol) => Promise<PreparedDBFileHandle[]>;\n prepareFileHandles?: (path: string[], protocol: DuckDBDataProtocol) => Promise<PreparedDBFileHandle[]>;\n prepareDBFileHandle?: (path: string, protocol: DuckDBDataProtocol) => Promise<PreparedDBFileHandle[]>;\n\n // Internal API - experimental\n progressUpdate(final: number, percentage: number, iteration: number): void;\n\n // Call a scalar UDF function\n callScalarUDF(\n mod: DuckDBModule,\n response: number,\n funcId: number,\n descPtr: number,\n descSize: number,\n ptrsPtr: number,\n ptrsSize: number,\n ): void;\n}\n\nexport const DEFAULT_RUNTIME: DuckDBRuntime = {\n _udfFunctions: new Map(),\n\n testPlatformFeature: (_mod: DuckDBModule, _feature: number): boolean => false,\n getDefaultDataProtocol: (_mod: DuckDBModule): number => DuckDBDataProtocol.BUFFER,\n openFile: (_mod: DuckDBModule, _fileId: number, flags: FileFlags): void => {},\n syncFile: (_mod: DuckDBModule, _fileId: number): void => {},\n closeFile: (_mod: DuckDBModule, _fileId: number): void => {},\n dropFile: (_mod: DuckDBModule, _fileNamePtr: number, _fileNameLen: number): void => {},\n getLastFileModificationTime: (_mod: DuckDBModule, _fileId: number): number => {\n return 0;\n },\n progressUpdate: (_final: number, _percentage: number, _iteration: number): void => {\n return;\n },\n truncateFile: (_mod: DuckDBModule, _fileId: number, _newSize: number): void => {},\n readFile: (_mod: DuckDBModule, _fileId: number, _buffer: number, _bytes: number, _location: number): number => {\n return 0;\n },\n writeFile: (_mod: DuckDBModule, _fileId: number, _buffer: number, _bytes: number, _location: number): number => {\n return 0;\n },\n\n removeDirectory: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): void => {},\n checkDirectory: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): boolean => {\n return false;\n },\n createDirectory: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): void => {},\n listDirectoryEntries: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): boolean => {\n return false;\n },\n glob: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): void => {},\n moveFile: (_mod: DuckDBModule, _fromPtr: number, _fromLen: number, _toPtr: number, _toLen: number): void => {},\n checkFile: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): boolean => {\n return false;\n },\n removeFile: (_mod: DuckDBModule, _pathPtr: number, _pathLen: number): void => {},\n callScalarUDF: (\n mod: DuckDBModule,\n response: number,\n funcId: number,\n descPtr: number,\n descSize: number,\n ptrsPtr: number,\n ptrsSize: number,\n ): void => {\n udf_rt.callScalarUDF(DEFAULT_RUNTIME, mod, response, funcId, descPtr, descSize, ptrsPtr, ptrsSize);\n },\n};\n", "import { DuckDBBindings, DuckDBDataProtocol } from '../bindings';\nimport { WorkerResponseVariant, WorkerRequestVariant, WorkerRequestType, WorkerResponseType } from './worker_request';\nimport { Logger, LogEntryVariant } from '../log';\nimport { InstantiationProgress } from '../bindings/progress';\n\nexport abstract class AsyncDuckDBDispatcher implements Logger {\n /** The bindings */\n protected _bindings: DuckDBBindings | null = null;\n /** The next message id */\n protected _nextMessageId = 0;\n\n /** Instantiate the wasm module */\n protected abstract instantiate(\n mainModule: string,\n pthreadWorker: string | null,\n progress: (p: InstantiationProgress) => void,\n ): Promise<DuckDBBindings>;\n /** Post a response to the main thread */\n protected abstract postMessage(response: WorkerResponseVariant, transfer: ArrayBuffer[]): void;\n\n /** Send log entry to the main thread */\n public log(entry: LogEntryVariant): void {\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: 0,\n type: WorkerResponseType.LOG,\n data: entry,\n },\n [],\n );\n }\n\n /** Send plain OK without further data */\n protected sendOK(request: WorkerRequestVariant): void {\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.OK,\n data: null,\n },\n [],\n );\n }\n\n /** Fail with an error */\n protected failWith(request: WorkerRequestVariant, e: Error): void {\n // Workaround for Firefox not being able to perform structured-clone on Native Errors\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1556604\n const obj: any = {\n name: e.name,\n message: e.message,\n stack: e.stack || undefined,\n };\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.ERROR,\n data: obj,\n },\n [],\n );\n return;\n }\n\n /** Process a request from the main thread */\n public async onMessage(request: WorkerRequestVariant): Promise<void> {\n // First process those requests that don't need bindings\n switch (request.type) {\n case WorkerRequestType.PING:\n this.sendOK(request);\n return;\n case WorkerRequestType.INSTANTIATE:\n if (this._bindings != null) {\n this.failWith(request, new Error('duckdb already initialized'));\n }\n try {\n this._bindings = await this.instantiate(request.data[0], request.data[1], p => {\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.INSTANTIATE_PROGRESS,\n data: p,\n },\n [],\n );\n });\n this.sendOK(request);\n } catch (e: any) {\n console.log(e);\n this._bindings = null;\n this.failWith(request, e);\n }\n return;\n default:\n break;\n }\n\n // Bindings not initialized?\n if (!this._bindings) {\n return this.failWith(request, new Error('duckdb is not initialized'));\n }\n\n // Catch every exception and forward it as error message to the main thread\n try {\n switch (request.type) {\n case WorkerRequestType.GET_VERSION:\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.VERSION_STRING,\n data: this._bindings.getVersion(),\n },\n [],\n );\n break;\n case WorkerRequestType.GET_FEATURE_FLAGS:\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.FEATURE_FLAGS,\n data: this._bindings.getFeatureFlags(),\n },\n [],\n );\n break;\n case WorkerRequestType.RESET:\n this._bindings.reset();\n this.sendOK(request);\n break;\n\n case WorkerRequestType.OPEN: {\n const path = request.data.path;\n if (path?.startsWith('opfs://')) {\n await this._bindings.prepareDBFileHandle(path, DuckDBDataProtocol.BROWSER_FSACCESS);\n request.data.useDirectIO = true;\n }\n this._bindings.open(request.data);\n this.sendOK(request);\n break;\n }\n case WorkerRequestType.DROP_FILE:\n this._bindings.dropFile(request.data);\n this.sendOK(request);\n break;\n case WorkerRequestType.DROP_FILES:\n this._bindings.dropFiles(request.data);\n this.sendOK(request);\n break;\n case WorkerRequestType.FLUSH_FILES:\n this._bindings.flushFiles();\n this.sendOK(request);\n break;\n case WorkerRequestType.CONNECT: {\n const conn = this._bindings.connect();\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.CONNECTION_INFO,\n data: conn.useUnsafe((_, c) => c),\n },\n [],\n );\n break;\n }\n case WorkerRequestType.DISCONNECT:\n this._bindings.disconnect(request.data);\n this.sendOK(request);\n break;\n case WorkerRequestType.CREATE_PREPARED: {\n const result = this._bindings.createPrepared(request.data[0], request.data[1]);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.PREPARED_STATEMENT_ID,\n data: result,\n },\n [],\n );\n break;\n }\n case WorkerRequestType.CLOSE_PREPARED: {\n this._bindings.closePrepared(request.data[0], request.data[1]);\n this.sendOK(request);\n break;\n }\n case WorkerRequestType.RUN_PREPARED: {\n const result = this._bindings.runPrepared(request.data[0], request.data[1], request.data[2]);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT,\n data: result,\n },\n [result.buffer],\n );\n break;\n }\n case WorkerRequestType.RUN_QUERY: {\n const result = this._bindings.runQuery(request.data[0], request.data[1]);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT,\n data: result,\n },\n [result.buffer],\n );\n break;\n }\n case WorkerRequestType.SEND_PREPARED: {\n const result = this._bindings.sendPrepared(request.data[0], request.data[1], request.data[2]);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT_HEADER,\n data: result,\n },\n [result.buffer],\n );\n break;\n }\n case WorkerRequestType.START_PENDING_QUERY: {\n const result = this._bindings.startPendingQuery(request.data[0], request.data[1], request.data[2]);\n const transfer = [];\n if (result) {\n transfer.push(result.buffer);\n }\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT_HEADER_OR_NULL,\n data: result,\n },\n transfer,\n );\n break;\n }\n case WorkerRequestType.POLL_PENDING_QUERY: {\n const result = this._bindings.pollPendingQuery(request.data);\n const transfer = [];\n if (result) {\n transfer.push(result.buffer);\n }\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT_HEADER_OR_NULL,\n data: result,\n },\n transfer,\n );\n break;\n }\n case WorkerRequestType.CANCEL_PENDING_QUERY: {\n const result = this._bindings.cancelPendingQuery(request.data);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.SUCCESS,\n data: result,\n },\n [],\n );\n break;\n }\n case WorkerRequestType.FETCH_QUERY_RESULTS: {\n const result = this._bindings.fetchQueryResults(request.data);\n const transfer = result ? [result.buffer] : [];\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.QUERY_RESULT_CHUNK,\n data: result,\n },\n transfer,\n );\n break;\n }\n case WorkerRequestType.GET_TABLE_NAMES: {\n const result = this._bindings.getTableNames(request.data[0], request.data[1]);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.TABLE_NAMES,\n data: result,\n },\n [],\n );\n break;\n }\n case WorkerRequestType.GLOB_FILE_INFOS: {\n const infos = this._bindings.globFiles(request.data);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.FILE_INFOS,\n data: infos,\n },\n [],\n );\n break;\n }\n\n case WorkerRequestType.REGISTER_FILE_URL:\n this._bindings.registerFileURL(request.data[0], request.data[1], request.data[2], request.data[3]);\n this.sendOK(request);\n break;\n\n case WorkerRequestType.REGISTER_FILE_BUFFER:\n this._bindings.registerFileBuffer(request.data[0], request.data[1]);\n this.sendOK(request);\n break;\n\n case WorkerRequestType.REGISTER_FILE_HANDLE:\n await this._bindings.registerFileHandleAsync(\n request.data[0],\n request.data[1],\n request.data[2],\n request.data[3],\n );\n this.sendOK(request);\n break;\n\n case WorkerRequestType.COPY_FILE_TO_PATH:\n this._bindings.copyFileToPath(request.data[0], request.data[1]);\n this.sendOK(request);\n break;\n\n case WorkerRequestType.COPY_FILE_TO_BUFFER: {\n const buffer = this._bindings.copyFileToBuffer(request.data);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.FILE_BUFFER,\n data: buffer,\n },\n [],\n );\n break;\n }\n case WorkerRequestType.COLLECT_FILE_STATISTICS:\n this._bindings.collectFileStatistics(request.data[0], request.data[1]);\n this.sendOK(request);\n break;\n\n case WorkerRequestType.REGISTER_OPFS_FILE_NAME:\n await this._bindings.registerOPFSFileName(request.data[0]);\n this.sendOK(request);\n break;\n\n case WorkerRequestType.EXPORT_FILE_STATISTICS: {\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.FILE_STATISTICS,\n data: this._bindings.exportFileStatistics(request.data),\n },\n [],\n );\n break;\n }\n case WorkerRequestType.INSERT_ARROW_FROM_IPC_STREAM: {\n this._bindings.insertArrowFromIPCStream(request.data[0], request.data[1], request.data[2]);\n this.sendOK(request);\n break;\n }\n case WorkerRequestType.INSERT_CSV_FROM_PATH: {\n this._bindings.insertCSVFromPath(request.data[0], request.data[1], request.data[2]);\n this.sendOK(request);\n break;\n }\n case WorkerRequestType.INSERT_JSON_FROM_PATH: {\n this._bindings.insertJSONFromPath(request.data[0], request.data[1], request.data[2]);\n this.sendOK(request);\n break;\n }\n case WorkerRequestType.TOKENIZE: {\n const result = this._bindings.tokenize(request.data);\n this.postMessage(\n {\n messageId: this._nextMessageId++,\n requestId: request.messageId,\n type: WorkerResponseType.SCRIPT_TOKENS,\n data: result,\n },\n [],\n );\n break;\n }\n }\n } catch (e: any) {\n console.log(e);\n return this.failWith(request, e);\n }\n }\n}\n", "export const bigInt=()=>(async e=>{try{return(await WebAssembly.instantiate(e)).instance.exports.b(BigInt(0))===BigInt(0)}catch(e){return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,126,1,126,3,2,1,0,7,5,1,1,98,0,0,10,6,1,4,0,32,0,11])),bulkMemory=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,3,1,0,1,10,14,1,12,0,65,0,65,0,65,0,252,10,0,0,11])),exceptions=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,6,64,25,11,11])),extendedConst=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,5,3,1,0,1,11,9,1,0,65,1,65,2,106,11,0])),gc=()=>(async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,95,1,120,0])))(),jspi=()=>(async()=>\"Suspender\"in WebAssembly)(),memory64=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,5,3,1,4,1])),multiMemory=()=>(async()=>{try{return new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,5,5,2,0,0,0,0])),!0}catch(e){return!1}})(),multiValue=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,0,2,127,127,3,2,1,0,10,8,1,6,0,65,0,65,0,11])),mutableGlobals=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,2,8,1,1,97,1,98,3,127,1,6,6,1,127,1,65,0,11,7,5,1,1,97,3,1])),referenceTypes=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,7,1,5,0,208,112,26,11])),relaxedSimd=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,15,1,13,0,65,1,253,15,65,2,253,15,253,128,2,11])),saturatedFloatToInt=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,12,1,10,0,67,0,0,0,0,252,0,26,11])),signExtensions=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,65,0,192,26,11])),simd=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11])),streamingCompilation=()=>(async()=>\"compileStreaming\"in WebAssembly)(),tailCall=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,6,1,4,0,18,0,11])),threads=()=>(async e=>{try{return\"undefined\"!=typeof MessageChannel&&(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(e)}catch(e){return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11])),typeReflection=()=>(async()=>\"Function\"in WebAssembly)();\n", "{\n \"name\": \"@duckdb/duckdb-wasm\",\n \"version\": \"1.33.1-dev17.0\",\n \"description\": \"DuckDB powered by WebAssembly\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/duckdb/duckdb-wasm.git\"\n },\n \"keywords\": [\n \"sql\",\n \"duckdb\",\n \"relational\",\n \"database\",\n \"data\",\n \"query\",\n \"wasm\",\n \"analytics\",\n \"olap\",\n \"arrow\",\n \"parquet\",\n \"json\",\n \"csv\"\n ],\n \"dependencies\": {\n \"apache-arrow\": \"^17.0.0\",\n \"qs\": \"^6.14.1\"\n },\n \"devDependencies\": {\n \"@types/emscripten\": \"^1.39.10\",\n \"@types/jasmine\": \"^5.1.13\",\n \"@typescript-eslint/eslint-plugin\": \"^6.21.0\",\n \"@typescript-eslint/parser\": \"^6.21.0\",\n \"esbuild\": \"^0.20.2\",\n \"eslint\": \"^8.57.0\",\n \"eslint-plugin-jasmine\": \"^4.1.3\",\n \"eslint-plugin-react\": \"^7.37.5\",\n \"fast-glob\": \"^3.3.2\",\n \"jasmine\": \"^5.13.0\",\n \"jasmine-core\": \"^5.1.2\",\n \"jasmine-spec-reporter\": \"^7.0.0\",\n \"js-sha256\": \"^0.11.1\",\n \"karma\": \"^6.4.2\",\n \"karma-chrome-launcher\": \"^3.2.0\",\n \"karma-coverage\": \"^2.2.1\",\n \"karma-firefox-launcher\": \"^2.1.3\",\n \"karma-jasmine\": \"^5.1.0\",\n \"karma-jasmine-html-reporter\": \"^2.1.0\",\n \"karma-sourcemap-loader\": \"^0.4.0\",\n \"karma-spec-reporter\": \"^0.0.36\",\n \"make-dir\": \"^4.0.0\",\n \"nyc\": \"^15.1.0\",\n \"prettier\": \"^3.2.5\",\n \"puppeteer\": \"^22.8.0\",\n \"rimraf\": \"^5.0.5\",\n \"s3rver\": \"^3.7.1\",\n \"typedoc\": \"^0.28.15\",\n \"typescript\": \"^5.3.3\",\n \"wasm-feature-detect\": \"^1.6.1\",\n \"web-worker\": \"^1.2.0\"\n },\n \"scripts\": {\n \"build:debug\": \"node bundle.mjs debug && tsc --emitDeclarationOnly\",\n \"build:release\": \"node bundle.mjs release && tsc --emitDeclarationOnly\",\n \"docs\": \"typedoc\",\n \"format\": \"prettier --write \\\"**/*.+(js|ts)\\\"\",\n \"report\": \"node ./coverage.mjs\",\n \"test:node\": \"node --enable-source-maps ../jasmine/bin/jasmine ./dist/tests-node.cjs\",\n \"test:node:debug\": \"node --inspect-brk --enable-source-maps ../jasmine/bin/jasmine ./dist/tests-node.cjs\",\n \"test:node:coverage\": \"nyc -r json --report-dir ./coverage/node node ../jasmine/bin/jasmine ./dist/tests-node.cjs\",\n \"test:firefox\": \"karma start ./karma/tests-firefox.cjs\",\n \"test:chrome\": \"karma start ./karma/tests-chrome.cjs\",\n \"test:chrome:eh\": \"karma start ./karma/tests-chrome-eh.cjs\",\n \"test:chrome:coverage\": \"karma start ./karma/tests-chrome-coverage.cjs\",\n \"test:browser\": \"karma start ./karma/tests-all.cjs\",\n \"test:browser:debug\": \"karma start ./karma/tests-debug.cjs\",\n \"test\": \"npm run test:chrome && npm run test:node\",\n \"test:coverage\": \"npm run test:chrome:coverage && npm run test:node:coverage && npm run report\",\n \"lint\": \"eslint src test\"\n },\n \"files\": [\n \"dist\",\n \"!dist/tests-*\",\n \"!dist/duckdb-browser-mvp.worker.js.map\",\n \"!dist/types/test\"\n ],\n \"main\": \"dist/duckdb-browser.cjs\",\n \"module\": \"dist/duckdb-browser.mjs\",\n \"types\": \"dist/duckdb-browser.d.ts\",\n \"jsdelivr\": \"dist/duckdb-browser.cjs\",\n \"unpkg\": \"dist/duckdb-browser.mjs\",\n \"sideEffects\": false,\n \"browser\": {\n \"fs\": false,\n \"path\": false,\n \"perf_hooks\": false,\n \"os\": false,\n \"worker_threads\": false\n },\n \"exports\": {\n \"./dist/duckdb-mvp.wasm\": \"./dist/duckdb-mvp.wasm\",\n \"./dist/duckdb-eh.wasm\": \"./dist/duckdb-eh.wasm\",\n \"./dist/duckdb-coi.wasm\": \"./dist/duckdb-coi.wasm\",\n \"./dist/duckdb-browser\": \"./dist/duckdb-browser.mjs\",\n \"./dist/duckdb-browser.cjs\": \"./dist/duckdb-browser.cjs\",\n \"./dist/duckdb-browser.mjs\": \"./dist/duckdb-browser.mjs\",\n \"./dist/duckdb-browser-coi.pthread.worker.js\": \"./dist/duckdb-browser-coi.pthread.worker.js\",\n \"./dist/duckdb-browser-coi.worker.js\": \"./dist/duckdb-browser-coi.worker.js\",\n \"./dist/duckdb-browser-eh.worker.js\": \"./dist/duckdb-browser-eh.worker.js\",\n \"./dist/duckdb-browser-mvp.worker.js\": \"./dist/duckdb-browser-mvp.worker.js\",\n \"./dist/duckdb-node\": \"./dist/duckdb-node.cjs\",\n \"./dist/duckdb-node.cjs\": \"./dist/duckdb-node.cjs\",\n \"./dist/duckdb-node-blocking\": \"./dist/duckdb-node-blocking.cjs\",\n \"./dist/duckdb-node-blocking.cjs\": \"./dist/duckdb-node-blocking.cjs\",\n \"./dist/duckdb-node-eh.worker.cjs\": \"./dist/duckdb-node-eh.worker.cjs\",\n \"./dist/duckdb-node-mvp.worker.cjs\": \"./dist/duckdb-node-mvp.worker.cjs\",\n \"./blocking\": {\n \"node\": {\n \"types\": \"./dist/duckdb-node-blocking.d.ts\",\n \"require\": \"./dist/duckdb-node-blocking.cjs\",\n \"import\": \"./dist/duckdb-node-blocking.cjs\"\n },\n \"types\": \"./dist/duckdb-node-blocking.d.ts\",\n \"import\": \"./dist/duckdb-node-blocking.mjs\",\n \"require\": \"./dist/duckdb-node-blocking.cjs\"\n },\n \".\": {\n \"browser\": {\n \"types\": \"./dist/duckdb-browser.d.ts\",\n \"import\": \"./dist/duckdb-browser.mjs\",\n \"require\": \"./dist/duckdb-browser.cjs\"\n },\n \"node\": {\n \"types\": \"./dist/duckdb-node.d.ts\",\n \"import\": \"./dist/duckdb-node.cjs\",\n \"require\": \"./dist/duckdb-node.cjs\"\n },\n \"types\": \"./dist/duckdb-browser.d.ts\",\n \"import\": \"./dist/duckdb-browser.mjs\",\n \"require\": \"./dist/duckdb-browser.cjs\"\n }\n }\n}\n", "import config from '../package.json';\n\nexport const PACKAGE_NAME = config.name;\nexport const PACKAGE_VERSION = config.version;\n\nconst VERSION_PARTS = config.version.split('.');\nexport const PACKAGE_VERSION_MAJOR = VERSION_PARTS[0];\nexport const PACKAGE_VERSION_MINOR = VERSION_PARTS[1];\nexport const PACKAGE_VERSION_PATCH = VERSION_PARTS[2];\n", "import * as check from 'wasm-feature-detect';\nimport { PACKAGE_NAME, PACKAGE_VERSION } from './version';\n\n// Platform check taken from here:\n// https://github.com/xtermjs/xterm.js/blob/master/src/common/Platform.ts#L21\n\ninterface INavigator {\n userAgent: string;\n language: string;\n platform: string;\n}\n\n// We're declaring a navigator global here as we expect it in all runtimes (node and browser), but\n// we want this module to live in common.\ndeclare const navigator: INavigator;\n\nexport const isNode = () => (typeof navigator === 'undefined' ? true : false);\nconst userAgent = () => (isNode() ? 'node' : navigator.userAgent);\nexport const isFirefox = () => userAgent().includes('Firefox');\nexport const isSafari = () => /^((?!chrome|android).)*safari/i.test(userAgent());\n\n/** Bundles have different characteristics:\n * - MVP: minimum viable product (uses features from first stable version of WebAssembly standard)\n * - EH: exception handling\n * - COI: cross origin isolation\n */\nexport interface DuckDBBundles {\n mvp: {\n mainModule: string;\n mainWorker: string;\n };\n eh?: {\n mainModule: string;\n mainWorker: string;\n };\n coi?: {\n mainModule: string;\n mainWorker: string;\n pthreadWorker: string;\n };\n}\n\nexport function getJsDelivrBundles(): DuckDBBundles {\n const jsdelivr_dist_url = `https://cdn.jsdelivr.net/npm/${PACKAGE_NAME}@${PACKAGE_VERSION}/dist/`;\n return {\n mvp: {\n mainModule: `${jsdelivr_dist_url}duckdb-mvp.wasm`,\n mainWorker: `${jsdelivr_dist_url}duckdb-browser-mvp.worker.js`,\n },\n eh: {\n mainModule: `${jsdelivr_dist_url}duckdb-eh.wasm`,\n mainWorker: `${jsdelivr_dist_url}duckdb-browser-eh.worker.js`,\n },\n // COI is still experimental, let the user opt in explicitly\n };\n}\n\nexport interface DuckDBBundle {\n mainModule: string;\n mainWorker: string | null;\n pthreadWorker: string | null;\n}\n\nexport interface PlatformFeatures {\n bigInt64Array: boolean;\n crossOriginIsolated: boolean;\n wasmExceptions: boolean;\n wasmSIMD: boolean;\n wasmBulkMemory: boolean;\n wasmThreads: boolean;\n}\n\nlet bigInt64Array: boolean | null = null;\nlet wasmExceptions: boolean | null = null;\nlet wasmThreads: boolean | null = null;\nlet wasmSIMD: boolean | null = null;\nlet wasmBulkMemory: boolean | null = null;\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\ndeclare namespace globalThis {\n let crossOriginIsolated: boolean;\n}\n\nexport async function getPlatformFeatures(): Promise<PlatformFeatures> {\n if (bigInt64Array == null) {\n bigInt64Array = typeof BigInt64Array != 'undefined';\n }\n if (wasmExceptions == null) {\n wasmExceptions = await check.exceptions();\n }\n if (wasmThreads == null) {\n wasmThreads = await check.threads();\n }\n if (wasmSIMD == null) {\n wasmSIMD = await check.simd();\n }\n if (wasmBulkMemory == null) {\n wasmBulkMemory = await check.bulkMemory();\n }\n return {\n bigInt64Array: bigInt64Array!,\n crossOriginIsolated: isNode() || globalThis.crossOriginIsolated || false,\n wasmExceptions: wasmExceptions!,\n wasmSIMD: wasmSIMD!,\n wasmThreads: wasmThreads!,\n wasmBulkMemory: wasmBulkMemory!,\n };\n}\n\nexport async function selectBundle(bundles: DuckDBBundles): Promise<DuckDBBundle> {\n const platform = await getPlatformFeatures();\n if (platform.wasmExceptions) {\n if (platform.wasmSIMD && platform.wasmThreads && platform.crossOriginIsolated && bundles.coi) {\n return {\n mainModule: bundles.coi.mainModule,\n mainWorker: bundles.coi.mainWorker,\n pthreadWorker: bundles.coi.pthreadWorker,\n };\n }\n if (bundles.eh) {\n return {\n mainModule: bundles.eh.mainModule,\n mainWorker: bundles.eh.mainWorker,\n pthreadWorker: null,\n };\n }\n }\n return {\n mainModule: bundles.mvp.mainModule,\n mainWorker: bundles.mvp.mainWorker,\n pthreadWorker: null,\n };\n}\n", "import Worker from 'web-worker';\n\nexport async function createWorker(url: string) {\n const request = new Request(url);\n const workerScript = await fetch(request);\n const workerURL = URL.createObjectURL(await workerScript.blob());\n return new Worker(workerURL);\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["require_browser", "__commonJSMin", "exports", "module", "DuckDBAccessMode", "TokenType", "LogLevel", "LogTopic", "LogEvent", "LogOrigin", "VoidLogger", "_entry", "ConsoleLogger", "level", "entry", "getLogLevelLabel", "getLogEventLabel", "event", "getLogTopicLabel", "topic", "getLogOriginLabel", "origin", "StatusCode", "IsArrowBuffer", "status", "IsDuckDBWasmRetry", "arrow", "AsyncDuckDBConnection", "bindings", "conn", "callback", "text", "buffer", "reader", "allowStreamResult", "header", "iter", "AsyncResultStreamIterator", "query", "stmt", "AsyncPreparedStatement", "table", "options", "db", "connectionId", "statementId", "params", "WorkerRequestType", "WorkerResponseType", "WorkerTask", "type", "data", "resolve", "reject", "arrow", "arrowToSQLType", "type", "dec", "c", "arrowToSQLField", "map_", "name", "t", "REGEX_OPFS_FILE", "REGEX_OPFS_PROTOCOL", "isOPFSProtocol", "path", "searchOPFSFiles", "text", "match", "TEXT_ENCODER", "AsyncDuckDB", "logger", "worker", "resolve", "_reject", "task", "transfer", "mid", "event", "_a", "response", "p", "e", "WorkerTask", "name", "names", "mainModuleURL", "pthreadWorkerURL", "progress", "_p", "config", "text", "cid", "AsyncDuckDBConnection", "conn", "files", "allowStreamResult", "statement", "params", "path", "buffer", "url", "proto", "directIO", "handle", "protocol", "enable", "options", "out", "k", "type", "arrowToSQLField", "_b", "isOPFSProtocol", "searchOPFSFiles", "result", "file", "TextDecoderWrapper", "decoder", "data", "decodeText", "DuckDBDataProtocol", "AsyncDuckDBDispatcher", "entry", "request", "e", "obj", "p", "path", "conn", "_", "c", "result", "transfer", "infos", "buffer", "bulkMemory", "exceptions", "simd", "threads", "e", "package_default", "PACKAGE_NAME", "package_default", "PACKAGE_VERSION", "VERSION_PARTS", "PACKAGE_VERSION_MAJOR", "PACKAGE_VERSION_MINOR", "PACKAGE_VERSION_PATCH", "isNode", "userAgent", "isFirefox", "isSafari", "getJsDelivrBundles", "jsdelivr_dist_url", "PACKAGE_NAME", "PACKAGE_VERSION", "bigInt64Array", "wasmExceptions", "wasmThreads", "wasmSIMD", "wasmBulkMemory", "getPlatformFeatures", "exceptions", "threads", "simd", "bulkMemory", "selectBundle", "bundles", "platform", "import_web_worker", "createWorker", "url", "request", "workerScript", "workerURL", "Worker"]
|
|
7
7
|
}
|
package/dist/duckdb-coi.wasm
CHANGED
|
Binary file
|
package/dist/duckdb-eh.wasm
CHANGED
|
Binary file
|