summaryrefslogtreecommitdiff
path: root/src/js_native_api_v8_internals.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/js_native_api_v8_internals.h')
-rw-r--r--src/js_native_api_v8_internals.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/js_native_api_v8_internals.h b/src/js_native_api_v8_internals.h
new file mode 100644
index 0000000000..91baae6a3b
--- /dev/null
+++ b/src/js_native_api_v8_internals.h
@@ -0,0 +1,35 @@
+#ifndef SRC_JS_NATIVE_API_V8_INTERNALS_H_
+#define SRC_JS_NATIVE_API_V8_INTERNALS_H_
+
+// The V8 implementation of N-API, including `js_native_api_v8.h` uses certain
+// idioms which require definition here. For example, it uses a variant of
+// persistent references which need not be reset in the constructor. It is the
+// responsibility of this file to define these idioms.
+
+// In the case of the Node.js implementation of N-API some of the idioms are
+// imported directly from Node.js by including `node_internals.h` below. Others
+// are bridged to remove references to the `node` namespace.
+
+#include "node_version.h"
+#include "env.h"
+#include "node_internals.h"
+
+#define NAPI_ARRAYSIZE(array) \
+ node::arraysize((array))
+
+#define NAPI_FIXED_ONE_BYTE_STRING(isolate, string) \
+ node::FIXED_ONE_BYTE_STRING((isolate), (string))
+
+#define NAPI_PRIVATE_KEY(context, suffix) \
+ (node::Environment::GetCurrent((context))->napi_ ## suffix())
+
+namespace v8impl {
+
+template <typename T>
+using Persistent = node::Persistent<T>;
+
+using PersistentToLocal = node::PersistentToLocal;
+
+} // end of namespace v8impl
+
+#endif // SRC_JS_NATIVE_API_V8_INTERNALS_H_