1#ifndef SRC_JS_NATIVE_API_V8_INTERNALS_H_
2#define SRC_JS_NATIVE_API_V8_INTERNALS_H_
3
4// The V8 implementation of N-API, including `js_native_api_v8.h` uses certain
5// idioms which require definition here. For example, it uses a variant of
6// persistent references which need not be reset in the constructor. It is the
7// responsibility of this file to define these idioms. Optionally, this file
8// may also define `NAPI_VERSION` and set it to the version of N-API to be
9// exposed.
10
11// In the case of the Node.js implementation of N-API some of the idioms are
12// imported directly from Node.js by including `node_internals.h` below. Others
13// are bridged to remove references to the `node` namespace. `node_version.h`,
14// included below, defines `NAPI_VERSION`.
15
16#include "node_version.h"
17
18#include "env.h"
19#include "gtest/gtest_prod.h"
20#include "node_errors.h"
21#include "node_internals.h"
22
23#define JSVM_ARRAYSIZE(array) node::arraysize((array))
24
25#define JSVM_FIXED_ONE_BYTE_STRING(isolate, string)                            \
26  node::FIXED_ONE_BYTE_STRING((isolate), (string))
27
28#define JSVM_PRIVATE_KEY(isolate, suffix)                                      \
29    (v8impl::GetIsolateData(isolate)->jsvm_##suffix##_key.Get(isolate))
30
31namespace v8impl {
32
33template <typename T>
34using Persistent = v8::Global<T>;
35
36using PersistentToLocal = node::PersistentToLocal;
37
38[[noreturn]] inline void OnFatalError(const char* location,
39                                      const char* message) {
40  node::OnFatalError(location, message);
41}
42
43}  // end of namespace v8impl
44
45#endif  // SRC_JS_NATIVE_API_V8_INTERNALS_H_
46