lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

commit 730d00d12603dba428f098430277caae1e38c076
parent 04616d6600ad08202cfb3cf07abd64c7e66ce0f1
Author: triesap <tyson@radroots.org>
Date:   Wed, 24 Dec 2025 20:34:08 +0000

wasm: add `radroots-events-codec` WASM crate and build target


- Add `radroots-events-codec-wasm` crate to workspace
- Expose listing_tags and listing_tags_full via wasm-bindgen exports
- Add wasm-pack Makefile target to build web bundle into pkg/dist
- Register new package in Cargo.lock with required dependencies

Diffstat:
MCargo.lock | 10++++++++++
MCargo.toml | 1+
MMakefile | 7++++++-
Aevents-codec-wasm/Cargo.toml | 16++++++++++++++++
Aevents-codec-wasm/pkg/package.json | 19+++++++++++++++++++
Aevents-codec-wasm/src/lib.rs | 35+++++++++++++++++++++++++++++++++++
6 files changed, 87 insertions(+), 1 deletion(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -1723,6 +1723,16 @@ dependencies = [ ] [[package]] +name = "radroots-events-codec-wasm" +version = "0.1.0" +dependencies = [ + "radroots-events", + "radroots-events-codec", + "serde_json", + "wasm-bindgen", +] + +[[package]] name = "radroots-events-indexed" version = "0.1.0" dependencies = [ diff --git a/Cargo.toml b/Cargo.toml @@ -3,6 +3,7 @@ members = [ "core", "events", "events-codec", + "events-codec-wasm", "events-indexed", "identity", "log", diff --git a/Makefile b/Makefile @@ -1,6 +1,6 @@ .PHONY: all bindings clean help \ bindings-events bindings-tangle-schema bindings-trade bindings-types \ - build build-tangle-sql-wasm + build build-events-codec-wasm build-tangle-sql-wasm SHELL := /bin/bash .SHELLFLAGS := -e -o pipefail -c @@ -13,6 +13,7 @@ BINDINGS_TARGETS := \ bindings-types BUILD_TARGETS := \ + build-events-codec-wasm \ build-tangle-sql-wasm all: bindings build @@ -54,3 +55,7 @@ bindings-types: build-tangle-sql-wasm: wasm-pack build tangle-sql-wasm --release --target web \ --out-dir ../tangle-sql-wasm/pkg/dist --scope radroots + +build-events-codec-wasm: + wasm-pack build events-codec-wasm --release --target web \ + --out-dir ../events-codec-wasm/pkg/dist --scope radroots diff --git a/events-codec-wasm/Cargo.toml b/events-codec-wasm/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "radroots-events-codec-wasm" +version.workspace = true +edition.workspace = true +authors = ["Radroots Authors"] +rust-version.workspace = true +license.workspace = true + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +radroots-events = { workspace = true, default-features = false, features = ["std", "serde"] } +radroots-events-codec = { workspace = true, default-features = false, features = ["std", "serde_json"] } +serde_json = { workspace = true } +wasm-bindgen = { workspace = true } diff --git a/events-codec-wasm/pkg/package.json b/events-codec-wasm/pkg/package.json @@ -0,0 +1,19 @@ +{ + "name": "@radroots/events-codec-wasm", + "version": "0.1.0", + "private": true, + "type": "module", + "files": [ + "dist" + ], + "main": "./dist/radroots_events_codec_wasm.js", + "types": "./dist/radroots_events_codec_wasm.d.ts", + "exports": { + ".": { + "types": "./dist/radroots_events_codec_wasm.d.ts", + "import": "./dist/radroots_events_codec_wasm.js", + "default": "./dist/radroots_events_codec_wasm.js" + } + }, + "sideEffects": false +} diff --git a/events-codec-wasm/src/lib.rs b/events-codec-wasm/src/lib.rs @@ -0,0 +1,35 @@ +#![cfg(target_arch = "wasm32")] +#![forbid(unsafe_code)] + +use radroots_events::listing::RadrootsListing; +use radroots_events_codec::listing::tags::{ + listing_tags as listing_tags_impl, + listing_tags_full as listing_tags_full_impl, +}; +use wasm_bindgen::prelude::*; + +fn err_js<E: ToString>(err: E) -> JsValue { + JsValue::from_str(&err.to_string()) +} + +fn parse_listing(listing_json: &str) -> Result<RadrootsListing, JsValue> { + serde_json::from_str(listing_json).map_err(err_js) +} + +fn tags_to_json(tags: Vec<Vec<String>>) -> Result<String, JsValue> { + serde_json::to_string(&tags).map_err(err_js) +} + +#[wasm_bindgen(js_name = listing_tags)] +pub fn listing_tags(listing_json: &str) -> Result<String, JsValue> { + let listing = parse_listing(listing_json)?; + let tags = listing_tags_impl(&listing).map_err(err_js)?; + tags_to_json(tags) +} + +#[wasm_bindgen(js_name = listing_tags_full)] +pub fn listing_tags_full(listing_json: &str) -> Result<String, JsValue> { + let listing = parse_listing(listing_json)?; + let tags = listing_tags_full_impl(&listing).map_err(err_js)?; + tags_to_json(tags) +}