diff options
author | Aaron O'Mullan <aaron.omullan@gmail.com> | 2021-10-01 20:25:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-01 20:25:33 +0200 |
commit | 26de5165589ea10567d59ce7f630ec521cce6083 (patch) | |
tree | 66961c42cfa5a1659efc5bcd8e0d3aa88a6f6720 | |
parent | 1dfa35b2ba1dadf0158a00b72e98d83cd3e69ee5 (diff) |
feat(core): implement Deno.core.isProxy() (#12288)
-rw-r--r-- | core/bindings.rs | 12 | ||||
-rw-r--r-- | core/runtime.rs | 21 |
2 files changed, 33 insertions, 0 deletions
diff --git a/core/bindings.rs b/core/bindings.rs index 3bff22e50..aff632161 100644 --- a/core/bindings.rs +++ b/core/bindings.rs @@ -64,6 +64,9 @@ lazy_static::lazy_static! { function: get_proxy_details.map_fn_to() }, v8::ExternalReference { + function: is_proxy.map_fn_to() + }, + v8::ExternalReference { function: memory_usage.map_fn_to(), }, v8::ExternalReference { @@ -146,6 +149,7 @@ pub fn initialize_context<'s>( set_func(scope, core_val, "deserialize", deserialize); set_func(scope, core_val, "getPromiseDetails", get_promise_details); set_func(scope, core_val, "getProxyDetails", get_proxy_details); + set_func(scope, core_val, "isProxy", is_proxy); set_func(scope, core_val, "memoryUsage", memory_usage); set_func(scope, core_val, "callConsole", call_console); set_func(scope, core_val, "createHostObject", create_host_object); @@ -1119,6 +1123,14 @@ fn get_proxy_details( rv.set(to_v8(scope, p).unwrap()); } +fn is_proxy( + scope: &mut v8::HandleScope, + args: v8::FunctionCallbackArguments, + mut rv: v8::ReturnValue, +) { + rv.set(v8::Boolean::new(scope, args.get(0).is_proxy()).into()) +} + fn throw_type_error(scope: &mut v8::HandleScope, message: impl AsRef<str>) { let message = v8::String::new(scope, message.as_ref()).unwrap(); let exception = v8::Exception::type_error(scope, message); diff --git a/core/runtime.rs b/core/runtime.rs index ffd8e49c5..3943415f8 100644 --- a/core/runtime.rs +++ b/core/runtime.rs @@ -2273,4 +2273,25 @@ assertEquals(1, notify_return_value); let mut runtime = JsRuntime::new(options); runtime.execute_script("<none>", "").unwrap(); } + + #[test] + fn test_is_proxy() { + let mut runtime = JsRuntime::new(RuntimeOptions::default()); + let all_true: v8::Global<v8::Value> = runtime + .execute_script( + "is_proxy.js", + r#" + (function () { + const { isProxy } = Deno.core; + const o = { a: 1, b: 2}; + const p = new Proxy(o, {}); + return isProxy(p) && !isProxy(o) && !isProxy(42); + })() + "#, + ) + .unwrap(); + let mut scope = runtime.handle_scope(); + let all_true = v8::Local::<v8::Value>::new(&mut scope, &all_true); + assert!(all_true.is_true()); + } } |