diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..2e07606 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[target.wasm32-unknown-unknown] +rustflags = ['--cfg', 'getrandom_backend="wasm_js"'] diff --git a/Cargo.lock b/Cargo.lock index d13c163..7c06982 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,7 +24,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.2", + "getrandom 0.3.3", "once_cell", "version_check", "zerocopy", @@ -615,14 +615,16 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi", "wasi 0.14.2+wasi-0.2.4", + "wasm-bindgen", ] [[package]] @@ -1139,6 +1141,7 @@ name = "offline-web-model" version = "0.1.0" dependencies = [ "blake2", + "getrandom 0.3.3", "rand 0.9.1", "serde", ] @@ -1157,6 +1160,7 @@ dependencies = [ "thiserror 2.0.12", "tokio", "uuid", + "wasm-bindgen", ] [[package]] @@ -1359,7 +1363,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", ] [[package]] @@ -1911,7 +1915,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ "fastrand", - "getrandom 0.3.2", + "getrandom 0.3.3", "once_cell", "rustix", "windows-sys 0.59.0", @@ -2198,7 +2202,7 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", "js-sys", "wasm-bindgen", ] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6f5c810 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +build: wasm native + +native: model-native storage-native + +model-native: + cargo build --features native -p offline-web-model + +storage-native: + cargo build --features native -p offline-web-storage + +wasm: model-wasm storage-wasm + +model-wasm: + cargo build --target=wasm32-unknown-unknown --features wasm -p offline-web-model --verbose +storage-wasm: + cargo build --target=wasm32-unknown-unknown --features wasm -p offline-web-storage --verbose diff --git a/flake.nix b/flake.nix index d6cb8f8..3674925 100644 --- a/flake.nix +++ b/flake.nix @@ -16,7 +16,10 @@ rust-overlay.overlays.default ]; pkgs = import nixpkgs { inherit system overlays; }; - rust-bin = pkgs.rust-bin.stable.latest.default; + rust-bin = pkgs.rust-bin.stable.latest.default.override { + targets = [ "wasm32-unknown-unknown" ]; + extensions = [ "rust-src" ]; + }; naersk-lib = pkgs.callPackage naersk { rustc = rust-bin; cargo = rust-bin; @@ -37,7 +40,7 @@ { packages.default = project; devShells.default = pkgs.mkShell { - buildInputs = [ rust-bin pkgs.rust-analyzer pkgs.cargo-tarpaulin ]; + buildInputs = [ rust-bin pkgs.rust-analyzer pkgs.cargo-tarpaulin pkgs.wasm-pack ]; packages = with pkgs; [ gnumake ]; }; }); diff --git a/offline-web-model/Cargo.toml b/offline-web-model/Cargo.toml index 6b6746d..2dd305e 100644 --- a/offline-web-model/Cargo.toml +++ b/offline-web-model/Cargo.toml @@ -3,7 +3,14 @@ name = "offline-web-model" version = "0.1.0" edition = "2024" +[features] +native = [ ] +wasm = ["getrandom/wasm_js"] + [dependencies] blake2 = "0.10.6" +getrandom = { version="0.3.3", features=["wasm_js"] } rand = "0.9.1" serde = { version = "1.0.219", features = ["derive", "rc"] } + + diff --git a/offline-web-storage/Cargo.toml b/offline-web-storage/Cargo.toml index f46aa93..7431420 100644 --- a/offline-web-storage/Cargo.toml +++ b/offline-web-storage/Cargo.toml @@ -3,10 +3,14 @@ name = "offline-web-storage" version = "0.1.0" edition = "2021" +[features] +native = ["sqlx", "tokio"] +wasm = ["offline-web-model/wasm", "uuid/js"] + [dependencies] offline-web-model = { path = "../offline-web-model" } -sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "sqlite", "uuid", "chrono"] } -tokio = { version = "1.0", features = ["full"] } +sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "sqlite", "uuid", "chrono"], optional=true } +tokio = { version = "1.0", features = ["full"], optional=true } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" anyhow = "1.0" @@ -14,5 +18,6 @@ uuid = { version = "1.0", features = ["v4"] } chrono = { version = "0.4", features = ["serde"] } blake2 = "0.10" thiserror = "2.0.12" +wasm-bindgen = { version = "0.2.100", optional=true } [dev-dependencies] diff --git a/offline-web-storage/src/indexeddb.rs b/offline-web-storage/src/indexeddb.rs new file mode 100644 index 0000000..e69de29 diff --git a/offline-web-storage/src/lib.rs b/offline-web-storage/src/lib.rs index 28f9329..f8d3fd9 100644 --- a/offline-web-storage/src/lib.rs +++ b/offline-web-storage/src/lib.rs @@ -20,9 +20,14 @@ pub trait ReferenceStore { async fn get_graph(&self, root_name: &str) -> Result, StoreError>; } +#[cfg(feature="native")] mod sqlite; +#[cfg(feature="native")] pub use sqlite::SqliteReferenceStore; -#[cfg(test)] +#[cfg(feature="native")] +mod indexeddb; + +#[cfg(all(test, feature="native"))] mod integration_tests;