diff --git a/src/js.rs b/src/js.rs index fcf9bc85..a85a879c 100644 --- a/src/js.rs +++ b/src/js.rs @@ -1041,7 +1041,7 @@ extern "C" { /// /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has #[wasm_bindgen(static_method_of = Reflect, catch)] - pub fn has(target: &JsValue, property_key: &JsValue) -> Result; + pub fn has(target: &JsValue, property_key: &JsValue) -> Result; /// The static Reflect.isExtensible() method determines if an object is extensible /// (whether it can have new properties added to it). It is similar to @@ -1050,6 +1050,13 @@ extern "C" { /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible #[wasm_bindgen(static_method_of = Reflect, js_name = isExtensible, catch)] pub fn is_extensible(target: &Object) -> Result; + + /// The static Reflect.ownKeys() method returns an array of the + /// target object's own property keys. + /// + /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys + #[wasm_bindgen(static_method_of = Reflect, js_name = ownKeys, catch)] + pub fn own_keys(target: &Object) -> Result; } // Set diff --git a/tests/all/js_globals/Reflect.rs b/tests/all/js_globals/Reflect.rs index 50ee68d8..1269f402 100644 --- a/tests/all/js_globals/Reflect.rs +++ b/tests/all/js_globals/Reflect.rs @@ -483,4 +483,49 @@ fn is_extensible() { "#, ) .test() +} + +#[test] +fn own_keys() { + project() + .file( + "src/lib.rs", + r#" + #![feature(proc_macro, wasm_custom_section)] + + extern crate wasm_bindgen; + use wasm_bindgen::prelude::*; + use wasm_bindgen::js; + + #[wasm_bindgen] + pub fn own_keys(target: &js::Object) -> JsValue { + let result = js::Reflect::own_keys(target); + let result = match result { + Ok(val) => val, + Err(_err) => "TypeError".into() + }; + result + } + "#, + ) + .file( + "test.ts", + r#" + import * as assert from "assert"; + import * as wasm from "./out"; + + export function test() { + const object = { + property: 42 + }; + const array: number[] = []; + + assert.equal(wasm.own_keys(object)[0], "property"); + assert.equal(wasm.own_keys(array)[0], "length"); + + assert.equal(wasm.own_keys(""), "TypeError"); + } + "#, + ) + .test() } \ No newline at end of file