Spaces:
Running
Running
File size: 2,023 Bytes
34cfb9f d567792 34cfb9f d567792 34cfb9f d567792 34cfb9f d567792 34cfb9f f1e16d2 34cfb9f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import * as duckdb from "@duckdb/duckdb-wasm";
const production = import.meta.env.PROD;
const makeUrl = (path: string) =>
`https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm/dist/${path}`;
const MANUAL_BUNDLES:
| duckdb.DuckDBBundles
| (() => Promise<duckdb.DuckDBBundles>) = production
? {
mvp: {
mainModule: makeUrl("duckdb-mvp.wasm"),
mainWorker: makeUrl("duckdb-browser-mvp.worker.js"),
},
eh: {
mainModule: makeUrl("duckdb-eh.wasm"),
mainWorker: makeUrl("duckdb-browser-eh.worker.js"),
},
}
: async () => ({
mvp: {
mainModule: (
await import("@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm?url")
).default,
mainWorker: (
await import(
"@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js?url"
)
).default,
},
eh: {
mainModule: (
await import("@duckdb/duckdb-wasm/dist/duckdb-eh.wasm?url")
).default,
mainWorker: (
await import(
"@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js?url"
)
).default,
},
});
// https://duckdb.org/docs/api/wasm/instantiation#vite
export const createDb = async () => {
const bundles =
typeof MANUAL_BUNDLES === "function"
? await MANUAL_BUNDLES()
: MANUAL_BUNDLES;
// Select a bundle based on browser checks
const bundle = await duckdb.selectBundle(bundles);
// Instantiate the asynchronus version of DuckDB-wasm
let wk = bundle.mainWorker!;
if (wk.startsWith("http") && production) {
// fetch worker contents, convert to base64, inject into worker
const blob = await fetch(wk).then((r) => r.text());
wk = `data:text/javascript;base64,${btoa(blob)}`;
}
const worker = new Worker(wk);
const logger = new duckdb.ConsoleLogger();
const db = new duckdb.AsyncDuckDB(logger, worker);
await db.instantiate(bundle.mainModule, bundle.pthreadWorker);
return db;
};
export type DuckDB = typeof duckdb;
|