From 5eb9ec0d0336a8989909e51adaec0081e71378a6 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Sun, 3 Mar 2024 14:10:36 +0200 Subject: [PATCH] Improve JavaScript/Wasm packaging --- .github/workflows/rust.yml | 10 +++++++++- bindings/wasm/examples/example.js | 6 ++++-- bindings/wasm/examples/package.json | 1 + bindings/wasm/lib.rs | 7 ++++++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 2e908a30b..f50c034e0 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -10,7 +10,7 @@ env: CARGO_TERM_COLOR: always jobs: - build: + build-native: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] @@ -23,3 +23,11 @@ jobs: run: cargo build --verbose - name: Run tests run: cargo test --verbose + + build-wasm: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install + run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh + - run: wasm-pack build --target nodejs bindings/wasm diff --git a/bindings/wasm/examples/example.js b/bindings/wasm/examples/example.js index b6ba1e46f..e3bba1770 100644 --- a/bindings/wasm/examples/example.js +++ b/bindings/wasm/examples/example.js @@ -1,3 +1,5 @@ -import limbo from "../pkg/limbo_wasm.js"; +import { Database } from 'limbo-wasm'; -const db = limbo.Database.open(); +const db = new Database(':memory:'); + +db.exec("SELECT 'hello, world' AS message"); diff --git a/bindings/wasm/examples/package.json b/bindings/wasm/examples/package.json index 17a8b921a..2cce5fa2a 100644 --- a/bindings/wasm/examples/package.json +++ b/bindings/wasm/examples/package.json @@ -11,5 +11,6 @@ "author": "", "license": "MIT", "dependencies": { + "limbo-wasm": "../pkg" } } diff --git a/bindings/wasm/lib.rs b/bindings/wasm/lib.rs index cfa1423be..7a5b75647 100644 --- a/bindings/wasm/lib.rs +++ b/bindings/wasm/lib.rs @@ -9,12 +9,17 @@ pub struct Database { #[wasm_bindgen] impl Database { - pub fn open(_path: &str) -> Database { + #[wasm_bindgen(constructor)] + pub fn new(_path: &str) -> Database { let io = Rc::new(IO {}); let page_source = limbo_core::PageSource::from_io(Rc::new(PageIO {})); let inner = limbo_core::Database::open(io, page_source).unwrap(); Database { _inner: inner } } + + #[wasm_bindgen] + pub fn exec(&self, _sql: &str) { + } } pub struct IO {}