Skip to content

Commit a897715

Browse files
authored
Merge pull request #838 from brisad/object-get-descriptors
Object get descriptors
2 parents 47acbab + 2d91fa1 commit a897715

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

crates/js-sys/src/lib.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2022,6 +2022,22 @@ extern "C" {
20222022
#[wasm_bindgen(static_method_of = Object)]
20232023
pub fn freeze(value: &Object) -> Object;
20242024

2025+
/// The Object.getOwnPropertyDescriptor() method returns a
2026+
/// property descriptor for an own property (that is, one directly
2027+
/// present on an object and not in the object's prototype chain)
2028+
/// of a given object.
2029+
///
2030+
/// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor)
2031+
#[wasm_bindgen(static_method_of = Object, js_name = getOwnPropertyDescriptor)]
2032+
pub fn get_own_property_descriptor(obj: &Object, prop: &JsValue) -> JsValue;
2033+
2034+
/// The Object.getOwnPropertyDescriptors() method returns all own
2035+
/// property descriptors of a given object.
2036+
///
2037+
/// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors)
2038+
#[wasm_bindgen(static_method_of = Object, js_name = getOwnPropertyDescriptors)]
2039+
pub fn get_own_property_descriptors(obj: &Object) -> JsValue;
2040+
20252041
/// The `hasOwnProperty()` method returns a boolean indicating whether the
20262042
/// object has the specified property as its own property (as opposed to
20272043
/// inheriting it).

crates/js-sys/tests/wasm/Object.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ extern "C" {
1313
type DefinePropertyAttrs;
1414
#[wasm_bindgen(method, setter, structural)]
1515
fn set_value(this: &DefinePropertyAttrs, val: &JsValue);
16+
17+
type PropertyDescriptor;
18+
#[wasm_bindgen(method, getter, structural)]
19+
fn value(this: &PropertyDescriptor) -> JsValue;
1620
}
1721

1822
#[wasm_bindgen(module = "tests/wasm/Object.js")]
@@ -101,6 +105,23 @@ fn define_properties() {
101105
assert!(foo.has_own_property(&"car".into()));
102106
}
103107

108+
#[wasm_bindgen_test]
109+
fn get_own_property_descriptor() {
110+
let foo = foo_42();
111+
let desc = Object::get_own_property_descriptor(&foo, &"foo".into());
112+
assert_eq!(PropertyDescriptor::from(desc).value(), 42);
113+
let desc = Object::get_own_property_descriptor(&foo, &"bar".into());
114+
assert!(PropertyDescriptor::from(desc).value().is_undefined());
115+
}
116+
117+
#[wasm_bindgen_test]
118+
fn get_own_property_descriptors() {
119+
let foo = foo_42();
120+
let descriptors = Object::get_own_property_descriptors(&foo);
121+
let foo_desc = Reflect::get(&descriptors, &"foo".into());
122+
assert_eq!(PropertyDescriptor::from(foo_desc).value(), 42);
123+
}
124+
104125
#[wasm_bindgen_test]
105126
fn has_own_property() {
106127
assert!(foo_42().has_own_property(&"foo".into()));

0 commit comments

Comments
 (0)