aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/bindings/napi.cpp30
-rw-r--r--src/symbols.dyn1
-rw-r--r--src/symbols.txt1
3 files changed, 32 insertions, 0 deletions
diff --git a/src/bun.js/bindings/napi.cpp b/src/bun.js/bindings/napi.cpp
index 4acd52d8a..223808035 100644
--- a/src/bun.js/bindings/napi.cpp
+++ b/src/bun.js/bindings/napi.cpp
@@ -575,6 +575,36 @@ extern "C" napi_status napi_wrap(napi_env env,
return napi_ok;
}
+extern "C" napi_status napi_remove_wrap(napi_env env, napi_value js_object,
+ void** result)
+{
+ JSValue value = toJS(js_object);
+ if (!value || value.isUndefinedOrNull()) {
+ return napi_object_expected;
+ }
+
+ auto* globalObject = toJS(env);
+ auto& vm = globalObject->vm();
+ auto* val = jsDynamicCast<NapiPrototype*>(value);
+
+ if (!val) {
+ return napi_object_expected;
+ }
+
+ if (!val->napiRef) {
+ // not sure if this should succeed or return an error
+ return napi_ok;
+ }
+
+ *result = val->napiRef->data;
+
+ auto* ref = val->napiRef;
+ val->napiRef = nullptr;
+ delete ref;
+
+ return napi_ok;
+}
+
extern "C" napi_status napi_unwrap(napi_env env, napi_value js_object,
void** result)
{
diff --git a/src/symbols.dyn b/src/symbols.dyn
index 0e02635bc..d81166623 100644
--- a/src/symbols.dyn
+++ b/src/symbols.dyn
@@ -125,4 +125,5 @@
_napi_unref_threadsafe_function;
_napi_unwrap;
_napi_wrap;
+ _napi_remove_wrap;
}; \ No newline at end of file
diff --git a/src/symbols.txt b/src/symbols.txt
index 1a570556f..7367f1549 100644
--- a/src/symbols.txt
+++ b/src/symbols.txt
@@ -124,3 +124,4 @@ _napi_typeof
_napi_unref_threadsafe_function
_napi_unwrap
_napi_wrap
+_napi_remove_wrap