1
0
mirror of https://github.com/amir20/dozzle.git synced 2025-12-26 23:21:41 +01:00
Files
dozzle/assets/composable/duckdb.ts
2024-09-18 17:27:46 -07:00

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 };
}