aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js')
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.h7
-rw-r--r--src/bun.js/bindings/napi.cpp28
2 files changed, 35 insertions, 0 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.h b/src/bun.js/bindings/ZigGlobalObject.h
index 142065e35..1aee587cf 100644
--- a/src/bun.js/bindings/ZigGlobalObject.h
+++ b/src/bun.js/bindings/ZigGlobalObject.h
@@ -423,6 +423,13 @@ public:
// To do that, we count the number of times we register a module.
int napiModuleRegisterCallCount = 0;
+ // NAPI instance data
+ // This is not a correct implementation
+ // Addon modules can override each other's data
+ void* napiInstanceData = nullptr;
+ void* napiInstanceDataFinalizer = nullptr;
+ void* napiInstanceDataFinalizerHint = nullptr;
+
#include "ZigGeneratedClasses+lazyStructureHeader.h"
private:
diff --git a/src/bun.js/bindings/napi.cpp b/src/bun.js/bindings/napi.cpp
index 649b8bf50..943f37688 100644
--- a/src/bun.js/bindings/napi.cpp
+++ b/src/bun.js/bindings/napi.cpp
@@ -1480,3 +1480,31 @@ extern "C" napi_status napi_get_value_external(napi_env env, napi_value value,
*result = jsCast<Bun::NapiExternal*>(object)->value();
return napi_ok;
}
+
+// TODO: make this per addon instead of globally shared for ALL addons
+extern "C" napi_status napi_get_instance_data(napi_env env,
+ void** data)
+{
+ Zig::GlobalObject* globalObject = toJS(env);
+ if (data == nullptr) {
+ return napi_invalid_arg;
+ }
+
+ *data = globalObject->napiInstanceData;
+ return napi_ok;
+}
+
+extern "C" napi_status napi_set_instance_data(napi_env env,
+ void* data,
+ napi_finalize finalize_cb,
+ void* finalize_hint)
+{
+ Zig::GlobalObject* globalObject = toJS(env);
+ if (data)
+ globalObject->napiInstanceData = data;
+
+ globalObject->napiInstanceDataFinalizer = reinterpret_cast<void*>(finalize_cb);
+ globalObject->napiInstanceDataFinalizerHint = finalize_hint;
+
+ return napi_ok;
+} \ No newline at end of file