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"
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",
]

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
];
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 ];
};
});

View File

@ -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"] }

View File

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

View File

View File

@ -20,9 +20,14 @@ pub trait ReferenceStore {
async fn get_graph(&self, root_name: &str) -> Result<Vec<Reference>, 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;