node-addon-api 3.1.0 → 3.2.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/README.md +67 -47
  3. package/napi-inl.deprecated.h +8 -8
  4. package/napi-inl.h +118 -80
  5. package/napi.h +513 -424
  6. package/package.json +25 -5
  7. package/tools/clang-format.js +30 -10
  8. package/.clang-format +0 -111
  9. package/.editorconfig +0 -8
  10. package/.github/workflows/ci.yml +0 -55
  11. package/.github/workflows/linter.yml +0 -24
  12. package/.github/workflows/stale.yml +0 -18
  13. package/.travis.yml +0 -58
  14. package/CODE_OF_CONDUCT.md +0 -4
  15. package/CONTRIBUTING.md +0 -66
  16. package/appveyor.yml +0 -37
  17. package/benchmark/README.md +0 -47
  18. package/benchmark/binding.gyp +0 -25
  19. package/benchmark/function_args.cc +0 -217
  20. package/benchmark/function_args.js +0 -60
  21. package/benchmark/index.js +0 -34
  22. package/benchmark/property_descriptor.cc +0 -91
  23. package/benchmark/property_descriptor.js +0 -37
  24. package/doc/addon.md +0 -157
  25. package/doc/array.md +0 -81
  26. package/doc/array_buffer.md +0 -149
  27. package/doc/async_context.md +0 -86
  28. package/doc/async_operations.md +0 -31
  29. package/doc/async_worker.md +0 -427
  30. package/doc/async_worker_variants.md +0 -557
  31. package/doc/bigint.md +0 -97
  32. package/doc/boolean.md +0 -68
  33. package/doc/buffer.md +0 -144
  34. package/doc/callback_scope.md +0 -54
  35. package/doc/callbackinfo.md +0 -97
  36. package/doc/checker-tool.md +0 -32
  37. package/doc/class_property_descriptor.md +0 -117
  38. package/doc/cmake-js.md +0 -68
  39. package/doc/conversion-tool.md +0 -28
  40. package/doc/creating_a_release.md +0 -62
  41. package/doc/dataview.md +0 -248
  42. package/doc/date.md +0 -68
  43. package/doc/env.md +0 -132
  44. package/doc/error.md +0 -120
  45. package/doc/error_handling.md +0 -186
  46. package/doc/escapable_handle_scope.md +0 -82
  47. package/doc/external.md +0 -63
  48. package/doc/function.md +0 -402
  49. package/doc/function_reference.md +0 -238
  50. package/doc/generator.md +0 -13
  51. package/doc/handle_scope.md +0 -65
  52. package/doc/hierarchy.md +0 -91
  53. package/doc/instance_wrap.md +0 -408
  54. package/doc/memory_management.md +0 -27
  55. package/doc/name.md +0 -29
  56. package/doc/node-gyp.md +0 -82
  57. package/doc/number.md +0 -163
  58. package/doc/object.md +0 -279
  59. package/doc/object_lifetime_management.md +0 -83
  60. package/doc/object_reference.md +0 -117
  61. package/doc/object_wrap.md +0 -561
  62. package/doc/prebuild_tools.md +0 -16
  63. package/doc/promises.md +0 -79
  64. package/doc/property_descriptor.md +0 -286
  65. package/doc/range_error.md +0 -59
  66. package/doc/reference.md +0 -111
  67. package/doc/setup.md +0 -81
  68. package/doc/string.md +0 -93
  69. package/doc/symbol.md +0 -48
  70. package/doc/threadsafe.md +0 -121
  71. package/doc/threadsafe_function.md +0 -290
  72. package/doc/type_error.md +0 -59
  73. package/doc/typed_array.md +0 -78
  74. package/doc/typed_array_of.md +0 -137
  75. package/doc/typed_threadsafe_function.md +0 -307
  76. package/doc/value.md +0 -340
  77. package/doc/version_management.md +0 -43
package/napi-inl.h CHANGED
@@ -2,9 +2,10 @@
2
2
  #define SRC_NAPI_INL_H_
3
3
 
4
4
  ////////////////////////////////////////////////////////////////////////////////
5
- // N-API C++ Wrapper Classes
5
+ // Node-API C++ Wrapper Classes
6
6
  //
7
- // Inline header-only implementations for "N-API" ABI-stable C APIs for Node.js.
7
+ // Inline header-only implementations for "Node-API" ABI-stable C APIs for
8
+ // Node.js.
8
9
  ////////////////////////////////////////////////////////////////////////////////
9
10
 
10
11
  // Note: Do not include this file directly! Include "napi.h" instead.
@@ -179,8 +180,9 @@ TemplatedInstanceVoidCallback(napi_env env,
179
180
 
180
181
  template <typename T, typename Finalizer, typename Hint = void>
181
182
  struct FinalizeData {
182
- static inline
183
- void Wrapper(napi_env env, void* data, void* finalizeHint) noexcept {
183
+ static inline void Wrapper(napi_env env,
184
+ void* data,
185
+ void* finalizeHint) NAPI_NOEXCEPT {
184
186
  WrapVoidCallback([&] {
185
187
  FinalizeData* finalizeData = static_cast<FinalizeData*>(finalizeHint);
186
188
  finalizeData->callback(Env(env), static_cast<T*>(data));
@@ -188,8 +190,9 @@ struct FinalizeData {
188
190
  });
189
191
  }
190
192
 
191
- static inline
192
- void WrapperWithHint(napi_env env, void* data, void* finalizeHint) noexcept {
193
+ static inline void WrapperWithHint(napi_env env,
194
+ void* data,
195
+ void* finalizeHint) NAPI_NOEXCEPT {
193
196
  WrapVoidCallback([&] {
194
197
  FinalizeData* finalizeData = static_cast<FinalizeData*>(finalizeHint);
195
198
  finalizeData->callback(Env(env), static_cast<T*>(data), finalizeData->hint);
@@ -342,12 +345,11 @@ struct AccessorCallbackData {
342
345
  ////////////////////////////////////////////////////////////////////////////////
343
346
 
344
347
  // Register an add-on based on an initializer function.
345
- #define NODE_API_MODULE(modname, regfunc) \
346
- napi_value __napi_ ## regfunc(napi_env env, \
347
- napi_value exports) { \
348
- return Napi::RegisterModule(env, exports, regfunc); \
349
- } \
350
- NAPI_MODULE(modname, __napi_ ## regfunc)
348
+ #define NODE_API_MODULE(modname, regfunc) \
349
+ static napi_value __napi_##regfunc(napi_env env, napi_value exports) { \
350
+ return Napi::RegisterModule(env, exports, regfunc); \
351
+ } \
352
+ NAPI_MODULE(modname, __napi_##regfunc)
351
353
 
352
354
  // Register an add-on based on a subclass of `Addon<T>` with a custom Node.js
353
355
  // module name.
@@ -1234,29 +1236,32 @@ inline Value Object::Get(const std::string& utf8name) const {
1234
1236
  }
1235
1237
 
1236
1238
  template <typename ValueType>
1237
- inline void Object::Set(napi_value key, const ValueType& value) {
1239
+ inline bool Object::Set(napi_value key, const ValueType& value) {
1238
1240
  napi_status status =
1239
1241
  napi_set_property(_env, _value, key, Value::From(_env, value));
1240
- NAPI_THROW_IF_FAILED_VOID(_env, status);
1242
+ NAPI_THROW_IF_FAILED(_env, status, false);
1243
+ return true;
1241
1244
  }
1242
1245
 
1243
1246
  template <typename ValueType>
1244
- inline void Object::Set(Value key, const ValueType& value) {
1247
+ inline bool Object::Set(Value key, const ValueType& value) {
1245
1248
  napi_status status =
1246
1249
  napi_set_property(_env, _value, key, Value::From(_env, value));
1247
- NAPI_THROW_IF_FAILED_VOID(_env, status);
1250
+ NAPI_THROW_IF_FAILED(_env, status, false);
1251
+ return true;
1248
1252
  }
1249
1253
 
1250
1254
  template <typename ValueType>
1251
- inline void Object::Set(const char* utf8name, const ValueType& value) {
1255
+ inline bool Object::Set(const char* utf8name, const ValueType& value) {
1252
1256
  napi_status status =
1253
1257
  napi_set_named_property(_env, _value, utf8name, Value::From(_env, value));
1254
- NAPI_THROW_IF_FAILED_VOID(_env, status);
1258
+ NAPI_THROW_IF_FAILED(_env, status, false);
1259
+ return true;
1255
1260
  }
1256
1261
 
1257
1262
  template <typename ValueType>
1258
- inline void Object::Set(const std::string& utf8name, const ValueType& value) {
1259
- Set(utf8name.c_str(), value);
1263
+ inline bool Object::Set(const std::string& utf8name, const ValueType& value) {
1264
+ return Set(utf8name.c_str(), value);
1260
1265
  }
1261
1266
 
1262
1267
  inline bool Object::Delete(napi_value key) {
@@ -1296,10 +1301,11 @@ inline Value Object::Get(uint32_t index) const {
1296
1301
  }
1297
1302
 
1298
1303
  template <typename ValueType>
1299
- inline void Object::Set(uint32_t index, const ValueType& value) {
1304
+ inline bool Object::Set(uint32_t index, const ValueType& value) {
1300
1305
  napi_status status =
1301
1306
  napi_set_element(_env, _value, index, Value::From(_env, value));
1302
- NAPI_THROW_IF_FAILED_VOID(_env, status);
1307
+ NAPI_THROW_IF_FAILED(_env, status, false);
1308
+ return true;
1303
1309
  }
1304
1310
 
1305
1311
  inline bool Object::Delete(uint32_t index) {
@@ -1316,22 +1322,27 @@ inline Array Object::GetPropertyNames() const {
1316
1322
  return Array(_env, result);
1317
1323
  }
1318
1324
 
1319
- inline void Object::DefineProperty(const PropertyDescriptor& property) {
1325
+ inline bool Object::DefineProperty(const PropertyDescriptor& property) {
1320
1326
  napi_status status = napi_define_properties(_env, _value, 1,
1321
1327
  reinterpret_cast<const napi_property_descriptor*>(&property));
1322
- NAPI_THROW_IF_FAILED_VOID(_env, status);
1328
+ NAPI_THROW_IF_FAILED(_env, status, false);
1329
+ return true;
1323
1330
  }
1324
1331
 
1325
- inline void Object::DefineProperties(const std::initializer_list<PropertyDescriptor>& properties) {
1332
+ inline bool Object::DefineProperties(
1333
+ const std::initializer_list<PropertyDescriptor>& properties) {
1326
1334
  napi_status status = napi_define_properties(_env, _value, properties.size(),
1327
1335
  reinterpret_cast<const napi_property_descriptor*>(properties.begin()));
1328
- NAPI_THROW_IF_FAILED_VOID(_env, status);
1336
+ NAPI_THROW_IF_FAILED(_env, status, false);
1337
+ return true;
1329
1338
  }
1330
1339
 
1331
- inline void Object::DefineProperties(const std::vector<PropertyDescriptor>& properties) {
1340
+ inline bool Object::DefineProperties(
1341
+ const std::vector<PropertyDescriptor>& properties) {
1332
1342
  napi_status status = napi_define_properties(_env, _value, properties.size(),
1333
1343
  reinterpret_cast<const napi_property_descriptor*>(properties.data()));
1334
- NAPI_THROW_IF_FAILED_VOID(_env, status);
1344
+ NAPI_THROW_IF_FAILED(_env, status, false);
1345
+ return true;
1335
1346
  }
1336
1347
 
1337
1348
  inline bool Object::InstanceOf(const Function& constructor) const {
@@ -1344,7 +1355,8 @@ inline bool Object::InstanceOf(const Function& constructor) const {
1344
1355
  template <typename Finalizer, typename T>
1345
1356
  inline void Object::AddFinalizer(Finalizer finalizeCallback, T* data) {
1346
1357
  details::FinalizeData<T, Finalizer>* finalizeData =
1347
- new details::FinalizeData<T, Finalizer>({ finalizeCallback, nullptr });
1358
+ new details::FinalizeData<T, Finalizer>(
1359
+ {std::move(finalizeCallback), nullptr});
1348
1360
  napi_status status =
1349
1361
  details::AttachData(_env,
1350
1362
  *this,
@@ -1362,7 +1374,8 @@ inline void Object::AddFinalizer(Finalizer finalizeCallback,
1362
1374
  T* data,
1363
1375
  Hint* finalizeHint) {
1364
1376
  details::FinalizeData<T, Finalizer, Hint>* finalizeData =
1365
- new details::FinalizeData<T, Finalizer, Hint>({ finalizeCallback, finalizeHint });
1377
+ new details::FinalizeData<T, Finalizer, Hint>(
1378
+ {std::move(finalizeCallback), finalizeHint});
1366
1379
  napi_status status =
1367
1380
  details::AttachData(_env,
1368
1381
  *this,
@@ -1375,6 +1388,20 @@ inline void Object::AddFinalizer(Finalizer finalizeCallback,
1375
1388
  }
1376
1389
  }
1377
1390
 
1391
+ #if NAPI_VERSION >= 8
1392
+ inline bool Object::Freeze() {
1393
+ napi_status status = napi_object_freeze(_env, _value);
1394
+ NAPI_THROW_IF_FAILED(_env, status, false);
1395
+ return true;
1396
+ }
1397
+
1398
+ inline bool Object::Seal() {
1399
+ napi_status status = napi_object_seal(_env, _value);
1400
+ NAPI_THROW_IF_FAILED(_env, status, false);
1401
+ return true;
1402
+ }
1403
+ #endif // NAPI_VERSION >= 8
1404
+
1378
1405
  ////////////////////////////////////////////////////////////////////////////////
1379
1406
  // External class
1380
1407
  ////////////////////////////////////////////////////////////////////////////////
@@ -1394,7 +1421,8 @@ inline External<T> External<T>::New(napi_env env,
1394
1421
  Finalizer finalizeCallback) {
1395
1422
  napi_value value;
1396
1423
  details::FinalizeData<T, Finalizer>* finalizeData =
1397
- new details::FinalizeData<T, Finalizer>({ finalizeCallback, nullptr });
1424
+ new details::FinalizeData<T, Finalizer>(
1425
+ {std::move(finalizeCallback), nullptr});
1398
1426
  napi_status status = napi_create_external(
1399
1427
  env,
1400
1428
  data,
@@ -1416,7 +1444,8 @@ inline External<T> External<T>::New(napi_env env,
1416
1444
  Hint* finalizeHint) {
1417
1445
  napi_value value;
1418
1446
  details::FinalizeData<T, Finalizer, Hint>* finalizeData =
1419
- new details::FinalizeData<T, Finalizer, Hint>({ finalizeCallback, finalizeHint });
1447
+ new details::FinalizeData<T, Finalizer, Hint>(
1448
+ {std::move(finalizeCallback), finalizeHint});
1420
1449
  napi_status status = napi_create_external(
1421
1450
  env,
1422
1451
  data,
@@ -1508,7 +1537,8 @@ inline ArrayBuffer ArrayBuffer::New(napi_env env,
1508
1537
  Finalizer finalizeCallback) {
1509
1538
  napi_value value;
1510
1539
  details::FinalizeData<void, Finalizer>* finalizeData =
1511
- new details::FinalizeData<void, Finalizer>({ finalizeCallback, nullptr });
1540
+ new details::FinalizeData<void, Finalizer>(
1541
+ {std::move(finalizeCallback), nullptr});
1512
1542
  napi_status status = napi_create_external_arraybuffer(
1513
1543
  env,
1514
1544
  externalData,
@@ -1532,7 +1562,8 @@ inline ArrayBuffer ArrayBuffer::New(napi_env env,
1532
1562
  Hint* finalizeHint) {
1533
1563
  napi_value value;
1534
1564
  details::FinalizeData<void, Finalizer, Hint>* finalizeData =
1535
- new details::FinalizeData<void, Finalizer, Hint>({ finalizeCallback, finalizeHint });
1565
+ new details::FinalizeData<void, Finalizer, Hint>(
1566
+ {std::move(finalizeCallback), finalizeHint});
1536
1567
  napi_status status = napi_create_external_arraybuffer(
1537
1568
  env,
1538
1569
  externalData,
@@ -1982,8 +2013,8 @@ inline Function Function::New(napi_env env,
1982
2013
  Callable cb,
1983
2014
  const char* utf8name,
1984
2015
  void* data) {
1985
- typedef decltype(cb(CallbackInfo(nullptr, nullptr))) ReturnType;
1986
- typedef details::CallbackData<Callable, ReturnType> CbData;
2016
+ using ReturnType = decltype(cb(CallbackInfo(nullptr, nullptr)));
2017
+ using CbData = details::CallbackData<Callable, ReturnType>;
1987
2018
  auto callbackData = new CbData({ cb, data });
1988
2019
 
1989
2020
  napi_value value;
@@ -2152,7 +2183,8 @@ inline Buffer<T> Buffer<T>::New(napi_env env,
2152
2183
  Finalizer finalizeCallback) {
2153
2184
  napi_value value;
2154
2185
  details::FinalizeData<T, Finalizer>* finalizeData =
2155
- new details::FinalizeData<T, Finalizer>({ finalizeCallback, nullptr });
2186
+ new details::FinalizeData<T, Finalizer>(
2187
+ {std::move(finalizeCallback), nullptr});
2156
2188
  napi_status status = napi_create_external_buffer(
2157
2189
  env,
2158
2190
  length * sizeof (T),
@@ -2176,7 +2208,8 @@ inline Buffer<T> Buffer<T>::New(napi_env env,
2176
2208
  Hint* finalizeHint) {
2177
2209
  napi_value value;
2178
2210
  details::FinalizeData<T, Finalizer, Hint>* finalizeData =
2179
- new details::FinalizeData<T, Finalizer, Hint>({ finalizeCallback, finalizeHint });
2211
+ new details::FinalizeData<T, Finalizer, Hint>(
2212
+ {std::move(finalizeCallback), finalizeHint});
2180
2213
  napi_status status = napi_create_external_buffer(
2181
2214
  env,
2182
2215
  length * sizeof (T),
@@ -2656,54 +2689,58 @@ inline Napi::Value ObjectReference::Get(const std::string& utf8name) const {
2656
2689
  return scope.Escape(Value().Get(utf8name));
2657
2690
  }
2658
2691
 
2659
- inline void ObjectReference::Set(const char* utf8name, napi_value value) {
2692
+ inline bool ObjectReference::Set(const char* utf8name, napi_value value) {
2660
2693
  HandleScope scope(_env);
2661
- Value().Set(utf8name, value);
2694
+ return Value().Set(utf8name, value);
2662
2695
  }
2663
2696
 
2664
- inline void ObjectReference::Set(const char* utf8name, Napi::Value value) {
2697
+ inline bool ObjectReference::Set(const char* utf8name, Napi::Value value) {
2665
2698
  HandleScope scope(_env);
2666
- Value().Set(utf8name, value);
2699
+ return Value().Set(utf8name, value);
2667
2700
  }
2668
2701
 
2669
- inline void ObjectReference::Set(const char* utf8name, const char* utf8value) {
2702
+ inline bool ObjectReference::Set(const char* utf8name, const char* utf8value) {
2670
2703
  HandleScope scope(_env);
2671
- Value().Set(utf8name, utf8value);
2704
+ return Value().Set(utf8name, utf8value);
2672
2705
  }
2673
2706
 
2674
- inline void ObjectReference::Set(const char* utf8name, bool boolValue) {
2707
+ inline bool ObjectReference::Set(const char* utf8name, bool boolValue) {
2675
2708
  HandleScope scope(_env);
2676
- Value().Set(utf8name, boolValue);
2709
+ return Value().Set(utf8name, boolValue);
2677
2710
  }
2678
2711
 
2679
- inline void ObjectReference::Set(const char* utf8name, double numberValue) {
2712
+ inline bool ObjectReference::Set(const char* utf8name, double numberValue) {
2680
2713
  HandleScope scope(_env);
2681
- Value().Set(utf8name, numberValue);
2714
+ return Value().Set(utf8name, numberValue);
2682
2715
  }
2683
2716
 
2684
- inline void ObjectReference::Set(const std::string& utf8name, napi_value value) {
2717
+ inline bool ObjectReference::Set(const std::string& utf8name,
2718
+ napi_value value) {
2685
2719
  HandleScope scope(_env);
2686
- Value().Set(utf8name, value);
2720
+ return Value().Set(utf8name, value);
2687
2721
  }
2688
2722
 
2689
- inline void ObjectReference::Set(const std::string& utf8name, Napi::Value value) {
2723
+ inline bool ObjectReference::Set(const std::string& utf8name,
2724
+ Napi::Value value) {
2690
2725
  HandleScope scope(_env);
2691
- Value().Set(utf8name, value);
2726
+ return Value().Set(utf8name, value);
2692
2727
  }
2693
2728
 
2694
- inline void ObjectReference::Set(const std::string& utf8name, std::string& utf8value) {
2729
+ inline bool ObjectReference::Set(const std::string& utf8name,
2730
+ std::string& utf8value) {
2695
2731
  HandleScope scope(_env);
2696
- Value().Set(utf8name, utf8value);
2732
+ return Value().Set(utf8name, utf8value);
2697
2733
  }
2698
2734
 
2699
- inline void ObjectReference::Set(const std::string& utf8name, bool boolValue) {
2735
+ inline bool ObjectReference::Set(const std::string& utf8name, bool boolValue) {
2700
2736
  HandleScope scope(_env);
2701
- Value().Set(utf8name, boolValue);
2737
+ return Value().Set(utf8name, boolValue);
2702
2738
  }
2703
2739
 
2704
- inline void ObjectReference::Set(const std::string& utf8name, double numberValue) {
2740
+ inline bool ObjectReference::Set(const std::string& utf8name,
2741
+ double numberValue) {
2705
2742
  HandleScope scope(_env);
2706
- Value().Set(utf8name, numberValue);
2743
+ return Value().Set(utf8name, numberValue);
2707
2744
  }
2708
2745
 
2709
2746
  inline Napi::Value ObjectReference::Get(uint32_t index) const {
@@ -2711,34 +2748,34 @@ inline Napi::Value ObjectReference::Get(uint32_t index) const {
2711
2748
  return scope.Escape(Value().Get(index));
2712
2749
  }
2713
2750
 
2714
- inline void ObjectReference::Set(uint32_t index, napi_value value) {
2751
+ inline bool ObjectReference::Set(uint32_t index, napi_value value) {
2715
2752
  HandleScope scope(_env);
2716
- Value().Set(index, value);
2753
+ return Value().Set(index, value);
2717
2754
  }
2718
2755
 
2719
- inline void ObjectReference::Set(uint32_t index, Napi::Value value) {
2756
+ inline bool ObjectReference::Set(uint32_t index, Napi::Value value) {
2720
2757
  HandleScope scope(_env);
2721
- Value().Set(index, value);
2758
+ return Value().Set(index, value);
2722
2759
  }
2723
2760
 
2724
- inline void ObjectReference::Set(uint32_t index, const char* utf8value) {
2761
+ inline bool ObjectReference::Set(uint32_t index, const char* utf8value) {
2725
2762
  HandleScope scope(_env);
2726
- Value().Set(index, utf8value);
2763
+ return Value().Set(index, utf8value);
2727
2764
  }
2728
2765
 
2729
- inline void ObjectReference::Set(uint32_t index, const std::string& utf8value) {
2766
+ inline bool ObjectReference::Set(uint32_t index, const std::string& utf8value) {
2730
2767
  HandleScope scope(_env);
2731
- Value().Set(index, utf8value);
2768
+ return Value().Set(index, utf8value);
2732
2769
  }
2733
2770
 
2734
- inline void ObjectReference::Set(uint32_t index, bool boolValue) {
2771
+ inline bool ObjectReference::Set(uint32_t index, bool boolValue) {
2735
2772
  HandleScope scope(_env);
2736
- Value().Set(index, boolValue);
2773
+ return Value().Set(index, boolValue);
2737
2774
  }
2738
2775
 
2739
- inline void ObjectReference::Set(uint32_t index, double numberValue) {
2776
+ inline bool ObjectReference::Set(uint32_t index, double numberValue) {
2740
2777
  HandleScope scope(_env);
2741
- Value().Set(index, numberValue);
2778
+ return Value().Set(index, numberValue);
2742
2779
  }
2743
2780
 
2744
2781
  ////////////////////////////////////////////////////////////////////////////////
@@ -3034,7 +3071,7 @@ PropertyDescriptor::Accessor(Napi::Env env,
3034
3071
  Getter getter,
3035
3072
  napi_property_attributes attributes,
3036
3073
  void* data) {
3037
- typedef details::CallbackData<Getter, Napi::Value> CbData;
3074
+ using CbData = details::CallbackData<Getter, Napi::Value>;
3038
3075
  auto callbackData = new CbData({ getter, data });
3039
3076
 
3040
3077
  napi_status status = AttachData(env, object, callbackData);
@@ -3072,7 +3109,7 @@ inline PropertyDescriptor PropertyDescriptor::Accessor(Napi::Env env,
3072
3109
  Getter getter,
3073
3110
  napi_property_attributes attributes,
3074
3111
  void* data) {
3075
- typedef details::CallbackData<Getter, Napi::Value> CbData;
3112
+ using CbData = details::CallbackData<Getter, Napi::Value>;
3076
3113
  auto callbackData = new CbData({ getter, data });
3077
3114
 
3078
3115
  napi_status status = AttachData(env, object, callbackData);
@@ -3101,7 +3138,7 @@ inline PropertyDescriptor PropertyDescriptor::Accessor(Napi::Env env,
3101
3138
  Setter setter,
3102
3139
  napi_property_attributes attributes,
3103
3140
  void* data) {
3104
- typedef details::AccessorCallbackData<Getter, Setter> CbData;
3141
+ using CbData = details::AccessorCallbackData<Getter, Setter>;
3105
3142
  auto callbackData = new CbData({ getter, setter, data });
3106
3143
 
3107
3144
  napi_status status = AttachData(env, object, callbackData);
@@ -3141,7 +3178,7 @@ inline PropertyDescriptor PropertyDescriptor::Accessor(Napi::Env env,
3141
3178
  Setter setter,
3142
3179
  napi_property_attributes attributes,
3143
3180
  void* data) {
3144
- typedef details::AccessorCallbackData<Getter, Setter> CbData;
3181
+ using CbData = details::AccessorCallbackData<Getter, Setter>;
3145
3182
  auto callbackData = new CbData({ getter, setter, data });
3146
3183
 
3147
3184
  napi_status status = AttachData(env, object, callbackData);
@@ -3261,7 +3298,7 @@ inline void InstanceWrap<T>::AttachPropData(napi_env env,
3261
3298
  napi_value value,
3262
3299
  const napi_property_descriptor* prop) {
3263
3300
  napi_status status;
3264
- if (prop->method != nullptr && !(prop->attributes & napi_static)) {
3301
+ if (!(prop->attributes & napi_static)) {
3265
3302
  if (prop->method == T::InstanceVoidMethodCallbackWrapper) {
3266
3303
  status = Napi::details::AttachData(env,
3267
3304
  value,
@@ -3562,7 +3599,8 @@ inline napi_value InstanceWrap<T>::InstanceSetterCallbackWrapper(
3562
3599
 
3563
3600
  template <typename T>
3564
3601
  template <typename InstanceWrap<T>::InstanceSetterCallback method>
3565
- inline napi_value InstanceWrap<T>::WrappedMethod(napi_env env, napi_callback_info info) noexcept {
3602
+ inline napi_value InstanceWrap<T>::WrappedMethod(
3603
+ napi_env env, napi_callback_info info) NAPI_NOEXCEPT {
3566
3604
  return details::WrapCallback([&] {
3567
3605
  const CallbackInfo cbInfo(env, info);
3568
3606
  T* instance = T::Unwrap(cbInfo.This().As<Object>());
@@ -4024,7 +4062,8 @@ inline void ObjectWrap<T>::FinalizeCallback(napi_env env, void* data, void* /*hi
4024
4062
 
4025
4063
  template <typename T>
4026
4064
  template <typename ObjectWrap<T>::StaticSetterCallback method>
4027
- inline napi_value ObjectWrap<T>::WrappedMethod(napi_env env, napi_callback_info info) noexcept {
4065
+ inline napi_value ObjectWrap<T>::WrappedMethod(
4066
+ napi_env env, napi_callback_info info) NAPI_NOEXCEPT {
4028
4067
  return details::WrapCallback([&] {
4029
4068
  const CallbackInfo cbInfo(env, info);
4030
4069
  method(cbInfo, cbInfo[0]);
@@ -4137,10 +4176,9 @@ inline AsyncContext::AsyncContext(napi_env env, const char* resource_name)
4137
4176
  }
4138
4177
 
4139
4178
  inline AsyncContext::AsyncContext(napi_env env,
4140
- const char* resource_name,
4179
+ const char* resource_name,
4141
4180
  const Object& resource)
4142
- : _env(env),
4143
- _context(nullptr) {
4181
+ : _env(env), _context(nullptr) {
4144
4182
  napi_value resource_id;
4145
4183
  napi_status status = napi_create_string_utf8(
4146
4184
  _env, resource_name, NAPI_AUTO_LENGTH, &resource_id);