From 2a0e60cca522cf4b9c77fbbbcbf4cd94148d1b23 Mon Sep 17 00:00:00 2001 From: Arda Nakisci Date: Thu, 21 Aug 2025 14:54:32 +0300 Subject: [PATCH 01/14] rename project to sqlite-web --- .gitignore | 4 +- .vscode/settings.json | 4 +- CLAUDE.md | 22 ++++----- Cargo.lock | 4 +- Cargo.toml | 4 +- flake.nix | 8 ++-- .../Cargo.toml | 2 +- .../src/coordination.rs | 0 .../src/database.rs | 0 .../src/database_functions.rs | 0 .../src/lib.rs | 0 .../src/messages.rs | 0 .../src/worker.rs | 0 .../{sqlite-worker => sqlite-web}/Cargo.toml | 2 +- .../{sqlite-worker => sqlite-web}/src/lib.rs | 0 .../src/worker_template.rs | 0 scripts/local-bundle.sh | 45 ++++++++++--------- svelte-test/README.md | 4 +- svelte-test/bun.lock | 4 +- svelte-test/package-lock.json | 8 ++-- svelte-test/package.json | 2 +- svelte-test/src/routes/+page.svelte | 2 +- svelte-test/src/routes/sql/+page.svelte | 2 +- svelte-test/tests/fixtures/test-helpers.ts | 2 +- .../tests/integration/database-basic.test.ts | 2 +- .../tests/integration/error-handling.test.ts | 2 +- .../integration/opfs-persistence.test.ts | 2 +- .../integration/worker-communication.test.ts | 2 +- svelte-test/vite.config.ts | 6 +-- svelte-test/vitest.config.js | 6 +-- 30 files changed, 70 insertions(+), 69 deletions(-) rename packages/{sqlite-worker-core => sqlite-web-core}/Cargo.toml (95%) rename packages/{sqlite-worker-core => sqlite-web-core}/src/coordination.rs (100%) rename packages/{sqlite-worker-core => sqlite-web-core}/src/database.rs (100%) rename packages/{sqlite-worker-core => sqlite-web-core}/src/database_functions.rs (100%) rename packages/{sqlite-worker-core => sqlite-web-core}/src/lib.rs (100%) rename packages/{sqlite-worker-core => sqlite-web-core}/src/messages.rs (100%) rename packages/{sqlite-worker-core => sqlite-web-core}/src/worker.rs (100%) rename packages/{sqlite-worker => sqlite-web}/Cargo.toml (95%) rename packages/{sqlite-worker => sqlite-web}/src/lib.rs (100%) rename packages/{sqlite-worker => sqlite-web}/src/worker_template.rs (100%) diff --git a/.gitignore b/.gitignore index 2ae01a0..62f1b4e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /target /pkg # Generated files from bundle.sh -packages/sqlite-worker/src/embedded_worker.js -pkg/sqlite_worker_bg.wasm.b64 +packages/sqlite-web/src/embedded_worker.js +pkg/sqlite_web_bg.wasm.b64 diff --git a/.vscode/settings.json b/.vscode/settings.json index d573cb6..a91360b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,8 +5,8 @@ "rust-analyzer.cargo.target": "wasm32-unknown-unknown", "rust-analyzer.linkedProjects": [ "./Cargo.toml", - "./packages/sqlite-worker-core/Cargo.toml", - "./packages/sqlite-worker/Cargo.toml", + "./packages/sqlite-web-core/Cargo.toml", + "./packages/sqlite-web/Cargo.toml", "./lib/rain.math.float/Cargo.toml" ], "[rust]": { diff --git a/CLAUDE.md b/CLAUDE.md index adaa9ae..268fd90 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,19 +6,19 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ### Main Build Process - `./bundle.sh` - Complete build pipeline that: - 1. Builds `sqlite-worker-core` with `wasm-pack build --target web` + 1. Builds `sqlite-web-core` with `wasm-pack build --target web` 2. Embeds WASM into JavaScript worker template - 3. Builds `sqlite-worker` package with embedded core + 3. Builds `sqlite-web` package with embedded core 4. Packages with `npm pack` and updates Svelte test integration ### Individual Package Builds -- `cd packages/sqlite-worker-core && wasm-pack build --target web --out-dir ../../pkg` -- `cd packages/sqlite-worker && wasm-pack build --target web --out-dir ../../pkg` +- `cd packages/sqlite-web-core && wasm-pack build --target web --out-dir ../../pkg` +- `cd packages/sqlite-web && wasm-pack build --target web --out-dir ../../pkg` ### Testing - `./test.sh` - Run all Rust WASM tests (both packages) -- `cd packages/sqlite-worker-core && wasm-pack test --headless --chrome` - Test core package only -- `cd packages/sqlite-worker && wasm-pack test --headless --chrome` - Test worker package only +- `cd packages/sqlite-web-core && wasm-pack test --headless --chrome` - Test core package only +- `cd packages/sqlite-web && wasm-pack test --headless --chrome` - Test worker package only ### Svelte Test App - `cd svelte-test && bun dev` - Start development server @@ -31,7 +31,7 @@ This is a **Rust WebAssembly SQLite Worker** project with a workspace architectu ### Core Components -#### 1. `packages/sqlite-worker-core/` +#### 1. `packages/sqlite-web-core/` - **Purpose**: Core SQLite functionality and worker implementation - **Key modules**: - `worker.rs` - Main worker entry point called by `worker_main()` @@ -42,7 +42,7 @@ This is a **Rust WebAssembly SQLite Worker** project with a workspace architectu - **Dependencies**: sqlite-wasm-rs, alloy (Ethereum tooling), rain-math-float - **Output**: WASM module with JS glue code -#### 2. `packages/sqlite-worker/` +#### 2. `packages/sqlite-web/` - **Purpose**: Public API that creates self-contained workers with embedded core - **Key files**: - `lib.rs` - `SQLiteWasmDatabase` struct with async query interface @@ -59,13 +59,13 @@ This is a **Rust WebAssembly SQLite Worker** project with a workspace architectu #### 4. `svelte-test/` - **Purpose**: Integration test and example usage - **Technology**: SvelteKit + TypeScript + Vite -- **Pattern**: Imports `sqlite-worker` package from local tarball +- **Pattern**: Imports `sqlite-web` package from local tarball ### Build Process Flow -1. **Core Build**: `sqlite-worker-core` compiled to WASM + JS glue +1. **Core Build**: `sqlite-web-core` compiled to WASM + JS glue 2. **Embedding**: WASM converted to base64 and embedded into JavaScript template -3. **Wrapper Build**: `sqlite-worker` compiled with embedded worker generator +3. **Wrapper Build**: `sqlite-web` compiled with embedded worker generator 4. **Packaging**: NPM package created and integrated into Svelte test ### Key Design Patterns diff --git a/Cargo.lock b/Cargo.lock index 7864a05..1d8c332 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4154,7 +4154,7 @@ dependencies = [ ] [[package]] -name = "sqlite-worker" +name = "sqlite-web" version = "0.1.0" dependencies = [ "base64 0.21.7", @@ -4170,7 +4170,7 @@ dependencies = [ ] [[package]] -name = "sqlite-worker-core" +name = "sqlite-web-core" version = "0.1.0" dependencies = [ "alloy", diff --git a/Cargo.toml b/Cargo.toml index 4b51080..d12b60d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [workspace] members = [ - "packages/sqlite-worker-core", - "packages/sqlite-worker" + "packages/sqlite-web-core", + "packages/sqlite-web" ] resolver = "2" diff --git a/flake.nix b/flake.nix index eb4b246..a6c447a 100644 --- a/flake.nix +++ b/flake.nix @@ -15,10 +15,10 @@ name = "test-wasm"; body = '' set -euxo pipefail - cd packages/sqlite-worker-core + cd packages/sqlite-web-core wasm-pack test --headless --chrome cd ../.. - cd packages/sqlite-worker + cd packages/sqlite-web wasm-pack test --headless --chrome cd ../.. ''; @@ -28,10 +28,10 @@ name = "build-wasm"; body = '' set -euxo pipefail - cd packages/sqlite-worker-core + cd packages/sqlite-web-core wasm-pack build --target web --out-dir ../../pkg cd ../.. - cd packages/sqlite-worker + cd packages/sqlite-web wasm-pack build --target web --out-dir ../../pkg cd ../.. ''; diff --git a/packages/sqlite-worker-core/Cargo.toml b/packages/sqlite-web-core/Cargo.toml similarity index 95% rename from packages/sqlite-worker-core/Cargo.toml rename to packages/sqlite-web-core/Cargo.toml index 14930e9..f7a5f44 100644 --- a/packages/sqlite-worker-core/Cargo.toml +++ b/packages/sqlite-web-core/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "sqlite-worker-core" +name = "sqlite-web-core" version = "0.1.0" edition = "2021" diff --git a/packages/sqlite-worker-core/src/coordination.rs b/packages/sqlite-web-core/src/coordination.rs similarity index 100% rename from packages/sqlite-worker-core/src/coordination.rs rename to packages/sqlite-web-core/src/coordination.rs diff --git a/packages/sqlite-worker-core/src/database.rs b/packages/sqlite-web-core/src/database.rs similarity index 100% rename from packages/sqlite-worker-core/src/database.rs rename to packages/sqlite-web-core/src/database.rs diff --git a/packages/sqlite-worker-core/src/database_functions.rs b/packages/sqlite-web-core/src/database_functions.rs similarity index 100% rename from packages/sqlite-worker-core/src/database_functions.rs rename to packages/sqlite-web-core/src/database_functions.rs diff --git a/packages/sqlite-worker-core/src/lib.rs b/packages/sqlite-web-core/src/lib.rs similarity index 100% rename from packages/sqlite-worker-core/src/lib.rs rename to packages/sqlite-web-core/src/lib.rs diff --git a/packages/sqlite-worker-core/src/messages.rs b/packages/sqlite-web-core/src/messages.rs similarity index 100% rename from packages/sqlite-worker-core/src/messages.rs rename to packages/sqlite-web-core/src/messages.rs diff --git a/packages/sqlite-worker-core/src/worker.rs b/packages/sqlite-web-core/src/worker.rs similarity index 100% rename from packages/sqlite-worker-core/src/worker.rs rename to packages/sqlite-web-core/src/worker.rs diff --git a/packages/sqlite-worker/Cargo.toml b/packages/sqlite-web/Cargo.toml similarity index 95% rename from packages/sqlite-worker/Cargo.toml rename to packages/sqlite-web/Cargo.toml index e69bd74..a3a2180 100644 --- a/packages/sqlite-worker/Cargo.toml +++ b/packages/sqlite-web/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "sqlite-worker" +name = "sqlite-web" version = "0.1.0" edition = "2021" diff --git a/packages/sqlite-worker/src/lib.rs b/packages/sqlite-web/src/lib.rs similarity index 100% rename from packages/sqlite-worker/src/lib.rs rename to packages/sqlite-web/src/lib.rs diff --git a/packages/sqlite-worker/src/worker_template.rs b/packages/sqlite-web/src/worker_template.rs similarity index 100% rename from packages/sqlite-worker/src/worker_template.rs rename to packages/sqlite-web/src/worker_template.rs diff --git a/scripts/local-bundle.sh b/scripts/local-bundle.sh index 46c01b6..0a8351c 100755 --- a/scripts/local-bundle.sh +++ b/scripts/local-bundle.sh @@ -9,27 +9,27 @@ rm -rf pkg/*.tgz 2>/dev/null || true # Clear embedded_worker.js file contents first echo "๐Ÿงน Clearing embedded_worker.js..." -echo "" > packages/sqlite-worker/src/embedded_worker.js +echo "" > packages/sqlite-web/src/embedded_worker.js echo "๐Ÿ“ฆ Step 1: Building core package with web target..." -cd packages/sqlite-worker-core +cd packages/sqlite-web-core wasm-pack build --target web --out-dir ../../pkg cd ../.. # Check if build succeeded -if [ ! -f "pkg/sqlite_worker_core_bg.wasm" ] || [ ! -f "pkg/sqlite_worker_core.js" ]; then +if [ ! -f "pkg/sqlite_web_core_bg.wasm" ] || [ ! -f "pkg/sqlite_web_core.js" ]; then echo "โŒ Core build failed - missing generated files" exit 1 fi echo "๐Ÿ“– Processing core WASM file..." # Create base64 file (no line wrapping) -base64 < pkg/sqlite_worker_core_bg.wasm | tr -d '\n' > pkg/sqlite_worker_core_bg.wasm.b64 +base64 < pkg/sqlite_web_core_bg.wasm | tr -d '\n' > pkg/sqlite_web_core_bg.wasm.b64 echo "๐Ÿ”ง Generating embedded worker template..." # Create the embedded worker with fetch interceptor -cat > packages/sqlite-worker/src/embedded_worker.js << 'EOF' +cat > packages/sqlite-web/src/embedded_worker.js << 'EOF' (function(){ // Base64 decoder utility - works in both Node.js and browser self.__b64ToU8 = function(b64) { @@ -45,8 +45,8 @@ cat > packages/sqlite-worker/src/embedded_worker.js << 'EOF' return function(resource, init) { try { const resourceStr = typeof resource === 'string' ? resource : resource.toString(); - if (resourceStr.includes('sqlite_worker_core_bg.wasm') || resourceStr === './sqlite_worker_core_bg.wasm') { - const bytes = self.__b64ToU8(self.__WASM_B64_MAP['sqlite_worker_core_bg.wasm']); + if (resourceStr.includes('sqlite_web_core_bg.wasm') || resourceStr === './sqlite_web_core_bg.wasm') { + const bytes = self.__b64ToU8(self.__WASM_B64_MAP['sqlite_web_core_bg.wasm']); return Promise.resolve(new Response(bytes, { headers: { 'Content-Type': 'application/wasm' } })); @@ -59,7 +59,7 @@ cat > packages/sqlite-worker/src/embedded_worker.js << 'EOF' })(self.fetch || (() => Promise.reject(new Error('fetch not available')))); // WASM base64 data map - self.__WASM_B64_MAP = {'sqlite_worker_core_bg.wasm': '__WASM_B64_CORE__'}; + self.__WASM_B64_MAP = {'sqlite_web_core_bg.wasm': '__WASM_B64_CORE__'}; // Embedded wasm-bindgen glue code JS_GLUE_PLACEHOLDER @@ -67,7 +67,7 @@ JS_GLUE_PLACEHOLDER // Initialize the worker after everything is set up // For web target, wasm_bindgen is a function, not an object console.log('[Worker] Initializing core WASM...'); - wasm_bindgen('./sqlite_worker_core_bg.wasm').then(function(wasm) { + wasm_bindgen('./sqlite_web_core_bg.wasm').then(function(wasm) { console.log('[Worker] Core WASM loaded, starting worker_main...'); if (typeof wasm.worker_main === 'function') { wasm.worker_main(); @@ -91,25 +91,25 @@ echo "๐Ÿ”„ Assembling final worker..." # Create the final embedded worker by combining template + JS glue + base64 substitution { # Start with the template (everything before JS_GLUE_PLACEHOLDER) - sed '/JS_GLUE_PLACEHOLDER/,$d' packages/sqlite-worker/src/embedded_worker.js + sed '/JS_GLUE_PLACEHOLDER/,$d' packages/sqlite-web/src/embedded_worker.js # Add the JS glue code (convert exports to regular variables for worker context) - sed 's/^export function /function /; s/^export class /class /; s/^export { initSync };/self.initSync = initSync;/; s/^export default __wbg_init;/self.wasm_bindgen = __wbg_init;/; s/import\.meta\.url/self.location.href/g' pkg/sqlite_worker_core.js + sed 's/^export function /function /; s/^export class /class /; s/^export { initSync };/self.initSync = initSync;/; s/^export default __wbg_init;/self.wasm_bindgen = __wbg_init;/; s/import\.meta\.url/self.location.href/g' pkg/sqlite_web_core.js # Add the rest of the template (everything after JS_GLUE_PLACEHOLDER) - sed '1,/JS_GLUE_PLACEHOLDER/d' packages/sqlite-worker/src/embedded_worker.js -} | awk 'BEGIN{getline b64<"pkg/sqlite_worker_core_bg.wasm.b64"} {gsub(/__WASM_B64_CORE__/, b64)}1' > packages/sqlite-worker/src/embedded_worker.js.final + sed '1,/JS_GLUE_PLACEHOLDER/d' packages/sqlite-web/src/embedded_worker.js +} | awk 'BEGIN{getline b64<"pkg/sqlite_web_core_bg.wasm.b64"} {gsub(/__WASM_B64_CORE__/, b64)}1' > packages/sqlite-web/src/embedded_worker.js.final # Replace the original with the final version -mv packages/sqlite-worker/src/embedded_worker.js.final packages/sqlite-worker/src/embedded_worker.js +mv packages/sqlite-web/src/embedded_worker.js.final packages/sqlite-web/src/embedded_worker.js -echo "โœ… Core embedding complete! Generated packages/sqlite-worker/src/embedded_worker.js" -echo "๐Ÿ“Š Embedded WASM size: $(wc -c < pkg/sqlite_worker_core_bg.wasm.b64) base64 characters" -echo "๐Ÿ“Š JS glue code lines: $(wc -l < pkg/sqlite_worker_core.js)" +echo "โœ… Core embedding complete! Generated packages/sqlite-web/src/embedded_worker.js" +echo "๐Ÿ“Š Embedded WASM size: $(wc -c < pkg/sqlite_web_core_bg.wasm.b64) base64 characters" +echo "๐Ÿ“Š JS glue code lines: $(wc -l < pkg/sqlite_web_core.js)" echo "" echo "๐Ÿ“ฆ Step 2: Building main package with embedded core..." -cd packages/sqlite-worker +cd packages/sqlite-web wasm-pack build --target web --out-dir ../../pkg cd ../.. @@ -122,14 +122,15 @@ cd .. # Update Svelte integration with fresh package echo "๐Ÿ”„ Updating Svelte integration..." cd svelte-test -npm remove sqlite-worker +npm remove sqlite-web +npm remove sqlite-web rm -rf node_modules -npm install ../pkg/sqlite-worker-*.tgz +npm install ../pkg/sqlite-web-*.tgz cd .. echo "" echo "๐Ÿš€ Your SQLite worker is now fully self-contained with workspace architecture!" -echo " โœ… Core logic is in sqlite-worker-core" -echo " โœ… Public API is in sqlite-worker" +echo " โœ… Core logic is in sqlite-web-core" +echo " โœ… Public API is in sqlite-web" echo " โœ… No circular dependencies" echo " โœ… Clean build process" \ No newline at end of file diff --git a/svelte-test/README.md b/svelte-test/README.md index 9f91e9f..70b8eac 100644 --- a/svelte-test/README.md +++ b/svelte-test/README.md @@ -68,7 +68,7 @@ src/ The project imports and uses the SQLite worker package: ```javascript -import init, { DatabaseConnection } from 'sqlite-worker'; +import init, { DatabaseConnection } from 'sqlite-web'; // Initialize WASM module await init(); @@ -82,7 +82,7 @@ const result = await db.query("SELECT * FROM users"); ## Dependencies -- **sqlite-worker** - Local WASM package from `../pkg/sqlite-worker-0.1.0.tgz` +- **sqlite-web** - Local WASM package from `../pkg/sqlite-web-0.1.0.tgz` - **@sveltejs/kit** - SvelteKit framework - **vite** - Build tool and development server - **typescript** - Type checking and compilation diff --git a/svelte-test/bun.lock b/svelte-test/bun.lock index 4dd2015..06e6443 100644 --- a/svelte-test/bun.lock +++ b/svelte-test/bun.lock @@ -4,7 +4,7 @@ "": { "name": "svelte-test", "dependencies": { - "sqlite-worker": "file:../pkg/sqlite-worker-0.1.0.tgz", + "sqlite-web": "file:../pkg/sqlite-web-0.1.0.tgz", }, "devDependencies": { "@eslint/js": "^9.33.0", @@ -490,7 +490,7 @@ "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], - "sqlite-worker": ["sqlite-worker@../pkg/sqlite-worker-0.1.0.tgz", {}], + "sqlite-web": ["sqlite-web@../pkg/sqlite-web-0.1.0.tgz", {}], "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], diff --git a/svelte-test/package-lock.json b/svelte-test/package-lock.json index 105aa5b..3d78d1a 100644 --- a/svelte-test/package-lock.json +++ b/svelte-test/package-lock.json @@ -8,7 +8,7 @@ "name": "svelte-test", "version": "0.0.1", "dependencies": { - "sqlite-worker": "file:../pkg/sqlite-worker-0.1.0.tgz" + "sqlite-web": "file:../pkg/sqlite-web-0.1.0.tgz" }, "devDependencies": { "@sveltejs/adapter-auto": "^6.0.0", @@ -3198,10 +3198,10 @@ "node": ">=0.10.0" } }, - "node_modules/sqlite-worker": { + "node_modules/sqlite-web": { "version": "0.1.0", - "resolved": "file:../pkg/sqlite-worker-0.1.0.tgz", - "integrity": "sha512-LxRgrv++0VucrUlXoqRzsHMMxcfTmluxlLPOmkjKS2epeGtKbgpwsJVJvSxgYqIw4P0GpJB0/Mvf2Tw8dRAN8w==" + "resolved": "file:../pkg/sqlite-web-0.1.0.tgz", + "integrity": "sha512-3RgOOjqnL3U0rHE0hkoDQ1OMv4DIXz1LmJyiqpxeRlSId+SJHrtbfZH0xn3eJyXR/b3YoeZD3oV/1yniJjuX3w==" }, "node_modules/stackback": { "version": "0.0.2", diff --git a/svelte-test/package.json b/svelte-test/package.json index 62d198e..cde76a6 100644 --- a/svelte-test/package.json +++ b/svelte-test/package.json @@ -40,6 +40,6 @@ }, "type": "module", "dependencies": { - "sqlite-worker": "file:../pkg/sqlite-worker-0.1.0.tgz" + "sqlite-web": "file:../pkg/sqlite-web-0.1.0.tgz" } } diff --git a/svelte-test/src/routes/+page.svelte b/svelte-test/src/routes/+page.svelte index 37ffdc3..6987cbf 100644 --- a/svelte-test/src/routes/+page.svelte +++ b/svelte-test/src/routes/+page.svelte @@ -1,7 +1,7 @@