node-addon-api 8.5.0 → 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/common.gypi +1 -1
- package/napi-inl.h +78 -3
- package/napi.h +18 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ and exception handling semantics with low overhead.
|
|
|
19
19
|
API references are available in the [doc](doc/README.md) directory.
|
|
20
20
|
|
|
21
21
|
<!-- x-release-please-start-version -->
|
|
22
|
-
## Current version: 8.
|
|
22
|
+
## Current version: 8.6.0
|
|
23
23
|
<!-- x-release-please-end -->
|
|
24
24
|
|
|
25
25
|
(See [CHANGELOG.md](CHANGELOG.md) for complete Changelog)
|
package/common.gypi
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
},
|
|
6
6
|
'conditions': [
|
|
7
7
|
['NAPI_VERSION!=""', { 'defines': ['NAPI_VERSION=<@(NAPI_VERSION)'] } ],
|
|
8
|
-
['NAPI_VERSION==2147483647', { 'defines': ['NAPI_EXPERIMENTAL'] } ],
|
|
8
|
+
['NAPI_VERSION==2147483647', { 'defines': ['NAPI_EXPERIMENTAL', 'NODE_API_EXPERIMENTAL_NO_WARNING'] } ],
|
|
9
9
|
['disable_deprecated=="true"', {
|
|
10
10
|
'defines': ['NODE_ADDON_API_DISABLE_DEPRECATED']
|
|
11
11
|
}],
|
package/napi-inl.h
CHANGED
|
@@ -21,6 +21,12 @@
|
|
|
21
21
|
#include <type_traits>
|
|
22
22
|
#include <utility>
|
|
23
23
|
|
|
24
|
+
#if defined(__clang__) || defined(__GNUC__)
|
|
25
|
+
#define NAPI_NO_SANITIZE_VPTR __attribute__((no_sanitize("vptr")))
|
|
26
|
+
#else
|
|
27
|
+
#define NAPI_NO_SANITIZE_VPTR
|
|
28
|
+
#endif
|
|
29
|
+
|
|
24
30
|
namespace Napi {
|
|
25
31
|
|
|
26
32
|
#ifdef NAPI_CPP_CUSTOM_NAMESPACE
|
|
@@ -934,6 +940,19 @@ inline bool Value::IsExternal() const {
|
|
|
934
940
|
return Type() == napi_external;
|
|
935
941
|
}
|
|
936
942
|
|
|
943
|
+
#ifdef NODE_API_EXPERIMENTAL_HAS_SHAREDARRAYBUFFER
|
|
944
|
+
inline bool Value::IsSharedArrayBuffer() const {
|
|
945
|
+
if (IsEmpty()) {
|
|
946
|
+
return false;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
bool result;
|
|
950
|
+
napi_status status = node_api_is_sharedarraybuffer(_env, _value, &result);
|
|
951
|
+
NAPI_THROW_IF_FAILED(_env, status, false);
|
|
952
|
+
return result;
|
|
953
|
+
}
|
|
954
|
+
#endif
|
|
955
|
+
|
|
937
956
|
template <typename T>
|
|
938
957
|
inline T Value::As() const {
|
|
939
958
|
#ifdef NODE_ADDON_API_ENABLE_TYPE_CHECK_ON_AS
|
|
@@ -2068,6 +2087,55 @@ inline uint32_t Array::Length() const {
|
|
|
2068
2087
|
return result;
|
|
2069
2088
|
}
|
|
2070
2089
|
|
|
2090
|
+
#ifdef NODE_API_EXPERIMENTAL_HAS_SHAREDARRAYBUFFER
|
|
2091
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
2092
|
+
// SharedArrayBuffer class
|
|
2093
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
2094
|
+
|
|
2095
|
+
inline SharedArrayBuffer::SharedArrayBuffer() : Object() {}
|
|
2096
|
+
|
|
2097
|
+
inline SharedArrayBuffer::SharedArrayBuffer(napi_env env, napi_value value)
|
|
2098
|
+
: Object(env, value) {}
|
|
2099
|
+
|
|
2100
|
+
inline void SharedArrayBuffer::CheckCast(napi_env env, napi_value value) {
|
|
2101
|
+
NAPI_CHECK(value != nullptr, "SharedArrayBuffer::CheckCast", "empty value");
|
|
2102
|
+
|
|
2103
|
+
bool result;
|
|
2104
|
+
napi_status status = node_api_is_sharedarraybuffer(env, value, &result);
|
|
2105
|
+
NAPI_CHECK(status == napi_ok,
|
|
2106
|
+
"SharedArrayBuffer::CheckCast",
|
|
2107
|
+
"node_api_is_sharedarraybuffer failed");
|
|
2108
|
+
NAPI_CHECK(
|
|
2109
|
+
result, "SharedArrayBuffer::CheckCast", "value is not sharedarraybuffer");
|
|
2110
|
+
}
|
|
2111
|
+
|
|
2112
|
+
inline SharedArrayBuffer SharedArrayBuffer::New(napi_env env,
|
|
2113
|
+
size_t byteLength) {
|
|
2114
|
+
napi_value value;
|
|
2115
|
+
void* data;
|
|
2116
|
+
napi_status status =
|
|
2117
|
+
node_api_create_sharedarraybuffer(env, byteLength, &data, &value);
|
|
2118
|
+
NAPI_THROW_IF_FAILED(env, status, SharedArrayBuffer());
|
|
2119
|
+
|
|
2120
|
+
return SharedArrayBuffer(env, value);
|
|
2121
|
+
}
|
|
2122
|
+
|
|
2123
|
+
inline void* SharedArrayBuffer::Data() {
|
|
2124
|
+
void* data;
|
|
2125
|
+
napi_status status = napi_get_arraybuffer_info(_env, _value, &data, nullptr);
|
|
2126
|
+
NAPI_THROW_IF_FAILED(_env, status, nullptr);
|
|
2127
|
+
return data;
|
|
2128
|
+
}
|
|
2129
|
+
|
|
2130
|
+
inline size_t SharedArrayBuffer::ByteLength() {
|
|
2131
|
+
size_t length;
|
|
2132
|
+
napi_status status =
|
|
2133
|
+
napi_get_arraybuffer_info(_env, _value, nullptr, &length);
|
|
2134
|
+
NAPI_THROW_IF_FAILED(_env, status, 0);
|
|
2135
|
+
return length;
|
|
2136
|
+
}
|
|
2137
|
+
#endif // NODE_API_EXPERIMENTAL_HAS_SHAREDARRAYBUFFER
|
|
2138
|
+
|
|
2071
2139
|
////////////////////////////////////////////////////////////////////////////////
|
|
2072
2140
|
// ArrayBuffer class
|
|
2073
2141
|
////////////////////////////////////////////////////////////////////////////////
|
|
@@ -4717,7 +4785,8 @@ inline napi_value InstanceWrap<T>::WrappedMethod(
|
|
|
4717
4785
|
////////////////////////////////////////////////////////////////////////////////
|
|
4718
4786
|
|
|
4719
4787
|
template <typename T>
|
|
4720
|
-
inline ObjectWrap<T>::ObjectWrap(
|
|
4788
|
+
inline NAPI_NO_SANITIZE_VPTR ObjectWrap<T>::ObjectWrap(
|
|
4789
|
+
const Napi::CallbackInfo& callbackInfo) {
|
|
4721
4790
|
napi_env env = callbackInfo.Env();
|
|
4722
4791
|
napi_value wrapper = callbackInfo.This();
|
|
4723
4792
|
napi_status status;
|
|
@@ -4731,7 +4800,7 @@ inline ObjectWrap<T>::ObjectWrap(const Napi::CallbackInfo& callbackInfo) {
|
|
|
4731
4800
|
}
|
|
4732
4801
|
|
|
4733
4802
|
template <typename T>
|
|
4734
|
-
inline ObjectWrap<T>::~ObjectWrap() {
|
|
4803
|
+
inline NAPI_NO_SANITIZE_VPTR ObjectWrap<T>::~ObjectWrap() {
|
|
4735
4804
|
// If the JS object still exists at this point, remove the finalizer added
|
|
4736
4805
|
// through `napi_wrap()`.
|
|
4737
4806
|
if (!IsEmpty() && !_finalized) {
|
|
@@ -4744,8 +4813,12 @@ inline ObjectWrap<T>::~ObjectWrap() {
|
|
|
4744
4813
|
}
|
|
4745
4814
|
}
|
|
4746
4815
|
|
|
4816
|
+
// with RTTI turned on, modern compilers check to see if virtual function
|
|
4817
|
+
// pointers are stripped of RTTI by void casts. this is intrinsic to how Unwrap
|
|
4818
|
+
// works, so we inject a compiler pragma to turn off that check just for the
|
|
4819
|
+
// affected methods. this compiler check is on by default in Android NDK 29.
|
|
4747
4820
|
template <typename T>
|
|
4748
|
-
inline T* ObjectWrap<T>::Unwrap(Object wrapper) {
|
|
4821
|
+
inline NAPI_NO_SANITIZE_VPTR T* ObjectWrap<T>::Unwrap(Object wrapper) {
|
|
4749
4822
|
void* unwrapped;
|
|
4750
4823
|
napi_status status = napi_unwrap(wrapper.Env(), wrapper, &unwrapped);
|
|
4751
4824
|
NAPI_THROW_IF_FAILED(wrapper.Env(), status, nullptr);
|
|
@@ -7030,4 +7103,6 @@ inline void BasicEnv::PostFinalizer(FinalizerType finalizeCallback,
|
|
|
7030
7103
|
|
|
7031
7104
|
} // namespace Napi
|
|
7032
7105
|
|
|
7106
|
+
#undef NAPI_NO_SANITIZE_VPTR
|
|
7107
|
+
|
|
7033
7108
|
#endif // SRC_NAPI_INL_H_
|
package/napi.h
CHANGED
|
@@ -543,6 +543,9 @@ class Value {
|
|
|
543
543
|
bool IsDataView() const; ///< Tests if a value is a JavaScript data view.
|
|
544
544
|
bool IsBuffer() const; ///< Tests if a value is a Node buffer.
|
|
545
545
|
bool IsExternal() const; ///< Tests if a value is a pointer to external data.
|
|
546
|
+
#ifdef NODE_API_EXPERIMENTAL_HAS_SHAREDARRAYBUFFER
|
|
547
|
+
bool IsSharedArrayBuffer() const;
|
|
548
|
+
#endif
|
|
546
549
|
|
|
547
550
|
/// Casts to another type of `Napi::Value`, when the actual type is known or
|
|
548
551
|
/// assumed.
|
|
@@ -1202,6 +1205,21 @@ class Object::iterator {
|
|
|
1202
1205
|
};
|
|
1203
1206
|
#endif // NODE_ADDON_API_CPP_EXCEPTIONS
|
|
1204
1207
|
|
|
1208
|
+
#ifdef NODE_API_EXPERIMENTAL_HAS_SHAREDARRAYBUFFER
|
|
1209
|
+
class SharedArrayBuffer : public Object {
|
|
1210
|
+
public:
|
|
1211
|
+
SharedArrayBuffer();
|
|
1212
|
+
SharedArrayBuffer(napi_env env, napi_value value);
|
|
1213
|
+
|
|
1214
|
+
static SharedArrayBuffer New(napi_env env, size_t byteLength);
|
|
1215
|
+
|
|
1216
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
1217
|
+
|
|
1218
|
+
void* Data();
|
|
1219
|
+
size_t ByteLength();
|
|
1220
|
+
};
|
|
1221
|
+
#endif
|
|
1222
|
+
|
|
1205
1223
|
/// A JavaScript array buffer value.
|
|
1206
1224
|
class ArrayBuffer : public Object {
|
|
1207
1225
|
public:
|