diff --git a/examples/webworker-gloo/Cargo.lock b/examples/webworker-gloo/Cargo.lock
new file mode 100644
index 00000000..778884d9
--- /dev/null
+++ b/examples/webworker-gloo/Cargo.lock
@@ -0,0 +1,317 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "anymap2"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gloo-console"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3907f786f65bbb4f419e918b0c5674175ef1c231ecda93b2dbd65fd1e8882637"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "gloo-utils"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05c77af6f96a4f9e27c8ac23a88407381a31f4a74c3fb985c85aa79b8d898136"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "gloo-worker"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c843b9a46d07485026f030be7bd008580a12a2920fea837745a440a3b0c97cb"
+dependencies = [
+ "anymap2",
+ "bincode",
+ "gloo-console",
+ "gloo-utils",
+ "js-sys",
+ "serde",
+ "slab",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+
+[[package]]
+name = "js-sys"
+version = "0.3.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.119"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "memory_units"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
+
+[[package]]
+name = "serde"
+version = "1.0.136"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.136"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
+
+[[package]]
+name = "syn"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06"
+dependencies = [
+ "cfg-if 1.0.0",
+ "serde",
+ "serde_json",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2"
+
+[[package]]
+name = "web-sys"
+version = "0.3.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webworker-gloo"
+version = "0.1.0"
+dependencies = [
+ "console_error_panic_hook",
+ "gloo-worker",
+ "wasm-bindgen",
+ "web-sys",
+ "wee_alloc",
+]
+
+[[package]]
+name = "wee_alloc"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "memory_units",
+ "winapi",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/examples/webworker-gloo/Cargo.toml b/examples/webworker-gloo/Cargo.toml
new file mode 100644
index 00000000..7e679450
--- /dev/null
+++ b/examples/webworker-gloo/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "webworker-gloo"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+console_error_panic_hook = "0.1.7"
+gloo-worker = "0.1.0"
+wasm-bindgen = "0.2.79"
+web-sys = { version = "0.3.56", features = ["console"] }
+wee_alloc = "0.4.5"
diff --git a/examples/webworker-gloo/index.html b/examples/webworker-gloo/index.html
new file mode 100644
index 00000000..dd88b1ce
--- /dev/null
+++ b/examples/webworker-gloo/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ Trunk | Web worker | Gloo
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/webworker-gloo/src/bin/app.rs b/examples/webworker-gloo/src/bin/app.rs
new file mode 100644
index 00000000..ba1d99d4
--- /dev/null
+++ b/examples/webworker-gloo/src/bin/app.rs
@@ -0,0 +1,20 @@
+use std::rc::Rc;
+
+use gloo_worker::Bridged;
+use webworker_gloo::Multiplier;
+
+#[global_allocator]
+static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
+
+fn main() {
+ console_error_panic_hook::set_once();
+
+ let bridge = Multiplier::bridge(Rc::new(Box::new(|((a, b), result)| {
+ web_sys::console::log_1(&format!("{a} x {b} = {result}").into());
+ })));
+ let bridge = Box::leak(bridge);
+
+ bridge.send((2, 5));
+ bridge.send((3, 3));
+ bridge.send((50, 5));
+}
diff --git a/examples/webworker-gloo/src/bin/worker.rs b/examples/webworker-gloo/src/bin/worker.rs
new file mode 100644
index 00000000..6c38a2aa
--- /dev/null
+++ b/examples/webworker-gloo/src/bin/worker.rs
@@ -0,0 +1,11 @@
+use gloo_worker::PublicWorker;
+use webworker_gloo::Multiplier;
+
+#[global_allocator]
+static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
+
+fn main() {
+ console_error_panic_hook::set_once();
+
+ Multiplier::register();
+}
diff --git a/examples/webworker-gloo/src/lib.rs b/examples/webworker-gloo/src/lib.rs
new file mode 100644
index 00000000..9c1ddc58
--- /dev/null
+++ b/examples/webworker-gloo/src/lib.rs
@@ -0,0 +1,26 @@
+use gloo_worker::{HandlerId, Public, Worker, WorkerLink};
+
+pub struct Multiplier {
+ link: WorkerLink,
+}
+
+impl Worker for Multiplier {
+ type Input = (u64, u64);
+ type Message = ();
+ type Output = ((u64, u64), u64);
+ type Reach = Public;
+
+ fn create(link: WorkerLink) -> Self {
+ Self { link }
+ }
+
+ fn update(&mut self, _msg: Self::Message) {}
+
+ fn handle_input(&mut self, msg: Self::Input, id: HandlerId) {
+ self.link.respond(id, (msg, msg.0 * msg.1));
+ }
+
+ fn name_of_resource() -> &'static str {
+ "worker.js"
+ }
+}
diff --git a/examples/webworker/Cargo.lock b/examples/webworker/Cargo.lock
index b4309cd8..57924cc2 100644
--- a/examples/webworker/Cargo.lock
+++ b/examples/webworker/Cargo.lock
@@ -32,9 +32,9 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.51"
+version = "0.3.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83bdfbace3a0e81a4253f73b49e960b053e396a11012cbd49b9b74d6a2b67062"
+checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04"
dependencies = [
"wasm-bindgen",
]
@@ -103,9 +103,9 @@ checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
[[package]]
name = "wasm-bindgen"
-version = "0.2.74"
+version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd"
+checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06"
dependencies = [
"cfg-if 1.0.0",
"wasm-bindgen-macro",
@@ -113,9 +113,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.74"
+version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900"
+checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca"
dependencies = [
"bumpalo",
"lazy_static",
@@ -128,9 +128,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.74"
+version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4"
+checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -138,9 +138,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.74"
+version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97"
+checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc"
dependencies = [
"proc-macro2",
"quote",
@@ -151,15 +151,15 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.74"
+version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f"
+checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2"
[[package]]
name = "web-sys"
-version = "0.3.51"
+version = "0.3.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e828417b379f3df7111d3a2a9e5753706cae29c41f7c4029ee9fd77f3e09e582"
+checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -170,6 +170,7 @@ name = "webworker-example"
version = "0.1.0"
dependencies = [
"console_error_panic_hook",
+ "js-sys",
"wasm-bindgen",
"web-sys",
"wee_alloc",
diff --git a/examples/webworker/Cargo.toml b/examples/webworker/Cargo.toml
index 13dadcf8..eaae4ca4 100644
--- a/examples/webworker/Cargo.toml
+++ b/examples/webworker/Cargo.toml
@@ -6,8 +6,24 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-console_error_panic_hook = "0.1"
-web-sys = { version = "0.3", features = ["Window", "Location", "Document", "HtmlElement", "Node", "Text", "Worker", "DedicatedWorkerGlobalScope"] }
-wasm-bindgen = "=0.2.74"
-wee_alloc = "0.4"
-js-sys = "0.3.55"
+console_error_panic_hook = "0.1.7"
+web-sys = { version = "0.3.56", features = [
+ "Blob",
+ "BlobPropertyBag",
+ "console",
+ "MessageEvent",
+ "Url",
+
+
+ "Window",
+ "Location",
+ "Document",
+ "HtmlElement",
+ "Node",
+ "Text",
+ "Worker",
+ "DedicatedWorkerGlobalScope",
+] }
+wasm-bindgen = "=0.2.79"
+wee_alloc = "0.4.5"
+js-sys = "=0.3.56"
diff --git a/examples/webworker/index.html b/examples/webworker/index.html
index a6798157..06280324 100644
--- a/examples/webworker/index.html
+++ b/examples/webworker/index.html
@@ -1,17 +1,14 @@
-
-
-
-
- Trunk | Web worker
-
-
-
-
-
-
-
-
-
+
+
+
+ Trunk | WebWorker | Vanilla
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/webworker/src/bin/app.rs b/examples/webworker/src/bin/app.rs
index 1c281688..6f04b683 100644
--- a/examples/webworker/src/bin/app.rs
+++ b/examples/webworker/src/bin/app.rs
@@ -1,24 +1,50 @@
-#![recursion_limit = "1024"]
+use js_sys::Array;
+use wasm_bindgen::{prelude::*, JsCast};
+use web_sys::{window, Blob, BlobPropertyBag, MessageEvent, Url, Worker};
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
-use console_error_panic_hook::set_once as set_panic_hook;
-use web_sys::{window, Worker};
+fn worker_new(name: &str) -> Worker {
+ let origin = window()
+ .expect("window to be available")
+ .location()
+ .origin()
+ .expect("origin to be available");
-fn worker_new(file_name: &str) -> Worker {
- let origin = window().unwrap().location().origin().unwrap();
- let url = format!("{}/{}", origin, file_name);
+ let script = Array::new();
+ script.push(&format!(r#"importScripts("{origin}/{name}.js");wasm_bindgen("{origin}/{name}_bg.wasm");"#).into());
+
+ let blob = Blob::new_with_str_sequence_and_options(&script, BlobPropertyBag::new().type_("text/javascript")).expect("blob creation succeeds");
+
+ let url = Url::create_object_url_with_blob(&blob).expect("url creation succeeds");
Worker::new(&url).expect("failed to spawn worker")
}
fn main() {
- set_panic_hook();
- let document = window().and_then(|win| win.document()).expect("Could not access document");
- let body = document.body().expect("Could not access document.body");
- let text_node = document.create_text_node("Hello, world from Rust!");
- body.append_child(text_node.as_ref()).expect("Failed to append text");
+ console_error_panic_hook::set_once();
+
+ let worker = worker_new("worker");
+ let worker_clone = worker.clone();
+
+ let onmessage = Closure::wrap(Box::new(move |msg: MessageEvent| {
+ let worker_clone = worker_clone.clone();
+ let data = Array::from(&msg.data());
+
+ if data.length() == 0 {
+ let msg = Array::new();
+ msg.push(&2.into());
+ msg.push(&5.into());
+ worker_clone.post_message(&msg.into()).expect("sending message to succeed");
+ } else {
+ let a = data.get(0).as_f64().expect("first array value to be a number") as u32;
+ let b = data.get(1).as_f64().expect("second array value to be a number") as u32;
+ let result = data.get(2).as_f64().expect("third array value to be a number") as u32;
- let worker = worker_new("worker.js");
+ web_sys::console::log_1(&format!("{a} x {b} = {result}").into());
+ }
+ }) as Box);
+ worker.set_onmessage(Some(onmessage.as_ref().unchecked_ref()));
+ onmessage.forget();
}
diff --git a/examples/webworker/src/bin/worker.rs b/examples/webworker/src/bin/worker.rs
index f328e4d9..71176c19 100644
--- a/examples/webworker/src/bin/worker.rs
+++ b/examples/webworker/src/bin/worker.rs
@@ -1 +1,33 @@
-fn main() {}
+use js_sys::Array;
+use wasm_bindgen::{prelude::*, JsCast};
+use web_sys::{DedicatedWorkerGlobalScope, MessageEvent};
+
+#[global_allocator]
+static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
+
+fn main() {
+ console_error_panic_hook::set_once();
+ web_sys::console::log_1(&"worker starting".into());
+
+ let scope = DedicatedWorkerGlobalScope::from(JsValue::from(js_sys::global()));
+ let scope_clone = scope.clone();
+
+ let onmessage = Closure::wrap(Box::new(move |msg: MessageEvent| {
+ web_sys::console::log_1(&"got message".into());
+
+ let data = Array::from(&msg.data());
+ let a = data.get(0).as_f64().expect("first array value to be a number") as u32;
+ let b = data.get(1).as_f64().expect("second array value to be a number") as u32;
+
+ data.push(&(a * b).into());
+ scope_clone
+ .post_message(&data.into())
+ .expect("posting result message succeeds");
+ }) as Box);
+ scope.set_onmessage(Some(onmessage.as_ref().unchecked_ref()));
+ onmessage.forget();
+
+ scope
+ .post_message(&Array::new().into())
+ .expect("posting ready message succeeds");
+}
diff --git a/src/pipelines/rust.rs b/src/pipelines/rust.rs
index c9f2f6b1..c9144a76 100644
--- a/src/pipelines/rust.rs
+++ b/src/pipelines/rust.rs
@@ -241,6 +241,13 @@ impl RustApp {
#[tracing::instrument(level = "trace", skip(self, wasm, hashed_name))]
async fn wasm_bindgen_build(&self, wasm: &Path, hashed_name: &str) -> Result {
+ // Skip the hashed file name for workers as their file name must be named at runtime.
+ // Therefore, workers use the Cargo binary name for file naming.
+ let hashed_name = match self.app_type {
+ RustAppType::Main => hashed_name,
+ RustAppType::Worker => &self.name,
+ };
+
let version = find_wasm_bindgen_version(&self.cfg.tools, &self.manifest);
let wasm_bindgen = tools::get(Application::WasmBindgen, version.as_deref()).await?;
@@ -441,6 +448,8 @@ pub fn pattern_evaluate(template: &str, params: &HashMap) -> Str
impl RustAppOutput {
pub async fn finalize(self, dom: &mut Document) -> Result<()> {
if self.type_ == RustAppType::Worker {
+ // Skip the script tag and preload links for workers, and remove the link tag only.
+ // Workers are intialized and managed by the app itself at runtime.
if let Some(id) = self.id {
dom.select(&super::trunk_id_selector(id)).remove();
}