@encharm/cws 4.4.0 → 4.5.1

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 (511) hide show
  1. package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
  2. package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
  3. package/dist/bindings/cws_linux_arm64_node115.node +0 -0
  4. package/dist/bindings/cws_linux_arm64_node127.node +0 -0
  5. package/dist/bindings/cws_linux_x64_node108.node +0 -0
  6. package/dist/bindings/cws_linux_x64_node115.node +0 -0
  7. package/dist/bindings/cws_linux_x64_node127.node +0 -0
  8. package/dist/bindings/cws_win32_x64_node108.node +0 -0
  9. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  10. package/dist/bindings/cws_win32_x64_node127.node +0 -0
  11. package/dist/bindings/cws_win32_x64_node83.node +0 -0
  12. package/dist/bindings/cws_win32_x64_node93.node +0 -0
  13. package/package.json +1 -1
  14. package/src/Addon.h +20 -24
  15. package/src/Socket.h +0 -1
  16. package/src/headers/20/acorn_version.h +1 -1
  17. package/src/headers/20/connection_wrap.h +1 -0
  18. package/src/headers/20/crypto/crypto_keys.h +3 -0
  19. package/src/headers/20/crypto/crypto_tls.h +12 -3
  20. package/src/headers/20/crypto/crypto_util.h +3 -2
  21. package/src/headers/20/env_properties.h +3 -1
  22. package/src/headers/20/js_native_api.h +11 -1
  23. package/src/headers/20/js_native_api_v8.h +40 -3
  24. package/src/headers/20/js_native_api_v8_internals.h +6 -0
  25. package/src/headers/20/module_wrap.h +1 -1
  26. package/src/headers/20/node.h +2 -0
  27. package/src/headers/20/node_api.h +8 -7
  28. package/src/headers/20/node_constants.h +3 -0
  29. package/src/headers/20/node_contextify.h +24 -0
  30. package/src/headers/20/node_file-inl.h +32 -0
  31. package/src/headers/20/node_file.h +25 -12
  32. package/src/headers/20/node_options.h +9 -9
  33. package/src/headers/20/node_version.h +1 -1
  34. package/src/headers/20/permission/child_process_permission.h +2 -1
  35. package/src/headers/20/permission/fs_permission.h +11 -9
  36. package/src/headers/20/permission/inspector_permission.h +29 -0
  37. package/src/headers/20/permission/permission.h +4 -1
  38. package/src/headers/20/permission/permission_base.h +6 -2
  39. package/src/headers/20/permission/worker_permission.h +2 -1
  40. package/src/headers/20/undici_version.h +2 -2
  41. package/src/headers/22/acorn_version.h +6 -0
  42. package/src/headers/22/aliased_buffer-inl.h +243 -0
  43. package/src/headers/22/aliased_buffer.h +206 -0
  44. package/src/headers/{18 → 22}/async_wrap-inl.h +8 -6
  45. package/src/headers/{18 → 22}/async_wrap.h +65 -59
  46. package/src/headers/{16 → 22}/base_object-inl.h +57 -117
  47. package/src/headers/{18 → 22}/base_object.h +58 -30
  48. package/src/headers/22/base_object_types.h +74 -0
  49. package/src/headers/22/blob_serializer_deserializer-inl.h +385 -0
  50. package/src/headers/22/blob_serializer_deserializer.h +132 -0
  51. package/src/headers/{16 → 22}/callback_queue.h +1 -0
  52. package/src/headers/{16 → 22}/cares_wrap.h +27 -20
  53. package/src/headers/22/cjs_module_lexer_version.h +6 -0
  54. package/src/headers/22/cleanup_queue-inl.h +62 -0
  55. package/src/headers/22/cleanup_queue.h +85 -0
  56. package/src/headers/22/compile_cache.h +104 -0
  57. package/src/headers/{18 → 22}/crypto/crypto_clienthello.h +1 -1
  58. package/src/headers/{18 → 22}/crypto/crypto_context.h +31 -7
  59. package/src/headers/{18 → 22}/crypto/crypto_keys.h +118 -148
  60. package/src/headers/{18 → 22}/crypto/crypto_tls.h +20 -5
  61. package/src/headers/{18 → 22}/crypto/crypto_util.h +219 -263
  62. package/src/headers/22/crypto/ncrypto.h +752 -0
  63. package/src/headers/{16 → 22}/debug_utils-inl.h +15 -7
  64. package/src/headers/{18 → 22}/debug_utils.h +25 -19
  65. package/src/headers/22/encoding_binding.h +59 -0
  66. package/src/headers/{14 → 22}/env-inl.h +276 -409
  67. package/src/headers/22/env.h +1266 -0
  68. package/src/headers/22/env_properties.h +497 -0
  69. package/src/headers/{18 → 22}/handle_wrap.h +2 -0
  70. package/src/headers/{18 → 22}/histogram.h +88 -48
  71. package/src/headers/{16 → 22}/inspector_agent.h +17 -1
  72. package/src/headers/{16 → 22}/inspector_profiler.h +15 -13
  73. package/src/headers/{18 → 22}/js_native_api.h +78 -30
  74. package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
  75. package/src/headers/{18 → 22}/js_native_api_v8.h +206 -161
  76. package/src/headers/{18 → 22}/js_native_api_v8_internals.h +6 -0
  77. package/src/headers/22/json_parser.h +40 -0
  78. package/src/headers/{16 → 22}/json_utils.h +19 -8
  79. package/src/headers/{18 → 22}/memory_tracker-inl.h +16 -13
  80. package/src/headers/{14 → 22}/memory_tracker.h +13 -8
  81. package/src/headers/{16 → 22}/module_wrap.h +49 -19
  82. package/src/headers/22/ncrypto/ncrypto.h +752 -0
  83. package/src/headers/{18 → 22}/node.h +465 -68
  84. package/src/headers/{18 → 22}/node_api.h +66 -81
  85. package/src/headers/{18 → 22}/node_api_internals.h +8 -4
  86. package/src/headers/{18 → 22}/node_api_types.h +5 -0
  87. package/src/headers/22/node_binding.h +154 -0
  88. package/src/headers/{18 → 22}/node_blob.h +46 -78
  89. package/src/headers/{18 → 22}/node_bob-inl.h +1 -2
  90. package/src/headers/{18 → 22}/node_bob.h +2 -6
  91. package/src/headers/{18 → 22}/node_buffer.h +1 -1
  92. package/src/headers/22/node_builtins.h +220 -0
  93. package/src/headers/{18 → 22}/node_constants.h +3 -5
  94. package/src/headers/22/node_context_data.h +168 -0
  95. package/src/headers/22/node_contextify.h +199 -0
  96. package/src/headers/{16 → 22}/node_crypto.h +1 -2
  97. package/src/headers/22/node_dotenv.h +45 -0
  98. package/src/headers/{18 → 22}/node_errors.h +86 -27
  99. package/src/headers/22/node_exit_code.h +54 -0
  100. package/src/headers/22/node_external_reference.h +249 -0
  101. package/src/headers/{18 → 22}/node_file-inl.h +127 -30
  102. package/src/headers/{16 → 22}/node_file.h +122 -11
  103. package/src/headers/{18 → 22}/node_http2.h +28 -11
  104. package/src/headers/{16 → 22}/node_http2_state.h +34 -25
  105. package/src/headers/{18 → 22}/node_http_common-inl.h +2 -1
  106. package/src/headers/{18 → 22}/node_http_common.h +56 -55
  107. package/src/headers/{16 → 22}/node_i18n.h +5 -18
  108. package/src/headers/{18 → 22}/node_internals.h +121 -59
  109. package/src/headers/{18 → 22}/node_main_instance.h +4 -31
  110. package/src/headers/{18 → 22}/node_messaging.h +27 -10
  111. package/src/headers/{18 → 22}/node_metadata.h +23 -1
  112. package/src/headers/{18 → 22}/node_options-inl.h +24 -11
  113. package/src/headers/{18 → 22}/node_options.h +124 -39
  114. package/src/headers/{18 → 22}/node_perf.h +0 -2
  115. package/src/headers/{18 → 22}/node_perf_common.h +20 -9
  116. package/src/headers/{18 → 22}/node_platform.h +11 -5
  117. package/src/headers/{18 → 22}/node_process.h +26 -14
  118. package/src/headers/22/node_realm-inl.h +145 -0
  119. package/src/headers/22/node_realm.h +184 -0
  120. package/src/headers/{16 → 22}/node_report.h +13 -17
  121. package/src/headers/{16 → 22}/node_revert.h +3 -3
  122. package/src/headers/{16 → 22}/node_root_certs.h +902 -461
  123. package/src/headers/22/node_sea.h +64 -0
  124. package/src/headers/22/node_shadow_realm.h +46 -0
  125. package/src/headers/22/node_snapshot_builder.h +57 -0
  126. package/src/headers/22/node_snapshotable.h +174 -0
  127. package/src/headers/{18 → 22}/node_sockaddr.h +2 -2
  128. package/src/headers/{16 → 22}/node_stat_watcher.h +2 -1
  129. package/src/headers/22/node_threadsafe_cow-inl.h +54 -0
  130. package/src/headers/22/node_threadsafe_cow.h +105 -0
  131. package/src/headers/22/node_union_bytes.h +81 -0
  132. package/src/headers/22/node_url.h +96 -0
  133. package/src/headers/22/node_v8.h +77 -0
  134. package/src/headers/{14 → 22}/node_v8_platform-inl.h +17 -6
  135. package/src/headers/{18 → 22}/node_version.h +20 -8
  136. package/src/headers/22/node_wasi.h +185 -0
  137. package/src/headers/{14 → 22}/node_watchdog.h +2 -0
  138. package/src/headers/{18 → 22}/node_worker.h +7 -2
  139. package/src/headers/22/permission/child_process_permission.h +31 -0
  140. package/src/headers/22/permission/fs_permission.h +167 -0
  141. package/src/headers/22/permission/inspector_permission.h +31 -0
  142. package/src/headers/22/permission/permission.h +99 -0
  143. package/src/headers/22/permission/permission_base.h +60 -0
  144. package/src/headers/22/permission/wasi_permission.h +31 -0
  145. package/src/headers/22/permission/worker_permission.h +31 -0
  146. package/src/headers/{16 → 22}/req_wrap-inl.h +7 -6
  147. package/src/headers/{14 → 22}/spawn_sync.h +3 -3
  148. package/src/headers/{18 → 22}/stream_base-inl.h +0 -135
  149. package/src/headers/{18 → 22}/stream_base.h +35 -16
  150. package/src/headers/{18 → 22}/stream_pipe.h +3 -4
  151. package/src/headers/{16 → 22}/stream_wrap.h +2 -1
  152. package/src/headers/{18 → 22}/string_bytes.h +5 -14
  153. package/src/headers/{14 → 22}/string_decoder-inl.h +0 -6
  154. package/src/headers/{16 → 22}/string_decoder.h +0 -1
  155. package/src/headers/{18 → 22}/tcp_wrap.h +1 -1
  156. package/src/headers/{18 → 22}/threadpoolwork-inl.h +14 -1
  157. package/src/headers/22/timers.h +76 -0
  158. package/src/headers/{18 → 22}/tracing/trace_event.h +7 -5
  159. package/src/headers/{16 → 22}/udp_wrap.h +8 -5
  160. package/src/headers/22/undici_version.h +6 -0
  161. package/src/headers/{18 → 22}/util-inl.h +97 -127
  162. package/src/headers/{18 → 22}/util.h +293 -106
  163. package/src/headers/{18 → 22}/v8-fast-api-calls.h +103 -58
  164. package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
  165. package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
  166. package/dist/bindings/cws_darwin_x64_node83.node +0 -0
  167. package/dist/bindings/cws_darwin_x64_node93.node +0 -0
  168. package/dist/bindings/cws_linux_arm64_node83.node +0 -0
  169. package/dist/bindings/cws_linux_arm64_node93.node +0 -0
  170. package/dist/bindings/cws_linux_x64_node83.node +0 -0
  171. package/dist/bindings/cws_linux_x64_node93.node +0 -0
  172. package/src/headers/14/aliased_buffer.h +0 -263
  173. package/src/headers/14/allocated_buffer-inl.h +0 -110
  174. package/src/headers/14/allocated_buffer.h +0 -73
  175. package/src/headers/14/async_wrap-inl.h +0 -94
  176. package/src/headers/14/async_wrap.h +0 -230
  177. package/src/headers/14/base64.h +0 -183
  178. package/src/headers/14/base_object-inl.h +0 -371
  179. package/src/headers/14/base_object.h +0 -281
  180. package/src/headers/14/callback_queue-inl.h +0 -97
  181. package/src/headers/14/callback_queue.h +0 -78
  182. package/src/headers/14/debug_utils-inl.h +0 -223
  183. package/src/headers/14/debug_utils.h +0 -181
  184. package/src/headers/14/env.h +0 -1388
  185. package/src/headers/14/handle_wrap.h +0 -117
  186. package/src/headers/14/histogram-inl.h +0 -83
  187. package/src/headers/14/histogram.h +0 -98
  188. package/src/headers/14/inspector_agent.h +0 -149
  189. package/src/headers/14/inspector_profiler.h +0 -137
  190. package/src/headers/14/js_native_api.h +0 -544
  191. package/src/headers/14/js_native_api_types.h +0 -143
  192. package/src/headers/14/js_native_api_v8.h +0 -301
  193. package/src/headers/14/js_native_api_v8_internals.h +0 -38
  194. package/src/headers/14/json_utils.h +0 -161
  195. package/src/headers/14/memory_tracker-inl.h +0 -355
  196. package/src/headers/14/module_wrap.h +0 -99
  197. package/src/headers/14/node.h +0 -1032
  198. package/src/headers/14/node_api.h +0 -255
  199. package/src/headers/14/node_api_types.h +0 -44
  200. package/src/headers/14/node_binding.h +0 -99
  201. package/src/headers/14/node_buffer.h +0 -92
  202. package/src/headers/14/node_constants.h +0 -84
  203. package/src/headers/14/node_context_data.h +0 -44
  204. package/src/headers/14/node_contextify.h +0 -161
  205. package/src/headers/14/node_crypto.h +0 -865
  206. package/src/headers/14/node_crypto_bio.h +0 -195
  207. package/src/headers/14/node_crypto_clienthello-inl.h +0 -91
  208. package/src/headers/14/node_crypto_clienthello.h +0 -132
  209. package/src/headers/14/node_crypto_common.h +0 -138
  210. package/src/headers/14/node_crypto_groups.h +0 -415
  211. package/src/headers/14/node_dtrace.h +0 -86
  212. package/src/headers/14/node_errors.h +0 -214
  213. package/src/headers/14/node_file-inl.h +0 -306
  214. package/src/headers/14/node_file.h +0 -417
  215. package/src/headers/14/node_http2.h +0 -1191
  216. package/src/headers/14/node_http2_state.h +0 -149
  217. package/src/headers/14/node_http_common-inl.h +0 -194
  218. package/src/headers/14/node_http_common.h +0 -529
  219. package/src/headers/14/node_i18n.h +0 -144
  220. package/src/headers/14/node_internals.h +0 -405
  221. package/src/headers/14/node_main_instance.h +0 -96
  222. package/src/headers/14/node_mem.h +0 -45
  223. package/src/headers/14/node_messaging.h +0 -303
  224. package/src/headers/14/node_metadata.h +0 -109
  225. package/src/headers/14/node_mutex.h +0 -247
  226. package/src/headers/14/node_native_module.h +0 -101
  227. package/src/headers/14/node_native_module_env.h +0 -66
  228. package/src/headers/14/node_options-inl.h +0 -451
  229. package/src/headers/14/node_options.h +0 -481
  230. package/src/headers/14/node_perf.h +0 -181
  231. package/src/headers/14/node_perf_common.h +0 -97
  232. package/src/headers/14/node_platform.h +0 -189
  233. package/src/headers/14/node_process.h +0 -40
  234. package/src/headers/14/node_report.h +0 -47
  235. package/src/headers/14/node_revert.h +0 -72
  236. package/src/headers/14/node_root_certs.h +0 -3458
  237. package/src/headers/14/node_sockaddr-inl.h +0 -170
  238. package/src/headers/14/node_sockaddr.h +0 -123
  239. package/src/headers/14/node_stat_watcher.h +0 -70
  240. package/src/headers/14/node_union_bytes.h +0 -103
  241. package/src/headers/14/node_url.h +0 -188
  242. package/src/headers/14/node_version.h +0 -98
  243. package/src/headers/14/node_wasi.h +0 -108
  244. package/src/headers/14/node_win32_etw_provider-inl.h +0 -287
  245. package/src/headers/14/node_win32_etw_provider.h +0 -99
  246. package/src/headers/14/node_worker.h +0 -141
  247. package/src/headers/14/pipe_wrap.h +0 -78
  248. package/src/headers/14/req_wrap-inl.h +0 -170
  249. package/src/headers/14/req_wrap.h +0 -77
  250. package/src/headers/14/stream_base-inl.h +0 -275
  251. package/src/headers/14/stream_base.h +0 -434
  252. package/src/headers/14/stream_pipe.h +0 -73
  253. package/src/headers/14/stream_wrap.h +0 -130
  254. package/src/headers/14/string_bytes.h +0 -129
  255. package/src/headers/14/string_decoder.h +0 -50
  256. package/src/headers/14/string_search.h +0 -638
  257. package/src/headers/14/tcp_wrap.h +0 -101
  258. package/src/headers/14/threadpoolwork-inl.h +0 -57
  259. package/src/headers/14/tls_wrap.h +0 -222
  260. package/src/headers/14/tracing/agent.h +0 -195
  261. package/src/headers/14/tracing/trace_event.h +0 -720
  262. package/src/headers/14/tty_wrap.h +0 -64
  263. package/src/headers/14/udp_wrap.h +0 -227
  264. package/src/headers/14/util-inl.h +0 -566
  265. package/src/headers/14/util.h +0 -804
  266. package/src/headers/14/v8abbr.h +0 -124
  267. package/src/headers/16/aliased_buffer.h +0 -315
  268. package/src/headers/16/aliased_struct-inl.h +0 -54
  269. package/src/headers/16/aliased_struct.h +0 -63
  270. package/src/headers/16/allocated_buffer-inl.h +0 -110
  271. package/src/headers/16/allocated_buffer.h +0 -73
  272. package/src/headers/16/async_wrap-inl.h +0 -94
  273. package/src/headers/16/async_wrap.h +0 -246
  274. package/src/headers/16/base64-inl.h +0 -189
  275. package/src/headers/16/base64.h +0 -69
  276. package/src/headers/16/base_object.h +0 -294
  277. package/src/headers/16/connect_wrap.h +0 -26
  278. package/src/headers/16/connection_wrap.h +0 -30
  279. package/src/headers/16/crypto/crypto_aes.h +0 -89
  280. package/src/headers/16/crypto/crypto_bio.h +0 -194
  281. package/src/headers/16/crypto/crypto_cipher.h +0 -286
  282. package/src/headers/16/crypto/crypto_clienthello-inl.h +0 -90
  283. package/src/headers/16/crypto/crypto_clienthello.h +0 -131
  284. package/src/headers/16/crypto/crypto_common.h +0 -187
  285. package/src/headers/16/crypto/crypto_context.h +0 -147
  286. package/src/headers/16/crypto/crypto_dh.h +0 -157
  287. package/src/headers/16/crypto/crypto_dsa.h +0 -76
  288. package/src/headers/16/crypto/crypto_ec.h +0 -169
  289. package/src/headers/16/crypto/crypto_groups.h +0 -415
  290. package/src/headers/16/crypto/crypto_hash.h +0 -89
  291. package/src/headers/16/crypto/crypto_hkdf.h +0 -66
  292. package/src/headers/16/crypto/crypto_hmac.h +0 -94
  293. package/src/headers/16/crypto/crypto_keygen.h +0 -301
  294. package/src/headers/16/crypto/crypto_keys.h +0 -412
  295. package/src/headers/16/crypto/crypto_pbkdf2.h +0 -76
  296. package/src/headers/16/crypto/crypto_random.h +0 -130
  297. package/src/headers/16/crypto/crypto_rsa.h +0 -141
  298. package/src/headers/16/crypto/crypto_scrypt.h +0 -87
  299. package/src/headers/16/crypto/crypto_sig.h +0 -167
  300. package/src/headers/16/crypto/crypto_spkac.h +0 -20
  301. package/src/headers/16/crypto/crypto_timing.h +0 -20
  302. package/src/headers/16/crypto/crypto_tls.h +0 -292
  303. package/src/headers/16/crypto/crypto_util.h +0 -736
  304. package/src/headers/16/crypto/crypto_x509.h +0 -141
  305. package/src/headers/16/debug_utils.h +0 -184
  306. package/src/headers/16/diagnosticfilename-inl.h +0 -33
  307. package/src/headers/16/env-inl.h +0 -1277
  308. package/src/headers/16/env.h +0 -1629
  309. package/src/headers/16/handle_wrap.h +0 -121
  310. package/src/headers/16/histogram-inl.h +0 -88
  311. package/src/headers/16/histogram.h +0 -216
  312. package/src/headers/16/inspector_io.h +0 -78
  313. package/src/headers/16/inspector_socket.h +0 -60
  314. package/src/headers/16/inspector_socket_server.h +0 -110
  315. package/src/headers/16/js_native_api.h +0 -561
  316. package/src/headers/16/js_native_api_types.h +0 -160
  317. package/src/headers/16/js_native_api_v8.h +0 -451
  318. package/src/headers/16/js_native_api_v8_internals.h +0 -39
  319. package/src/headers/16/js_stream.h +0 -52
  320. package/src/headers/16/memory_tracker-inl.h +0 -356
  321. package/src/headers/16/memory_tracker.h +0 -284
  322. package/src/headers/16/node.d +0 -315
  323. package/src/headers/16/node.h +0 -1132
  324. package/src/headers/16/node.stp +0 -146
  325. package/src/headers/16/node_api.h +0 -275
  326. package/src/headers/16/node_api_internals.h +0 -30
  327. package/src/headers/16/node_api_types.h +0 -50
  328. package/src/headers/16/node_binding.h +0 -99
  329. package/src/headers/16/node_blob.h +0 -191
  330. package/src/headers/16/node_bob-inl.h +0 -37
  331. package/src/headers/16/node_bob.h +0 -111
  332. package/src/headers/16/node_buffer.h +0 -92
  333. package/src/headers/16/node_constants.h +0 -84
  334. package/src/headers/16/node_context_data.h +0 -44
  335. package/src/headers/16/node_contextify.h +0 -196
  336. package/src/headers/16/node_dir.h +0 -52
  337. package/src/headers/16/node_dtrace.h +0 -86
  338. package/src/headers/16/node_errors.h +0 -277
  339. package/src/headers/16/node_external_reference.h +0 -129
  340. package/src/headers/16/node_file-inl.h +0 -306
  341. package/src/headers/16/node_http2.h +0 -1140
  342. package/src/headers/16/node_http_common-inl.h +0 -200
  343. package/src/headers/16/node_http_common.h +0 -531
  344. package/src/headers/16/node_internals.h +0 -421
  345. package/src/headers/16/node_main_instance.h +0 -103
  346. package/src/headers/16/node_mem-inl.h +0 -112
  347. package/src/headers/16/node_messaging.h +0 -373
  348. package/src/headers/16/node_metadata.h +0 -122
  349. package/src/headers/16/node_native_module.h +0 -101
  350. package/src/headers/16/node_native_module_env.h +0 -68
  351. package/src/headers/16/node_object_wrap.h +0 -132
  352. package/src/headers/16/node_options-inl.h +0 -477
  353. package/src/headers/16/node_options.h +0 -494
  354. package/src/headers/16/node_perf.h +0 -185
  355. package/src/headers/16/node_perf_common.h +0 -89
  356. package/src/headers/16/node_platform.h +0 -192
  357. package/src/headers/16/node_process.h +0 -43
  358. package/src/headers/16/node_provider.d +0 -80
  359. package/src/headers/16/node_snapshotable.h +0 -137
  360. package/src/headers/16/node_sockaddr-inl.h +0 -266
  361. package/src/headers/16/node_sockaddr.h +0 -405
  362. package/src/headers/16/node_union_bytes.h +0 -103
  363. package/src/headers/16/node_url.h +0 -205
  364. package/src/headers/16/node_v8.h +0 -41
  365. package/src/headers/16/node_v8_platform-inl.h +0 -194
  366. package/src/headers/16/node_version.h +0 -98
  367. package/src/headers/16/node_wasi.h +0 -108
  368. package/src/headers/16/node_watchdog.h +0 -152
  369. package/src/headers/16/node_win32_etw_provider-inl.h +0 -288
  370. package/src/headers/16/node_win32_etw_provider.h +0 -99
  371. package/src/headers/16/node_worker.h +0 -145
  372. package/src/headers/16/req_wrap.h +0 -77
  373. package/src/headers/16/spawn_sync.h +0 -242
  374. package/src/headers/16/stream_base-inl.h +0 -303
  375. package/src/headers/16/stream_base.h +0 -454
  376. package/src/headers/16/stream_pipe.h +0 -73
  377. package/src/headers/16/string_bytes.h +0 -122
  378. package/src/headers/16/string_decoder-inl.h +0 -37
  379. package/src/headers/16/string_search.h +0 -638
  380. package/src/headers/16/tcp_wrap.h +0 -103
  381. package/src/headers/16/threadpoolwork-inl.h +0 -57
  382. package/src/headers/16/timer_wrap.h +0 -84
  383. package/src/headers/16/tracing/agent.h +0 -195
  384. package/src/headers/16/tracing/node_trace_buffer.h +0 -83
  385. package/src/headers/16/tracing/node_trace_writer.h +0 -75
  386. package/src/headers/16/tracing/trace_event.h +0 -720
  387. package/src/headers/16/tracing/trace_event_common.h +0 -1109
  388. package/src/headers/16/tracing/traced_value.h +0 -70
  389. package/src/headers/16/tty_wrap.h +0 -66
  390. package/src/headers/16/util-inl.h +0 -575
  391. package/src/headers/16/util.h +0 -824
  392. package/src/headers/16/v8abbr.h +0 -123
  393. package/src/headers/16/v8ustack.d +0 -695
  394. package/src/headers/18/aliased_buffer.h +0 -315
  395. package/src/headers/18/aliased_struct-inl.h +0 -54
  396. package/src/headers/18/aliased_struct.h +0 -63
  397. package/src/headers/18/base64-inl.h +0 -189
  398. package/src/headers/18/base64.h +0 -69
  399. package/src/headers/18/base_object-inl.h +0 -374
  400. package/src/headers/18/callback_queue-inl.h +0 -97
  401. package/src/headers/18/callback_queue.h +0 -78
  402. package/src/headers/18/cares_wrap.h +0 -523
  403. package/src/headers/18/connect_wrap.h +0 -26
  404. package/src/headers/18/connection_wrap.h +0 -30
  405. package/src/headers/18/crypto/crypto_aes.h +0 -89
  406. package/src/headers/18/crypto/crypto_bio.h +0 -194
  407. package/src/headers/18/crypto/crypto_cipher.h +0 -291
  408. package/src/headers/18/crypto/crypto_clienthello-inl.h +0 -90
  409. package/src/headers/18/crypto/crypto_common.h +0 -151
  410. package/src/headers/18/crypto/crypto_dh.h +0 -156
  411. package/src/headers/18/crypto/crypto_dsa.h +0 -77
  412. package/src/headers/18/crypto/crypto_ec.h +0 -170
  413. package/src/headers/18/crypto/crypto_groups.h +0 -415
  414. package/src/headers/18/crypto/crypto_hash.h +0 -89
  415. package/src/headers/18/crypto/crypto_hkdf.h +0 -65
  416. package/src/headers/18/crypto/crypto_hmac.h +0 -94
  417. package/src/headers/18/crypto/crypto_keygen.h +0 -305
  418. package/src/headers/18/crypto/crypto_pbkdf2.h +0 -76
  419. package/src/headers/18/crypto/crypto_random.h +0 -130
  420. package/src/headers/18/crypto/crypto_rsa.h +0 -141
  421. package/src/headers/18/crypto/crypto_scrypt.h +0 -87
  422. package/src/headers/18/crypto/crypto_sig.h +0 -168
  423. package/src/headers/18/crypto/crypto_spkac.h +0 -21
  424. package/src/headers/18/crypto/crypto_timing.h +0 -20
  425. package/src/headers/18/crypto/crypto_x509.h +0 -143
  426. package/src/headers/18/debug_utils-inl.h +0 -223
  427. package/src/headers/18/diagnosticfilename-inl.h +0 -33
  428. package/src/headers/18/env-inl.h +0 -1308
  429. package/src/headers/18/env.h +0 -1667
  430. package/src/headers/18/inspector_agent.h +0 -144
  431. package/src/headers/18/inspector_io.h +0 -78
  432. package/src/headers/18/inspector_profiler.h +0 -149
  433. package/src/headers/18/inspector_socket.h +0 -60
  434. package/src/headers/18/inspector_socket_server.h +0 -110
  435. package/src/headers/18/js_stream.h +0 -52
  436. package/src/headers/18/json_utils.h +0 -161
  437. package/src/headers/18/memory_tracker.h +0 -284
  438. package/src/headers/18/module_wrap.h +0 -116
  439. package/src/headers/18/node_binding.h +0 -99
  440. package/src/headers/18/node_context_data.h +0 -44
  441. package/src/headers/18/node_contextify.h +0 -196
  442. package/src/headers/18/node_crypto.h +0 -57
  443. package/src/headers/18/node_dir.h +0 -52
  444. package/src/headers/18/node_dtrace.h +0 -86
  445. package/src/headers/18/node_external_reference.h +0 -145
  446. package/src/headers/18/node_file.h +0 -426
  447. package/src/headers/18/node_http2_state.h +0 -149
  448. package/src/headers/18/node_i18n.h +0 -145
  449. package/src/headers/18/node_mem-inl.h +0 -112
  450. package/src/headers/18/node_mem.h +0 -45
  451. package/src/headers/18/node_mutex.h +0 -323
  452. package/src/headers/18/node_native_module.h +0 -109
  453. package/src/headers/18/node_native_module_env.h +0 -71
  454. package/src/headers/18/node_object_wrap.h +0 -132
  455. package/src/headers/18/node_process-inl.h +0 -26
  456. package/src/headers/18/node_report.h +0 -47
  457. package/src/headers/18/node_revert.h +0 -82
  458. package/src/headers/18/node_root_certs.h +0 -3246
  459. package/src/headers/18/node_snapshot_builder.h +0 -43
  460. package/src/headers/18/node_snapshotable.h +0 -130
  461. package/src/headers/18/node_stat_watcher.h +0 -72
  462. package/src/headers/18/node_union_bytes.h +0 -103
  463. package/src/headers/18/node_url.h +0 -205
  464. package/src/headers/18/node_v8.h +0 -41
  465. package/src/headers/18/node_v8_platform-inl.h +0 -194
  466. package/src/headers/18/node_wasi.h +0 -108
  467. package/src/headers/18/node_watchdog.h +0 -152
  468. package/src/headers/18/node_win32_etw_provider-inl.h +0 -288
  469. package/src/headers/18/node_win32_etw_provider.h +0 -99
  470. package/src/headers/18/pipe_wrap.h +0 -80
  471. package/src/headers/18/req_wrap-inl.h +0 -170
  472. package/src/headers/18/spawn_sync.h +0 -242
  473. package/src/headers/18/stream_wrap.h +0 -133
  474. package/src/headers/18/string_decoder-inl.h +0 -37
  475. package/src/headers/18/string_decoder.h +0 -50
  476. package/src/headers/18/string_search.h +0 -638
  477. package/src/headers/18/tracing/node_trace_buffer.h +0 -83
  478. package/src/headers/18/tracing/node_trace_writer.h +0 -75
  479. package/src/headers/18/tracing/trace_event_common.h +0 -1109
  480. package/src/headers/18/tracing/traced_value.h +0 -70
  481. package/src/headers/18/udp_wrap.h +0 -227
  482. package/src/headers/18/v8abbr.h +0 -123
  483. /package/src/headers/{14 → 20}/tracing/node_trace_buffer.h +0 -0
  484. /package/src/headers/{14 → 20}/tracing/node_trace_writer.h +0 -0
  485. /package/src/headers/{14 → 20}/tracing/traced_value.h +0 -0
  486. /package/src/headers/{14 → 22}/aliased_struct-inl.h +0 -0
  487. /package/src/headers/{14 → 22}/aliased_struct.h +0 -0
  488. /package/src/headers/{16 → 22}/callback_queue-inl.h +0 -0
  489. /package/src/headers/{14 → 22}/connect_wrap.h +0 -0
  490. /package/src/headers/{14 → 22}/connection_wrap.h +0 -0
  491. /package/src/headers/{14 → 22}/diagnosticfilename-inl.h +0 -0
  492. /package/src/headers/{18 → 22}/histogram-inl.h +0 -0
  493. /package/src/headers/{14 → 22}/inspector_io.h +0 -0
  494. /package/src/headers/{14 → 22}/inspector_socket.h +0 -0
  495. /package/src/headers/{14 → 22}/inspector_socket_server.h +0 -0
  496. /package/src/headers/{14 → 22}/js_stream.h +0 -0
  497. /package/src/headers/{14 → 22}/node_dir.h +0 -0
  498. /package/src/headers/{14 → 22}/node_mem-inl.h +0 -0
  499. /package/src/headers/{16 → 22}/node_mem.h +0 -0
  500. /package/src/headers/{16 → 22}/node_mutex.h +0 -0
  501. /package/src/headers/{14 → 22}/node_object_wrap.h +0 -0
  502. /package/src/headers/{16 → 22}/node_process-inl.h +0 -0
  503. /package/src/headers/{18 → 22}/node_sockaddr-inl.h +0 -0
  504. /package/src/headers/{18 → 22}/node_wasm_web_api.h +0 -0
  505. /package/src/headers/{16 → 22}/pipe_wrap.h +0 -0
  506. /package/src/headers/{18 → 22}/req_wrap.h +0 -0
  507. /package/src/headers/{18 → 22}/timer_wrap-inl.h +0 -0
  508. /package/src/headers/{18 → 22}/timer_wrap.h +0 -0
  509. /package/src/headers/{18 → 22}/tracing/agent.h +0 -0
  510. /package/src/headers/{14 → 22}/tracing/trace_event_common.h +0 -0
  511. /package/src/headers/{18 → 22}/tty_wrap.h +0 -0
@@ -1,22 +1,21 @@
1
1
  #ifndef SRC_JS_NATIVE_API_V8_H_
2
2
  #define SRC_JS_NATIVE_API_V8_H_
3
3
 
4
- // This file needs to be compatible with C compilers.
5
- #include <string.h> // NOLINT(modernize-deprecated-headers)
6
4
  #include "js_native_api_types.h"
7
5
  #include "js_native_api_v8_internals.h"
8
6
 
9
- static napi_status napi_clear_last_error(napi_env env);
7
+ inline napi_status napi_clear_last_error(node_api_basic_env env);
10
8
 
11
9
  namespace v8impl {
12
10
 
11
+ // Base class to track references and finalizers in a doubly linked list.
13
12
  class RefTracker {
14
13
  public:
15
- RefTracker() {}
16
- virtual ~RefTracker() {}
17
- virtual void Finalize(bool isEnvTeardown) {}
14
+ using RefList = RefTracker;
18
15
 
19
- typedef RefTracker RefList;
16
+ RefTracker() = default;
17
+ virtual ~RefTracker() = default;
18
+ virtual void Finalize() {}
20
19
 
21
20
  inline void Link(RefList* list) {
22
21
  prev_ = list;
@@ -40,7 +39,7 @@ class RefTracker {
40
39
 
41
40
  static void FinalizeAll(RefList* list) {
42
41
  while (list->next_ != nullptr) {
43
- list->next_->Finalize(true);
42
+ list->next_->Finalize();
44
43
  }
45
44
  }
46
45
 
@@ -52,14 +51,13 @@ class RefTracker {
52
51
  } // end of namespace v8impl
53
52
 
54
53
  struct napi_env__ {
55
- explicit napi_env__(v8::Local<v8::Context> context)
56
- : isolate(context->GetIsolate()), context_persistent(isolate, context) {
57
- CHECK_EQ(isolate, context->GetIsolate());
54
+ explicit napi_env__(v8::Local<v8::Context> context,
55
+ int32_t module_api_version)
56
+ : isolate(context->GetIsolate()),
57
+ context_persistent(isolate, context),
58
+ module_api_version(module_api_version) {
58
59
  napi_clear_last_error(this);
59
60
  }
60
- virtual ~napi_env__() { FinalizeAll(); }
61
- v8::Isolate* const isolate; // Shortcut for context()->GetIsolate()
62
- v8impl::Persistent<v8::Context> context_persistent;
63
61
 
64
62
  inline v8::Local<v8::Context> context() const {
65
63
  return v8impl::PersistentToLocal::Strong(context_persistent);
@@ -67,19 +65,26 @@ struct napi_env__ {
67
65
 
68
66
  inline void Ref() { refs++; }
69
67
  inline void Unref() {
70
- if (--refs == 0) delete this;
68
+ if (--refs == 0) DeleteMe();
71
69
  }
72
70
 
73
71
  virtual bool can_call_into_js() const { return true; }
74
- virtual v8::Maybe<bool> mark_arraybuffer_as_untransferable(
75
- v8::Local<v8::ArrayBuffer> ab) const {
76
- return v8::Just(true);
77
- }
78
72
 
79
73
  static inline void HandleThrow(napi_env env, v8::Local<v8::Value> value) {
74
+ if (env->terminatedOrTerminating()) {
75
+ return;
76
+ }
80
77
  env->isolate->ThrowException(value);
81
78
  }
82
79
 
80
+ // i.e. whether v8 exited or is about to exit
81
+ inline bool terminatedOrTerminating() {
82
+ return this->isolate->IsExecutionTerminating() || !can_call_into_js();
83
+ }
84
+
85
+ // v8 uses a special exception to indicate termination, the
86
+ // `handle_exception` callback should identify such case using
87
+ // terminatedOrTerminating() before actually handle the exception
83
88
  template <typename T, typename U = decltype(HandleThrow)>
84
89
  inline void CallIntoModule(T&& call, U&& handle_exception = HandleThrow) {
85
90
  int open_handle_scopes_before = open_handle_scopes;
@@ -94,14 +99,26 @@ struct napi_env__ {
94
99
  }
95
100
  }
96
101
 
97
- // This should be overridden to schedule the finalization to a properiate
98
- // timing, like next tick of the event loop.
99
- virtual void CallFinalizer(napi_finalize cb, void* data, void* hint) {
100
- v8::HandleScope handle_scope(isolate);
101
- CallIntoModule([&](napi_env env) { cb(env, data, hint); });
102
+ virtual void CallFinalizer(napi_finalize cb, void* data, void* hint) = 0;
103
+
104
+ // Invoke finalizer from V8 garbage collector.
105
+ void InvokeFinalizerFromGC(v8impl::RefTracker* finalizer);
106
+
107
+ // Enqueue the finalizer to the napi_env's own queue of the second pass
108
+ // weak callback.
109
+ // Implementation should drain the queue at the time it is safe to call
110
+ // into JavaScript.
111
+ virtual void EnqueueFinalizer(v8impl::RefTracker* finalizer) {
112
+ pending_finalizers.emplace(finalizer);
113
+ }
114
+
115
+ // Remove the finalizer from the scheduled second pass weak callback queue.
116
+ // The finalizer can be deleted after this call.
117
+ virtual void DequeueFinalizer(v8impl::RefTracker* finalizer) {
118
+ pending_finalizers.erase(finalizer);
102
119
  }
103
120
 
104
- void FinalizeAll() {
121
+ virtual void DeleteMe() {
105
122
  // First we must finalize those references that have `napi_finalizer`
106
123
  // callbacks. The reason is that addons might store other references which
107
124
  // they delete during their `napi_finalizer` callbacks. If we deleted such
@@ -109,8 +126,25 @@ struct napi_env__ {
109
126
  // `napi_finalizer` deleted them subsequently.
110
127
  v8impl::RefTracker::FinalizeAll(&finalizing_reflist);
111
128
  v8impl::RefTracker::FinalizeAll(&reflist);
129
+ delete this;
112
130
  }
113
131
 
132
+ void CheckGCAccess() {
133
+ if (module_api_version == NAPI_VERSION_EXPERIMENTAL && in_gc_finalizer) {
134
+ v8impl::OnFatalError(
135
+ nullptr,
136
+ "Finalizer is calling a function that may affect GC state.\n"
137
+ "The finalizers are run directly from GC and must not affect GC "
138
+ "state.\n"
139
+ "Use `node_api_post_finalizer` from inside of the finalizer to work "
140
+ "around this issue.\n"
141
+ "It schedules the call as a new task in the event loop.");
142
+ }
143
+ }
144
+
145
+ v8::Isolate* const isolate; // Shortcut for context()->GetIsolate()
146
+ v8impl::Persistent<v8::Context> context_persistent;
147
+
114
148
  v8impl::Persistent<v8::Value> last_exception;
115
149
 
116
150
  // We store references in two different lists, depending on whether they have
@@ -118,54 +152,36 @@ struct napi_env__ {
118
152
  // have such a callback. See `~napi_env__()` above for details.
119
153
  v8impl::RefTracker::RefList reflist;
120
154
  v8impl::RefTracker::RefList finalizing_reflist;
155
+ // The invocation order of the finalizers is not determined.
156
+ std::unordered_set<v8impl::RefTracker*> pending_finalizers;
121
157
  napi_extended_error_info last_error;
122
158
  int open_handle_scopes = 0;
123
159
  int open_callback_scopes = 0;
124
160
  int refs = 1;
125
161
  void* instance_data = nullptr;
126
- };
127
-
128
- // This class is used to keep a napi_env live in a way that
129
- // is exception safe versus calling Ref/Unref directly
130
- class EnvRefHolder {
131
- public:
132
- explicit EnvRefHolder(napi_env env) : _env(env) { _env->Ref(); }
133
-
134
- explicit EnvRefHolder(const EnvRefHolder& other) : _env(other.env()) {
135
- _env->Ref();
136
- }
137
-
138
- EnvRefHolder(EnvRefHolder&& other) {
139
- _env = other._env;
140
- other._env = nullptr;
141
- }
162
+ int32_t module_api_version = NODE_API_DEFAULT_MODULE_API_VERSION;
163
+ bool in_gc_finalizer = false;
142
164
 
143
- ~EnvRefHolder() {
144
- if (_env != nullptr) {
145
- _env->Unref();
146
- }
147
- }
148
-
149
- napi_env env(void) const { return _env; }
150
-
151
- private:
152
- napi_env _env;
165
+ protected:
166
+ // Should not be deleted directly. Delete with `napi_env__::DeleteMe()`
167
+ // instead.
168
+ virtual ~napi_env__() = default;
153
169
  };
154
170
 
155
- static inline napi_status napi_clear_last_error(napi_env env) {
171
+ inline napi_status napi_clear_last_error(node_api_basic_env basic_env) {
172
+ napi_env env = const_cast<napi_env>(basic_env);
156
173
  env->last_error.error_code = napi_ok;
157
-
158
- // TODO(boingoing): Should this be a callback?
159
174
  env->last_error.engine_error_code = 0;
160
175
  env->last_error.engine_reserved = nullptr;
161
176
  env->last_error.error_message = nullptr;
162
177
  return napi_ok;
163
178
  }
164
179
 
165
- static inline napi_status napi_set_last_error(napi_env env,
166
- napi_status error_code,
167
- uint32_t engine_error_code = 0,
168
- void* engine_reserved = nullptr) {
180
+ inline napi_status napi_set_last_error(node_api_basic_env basic_env,
181
+ napi_status error_code,
182
+ uint32_t engine_error_code = 0,
183
+ void* engine_reserved = nullptr) {
184
+ napi_env env = const_cast<napi_env>(basic_env);
169
185
  env->last_error.error_code = error_code;
170
186
  env->last_error.engine_error_code = engine_error_code;
171
187
  env->last_error.engine_reserved = engine_reserved;
@@ -194,6 +210,12 @@ static inline napi_status napi_set_last_error(napi_env env,
194
210
  } \
195
211
  } while (0)
196
212
 
213
+ #define CHECK_ENV_NOT_IN_GC(env) \
214
+ do { \
215
+ CHECK_ENV((env)); \
216
+ (env)->CheckGCAccess(); \
217
+ } while (0)
218
+
197
219
  #define CHECK_ARG(env, arg) \
198
220
  RETURN_STATUS_IF_FALSE((env), ((arg) != nullptr), napi_invalid_arg)
199
221
 
@@ -209,11 +231,14 @@ static inline napi_status napi_set_last_error(napi_env env,
209
231
 
210
232
  // NAPI_PREAMBLE is not wrapped in do..while: try_catch must have function scope
211
233
  #define NAPI_PREAMBLE(env) \
212
- CHECK_ENV((env)); \
234
+ CHECK_ENV_NOT_IN_GC((env)); \
213
235
  RETURN_STATUS_IF_FALSE( \
214
- (env), \
215
- (env)->last_exception.IsEmpty() && (env)->can_call_into_js(), \
216
- napi_pending_exception); \
236
+ (env), (env)->last_exception.IsEmpty(), napi_pending_exception); \
237
+ RETURN_STATUS_IF_FALSE((env), \
238
+ (env)->can_call_into_js(), \
239
+ (env->module_api_version == NAPI_VERSION_EXPERIMENTAL \
240
+ ? napi_cannot_run_js \
241
+ : napi_pending_exception)); \
217
242
  napi_clear_last_error((env)); \
218
243
  v8impl::TryCatch try_catch((env))
219
244
 
@@ -264,17 +289,15 @@ static inline napi_status napi_set_last_error(napi_env env,
264
289
  } \
265
290
  } while (0)
266
291
 
267
- #define RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, condition, status) \
268
- do { \
269
- if (!(condition)) { \
270
- return napi_set_last_error( \
271
- (env), try_catch.HasCaught() ? napi_pending_exception : (status)); \
272
- } \
273
- } while (0)
274
-
275
292
  #define CHECK_MAYBE_EMPTY_WITH_PREAMBLE(env, maybe, status) \
276
293
  RETURN_STATUS_IF_FALSE_WITH_PREAMBLE((env), !((maybe).IsEmpty()), (status))
277
294
 
295
+ #define STATUS_CALL(call) \
296
+ do { \
297
+ napi_status status = (call); \
298
+ if (status != napi_ok) return status; \
299
+ } while (0)
300
+
278
301
  namespace v8impl {
279
302
 
280
303
  //=== Conversion between V8 Handles and napi_value ========================
@@ -297,48 +320,27 @@ inline v8::Local<v8::Value> V8LocalValueFromJsValue(napi_value v) {
297
320
  // Adapter for napi_finalize callbacks.
298
321
  class Finalizer {
299
322
  public:
300
- // Some Finalizers are run during shutdown when the napi_env is destroyed,
301
- // and some need to keep an explicit reference to the napi_env because they
302
- // are run independently.
303
- enum EnvReferenceMode { kNoEnvReference, kKeepEnvReference };
304
-
305
- protected:
306
323
  Finalizer(napi_env env,
307
324
  napi_finalize finalize_callback,
308
325
  void* finalize_data,
309
- void* finalize_hint,
310
- EnvReferenceMode refmode = kNoEnvReference)
311
- : _env(env),
312
- _finalize_callback(finalize_callback),
313
- _finalize_data(finalize_data),
314
- _finalize_hint(finalize_hint),
315
- _has_env_reference(refmode == kKeepEnvReference) {
316
- if (_has_env_reference) _env->Ref();
317
- }
326
+ void* finalize_hint)
327
+ : env_(env),
328
+ finalize_callback_(finalize_callback),
329
+ finalize_data_(finalize_data),
330
+ finalize_hint_(finalize_hint) {}
318
331
 
319
- ~Finalizer() {
320
- if (_has_env_reference) _env->Unref();
321
- }
322
-
323
- public:
324
- static Finalizer* New(napi_env env,
325
- napi_finalize finalize_callback = nullptr,
326
- void* finalize_data = nullptr,
327
- void* finalize_hint = nullptr,
328
- EnvReferenceMode refmode = kNoEnvReference) {
329
- return new Finalizer(
330
- env, finalize_callback, finalize_data, finalize_hint, refmode);
331
- }
332
+ napi_env env() { return env_; }
333
+ void* data() { return finalize_data_; }
332
334
 
333
- static void Delete(Finalizer* finalizer) { delete finalizer; }
335
+ void ResetEnv();
336
+ void ResetFinalizer();
337
+ void CallFinalizer();
334
338
 
335
- protected:
336
- napi_env _env;
337
- napi_finalize _finalize_callback;
338
- void* _finalize_data;
339
- void* _finalize_hint;
340
- bool _finalize_ran = false;
341
- bool _has_env_reference = false;
339
+ private:
340
+ napi_env env_;
341
+ napi_finalize finalize_callback_;
342
+ void* finalize_data_;
343
+ void* finalize_hint_;
342
344
  };
343
345
 
344
346
  class TryCatch : public v8::TryCatch {
@@ -355,86 +357,129 @@ class TryCatch : public v8::TryCatch {
355
357
  napi_env _env;
356
358
  };
357
359
 
358
- // Wrapper around v8impl::Persistent that implements reference counting.
359
- class RefBase : protected Finalizer, RefTracker {
360
- protected:
361
- RefBase(napi_env env,
362
- uint32_t initial_refcount,
363
- bool delete_self,
364
- napi_finalize finalize_callback,
365
- void* finalize_data,
366
- void* finalize_hint);
367
-
360
+ // Wrapper around Finalizer that can be tracked.
361
+ class TrackedFinalizer final : public RefTracker {
368
362
  public:
369
- static RefBase* New(napi_env env,
370
- uint32_t initial_refcount,
371
- bool delete_self,
372
- napi_finalize finalize_callback,
373
- void* finalize_data,
374
- void* finalize_hint);
363
+ static TrackedFinalizer* New(napi_env env,
364
+ napi_finalize finalize_callback,
365
+ void* finalize_data,
366
+ void* finalize_hint);
367
+ ~TrackedFinalizer() override;
375
368
 
376
- static inline void Delete(RefBase* reference);
377
-
378
- virtual ~RefBase();
379
- void* Data();
380
- uint32_t Ref();
381
- uint32_t Unref();
382
- uint32_t RefCount();
369
+ void* data() { return finalizer_.data(); }
383
370
 
384
- protected:
385
- void Finalize(bool is_env_teardown = false) override;
371
+ private:
372
+ TrackedFinalizer(napi_env env,
373
+ napi_finalize finalize_callback,
374
+ void* finalize_data,
375
+ void* finalize_hint);
376
+ void Finalize() override;
386
377
 
387
378
  private:
388
- uint32_t _refcount;
389
- bool _delete_self;
379
+ Finalizer finalizer_;
390
380
  };
391
381
 
392
- class Reference : public RefBase {
393
- using SecondPassCallParameterRef = Reference*;
394
-
395
- protected:
396
- template <typename... Args>
397
- Reference(napi_env env, v8::Local<v8::Value> value, Args&&... args);
382
+ // Ownership of a reference.
383
+ enum class ReferenceOwnership : uint8_t {
384
+ // The reference is owned by the runtime. No userland call is needed to
385
+ // destruct the reference.
386
+ kRuntime,
387
+ // The reference is owned by the userland. User code is responsible to delete
388
+ // the reference with appropriate node-api calls.
389
+ kUserland,
390
+ };
398
391
 
392
+ // Wrapper around v8impl::Persistent.
393
+ class Reference : public RefTracker {
399
394
  public:
400
395
  static Reference* New(napi_env env,
401
396
  v8::Local<v8::Value> value,
402
397
  uint32_t initial_refcount,
403
- bool delete_self,
404
- napi_finalize finalize_callback = nullptr,
405
- void* finalize_data = nullptr,
406
- void* finalize_hint = nullptr);
398
+ ReferenceOwnership ownership);
399
+ ~Reference() override;
407
400
 
408
- virtual ~Reference();
409
401
  uint32_t Ref();
410
402
  uint32_t Unref();
411
- v8::Local<v8::Value> Get();
403
+ v8::Local<v8::Value> Get(napi_env env);
404
+
405
+ virtual void ResetFinalizer() {}
406
+ virtual void* Data() { return nullptr; }
407
+
408
+ uint32_t refcount() const { return refcount_; }
409
+ ReferenceOwnership ownership() { return ownership_; }
412
410
 
413
411
  protected:
414
- void Finalize(bool is_env_teardown = false) override;
412
+ Reference(napi_env env,
413
+ v8::Local<v8::Value> value,
414
+ uint32_t initial_refcount,
415
+ ReferenceOwnership ownership);
416
+ virtual void CallUserFinalizer() {}
417
+ virtual void InvokeFinalizerFromGC();
415
418
 
416
419
  private:
417
- void ClearWeak();
420
+ static void WeakCallback(const v8::WeakCallbackInfo<Reference>& data);
418
421
  void SetWeak();
422
+ void Finalize() override;
423
+
424
+ private:
425
+ v8impl::Persistent<v8::Value> persistent_;
426
+ uint32_t refcount_;
427
+ ReferenceOwnership ownership_;
428
+ bool can_be_weak_;
429
+ };
419
430
 
420
- static void FinalizeCallback(
421
- const v8::WeakCallbackInfo<SecondPassCallParameterRef>& data);
422
- static void SecondPassCallback(
423
- const v8::WeakCallbackInfo<SecondPassCallParameterRef>& data);
431
+ // Reference that can store additional data.
432
+ class ReferenceWithData final : public Reference {
433
+ public:
434
+ static ReferenceWithData* New(napi_env env,
435
+ v8::Local<v8::Value> value,
436
+ uint32_t initial_refcount,
437
+ ReferenceOwnership ownership,
438
+ void* data);
424
439
 
425
- v8impl::Persistent<v8::Value> _persistent;
426
- SecondPassCallParameterRef* _secondPassParameter;
427
- bool _secondPassScheduled;
440
+ void* Data() override { return data_; }
428
441
 
429
- FRIEND_TEST(JsNativeApiV8Test, Reference);
442
+ private:
443
+ ReferenceWithData(napi_env env,
444
+ v8::Local<v8::Value> value,
445
+ uint32_t initial_refcount,
446
+ ReferenceOwnership ownership,
447
+ void* data);
448
+
449
+ private:
450
+ void* data_;
430
451
  };
431
452
 
432
- } // end of namespace v8impl
453
+ // Reference that has a user finalizer callback.
454
+ class ReferenceWithFinalizer final : public Reference {
455
+ public:
456
+ static ReferenceWithFinalizer* New(napi_env env,
457
+ v8::Local<v8::Value> value,
458
+ uint32_t initial_refcount,
459
+ ReferenceOwnership ownership,
460
+ napi_finalize finalize_callback,
461
+ void* finalize_data,
462
+ void* finalize_hint);
463
+ ~ReferenceWithFinalizer() override;
464
+
465
+ void ResetFinalizer() override { finalizer_.ResetFinalizer(); }
466
+ void* Data() override { return finalizer_.data(); }
433
467
 
434
- #define STATUS_CALL(call) \
435
- do { \
436
- napi_status status = (call); \
437
- if (status != napi_ok) return status; \
438
- } while (0)
468
+ private:
469
+ ReferenceWithFinalizer(napi_env env,
470
+ v8::Local<v8::Value> value,
471
+ uint32_t initial_refcount,
472
+ ReferenceOwnership ownership,
473
+ napi_finalize finalize_callback,
474
+ void* finalize_data,
475
+ void* finalize_hint);
476
+ void CallUserFinalizer() override;
477
+ void InvokeFinalizerFromGC() override;
478
+
479
+ private:
480
+ Finalizer finalizer_;
481
+ };
482
+
483
+ } // end of namespace v8impl
439
484
 
440
485
  #endif // SRC_JS_NATIVE_API_V8_H_
@@ -17,6 +17,7 @@
17
17
 
18
18
  #include "env.h"
19
19
  #include "gtest/gtest_prod.h"
20
+ #include "node_errors.h"
20
21
  #include "node_internals.h"
21
22
 
22
23
  #define NAPI_ARRAYSIZE(array) node::arraysize((array))
@@ -34,6 +35,11 @@ using Persistent = v8::Global<T>;
34
35
 
35
36
  using PersistentToLocal = node::PersistentToLocal;
36
37
 
38
+ [[noreturn]] inline void OnFatalError(const char* location,
39
+ const char* message) {
40
+ node::OnFatalError(location, message);
41
+ }
42
+
37
43
  } // end of namespace v8impl
38
44
 
39
45
  #endif // SRC_JS_NATIVE_API_V8_INTERNALS_H_
@@ -0,0 +1,40 @@
1
+ #ifndef SRC_JSON_PARSER_H_
2
+ #define SRC_JSON_PARSER_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include <memory>
7
+ #include <optional>
8
+ #include <string>
9
+ #include <unordered_map>
10
+ #include "util.h"
11
+ #include "v8.h"
12
+
13
+ namespace node {
14
+ // This is intended to be used to get some top-level fields out of a JSON
15
+ // without having to spin up a full Node.js environment that unnecessarily
16
+ // complicates things.
17
+ class JSONParser {
18
+ public:
19
+ using StringDict = std::unordered_map<std::string, std::string>;
20
+ JSONParser();
21
+ ~JSONParser() = default;
22
+ bool Parse(const std::string& content);
23
+ std::optional<std::string> GetTopLevelStringField(std::string_view field);
24
+ std::optional<bool> GetTopLevelBoolField(std::string_view field);
25
+ std::optional<StringDict> GetTopLevelStringDict(std::string_view field);
26
+
27
+ private:
28
+ // We might want a lighter-weight JSON parser for this use case. But for now
29
+ // using V8 is good enough.
30
+ RAIIIsolateWithoutEntering isolate_;
31
+
32
+ v8::Global<v8::Context> context_;
33
+ v8::Global<v8::Object> content_;
34
+ bool parsed_ = false;
35
+ };
36
+ } // namespace node
37
+
38
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
39
+
40
+ #endif // SRC_JSON_PARSER_H_
@@ -4,13 +4,21 @@
4
4
  #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
5
 
6
6
  #include <iomanip>
7
- #include <ostream>
8
7
  #include <limits>
8
+ #include <ostream>
9
9
  #include <string>
10
+ #include <string_view>
10
11
 
11
12
  namespace node {
12
13
 
13
- std::string EscapeJsonChars(const std::string& str);
14
+ constexpr bool NeedsJsonEscape(std::string_view str) {
15
+ for (const char c : str) {
16
+ if (c == '\\' || c == '"' || c < 0x20) return true;
17
+ }
18
+ return false;
19
+ }
20
+
21
+ std::string EscapeJsonChars(std::string_view str);
14
22
  std::string Reindent(const std::string& str, int indentation);
15
23
 
16
24
  // JSON compiler definitions.
@@ -128,24 +136,27 @@ class JSONWriter {
128
136
  typename test_for_number = typename std::
129
137
  enable_if<std::numeric_limits<T>::is_specialized, bool>::type>
130
138
  inline void write_value(T number) {
131
- if (std::is_same<T, bool>::value)
139
+ if constexpr (std::is_same<T, bool>::value)
132
140
  out_ << (number ? "true" : "false");
133
141
  else
134
142
  out_ << number;
135
143
  }
136
144
 
137
145
  inline void write_value(Null null) { out_ << "null"; }
138
- inline void write_value(const char* str) { write_string(str); }
139
- inline void write_value(const std::string& str) { write_string(str); }
146
+ inline void write_value(std::string_view str) { write_string(str); }
140
147
 
141
148
  inline void write_value(const ForeignJSON& json) {
142
149
  out_ << Reindent(json.as_string, indent_);
143
150
  }
144
151
 
145
- inline void write_string(const std::string& str) {
146
- out_ << '"' << EscapeJsonChars(str) << '"';
152
+ inline void write_string(std::string_view str) {
153
+ out_ << '"';
154
+ if (NeedsJsonEscape(str)) // only create temporary std::string if necessary
155
+ out_ << EscapeJsonChars(str);
156
+ else
157
+ out_ << str;
158
+ out_ << '"';
147
159
  }
148
- inline void write_string(const char* str) { write_string(std::string(str)); }
149
160
 
150
161
  enum JSONState { kObjectStart, kAfterValue };
151
162
  std::ostream& out_;