wip: infrastructure for wasm builds

This commit is contained in:
Jeremy Wall 2025-07-23 15:21:39 -04:00
parent 4312cf45ab
commit bca2601451
8 changed files with 53 additions and 11 deletions

2
.cargo/config.toml Normal file
View File

@ -0,0 +1,2 @@
[target.wasm32-unknown-unknown]
rustflags = ['--cfg', 'getrandom_backend="wasm_js"']

16
Cargo.lock generated
View File

@ -24,7 +24,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"getrandom 0.3.2", "getrandom 0.3.3",
"once_cell", "once_cell",
"version_check", "version_check",
"zerocopy", "zerocopy",
@ -615,14 +615,16 @@ dependencies = [
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.3.2" version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"js-sys",
"libc", "libc",
"r-efi", "r-efi",
"wasi 0.14.2+wasi-0.2.4", "wasi 0.14.2+wasi-0.2.4",
"wasm-bindgen",
] ]
[[package]] [[package]]
@ -1139,6 +1141,7 @@ name = "offline-web-model"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"blake2", "blake2",
"getrandom 0.3.3",
"rand 0.9.1", "rand 0.9.1",
"serde", "serde",
] ]
@ -1157,6 +1160,7 @@ dependencies = [
"thiserror 2.0.12", "thiserror 2.0.12",
"tokio", "tokio",
"uuid", "uuid",
"wasm-bindgen",
] ]
[[package]] [[package]]
@ -1359,7 +1363,7 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [ dependencies = [
"getrandom 0.3.2", "getrandom 0.3.3",
] ]
[[package]] [[package]]
@ -1911,7 +1915,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
dependencies = [ dependencies = [
"fastrand", "fastrand",
"getrandom 0.3.2", "getrandom 0.3.3",
"once_cell", "once_cell",
"rustix", "rustix",
"windows-sys 0.59.0", "windows-sys 0.59.0",
@ -2198,7 +2202,7 @@ version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d"
dependencies = [ dependencies = [
"getrandom 0.3.2", "getrandom 0.3.3",
"js-sys", "js-sys",
"wasm-bindgen", "wasm-bindgen",
] ]

16
Makefile Normal file
View File

@ -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

View File

@ -16,7 +16,10 @@
rust-overlay.overlays.default rust-overlay.overlays.default
]; ];
pkgs = import nixpkgs { inherit system overlays; }; 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 { naersk-lib = pkgs.callPackage naersk {
rustc = rust-bin; rustc = rust-bin;
cargo = rust-bin; cargo = rust-bin;
@ -37,7 +40,7 @@
{ {
packages.default = project; packages.default = project;
devShells.default = pkgs.mkShell { 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 ]; packages = with pkgs; [ gnumake ];
}; };
}); });

View File

@ -3,7 +3,14 @@ name = "offline-web-model"
version = "0.1.0" version = "0.1.0"
edition = "2024" edition = "2024"
[features]
native = [ ]
wasm = ["getrandom/wasm_js"]
[dependencies] [dependencies]
blake2 = "0.10.6" blake2 = "0.10.6"
getrandom = { version="0.3.3", features=["wasm_js"] }
rand = "0.9.1" rand = "0.9.1"
serde = { version = "1.0.219", features = ["derive", "rc"] } serde = { version = "1.0.219", features = ["derive", "rc"] }

View File

@ -3,10 +3,14 @@ name = "offline-web-storage"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"
[features]
native = ["sqlx", "tokio"]
wasm = ["offline-web-model/wasm", "uuid/js"]
[dependencies] [dependencies]
offline-web-model = { path = "../offline-web-model" } offline-web-model = { path = "../offline-web-model" }
sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "sqlite", "uuid", "chrono"] } sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "sqlite", "uuid", "chrono"], optional=true }
tokio = { version = "1.0", features = ["full"] } tokio = { version = "1.0", features = ["full"], optional=true }
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0" serde_json = "1.0"
anyhow = "1.0" anyhow = "1.0"
@ -14,5 +18,6 @@ uuid = { version = "1.0", features = ["v4"] }
chrono = { version = "0.4", features = ["serde"] } chrono = { version = "0.4", features = ["serde"] }
blake2 = "0.10" blake2 = "0.10"
thiserror = "2.0.12" thiserror = "2.0.12"
wasm-bindgen = { version = "0.2.100", optional=true }
[dev-dependencies] [dev-dependencies]

View File

View File

@ -20,9 +20,14 @@ pub trait ReferenceStore {
async fn get_graph(&self, root_name: &str) -> Result<Vec<Reference>, StoreError>; async fn get_graph(&self, root_name: &str) -> Result<Vec<Reference>, StoreError>;
} }
#[cfg(feature="native")]
mod sqlite; mod sqlite;
#[cfg(feature="native")]
pub use sqlite::SqliteReferenceStore; pub use sqlite::SqliteReferenceStore;
#[cfg(test)] #[cfg(feature="native")]
mod indexeddb;
#[cfg(all(test, feature="native"))]
mod integration_tests; mod integration_tests;