diff --git a/crates/js-sys/src/lib.rs b/crates/js-sys/src/lib.rs index f968873d..952da3ed 100644 --- a/crates/js-sys/src/lib.rs +++ b/crates/js-sys/src/lib.rs @@ -2176,6 +2176,13 @@ extern "C" { #[wasm_bindgen(static_method_of = Object)] pub fn freeze(value: &Object) -> Object; + /// The Object.fromEntries() method transforms a list of key-value pairs + /// into an object. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries) + #[wasm_bindgen(static_method_of = Object, catch, js_name = fromEntries)] + pub fn from_entries(iterable: &JsValue) -> Result; + /// The Object.getOwnPropertyDescriptor() method returns a /// property descriptor for an own property (that is, one directly /// present on an object and not in the object's prototype chain) diff --git a/crates/js-sys/tests/wasm/Object.rs b/crates/js-sys/tests/wasm/Object.rs index cf49b7ac..0f7ed840 100644 --- a/crates/js-sys/tests/wasm/Object.rs +++ b/crates/js-sys/tests/wasm/Object.rs @@ -123,6 +123,25 @@ fn entries() { }); } +#[wasm_bindgen_test] +fn from_entries() { + let array = Array::new(); + let entry_one = Array::new(); + let entry_two = Array::new(); + entry_one.push(&"foo".into()); + entry_one.push(&"bar".into()); + entry_two.push(&"baz".into()); + entry_two.push(&42.into()); + let object = Object::from_entries(&array).unwrap(); + + assert_eq!(Reflect::get(object.as_ref(), &"foo".into()).unwrap(), "bar"); + assert_eq!(Reflect::get(object.as_ref(), &"baz".into()).unwrap(), 42); + + let not_iterable = Object::new(); + let error = Object::from_entries(¬_iterable).unwrap_err(); + assert!(error.is_instance_of::()); +} + #[wasm_bindgen_test] fn get_own_property_descriptor() { let foo = foo_42();