Skip to content
Open
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
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ members = [
"qubed_meteo",
"py_qubed",
"py_qubed_meteo",
"qubed_wasm",
]

3 changes: 2 additions & 1 deletion qubed/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ smallbitvec = "2.6.0"
tiny-str = "0.10.0"
tiny-vec = "0.10.0"
chrono = "0.4"
rayon = "1.7"
# rayon is not available on wasm32; gate it behind a feature flag
rayon = { version = "1.7", optional = true }

[lib]
path = "src/lib.rs"
Expand Down
21 changes: 21 additions & 0 deletions qubed/src/qube.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,27 @@ impl Qube {
map
}

/// Returns the dimension name of every leaf node (i.e. the "frontier" keys
/// that appear at the deepest traversed level, used by the WASM catalogue to
/// determine which key should be shown next when no explicit ordering is known).
pub fn leaf_dimensions(&self) -> Vec<String> {
let paths = self.leaf_node_ids_paths();
let mut seen = HashSet::new();
let mut result = Vec::new();
for path in &paths {
if let Some(&leaf_id) = path.last() {
if let Some(node) = self.nodes.get(leaf_id) {
if let Some(dim_str) = self.dimension_str(&node.dim) {
if seen.insert(dim_str.to_string()) {
result.push(dim_str.to_string());
}
}
}
}
}
result
}

pub fn remove_node(&mut self, id: NodeIdx) -> Result<(), String> {
let node = self.nodes.remove(id).ok_or_else(|| format!("Node {:?} not found", id))?;

Expand Down
18 changes: 18 additions & 0 deletions qubed_wasm/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[package]
name = "qubed_wasm"
version = "0.1.0"
edition = "2024"
description = "WebAssembly bindings for the qubed catalogue browser"

[lib]
crate-type = ["cdylib", "rlib"]

[dependencies]
qubed = { path = "../qubed" }
wasm-bindgen = "0.2"
serde = { version = "1", features = ["derive"] }
serde_json = "1"

[profile.release]
opt-level = "s"
lto = true
20 changes: 20 additions & 0 deletions qubed_wasm/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
# Build the WASM catalogue module and copy it to the static folder.
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
OUT_DIR="$REPO_ROOT/stac_server/static/wasm"

echo "Building qubed_wasm for wasm32-unknown-unknown …"
cd "$SCRIPT_DIR"
wasm-pack build \
--target web \
--release \
--out-dir "$OUT_DIR"

echo ""
echo "✓ Built to $OUT_DIR"
echo " qubed_wasm_bg.wasm : $(du -sh "$OUT_DIR/qubed_wasm_bg.wasm" | cut -f1)"
echo ""
echo "Restart your FastAPI server for changes to take effect."
Loading
Loading