[napi] Implement napi_remove_wrap

This commit is contained in:
Jarred Sumner
2022-10-01 13:23:32 -07:00
parent 1dac9248ad
commit bab317edd1
3 changed files with 32 additions and 0 deletions

View File

@@ -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)
{

View File

@@ -125,4 +125,5 @@
_napi_unref_threadsafe_function;
_napi_unwrap;
_napi_wrap;
_napi_remove_wrap;
};

View File

@@ -124,3 +124,4 @@ _napi_typeof
_napi_unref_threadsafe_function
_napi_unwrap
_napi_wrap
_napi_remove_wrap