Skip to content

Commit 2f3bf47

Browse files
committed
fix: cereusdb worker and CDN-backed wasmUrl
1 parent fdeb071 commit 2f3bf47

11 files changed

Lines changed: 65 additions & 41 deletions

packages/extension-cereusdb/src/cereusdb-sqldatabase.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,13 @@ async function loadWorkerFactoryForVariant(
1515
): Promise<WorkerFactory> {
1616
switch (variant) {
1717
case 'minimal':
18-
return (
19-
await import('./cereusdb-worker-minimal.ts?worker')
20-
).default;
18+
return (await import('./cereusdb-worker-minimal.ts?worker')).default;
2119
case 'standard':
22-
return (
23-
await import('./cereusdb-worker-standard.ts?worker')
24-
).default;
20+
return (await import('./cereusdb-worker-standard.ts?worker')).default;
2521
case 'full':
26-
return (
27-
await import('./cereusdb-worker-full.ts?worker')
28-
).default;
22+
return (await import('./cereusdb-worker-full.ts?worker')).default;
2923
case 'global':
30-
return (
31-
await import('./cereusdb-worker-global.ts?worker')
32-
).default;
24+
return (await import('./cereusdb-worker-global.ts?worker')).default;
3325
default: {
3426
const neverVariant: never = variant;
3527
throw new Error(`Unknown CereusDB variant: ${String(neverVariant)}`);
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { CereusDB } from '@cereusdb/full';
2-
import { runCereusWorker } from './cereusdb-worker-runtime';
2+
import { cereusWasmUrl, runCereusWorker } from './cereusdb-worker-runtime';
33

44
runCereusWorker(async () => {
5-
return (await CereusDB.create()) as Awaited<ReturnType<typeof CereusDB.create>>;
5+
return (await CereusDB.create({
6+
wasmUrl: cereusWasmUrl('@cereusdb/full'),
7+
})) as Awaited<ReturnType<typeof CereusDB.create>>;
68
});
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { CereusDB } from '@cereusdb/global';
2-
import { runCereusWorker } from './cereusdb-worker-runtime';
2+
import { cereusWasmUrl, runCereusWorker } from './cereusdb-worker-runtime';
33

44
runCereusWorker(async () => {
5-
return (await CereusDB.create()) as Awaited<ReturnType<typeof CereusDB.create>>;
5+
return (await CereusDB.create({
6+
wasmUrl: cereusWasmUrl('@cereusdb/global'),
7+
})) as Awaited<ReturnType<typeof CereusDB.create>>;
68
});
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { CereusDB } from '@cereusdb/minimal';
2-
import { runCereusWorker } from './cereusdb-worker-runtime';
2+
import { cereusWasmUrl, runCereusWorker } from './cereusdb-worker-runtime';
33

44
runCereusWorker(async () => {
5-
return (await CereusDB.create()) as Awaited<ReturnType<typeof CereusDB.create>>;
5+
return (await CereusDB.create({
6+
wasmUrl: cereusWasmUrl('@cereusdb/minimal'),
7+
})) as Awaited<ReturnType<typeof CereusDB.create>>;
68
});

packages/extension-cereusdb/src/cereusdb-worker-runtime.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/** Shared surface used by each variant worker entry. */
2+
import pkg from '../package.json';
23

34
export type CereusDbApi = {
45
sqlJSON: (sql: string) => Promise<Record<string, unknown>[]>;
@@ -12,6 +13,25 @@ type CereusWorkerMessage = {
1213
};
1314

1415
type CreateDb = () => Promise<CereusDbApi>;
16+
const DEFAULT_CEREUS_CDN_BASE = 'https://cdn.jsdelivr.net/npm';
17+
const CEREUS_DEPENDENCIES = (pkg.dependencies ?? {}) as Record<string, string>;
18+
19+
export function cereusWasmUrl(
20+
packageName:
21+
| '@cereusdb/minimal'
22+
| '@cereusdb/standard'
23+
| '@cereusdb/full'
24+
| '@cereusdb/global',
25+
): string {
26+
const configuredBase = (self as unknown as { __cereusdbCdnBase?: string })
27+
.__cereusdbCdnBase;
28+
const base = (configuredBase && configuredBase.trim()) || DEFAULT_CEREUS_CDN_BASE;
29+
const normalized = base.replace(/\/+$/, '');
30+
const spec = (CEREUS_DEPENDENCIES[packageName] ?? '').trim();
31+
const resolvedVersion = spec.replace(/^[~^><=\s]*/, '');
32+
const packageRef = resolvedVersion ? `${packageName}@${resolvedVersion}` : packageName;
33+
return `${normalized}/${packageRef}/dist/wasm/cereusdb_bg.wasm`;
34+
}
1535

1636
export function runCereusWorker(createDb: CreateDb): void {
1737
let db: CereusDbApi | null = null;
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { CereusDB } from '@cereusdb/standard';
2-
import { runCereusWorker } from './cereusdb-worker-runtime';
2+
import { cereusWasmUrl, runCereusWorker } from './cereusdb-worker-runtime';
33

44
runCereusWorker(async () => {
5-
return (await CereusDB.create()) as Awaited<ReturnType<typeof CereusDB.create>>;
5+
return (await CereusDB.create({
6+
wasmUrl: cereusWasmUrl('@cereusdb/standard'),
7+
})) as Awaited<ReturnType<typeof CereusDB.create>>;
68
});

packages/extension-cereusdb/src/vite-env.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,7 @@ declare module '*?worker&inline' {
88
const WorkerFactory: new () => Worker;
99
export default WorkerFactory;
1010
}
11+
declare module '*?worker&url' {
12+
const workerUrl: string;
13+
export default workerUrl;
14+
}

packages/extension-pwa/package.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
"import": "./dist/index.js"
1010
},
1111
"./vite": {
12-
"types": "./src/vite-pwa-plugin.d.ts",
13-
"import": "./src/vite-pwa-plugin.js"
12+
"types": "./dist/vite-pwa-plugin.d.ts",
13+
"import": "./dist/vite-pwa-plugin.js"
1414
},
1515
"./sw": {
1616
"import": "./src/sw.ts"
@@ -29,9 +29,7 @@
2929
"types": "./dist/index.d.ts",
3030
"files": [
3131
"dist",
32-
"src/sw.ts",
33-
"src/vite-pwa-plugin.js",
34-
"src/vite-pwa-plugin.d.ts"
32+
"src/sw.ts"
3533
],
3634
"scripts": {
3735
"build": "vite build"

packages/extension-pwa/src/vite-pwa-plugin.d.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

packages/extension-pwa/src/vite-pwa-plugin.js renamed to packages/extension-pwa/src/vite-pwa-plugin.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
import { fileURLToPath } from 'url';
22
import path from 'path';
3+
import type { PluginOption } from 'vite';
34
import { VitePWA } from 'vite-plugin-pwa';
45

6+
export type CreateDocksPwaPluginOptions = {
7+
basePath: string;
8+
appName: string;
9+
appDescription: string;
10+
maximumFileSizeToCacheInBytes: number;
11+
shortName?: string;
12+
};
13+
514
const DEFAULT_GLOB_PATTERNS = ['**/*.{js,css,html,ico,png,svg,webp,woff2,woff,ttf,wasm}'];
615
const DEFAULT_ASSETS = ['favicon.svg', 'logo.svg', 'logo-loading.svg'];
7-
const pwaSwPath = fileURLToPath(new URL('./sw.ts', import.meta.url));
16+
const pwaSwPath = fileURLToPath(import.meta.resolve('@eclipse-docks/extension-pwa/sw'));
817
const pwaSwDir = path.dirname(pwaSwPath);
918
const pwaSwFilename = path.basename(pwaSwPath);
1019

@@ -14,7 +23,7 @@ export function createDocksPwaPlugin({
1423
appDescription,
1524
maximumFileSizeToCacheInBytes,
1625
shortName = appName,
17-
}) {
26+
}: CreateDocksPwaPluginOptions): PluginOption {
1827
return VitePWA({
1928
registerType: 'autoUpdate',
2029
injectRegister: 'inline',

0 commit comments

Comments
 (0)