Tony Powell commited on
Commit
d567792
·
1 Parent(s): e6a8261

Serve duckdb wasm from cdn in production

Browse files
dist/assets/duckdb-eh-CL-fYs8o.wasm DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:38c0a08bb304ffdffcf3b9066da29b0f9c541d0c1e0edbeba0063580a301c177
3
- size 33317702
 
 
 
 
dist/assets/duckdb-mvp-CI5K6Di1.wasm DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:73fe41d7fba91ed42ae510b12115ebd8e9b54c32683bac4da8b02ab9641b4b21
3
- size 36927547
 
 
 
 
dist/assets/{index-Ca_b_QWh.js → index-D5yLWlyE.js} RENAMED
The diff for this file is too large to render. See raw diff
 
dist/index.html CHANGED
@@ -6,7 +6,7 @@
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
  <title>Vite + React + TS</title>
8
  <link rel="stylesheet" href="https://rsms.me/inter/inter.css">
9
- <script type="module" crossorigin src="/assets/index-Ca_b_QWh.js"></script>
10
  <link rel="stylesheet" crossorigin href="/assets/index-CcNIbOfP.css">
11
  </head>
12
  <body>
 
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
  <title>Vite + React + TS</title>
8
  <link rel="stylesheet" href="https://rsms.me/inter/inter.css">
9
+ <script type="module" crossorigin src="/assets/index-D5yLWlyE.js"></script>
10
  <link rel="stylesheet" crossorigin href="/assets/index-CcNIbOfP.css">
11
  </head>
12
  <body>
package.json CHANGED
@@ -6,7 +6,7 @@
6
  "license": "MIT",
7
  "scripts": {
8
  "dev": "vite",
9
- "build": "tsc -b && vite build",
10
  "lint": "eslint .",
11
  "preview": "vite preview"
12
  },
@@ -34,6 +34,7 @@
34
  "eslint-plugin-react-refresh": "^0.4.12",
35
  "globals": "^15.9.0",
36
  "postcss": "^8.4.47",
 
37
  "tailwindcss": "^3.4.13",
38
  "tsx": "^4.19.1",
39
  "typescript": "^5.5.3",
 
6
  "license": "MIT",
7
  "scripts": {
8
  "dev": "vite",
9
+ "build": "tsc -b && vite build && rimraf dist/assets/*.wasm",
10
  "lint": "eslint .",
11
  "preview": "vite preview"
12
  },
 
34
  "eslint-plugin-react-refresh": "^0.4.12",
35
  "globals": "^15.9.0",
36
  "postcss": "^8.4.47",
37
+ "rimraf": "^6.0.1",
38
  "tailwindcss": "^3.4.13",
39
  "tsx": "^4.19.1",
40
  "typescript": "^5.5.3",
pnpm-lock.yaml CHANGED
@@ -72,6 +72,9 @@ importers:
72
  postcss:
73
  specifier: ^8.4.47
74
  version: 8.4.47
 
 
 
75
  tailwindcss:
76
  specifier: ^3.4.13
77
@@ -1353,6 +1356,11 @@ packages:
1353
  resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
1354
  hasBin: true
1355
 
 
 
 
 
 
1356
1357
  resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1358
  engines: {node: '>=4'}
@@ -1422,6 +1430,10 @@ packages:
1422
1423
  resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
1424
 
 
 
 
 
1425
1426
  resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
1427
  hasBin: true
@@ -1494,6 +1506,10 @@ packages:
1494
1495
  resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
1496
 
 
 
 
 
1497
1498
  resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1499
 
@@ -1513,6 +1529,10 @@ packages:
1513
  resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1514
  engines: {node: '>=8.6'}
1515
 
 
 
 
 
1516
1517
  resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1518
 
@@ -1595,6 +1615,10 @@ packages:
1595
  resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
1596
  engines: {node: '>=16 || 14 >=14.18'}
1597
 
 
 
 
 
1598
1599
  resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
1600
 
@@ -1701,6 +1725,11 @@ packages:
1701
  resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1702
  engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1703
 
 
 
 
 
 
1704
1705
  resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==}
1706
  engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -3152,6 +3181,15 @@ snapshots:
3152
  package-json-from-dist: 1.0.1
3153
  path-scurry: 1.11.1
3154
 
 
 
 
 
 
 
 
 
 
3155
3156
 
3157
@@ -3203,6 +3241,10 @@ snapshots:
3203
  optionalDependencies:
3204
  '@pkgjs/parseargs': 0.11.0
3205
 
 
 
 
 
3206
3207
 
3208
@@ -3254,6 +3296,8 @@ snapshots:
3254
 
3255
3256
 
 
 
3257
3258
  dependencies:
3259
  yallist: 3.1.1
@@ -3272,6 +3316,10 @@ snapshots:
3272
  braces: 3.0.3
3273
  picomatch: 2.3.1
3274
 
 
 
 
 
3275
3276
  dependencies:
3277
  brace-expansion: 1.1.11
@@ -3342,6 +3390,11 @@ snapshots:
3342
  lru-cache: 10.4.3
3343
  minipass: 7.1.2
3344
 
 
 
 
 
 
3345
3346
 
3347
@@ -3428,6 +3481,11 @@ snapshots:
3428
 
3429
3430
 
 
 
 
 
 
3431
3432
  dependencies:
3433
  '@types/estree': 1.0.6
 
72
  postcss:
73
  specifier: ^8.4.47
74
  version: 8.4.47
75
+ rimraf:
76
+ specifier: ^6.0.1
77
+ version: 6.0.1
78
  tailwindcss:
79
  specifier: ^3.4.13
80
 
1356
  resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
1357
  hasBin: true
1358
 
1359
1360
+ resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==}
1361
+ engines: {node: 20 || >=22}
1362
+ hasBin: true
1363
+
1364
1365
  resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1366
  engines: {node: '>=4'}
 
1430
1431
  resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
1432
 
1433
1434
+ resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==}
1435
+ engines: {node: 20 || >=22}
1436
+
1437
1438
  resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
1439
  hasBin: true
 
1506
1507
  resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
1508
 
1509
1510
+ resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==}
1511
+ engines: {node: 20 || >=22}
1512
+
1513
1514
  resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1515
 
 
1529
  resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1530
  engines: {node: '>=8.6'}
1531
 
1532
1533
+ resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
1534
+ engines: {node: 20 || >=22}
1535
+
1536
1537
  resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1538
 
 
1615
  resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
1616
  engines: {node: '>=16 || 14 >=14.18'}
1617
 
1618
1619
+ resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
1620
+ engines: {node: 20 || >=22}
1621
+
1622
1623
  resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==}
1624
 
 
1725
  resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1726
  engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1727
 
1728
1729
+ resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
1730
+ engines: {node: 20 || >=22}
1731
+ hasBin: true
1732
+
1733
1734
  resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==}
1735
  engines: {node: '>=18.0.0', npm: '>=8.0.0'}
 
3181
  package-json-from-dist: 1.0.1
3182
  path-scurry: 1.11.1
3183
 
3184
3185
+ dependencies:
3186
+ foreground-child: 3.3.0
3187
+ jackspeak: 4.0.2
3188
+ minimatch: 10.0.1
3189
+ minipass: 7.1.2
3190
+ package-json-from-dist: 1.0.1
3191
+ path-scurry: 2.0.0
3192
+
3193
3194
 
3195
 
3241
  optionalDependencies:
3242
  '@pkgjs/parseargs': 0.11.0
3243
 
3244
3245
+ dependencies:
3246
+ '@isaacs/cliui': 8.0.2
3247
+
3248
3249
 
3250
 
3296
 
3297
3298
 
3299
3300
+
3301
3302
  dependencies:
3303
  yallist: 3.1.1
 
3316
  braces: 3.0.3
3317
  picomatch: 2.3.1
3318
 
3319
3320
+ dependencies:
3321
+ brace-expansion: 2.0.1
3322
+
3323
3324
  dependencies:
3325
  brace-expansion: 1.1.11
 
3390
  lru-cache: 10.4.3
3391
  minipass: 7.1.2
3392
 
3393
3394
+ dependencies:
3395
+ lru-cache: 11.0.1
3396
+ minipass: 7.1.2
3397
+
3398
3399
 
3400
 
3481
 
3482
3483
 
3484
3485
+ dependencies:
3486
+ glob: 11.0.0
3487
+ package-json-from-dist: 1.0.1
3488
+
3489
3490
  dependencies:
3491
  '@types/estree': 1.0.6
src/duck.ts CHANGED
@@ -1,24 +1,53 @@
1
  import * as duckdb from "@duckdb/duckdb-wasm";
2
- import duckdb_wasm from "@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm?url";
3
- import mvp_worker from "@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js?url";
4
- import duckdb_wasm_eh from "@duckdb/duckdb-wasm/dist/duckdb-eh.wasm?url";
5
- import eh_worker from "@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js?url";
6
 
7
- const MANUAL_BUNDLES: duckdb.DuckDBBundles = {
8
- mvp: {
9
- mainModule: duckdb_wasm,
10
- mainWorker: mvp_worker,
11
- },
12
- eh: {
13
- mainModule: duckdb_wasm_eh,
14
- mainWorker: eh_worker,
15
- },
16
- };
17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  // https://duckdb.org/docs/api/wasm/instantiation#vite
19
  export const createDb = async () => {
 
 
 
 
20
  // Select a bundle based on browser checks
21
- const bundle = await duckdb.selectBundle(MANUAL_BUNDLES);
22
  // Instantiate the asynchronus version of DuckDB-wasm
23
  const worker = new Worker(bundle.mainWorker!);
24
  const logger = new duckdb.ConsoleLogger();
 
1
  import * as duckdb from "@duckdb/duckdb-wasm";
 
 
 
 
2
 
3
+ const production = import.meta.env.PROD;
4
+
5
+ const makeUrl = (path: string) =>
6
+ `https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm/dist/${path}`;
 
 
 
 
 
 
7
 
8
+ const MANUAL_BUNDLES:
9
+ | duckdb.DuckDBBundles
10
+ | (() => Promise<duckdb.DuckDBBundles>) = production
11
+ ? {
12
+ mvp: {
13
+ mainModule: makeUrl("duckdb-mvp.wasm"),
14
+ mainWorker: makeUrl("duckdb-browser-mvp.worker.js"),
15
+ },
16
+ eh: {
17
+ mainModule: makeUrl("duckdb-eh.wasm"),
18
+ mainWorker: makeUrl("duckdb-browser-eh.worker.js"),
19
+ },
20
+ }
21
+ : async () => ({
22
+ mvp: {
23
+ mainModule: (
24
+ await import("@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm?url")
25
+ ).default,
26
+ mainWorker: (
27
+ await import(
28
+ "@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js?url"
29
+ )
30
+ ).default,
31
+ },
32
+ eh: {
33
+ mainModule: (
34
+ await import("@duckdb/duckdb-wasm/dist/duckdb-eh.wasm?url")
35
+ ).default,
36
+ mainWorker: (
37
+ await import(
38
+ "@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js?url"
39
+ )
40
+ ).default,
41
+ },
42
+ });
43
  // https://duckdb.org/docs/api/wasm/instantiation#vite
44
  export const createDb = async () => {
45
+ const bundles =
46
+ typeof MANUAL_BUNDLES === "function"
47
+ ? await MANUAL_BUNDLES()
48
+ : MANUAL_BUNDLES;
49
  // Select a bundle based on browser checks
50
+ const bundle = await duckdb.selectBundle(bundles);
51
  // Instantiate the asynchronus version of DuckDB-wasm
52
  const worker = new Worker(bundle.mainWorker!);
53
  const logger = new duckdb.ConsoleLogger();
vite.config.ts CHANGED
@@ -3,11 +3,11 @@ import { defineConfig } from "vite";
3
  import react from "@vitejs/plugin-react";
4
 
5
  // https://vitejs.dev/config/
6
- export default defineConfig({
7
  plugins: [react()],
8
  resolve: {
9
  alias: {
10
  "~": path.resolve(__dirname, "src"),
11
  },
12
  },
13
- });
 
3
  import react from "@vitejs/plugin-react";
4
 
5
  // https://vitejs.dev/config/
6
+ export default defineConfig(() => ({
7
  plugins: [react()],
8
  resolve: {
9
  alias: {
10
  "~": path.resolve(__dirname, "src"),
11
  },
12
  },
13
+ }));