mirror of
https://github.com/amir20/dozzle.git
synced 2025-12-26 07:13:41 +01:00
31 lines
914 B
TypeScript
31 lines
914 B
TypeScript
import * as duckdb from "@duckdb/duckdb-wasm";
|
|
const JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles();
|
|
|
|
export async function useDuckDB() {
|
|
let cleanup: (() => void) | undefined;
|
|
onUnmounted(() => cleanup?.());
|
|
|
|
const bundle = await duckdb.selectBundle(JSDELIVR_BUNDLES);
|
|
const worker_url = URL.createObjectURL(
|
|
new Blob([`importScripts("${bundle.mainWorker!}");`], { type: "text/javascript" }),
|
|
);
|
|
|
|
// Instantiate the asynchronus version of DuckDB-Wasm
|
|
const worker = new Worker(worker_url);
|
|
const logger = new duckdb.ConsoleLogger();
|
|
const db = new duckdb.AsyncDuckDB(logger, worker);
|
|
|
|
await db.instantiate(bundle.mainModule, bundle.pthreadWorker);
|
|
URL.revokeObjectURL(worker_url);
|
|
const conn = await db.connect();
|
|
|
|
cleanup = async () => {
|
|
console.log("Cleaning up DuckDB");
|
|
await conn.close();
|
|
await db.terminate();
|
|
worker.terminate();
|
|
};
|
|
|
|
return { db, conn };
|
|
}
|