@encharm/cws 4.4.1 → 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 (485) 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_node115.node +0 -0
  6. package/dist/bindings/cws_linux_x64_node127.node +0 -0
  7. package/dist/bindings/cws_win32_x64_node108.node +0 -0
  8. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  9. package/dist/bindings/cws_win32_x64_node127.node +0 -0
  10. package/dist/bindings/cws_win32_x64_node83.node +0 -0
  11. package/dist/bindings/cws_win32_x64_node93.node +0 -0
  12. package/package.json +1 -1
  13. package/src/Addon.h +8 -23
  14. package/src/Socket.h +0 -1
  15. package/src/headers/22/acorn_version.h +6 -0
  16. package/src/headers/22/aliased_buffer-inl.h +243 -0
  17. package/src/headers/22/aliased_buffer.h +206 -0
  18. package/src/headers/{18 → 22}/async_wrap-inl.h +8 -6
  19. package/src/headers/{18 → 22}/async_wrap.h +65 -59
  20. package/src/headers/{16 → 22}/base_object-inl.h +57 -117
  21. package/src/headers/{18 → 22}/base_object.h +58 -30
  22. package/src/headers/22/base_object_types.h +74 -0
  23. package/src/headers/22/blob_serializer_deserializer-inl.h +385 -0
  24. package/src/headers/22/blob_serializer_deserializer.h +132 -0
  25. package/src/headers/{16 → 22}/callback_queue.h +1 -0
  26. package/src/headers/{16 → 22}/cares_wrap.h +27 -20
  27. package/src/headers/22/cjs_module_lexer_version.h +6 -0
  28. package/src/headers/22/cleanup_queue-inl.h +62 -0
  29. package/src/headers/22/cleanup_queue.h +85 -0
  30. package/src/headers/22/compile_cache.h +104 -0
  31. package/src/headers/{18 → 22}/crypto/crypto_clienthello.h +1 -1
  32. package/src/headers/{18 → 22}/crypto/crypto_context.h +31 -7
  33. package/src/headers/{18 → 22}/crypto/crypto_keys.h +118 -148
  34. package/src/headers/{18 → 22}/crypto/crypto_tls.h +20 -5
  35. package/src/headers/{18 → 22}/crypto/crypto_util.h +219 -263
  36. package/src/headers/22/crypto/ncrypto.h +752 -0
  37. package/src/headers/{16 → 22}/debug_utils-inl.h +15 -7
  38. package/src/headers/{18 → 22}/debug_utils.h +25 -19
  39. package/src/headers/22/encoding_binding.h +59 -0
  40. package/src/headers/{14 → 22}/env-inl.h +276 -409
  41. package/src/headers/22/env.h +1266 -0
  42. package/src/headers/22/env_properties.h +497 -0
  43. package/src/headers/{18 → 22}/handle_wrap.h +2 -0
  44. package/src/headers/{18 → 22}/histogram.h +88 -48
  45. package/src/headers/{16 → 22}/inspector_agent.h +17 -1
  46. package/src/headers/{16 → 22}/inspector_profiler.h +15 -13
  47. package/src/headers/{18 → 22}/js_native_api.h +78 -30
  48. package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
  49. package/src/headers/{18 → 22}/js_native_api_v8.h +206 -161
  50. package/src/headers/{18 → 22}/js_native_api_v8_internals.h +6 -0
  51. package/src/headers/22/json_parser.h +40 -0
  52. package/src/headers/{16 → 22}/json_utils.h +19 -8
  53. package/src/headers/{18 → 22}/memory_tracker-inl.h +16 -13
  54. package/src/headers/{14 → 22}/memory_tracker.h +13 -8
  55. package/src/headers/{16 → 22}/module_wrap.h +49 -19
  56. package/src/headers/22/ncrypto/ncrypto.h +752 -0
  57. package/src/headers/{18 → 22}/node.h +465 -68
  58. package/src/headers/{18 → 22}/node_api.h +66 -81
  59. package/src/headers/{18 → 22}/node_api_internals.h +8 -4
  60. package/src/headers/{18 → 22}/node_api_types.h +5 -0
  61. package/src/headers/22/node_binding.h +154 -0
  62. package/src/headers/{18 → 22}/node_blob.h +46 -78
  63. package/src/headers/{18 → 22}/node_bob-inl.h +1 -2
  64. package/src/headers/{18 → 22}/node_bob.h +2 -6
  65. package/src/headers/{18 → 22}/node_buffer.h +1 -1
  66. package/src/headers/22/node_builtins.h +220 -0
  67. package/src/headers/{18 → 22}/node_constants.h +3 -5
  68. package/src/headers/22/node_context_data.h +168 -0
  69. package/src/headers/22/node_contextify.h +199 -0
  70. package/src/headers/{16 → 22}/node_crypto.h +1 -2
  71. package/src/headers/22/node_dotenv.h +45 -0
  72. package/src/headers/{18 → 22}/node_errors.h +86 -27
  73. package/src/headers/22/node_exit_code.h +54 -0
  74. package/src/headers/22/node_external_reference.h +249 -0
  75. package/src/headers/{18 → 22}/node_file-inl.h +127 -30
  76. package/src/headers/{16 → 22}/node_file.h +122 -11
  77. package/src/headers/{18 → 22}/node_http2.h +28 -11
  78. package/src/headers/{16 → 22}/node_http2_state.h +34 -25
  79. package/src/headers/{18 → 22}/node_http_common-inl.h +2 -1
  80. package/src/headers/{18 → 22}/node_http_common.h +56 -55
  81. package/src/headers/{16 → 22}/node_i18n.h +5 -18
  82. package/src/headers/{18 → 22}/node_internals.h +121 -59
  83. package/src/headers/{18 → 22}/node_main_instance.h +4 -31
  84. package/src/headers/{18 → 22}/node_messaging.h +27 -10
  85. package/src/headers/{18 → 22}/node_metadata.h +23 -1
  86. package/src/headers/{18 → 22}/node_options-inl.h +24 -11
  87. package/src/headers/{18 → 22}/node_options.h +124 -39
  88. package/src/headers/{18 → 22}/node_perf.h +0 -2
  89. package/src/headers/{18 → 22}/node_perf_common.h +20 -9
  90. package/src/headers/{18 → 22}/node_platform.h +11 -5
  91. package/src/headers/{18 → 22}/node_process.h +26 -14
  92. package/src/headers/22/node_realm-inl.h +145 -0
  93. package/src/headers/22/node_realm.h +184 -0
  94. package/src/headers/{16 → 22}/node_report.h +13 -17
  95. package/src/headers/{16 → 22}/node_revert.h +3 -3
  96. package/src/headers/{16 → 22}/node_root_certs.h +902 -461
  97. package/src/headers/22/node_sea.h +64 -0
  98. package/src/headers/22/node_shadow_realm.h +46 -0
  99. package/src/headers/22/node_snapshot_builder.h +57 -0
  100. package/src/headers/22/node_snapshotable.h +174 -0
  101. package/src/headers/{18 → 22}/node_sockaddr.h +2 -2
  102. package/src/headers/{16 → 22}/node_stat_watcher.h +2 -1
  103. package/src/headers/22/node_threadsafe_cow-inl.h +54 -0
  104. package/src/headers/22/node_threadsafe_cow.h +105 -0
  105. package/src/headers/22/node_union_bytes.h +81 -0
  106. package/src/headers/22/node_url.h +96 -0
  107. package/src/headers/22/node_v8.h +77 -0
  108. package/src/headers/{14 → 22}/node_v8_platform-inl.h +17 -6
  109. package/src/headers/{18 → 22}/node_version.h +20 -8
  110. package/src/headers/22/node_wasi.h +185 -0
  111. package/src/headers/{14 → 22}/node_watchdog.h +2 -0
  112. package/src/headers/{18 → 22}/node_worker.h +7 -2
  113. package/src/headers/22/permission/child_process_permission.h +31 -0
  114. package/src/headers/22/permission/fs_permission.h +167 -0
  115. package/src/headers/22/permission/inspector_permission.h +31 -0
  116. package/src/headers/22/permission/permission.h +99 -0
  117. package/src/headers/22/permission/permission_base.h +60 -0
  118. package/src/headers/22/permission/wasi_permission.h +31 -0
  119. package/src/headers/22/permission/worker_permission.h +31 -0
  120. package/src/headers/{16 → 22}/req_wrap-inl.h +7 -6
  121. package/src/headers/{14 → 22}/spawn_sync.h +3 -3
  122. package/src/headers/{18 → 22}/stream_base-inl.h +0 -135
  123. package/src/headers/{18 → 22}/stream_base.h +35 -16
  124. package/src/headers/{18 → 22}/stream_pipe.h +3 -4
  125. package/src/headers/{16 → 22}/stream_wrap.h +2 -1
  126. package/src/headers/{18 → 22}/string_bytes.h +5 -14
  127. package/src/headers/{14 → 22}/string_decoder-inl.h +0 -6
  128. package/src/headers/{16 → 22}/string_decoder.h +0 -1
  129. package/src/headers/{18 → 22}/tcp_wrap.h +1 -1
  130. package/src/headers/{18 → 22}/threadpoolwork-inl.h +14 -1
  131. package/src/headers/22/timers.h +76 -0
  132. package/src/headers/{18 → 22}/tracing/trace_event.h +7 -5
  133. package/src/headers/{16 → 22}/udp_wrap.h +8 -5
  134. package/src/headers/22/undici_version.h +6 -0
  135. package/src/headers/{18 → 22}/util-inl.h +97 -127
  136. package/src/headers/{18 → 22}/util.h +293 -106
  137. package/src/headers/{18 → 22}/v8-fast-api-calls.h +103 -58
  138. package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
  139. package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
  140. package/dist/bindings/cws_darwin_x64_node83.node +0 -0
  141. package/dist/bindings/cws_darwin_x64_node93.node +0 -0
  142. package/dist/bindings/cws_linux_arm64_node83.node +0 -0
  143. package/dist/bindings/cws_linux_arm64_node93.node +0 -0
  144. package/dist/bindings/cws_linux_x64_node83.node +0 -0
  145. package/dist/bindings/cws_linux_x64_node93.node +0 -0
  146. package/src/headers/14/aliased_buffer.h +0 -263
  147. package/src/headers/14/allocated_buffer-inl.h +0 -110
  148. package/src/headers/14/allocated_buffer.h +0 -73
  149. package/src/headers/14/async_wrap-inl.h +0 -94
  150. package/src/headers/14/async_wrap.h +0 -230
  151. package/src/headers/14/base64.h +0 -183
  152. package/src/headers/14/base_object-inl.h +0 -371
  153. package/src/headers/14/base_object.h +0 -281
  154. package/src/headers/14/callback_queue-inl.h +0 -97
  155. package/src/headers/14/callback_queue.h +0 -78
  156. package/src/headers/14/debug_utils-inl.h +0 -223
  157. package/src/headers/14/debug_utils.h +0 -181
  158. package/src/headers/14/env.h +0 -1388
  159. package/src/headers/14/handle_wrap.h +0 -117
  160. package/src/headers/14/histogram-inl.h +0 -83
  161. package/src/headers/14/histogram.h +0 -98
  162. package/src/headers/14/inspector_agent.h +0 -149
  163. package/src/headers/14/inspector_profiler.h +0 -137
  164. package/src/headers/14/js_native_api.h +0 -544
  165. package/src/headers/14/js_native_api_types.h +0 -143
  166. package/src/headers/14/js_native_api_v8.h +0 -301
  167. package/src/headers/14/js_native_api_v8_internals.h +0 -38
  168. package/src/headers/14/json_utils.h +0 -161
  169. package/src/headers/14/memory_tracker-inl.h +0 -355
  170. package/src/headers/14/module_wrap.h +0 -99
  171. package/src/headers/14/node.h +0 -1032
  172. package/src/headers/14/node_api.h +0 -255
  173. package/src/headers/14/node_api_types.h +0 -44
  174. package/src/headers/14/node_binding.h +0 -99
  175. package/src/headers/14/node_buffer.h +0 -92
  176. package/src/headers/14/node_constants.h +0 -84
  177. package/src/headers/14/node_context_data.h +0 -44
  178. package/src/headers/14/node_contextify.h +0 -161
  179. package/src/headers/14/node_crypto.h +0 -865
  180. package/src/headers/14/node_crypto_bio.h +0 -195
  181. package/src/headers/14/node_crypto_clienthello-inl.h +0 -91
  182. package/src/headers/14/node_crypto_clienthello.h +0 -132
  183. package/src/headers/14/node_crypto_common.h +0 -138
  184. package/src/headers/14/node_crypto_groups.h +0 -415
  185. package/src/headers/14/node_dtrace.h +0 -86
  186. package/src/headers/14/node_errors.h +0 -214
  187. package/src/headers/14/node_file-inl.h +0 -306
  188. package/src/headers/14/node_file.h +0 -417
  189. package/src/headers/14/node_http2.h +0 -1191
  190. package/src/headers/14/node_http2_state.h +0 -149
  191. package/src/headers/14/node_http_common-inl.h +0 -194
  192. package/src/headers/14/node_http_common.h +0 -529
  193. package/src/headers/14/node_i18n.h +0 -144
  194. package/src/headers/14/node_internals.h +0 -405
  195. package/src/headers/14/node_main_instance.h +0 -96
  196. package/src/headers/14/node_mem.h +0 -45
  197. package/src/headers/14/node_messaging.h +0 -303
  198. package/src/headers/14/node_metadata.h +0 -109
  199. package/src/headers/14/node_mutex.h +0 -247
  200. package/src/headers/14/node_native_module.h +0 -101
  201. package/src/headers/14/node_native_module_env.h +0 -66
  202. package/src/headers/14/node_options-inl.h +0 -451
  203. package/src/headers/14/node_options.h +0 -481
  204. package/src/headers/14/node_perf.h +0 -181
  205. package/src/headers/14/node_perf_common.h +0 -97
  206. package/src/headers/14/node_platform.h +0 -189
  207. package/src/headers/14/node_process.h +0 -40
  208. package/src/headers/14/node_report.h +0 -47
  209. package/src/headers/14/node_revert.h +0 -72
  210. package/src/headers/14/node_root_certs.h +0 -3458
  211. package/src/headers/14/node_sockaddr-inl.h +0 -170
  212. package/src/headers/14/node_sockaddr.h +0 -123
  213. package/src/headers/14/node_stat_watcher.h +0 -70
  214. package/src/headers/14/node_union_bytes.h +0 -103
  215. package/src/headers/14/node_url.h +0 -188
  216. package/src/headers/14/node_version.h +0 -98
  217. package/src/headers/14/node_wasi.h +0 -108
  218. package/src/headers/14/node_win32_etw_provider-inl.h +0 -287
  219. package/src/headers/14/node_win32_etw_provider.h +0 -99
  220. package/src/headers/14/node_worker.h +0 -141
  221. package/src/headers/14/pipe_wrap.h +0 -78
  222. package/src/headers/14/req_wrap-inl.h +0 -170
  223. package/src/headers/14/req_wrap.h +0 -77
  224. package/src/headers/14/stream_base-inl.h +0 -275
  225. package/src/headers/14/stream_base.h +0 -434
  226. package/src/headers/14/stream_pipe.h +0 -73
  227. package/src/headers/14/stream_wrap.h +0 -130
  228. package/src/headers/14/string_bytes.h +0 -129
  229. package/src/headers/14/string_decoder.h +0 -50
  230. package/src/headers/14/string_search.h +0 -638
  231. package/src/headers/14/tcp_wrap.h +0 -101
  232. package/src/headers/14/threadpoolwork-inl.h +0 -57
  233. package/src/headers/14/tls_wrap.h +0 -222
  234. package/src/headers/14/tracing/agent.h +0 -195
  235. package/src/headers/14/tracing/node_trace_buffer.h +0 -83
  236. package/src/headers/14/tracing/node_trace_writer.h +0 -75
  237. package/src/headers/14/tracing/trace_event.h +0 -720
  238. package/src/headers/14/tracing/traced_value.h +0 -70
  239. package/src/headers/14/tty_wrap.h +0 -64
  240. package/src/headers/14/udp_wrap.h +0 -227
  241. package/src/headers/14/util-inl.h +0 -566
  242. package/src/headers/14/util.h +0 -804
  243. package/src/headers/14/v8abbr.h +0 -124
  244. package/src/headers/16/aliased_buffer.h +0 -315
  245. package/src/headers/16/aliased_struct-inl.h +0 -54
  246. package/src/headers/16/aliased_struct.h +0 -63
  247. package/src/headers/16/allocated_buffer-inl.h +0 -110
  248. package/src/headers/16/allocated_buffer.h +0 -73
  249. package/src/headers/16/async_wrap-inl.h +0 -94
  250. package/src/headers/16/async_wrap.h +0 -246
  251. package/src/headers/16/base64-inl.h +0 -189
  252. package/src/headers/16/base64.h +0 -69
  253. package/src/headers/16/base_object.h +0 -294
  254. package/src/headers/16/connect_wrap.h +0 -26
  255. package/src/headers/16/connection_wrap.h +0 -30
  256. package/src/headers/16/crypto/crypto_aes.h +0 -89
  257. package/src/headers/16/crypto/crypto_bio.h +0 -194
  258. package/src/headers/16/crypto/crypto_cipher.h +0 -286
  259. package/src/headers/16/crypto/crypto_clienthello-inl.h +0 -90
  260. package/src/headers/16/crypto/crypto_clienthello.h +0 -131
  261. package/src/headers/16/crypto/crypto_common.h +0 -187
  262. package/src/headers/16/crypto/crypto_context.h +0 -147
  263. package/src/headers/16/crypto/crypto_dh.h +0 -157
  264. package/src/headers/16/crypto/crypto_dsa.h +0 -76
  265. package/src/headers/16/crypto/crypto_ec.h +0 -169
  266. package/src/headers/16/crypto/crypto_groups.h +0 -415
  267. package/src/headers/16/crypto/crypto_hash.h +0 -89
  268. package/src/headers/16/crypto/crypto_hkdf.h +0 -66
  269. package/src/headers/16/crypto/crypto_hmac.h +0 -94
  270. package/src/headers/16/crypto/crypto_keygen.h +0 -301
  271. package/src/headers/16/crypto/crypto_keys.h +0 -412
  272. package/src/headers/16/crypto/crypto_pbkdf2.h +0 -76
  273. package/src/headers/16/crypto/crypto_random.h +0 -130
  274. package/src/headers/16/crypto/crypto_rsa.h +0 -141
  275. package/src/headers/16/crypto/crypto_scrypt.h +0 -87
  276. package/src/headers/16/crypto/crypto_sig.h +0 -167
  277. package/src/headers/16/crypto/crypto_spkac.h +0 -20
  278. package/src/headers/16/crypto/crypto_timing.h +0 -20
  279. package/src/headers/16/crypto/crypto_tls.h +0 -292
  280. package/src/headers/16/crypto/crypto_util.h +0 -736
  281. package/src/headers/16/crypto/crypto_x509.h +0 -141
  282. package/src/headers/16/debug_utils.h +0 -184
  283. package/src/headers/16/diagnosticfilename-inl.h +0 -33
  284. package/src/headers/16/env-inl.h +0 -1277
  285. package/src/headers/16/env.h +0 -1629
  286. package/src/headers/16/handle_wrap.h +0 -121
  287. package/src/headers/16/histogram-inl.h +0 -88
  288. package/src/headers/16/histogram.h +0 -216
  289. package/src/headers/16/inspector_io.h +0 -78
  290. package/src/headers/16/inspector_socket.h +0 -60
  291. package/src/headers/16/inspector_socket_server.h +0 -110
  292. package/src/headers/16/js_native_api.h +0 -561
  293. package/src/headers/16/js_native_api_types.h +0 -160
  294. package/src/headers/16/js_native_api_v8.h +0 -451
  295. package/src/headers/16/js_native_api_v8_internals.h +0 -39
  296. package/src/headers/16/js_stream.h +0 -52
  297. package/src/headers/16/memory_tracker-inl.h +0 -356
  298. package/src/headers/16/memory_tracker.h +0 -284
  299. package/src/headers/16/node.d +0 -315
  300. package/src/headers/16/node.h +0 -1132
  301. package/src/headers/16/node.stp +0 -146
  302. package/src/headers/16/node_api.h +0 -275
  303. package/src/headers/16/node_api_internals.h +0 -30
  304. package/src/headers/16/node_api_types.h +0 -50
  305. package/src/headers/16/node_binding.h +0 -99
  306. package/src/headers/16/node_blob.h +0 -191
  307. package/src/headers/16/node_bob-inl.h +0 -37
  308. package/src/headers/16/node_bob.h +0 -111
  309. package/src/headers/16/node_buffer.h +0 -92
  310. package/src/headers/16/node_constants.h +0 -84
  311. package/src/headers/16/node_context_data.h +0 -44
  312. package/src/headers/16/node_contextify.h +0 -196
  313. package/src/headers/16/node_dir.h +0 -52
  314. package/src/headers/16/node_dtrace.h +0 -86
  315. package/src/headers/16/node_errors.h +0 -277
  316. package/src/headers/16/node_external_reference.h +0 -129
  317. package/src/headers/16/node_file-inl.h +0 -306
  318. package/src/headers/16/node_http2.h +0 -1140
  319. package/src/headers/16/node_http_common-inl.h +0 -200
  320. package/src/headers/16/node_http_common.h +0 -531
  321. package/src/headers/16/node_internals.h +0 -421
  322. package/src/headers/16/node_main_instance.h +0 -103
  323. package/src/headers/16/node_mem-inl.h +0 -112
  324. package/src/headers/16/node_messaging.h +0 -373
  325. package/src/headers/16/node_metadata.h +0 -122
  326. package/src/headers/16/node_native_module.h +0 -101
  327. package/src/headers/16/node_native_module_env.h +0 -68
  328. package/src/headers/16/node_object_wrap.h +0 -132
  329. package/src/headers/16/node_options-inl.h +0 -477
  330. package/src/headers/16/node_options.h +0 -494
  331. package/src/headers/16/node_perf.h +0 -185
  332. package/src/headers/16/node_perf_common.h +0 -89
  333. package/src/headers/16/node_platform.h +0 -192
  334. package/src/headers/16/node_process.h +0 -43
  335. package/src/headers/16/node_provider.d +0 -80
  336. package/src/headers/16/node_snapshotable.h +0 -137
  337. package/src/headers/16/node_sockaddr-inl.h +0 -266
  338. package/src/headers/16/node_sockaddr.h +0 -405
  339. package/src/headers/16/node_union_bytes.h +0 -103
  340. package/src/headers/16/node_url.h +0 -205
  341. package/src/headers/16/node_v8.h +0 -41
  342. package/src/headers/16/node_v8_platform-inl.h +0 -194
  343. package/src/headers/16/node_version.h +0 -98
  344. package/src/headers/16/node_wasi.h +0 -108
  345. package/src/headers/16/node_watchdog.h +0 -152
  346. package/src/headers/16/node_win32_etw_provider-inl.h +0 -288
  347. package/src/headers/16/node_win32_etw_provider.h +0 -99
  348. package/src/headers/16/node_worker.h +0 -145
  349. package/src/headers/16/req_wrap.h +0 -77
  350. package/src/headers/16/spawn_sync.h +0 -242
  351. package/src/headers/16/stream_base-inl.h +0 -303
  352. package/src/headers/16/stream_base.h +0 -454
  353. package/src/headers/16/stream_pipe.h +0 -73
  354. package/src/headers/16/string_bytes.h +0 -122
  355. package/src/headers/16/string_decoder-inl.h +0 -37
  356. package/src/headers/16/string_search.h +0 -638
  357. package/src/headers/16/tcp_wrap.h +0 -103
  358. package/src/headers/16/threadpoolwork-inl.h +0 -57
  359. package/src/headers/16/timer_wrap.h +0 -84
  360. package/src/headers/16/tracing/agent.h +0 -195
  361. package/src/headers/16/tracing/node_trace_buffer.h +0 -83
  362. package/src/headers/16/tracing/node_trace_writer.h +0 -75
  363. package/src/headers/16/tracing/trace_event.h +0 -720
  364. package/src/headers/16/tracing/trace_event_common.h +0 -1109
  365. package/src/headers/16/tracing/traced_value.h +0 -70
  366. package/src/headers/16/tty_wrap.h +0 -66
  367. package/src/headers/16/util-inl.h +0 -575
  368. package/src/headers/16/util.h +0 -824
  369. package/src/headers/16/v8abbr.h +0 -123
  370. package/src/headers/16/v8ustack.d +0 -695
  371. package/src/headers/18/aliased_buffer.h +0 -315
  372. package/src/headers/18/aliased_struct-inl.h +0 -54
  373. package/src/headers/18/aliased_struct.h +0 -63
  374. package/src/headers/18/base64-inl.h +0 -189
  375. package/src/headers/18/base64.h +0 -69
  376. package/src/headers/18/base_object-inl.h +0 -374
  377. package/src/headers/18/callback_queue-inl.h +0 -97
  378. package/src/headers/18/callback_queue.h +0 -78
  379. package/src/headers/18/cares_wrap.h +0 -523
  380. package/src/headers/18/connect_wrap.h +0 -26
  381. package/src/headers/18/connection_wrap.h +0 -30
  382. package/src/headers/18/crypto/crypto_aes.h +0 -89
  383. package/src/headers/18/crypto/crypto_bio.h +0 -194
  384. package/src/headers/18/crypto/crypto_cipher.h +0 -291
  385. package/src/headers/18/crypto/crypto_clienthello-inl.h +0 -90
  386. package/src/headers/18/crypto/crypto_common.h +0 -151
  387. package/src/headers/18/crypto/crypto_dh.h +0 -156
  388. package/src/headers/18/crypto/crypto_dsa.h +0 -77
  389. package/src/headers/18/crypto/crypto_ec.h +0 -170
  390. package/src/headers/18/crypto/crypto_groups.h +0 -415
  391. package/src/headers/18/crypto/crypto_hash.h +0 -89
  392. package/src/headers/18/crypto/crypto_hkdf.h +0 -65
  393. package/src/headers/18/crypto/crypto_hmac.h +0 -94
  394. package/src/headers/18/crypto/crypto_keygen.h +0 -305
  395. package/src/headers/18/crypto/crypto_pbkdf2.h +0 -76
  396. package/src/headers/18/crypto/crypto_random.h +0 -130
  397. package/src/headers/18/crypto/crypto_rsa.h +0 -141
  398. package/src/headers/18/crypto/crypto_scrypt.h +0 -87
  399. package/src/headers/18/crypto/crypto_sig.h +0 -168
  400. package/src/headers/18/crypto/crypto_spkac.h +0 -21
  401. package/src/headers/18/crypto/crypto_timing.h +0 -20
  402. package/src/headers/18/crypto/crypto_x509.h +0 -143
  403. package/src/headers/18/debug_utils-inl.h +0 -223
  404. package/src/headers/18/diagnosticfilename-inl.h +0 -33
  405. package/src/headers/18/env-inl.h +0 -1308
  406. package/src/headers/18/env.h +0 -1667
  407. package/src/headers/18/inspector_agent.h +0 -144
  408. package/src/headers/18/inspector_io.h +0 -78
  409. package/src/headers/18/inspector_profiler.h +0 -149
  410. package/src/headers/18/inspector_socket.h +0 -60
  411. package/src/headers/18/inspector_socket_server.h +0 -110
  412. package/src/headers/18/js_stream.h +0 -52
  413. package/src/headers/18/json_utils.h +0 -161
  414. package/src/headers/18/memory_tracker.h +0 -284
  415. package/src/headers/18/module_wrap.h +0 -116
  416. package/src/headers/18/node_binding.h +0 -99
  417. package/src/headers/18/node_context_data.h +0 -44
  418. package/src/headers/18/node_contextify.h +0 -196
  419. package/src/headers/18/node_crypto.h +0 -57
  420. package/src/headers/18/node_dir.h +0 -52
  421. package/src/headers/18/node_dtrace.h +0 -86
  422. package/src/headers/18/node_external_reference.h +0 -145
  423. package/src/headers/18/node_file.h +0 -426
  424. package/src/headers/18/node_http2_state.h +0 -149
  425. package/src/headers/18/node_i18n.h +0 -145
  426. package/src/headers/18/node_mem-inl.h +0 -112
  427. package/src/headers/18/node_mem.h +0 -45
  428. package/src/headers/18/node_mutex.h +0 -323
  429. package/src/headers/18/node_native_module.h +0 -109
  430. package/src/headers/18/node_native_module_env.h +0 -71
  431. package/src/headers/18/node_object_wrap.h +0 -132
  432. package/src/headers/18/node_process-inl.h +0 -26
  433. package/src/headers/18/node_report.h +0 -47
  434. package/src/headers/18/node_revert.h +0 -82
  435. package/src/headers/18/node_root_certs.h +0 -3246
  436. package/src/headers/18/node_snapshot_builder.h +0 -43
  437. package/src/headers/18/node_snapshotable.h +0 -130
  438. package/src/headers/18/node_stat_watcher.h +0 -72
  439. package/src/headers/18/node_union_bytes.h +0 -103
  440. package/src/headers/18/node_url.h +0 -205
  441. package/src/headers/18/node_v8.h +0 -41
  442. package/src/headers/18/node_v8_platform-inl.h +0 -194
  443. package/src/headers/18/node_wasi.h +0 -108
  444. package/src/headers/18/node_watchdog.h +0 -152
  445. package/src/headers/18/node_win32_etw_provider-inl.h +0 -288
  446. package/src/headers/18/node_win32_etw_provider.h +0 -99
  447. package/src/headers/18/pipe_wrap.h +0 -80
  448. package/src/headers/18/req_wrap-inl.h +0 -170
  449. package/src/headers/18/spawn_sync.h +0 -242
  450. package/src/headers/18/stream_wrap.h +0 -133
  451. package/src/headers/18/string_decoder-inl.h +0 -37
  452. package/src/headers/18/string_decoder.h +0 -50
  453. package/src/headers/18/string_search.h +0 -638
  454. package/src/headers/18/tracing/node_trace_buffer.h +0 -83
  455. package/src/headers/18/tracing/node_trace_writer.h +0 -75
  456. package/src/headers/18/tracing/trace_event_common.h +0 -1109
  457. package/src/headers/18/tracing/traced_value.h +0 -70
  458. package/src/headers/18/udp_wrap.h +0 -227
  459. package/src/headers/18/v8abbr.h +0 -123
  460. /package/src/headers/{14 → 22}/aliased_struct-inl.h +0 -0
  461. /package/src/headers/{14 → 22}/aliased_struct.h +0 -0
  462. /package/src/headers/{16 → 22}/callback_queue-inl.h +0 -0
  463. /package/src/headers/{14 → 22}/connect_wrap.h +0 -0
  464. /package/src/headers/{14 → 22}/connection_wrap.h +0 -0
  465. /package/src/headers/{14 → 22}/diagnosticfilename-inl.h +0 -0
  466. /package/src/headers/{18 → 22}/histogram-inl.h +0 -0
  467. /package/src/headers/{14 → 22}/inspector_io.h +0 -0
  468. /package/src/headers/{14 → 22}/inspector_socket.h +0 -0
  469. /package/src/headers/{14 → 22}/inspector_socket_server.h +0 -0
  470. /package/src/headers/{14 → 22}/js_stream.h +0 -0
  471. /package/src/headers/{14 → 22}/node_dir.h +0 -0
  472. /package/src/headers/{14 → 22}/node_mem-inl.h +0 -0
  473. /package/src/headers/{16 → 22}/node_mem.h +0 -0
  474. /package/src/headers/{16 → 22}/node_mutex.h +0 -0
  475. /package/src/headers/{14 → 22}/node_object_wrap.h +0 -0
  476. /package/src/headers/{16 → 22}/node_process-inl.h +0 -0
  477. /package/src/headers/{18 → 22}/node_sockaddr-inl.h +0 -0
  478. /package/src/headers/{18 → 22}/node_wasm_web_api.h +0 -0
  479. /package/src/headers/{16 → 22}/pipe_wrap.h +0 -0
  480. /package/src/headers/{18 → 22}/req_wrap.h +0 -0
  481. /package/src/headers/{18 → 22}/timer_wrap-inl.h +0 -0
  482. /package/src/headers/{18 → 22}/timer_wrap.h +0 -0
  483. /package/src/headers/{18 → 22}/tracing/agent.h +0 -0
  484. /package/src/headers/{14 → 22}/tracing/trace_event_common.h +0 -0
  485. /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_;