node-addon-api 5.1.0 → 6.1.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/napi-inl.h +317 -32
- package/napi.h +85 -8
- package/package.json +9 -1
- package/tools/eslint-format.js +2 -2
package/README.md
CHANGED
package/napi-inl.h
CHANGED
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
|
|
13
13
|
#include <algorithm>
|
|
14
14
|
#include <cstring>
|
|
15
|
+
#if NAPI_HAS_THREADS
|
|
15
16
|
#include <mutex>
|
|
17
|
+
#endif // NAPI_HAS_THREADS
|
|
16
18
|
#include <type_traits>
|
|
17
19
|
#include <utility>
|
|
18
20
|
|
|
@@ -22,9 +24,13 @@ namespace Napi {
|
|
|
22
24
|
namespace NAPI_CPP_CUSTOM_NAMESPACE {
|
|
23
25
|
#endif
|
|
24
26
|
|
|
25
|
-
// Helpers to handle functions exposed from C
|
|
27
|
+
// Helpers to handle functions exposed from C++ and internal constants.
|
|
26
28
|
namespace details {
|
|
27
29
|
|
|
30
|
+
// New napi_status constants not yet available in all supported versions of
|
|
31
|
+
// Node.js releases. Only necessary when they are used in napi.h and napi-inl.h.
|
|
32
|
+
constexpr int napi_no_external_buffers_allowed = 22;
|
|
33
|
+
|
|
28
34
|
// Attach a data item to an object and delete it when the object gets
|
|
29
35
|
// garbage-collected.
|
|
30
36
|
// TODO: Replace this code with `napi_add_finalizer()` whenever it becomes
|
|
@@ -201,7 +207,7 @@ struct FinalizeData {
|
|
|
201
207
|
Hint* hint;
|
|
202
208
|
};
|
|
203
209
|
|
|
204
|
-
#if (NAPI_VERSION > 3 &&
|
|
210
|
+
#if (NAPI_VERSION > 3 && NAPI_HAS_THREADS)
|
|
205
211
|
template <typename ContextType = void,
|
|
206
212
|
typename Finalizer = std::function<void(Env, void*, ContextType*)>,
|
|
207
213
|
typename FinalizerDataType = void>
|
|
@@ -295,7 +301,7 @@ napi_value DefaultCallbackWrapper(napi_env env, Napi::Function cb) {
|
|
|
295
301
|
return cb;
|
|
296
302
|
}
|
|
297
303
|
#endif // NAPI_VERSION > 4
|
|
298
|
-
#endif // NAPI_VERSION > 3 &&
|
|
304
|
+
#endif // NAPI_VERSION > 3 && NAPI_HAS_THREADS
|
|
299
305
|
|
|
300
306
|
template <typename Getter, typename Setter>
|
|
301
307
|
struct AccessorCallbackData {
|
|
@@ -736,6 +742,9 @@ inline bool Value::IsExternal() const {
|
|
|
736
742
|
|
|
737
743
|
template <typename T>
|
|
738
744
|
inline T Value::As() const {
|
|
745
|
+
#ifdef NODE_ADDON_API_ENABLE_TYPE_CHECK_ON_AS
|
|
746
|
+
T::CheckCast(_env, _value);
|
|
747
|
+
#endif
|
|
739
748
|
return T(_env, _value);
|
|
740
749
|
}
|
|
741
750
|
|
|
@@ -778,6 +787,16 @@ inline Boolean Boolean::New(napi_env env, bool val) {
|
|
|
778
787
|
return Boolean(env, value);
|
|
779
788
|
}
|
|
780
789
|
|
|
790
|
+
inline void Boolean::CheckCast(napi_env env, napi_value value) {
|
|
791
|
+
NAPI_CHECK(value != nullptr, "Boolean::CheckCast", "empty value");
|
|
792
|
+
|
|
793
|
+
napi_valuetype type;
|
|
794
|
+
napi_status status = napi_typeof(env, value, &type);
|
|
795
|
+
NAPI_CHECK(status == napi_ok, "Boolean::CheckCast", "napi_typeof failed");
|
|
796
|
+
NAPI_CHECK(
|
|
797
|
+
type == napi_boolean, "Boolean::CheckCast", "value is not napi_boolean");
|
|
798
|
+
}
|
|
799
|
+
|
|
781
800
|
inline Boolean::Boolean() : Napi::Value() {}
|
|
782
801
|
|
|
783
802
|
inline Boolean::Boolean(napi_env env, napi_value value)
|
|
@@ -805,6 +824,16 @@ inline Number Number::New(napi_env env, double val) {
|
|
|
805
824
|
return Number(env, value);
|
|
806
825
|
}
|
|
807
826
|
|
|
827
|
+
inline void Number::CheckCast(napi_env env, napi_value value) {
|
|
828
|
+
NAPI_CHECK(value != nullptr, "Number::CheckCast", "empty value");
|
|
829
|
+
|
|
830
|
+
napi_valuetype type;
|
|
831
|
+
napi_status status = napi_typeof(env, value, &type);
|
|
832
|
+
NAPI_CHECK(status == napi_ok, "Number::CheckCast", "napi_typeof failed");
|
|
833
|
+
NAPI_CHECK(
|
|
834
|
+
type == napi_number, "Number::CheckCast", "value is not napi_number");
|
|
835
|
+
}
|
|
836
|
+
|
|
808
837
|
inline Number::Number() : Value() {}
|
|
809
838
|
|
|
810
839
|
inline Number::Number(napi_env env, napi_value value) : Value(env, value) {}
|
|
@@ -891,6 +920,16 @@ inline BigInt BigInt::New(napi_env env,
|
|
|
891
920
|
return BigInt(env, value);
|
|
892
921
|
}
|
|
893
922
|
|
|
923
|
+
inline void BigInt::CheckCast(napi_env env, napi_value value) {
|
|
924
|
+
NAPI_CHECK(value != nullptr, "BigInt::CheckCast", "empty value");
|
|
925
|
+
|
|
926
|
+
napi_valuetype type;
|
|
927
|
+
napi_status status = napi_typeof(env, value, &type);
|
|
928
|
+
NAPI_CHECK(status == napi_ok, "BigInt::CheckCast", "napi_typeof failed");
|
|
929
|
+
NAPI_CHECK(
|
|
930
|
+
type == napi_bigint, "BigInt::CheckCast", "value is not napi_bigint");
|
|
931
|
+
}
|
|
932
|
+
|
|
894
933
|
inline BigInt::BigInt() : Value() {}
|
|
895
934
|
|
|
896
935
|
inline BigInt::BigInt(napi_env env, napi_value value) : Value(env, value) {}
|
|
@@ -940,6 +979,15 @@ inline Date Date::New(napi_env env, double val) {
|
|
|
940
979
|
return Date(env, value);
|
|
941
980
|
}
|
|
942
981
|
|
|
982
|
+
inline void Date::CheckCast(napi_env env, napi_value value) {
|
|
983
|
+
NAPI_CHECK(value != nullptr, "Date::CheckCast", "empty value");
|
|
984
|
+
|
|
985
|
+
bool result;
|
|
986
|
+
napi_status status = napi_is_date(env, value, &result);
|
|
987
|
+
NAPI_CHECK(status == napi_ok, "Date::CheckCast", "napi_is_date failed");
|
|
988
|
+
NAPI_CHECK(result, "Date::CheckCast", "value is not date");
|
|
989
|
+
}
|
|
990
|
+
|
|
943
991
|
inline Date::Date() : Value() {}
|
|
944
992
|
|
|
945
993
|
inline Date::Date(napi_env env, napi_value value) : Value(env, value) {}
|
|
@@ -959,6 +1007,16 @@ inline double Date::ValueOf() const {
|
|
|
959
1007
|
////////////////////////////////////////////////////////////////////////////////
|
|
960
1008
|
// Name class
|
|
961
1009
|
////////////////////////////////////////////////////////////////////////////////
|
|
1010
|
+
inline void Name::CheckCast(napi_env env, napi_value value) {
|
|
1011
|
+
NAPI_CHECK(value != nullptr, "Name::CheckCast", "empty value");
|
|
1012
|
+
|
|
1013
|
+
napi_valuetype type;
|
|
1014
|
+
napi_status status = napi_typeof(env, value, &type);
|
|
1015
|
+
NAPI_CHECK(status == napi_ok, "Name::CheckCast", "napi_typeof failed");
|
|
1016
|
+
NAPI_CHECK(type == napi_string || type == napi_symbol,
|
|
1017
|
+
"Name::CheckCast",
|
|
1018
|
+
"value is not napi_string or napi_symbol");
|
|
1019
|
+
}
|
|
962
1020
|
|
|
963
1021
|
inline Name::Name() : Value() {}
|
|
964
1022
|
|
|
@@ -1018,6 +1076,16 @@ inline String String::New(napi_env env, const char16_t* val, size_t length) {
|
|
|
1018
1076
|
return String(env, value);
|
|
1019
1077
|
}
|
|
1020
1078
|
|
|
1079
|
+
inline void String::CheckCast(napi_env env, napi_value value) {
|
|
1080
|
+
NAPI_CHECK(value != nullptr, "String::CheckCast", "empty value");
|
|
1081
|
+
|
|
1082
|
+
napi_valuetype type;
|
|
1083
|
+
napi_status status = napi_typeof(env, value, &type);
|
|
1084
|
+
NAPI_CHECK(status == napi_ok, "String::CheckCast", "napi_typeof failed");
|
|
1085
|
+
NAPI_CHECK(
|
|
1086
|
+
type == napi_string, "String::CheckCast", "value is not napi_string");
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1021
1089
|
inline String::String() : Name() {}
|
|
1022
1090
|
|
|
1023
1091
|
inline String::String(napi_env env, napi_value value) : Name(env, value) {}
|
|
@@ -1145,6 +1213,16 @@ inline MaybeOrValue<Symbol> Symbol::For(napi_env env, napi_value description) {
|
|
|
1145
1213
|
#endif
|
|
1146
1214
|
}
|
|
1147
1215
|
|
|
1216
|
+
inline void Symbol::CheckCast(napi_env env, napi_value value) {
|
|
1217
|
+
NAPI_CHECK(value != nullptr, "Symbol::CheckCast", "empty value");
|
|
1218
|
+
|
|
1219
|
+
napi_valuetype type;
|
|
1220
|
+
napi_status status = napi_typeof(env, value, &type);
|
|
1221
|
+
NAPI_CHECK(status == napi_ok, "Symbol::CheckCast", "napi_typeof failed");
|
|
1222
|
+
NAPI_CHECK(
|
|
1223
|
+
type == napi_symbol, "Symbol::CheckCast", "value is not napi_symbol");
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1148
1226
|
inline Symbol::Symbol() : Name() {}
|
|
1149
1227
|
|
|
1150
1228
|
inline Symbol::Symbol(napi_env env, napi_value value) : Name(env, value) {}
|
|
@@ -1242,6 +1320,32 @@ String String::From(napi_env env, const T& value) {
|
|
|
1242
1320
|
return Helper::From(env, value);
|
|
1243
1321
|
}
|
|
1244
1322
|
|
|
1323
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1324
|
+
// TypeTaggable class
|
|
1325
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
1326
|
+
|
|
1327
|
+
inline TypeTaggable::TypeTaggable() : Value() {}
|
|
1328
|
+
|
|
1329
|
+
inline TypeTaggable::TypeTaggable(napi_env _env, napi_value _value)
|
|
1330
|
+
: Value(_env, _value) {}
|
|
1331
|
+
|
|
1332
|
+
#if NAPI_VERSION >= 8
|
|
1333
|
+
|
|
1334
|
+
inline void TypeTaggable::TypeTag(const napi_type_tag* type_tag) const {
|
|
1335
|
+
napi_status status = napi_type_tag_object(_env, _value, type_tag);
|
|
1336
|
+
NAPI_THROW_IF_FAILED_VOID(_env, status);
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
inline bool TypeTaggable::CheckTypeTag(const napi_type_tag* type_tag) const {
|
|
1340
|
+
bool result;
|
|
1341
|
+
napi_status status =
|
|
1342
|
+
napi_check_object_type_tag(_env, _value, type_tag, &result);
|
|
1343
|
+
NAPI_THROW_IF_FAILED(_env, status, false);
|
|
1344
|
+
return result;
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
#endif // NAPI_VERSION >= 8
|
|
1348
|
+
|
|
1245
1349
|
////////////////////////////////////////////////////////////////////////////////
|
|
1246
1350
|
// Object class
|
|
1247
1351
|
////////////////////////////////////////////////////////////////////////////////
|
|
@@ -1281,9 +1385,20 @@ inline Object Object::New(napi_env env) {
|
|
|
1281
1385
|
return Object(env, value);
|
|
1282
1386
|
}
|
|
1283
1387
|
|
|
1284
|
-
inline Object::
|
|
1388
|
+
inline void Object::CheckCast(napi_env env, napi_value value) {
|
|
1389
|
+
NAPI_CHECK(value != nullptr, "Object::CheckCast", "empty value");
|
|
1285
1390
|
|
|
1286
|
-
|
|
1391
|
+
napi_valuetype type;
|
|
1392
|
+
napi_status status = napi_typeof(env, value, &type);
|
|
1393
|
+
NAPI_CHECK(status == napi_ok, "Object::CheckCast", "napi_typeof failed");
|
|
1394
|
+
NAPI_CHECK(
|
|
1395
|
+
type == napi_object, "Object::CheckCast", "value is not napi_object");
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
inline Object::Object() : TypeTaggable() {}
|
|
1399
|
+
|
|
1400
|
+
inline Object::Object(napi_env env, napi_value value)
|
|
1401
|
+
: TypeTaggable(env, value) {}
|
|
1287
1402
|
|
|
1288
1403
|
inline Object::PropertyLValue<std::string> Object::operator[](
|
|
1289
1404
|
const char* utf8name) {
|
|
@@ -1687,11 +1802,23 @@ inline External<T> External<T>::New(napi_env env,
|
|
|
1687
1802
|
}
|
|
1688
1803
|
|
|
1689
1804
|
template <typename T>
|
|
1690
|
-
inline External<T>::
|
|
1805
|
+
inline void External<T>::CheckCast(napi_env env, napi_value value) {
|
|
1806
|
+
NAPI_CHECK(value != nullptr, "External::CheckCast", "empty value");
|
|
1807
|
+
|
|
1808
|
+
napi_valuetype type;
|
|
1809
|
+
napi_status status = napi_typeof(env, value, &type);
|
|
1810
|
+
NAPI_CHECK(status == napi_ok, "External::CheckCast", "napi_typeof failed");
|
|
1811
|
+
NAPI_CHECK(type == napi_external,
|
|
1812
|
+
"External::CheckCast",
|
|
1813
|
+
"value is not napi_external");
|
|
1814
|
+
}
|
|
1815
|
+
|
|
1816
|
+
template <typename T>
|
|
1817
|
+
inline External<T>::External() : TypeTaggable() {}
|
|
1691
1818
|
|
|
1692
1819
|
template <typename T>
|
|
1693
1820
|
inline External<T>::External(napi_env env, napi_value value)
|
|
1694
|
-
:
|
|
1821
|
+
: TypeTaggable(env, value) {}
|
|
1695
1822
|
|
|
1696
1823
|
template <typename T>
|
|
1697
1824
|
inline T* External<T>::Data() const {
|
|
@@ -1719,6 +1846,15 @@ inline Array Array::New(napi_env env, size_t length) {
|
|
|
1719
1846
|
return Array(env, value);
|
|
1720
1847
|
}
|
|
1721
1848
|
|
|
1849
|
+
inline void Array::CheckCast(napi_env env, napi_value value) {
|
|
1850
|
+
NAPI_CHECK(value != nullptr, "Array::CheckCast", "empty value");
|
|
1851
|
+
|
|
1852
|
+
bool result;
|
|
1853
|
+
napi_status status = napi_is_array(env, value, &result);
|
|
1854
|
+
NAPI_CHECK(status == napi_ok, "Array::CheckCast", "napi_is_array failed");
|
|
1855
|
+
NAPI_CHECK(result, "Array::CheckCast", "value is not array");
|
|
1856
|
+
}
|
|
1857
|
+
|
|
1722
1858
|
inline Array::Array() : Object() {}
|
|
1723
1859
|
|
|
1724
1860
|
inline Array::Array(napi_env env, napi_value value) : Object(env, value) {}
|
|
@@ -1743,6 +1879,7 @@ inline ArrayBuffer ArrayBuffer::New(napi_env env, size_t byteLength) {
|
|
|
1743
1879
|
return ArrayBuffer(env, value);
|
|
1744
1880
|
}
|
|
1745
1881
|
|
|
1882
|
+
#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
1746
1883
|
inline ArrayBuffer ArrayBuffer::New(napi_env env,
|
|
1747
1884
|
void* externalData,
|
|
1748
1885
|
size_t byteLength) {
|
|
@@ -1802,6 +1939,18 @@ inline ArrayBuffer ArrayBuffer::New(napi_env env,
|
|
|
1802
1939
|
|
|
1803
1940
|
return ArrayBuffer(env, value);
|
|
1804
1941
|
}
|
|
1942
|
+
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
1943
|
+
|
|
1944
|
+
inline void ArrayBuffer::CheckCast(napi_env env, napi_value value) {
|
|
1945
|
+
NAPI_CHECK(value != nullptr, "ArrayBuffer::CheckCast", "empty value");
|
|
1946
|
+
|
|
1947
|
+
bool result;
|
|
1948
|
+
napi_status status = napi_is_arraybuffer(env, value, &result);
|
|
1949
|
+
NAPI_CHECK(status == napi_ok,
|
|
1950
|
+
"ArrayBuffer::CheckCast",
|
|
1951
|
+
"napi_is_arraybuffer failed");
|
|
1952
|
+
NAPI_CHECK(result, "ArrayBuffer::CheckCast", "value is not arraybuffer");
|
|
1953
|
+
}
|
|
1805
1954
|
|
|
1806
1955
|
inline ArrayBuffer::ArrayBuffer() : Object() {}
|
|
1807
1956
|
|
|
@@ -1870,6 +2019,16 @@ inline DataView DataView::New(napi_env env,
|
|
|
1870
2019
|
return DataView(env, value);
|
|
1871
2020
|
}
|
|
1872
2021
|
|
|
2022
|
+
inline void DataView::CheckCast(napi_env env, napi_value value) {
|
|
2023
|
+
NAPI_CHECK(value != nullptr, "DataView::CheckCast", "empty value");
|
|
2024
|
+
|
|
2025
|
+
bool result;
|
|
2026
|
+
napi_status status = napi_is_dataview(env, value, &result);
|
|
2027
|
+
NAPI_CHECK(
|
|
2028
|
+
status == napi_ok, "DataView::CheckCast", "napi_is_dataview failed");
|
|
2029
|
+
NAPI_CHECK(result, "DataView::CheckCast", "value is not dataview");
|
|
2030
|
+
}
|
|
2031
|
+
|
|
1873
2032
|
inline DataView::DataView() : Object() {}
|
|
1874
2033
|
|
|
1875
2034
|
inline DataView::DataView(napi_env env, napi_value value) : Object(env, value) {
|
|
@@ -2004,6 +2163,15 @@ inline void DataView::WriteData(size_t byteOffset, T value) const {
|
|
|
2004
2163
|
////////////////////////////////////////////////////////////////////////////////
|
|
2005
2164
|
// TypedArray class
|
|
2006
2165
|
////////////////////////////////////////////////////////////////////////////////
|
|
2166
|
+
inline void TypedArray::CheckCast(napi_env env, napi_value value) {
|
|
2167
|
+
NAPI_CHECK(value != nullptr, "TypedArray::CheckCast", "empty value");
|
|
2168
|
+
|
|
2169
|
+
bool result;
|
|
2170
|
+
napi_status status = napi_is_typedarray(env, value, &result);
|
|
2171
|
+
NAPI_CHECK(
|
|
2172
|
+
status == napi_ok, "TypedArray::CheckCast", "napi_is_typedarray failed");
|
|
2173
|
+
NAPI_CHECK(result, "TypedArray::CheckCast", "value is not typedarray");
|
|
2174
|
+
}
|
|
2007
2175
|
|
|
2008
2176
|
inline TypedArray::TypedArray()
|
|
2009
2177
|
: Object(), _type(napi_typedarray_type::napi_int8_array), _length(0) {}
|
|
@@ -2086,6 +2254,23 @@ inline Napi::ArrayBuffer TypedArray::ArrayBuffer() const {
|
|
|
2086
2254
|
////////////////////////////////////////////////////////////////////////////////
|
|
2087
2255
|
// TypedArrayOf<T> class
|
|
2088
2256
|
////////////////////////////////////////////////////////////////////////////////
|
|
2257
|
+
template <typename T>
|
|
2258
|
+
inline void TypedArrayOf<T>::CheckCast(napi_env env, napi_value value) {
|
|
2259
|
+
TypedArray::CheckCast(env, value);
|
|
2260
|
+
napi_typedarray_type type;
|
|
2261
|
+
napi_status status = napi_get_typedarray_info(
|
|
2262
|
+
env, value, &type, nullptr, nullptr, nullptr, nullptr);
|
|
2263
|
+
NAPI_CHECK(status == napi_ok,
|
|
2264
|
+
"TypedArrayOf::CheckCast",
|
|
2265
|
+
"napi_is_typedarray failed");
|
|
2266
|
+
|
|
2267
|
+
NAPI_CHECK(
|
|
2268
|
+
(type == TypedArrayTypeForPrimitiveType<T>() ||
|
|
2269
|
+
(type == napi_uint8_clamped_array && std::is_same<T, uint8_t>::value)),
|
|
2270
|
+
"TypedArrayOf::CheckCast",
|
|
2271
|
+
"Array type must match the template parameter. (Uint8 arrays may "
|
|
2272
|
+
"optionally have the \"clamped\" array type.)");
|
|
2273
|
+
}
|
|
2089
2274
|
|
|
2090
2275
|
template <typename T>
|
|
2091
2276
|
inline TypedArrayOf<T> TypedArrayOf<T>::New(napi_env env,
|
|
@@ -2259,6 +2444,17 @@ inline Function Function::New(napi_env env,
|
|
|
2259
2444
|
return New(env, cb, utf8name.c_str(), data);
|
|
2260
2445
|
}
|
|
2261
2446
|
|
|
2447
|
+
inline void Function::CheckCast(napi_env env, napi_value value) {
|
|
2448
|
+
NAPI_CHECK(value != nullptr, "Function::CheckCast", "empty value");
|
|
2449
|
+
|
|
2450
|
+
napi_valuetype type;
|
|
2451
|
+
napi_status status = napi_typeof(env, value, &type);
|
|
2452
|
+
NAPI_CHECK(status == napi_ok, "Function::CheckCast", "napi_typeof failed");
|
|
2453
|
+
NAPI_CHECK(type == napi_function,
|
|
2454
|
+
"Function::CheckCast",
|
|
2455
|
+
"value is not napi_function");
|
|
2456
|
+
}
|
|
2457
|
+
|
|
2262
2458
|
inline Function::Function() : Object() {}
|
|
2263
2459
|
|
|
2264
2460
|
inline Function::Function(napi_env env, napi_value value)
|
|
@@ -2405,6 +2601,15 @@ inline void Promise::Deferred::Reject(napi_value value) const {
|
|
|
2405
2601
|
NAPI_THROW_IF_FAILED_VOID(_env, status);
|
|
2406
2602
|
}
|
|
2407
2603
|
|
|
2604
|
+
inline void Promise::CheckCast(napi_env env, napi_value value) {
|
|
2605
|
+
NAPI_CHECK(value != nullptr, "Promise::CheckCast", "empty value");
|
|
2606
|
+
|
|
2607
|
+
bool result;
|
|
2608
|
+
napi_status status = napi_is_promise(env, value, &result);
|
|
2609
|
+
NAPI_CHECK(status == napi_ok, "Promise::CheckCast", "napi_is_promise failed");
|
|
2610
|
+
NAPI_CHECK(result, "Promise::CheckCast", "value is not promise");
|
|
2611
|
+
}
|
|
2612
|
+
|
|
2408
2613
|
inline Promise::Promise(napi_env env, napi_value value) : Object(env, value) {}
|
|
2409
2614
|
|
|
2410
2615
|
////////////////////////////////////////////////////////////////////////////////
|
|
@@ -2421,6 +2626,7 @@ inline Buffer<T> Buffer<T>::New(napi_env env, size_t length) {
|
|
|
2421
2626
|
return Buffer(env, value, length, static_cast<T*>(data));
|
|
2422
2627
|
}
|
|
2423
2628
|
|
|
2629
|
+
#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2424
2630
|
template <typename T>
|
|
2425
2631
|
inline Buffer<T> Buffer<T>::New(napi_env env, T* data, size_t length) {
|
|
2426
2632
|
napi_value value;
|
|
@@ -2478,6 +2684,94 @@ inline Buffer<T> Buffer<T>::New(napi_env env,
|
|
|
2478
2684
|
}
|
|
2479
2685
|
return Buffer(env, value, length, data);
|
|
2480
2686
|
}
|
|
2687
|
+
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2688
|
+
|
|
2689
|
+
template <typename T>
|
|
2690
|
+
inline Buffer<T> Buffer<T>::NewOrCopy(napi_env env, T* data, size_t length) {
|
|
2691
|
+
#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2692
|
+
napi_value value;
|
|
2693
|
+
napi_status status = napi_create_external_buffer(
|
|
2694
|
+
env, length * sizeof(T), data, nullptr, nullptr, &value);
|
|
2695
|
+
if (status == details::napi_no_external_buffers_allowed) {
|
|
2696
|
+
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2697
|
+
// If we can't create an external buffer, we'll just copy the data.
|
|
2698
|
+
return Buffer<T>::Copy(env, data, length);
|
|
2699
|
+
#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2700
|
+
}
|
|
2701
|
+
NAPI_THROW_IF_FAILED(env, status, Buffer<T>());
|
|
2702
|
+
return Buffer(env, value, length, data);
|
|
2703
|
+
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2704
|
+
}
|
|
2705
|
+
|
|
2706
|
+
template <typename T>
|
|
2707
|
+
template <typename Finalizer>
|
|
2708
|
+
inline Buffer<T> Buffer<T>::NewOrCopy(napi_env env,
|
|
2709
|
+
T* data,
|
|
2710
|
+
size_t length,
|
|
2711
|
+
Finalizer finalizeCallback) {
|
|
2712
|
+
details::FinalizeData<T, Finalizer>* finalizeData =
|
|
2713
|
+
new details::FinalizeData<T, Finalizer>(
|
|
2714
|
+
{std::move(finalizeCallback), nullptr});
|
|
2715
|
+
#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2716
|
+
napi_value value;
|
|
2717
|
+
napi_status status =
|
|
2718
|
+
napi_create_external_buffer(env,
|
|
2719
|
+
length * sizeof(T),
|
|
2720
|
+
data,
|
|
2721
|
+
details::FinalizeData<T, Finalizer>::Wrapper,
|
|
2722
|
+
finalizeData,
|
|
2723
|
+
&value);
|
|
2724
|
+
if (status == details::napi_no_external_buffers_allowed) {
|
|
2725
|
+
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2726
|
+
// If we can't create an external buffer, we'll just copy the data.
|
|
2727
|
+
Buffer<T> ret = Buffer<T>::Copy(env, data, length);
|
|
2728
|
+
details::FinalizeData<T, Finalizer>::Wrapper(env, data, finalizeData);
|
|
2729
|
+
return ret;
|
|
2730
|
+
#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2731
|
+
}
|
|
2732
|
+
if (status != napi_ok) {
|
|
2733
|
+
delete finalizeData;
|
|
2734
|
+
NAPI_THROW_IF_FAILED(env, status, Buffer());
|
|
2735
|
+
}
|
|
2736
|
+
return Buffer(env, value, length, data);
|
|
2737
|
+
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2738
|
+
}
|
|
2739
|
+
|
|
2740
|
+
template <typename T>
|
|
2741
|
+
template <typename Finalizer, typename Hint>
|
|
2742
|
+
inline Buffer<T> Buffer<T>::NewOrCopy(napi_env env,
|
|
2743
|
+
T* data,
|
|
2744
|
+
size_t length,
|
|
2745
|
+
Finalizer finalizeCallback,
|
|
2746
|
+
Hint* finalizeHint) {
|
|
2747
|
+
details::FinalizeData<T, Finalizer, Hint>* finalizeData =
|
|
2748
|
+
new details::FinalizeData<T, Finalizer, Hint>(
|
|
2749
|
+
{std::move(finalizeCallback), finalizeHint});
|
|
2750
|
+
#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2751
|
+
napi_value value;
|
|
2752
|
+
napi_status status = napi_create_external_buffer(
|
|
2753
|
+
env,
|
|
2754
|
+
length * sizeof(T),
|
|
2755
|
+
data,
|
|
2756
|
+
details::FinalizeData<T, Finalizer, Hint>::WrapperWithHint,
|
|
2757
|
+
finalizeData,
|
|
2758
|
+
&value);
|
|
2759
|
+
if (status == details::napi_no_external_buffers_allowed) {
|
|
2760
|
+
#endif
|
|
2761
|
+
// If we can't create an external buffer, we'll just copy the data.
|
|
2762
|
+
Buffer<T> ret = Buffer<T>::Copy(env, data, length);
|
|
2763
|
+
details::FinalizeData<T, Finalizer, Hint>::WrapperWithHint(
|
|
2764
|
+
env, data, finalizeData);
|
|
2765
|
+
return ret;
|
|
2766
|
+
#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
2767
|
+
}
|
|
2768
|
+
if (status != napi_ok) {
|
|
2769
|
+
delete finalizeData;
|
|
2770
|
+
NAPI_THROW_IF_FAILED(env, status, Buffer());
|
|
2771
|
+
}
|
|
2772
|
+
return Buffer(env, value, length, data);
|
|
2773
|
+
#endif
|
|
2774
|
+
}
|
|
2481
2775
|
|
|
2482
2776
|
template <typename T>
|
|
2483
2777
|
inline Buffer<T> Buffer<T>::Copy(napi_env env, const T* data, size_t length) {
|
|
@@ -2488,6 +2782,16 @@ inline Buffer<T> Buffer<T>::Copy(napi_env env, const T* data, size_t length) {
|
|
|
2488
2782
|
return Buffer<T>(env, value);
|
|
2489
2783
|
}
|
|
2490
2784
|
|
|
2785
|
+
template <typename T>
|
|
2786
|
+
inline void Buffer<T>::CheckCast(napi_env env, napi_value value) {
|
|
2787
|
+
NAPI_CHECK(value != nullptr, "Buffer::CheckCast", "empty value");
|
|
2788
|
+
|
|
2789
|
+
bool result;
|
|
2790
|
+
napi_status status = napi_is_buffer(env, value, &result);
|
|
2791
|
+
NAPI_CHECK(status == napi_ok, "Buffer::CheckCast", "napi_is_buffer failed");
|
|
2792
|
+
NAPI_CHECK(result, "Buffer::CheckCast", "value is not buffer");
|
|
2793
|
+
}
|
|
2794
|
+
|
|
2491
2795
|
template <typename T>
|
|
2492
2796
|
inline Buffer<T>::Buffer() : Uint8Array(), _length(0), _data(nullptr) {}
|
|
2493
2797
|
|
|
@@ -4720,6 +5024,8 @@ inline Napi::Env AsyncContext::Env() const {
|
|
|
4720
5024
|
// AsyncWorker class
|
|
4721
5025
|
////////////////////////////////////////////////////////////////////////////////
|
|
4722
5026
|
|
|
5027
|
+
#if NAPI_HAS_THREADS
|
|
5028
|
+
|
|
4723
5029
|
inline AsyncWorker::AsyncWorker(const Function& callback)
|
|
4724
5030
|
: AsyncWorker(callback, "generic") {}
|
|
4725
5031
|
|
|
@@ -4801,29 +5107,6 @@ inline void AsyncWorker::Destroy() {
|
|
|
4801
5107
|
delete this;
|
|
4802
5108
|
}
|
|
4803
5109
|
|
|
4804
|
-
inline AsyncWorker::AsyncWorker(AsyncWorker&& other) {
|
|
4805
|
-
_env = other._env;
|
|
4806
|
-
other._env = nullptr;
|
|
4807
|
-
_work = other._work;
|
|
4808
|
-
other._work = nullptr;
|
|
4809
|
-
_receiver = std::move(other._receiver);
|
|
4810
|
-
_callback = std::move(other._callback);
|
|
4811
|
-
_error = std::move(other._error);
|
|
4812
|
-
_suppress_destruct = other._suppress_destruct;
|
|
4813
|
-
}
|
|
4814
|
-
|
|
4815
|
-
inline AsyncWorker& AsyncWorker::operator=(AsyncWorker&& other) {
|
|
4816
|
-
_env = other._env;
|
|
4817
|
-
other._env = nullptr;
|
|
4818
|
-
_work = other._work;
|
|
4819
|
-
other._work = nullptr;
|
|
4820
|
-
_receiver = std::move(other._receiver);
|
|
4821
|
-
_callback = std::move(other._callback);
|
|
4822
|
-
_error = std::move(other._error);
|
|
4823
|
-
_suppress_destruct = other._suppress_destruct;
|
|
4824
|
-
return *this;
|
|
4825
|
-
}
|
|
4826
|
-
|
|
4827
5110
|
inline AsyncWorker::operator napi_async_work() const {
|
|
4828
5111
|
return _work;
|
|
4829
5112
|
}
|
|
@@ -4921,7 +5204,9 @@ inline void AsyncWorker::OnWorkComplete(Napi::Env /*env*/, napi_status status) {
|
|
|
4921
5204
|
}
|
|
4922
5205
|
}
|
|
4923
5206
|
|
|
4924
|
-
#
|
|
5207
|
+
#endif // NAPI_HAS_THREADS
|
|
5208
|
+
|
|
5209
|
+
#if (NAPI_VERSION > 3 && NAPI_HAS_THREADS)
|
|
4925
5210
|
////////////////////////////////////////////////////////////////////////////////
|
|
4926
5211
|
// TypedThreadSafeFunction<ContextType,DataType,CallJs> class
|
|
4927
5212
|
////////////////////////////////////////////////////////////////////////////////
|
|
@@ -6170,7 +6455,7 @@ inline void AsyncProgressQueueWorker<T>::ExecutionProgress::Send(
|
|
|
6170
6455
|
const T* data, size_t count) const {
|
|
6171
6456
|
_worker->SendProgress_(data, count);
|
|
6172
6457
|
}
|
|
6173
|
-
#endif // NAPI_VERSION > 3 &&
|
|
6458
|
+
#endif // NAPI_VERSION > 3 && NAPI_HAS_THREADS
|
|
6174
6459
|
|
|
6175
6460
|
////////////////////////////////////////////////////////////////////////////////
|
|
6176
6461
|
// Memory Management class
|
package/napi.h
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
#ifndef SRC_NAPI_H_
|
|
2
2
|
#define SRC_NAPI_H_
|
|
3
3
|
|
|
4
|
+
#ifndef NAPI_HAS_THREADS
|
|
5
|
+
#if !defined(__wasm__) || (defined(__EMSCRIPTEN_PTHREADS__) || \
|
|
6
|
+
(defined(__wasi__) && defined(_REENTRANT)))
|
|
7
|
+
#define NAPI_HAS_THREADS 1
|
|
8
|
+
#else
|
|
9
|
+
#define NAPI_HAS_THREADS 0
|
|
10
|
+
#endif
|
|
11
|
+
#endif
|
|
12
|
+
|
|
4
13
|
#include <node_api.h>
|
|
5
14
|
#include <functional>
|
|
6
15
|
#include <initializer_list>
|
|
7
16
|
#include <memory>
|
|
17
|
+
#if NAPI_HAS_THREADS
|
|
8
18
|
#include <mutex>
|
|
19
|
+
#endif // NAPI_HAS_THREADS
|
|
9
20
|
#include <string>
|
|
10
21
|
#include <vector>
|
|
11
22
|
|
|
@@ -452,6 +463,9 @@ class Value {
|
|
|
452
463
|
///
|
|
453
464
|
/// This conversion does NOT coerce the type. Calling any methods
|
|
454
465
|
/// inappropriate for the actual value type will throw `Napi::Error`.
|
|
466
|
+
///
|
|
467
|
+
/// If `NODE_ADDON_API_ENABLE_TYPE_CHECK_ON_AS` is defined, this method
|
|
468
|
+
/// asserts that the actual type is the expected type.
|
|
455
469
|
template <typename T>
|
|
456
470
|
T As() const;
|
|
457
471
|
|
|
@@ -478,6 +492,8 @@ class Boolean : public Value {
|
|
|
478
492
|
bool value ///< Boolean value
|
|
479
493
|
);
|
|
480
494
|
|
|
495
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
496
|
+
|
|
481
497
|
Boolean(); ///< Creates a new _empty_ Boolean instance.
|
|
482
498
|
Boolean(napi_env env,
|
|
483
499
|
napi_value value); ///< Wraps a Node-API value primitive.
|
|
@@ -493,6 +509,8 @@ class Number : public Value {
|
|
|
493
509
|
double value ///< Number value
|
|
494
510
|
);
|
|
495
511
|
|
|
512
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
513
|
+
|
|
496
514
|
Number(); ///< Creates a new _empty_ Number instance.
|
|
497
515
|
Number(napi_env env,
|
|
498
516
|
napi_value value); ///< Wraps a Node-API value primitive.
|
|
@@ -541,6 +559,8 @@ class BigInt : public Value {
|
|
|
541
559
|
const uint64_t* words ///< Array of words
|
|
542
560
|
);
|
|
543
561
|
|
|
562
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
563
|
+
|
|
544
564
|
BigInt(); ///< Creates a new _empty_ BigInt instance.
|
|
545
565
|
BigInt(napi_env env,
|
|
546
566
|
napi_value value); ///< Wraps a Node-API value primitive.
|
|
@@ -572,6 +592,8 @@ class Date : public Value {
|
|
|
572
592
|
double value ///< Number value
|
|
573
593
|
);
|
|
574
594
|
|
|
595
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
596
|
+
|
|
575
597
|
Date(); ///< Creates a new _empty_ Date instance.
|
|
576
598
|
Date(napi_env env, napi_value value); ///< Wraps a Node-API value primitive.
|
|
577
599
|
operator double() const; ///< Converts a Date value to double primitive
|
|
@@ -583,6 +605,8 @@ class Date : public Value {
|
|
|
583
605
|
/// A JavaScript string or symbol value (that can be used as a property name).
|
|
584
606
|
class Name : public Value {
|
|
585
607
|
public:
|
|
608
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
609
|
+
|
|
586
610
|
Name(); ///< Creates a new _empty_ Name instance.
|
|
587
611
|
Name(napi_env env,
|
|
588
612
|
napi_value value); ///< Wraps a Node-API value primitive.
|
|
@@ -640,6 +664,8 @@ class String : public Name {
|
|
|
640
664
|
template <typename T>
|
|
641
665
|
static String From(napi_env env, const T& value);
|
|
642
666
|
|
|
667
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
668
|
+
|
|
643
669
|
String(); ///< Creates a new _empty_ String instance.
|
|
644
670
|
String(napi_env env,
|
|
645
671
|
napi_value value); ///< Wraps a Node-API value primitive.
|
|
@@ -698,13 +724,26 @@ class Symbol : public Name {
|
|
|
698
724
|
// Create a symbol in the global registry, napi_value describing the symbol
|
|
699
725
|
static MaybeOrValue<Symbol> For(napi_env env, napi_value description);
|
|
700
726
|
|
|
727
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
728
|
+
|
|
701
729
|
Symbol(); ///< Creates a new _empty_ Symbol instance.
|
|
702
730
|
Symbol(napi_env env,
|
|
703
731
|
napi_value value); ///< Wraps a Node-API value primitive.
|
|
704
732
|
};
|
|
705
733
|
|
|
734
|
+
class TypeTaggable : public Value {
|
|
735
|
+
public:
|
|
736
|
+
#if NAPI_VERSION >= 8
|
|
737
|
+
void TypeTag(const napi_type_tag* type_tag) const;
|
|
738
|
+
bool CheckTypeTag(const napi_type_tag* type_tag) const;
|
|
739
|
+
#endif // NAPI_VERSION >= 8
|
|
740
|
+
protected:
|
|
741
|
+
TypeTaggable();
|
|
742
|
+
TypeTaggable(napi_env env, napi_value value);
|
|
743
|
+
};
|
|
744
|
+
|
|
706
745
|
/// A JavaScript object value.
|
|
707
|
-
class Object : public
|
|
746
|
+
class Object : public TypeTaggable {
|
|
708
747
|
public:
|
|
709
748
|
/// Enables property and element assignments using indexing syntax.
|
|
710
749
|
///
|
|
@@ -745,6 +784,8 @@ class Object : public Value {
|
|
|
745
784
|
static Object New(napi_env env ///< Node-API environment
|
|
746
785
|
);
|
|
747
786
|
|
|
787
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
788
|
+
|
|
748
789
|
Object(); ///< Creates a new _empty_ Object instance.
|
|
749
790
|
Object(napi_env env,
|
|
750
791
|
napi_value value); ///< Wraps a Node-API value primitive.
|
|
@@ -984,7 +1025,7 @@ class Object : public Value {
|
|
|
984
1025
|
};
|
|
985
1026
|
|
|
986
1027
|
template <typename T>
|
|
987
|
-
class External : public
|
|
1028
|
+
class External : public TypeTaggable {
|
|
988
1029
|
public:
|
|
989
1030
|
static External New(napi_env env, T* data);
|
|
990
1031
|
|
|
@@ -998,6 +1039,8 @@ class External : public Value {
|
|
|
998
1039
|
Finalizer finalizeCallback,
|
|
999
1040
|
Hint* finalizeHint);
|
|
1000
1041
|
|
|
1042
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
1043
|
+
|
|
1001
1044
|
External();
|
|
1002
1045
|
External(napi_env env, napi_value value);
|
|
1003
1046
|
|
|
@@ -1009,6 +1052,8 @@ class Array : public Object {
|
|
|
1009
1052
|
static Array New(napi_env env);
|
|
1010
1053
|
static Array New(napi_env env, size_t length);
|
|
1011
1054
|
|
|
1055
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
1056
|
+
|
|
1012
1057
|
Array();
|
|
1013
1058
|
Array(napi_env env, napi_value value);
|
|
1014
1059
|
|
|
@@ -1074,6 +1119,7 @@ class ArrayBuffer : public Object {
|
|
|
1074
1119
|
size_t byteLength ///< Length of the buffer to be allocated, in bytes
|
|
1075
1120
|
);
|
|
1076
1121
|
|
|
1122
|
+
#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
1077
1123
|
/// Creates a new ArrayBuffer instance, using an external buffer with
|
|
1078
1124
|
/// specified byte length.
|
|
1079
1125
|
static ArrayBuffer New(
|
|
@@ -1117,6 +1163,9 @@ class ArrayBuffer : public Object {
|
|
|
1117
1163
|
Hint* finalizeHint ///< Hint (second parameter) to be passed to the
|
|
1118
1164
|
///< finalize callback
|
|
1119
1165
|
);
|
|
1166
|
+
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
1167
|
+
|
|
1168
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
1120
1169
|
|
|
1121
1170
|
ArrayBuffer(); ///< Creates a new _empty_ ArrayBuffer instance.
|
|
1122
1171
|
ArrayBuffer(napi_env env,
|
|
@@ -1142,6 +1191,8 @@ class ArrayBuffer : public Object {
|
|
|
1142
1191
|
/// }
|
|
1143
1192
|
class TypedArray : public Object {
|
|
1144
1193
|
public:
|
|
1194
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
1195
|
+
|
|
1145
1196
|
TypedArray(); ///< Creates a new _empty_ TypedArray instance.
|
|
1146
1197
|
TypedArray(napi_env env,
|
|
1147
1198
|
napi_value value); ///< Wraps a Node-API value primitive.
|
|
@@ -1242,6 +1293,8 @@ class TypedArrayOf : public TypedArray {
|
|
|
1242
1293
|
///< template parameter T.
|
|
1243
1294
|
);
|
|
1244
1295
|
|
|
1296
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
1297
|
+
|
|
1245
1298
|
TypedArrayOf(); ///< Creates a new _empty_ TypedArrayOf instance.
|
|
1246
1299
|
TypedArrayOf(napi_env env,
|
|
1247
1300
|
napi_value value); ///< Wraps a Node-API value primitive.
|
|
@@ -1286,6 +1339,8 @@ class DataView : public Object {
|
|
|
1286
1339
|
size_t byteOffset,
|
|
1287
1340
|
size_t byteLength);
|
|
1288
1341
|
|
|
1342
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
1343
|
+
|
|
1289
1344
|
DataView(); ///< Creates a new _empty_ DataView instance.
|
|
1290
1345
|
DataView(napi_env env,
|
|
1291
1346
|
napi_value value); ///< Wraps a Node-API value primitive.
|
|
@@ -1366,6 +1421,8 @@ class Function : public Object {
|
|
|
1366
1421
|
const std::string& utf8name,
|
|
1367
1422
|
void* data = nullptr);
|
|
1368
1423
|
|
|
1424
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
1425
|
+
|
|
1369
1426
|
Function();
|
|
1370
1427
|
Function(napi_env env, napi_value value);
|
|
1371
1428
|
|
|
@@ -1422,6 +1479,8 @@ class Promise : public Object {
|
|
|
1422
1479
|
napi_value _promise;
|
|
1423
1480
|
};
|
|
1424
1481
|
|
|
1482
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
1483
|
+
|
|
1425
1484
|
Promise(napi_env env, napi_value value);
|
|
1426
1485
|
};
|
|
1427
1486
|
|
|
@@ -1429,6 +1488,7 @@ template <typename T>
|
|
|
1429
1488
|
class Buffer : public Uint8Array {
|
|
1430
1489
|
public:
|
|
1431
1490
|
static Buffer<T> New(napi_env env, size_t length);
|
|
1491
|
+
#ifndef NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
1432
1492
|
static Buffer<T> New(napi_env env, T* data, size_t length);
|
|
1433
1493
|
|
|
1434
1494
|
// Finalizer must implement `void operator()(Env env, T* data)`.
|
|
@@ -1444,9 +1504,27 @@ class Buffer : public Uint8Array {
|
|
|
1444
1504
|
size_t length,
|
|
1445
1505
|
Finalizer finalizeCallback,
|
|
1446
1506
|
Hint* finalizeHint);
|
|
1507
|
+
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
1508
|
+
|
|
1509
|
+
static Buffer<T> NewOrCopy(napi_env env, T* data, size_t length);
|
|
1510
|
+
// Finalizer must implement `void operator()(Env env, T* data)`.
|
|
1511
|
+
template <typename Finalizer>
|
|
1512
|
+
static Buffer<T> NewOrCopy(napi_env env,
|
|
1513
|
+
T* data,
|
|
1514
|
+
size_t length,
|
|
1515
|
+
Finalizer finalizeCallback);
|
|
1516
|
+
// Finalizer must implement `void operator()(Env env, T* data, Hint* hint)`.
|
|
1517
|
+
template <typename Finalizer, typename Hint>
|
|
1518
|
+
static Buffer<T> NewOrCopy(napi_env env,
|
|
1519
|
+
T* data,
|
|
1520
|
+
size_t length,
|
|
1521
|
+
Finalizer finalizeCallback,
|
|
1522
|
+
Hint* finalizeHint);
|
|
1447
1523
|
|
|
1448
1524
|
static Buffer<T> Copy(napi_env env, const T* data, size_t length);
|
|
1449
1525
|
|
|
1526
|
+
static void CheckCast(napi_env env, napi_value value);
|
|
1527
|
+
|
|
1450
1528
|
Buffer();
|
|
1451
1529
|
Buffer(napi_env env, napi_value value);
|
|
1452
1530
|
size_t Length() const;
|
|
@@ -1791,7 +1869,7 @@ class CallbackInfo {
|
|
|
1791
1869
|
Value This() const;
|
|
1792
1870
|
void* Data() const;
|
|
1793
1871
|
void SetData(void* data);
|
|
1794
|
-
operator napi_callback_info() const;
|
|
1872
|
+
explicit operator napi_callback_info() const;
|
|
1795
1873
|
|
|
1796
1874
|
private:
|
|
1797
1875
|
const size_t _staticArgCount = 6;
|
|
@@ -2432,13 +2510,11 @@ class AsyncContext {
|
|
|
2432
2510
|
napi_async_context _context;
|
|
2433
2511
|
};
|
|
2434
2512
|
|
|
2513
|
+
#if NAPI_HAS_THREADS
|
|
2435
2514
|
class AsyncWorker {
|
|
2436
2515
|
public:
|
|
2437
2516
|
virtual ~AsyncWorker();
|
|
2438
2517
|
|
|
2439
|
-
// An async worker can be moved but cannot be copied.
|
|
2440
|
-
AsyncWorker(AsyncWorker&& other);
|
|
2441
|
-
AsyncWorker& operator=(AsyncWorker&& other);
|
|
2442
2518
|
NAPI_DISALLOW_ASSIGN_COPY(AsyncWorker)
|
|
2443
2519
|
|
|
2444
2520
|
operator napi_async_work() const;
|
|
@@ -2497,8 +2573,9 @@ class AsyncWorker {
|
|
|
2497
2573
|
std::string _error;
|
|
2498
2574
|
bool _suppress_destruct;
|
|
2499
2575
|
};
|
|
2576
|
+
#endif // NAPI_HAS_THREADS
|
|
2500
2577
|
|
|
2501
|
-
#if (NAPI_VERSION > 3 &&
|
|
2578
|
+
#if (NAPI_VERSION > 3 && NAPI_HAS_THREADS)
|
|
2502
2579
|
class ThreadSafeFunction {
|
|
2503
2580
|
public:
|
|
2504
2581
|
// This API may only be called from the main thread.
|
|
@@ -3068,7 +3145,7 @@ class AsyncProgressQueueWorker
|
|
|
3068
3145
|
void Signal() const;
|
|
3069
3146
|
void SendProgress_(const T* data, size_t count);
|
|
3070
3147
|
};
|
|
3071
|
-
#endif // NAPI_VERSION > 3 &&
|
|
3148
|
+
#endif // NAPI_VERSION > 3 && NAPI_HAS_THREADS
|
|
3072
3149
|
|
|
3073
3150
|
// Memory management.
|
|
3074
3151
|
class MemoryManagement {
|
package/package.json
CHANGED
|
@@ -247,6 +247,10 @@
|
|
|
247
247
|
"name": "Mathias Küsel",
|
|
248
248
|
"url": "https://github.com/mathiask88"
|
|
249
249
|
},
|
|
250
|
+
{
|
|
251
|
+
"name": "Mathias Stearn",
|
|
252
|
+
"url": "https://github.com/RedBeard0531"
|
|
253
|
+
},
|
|
250
254
|
{
|
|
251
255
|
"name": "Matteo Collina",
|
|
252
256
|
"url": "https://github.com/mcollina"
|
|
@@ -355,6 +359,10 @@
|
|
|
355
359
|
"name": "todoroff",
|
|
356
360
|
"url": "https://github.com/todoroff"
|
|
357
361
|
},
|
|
362
|
+
{
|
|
363
|
+
"name": "Toyo Li",
|
|
364
|
+
"url": "https://github.com/toyobayashi"
|
|
365
|
+
},
|
|
358
366
|
{
|
|
359
367
|
"name": "Tux3",
|
|
360
368
|
"url": "https://github.com/tux3"
|
|
@@ -451,6 +459,6 @@
|
|
|
451
459
|
"lint:fix": "node tools/clang-format --fix && node tools/eslint-format --fix"
|
|
452
460
|
},
|
|
453
461
|
"pre-commit": "lint",
|
|
454
|
-
"version": "
|
|
462
|
+
"version": "6.1.0",
|
|
455
463
|
"support": true
|
|
456
464
|
}
|
package/tools/eslint-format.js
CHANGED
|
@@ -23,7 +23,7 @@ function main (args) {
|
|
|
23
23
|
// Check js files that change on unstaged file
|
|
24
24
|
const fileUnStaged = spawn(
|
|
25
25
|
'git',
|
|
26
|
-
['diff', '--name-only', FORMAT_START, filesToCheck],
|
|
26
|
+
['diff', '--name-only', '--diff-filter=d', FORMAT_START, filesToCheck],
|
|
27
27
|
{
|
|
28
28
|
encoding: 'utf-8'
|
|
29
29
|
}
|
|
@@ -32,7 +32,7 @@ function main (args) {
|
|
|
32
32
|
// Check js files that change on staged file
|
|
33
33
|
const fileStaged = spawn(
|
|
34
34
|
'git',
|
|
35
|
-
['diff', '--name-only', '--cached', FORMAT_START, filesToCheck],
|
|
35
|
+
['diff', '--name-only', '--cached', '--diff-filter=d', FORMAT_START, filesToCheck],
|
|
36
36
|
{
|
|
37
37
|
encoding: 'utf-8'
|
|
38
38
|
}
|