emnapi 0.42.0 → 0.43.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.
@@ -150,6 +150,7 @@ function _emnapi_create_memory_view(env, typedarray_type, external_data, byte_le
150
150
  if (!env)
151
151
  return 1 /* napi_status.napi_invalid_arg */;
152
152
  var envObject = emnapiCtx.envStore.get(env);
153
+ envObject.checkGCAccess();
153
154
  if (envObject.tryCatch.hasCaught())
154
155
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
155
156
  if (!envObject.canCallIntoJs()) {
@@ -311,6 +312,7 @@ function emnapi_sync_memory(env, js_to_wasm, arraybuffer_or_view, offset, len) {
311
312
  if (!env)
312
313
  return 1 /* napi_status.napi_invalid_arg */;
313
314
  var envObject = emnapiCtx.envStore.get(env);
315
+ envObject.checkGCAccess();
314
316
  if (envObject.tryCatch.hasCaught())
315
317
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
316
318
  if (!envObject.canCallIntoJs()) {
@@ -368,6 +370,7 @@ function emnapi_get_memory_address(env, arraybuffer_or_view, address, ownership,
368
370
  if (!env)
369
371
  return 1 /* napi_status.napi_invalid_arg */;
370
372
  var envObject = emnapiCtx.envStore.get(env);
373
+ envObject.checkGCAccess();
371
374
  if (envObject.tryCatch.hasCaught())
372
375
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
373
376
  if (!envObject.canCallIntoJs()) {
@@ -457,6 +460,7 @@ function napi_throw(env, error) {
457
460
  if (!env)
458
461
  return 1 /* napi_status.napi_invalid_arg */;
459
462
  var envObject = emnapiCtx.envStore.get(env);
463
+ envObject.checkGCAccess();
460
464
  if (envObject.tryCatch.hasCaught())
461
465
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
462
466
  if (!envObject.canCallIntoJs()) {
@@ -478,6 +482,7 @@ function napi_throw_error(env, code, msg) {
478
482
  if (!env)
479
483
  return 1 /* napi_status.napi_invalid_arg */;
480
484
  var envObject = emnapiCtx.envStore.get(env);
485
+ envObject.checkGCAccess();
481
486
  if (envObject.tryCatch.hasCaught())
482
487
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
483
488
  if (!envObject.canCallIntoJs()) {
@@ -504,6 +509,7 @@ function napi_throw_type_error(env, code, msg) {
504
509
  if (!env)
505
510
  return 1 /* napi_status.napi_invalid_arg */;
506
511
  var envObject = emnapiCtx.envStore.get(env);
512
+ envObject.checkGCAccess();
507
513
  if (envObject.tryCatch.hasCaught())
508
514
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
509
515
  if (!envObject.canCallIntoJs()) {
@@ -530,6 +536,7 @@ function napi_throw_range_error(env, code, msg) {
530
536
  if (!env)
531
537
  return 1 /* napi_status.napi_invalid_arg */;
532
538
  var envObject = emnapiCtx.envStore.get(env);
539
+ envObject.checkGCAccess();
533
540
  if (envObject.tryCatch.hasCaught())
534
541
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
535
542
  if (!envObject.canCallIntoJs()) {
@@ -556,6 +563,7 @@ function node_api_throw_syntax_error(env, code, msg) {
556
563
  if (!env)
557
564
  return 1 /* napi_status.napi_invalid_arg */;
558
565
  var envObject = emnapiCtx.envStore.get(env);
566
+ envObject.checkGCAccess();
559
567
  if (envObject.tryCatch.hasCaught())
560
568
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
561
569
  if (!envObject.canCallIntoJs()) {
@@ -582,6 +590,7 @@ function napi_is_exception_pending(env, result) {
582
590
  if (!env)
583
591
  return 1 /* napi_status.napi_invalid_arg */;
584
592
  var envObject = emnapiCtx.envStore.get(env);
593
+ envObject.checkGCAccess();
585
594
  if (!result)
586
595
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
587
596
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -594,6 +603,7 @@ function napi_create_error(env, code, msg, result) {
594
603
  if (!env)
595
604
  return 1 /* napi_status.napi_invalid_arg */;
596
605
  var envObject = emnapiCtx.envStore.get(env);
606
+ envObject.checkGCAccess();
597
607
  if (!msg)
598
608
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
599
609
  if (!result)
@@ -620,6 +630,7 @@ function napi_create_type_error(env, code, msg, result) {
620
630
  if (!env)
621
631
  return 1 /* napi_status.napi_invalid_arg */;
622
632
  var envObject = emnapiCtx.envStore.get(env);
633
+ envObject.checkGCAccess();
623
634
  if (!msg)
624
635
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
625
636
  if (!result)
@@ -646,6 +657,7 @@ function napi_create_range_error(env, code, msg, result) {
646
657
  if (!env)
647
658
  return 1 /* napi_status.napi_invalid_arg */;
648
659
  var envObject = emnapiCtx.envStore.get(env);
660
+ envObject.checkGCAccess();
649
661
  if (!msg)
650
662
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
651
663
  if (!result)
@@ -672,6 +684,7 @@ function node_api_create_syntax_error(env, code, msg, result) {
672
684
  if (!env)
673
685
  return 1 /* napi_status.napi_invalid_arg */;
674
686
  var envObject = emnapiCtx.envStore.get(env);
687
+ envObject.checkGCAccess();
675
688
  if (!msg)
676
689
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
677
690
  if (!result)
@@ -698,6 +711,7 @@ function napi_get_and_clear_last_exception(env, result) {
698
711
  if (!env)
699
712
  return 1 /* napi_status.napi_invalid_arg */;
700
713
  var envObject = emnapiCtx.envStore.get(env);
714
+ envObject.checkGCAccess();
701
715
  if (!result)
702
716
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
703
717
  {{{ from64('result') }}};
@@ -732,6 +746,7 @@ function napi_fatal_exception(env, err) {
732
746
  if (!env)
733
747
  return 1 /* napi_status.napi_invalid_arg */;
734
748
  var envObject = emnapiCtx.envStore.get(env);
749
+ envObject.checkGCAccess();
735
750
  if (envObject.tryCatch.hasCaught())
736
751
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
737
752
  if (!envObject.canCallIntoJs()) {
@@ -775,6 +790,7 @@ function napi_create_function(env, utf8name, length, cb, data, result) {
775
790
  if (!env)
776
791
  return 1 /* napi_status.napi_invalid_arg */;
777
792
  var envObject = emnapiCtx.envStore.get(env);
793
+ envObject.checkGCAccess();
778
794
  if (envObject.tryCatch.hasCaught())
779
795
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
780
796
  if (!envObject.canCallIntoJs()) {
@@ -806,6 +822,8 @@ function napi_get_cb_info(env, cbinfo, argc, argv, this_arg, data) {
806
822
  if (!env)
807
823
  return 1 /* napi_status.napi_invalid_arg */;
808
824
  var envObject = emnapiCtx.envStore.get(env);
825
+ if (!cbinfo)
826
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
809
827
  var cbinfoValue = emnapiCtx.cbinfoStack.get(cbinfo);
810
828
  {{{ from64('argc') }}};
811
829
  {{{ from64('argv') }}};
@@ -850,6 +868,7 @@ function napi_call_function(env, recv, func, argc, argv, result) {
850
868
  if (!env)
851
869
  return 1 /* napi_status.napi_invalid_arg */;
852
870
  var envObject = emnapiCtx.envStore.get(env);
871
+ envObject.checkGCAccess();
853
872
  if (envObject.tryCatch.hasCaught())
854
873
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
855
874
  if (!envObject.canCallIntoJs()) {
@@ -897,6 +916,7 @@ function napi_new_instance(env, constructor, argc, argv, result) {
897
916
  if (!env)
898
917
  return 1 /* napi_status.napi_invalid_arg */;
899
918
  var envObject = emnapiCtx.envStore.get(env);
919
+ envObject.checkGCAccess();
900
920
  if (envObject.tryCatch.hasCaught())
901
921
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
902
922
  if (!envObject.canCallIntoJs()) {
@@ -953,8 +973,11 @@ function napi_get_new_target(env, cbinfo, result) {
953
973
  if (!env)
954
974
  return 1 /* napi_status.napi_invalid_arg */;
955
975
  var envObject = emnapiCtx.envStore.get(env);
976
+ if (!cbinfo)
977
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
956
978
  if (!result)
957
979
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
980
+ envObject.checkGCAccess();
958
981
  {{{ from64('result') }}};
959
982
  var cbinfoValue = emnapiCtx.cbinfoStack.get(cbinfo);
960
983
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -1079,6 +1102,7 @@ function emnapiWrap(env, js_object, native_object, finalize_cb, finalize_hint, r
1079
1102
  if (!env)
1080
1103
  return 1 /* napi_status.napi_invalid_arg */;
1081
1104
  var envObject = emnapiCtx.envStore.get(env);
1105
+ envObject.checkGCAccess();
1082
1106
  if (envObject.tryCatch.hasCaught())
1083
1107
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
1084
1108
  if (!envObject.canCallIntoJs()) {
@@ -1130,6 +1154,7 @@ function emnapiUnwrap(env, js_object, result, action) {
1130
1154
  if (!env)
1131
1155
  return 1 /* napi_status.napi_invalid_arg */;
1132
1156
  var envObject = emnapiCtx.envStore.get(env);
1157
+ envObject.checkGCAccess();
1133
1158
  if (envObject.tryCatch.hasCaught())
1134
1159
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
1135
1160
  if (!envObject.canCallIntoJs()) {
@@ -1184,6 +1209,7 @@ function napi_open_handle_scope(env, result) {
1184
1209
  if (!env)
1185
1210
  return 1 /* napi_status.napi_invalid_arg */;
1186
1211
  var envObject = emnapiCtx.envStore.get(env);
1212
+ envObject.checkGCAccess();
1187
1213
  if (!result)
1188
1214
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1189
1215
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -1196,6 +1222,7 @@ function napi_close_handle_scope(env, scope) {
1196
1222
  if (!env)
1197
1223
  return 1 /* napi_status.napi_invalid_arg */;
1198
1224
  var envObject = emnapiCtx.envStore.get(env);
1225
+ envObject.checkGCAccess();
1199
1226
  if (!scope)
1200
1227
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1201
1228
  if ((envObject.openHandleScopes === 0)) {
@@ -1208,6 +1235,7 @@ function napi_open_escapable_handle_scope(env, result) {
1208
1235
  if (!env)
1209
1236
  return 1 /* napi_status.napi_invalid_arg */;
1210
1237
  var envObject = emnapiCtx.envStore.get(env);
1238
+ envObject.checkGCAccess();
1211
1239
  if (!result)
1212
1240
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1213
1241
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -1220,6 +1248,7 @@ function napi_close_escapable_handle_scope(env, scope) {
1220
1248
  if (!env)
1221
1249
  return 1 /* napi_status.napi_invalid_arg */;
1222
1250
  var envObject = emnapiCtx.envStore.get(env);
1251
+ envObject.checkGCAccess();
1223
1252
  if (!scope)
1224
1253
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1225
1254
  if ((envObject.openHandleScopes === 0)) {
@@ -1232,6 +1261,7 @@ function napi_escape_handle(env, scope, escapee, result) {
1232
1261
  if (!env)
1233
1262
  return 1 /* napi_status.napi_invalid_arg */;
1234
1263
  var envObject = emnapiCtx.envStore.get(env);
1264
+ envObject.checkGCAccess();
1235
1265
  if (!scope)
1236
1266
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1237
1267
  if (!escapee)
@@ -1254,6 +1284,7 @@ function napi_create_reference(env, value, initial_refcount, result) {
1254
1284
  if (!env)
1255
1285
  return 1 /* napi_status.napi_invalid_arg */;
1256
1286
  var envObject = emnapiCtx.envStore.get(env);
1287
+ envObject.checkGCAccess();
1257
1288
  if (!value)
1258
1289
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1259
1290
  if (!result)
@@ -1274,6 +1305,7 @@ function napi_delete_reference(env, ref) {
1274
1305
  if (!env)
1275
1306
  return 1 /* napi_status.napi_invalid_arg */;
1276
1307
  var envObject = emnapiCtx.envStore.get(env);
1308
+ envObject.checkGCAccess();
1277
1309
  if (!ref)
1278
1310
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1279
1311
  emnapiCtx.refStore.get(ref).dispose();
@@ -1283,6 +1315,7 @@ function napi_reference_ref(env, ref, result) {
1283
1315
  if (!env)
1284
1316
  return 1 /* napi_status.napi_invalid_arg */;
1285
1317
  var envObject = emnapiCtx.envStore.get(env);
1318
+ envObject.checkGCAccess();
1286
1319
  if (!ref)
1287
1320
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1288
1321
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -1297,6 +1330,7 @@ function napi_reference_unref(env, ref, result) {
1297
1330
  if (!env)
1298
1331
  return 1 /* napi_status.napi_invalid_arg */;
1299
1332
  var envObject = emnapiCtx.envStore.get(env);
1333
+ envObject.checkGCAccess();
1300
1334
  if (!ref)
1301
1335
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1302
1336
  var reference = emnapiCtx.refStore.get(ref);
@@ -1316,6 +1350,7 @@ function napi_get_reference_value(env, ref, result) {
1316
1350
  if (!env)
1317
1351
  return 1 /* napi_status.napi_invalid_arg */;
1318
1352
  var envObject = emnapiCtx.envStore.get(env);
1353
+ envObject.checkGCAccess();
1319
1354
  if (!ref)
1320
1355
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1321
1356
  if (!result)
@@ -1640,6 +1675,7 @@ function napi_make_callback(env, async_context, recv, func, argc, argv, result)
1640
1675
  if (!env)
1641
1676
  return 1 /* napi_status.napi_invalid_arg */;
1642
1677
  var envObject = emnapiCtx.envStore.get(env);
1678
+ envObject.checkGCAccess();
1643
1679
  if (envObject.tryCatch.hasCaught())
1644
1680
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
1645
1681
  if (!envObject.canCallIntoJs()) {
@@ -1692,6 +1728,10 @@ function napi_make_callback(env, async_context, recv, func, argc, argv, result)
1692
1728
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
1693
1729
  }
1694
1730
  }
1731
+ function __emnapi_env_check_gc_access(env) {
1732
+ var envObject = emnapiCtx.envStore.get(env);
1733
+ envObject.checkGCAccess();
1734
+ }
1695
1735
  emnapiImplementInternal('_emnapi_node_emit_async_init', 'vppdp', __emnapi_node_emit_async_init);
1696
1736
  emnapiImplementInternal('_emnapi_node_emit_async_destroy', 'vdd', __emnapi_node_emit_async_destroy);
1697
1737
  // emnapiImplementInternal('_emnapi_node_open_callback_scope', 'vpddp', __emnapi_node_open_callback_scope)
@@ -1699,6 +1739,7 @@ emnapiImplementInternal('_emnapi_node_emit_async_destroy', 'vdd', __emnapi_node_
1699
1739
  emnapiImplementInternal('_emnapi_node_make_callback', 'ipppppddp', __emnapi_node_make_callback);
1700
1740
  emnapiImplementInternal('_emnapi_async_init_js', 'ippp', __emnapi_async_init_js);
1701
1741
  emnapiImplementInternal('_emnapi_async_destroy_js', 'ip', __emnapi_async_destroy_js);
1742
+ emnapiImplementInternal('_emnapi_env_check_gc_access', 'vp', __emnapi_env_check_gc_access);
1702
1743
  emnapiImplement('napi_open_callback_scope', 'ipppp', napi_open_callback_scope);
1703
1744
  emnapiImplement('napi_close_callback_scope', 'ipp', napi_close_callback_scope);
1704
1745
  emnapiImplement('napi_make_callback', 'ippppppp', napi_make_callback);
@@ -1708,6 +1749,7 @@ function napi_create_promise(env, deferred, promise) {
1708
1749
  if (!env)
1709
1750
  return 1 /* napi_status.napi_invalid_arg */;
1710
1751
  var envObject = emnapiCtx.envStore.get(env);
1752
+ envObject.checkGCAccess();
1711
1753
  if (envObject.tryCatch.hasCaught())
1712
1754
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
1713
1755
  if (!envObject.canCallIntoJs()) {
@@ -1740,6 +1782,7 @@ function napi_resolve_deferred(env, deferred, resolution) {
1740
1782
  if (!env)
1741
1783
  return 1 /* napi_status.napi_invalid_arg */;
1742
1784
  var envObject = emnapiCtx.envStore.get(env);
1785
+ envObject.checkGCAccess();
1743
1786
  if (envObject.tryCatch.hasCaught())
1744
1787
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
1745
1788
  if (!envObject.canCallIntoJs()) {
@@ -1764,6 +1807,7 @@ function napi_reject_deferred(env, deferred, resolution) {
1764
1807
  if (!env)
1765
1808
  return 1 /* napi_status.napi_invalid_arg */;
1766
1809
  var envObject = emnapiCtx.envStore.get(env);
1810
+ envObject.checkGCAccess();
1767
1811
  if (envObject.tryCatch.hasCaught())
1768
1812
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
1769
1813
  if (!envObject.canCallIntoJs()) {
@@ -1788,6 +1832,7 @@ function napi_is_promise(env, value, is_promise) {
1788
1832
  if (!env)
1789
1833
  return 1 /* napi_status.napi_invalid_arg */;
1790
1834
  var envObject = emnapiCtx.envStore.get(env);
1835
+ envObject.checkGCAccess();
1791
1836
  if (!value)
1792
1837
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
1793
1838
  if (!is_promise)
@@ -1809,6 +1854,7 @@ function _napi_get_all_property_names(env, object, key_mode, key_filter, key_con
1809
1854
  if (!env)
1810
1855
  return 1 /* napi_status.napi_invalid_arg */;
1811
1856
  var envObject = emnapiCtx.envStore.get(env);
1857
+ envObject.checkGCAccess();
1812
1858
  if (envObject.tryCatch.hasCaught())
1813
1859
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
1814
1860
  if (!envObject.canCallIntoJs()) {
@@ -1953,6 +1999,7 @@ function napi_set_property(env, object, key, value) {
1953
1999
  if (!env)
1954
2000
  return 1 /* napi_status.napi_invalid_arg */;
1955
2001
  var envObject = emnapiCtx.envStore.get(env);
2002
+ envObject.checkGCAccess();
1956
2003
  if (envObject.tryCatch.hasCaught())
1957
2004
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
1958
2005
  if (!envObject.canCallIntoJs()) {
@@ -1984,6 +2031,7 @@ function napi_has_property(env, object, key, result) {
1984
2031
  if (!env)
1985
2032
  return 1 /* napi_status.napi_invalid_arg */;
1986
2033
  var envObject = emnapiCtx.envStore.get(env);
2034
+ envObject.checkGCAccess();
1987
2035
  if (envObject.tryCatch.hasCaught())
1988
2036
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
1989
2037
  if (!envObject.canCallIntoJs()) {
@@ -2024,6 +2072,7 @@ function napi_get_property(env, object, key, result) {
2024
2072
  if (!env)
2025
2073
  return 1 /* napi_status.napi_invalid_arg */;
2026
2074
  var envObject = emnapiCtx.envStore.get(env);
2075
+ envObject.checkGCAccess();
2027
2076
  if (envObject.tryCatch.hasCaught())
2028
2077
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2029
2078
  if (!envObject.canCallIntoJs()) {
@@ -2065,6 +2114,7 @@ function napi_delete_property(env, object, key, result) {
2065
2114
  if (!env)
2066
2115
  return 1 /* napi_status.napi_invalid_arg */;
2067
2116
  var envObject = emnapiCtx.envStore.get(env);
2117
+ envObject.checkGCAccess();
2068
2118
  if (envObject.tryCatch.hasCaught())
2069
2119
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2070
2120
  if (!envObject.canCallIntoJs()) {
@@ -2109,6 +2159,7 @@ function napi_has_own_property(env, object, key, result) {
2109
2159
  if (!env)
2110
2160
  return 1 /* napi_status.napi_invalid_arg */;
2111
2161
  var envObject = emnapiCtx.envStore.get(env);
2162
+ envObject.checkGCAccess();
2112
2163
  if (envObject.tryCatch.hasCaught())
2113
2164
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2114
2165
  if (!envObject.canCallIntoJs()) {
@@ -2151,6 +2202,7 @@ function napi_set_named_property(env, object, cname, value) {
2151
2202
  if (!env)
2152
2203
  return 1 /* napi_status.napi_invalid_arg */;
2153
2204
  var envObject = emnapiCtx.envStore.get(env);
2205
+ envObject.checkGCAccess();
2154
2206
  if (envObject.tryCatch.hasCaught())
2155
2207
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2156
2208
  if (!envObject.canCallIntoJs()) {
@@ -2184,6 +2236,7 @@ function napi_has_named_property(env, object, utf8name, result) {
2184
2236
  if (!env)
2185
2237
  return 1 /* napi_status.napi_invalid_arg */;
2186
2238
  var envObject = emnapiCtx.envStore.get(env);
2239
+ envObject.checkGCAccess();
2187
2240
  if (envObject.tryCatch.hasCaught())
2188
2241
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2189
2242
  if (!envObject.canCallIntoJs()) {
@@ -2226,6 +2279,7 @@ function napi_get_named_property(env, object, utf8name, result) {
2226
2279
  if (!env)
2227
2280
  return 1 /* napi_status.napi_invalid_arg */;
2228
2281
  var envObject = emnapiCtx.envStore.get(env);
2282
+ envObject.checkGCAccess();
2229
2283
  if (envObject.tryCatch.hasCaught())
2230
2284
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2231
2285
  if (!envObject.canCallIntoJs()) {
@@ -2267,6 +2321,7 @@ function napi_set_element(env, object, index, value) {
2267
2321
  if (!env)
2268
2322
  return 1 /* napi_status.napi_invalid_arg */;
2269
2323
  var envObject = emnapiCtx.envStore.get(env);
2324
+ envObject.checkGCAccess();
2270
2325
  if (envObject.tryCatch.hasCaught())
2271
2326
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2272
2327
  if (!envObject.canCallIntoJs()) {
@@ -2296,6 +2351,7 @@ function napi_has_element(env, object, index, result) {
2296
2351
  if (!env)
2297
2352
  return 1 /* napi_status.napi_invalid_arg */;
2298
2353
  var envObject = emnapiCtx.envStore.get(env);
2354
+ envObject.checkGCAccess();
2299
2355
  if (envObject.tryCatch.hasCaught())
2300
2356
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2301
2357
  if (!envObject.canCallIntoJs()) {
@@ -2334,6 +2390,7 @@ function napi_get_element(env, object, index, result) {
2334
2390
  if (!env)
2335
2391
  return 1 /* napi_status.napi_invalid_arg */;
2336
2392
  var envObject = emnapiCtx.envStore.get(env);
2393
+ envObject.checkGCAccess();
2337
2394
  if (envObject.tryCatch.hasCaught())
2338
2395
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2339
2396
  if (!envObject.canCallIntoJs()) {
@@ -2373,6 +2430,7 @@ function napi_delete_element(env, object, index, result) {
2373
2430
  if (!env)
2374
2431
  return 1 /* napi_status.napi_invalid_arg */;
2375
2432
  var envObject = emnapiCtx.envStore.get(env);
2433
+ envObject.checkGCAccess();
2376
2434
  if (envObject.tryCatch.hasCaught())
2377
2435
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2378
2436
  if (!envObject.canCallIntoJs()) {
@@ -2414,6 +2472,7 @@ function napi_define_properties(env, object, property_count, properties) {
2414
2472
  if (!env)
2415
2473
  return 1 /* napi_status.napi_invalid_arg */;
2416
2474
  var envObject = emnapiCtx.envStore.get(env);
2475
+ envObject.checkGCAccess();
2417
2476
  if (envObject.tryCatch.hasCaught())
2418
2477
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2419
2478
  if (!envObject.canCallIntoJs()) {
@@ -2473,6 +2532,7 @@ function napi_object_freeze(env, object) {
2473
2532
  if (!env)
2474
2533
  return 1 /* napi_status.napi_invalid_arg */;
2475
2534
  var envObject = emnapiCtx.envStore.get(env);
2535
+ envObject.checkGCAccess();
2476
2536
  if (envObject.tryCatch.hasCaught())
2477
2537
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2478
2538
  if (!envObject.canCallIntoJs()) {
@@ -2499,6 +2559,7 @@ function napi_object_seal(env, object) {
2499
2559
  if (!env)
2500
2560
  return 1 /* napi_status.napi_invalid_arg */;
2501
2561
  var envObject = emnapiCtx.envStore.get(env);
2562
+ envObject.checkGCAccess();
2502
2563
  if (envObject.tryCatch.hasCaught())
2503
2564
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2504
2565
  if (!envObject.canCallIntoJs()) {
@@ -2540,12 +2601,14 @@ emnapiImplement('napi_object_freeze', 'ipp', napi_object_freeze);
2540
2601
  emnapiImplement('napi_object_seal', 'ipp', napi_object_seal);
2541
2602
  /* eslint-disable @typescript-eslint/indent */
2542
2603
  function napi_run_script(env, script, result) {
2604
+ var status;
2543
2605
  #if DYNAMIC_EXECUTION
2544
2606
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2545
2607
  var value;
2546
2608
  if (!env)
2547
2609
  return 1 /* napi_status.napi_invalid_arg */;
2548
2610
  var envObject = emnapiCtx.envStore.get(env);
2611
+ envObject.checkGCAccess();
2549
2612
  if (envObject.tryCatch.hasCaught())
2550
2613
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2551
2614
  if (!envObject.canCallIntoJs()) {
@@ -2567,14 +2630,14 @@ function napi_run_script(env, script, result) {
2567
2630
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2568
2631
  value = envObject.ensureHandleId(ret);
2569
2632
  {{{ makeSetValue('result', 0, 'value', '*') }}};
2570
- return envObject.getReturnStatus();
2633
+ status = envObject.getReturnStatus();
2571
2634
  }
2572
2635
  catch (err) {
2573
2636
  envObject.tryCatch.setError(err);
2574
2637
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
2575
2638
  }
2576
2639
  #else
2577
- var status = _napi_set_last_error(env, 9 /* napi_status.napi_generic_failure */, 0, 0);
2640
+ status = _napi_set_last_error(env, 9 /* napi_status.napi_generic_failure */, 0, 0);
2578
2641
  #endif
2579
2642
  return status;
2580
2643
  }
@@ -2836,6 +2899,7 @@ var emnapiString = {
2836
2899
  if (!env)
2837
2900
  return 1 /* napi_status.napi_invalid_arg */;
2838
2901
  var envObject = emnapiCtx.envStore.get(env);
2902
+ envObject.checkGCAccess();
2839
2903
  {{{ from64('length') }}};
2840
2904
  var autoLength = length === -1;
2841
2905
  var sizelength = length >>> 0;
@@ -2857,14 +2921,16 @@ var emnapiString = {
2857
2921
  return envObject.clearLastError();
2858
2922
  },
2859
2923
  newExternalString: function (env, str, length, finalize_callback, finalize_hint, result, copied, createApi, stringMaker) {
2924
+ var envObject = emnapiCtx.envStore.get(env);
2925
+ envObject.checkGCAccess();
2860
2926
  var status = createApi(env, str, length, result);
2861
2927
  if (status === 0 /* napi_status.napi_ok */) {
2862
2928
  if (copied) {
2863
2929
  {{{ makeSetValue('copied', 0, '1', 'i8') }}};
2864
2930
  }
2865
2931
  if (finalize_callback) {
2866
- var envObject = emnapiCtx.envStore.get(env);
2867
- envObject.callFinalizer(finalize_callback, str, finalize_hint);
2932
+ var envObject_1 = emnapiCtx.envStore.get(env);
2933
+ envObject_1.callFinalizer(finalize_callback, str, finalize_hint);
2868
2934
  }
2869
2935
  }
2870
2936
  return status;
@@ -3419,10 +3485,10 @@ var emnapiTSFN = {
3419
3485
  });
3420
3486
  if (popped_value) {
3421
3487
  var env = emnapiTSFN.getEnv(func);
3422
- var envObject_1 = emnapiCtx.envStore.get(env);
3423
- emnapiCtx.openScope(envObject_1);
3488
+ var envObject_2 = emnapiCtx.envStore.get(env);
3489
+ emnapiCtx.openScope(envObject_2);
3424
3490
  var f = function () {
3425
- envObject_1.callbackIntoModule(false, function () {
3491
+ envObject_2.callbackIntoModule(false, function () {
3426
3492
  var callJsCb = emnapiTSFN.getCallJSCb(func);
3427
3493
  var ref = emnapiTSFN.getRef(func);
3428
3494
  var js_callback = ref ? emnapiCtx.refStore.get(ref).get() : 0;
@@ -3455,7 +3521,7 @@ var emnapiTSFN = {
3455
3521
  }
3456
3522
  }
3457
3523
  finally {
3458
- emnapiCtx.closeScope(envObject_1);
3524
+ emnapiCtx.closeScope(envObject_2);
3459
3525
  }
3460
3526
  }
3461
3527
  return has_more;
@@ -3502,6 +3568,7 @@ function _napi_create_threadsafe_function(env, func, async_resource, async_resou
3502
3568
  if (!env)
3503
3569
  return 1 /* napi_status.napi_invalid_arg */;
3504
3570
  var envObject = emnapiCtx.envStore.get(env);
3571
+ envObject.checkGCAccess();
3505
3572
  if (!async_resource_name)
3506
3573
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3507
3574
  {{{ from64('max_queue_size') }}};
@@ -3778,6 +3845,7 @@ function napi_typeof(env, value, result) {
3778
3845
  if (!env)
3779
3846
  return 1 /* napi_status.napi_invalid_arg */;
3780
3847
  var envObject = emnapiCtx.envStore.get(env);
3848
+ envObject.checkGCAccess();
3781
3849
  if (!value)
3782
3850
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3783
3851
  if (!result)
@@ -3833,6 +3901,7 @@ function napi_coerce_to_bool(env, value, result) {
3833
3901
  if (!env)
3834
3902
  return 1 /* napi_status.napi_invalid_arg */;
3835
3903
  var envObject = emnapiCtx.envStore.get(env);
3904
+ envObject.checkGCAccess();
3836
3905
  if (envObject.tryCatch.hasCaught())
3837
3906
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
3838
3907
  if (!envObject.canCallIntoJs()) {
@@ -3861,6 +3930,7 @@ function napi_coerce_to_number(env, value, result) {
3861
3930
  if (!env)
3862
3931
  return 1 /* napi_status.napi_invalid_arg */;
3863
3932
  var envObject = emnapiCtx.envStore.get(env);
3933
+ envObject.checkGCAccess();
3864
3934
  if (envObject.tryCatch.hasCaught())
3865
3935
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
3866
3936
  if (!envObject.canCallIntoJs()) {
@@ -3893,6 +3963,7 @@ function napi_coerce_to_object(env, value, result) {
3893
3963
  if (!env)
3894
3964
  return 1 /* napi_status.napi_invalid_arg */;
3895
3965
  var envObject = emnapiCtx.envStore.get(env);
3966
+ envObject.checkGCAccess();
3896
3967
  if (envObject.tryCatch.hasCaught())
3897
3968
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
3898
3969
  if (!envObject.canCallIntoJs()) {
@@ -3925,6 +3996,7 @@ function napi_coerce_to_string(env, value, result) {
3925
3996
  if (!env)
3926
3997
  return 1 /* napi_status.napi_invalid_arg */;
3927
3998
  var envObject = emnapiCtx.envStore.get(env);
3999
+ envObject.checkGCAccess();
3928
4000
  if (envObject.tryCatch.hasCaught())
3929
4001
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
3930
4002
  if (!envObject.canCallIntoJs()) {
@@ -3957,6 +4029,7 @@ function napi_instanceof(env, object, constructor, result) {
3957
4029
  if (!env)
3958
4030
  return 1 /* napi_status.napi_invalid_arg */;
3959
4031
  var envObject = emnapiCtx.envStore.get(env);
4032
+ envObject.checkGCAccess();
3960
4033
  if (envObject.tryCatch.hasCaught())
3961
4034
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
3962
4035
  if (!envObject.canCallIntoJs()) {
@@ -3991,6 +4064,7 @@ function napi_is_array(env, value, result) {
3991
4064
  if (!env)
3992
4065
  return 1 /* napi_status.napi_invalid_arg */;
3993
4066
  var envObject = emnapiCtx.envStore.get(env);
4067
+ envObject.checkGCAccess();
3994
4068
  if (!value)
3995
4069
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
3996
4070
  if (!result)
@@ -4006,6 +4080,7 @@ function napi_is_arraybuffer(env, value, result) {
4006
4080
  if (!env)
4007
4081
  return 1 /* napi_status.napi_invalid_arg */;
4008
4082
  var envObject = emnapiCtx.envStore.get(env);
4083
+ envObject.checkGCAccess();
4009
4084
  if (!value)
4010
4085
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4011
4086
  if (!result)
@@ -4021,6 +4096,7 @@ function napi_is_date(env, value, result) {
4021
4096
  if (!env)
4022
4097
  return 1 /* napi_status.napi_invalid_arg */;
4023
4098
  var envObject = emnapiCtx.envStore.get(env);
4099
+ envObject.checkGCAccess();
4024
4100
  if (!value)
4025
4101
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4026
4102
  if (!result)
@@ -4036,6 +4112,7 @@ function napi_is_error(env, value, result) {
4036
4112
  if (!env)
4037
4113
  return 1 /* napi_status.napi_invalid_arg */;
4038
4114
  var envObject = emnapiCtx.envStore.get(env);
4115
+ envObject.checkGCAccess();
4039
4116
  if (!value)
4040
4117
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4041
4118
  if (!result)
@@ -4051,6 +4128,7 @@ function napi_is_typedarray(env, value, result) {
4051
4128
  if (!env)
4052
4129
  return 1 /* napi_status.napi_invalid_arg */;
4053
4130
  var envObject = emnapiCtx.envStore.get(env);
4131
+ envObject.checkGCAccess();
4054
4132
  if (!value)
4055
4133
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4056
4134
  if (!result)
@@ -4066,6 +4144,7 @@ function napi_is_buffer(env, value, result) {
4066
4144
  if (!env)
4067
4145
  return 1 /* napi_status.napi_invalid_arg */;
4068
4146
  var envObject = emnapiCtx.envStore.get(env);
4147
+ envObject.checkGCAccess();
4069
4148
  if (!value)
4070
4149
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4071
4150
  if (!result)
@@ -4081,6 +4160,7 @@ function napi_is_dataview(env, value, result) {
4081
4160
  if (!env)
4082
4161
  return 1 /* napi_status.napi_invalid_arg */;
4083
4162
  var envObject = emnapiCtx.envStore.get(env);
4163
+ envObject.checkGCAccess();
4084
4164
  if (!value)
4085
4165
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4086
4166
  if (!result)
@@ -4098,6 +4178,7 @@ function napi_strict_equals(env, lhs, rhs, result) {
4098
4178
  if (!env)
4099
4179
  return 1 /* napi_status.napi_invalid_arg */;
4100
4180
  var envObject = emnapiCtx.envStore.get(env);
4181
+ envObject.checkGCAccess();
4101
4182
  if (envObject.tryCatch.hasCaught())
4102
4183
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4103
4184
  if (!envObject.canCallIntoJs()) {
@@ -4127,6 +4208,7 @@ function napi_detach_arraybuffer(env, arraybuffer) {
4127
4208
  if (!env)
4128
4209
  return 1 /* napi_status.napi_invalid_arg */;
4129
4210
  var envObject = emnapiCtx.envStore.get(env);
4211
+ envObject.checkGCAccess();
4130
4212
  if (!arraybuffer)
4131
4213
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4132
4214
  var value = emnapiCtx.handleStore.get(arraybuffer).value;
@@ -4150,6 +4232,7 @@ function napi_is_detached_arraybuffer(env, arraybuffer, result) {
4150
4232
  if (!env)
4151
4233
  return 1 /* napi_status.napi_invalid_arg */;
4152
4234
  var envObject = emnapiCtx.envStore.get(env);
4235
+ envObject.checkGCAccess();
4153
4236
  if (envObject.tryCatch.hasCaught())
4154
4237
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4155
4238
  if (!envObject.canCallIntoJs()) {
@@ -4157,6 +4240,7 @@ function napi_is_detached_arraybuffer(env, arraybuffer, result) {
4157
4240
  }
4158
4241
  envObject.clearLastError();
4159
4242
  try {
4243
+ envObject.checkGCAccess();
4160
4244
  if (!arraybuffer)
4161
4245
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4162
4246
  if (!result)
@@ -4215,6 +4299,7 @@ function napi_define_class(env, utf8name, length, constructor, callback_data, pr
4215
4299
  if (!env)
4216
4300
  return 1 /* napi_status.napi_invalid_arg */;
4217
4301
  var envObject = emnapiCtx.envStore.get(env);
4302
+ envObject.checkGCAccess();
4218
4303
  if (envObject.tryCatch.hasCaught())
4219
4304
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4220
4305
  if (!envObject.canCallIntoJs()) {
@@ -4297,6 +4382,7 @@ function napi_type_tag_object(env, object, type_tag) {
4297
4382
  if (!env)
4298
4383
  return 1 /* napi_status.napi_invalid_arg */;
4299
4384
  var envObject = emnapiCtx.envStore.get(env);
4385
+ envObject.checkGCAccess();
4300
4386
  if (envObject.tryCatch.hasCaught())
4301
4387
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4302
4388
  if (!envObject.canCallIntoJs()) {
@@ -4338,6 +4424,7 @@ function napi_check_object_type_tag(env, object, type_tag, result) {
4338
4424
  if (!env)
4339
4425
  return 1 /* napi_status.napi_invalid_arg */;
4340
4426
  var envObject = emnapiCtx.envStore.get(env);
4427
+ envObject.checkGCAccess();
4341
4428
  if (envObject.tryCatch.hasCaught())
4342
4429
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4343
4430
  if (!envObject.canCallIntoJs()) {
@@ -4386,6 +4473,7 @@ function _napi_add_finalizer(env, js_object, finalize_data, finalize_cb, finaliz
4386
4473
  if (!env)
4387
4474
  return 1 /* napi_status.napi_invalid_arg */;
4388
4475
  var envObject = emnapiCtx.envStore.get(env);
4476
+ envObject.checkGCAccess();
4389
4477
  if (!emnapiCtx.feature.supportFinalizer) {
4390
4478
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
4391
4479
  }
@@ -4411,6 +4499,13 @@ function _napi_add_finalizer(env, js_object, finalize_data, finalize_cb, finaliz
4411
4499
  }
4412
4500
  return envObject.clearLastError();
4413
4501
  }
4502
+ function _node_api_post_finalizer(env, finalize_cb, finalize_data, finalize_hint) {
4503
+ if (!env)
4504
+ return 1 /* napi_status.napi_invalid_arg */;
4505
+ var envObject = emnapiCtx.envStore.get(env);
4506
+ envObject.enqueueFinalizer(emnapiCtx.createTrackedFinalizer(envObject, finalize_cb, finalize_data, finalize_hint));
4507
+ return envObject.clearLastError();
4508
+ }
4414
4509
  emnapiImplement('napi_define_class', 'ipppppppp', napi_define_class, ['$emnapiCreateFunction', '$emnapiDefineProperty', '$emnapiString']);
4415
4510
  emnapiImplement('napi_wrap', 'ipppppp', napi_wrap, ['$emnapiWrap']);
4416
4511
  emnapiImplement('napi_unwrap', 'ippp', napi_unwrap, ['$emnapiUnwrap']);
@@ -4418,28 +4513,43 @@ emnapiImplement('napi_remove_wrap', 'ippp', napi_remove_wrap, ['$emnapiUnwrap'])
4418
4513
  emnapiImplement('napi_type_tag_object', 'ippp', napi_type_tag_object);
4419
4514
  emnapiImplement('napi_check_object_type_tag', 'ipppp', napi_check_object_type_tag);
4420
4515
  emnapiImplement('napi_add_finalizer', 'ipppppp', _napi_add_finalizer, ['$emnapiGetHandle']);
4516
+ emnapiImplement('node_api_post_finalizer', 'ipppp', _node_api_post_finalizer);
4421
4517
  function napi_get_array_length(env, value, result) {
4422
4518
  if (!env)
4423
4519
  return 1 /* napi_status.napi_invalid_arg */;
4424
4520
  var envObject = emnapiCtx.envStore.get(env);
4425
- if (!value)
4426
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4427
- if (!result)
4428
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4429
- var handle = emnapiCtx.handleStore.get(value);
4430
- if (!handle.isArray()) {
4431
- return envObject.setLastError(8 /* napi_status.napi_array_expected */);
4521
+ envObject.checkGCAccess();
4522
+ if (envObject.tryCatch.hasCaught())
4523
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4524
+ if (!envObject.canCallIntoJs()) {
4525
+ return envObject.setLastError(envObject.moduleApiVersion === 2147483647 /* Version.NAPI_VERSION_EXPERIMENTAL */ ? 23 /* napi_status.napi_cannot_run_js */ : 10 /* napi_status.napi_pending_exception */);
4526
+ }
4527
+ envObject.clearLastError();
4528
+ try {
4529
+ if (!value)
4530
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4531
+ if (!result)
4532
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4533
+ var handle = emnapiCtx.handleStore.get(value);
4534
+ if (!handle.isArray()) {
4535
+ return envObject.setLastError(8 /* napi_status.napi_array_expected */);
4536
+ }
4537
+ {{{ from64('result') }}};
4538
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4539
+ var v = handle.value.length >>> 0;
4540
+ {{{ makeSetValue('result', 0, 'v', 'u32') }}};
4541
+ return envObject.getReturnStatus();
4542
+ }
4543
+ catch (err) {
4544
+ envObject.tryCatch.setError(err);
4545
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4432
4546
  }
4433
- {{{ from64('result') }}};
4434
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
4435
- var v = handle.value.length >>> 0;
4436
- {{{ makeSetValue('result', 0, 'v', 'u32') }}};
4437
- return envObject.clearLastError();
4438
4547
  }
4439
4548
  function napi_get_arraybuffer_info(env, arraybuffer, data, byte_length) {
4440
4549
  if (!env)
4441
4550
  return 1 /* napi_status.napi_invalid_arg */;
4442
4551
  var envObject = emnapiCtx.envStore.get(env);
4552
+ envObject.checkGCAccess();
4443
4553
  if (!arraybuffer)
4444
4554
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4445
4555
  var handle = emnapiCtx.handleStore.get(arraybuffer);
@@ -4462,32 +4572,45 @@ function napi_get_prototype(env, value, result) {
4462
4572
  if (!env)
4463
4573
  return 1 /* napi_status.napi_invalid_arg */;
4464
4574
  var envObject = emnapiCtx.envStore.get(env);
4465
- if (!value)
4466
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4467
- if (!result)
4468
- return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4469
- var handle = emnapiCtx.handleStore.get(value);
4470
- if (handle.value == null) {
4471
- envObject.tryCatch.setError(new TypeError('Cannot convert undefined or null to object'));
4575
+ envObject.checkGCAccess();
4576
+ if (envObject.tryCatch.hasCaught())
4472
4577
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4578
+ if (!envObject.canCallIntoJs()) {
4579
+ return envObject.setLastError(envObject.moduleApiVersion === 2147483647 /* Version.NAPI_VERSION_EXPERIMENTAL */ ? 23 /* napi_status.napi_cannot_run_js */ : 10 /* napi_status.napi_pending_exception */);
4473
4580
  }
4474
- var v;
4581
+ envObject.clearLastError();
4475
4582
  try {
4476
- v = handle.isObject() || handle.isFunction() ? handle.value : Object(handle.value);
4583
+ if (!value)
4584
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4585
+ if (!result)
4586
+ return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4587
+ var handle = emnapiCtx.handleStore.get(value);
4588
+ if (handle.value == null) {
4589
+ throw new TypeError('Cannot convert undefined or null to object');
4590
+ }
4591
+ var v = void 0;
4592
+ try {
4593
+ v = handle.isObject() || handle.isFunction() ? handle.value : Object(handle.value);
4594
+ }
4595
+ catch (_) {
4596
+ return envObject.setLastError(2 /* napi_status.napi_object_expected */);
4597
+ }
4598
+ {{{ from64('result') }}};
4599
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4600
+ var p = envObject.ensureHandleId(Object.getPrototypeOf(v));
4601
+ {{{ makeSetValue('result', 0, 'p', '*') }}};
4602
+ return envObject.getReturnStatus();
4477
4603
  }
4478
- catch (_) {
4479
- return envObject.setLastError(2 /* napi_status.napi_object_expected */);
4604
+ catch (err) {
4605
+ envObject.tryCatch.setError(err);
4606
+ return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4480
4607
  }
4481
- {{{ from64('result') }}};
4482
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
4483
- var p = envObject.ensureHandleId(Object.getPrototypeOf(v));
4484
- {{{ makeSetValue('result', 0, 'p', '*') }}};
4485
- return envObject.clearLastError();
4486
4608
  }
4487
4609
  function _napi_get_typedarray_info(env, typedarray, type, length, data, arraybuffer, byte_offset) {
4488
4610
  if (!env)
4489
4611
  return 1 /* napi_status.napi_invalid_arg */;
4490
4612
  var envObject = emnapiCtx.envStore.get(env);
4613
+ envObject.checkGCAccess();
4491
4614
  if (!typedarray)
4492
4615
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4493
4616
  var handle = emnapiCtx.handleStore.get(typedarray);
@@ -4567,6 +4690,7 @@ function napi_get_buffer_info(env, buffer, data, length) {
4567
4690
  if (!env)
4568
4691
  return 1 /* napi_status.napi_invalid_arg */;
4569
4692
  var envObject = emnapiCtx.envStore.get(env);
4693
+ envObject.checkGCAccess();
4570
4694
  if (!buffer)
4571
4695
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4572
4696
  var handle = emnapiCtx.handleStore.get(buffer);
@@ -4579,6 +4703,7 @@ function napi_get_dataview_info(env, dataview, byte_length, data, arraybuffer, b
4579
4703
  if (!env)
4580
4704
  return 1 /* napi_status.napi_invalid_arg */;
4581
4705
  var envObject = emnapiCtx.envStore.get(env);
4706
+ envObject.checkGCAccess();
4582
4707
  if (!dataview)
4583
4708
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4584
4709
  var handle = emnapiCtx.handleStore.get(dataview);
@@ -4618,6 +4743,7 @@ function napi_get_date_value(env, value, result) {
4618
4743
  if (!env)
4619
4744
  return 1 /* napi_status.napi_invalid_arg */;
4620
4745
  var envObject = emnapiCtx.envStore.get(env);
4746
+ envObject.checkGCAccess();
4621
4747
  if (envObject.tryCatch.hasCaught())
4622
4748
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
4623
4749
  if (!envObject.canCallIntoJs()) {
@@ -4625,6 +4751,7 @@ function napi_get_date_value(env, value, result) {
4625
4751
  }
4626
4752
  envObject.clearLastError();
4627
4753
  try {
4754
+ envObject.checkGCAccess();
4628
4755
  if (!value)
4629
4756
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4630
4757
  if (!result)
@@ -4647,6 +4774,7 @@ function napi_get_value_bool(env, value, result) {
4647
4774
  if (!env)
4648
4775
  return 1 /* napi_status.napi_invalid_arg */;
4649
4776
  var envObject = emnapiCtx.envStore.get(env);
4777
+ envObject.checkGCAccess();
4650
4778
  if (!value)
4651
4779
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4652
4780
  if (!result)
@@ -4665,6 +4793,7 @@ function napi_get_value_double(env, value, result) {
4665
4793
  if (!env)
4666
4794
  return 1 /* napi_status.napi_invalid_arg */;
4667
4795
  var envObject = emnapiCtx.envStore.get(env);
4796
+ envObject.checkGCAccess();
4668
4797
  if (!value)
4669
4798
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4670
4799
  if (!result)
@@ -4683,6 +4812,7 @@ function napi_get_value_bigint_int64(env, value, result, lossless) {
4683
4812
  if (!env)
4684
4813
  return 1 /* napi_status.napi_invalid_arg */;
4685
4814
  var envObject = emnapiCtx.envStore.get(env);
4815
+ envObject.checkGCAccess();
4686
4816
  if (!emnapiCtx.feature.supportBigInt) {
4687
4817
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
4688
4818
  }
@@ -4721,6 +4851,7 @@ function napi_get_value_bigint_uint64(env, value, result, lossless) {
4721
4851
  if (!env)
4722
4852
  return 1 /* napi_status.napi_invalid_arg */;
4723
4853
  var envObject = emnapiCtx.envStore.get(env);
4854
+ envObject.checkGCAccess();
4724
4855
  if (!emnapiCtx.feature.supportBigInt) {
4725
4856
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
4726
4857
  }
@@ -4756,6 +4887,7 @@ function napi_get_value_bigint_words(env, value, sign_bit, word_count, words) {
4756
4887
  if (!env)
4757
4888
  return 1 /* napi_status.napi_invalid_arg */;
4758
4889
  var envObject = emnapiCtx.envStore.get(env);
4890
+ envObject.checkGCAccess();
4759
4891
  if (!emnapiCtx.feature.supportBigInt) {
4760
4892
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
4761
4893
  }
@@ -4813,6 +4945,7 @@ function napi_get_value_external(env, value, result) {
4813
4945
  if (!env)
4814
4946
  return 1 /* napi_status.napi_invalid_arg */;
4815
4947
  var envObject = emnapiCtx.envStore.get(env);
4948
+ envObject.checkGCAccess();
4816
4949
  if (!value)
4817
4950
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4818
4951
  if (!result)
@@ -4831,6 +4964,7 @@ function napi_get_value_int32(env, value, result) {
4831
4964
  if (!env)
4832
4965
  return 1 /* napi_status.napi_invalid_arg */;
4833
4966
  var envObject = emnapiCtx.envStore.get(env);
4967
+ envObject.checkGCAccess();
4834
4968
  if (!value)
4835
4969
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4836
4970
  if (!result)
@@ -4847,6 +4981,7 @@ function napi_get_value_int64(env, value, result) {
4847
4981
  if (!env)
4848
4982
  return 1 /* napi_status.napi_invalid_arg */;
4849
4983
  var envObject = emnapiCtx.envStore.get(env);
4984
+ envObject.checkGCAccess();
4850
4985
  if (!value)
4851
4986
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4852
4987
  if (!result)
@@ -4885,6 +5020,7 @@ function napi_get_value_string_latin1(env, value, buf, buf_size, result) {
4885
5020
  if (!env)
4886
5021
  return 1 /* napi_status.napi_invalid_arg */;
4887
5022
  var envObject = emnapiCtx.envStore.get(env);
5023
+ envObject.checkGCAccess();
4888
5024
  if (!value)
4889
5025
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4890
5026
  {{{ from64('result') }}};
@@ -4924,6 +5060,7 @@ function napi_get_value_string_utf8(env, value, buf, buf_size, result) {
4924
5060
  if (!env)
4925
5061
  return 1 /* napi_status.napi_invalid_arg */;
4926
5062
  var envObject = emnapiCtx.envStore.get(env);
5063
+ envObject.checkGCAccess();
4927
5064
  if (!value)
4928
5065
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4929
5066
  {{{ from64('result') }}};
@@ -4957,6 +5094,7 @@ function napi_get_value_string_utf16(env, value, buf, buf_size, result) {
4957
5094
  if (!env)
4958
5095
  return 1 /* napi_status.napi_invalid_arg */;
4959
5096
  var envObject = emnapiCtx.envStore.get(env);
5097
+ envObject.checkGCAccess();
4960
5098
  if (!value)
4961
5099
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4962
5100
  {{{ from64('result') }}};
@@ -4988,6 +5126,7 @@ function napi_get_value_uint32(env, value, result) {
4988
5126
  if (!env)
4989
5127
  return 1 /* napi_status.napi_invalid_arg */;
4990
5128
  var envObject = emnapiCtx.envStore.get(env);
5129
+ envObject.checkGCAccess();
4991
5130
  if (!value)
4992
5131
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
4993
5132
  if (!result)
@@ -5024,6 +5163,7 @@ function napi_create_int32(env, value, result) {
5024
5163
  if (!env)
5025
5164
  return 1 /* napi_status.napi_invalid_arg */;
5026
5165
  var envObject = emnapiCtx.envStore.get(env);
5166
+ envObject.checkGCAccess();
5027
5167
  if (!result)
5028
5168
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5029
5169
  {{{ from64('result') }}};
@@ -5036,6 +5176,7 @@ function napi_create_uint32(env, value, result) {
5036
5176
  if (!env)
5037
5177
  return 1 /* napi_status.napi_invalid_arg */;
5038
5178
  var envObject = emnapiCtx.envStore.get(env);
5179
+ envObject.checkGCAccess();
5039
5180
  if (!result)
5040
5181
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5041
5182
  {{{ from64('result') }}};
@@ -5048,6 +5189,7 @@ function napi_create_int64(env, low, high, result) {
5048
5189
  if (!env)
5049
5190
  return 1 /* napi_status.napi_invalid_arg */;
5050
5191
  var envObject = emnapiCtx.envStore.get(env);
5192
+ envObject.checkGCAccess();
5051
5193
  var value;
5052
5194
  #if WASM_BIGINT
5053
5195
  if (!high)
@@ -5071,6 +5213,7 @@ function napi_create_double(env, value, result) {
5071
5213
  if (!env)
5072
5214
  return 1 /* napi_status.napi_invalid_arg */;
5073
5215
  var envObject = emnapiCtx.envStore.get(env);
5216
+ envObject.checkGCAccess();
5074
5217
  if (!result)
5075
5218
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5076
5219
  {{{ from64('result') }}};
@@ -5125,6 +5268,7 @@ function napi_create_bigint_int64(env, low, high, result) {
5125
5268
  if (!env)
5126
5269
  return 1 /* napi_status.napi_invalid_arg */;
5127
5270
  var envObject = emnapiCtx.envStore.get(env);
5271
+ envObject.checkGCAccess();
5128
5272
  if (!emnapiCtx.feature.supportBigInt) {
5129
5273
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
5130
5274
  }
@@ -5151,6 +5295,7 @@ function napi_create_bigint_uint64(env, low, high, result) {
5151
5295
  if (!env)
5152
5296
  return 1 /* napi_status.napi_invalid_arg */;
5153
5297
  var envObject = emnapiCtx.envStore.get(env);
5298
+ envObject.checkGCAccess();
5154
5299
  if (!emnapiCtx.feature.supportBigInt) {
5155
5300
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
5156
5301
  }
@@ -5179,6 +5324,7 @@ function napi_create_bigint_words(env, sign_bit, word_count, words, result) {
5179
5324
  if (!env)
5180
5325
  return 1 /* napi_status.napi_invalid_arg */;
5181
5326
  var envObject = emnapiCtx.envStore.get(env);
5327
+ envObject.checkGCAccess();
5182
5328
  if (envObject.tryCatch.hasCaught())
5183
5329
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5184
5330
  if (!envObject.canCallIntoJs()) {
@@ -5189,6 +5335,7 @@ function napi_create_bigint_words(env, sign_bit, word_count, words, result) {
5189
5335
  if (!emnapiCtx.feature.supportBigInt) {
5190
5336
  return envObject.setLastError(9 /* napi_status.napi_generic_failure */);
5191
5337
  }
5338
+ envObject.checkGCAccess();
5192
5339
  if (!result)
5193
5340
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5194
5341
  {{{ from64('words') }}};
@@ -5234,6 +5381,7 @@ function napi_create_array(env, result) {
5234
5381
  if (!env)
5235
5382
  return 1 /* napi_status.napi_invalid_arg */;
5236
5383
  var envObject = emnapiCtx.envStore.get(env);
5384
+ envObject.checkGCAccess();
5237
5385
  if (!result)
5238
5386
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5239
5387
  {{{ from64('result') }}};
@@ -5246,6 +5394,7 @@ function napi_create_array_with_length(env, length, result) {
5246
5394
  if (!env)
5247
5395
  return 1 /* napi_status.napi_invalid_arg */;
5248
5396
  var envObject = emnapiCtx.envStore.get(env);
5397
+ envObject.checkGCAccess();
5249
5398
  if (!result)
5250
5399
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5251
5400
  {{{ from64('length') }}};
@@ -5274,6 +5423,7 @@ function napi_create_arraybuffer(env, byte_length, data, result) {
5274
5423
  if (!env)
5275
5424
  return 1 /* napi_status.napi_invalid_arg */;
5276
5425
  var envObject = emnapiCtx.envStore.get(env);
5426
+ envObject.checkGCAccess();
5277
5427
  if (envObject.tryCatch.hasCaught())
5278
5428
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5279
5429
  if (!envObject.canCallIntoJs()) {
@@ -5300,6 +5450,7 @@ function napi_create_date(env, time, result) {
5300
5450
  if (!env)
5301
5451
  return 1 /* napi_status.napi_invalid_arg */;
5302
5452
  var envObject = emnapiCtx.envStore.get(env);
5453
+ envObject.checkGCAccess();
5303
5454
  if (envObject.tryCatch.hasCaught())
5304
5455
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5305
5456
  if (!envObject.canCallIntoJs()) {
@@ -5326,6 +5477,7 @@ function napi_create_external(env, data, finalize_cb, finalize_hint, result) {
5326
5477
  if (!env)
5327
5478
  return 1 /* napi_status.napi_invalid_arg */;
5328
5479
  var envObject = emnapiCtx.envStore.get(env);
5480
+ envObject.checkGCAccess();
5329
5481
  if (envObject.tryCatch.hasCaught())
5330
5482
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5331
5483
  if (!envObject.canCallIntoJs()) {
@@ -5358,6 +5510,7 @@ function napi_create_external_arraybuffer(env, external_data, byte_length, final
5358
5510
  if (!env)
5359
5511
  return 1 /* napi_status.napi_invalid_arg */;
5360
5512
  var envObject = emnapiCtx.envStore.get(env);
5513
+ envObject.checkGCAccess();
5361
5514
  if (envObject.tryCatch.hasCaught())
5362
5515
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5363
5516
  if (!envObject.canCallIntoJs()) {
@@ -5423,6 +5576,7 @@ function napi_create_object(env, result) {
5423
5576
  if (!env)
5424
5577
  return 1 /* napi_status.napi_invalid_arg */;
5425
5578
  var envObject = emnapiCtx.envStore.get(env);
5579
+ envObject.checkGCAccess();
5426
5580
  if (!result)
5427
5581
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5428
5582
  {{{ from64('result') }}};
@@ -5435,6 +5589,7 @@ function napi_create_symbol(env, description, result) {
5435
5589
  if (!env)
5436
5590
  return 1 /* napi_status.napi_invalid_arg */;
5437
5591
  var envObject = emnapiCtx.envStore.get(env);
5592
+ envObject.checkGCAccess();
5438
5593
  if (!result)
5439
5594
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5440
5595
  {{{ from64('result') }}};
@@ -5461,6 +5616,7 @@ function napi_create_typedarray(env, type, length, arraybuffer, byte_offset, res
5461
5616
  if (!env)
5462
5617
  return 1 /* napi_status.napi_invalid_arg */;
5463
5618
  var envObject = emnapiCtx.envStore.get(env);
5619
+ envObject.checkGCAccess();
5464
5620
  if (envObject.tryCatch.hasCaught())
5465
5621
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5466
5622
  if (!envObject.canCallIntoJs()) {
@@ -5554,6 +5710,7 @@ function napi_create_buffer(env, size, data, result) {
5554
5710
  if (!env)
5555
5711
  return 1 /* napi_status.napi_invalid_arg */;
5556
5712
  var envObject = emnapiCtx.envStore.get(env);
5713
+ envObject.checkGCAccess();
5557
5714
  if (envObject.tryCatch.hasCaught())
5558
5715
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5559
5716
  if (!envObject.canCallIntoJs()) {
@@ -5609,6 +5766,7 @@ function napi_create_buffer_copy(env, length, data, result_data, result) {
5609
5766
  if (!env)
5610
5767
  return 1 /* napi_status.napi_invalid_arg */;
5611
5768
  var envObject = emnapiCtx.envStore.get(env);
5769
+ envObject.checkGCAccess();
5612
5770
  if (envObject.tryCatch.hasCaught())
5613
5771
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5614
5772
  if (!envObject.canCallIntoJs()) {
@@ -5646,6 +5804,7 @@ function napi_create_dataview(env, byte_length, arraybuffer, byte_offset, result
5646
5804
  if (!env)
5647
5805
  return 1 /* napi_status.napi_invalid_arg */;
5648
5806
  var envObject = emnapiCtx.envStore.get(env);
5807
+ envObject.checkGCAccess();
5649
5808
  if (envObject.tryCatch.hasCaught())
5650
5809
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5651
5810
  if (!envObject.canCallIntoJs()) {
@@ -5698,6 +5857,7 @@ function node_api_symbol_for(env, utf8description, length, result) {
5698
5857
  if (!env)
5699
5858
  return 1 /* napi_status.napi_invalid_arg */;
5700
5859
  var envObject = emnapiCtx.envStore.get(env);
5860
+ envObject.checkGCAccess();
5701
5861
  if (!result)
5702
5862
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5703
5863
  {{{ from64('length') }}};
@@ -5737,6 +5897,7 @@ function napi_get_boolean(env, value, result) {
5737
5897
  if (!env)
5738
5898
  return 1 /* napi_status.napi_invalid_arg */;
5739
5899
  var envObject = emnapiCtx.envStore.get(env);
5900
+ envObject.checkGCAccess();
5740
5901
  if (!result)
5741
5902
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5742
5903
  {{{ from64('result') }}};
@@ -5749,6 +5910,7 @@ function napi_get_global(env, result) {
5749
5910
  if (!env)
5750
5911
  return 1 /* napi_status.napi_invalid_arg */;
5751
5912
  var envObject = emnapiCtx.envStore.get(env);
5913
+ envObject.checkGCAccess();
5752
5914
  if (!result)
5753
5915
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5754
5916
  {{{ from64('result') }}};
@@ -5761,6 +5923,7 @@ function napi_get_null(env, result) {
5761
5923
  if (!env)
5762
5924
  return 1 /* napi_status.napi_invalid_arg */;
5763
5925
  var envObject = emnapiCtx.envStore.get(env);
5926
+ envObject.checkGCAccess();
5764
5927
  if (!result)
5765
5928
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5766
5929
  {{{ from64('result') }}};
@@ -5773,6 +5936,7 @@ function napi_get_undefined(env, result) {
5773
5936
  if (!env)
5774
5937
  return 1 /* napi_status.napi_invalid_arg */;
5775
5938
  var envObject = emnapiCtx.envStore.get(env);
5939
+ envObject.checkGCAccess();
5776
5940
  if (!result)
5777
5941
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5778
5942
  {{{ from64('result') }}};
@@ -5789,6 +5953,7 @@ function _napi_create_async_work(env, resource, resource_name, execute, complete
5789
5953
  if (!env)
5790
5954
  return 1 /* napi_status.napi_invalid_arg */;
5791
5955
  var envObject = emnapiCtx.envStore.get(env);
5956
+ envObject.checkGCAccess();
5792
5957
  if (!execute)
5793
5958
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5794
5959
  if (!result)
@@ -5812,6 +5977,7 @@ function _napi_delete_async_work(env, work) {
5812
5977
  if (!env)
5813
5978
  return 1 /* napi_status.napi_invalid_arg */;
5814
5979
  var envObject = emnapiCtx.envStore.get(env);
5980
+ envObject.checkGCAccess();
5815
5981
  if (!work)
5816
5982
  return envObject.setLastError(1 /* napi_status.napi_invalid_arg */);
5817
5983
  emnapiAWST.remove(work);
@@ -5935,6 +6101,7 @@ function emnapi_get_module_object(env, result) {
5935
6101
  if (!env)
5936
6102
  return 1 /* napi_status.napi_invalid_arg */;
5937
6103
  var envObject = emnapiCtx.envStore.get(env);
6104
+ envObject.checkGCAccess();
5938
6105
  if (envObject.tryCatch.hasCaught())
5939
6106
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5940
6107
  if (!envObject.canCallIntoJs()) {
@@ -5961,6 +6128,7 @@ function emnapi_get_module_property(env, utf8name, result) {
5961
6128
  if (!env)
5962
6129
  return 1 /* napi_status.napi_invalid_arg */;
5963
6130
  var envObject = emnapiCtx.envStore.get(env);
6131
+ envObject.checkGCAccess();
5964
6132
  if (envObject.tryCatch.hasCaught())
5965
6133
  return envObject.setLastError(10 /* napi_status.napi_pending_exception */);
5966
6134
  if (!envObject.canCallIntoJs()) {
package/include/emnapi.h CHANGED
@@ -1,7 +1,8 @@
1
1
  #ifndef EMNAPI_INCLUDE_EMNAPI_H_
2
2
  #define EMNAPI_INCLUDE_EMNAPI_H_
3
3
 
4
- #include "js_native_api.h"
4
+ #include <stdbool.h>
5
+ #include "js_native_api_types.h"
5
6
  #include "emnapi_common.h"
6
7
 
7
8
  typedef enum {
@@ -523,6 +523,16 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_add_finalizer(napi_env env,
523
523
 
524
524
  #endif // NAPI_VERSION >= 5
525
525
 
526
+ #ifdef NAPI_EXPERIMENTAL
527
+
528
+ NAPI_EXTERN napi_status NAPI_CDECL
529
+ node_api_post_finalizer(napi_env env,
530
+ napi_finalize finalize_cb,
531
+ void* finalize_data,
532
+ void* finalize_hint);
533
+
534
+ #endif // NAPI_EXPERIMENTAL
535
+
526
536
  #if NAPI_VERSION >= 6
527
537
 
528
538
  // BigInt
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "emnapi",
3
- "version": "0.42.0",
3
+ "version": "0.43.0",
4
4
  "description": "Node-API implementation for Emscripten",
5
5
  "main": "index.js",
6
6
  "peerDependencies": {
@@ -1,5 +1,5 @@
1
- #include "emnapi_internal.h"
2
1
  #include "node_api.h"
2
+ #include "emnapi_internal.h"
3
3
 
4
4
  #if NAPI_VERSION >= 8
5
5
 
@@ -21,6 +21,7 @@ napi_async_init(napi_env env,
21
21
  napi_value async_resource_name,
22
22
  napi_async_context* result) {
23
23
  CHECK_ENV(env);
24
+ _emnapi_env_check_gc_access(env);
24
25
  CHECK_ARG(env, async_resource_name);
25
26
  CHECK_ARG(env, result);
26
27
 
@@ -39,6 +40,7 @@ napi_async_init(napi_env env,
39
40
  napi_status napi_async_destroy(napi_env env,
40
41
  napi_async_context async_context) {
41
42
  CHECK_ENV(env);
43
+ _emnapi_env_check_gc_access(env);
42
44
  CHECK_ARG(env, async_context);
43
45
 
44
46
  napi_status status = _emnapi_async_destroy_js(async_context);
package/src/async_work.c CHANGED
@@ -149,6 +149,7 @@ napi_status napi_create_async_work(napi_env env,
149
149
  napi_async_work* result) {
150
150
  #if EMNAPI_HAVE_THREADS
151
151
  CHECK_ENV(env);
152
+ _emnapi_env_check_gc_access(env);
152
153
  CHECK_ARG(env, execute);
153
154
  CHECK_ARG(env, result);
154
155
 
@@ -188,6 +189,7 @@ napi_status napi_create_async_work(napi_env env,
188
189
  napi_status napi_delete_async_work(napi_env env, napi_async_work work) {
189
190
  #if EMNAPI_HAVE_THREADS
190
191
  CHECK_ENV(env);
192
+ _emnapi_env_check_gc_access(env);
191
193
  CHECK_ARG(env, work);
192
194
 
193
195
  async_work_delete(work);
@@ -156,6 +156,9 @@ napi_status _emnapi_node_make_callback(napi_env env,
156
156
  double trigger_async_id,
157
157
  napi_value* result);
158
158
 
159
+ EMNAPI_INTERNAL_EXTERN
160
+ void _emnapi_env_check_gc_access(napi_env env);
161
+
159
162
  #define EMNAPI_ASYNC_RESOURCE_CTOR(env, res, name, ar) \
160
163
  do { \
161
164
  EMNAPI_ASSERT_CALL(napi_create_reference((env), (res), 1, &(ar)->resource_)); \
package/src/node_api.c CHANGED
@@ -1,5 +1,5 @@
1
- #include "emnapi_internal.h"
2
1
  #include "node_api.h"
2
+ #include "emnapi_internal.h"
3
3
 
4
4
  #if EMNAPI_HAVE_THREADS
5
5
  #include "uv.h"
@@ -409,6 +409,7 @@ napi_create_threadsafe_function(napi_env env,
409
409
  napi_threadsafe_function* result) {
410
410
  #if EMNAPI_HAVE_THREADS
411
411
  CHECK_ENV(env);
412
+ _emnapi_env_check_gc_access(env);
412
413
  CHECK_ARG(env, async_resource_name);
413
414
  RETURN_STATUS_IF_FALSE(env, initial_thread_count > 0, napi_invalid_arg);
414
415
  CHECK_ARG(env, result);