Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 119 additions & 0 deletions .github/workflows/npm-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
name: NPM Packages Release
on:
push:
branches:
- main

jobs:
release:
if: ${{ github.ref == 'refs/heads/main' && !startsWith(github.event.head_commit.message, 'NPM Package Release') }}
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
outputs:
version: ${{ env.NEW_VERSION }}
steps:
- uses: actions/checkout@v4
with:
ssh-key: ${{ secrets.PUBLISH_PRIVATE_KEY }}
submodules: recursive
fetch-depth: 0

- uses: DeterminateSystems/nix-installer-action@main
with:
determinate: true
- uses: DeterminateSystems/flakehub-cache-action@main

- name: Install NodeJS v22
uses: actions/setup-node@v4
with:
node-version: 22
cache: "npm"

- run: nix develop -c build-submodules

- run: nix develop -c local-bundle

- name: Test full integration
run: nix develop -c test-full-integration

- name: Git Config
run: |
git config --global user.email "${{ secrets.CI_GIT_EMAIL }}"
git config --global user.name "${{ secrets.CI_GIT_USER }}"
# get hash of latest published pkgs from npm and concat them
- name: Get Old Hash
run: |
OLD_HASH=$(npm view @rainlanguage/sqlite-web@latest dist.shasum 2>/dev/null || echo "none")
echo "OLD_HASH=$OLD_HASH" >> $GITHUB_ENV
echo "old hash: $OLD_HASH"
# Build the package and calc hash
- name: Build and Get New Hash
run: |
nix develop -c local-bundle
NEW_HASH=$(cd pkg && npm pack --silent | xargs shasum | cut -c1-40)
echo "NEW_HASH=$NEW_HASH" >> $GITHUB_ENV
echo "new hash: $NEW_HASH"
rm -f pkg/*.tgz
# from here on, we'll skip if OLD_HASH and NEW_HASH are the same (ie no publish)
# this means we need to skip every step by using an if statement.
# set npm version in pkg directory
- name: Set Version
if: ${{ env.OLD_HASH != env.NEW_HASH }}
run: |
NEW_VERSION=$(npm version prerelease --preid alpha --no-git-tag-version)
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV
# Commit changes and tag
- name: Commit And Tag
if: ${{ env.OLD_HASH != env.NEW_HASH }}
run: |
git add "pkg/package.json"
git commit -m "NPM Package Release v${{ env.NEW_VERSION }}"
git tag npm-v${{ env.NEW_VERSION }}
Comment on lines +72 to +78
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is fine as we use this workflow in other repos

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@findolor, understood! Thanks for the clarification - I'll note that this workflow pattern works well for your organization's established practices.


✏️ Learnings added
Learnt from: findolor
PR: rainlanguage/sqlite-web#2
File: .github/workflows/npm-release.yaml:79-85
Timestamp: 2025-08-21T12:24:24.582Z
Learning: The rainlanguage organization uses workflows that commit pkg/package.json as part of their NPM release process across multiple repositories, and this pattern works fine for their setup.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

# Push the commit to remote
- name: Push Changes To Remote
if: ${{ env.OLD_HASH != env.NEW_HASH }}
run: |
git push origin
git push -u origin npm-v${{ env.NEW_VERSION }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# Create sqlite-web npm package tarball
- name: Create sqlite-web NPM Package Tarball
if: ${{ env.OLD_HASH != env.NEW_HASH }}
run: |
cd pkg
echo "NPM_PACKAGE=$(npm pack --silent)" >> $GITHUB_ENV
- name: Rename sqlite-web NPM Package Tarball
if: ${{ env.OLD_HASH != env.NEW_HASH }}
run: mv pkg/${{ env.NPM_PACKAGE }} sqlite_web_npm_package_${{ env.NEW_VERSION }}.tgz

Comment on lines +88 to +98
Copy link

@coderabbitai coderabbitai bot Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Quote env and paths when renaming and publishing the tarball.

       - name: Create sqlite-web NPM Package Tarball
         if: ${{ env.OLD_HASH != env.NEW_HASH }}
         run: |
           cd pkg
-          echo "NPM_PACKAGE=$(npm pack --silent)" >> $GITHUB_ENV
+          echo "NPM_PACKAGE=$(npm pack --silent)" >> "$GITHUB_ENV"
 
       - name: Rename sqlite-web NPM Package Tarball
         if: ${{ env.OLD_HASH != env.NEW_HASH }}
-        run: mv pkg/${{ env.NPM_PACKAGE }} sqlite_web_npm_package_${{ env.NEW_VERSION }}.tgz
+        run: mv "pkg/${{ env.NPM_PACKAGE }}" "sqlite_web_npm_package_${{ env.NEW_VERSION }}.tgz"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Create sqlite-web npm package tarball
- name: Create sqlite-web NPM Package Tarball
if: ${{ env.OLD_HASH != env.NEW_HASH }}
run: |
cd pkg
echo "NPM_PACKAGE=$(npm pack --silent)" >> $GITHUB_ENV
- name: Rename sqlite-web NPM Package Tarball
if: ${{ env.OLD_HASH != env.NEW_HASH }}
run: mv pkg/${{ env.NPM_PACKAGE }} sqlite_web_npm_package_${{ env.NEW_VERSION }}.tgz
# Create sqlite-web npm package tarball
- name: Create sqlite-web NPM Package Tarball
if: ${{ env.OLD_HASH != env.NEW_HASH }}
run: |
cd pkg
echo "NPM_PACKAGE=$(npm pack --silent)" >> "$GITHUB_ENV"
- name: Rename sqlite-web NPM Package Tarball
if: ${{ env.OLD_HASH != env.NEW_HASH }}
run: mv "pkg/${{ env.NPM_PACKAGE }}" "sqlite_web_npm_package_${{ env.NEW_VERSION }}.tgz"
🧰 Tools
🪛 actionlint (1.7.7)

96-96: shellcheck reported issue in this script: SC2086:info:2:44: Double quote to prevent globbing and word splitting

(shellcheck)

🤖 Prompt for AI Agents
In .github/workflows/npm-release.yaml around lines 93 to 103, the mv command
does not quote environment variables or paths which can break on filenames with
spaces or special chars; update the rename (and any later publish steps) to
quote the source and destination arguments and the env substitutions, e.g. use
quoted paths like "pkg/${{ env.NPM_PACKAGE }}" and "sqlite_web_npm_package_${{
env.NEW_VERSION }}.tgz" so the shell receives each as a single safe argument
when renaming and when publishing the tarball.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is fine i've picked this workflow from a working project

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@findolor, understood! I can see from your previous feedback that you prefer maintaining consistency with existing npm-release workflows across your repositories, and this standardized pattern has been working well for the rainlanguage organization. Thanks for the clarification - I'll keep this in mind for future reviews.


✏️ Learnings added
Learnt from: findolor
PR: rainlanguage/sqlite-web#2
File: .github/workflows/npm-release.yaml:88-98
Timestamp: 2025-08-22T06:58:43.146Z
Learning: The findolor user considers shellcheck warnings about unquoted environment variables in GitHub Actions workflows acceptable when using proven workflow patterns from working projects, prioritizing consistency over addressing minor shell safety issues.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: findolor
PR: rainlanguage/sqlite-web#2
File: .github/workflows/npm-release.yaml:79-85
Timestamp: 2025-08-21T12:24:24.620Z
Learning: The rainlanguage organization uses workflows that commit pkg/package.json as part of their NPM release process across multiple repositories, and this pattern works fine for their setup.

Learnt from: findolor
PR: rainlanguage/sqlite-web#2
File: .github/workflows/npm-release.yaml:73-77
Timestamp: 2025-08-21T12:24:20.696Z
Learning: The findolor user prefers to maintain consistency with existing npm-release workflows across repositories, even when technical improvements are available. They use a standardized GitHub Actions workflow pattern for NPM package releases.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: ShellCheck would also be complaining about lack of quotes

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

# publish sqlite-web pkg to npm
- name: Publish sqlite-web pkg To NPM
if: ${{ env.OLD_HASH != env.NEW_HASH }}
uses: JS-DevTools/npm-publish@v3
with:
token: ${{ secrets.NPM_TOKEN }}
access: public
package: sqlite_web_npm_package_${{ env.NEW_VERSION }}.tgz

# Create gitHub release with tarballs
- name: Create GitHub Release with sqlite-web pkg
if: ${{ env.OLD_HASH != env.NEW_HASH }}
id: gh_release
uses: softprops/action-gh-release@v2
with:
tag_name: npm-v${{ env.NEW_VERSION }}
name: NPM Package Release v${{ env.NEW_VERSION }}
files: |
sqlite_web_npm_package_${{ env.NEW_VERSION }}.tgz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
53 changes: 53 additions & 0 deletions .github/workflows/test-ui.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Test SDK UI Logic
on: [push]

concurrency:
group: ${{ github.ref }}-ui
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
test:
permissions:
id-token: write
contents: read
runs-on: ubuntu-latest
Comment on lines +10 to +13
Copy link

@coderabbitai coderabbitai bot Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Reduce permissions to least privilege (drop id-token).

   test:
-    permissions:
-      id-token: write
-      contents: read
+    permissions:
+      contents: read
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
permissions:
id-token: write
contents: read
runs-on: ubuntu-latest
permissions:
contents: read
runs-on: ubuntu-latest
🤖 Prompt for AI Agents
.github/workflows/test-ui.yaml around lines 10 to 13 currently grants id-token:
write and contents: read; remove the id-token: write permission to follow
least-privilege principles and keep only the required permissions (e.g., delete
the id-token line and retain contents: read) so the workflow no longer requests
OIDC/token issuance.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is fine

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@findolor, understood! I'll note that you're comfortable with the current permissions configuration.

env:
COMMIT_SHA: ${{ github.sha }}
steps:
Comment on lines +14 to +16
Copy link

@coderabbitai coderabbitai bot Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Remove or use unused env COMMIT_SHA.

-    env:
-      COMMIT_SHA: ${{ github.sha }}
+    # env: (unused)
+    #   COMMIT_SHA: ${{ github.sha }}
🤖 Prompt for AI Agents
.github/workflows/test-ui.yaml lines 14-16: the workflow defines an unused
environment variable COMMIT_SHA set to ${{ github.sha }}; either remove this env
entry to avoid unused variable noise or wire it into the job/steps (for example,
reference env.COMMIT_SHA in a subsequent step, pass it into an action input, or
store it as a step output) so the value is actually consumed; choose one
approach and update the file accordingly.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is fine

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@findolor Thanks for the clarification. I'll note that you're comfortable keeping the unused COMMIT_SHA environment variable as is. No changes needed for this workflow file.

- uses: actions/checkout@v2
Copy link

@coderabbitai coderabbitai bot Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Update checkout action to v4.

-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- uses: actions/checkout@v2
- uses: actions/checkout@v4
🧰 Tools
🪛 actionlint (1.7.7)

17-17: the runner of "actions/checkout@v2" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🤖 Prompt for AI Agents
In .github/workflows/test-ui.yaml around line 17 the workflow pins
actions/checkout to v2; update the checkout action to use the current major
release by replacing actions/checkout@v2 with actions/checkout@v4 to pick up
latest fixes and features, and verify no inputs changed in the workflow (adjust
step inputs if necessary).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is fine

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@findolor Understood! I'll note your preference to keep the current checkout action version.


🧠 Learnings used
Learnt from: findolor
PR: rainlanguage/sqlite-web#2
File: .github/workflows/npm-release.yaml:17-18
Timestamp: 2025-08-21T14:58:32.282Z
Learning: The findolor user and rainlanguage organization prefer not to pin GitHub Actions to specific commit SHAs or tags, choosing to use floating major version tags (like v4) instead. They decline suggestions to pin actions for security/reproducibility reasons.

with:
submodules: recursive
fetch-depth: 0

- uses: nixbuild/nix-quick-install-action@v30
with:
nix_conf: |
keep-env-derivations = true
keep-outputs = true
- name: Restore and save Nix store
uses: nix-community/cache-nix-action@v6
with:
# restore and save a cache using this key
primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }}
# if there's no cache hit, restore a cache by this prefix
restore-prefixes-first-match: nix-${{ runner.os }}-
# collect garbage until the Nix store size (in bytes) is at most this number
# before trying to save a new cache
# 1G = 1073741824
gc-max-store-size-linux: 1G

- run: nix develop -c build-submodules

- run: nix develop -c local-bundle

- name: Install Playwright browsers with dependencies
run: |
cd svelte-test
npx playwright install --with-deps

- run: nix develop -c test-ui

- name: Frontend linting and formatting
run: |
cd svelte-test
npm run lint-format-check
Comment on lines +50 to +53
Copy link

@coderabbitai coderabbitai bot Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Ensure Node is set up and dependencies installed before lint/format.

This step runs outside Nix; without Node setup and npm ci the scripts will likely fail.

       - name: Frontend linting and formatting
-        run: |
-          cd svelte-test
-          npm run lint-format-check
+        uses: actions/setup-node@v4
+        with:
+          node-version: 22
+          cache: "npm"
+          cache-dependency-path: "svelte-test/package-lock.json"
+      - name: Install deps and run lint/format
+        run: |
+          cd svelte-test
+          npm ci
+          npm run lint-format-check
🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 44-44: no new line character at the end of file

(new-line-at-end-of-file)

🤖 Prompt for AI Agents
.github/workflows/test-ui.yaml around lines 41 to 44: the "Frontend linting and
formatting" step runs npm scripts without setting up Node or installing
dependencies, causing failures; modify the workflow to first set up Node (via
actions/setup-node) with the project Node version, then cd into svelte-test and
run npm ci to install dependencies before running npm run lint-format-check (or
combine setup-node and npm ci into this step), ensuring the working-directory is
correct and caching node_modules/npm-ci where appropriate.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is fine

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@findolor, understood! I'll note that the current workflow setup works for your use case.

45 changes: 45 additions & 0 deletions .github/workflows/test-wasm.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Test WASM
on: [push]

concurrency:
group: ${{ github.ref }}-wasm
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
test:
permissions:
id-token: write
contents: read
runs-on: ubuntu-latest
env:
COMMIT_SHA: ${{ github.sha }}
steps:
Comment on lines +14 to +16
Copy link

@coderabbitai coderabbitai bot Aug 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Remove or use unused env COMMIT_SHA.

It’s defined but never referenced. Prefer removing to keep the job tidy.

-    env:
-      COMMIT_SHA: ${{ github.sha }}
+    # env: (unused)
+    #   COMMIT_SHA: ${{ github.sha }}
🤖 Prompt for AI Agents
.github/workflows/test-wasm.yaml around lines 14 to 16: the workflow defines an
unused environment variable COMMIT_SHA under env:; either remove the COMMIT_SHA
line to tidy the job or update the workflow to actually use it (for example by
referencing ${{ env.COMMIT_SHA }} in a step or as an input) — choose one
approach and apply it consistently so there are no unused env entries.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is fine

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@findolor, understood! I'll respect your decision to keep the COMMIT_SHA environment variable as is.

- uses: actions/checkout@v2
with:
submodules: recursive
fetch-depth: 0

- uses: nixbuild/nix-quick-install-action@v30
with:
nix_conf: |
keep-env-derivations = true
keep-outputs = true
- name: Restore and save Nix store
uses: nix-community/cache-nix-action@v6
with:
# restore and save a cache using this key
primary-key: nix-${{ runner.os }}-${{ hashFiles('**/*.nix', '**/flake.lock') }}
# if there's no cache hit, restore a cache by this prefix
restore-prefixes-first-match: nix-${{ runner.os }}-
# collect garbage until the Nix store size (in bytes) is at most this number
# before trying to save a new cache
# 1G = 1073741824
gc-max-store-size-linux: 1G

- run: nix develop -c build-submodules

- run: nix develop -c local-bundle

- run: nix develop -c rainix-rs-static

- run: nix develop -c test-wasm
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -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
4 changes: 2 additions & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -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]": {
Expand Down
22 changes: 11 additions & 11 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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()`
Expand All @@ -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
Expand All @@ -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
Expand Down
Loading