From 2b8e789c9cc440fd58e13fa6f08b6f350d13015c Mon Sep 17 00:00:00 2001 From: Stephan Renatus Date: Wed, 4 Jul 2018 09:27:32 +0200 Subject: [PATCH] Bindings for Proxy.new() Signed-off-by: Stephan Renatus --- src/js.rs | 14 +++++++++++++ tests/all/js_globals/Proxy.rs | 37 +++++++++++++++++++++++++++++++++++ tests/all/js_globals/mod.rs | 1 + 3 files changed, 52 insertions(+) create mode 100644 tests/all/js_globals/Proxy.rs diff --git a/src/js.rs b/src/js.rs index c70d6d2d..c3ab4646 100644 --- a/src/js.rs +++ b/src/js.rs @@ -1030,6 +1030,20 @@ extern "C" { pub fn values(object: &Object) -> Array; } +// Proxy +#[wasm_bindgen] +extern { + pub type Proxy; + + /// The Proxy object is used to define custom behavior for fundamental + /// operations (e.g. property lookup, assignment, enumeration, function + /// invocation, etc). + /// + /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy + #[wasm_bindgen(constructor)] + pub fn new(target: &JsValue, handler: &Object) -> Proxy; +} + // Set #[wasm_bindgen] extern { diff --git a/tests/all/js_globals/Proxy.rs b/tests/all/js_globals/Proxy.rs new file mode 100644 index 00000000..990409e6 --- /dev/null +++ b/tests/all/js_globals/Proxy.rs @@ -0,0 +1,37 @@ +#![allow(non_snake_case)] + +use project; + +#[test] +fn new() { + 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 new_proxy(target: JsValue, handler: js::Object) -> js::Proxy { + js::Proxy::new(&target, &handler) + } + "#) + .file("test.ts", r#" + import * as assert from "assert"; + import * as wasm from "./out"; + + export function test() { + const target = { a: 100 }; + const handler = { + get: function(obj: any, prop: any) { + return prop in obj ? obj[prop] : 37; + } + }; + const proxy = wasm.new_proxy(target, handler); + assert.equal(proxy.a, 100); + assert.equal(proxy.b, 37); + } + "#) + .test() +} diff --git a/tests/all/js_globals/mod.rs b/tests/all/js_globals/mod.rs index b53425ac..ee786dda 100644 --- a/tests/all/js_globals/mod.rs +++ b/tests/all/js_globals/mod.rs @@ -16,6 +16,7 @@ mod MapIterator; mod Math; mod Number; mod Object; +mod Proxy; mod Set; mod SetIterator; mod TypedArray;