Skip to content

Commit 4a7c5ec

Browse files
committed
✨ feat: Inline SQLite worker source code into the main bundle
1 parent a28df7c commit 4a7c5ec

6 files changed

Lines changed: 34 additions & 12 deletions

File tree

package.json

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@haroonwaves/sqlite-wasm-easy",
3-
"version": "0.1.9",
3+
"version": "0.2.0",
44
"description": "A simple, zero-config wrapper around @sqlite.org/sqlite-wasm",
55
"type": "module",
66
"main": "./dist/index.js",
@@ -12,7 +12,7 @@
1212
"types": "./dist/index.d.ts"
1313
},
1414
"./worker": {
15-
"import": "./dist/worker/sqliteWorker.js"
15+
"import": "./dist/worker.js"
1616
}
1717
},
1818
"files": [
@@ -51,12 +51,11 @@
5151
],
5252
"author": "haroonwaves",
5353
"license": "MIT",
54-
"peerDependencies": {
54+
"dependencies": {
5555
"@sqlite.org/sqlite-wasm": "^3.51.2-build5"
5656
},
5757
"devDependencies": {
5858
"@eslint/js": "^9.39.2",
59-
"@sqlite.org/sqlite-wasm": "^3.51.2-build5",
6059
"@types/node": "^25.0.10",
6160
"cspell": "^9.6.0",
6261
"eslint": "^9.39.2",

pnpm-lock.yaml

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/core/database.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type {
77
WorkerResponse,
88
} from '../types/index';
99
import { mergeConfig } from './defaults';
10+
import SqliteWorker from '../worker/sqliteWorker?worker&inline';
1011

1112
/**
1213
* Main SQLiteWASM class - provides a simple interface to SQLite WASM
@@ -40,9 +41,7 @@ export class SQLiteWASM<Schema = any> {
4041

4142
private async initialize(): Promise<void> {
4243
// Create worker
43-
const workerPath =
44-
this.config.worker.path || new URL('./worker/sqliteWorker.js', document.baseURI).href;
45-
this.worker = new Worker(workerPath, { type: 'module' });
44+
this.worker = new SqliteWorker();
4645

4746
// Setup message handler
4847
this.worker.addEventListener('message', this.handleWorkerMessage.bind(this));

src/types/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ export interface WorkerMessage {
123123
config?: SQLiteWASMConfig;
124124
filename?: string;
125125
data?: Uint8Array;
126+
baseUrl?: string; // Base URL for resolving module imports in worker
126127
}
127128

128129
export interface WorkerResponse {

src/vite-env.d.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/// <reference types="vite/client" />
2+
3+
declare module '*?worker&inline' {
4+
const workerConstructor: {
5+
new (): Worker;
6+
};
7+
export default workerConstructor;
8+
}
9+
10+
declare module '*?worker' {
11+
const workerConstructor: {
12+
new (): Worker;
13+
};
14+
export default workerConstructor;
15+
}

vite.config.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@ export default defineConfig({
1212
lib: {
1313
entry: {
1414
index: resolve(__dirname, 'src/index.ts'),
15-
'worker/sqliteWorker': resolve(__dirname, 'src/worker/sqliteWorker.ts'),
15+
worker: resolve(__dirname, 'src/worker/sqliteWorker.ts'),
1616
},
1717
formats: ['es'],
1818
fileName: (format, entryName) => `${entryName}.js`,
1919
},
2020
rollupOptions: {
21-
external: ['@sqlite.org/sqlite-wasm'],
21+
// Don't mark sqlite-wasm as external - bundle it into the worker
22+
// so the inlined worker is self-contained and works offline
2223
output: {
2324
preserveModules: false,
2425
},
@@ -41,5 +42,11 @@ export default defineConfig({
4142
},
4243
worker: {
4344
format: 'es',
45+
rollupOptions: {
46+
output: {
47+
// Force everything into a single chunk for the worker
48+
inlineDynamicImports: true,
49+
},
50+
},
4451
},
4552
});

0 commit comments

Comments
 (0)