|
| 1 | +/* global DUCKDB_MANIFEST */ |
1 | 2 | import * as duckdb from "npm:@duckdb/duckdb-wasm"; |
2 | 3 |
|
3 | 4 | // Adapted from https://observablehq.com/@cmudig/duckdb-client |
@@ -29,25 +30,21 @@ import * as duckdb from "npm:@duckdb/duckdb-wasm"; |
29 | 30 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
30 | 31 | // POSSIBILITY OF SUCH DAMAGE. |
31 | 32 |
|
32 | | -// Baked-in manifest. |
33 | | -// eslint-disable-next-line no-undef |
34 | | -const manifest = DUCKDB_MANIFEST; |
35 | | -const candidates = { |
36 | | - ...(manifest.bundles.includes("mvp") && { |
37 | | - mvp: { |
38 | | - mainModule: import.meta.resolve("npm:@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm"), |
39 | | - mainWorker: import.meta.resolve("npm:@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js") |
40 | | - } |
41 | | - }), |
42 | | - ...(manifest.bundles.includes("eh") && { |
43 | | - eh: { |
44 | | - mainModule: import.meta.resolve("npm:@duckdb/duckdb-wasm/dist/duckdb-eh.wasm"), |
45 | | - mainWorker: import.meta.resolve("npm:@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js") |
46 | | - } |
47 | | - }) |
| 33 | +const bundles = { |
| 34 | + mvp: DUCKDB_MANIFEST.platforms.mvp |
| 35 | + ? { |
| 36 | + mainModule: import.meta.resolve("npm:@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm"), |
| 37 | + mainWorker: import.meta.resolve("npm:@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js") |
| 38 | + } |
| 39 | + : undefined, |
| 40 | + eh: DUCKDB_MANIFEST.platforms.eh |
| 41 | + ? { |
| 42 | + mainModule: import.meta.resolve("npm:@duckdb/duckdb-wasm/dist/duckdb-eh.wasm"), |
| 43 | + mainWorker: import.meta.resolve("npm:@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js") |
| 44 | + } |
| 45 | + : undefined |
48 | 46 | }; |
49 | | -const bundle = await duckdb.selectBundle(candidates); |
50 | | -const activePlatform = manifest.bundles.find((key) => bundle.mainModule === candidates[key].mainModule); |
| 47 | +const bundle = duckdb.selectBundle(bundles); |
51 | 48 | const logger = new duckdb.ConsoleLogger(duckdb.LogLevel.WARNING); |
52 | 49 |
|
53 | 50 | let db; |
@@ -190,10 +187,12 @@ export class DuckDBClient { |
190 | 187 | Object.defineProperty(DuckDBClient.prototype, "dialect", {value: "duckdb"}); |
191 | 188 |
|
192 | 189 | async function registerExtensions(db, extensions) { |
| 190 | + const {mainModule} = await bundle; |
| 191 | + const platform = Object.keys(bundles).find((platform) => mainModule === bundles[platform].mainModule); |
193 | 192 | const con = await db.connect(); |
194 | 193 | try { |
195 | 194 | await Promise.all( |
196 | | - manifest.extensions.map(([name, {[activePlatform]: ref, load}]) => |
| 195 | + Object.entries(DUCKDB_MANIFEST.extensions).map(([name, {load, [platform]: ref}]) => |
197 | 196 | con |
198 | 197 | .query(`INSTALL "${name}" FROM '${import.meta.resolve(ref)}'`) |
199 | 198 | .then(() => (extensions === undefined ? load : extensions.includes(name)) && con.query(`LOAD "${name}"`)) |
@@ -328,9 +327,10 @@ async function insertArray(database, name, array, options) { |
328 | 327 | } |
329 | 328 |
|
330 | 329 | async function createDuckDB() { |
331 | | - const worker = await duckdb.createWorker(bundle.mainWorker); |
| 330 | + const {mainWorker, mainModule} = await bundle; |
| 331 | + const worker = await duckdb.createWorker(mainWorker); |
332 | 332 | const db = new duckdb.AsyncDuckDB(logger, worker); |
333 | | - await db.instantiate(bundle.mainModule); |
| 333 | + await db.instantiate(mainModule); |
334 | 334 | return db; |
335 | 335 | } |
336 | 336 |
|
|
0 commit comments