diff --git a/src/Cargo.lock b/src/Cargo.lock index 6ed86838..cca2e14e 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -294,8 +294,10 @@ dependencies = [ "cloudformation-validate-validation-engine", "console_error_panic_hook", "getrandom 0.3.4", + "js-sys", "serde", "serde-wasm-bindgen", + "serde_json", "tsify", "wasm-bindgen", ] diff --git a/src/bindings-wasm/Cargo.toml b/src/bindings-wasm/Cargo.toml index 76edd741..04fc456a 100644 --- a/src/bindings-wasm/Cargo.toml +++ b/src/bindings-wasm/Cargo.toml @@ -23,7 +23,9 @@ composite-engine = { workspace = true } schema-validator = { workspace = true, features = ["wasm-bindings"] } wasm-bindgen = "0.2" serde = { version = "1", features = ["derive"] } +serde_json = "=1.0.151" serde-wasm-bindgen = "0.6" +js-sys = "=0.3.103" tsify = { version = "0.5", features = ["js"] } console_error_panic_hook = "0.1" getrandom = { version = "0.3", features = ["wasm_js"] } diff --git a/src/bindings-wasm/src/lib.rs b/src/bindings-wasm/src/lib.rs index 91604a25..142179d3 100644 --- a/src/bindings-wasm/src/lib.rs +++ b/src/bindings-wasm/src/lib.rs @@ -15,8 +15,6 @@ use validation_engine::{ }; use wasm_bindgen::prelude::*; -const SERIALIZER: serde_wasm_bindgen::Serializer = serde_wasm_bindgen::Serializer::json_compatible(); - #[wasm_bindgen] extern "C" { /// Host callback told the message of a panic before the instance traps. @@ -104,8 +102,9 @@ fn from_js(value: JsValue) -> Result { serde_wasm_bindgen::from_value(value).map_err(|error| wasm_bindgen::JsError::new(&error.to_string()).into()) } -fn to_js(val: &T) -> Result { - val.serialize(&SERIALIZER).map_err(to_js_err) +fn to_js(value: &T) -> Result { + let json = serde_json::to_string(value).map_err(to_js_err)?; + js_sys::JSON::parse(&json) } /// Maps a caught panic message to a thrown JS error so an internal panic