summaryrefslogtreecommitdiff
path: root/core/bindings.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/bindings.rs')
-rw-r--r--core/bindings.rs61
1 files changed, 60 insertions, 1 deletions
diff --git a/core/bindings.rs b/core/bindings.rs
index 55cb080f6..0a755c298 100644
--- a/core/bindings.rs
+++ b/core/bindings.rs
@@ -50,7 +50,10 @@ lazy_static! {
},
v8::ExternalReference {
function: get_promise_details.map_fn_to()
- }
+ },
+ v8::ExternalReference {
+ function: get_proxy_details.map_fn_to()
+ },
]);
}
@@ -181,6 +184,18 @@ pub fn initialize_context<'s>(
get_promise_details_val.into(),
);
+ let get_proxy_details_key =
+ v8::String::new(scope, "getProxyDetails").unwrap();
+ let get_proxy_details_tmpl =
+ v8::FunctionTemplate::new(scope, get_proxy_details);
+ let get_proxy_details_val =
+ get_proxy_details_tmpl.get_function(scope).unwrap();
+ core_val.set(
+ scope,
+ get_proxy_details_key.into(),
+ get_proxy_details_val.into(),
+ );
+
let shared_key = v8::String::new(scope, "shared").unwrap();
core_val.set_accessor(scope, shared_key.into(), shared_getter);
@@ -797,6 +812,50 @@ fn get_promise_details(
}
}
+// Based on https://github.com/nodejs/node/blob/1e470510ff74391d7d4ec382909ea8960d2d2fbc/src/node_util.cc
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+fn get_proxy_details(
+ scope: &mut v8::HandleScope,
+ args: v8::FunctionCallbackArguments,
+ mut rv: v8::ReturnValue,
+) {
+ // Return undefined if it's not a proxy.
+ let proxy = match v8::Local::<v8::Proxy>::try_from(args.get(0)) {
+ Ok(val) => val,
+ Err(_) => {
+ return;
+ }
+ };
+
+ let proxy_details = v8::Array::new(scope, 2);
+ let js_zero = v8::Integer::new(scope, 0);
+ let js_one = v8::Integer::new(scope, 1);
+ let target = proxy.get_target(scope);
+ let handler = proxy.get_handler(scope);
+ proxy_details.set(scope, js_zero.into(), target);
+ proxy_details.set(scope, js_one.into(), handler);
+ rv.set(proxy_details.into());
+}
+
fn throw_type_error<'s>(
scope: &mut v8::HandleScope<'s>,
message: impl AsRef<str>,