File wasm-bindgen-cli.patch of Package bitwarden-sdk-internal
From e53023b2c9b27c1d15df9434e0369783ddd9a4e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Garci=CC=81a?=
<dani-garcia@users.noreply.github.com>
Date: Fri, 20 Jun 2025 15:02:02 +0200
Subject: [PATCH] Wrap wasm-bindgen-cli
---
.github/renovate.json | 5 +
.github/workflows/build-wasm-internal.yml | 3 -
.github/workflows/rust-test.yml | 3 -
Cargo.lock | 232 +++++++++++++++++-
Cargo.toml | 1 +
crates/bitwarden-wasm-internal/Cargo.toml | 5 +-
crates/bitwarden-wasm-internal/README.md | 2 -
crates/bitwarden-wasm-internal/build.sh | 4 +-
crates/wasm-bindgen-cli-runner/Cargo.toml | 21 ++
.../wasm-bindgen-cli-runner.rs | 16 ++
10 files changed, 276 insertions(+), 16 deletions(-)
create mode 100644 crates/wasm-bindgen-cli-runner/Cargo.toml
create mode 100644 crates/wasm-bindgen-cli-runner/wasm-bindgen-cli-runner.rs
diff --git a/.github/renovate.json b/.github/renovate.json
index 6237930f9..c85743c1c 100644
--- a/.github/renovate.json
+++ b/.github/renovate.json
@@ -21,6 +21,11 @@
"groupName": "pyo3 non-major",
"matchPackageNames": ["/pyo3*/"]
},
+ {
+ "matchManagers": ["cargo"],
+ "groupName": "wasm-bindgen group",
+ "matchPackageNames": ["/wasm-bindgen*/"]
+ },
{
"groupName": "dockerfile minor",
"matchManagers": ["dockerfile"],
diff --git a/.github/workflows/build-wasm-internal.yml b/.github/workflows/build-wasm-internal.yml
index 7afe8fe66..6c2bb6f6a 100644
--- a/.github/workflows/build-wasm-internal.yml
+++ b/.github/workflows/build-wasm-internal.yml
@@ -76,9 +76,6 @@ jobs:
with:
key: wasm-cargo-cache
- - name: Install wasm-bindgen-cli
- run: cargo install wasm-bindgen-cli --version 0.2.100
-
- name: Build
run: ./build.sh -r
diff --git a/.github/workflows/rust-test.yml b/.github/workflows/rust-test.yml
index 346c9361b..72386646c 100644
--- a/.github/workflows/rust-test.yml
+++ b/.github/workflows/rust-test.yml
@@ -70,9 +70,6 @@ jobs:
- name: Cache cargo registry
uses: Swatinem/rust-cache@f0deed1e0edfc6a9be95417288c0e1099b1eeec3 # v2.7.7
- - name: Install wasm-bindgen-cli
- run: cargo install wasm-bindgen-cli --version 0.2.100
-
- name: Test WASM
run: cargo test --target wasm32-unknown-unknown -p bitwarden-wasm-internal -p bitwarden-threading -p bitwarden-error -p bitwarden-uuid --all-features
diff --git a/Cargo.lock b/Cargo.lock
index b73ca6026..7141a00b7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -8,7 +8,7 @@ version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
dependencies = [
- "gimli",
+ "gimli 0.31.1",
]
[[package]]
@@ -53,6 +53,18 @@ dependencies = [
"subtle",
]
+[[package]]
+name = "ahash"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
[[package]]
name = "aho-corasick"
version = "1.1.3"
@@ -1186,7 +1198,7 @@ dependencies = [
"bitflags 2.9.1",
"crossterm_winapi",
"parking_lot",
- "rustix",
+ "rustix 0.38.44",
"winapi",
]
@@ -1555,6 +1567,12 @@ dependencies = [
"once_cell",
]
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
[[package]]
name = "fancy-regex"
version = "0.13.0"
@@ -1566,6 +1584,12 @@ dependencies = [
"regex-syntax",
]
+[[package]]
+name = "fastrand"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
+
[[package]]
name = "ff"
version = "0.13.1"
@@ -1761,6 +1785,17 @@ dependencies = [
"polyval",
]
+[[package]]
+name = "gimli"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
+dependencies = [
+ "fallible-iterator",
+ "indexmap 1.9.3",
+ "stable_deref_trait",
+]
+
[[package]]
name = "gimli"
version = "0.31.1"
@@ -1847,6 +1882,10 @@ name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+dependencies = [
+ "ahash",
+ "serde",
+]
[[package]]
name = "hashbrown"
@@ -2109,6 +2148,15 @@ dependencies = [
"zerovec",
]
+[[package]]
+name = "id-arena"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005"
+dependencies = [
+ "rayon",
+]
+
[[package]]
name = "ident_case"
version = "1.0.1"
@@ -2317,6 +2365,12 @@ dependencies = [
"spin",
]
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
[[package]]
name = "libc"
version = "0.2.172"
@@ -2345,6 +2399,12 @@ version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
+[[package]]
+name = "linux-raw-sys"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
+
[[package]]
name = "litemap"
version = "0.8.0"
@@ -3279,7 +3339,20 @@ dependencies = [
"bitflags 2.9.1",
"errno",
"libc",
- "linux-raw-sys",
+ "linux-raw-sys 0.4.15",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "rustix"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266"
+dependencies = [
+ "bitflags 2.9.1",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.9.4",
"windows-sys 0.59.0",
]
@@ -3931,6 +4004,19 @@ version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ac9aa371f599d22256307c24a9d748c041e548cbf599f35d890f9d365361790"
+[[package]]
+name = "tempfile"
+version = "3.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
+dependencies = [
+ "fastrand",
+ "getrandom 0.3.3",
+ "once_cell",
+ "rustix 1.0.7",
+ "windows-sys 0.59.0",
+]
+
[[package]]
name = "termcolor"
version = "1.4.1"
@@ -4579,6 +4665,35 @@ dependencies = [
"winapi-util",
]
+[[package]]
+name = "walrus"
+version = "0.23.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6481311b98508f4bc2d0abbfa5d42172e7a54b4b24d8f15e28b0dc650be0c59f"
+dependencies = [
+ "anyhow",
+ "gimli 0.26.2",
+ "id-arena",
+ "leb128",
+ "log",
+ "rayon",
+ "walrus-macro",
+ "wasm-encoder",
+ "wasmparser",
+]
+
+[[package]]
+name = "walrus-macro"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ad39ff894c43c9649fa724cdde9a6fc50b855d517ef071a93e5df82fe51d3"
+dependencies = [
+ "heck 0.5.0",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
[[package]]
name = "want"
version = "0.3.1"
@@ -4631,6 +4746,47 @@ dependencies = [
"wasm-bindgen-shared",
]
+[[package]]
+name = "wasm-bindgen-cli-runner"
+version = "0.1.0"
+dependencies = [
+ "env_logger",
+ "wasm-bindgen-cli-support",
+]
+
+[[package]]
+name = "wasm-bindgen-cli-support"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21e1a4a49abe9cd6f762fc65fac2ef5732afeeb66be369d2f71a85b165a533cf"
+dependencies = [
+ "anyhow",
+ "base64",
+ "log",
+ "rustc-demangle",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "walrus",
+ "wasm-bindgen-externref-xform",
+ "wasm-bindgen-multi-value-xform",
+ "wasm-bindgen-shared",
+ "wasm-bindgen-threads-xform",
+ "wasm-bindgen-wasm-conventions",
+ "wasm-bindgen-wasm-interpreter",
+]
+
+[[package]]
+name = "wasm-bindgen-externref-xform"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "940542c5cdbe96c35f98b5da5c65fb9d18df55a0cb1d81fc5ca4acc4fda4d61c"
+dependencies = [
+ "anyhow",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
[[package]]
name = "wasm-bindgen-futures"
version = "0.4.50"
@@ -4667,6 +4823,17 @@ dependencies = [
"wasm-bindgen-shared",
]
+[[package]]
+name = "wasm-bindgen-multi-value-xform"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64b5ad2e97adde0c3e4369c38e0dbaee329ad8f6cc2ee8e01d1d0b13bd8b14cf"
+dependencies = [
+ "anyhow",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.100"
@@ -4700,6 +4867,65 @@ dependencies = [
"syn",
]
+[[package]]
+name = "wasm-bindgen-threads-xform"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cbdf2d55a50f7edc9dd9aecae7a3a40e9736fda851bd8816f98a86167c8c277"
+dependencies = [
+ "anyhow",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
+[[package]]
+name = "wasm-bindgen-wasm-conventions"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c24fcaa34d2d84407122cfb1d3f37c3586756cf462be18e049b49245a16c08"
+dependencies = [
+ "anyhow",
+ "leb128",
+ "log",
+ "walrus",
+ "wasmparser",
+]
+
+[[package]]
+name = "wasm-bindgen-wasm-interpreter"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33f24921401faadd6944206f9d6837d07bbb5ff766ed51ad34528089f66550e0"
+dependencies = [
+ "anyhow",
+ "log",
+ "walrus",
+ "wasm-bindgen-wasm-conventions",
+]
+
+[[package]]
+name = "wasm-encoder"
+version = "0.214.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff694f02a8d7a50b6922b197ae03883fbf18cdb2ae9fbee7b6148456f5f44041"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.214.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5309c1090e3e84dad0d382f42064e9933fdaedb87e468cc239f0eabea73ddcb6"
+dependencies = [
+ "ahash",
+ "bitflags 2.9.1",
+ "hashbrown 0.14.5",
+ "indexmap 2.9.0",
+ "semver",
+ "serde",
+]
+
[[package]]
name = "web-sys"
version = "0.3.77"
diff --git a/Cargo.toml b/Cargo.toml
index bbda3dd09..bb53cf716 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -68,6 +68,7 @@ uniffi = "=0.29.1"
uuid = { version = ">=1.3.3, <2.0", features = ["serde", "v4", "js"] }
validator = { version = ">=0.18.1, <0.21", features = ["derive"] }
wasm-bindgen = { version = ">=0.2.91, <0.3", features = ["serde-serialize"] }
+wasm-bindgen-cli-support = ">=0.2.91, <0.3"
wasm-bindgen-futures = "0.4.41"
wasm-bindgen-test = "0.3.45"
serde-wasm-bindgen = ">=0.6.0, <0.7"
diff --git a/crates/bitwarden-wasm-internal/Cargo.toml b/crates/bitwarden-wasm-internal/Cargo.toml
index a18845414..dcbf947b3 100644
--- a/crates/bitwarden-wasm-internal/Cargo.toml
+++ b/crates/bitwarden-wasm-internal/Cargo.toml
@@ -28,9 +28,8 @@ bitwarden-vault = { workspace = true, features = ["wasm"] }
log = "0.4.20"
serde = { workspace = true }
tsify-next = { workspace = true }
-# When upgrading wasm-bindgen, make sure to update the version in the workflows!
-wasm-bindgen = { version = "=0.2.100", features = ["serde-serialize"] }
-wasm-bindgen-futures = "0.4.41"
+wasm-bindgen = { workspace = true }
+wasm-bindgen-futures = { workspace = true }
[lints]
workspace = true
diff --git a/crates/bitwarden-wasm-internal/README.md b/crates/bitwarden-wasm-internal/README.md
index e4727ed38..8afcce52e 100644
--- a/crates/bitwarden-wasm-internal/README.md
+++ b/crates/bitwarden-wasm-internal/README.md
@@ -11,12 +11,10 @@ contain no logic but rather only handle WASM unique conversions and bindings. Bu
### Requirements
- `wasm32-unknown-unknown` rust target.
-- `wasm-bindgen-cli` installed.
- `binaryen` installed for `wasm-opt` and `wasm2js`.
```bash
rustup target add wasm32-unknown-unknown
-cargo install -f wasm-bindgen-cli
brew install binaryen
```
diff --git a/crates/bitwarden-wasm-internal/build.sh b/crates/bitwarden-wasm-internal/build.sh
index a22616893..352946580 100755
--- a/crates/bitwarden-wasm-internal/build.sh
+++ b/crates/bitwarden-wasm-internal/build.sh
@@ -26,8 +26,8 @@ fi
# this normally requires a nightly build, but we can also use the
# RUSTC_BOOTSTRAP hack to use the same stable version as the normal build
RUSTFLAGS=-Ctarget-cpu=mvp RUSTC_BOOTSTRAP=1 cargo build -p bitwarden-wasm-internal -Zbuild-std=panic_abort,std --target wasm32-unknown-unknown ${RELEASE_FLAG}
-wasm-bindgen --target bundler --out-dir crates/bitwarden-wasm-internal/npm ./target/wasm32-unknown-unknown/${BUILD_FOLDER}/bitwarden_wasm_internal.wasm
-wasm-bindgen --target nodejs --out-dir crates/bitwarden-wasm-internal/npm/node ./target/wasm32-unknown-unknown/${BUILD_FOLDER}/bitwarden_wasm_internal.wasm
+cargo run -p wasm-bindgen-cli-runner -- bundler crates/bitwarden-wasm-internal/npm ./target/wasm32-unknown-unknown/${BUILD_FOLDER}/bitwarden_wasm_internal.wasm
+cargo run -p wasm-bindgen-cli-runner -- nodejs crates/bitwarden-wasm-internal/npm/node ./target/wasm32-unknown-unknown/${BUILD_FOLDER}/bitwarden_wasm_internal.wasm
# Format
npx prettier --write ./crates/bitwarden-wasm-internal/npm
diff --git a/crates/wasm-bindgen-cli-runner/Cargo.toml b/crates/wasm-bindgen-cli-runner/Cargo.toml
new file mode 100644
index 000000000..0b311970a
--- /dev/null
+++ b/crates/wasm-bindgen-cli-runner/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "wasm-bindgen-cli-runner"
+version = "0.1.0"
+publish = false
+
+authors.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+readme.workspace = true
+homepage.workspace = true
+repository.workspace = true
+license-file.workspace = true
+keywords.workspace = true
+
+[[bin]]
+name = "wasm-bindgen-cli-runner"
+path = "wasm-bindgen-cli-runner.rs"
+
+[dependencies]
+env_logger = ">=0.11.1, <0.12"
+wasm-bindgen-cli-support = { workspace = true }
diff --git a/crates/wasm-bindgen-cli-runner/wasm-bindgen-cli-runner.rs b/crates/wasm-bindgen-cli-runner/wasm-bindgen-cli-runner.rs
new file mode 100644
index 000000000..c9d0972c2
--- /dev/null
+++ b/crates/wasm-bindgen-cli-runner/wasm-bindgen-cli-runner.rs
@@ -0,0 +1,16 @@
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let args: Vec<_> = std::env::args().skip(1).collect();
+
+ let [target, out_dir, input] = args
+ .try_into()
+ .expect("Usage: cargo run -p wasm-bindgen-cli-runner -- <TARGET> <OUT_DIR> <INPUT>");
+
+ let mut b = wasm_bindgen_cli_support::Bindgen::new();
+ match target.as_str() {
+ "bundler" => b.bundler(true)?,
+ "nodejs" => b.nodejs(true)?,
+ s => panic!("invalid target: `{s}`"),
+ };
+
+ b.typescript(true).input_path(input).generate(out_dir).map_err(Into::into)
+}