@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
@@ -31,49 +31,55 @@
31
31
 
32
32
  namespace node {
33
33
 
34
- #define NODE_ASYNC_NON_CRYPTO_PROVIDER_TYPES(V) \
35
- V(NONE) \
36
- V(DIRHANDLE) \
37
- V(DNSCHANNEL) \
38
- V(ELDHISTOGRAM) \
39
- V(FILEHANDLE) \
40
- V(FILEHANDLECLOSEREQ) \
41
- V(FIXEDSIZEBLOBCOPY) \
42
- V(FSEVENTWRAP) \
43
- V(FSREQCALLBACK) \
44
- V(FSREQPROMISE) \
45
- V(GETADDRINFOREQWRAP) \
46
- V(GETNAMEINFOREQWRAP) \
47
- V(HEAPSNAPSHOT) \
48
- V(HTTP2SESSION) \
49
- V(HTTP2STREAM) \
50
- V(HTTP2PING) \
51
- V(HTTP2SETTINGS) \
52
- V(HTTPINCOMINGMESSAGE) \
53
- V(HTTPCLIENTREQUEST) \
54
- V(JSSTREAM) \
55
- V(JSUDPWRAP) \
56
- V(MESSAGEPORT) \
57
- V(PIPECONNECTWRAP) \
58
- V(PIPESERVERWRAP) \
59
- V(PIPEWRAP) \
60
- V(PROCESSWRAP) \
61
- V(PROMISE) \
62
- V(QUERYWRAP) \
63
- V(SHUTDOWNWRAP) \
64
- V(SIGNALWRAP) \
65
- V(STATWATCHER) \
66
- V(STREAMPIPE) \
67
- V(TCPCONNECTWRAP) \
68
- V(TCPSERVERWRAP) \
69
- V(TCPWRAP) \
70
- V(TTYWRAP) \
71
- V(UDPSENDWRAP) \
72
- V(UDPWRAP) \
73
- V(SIGINTWATCHDOG) \
74
- V(WORKER) \
75
- V(WORKERHEAPSNAPSHOT) \
76
- V(WRITEWRAP) \
34
+ #define NODE_ASYNC_NON_CRYPTO_PROVIDER_TYPES(V) \
35
+ V(NONE) \
36
+ V(DIRHANDLE) \
37
+ V(DNSCHANNEL) \
38
+ V(ELDHISTOGRAM) \
39
+ V(FILEHANDLE) \
40
+ V(FILEHANDLECLOSEREQ) \
41
+ V(BLOBREADER) \
42
+ V(FSEVENTWRAP) \
43
+ V(FSREQCALLBACK) \
44
+ V(FSREQPROMISE) \
45
+ V(GETADDRINFOREQWRAP) \
46
+ V(GETNAMEINFOREQWRAP) \
47
+ V(HEAPSNAPSHOT) \
48
+ V(HTTP2SESSION) \
49
+ V(HTTP2STREAM) \
50
+ V(HTTP2PING) \
51
+ V(HTTP2SETTINGS) \
52
+ V(HTTPINCOMINGMESSAGE) \
53
+ V(HTTPCLIENTREQUEST) \
54
+ V(JSSTREAM) \
55
+ V(JSUDPWRAP) \
56
+ V(MESSAGEPORT) \
57
+ V(PIPECONNECTWRAP) \
58
+ V(PIPESERVERWRAP) \
59
+ V(PIPEWRAP) \
60
+ V(PROCESSWRAP) \
61
+ V(PROMISE) \
62
+ V(QUERYWRAP) \
63
+ V(QUIC_ENDPOINT) \
64
+ V(QUIC_LOGSTREAM) \
65
+ V(QUIC_PACKET) \
66
+ V(QUIC_SESSION) \
67
+ V(QUIC_STREAM) \
68
+ V(QUIC_UDP) \
69
+ V(SHUTDOWNWRAP) \
70
+ V(SIGNALWRAP) \
71
+ V(STATWATCHER) \
72
+ V(STREAMPIPE) \
73
+ V(TCPCONNECTWRAP) \
74
+ V(TCPSERVERWRAP) \
75
+ V(TCPWRAP) \
76
+ V(TTYWRAP) \
77
+ V(UDPSENDWRAP) \
78
+ V(UDPWRAP) \
79
+ V(SIGINTWATCHDOG) \
80
+ V(WORKER) \
81
+ V(WORKERHEAPSNAPSHOT) \
82
+ V(WRITEWRAP) \
77
83
  V(ZLIB)
78
84
 
79
85
  #if HAVE_OPENSSL
@@ -96,17 +102,9 @@ namespace node {
96
102
  #define NODE_ASYNC_CRYPTO_PROVIDER_TYPES(V)
97
103
  #endif // HAVE_OPENSSL
98
104
 
99
- #if HAVE_INSPECTOR
100
- #define NODE_ASYNC_INSPECTOR_PROVIDER_TYPES(V) \
101
- V(INSPECTORJSBINDING)
102
- #else
103
- #define NODE_ASYNC_INSPECTOR_PROVIDER_TYPES(V)
104
- #endif // HAVE_INSPECTOR
105
-
106
- #define NODE_ASYNC_PROVIDER_TYPES(V) \
107
- NODE_ASYNC_NON_CRYPTO_PROVIDER_TYPES(V) \
108
- NODE_ASYNC_CRYPTO_PROVIDER_TYPES(V) \
109
- NODE_ASYNC_INSPECTOR_PROVIDER_TYPES(V)
105
+ #define NODE_ASYNC_PROVIDER_TYPES(V) \
106
+ NODE_ASYNC_NON_CRYPTO_PROVIDER_TYPES(V) \
107
+ NODE_ASYNC_CRYPTO_PROVIDER_TYPES(V)
110
108
 
111
109
  class Environment;
112
110
  class DestroyParam;
@@ -138,13 +136,17 @@ class AsyncWrap : public BaseObject {
138
136
  static constexpr double kInvalidAsyncId = -1;
139
137
 
140
138
  static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
139
+ IsolateData* isolate_data);
140
+ inline static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
141
141
  Environment* env);
142
142
 
143
143
  static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
144
- static void Initialize(v8::Local<v8::Object> target,
145
- v8::Local<v8::Value> unused,
146
- v8::Local<v8::Context> context,
147
- void* priv);
144
+ static void CreatePerContextProperties(v8::Local<v8::Object> target,
145
+ v8::Local<v8::Value> unused,
146
+ v8::Local<v8::Context> context,
147
+ void* priv);
148
+ static void CreatePerIsolateProperties(IsolateData* isolate_data,
149
+ v8::Local<v8::ObjectTemplate> target);
148
150
 
149
151
  static void GetAsyncId(const v8::FunctionCallbackInfo<v8::Value>& args);
150
152
  static void PushAsyncContext(const v8::FunctionCallbackInfo<v8::Value>& args);
@@ -185,6 +187,8 @@ class AsyncWrap : public BaseObject {
185
187
  inline double get_async_id() const;
186
188
  inline double get_trigger_async_id() const;
187
189
 
190
+ inline v8::Local<v8::Value> context_frame() const;
191
+
188
192
  void AsyncReset(v8::Local<v8::Object> resource,
189
193
  double execution_async_id = kInvalidAsyncId,
190
194
  bool silent = false);
@@ -207,7 +211,7 @@ class AsyncWrap : public BaseObject {
207
211
  v8::Local<v8::Value>* argv);
208
212
 
209
213
  virtual std::string diagnostic_name() const;
210
- std::string MemoryInfoName() const override;
214
+ const char* MemoryInfoName() const override;
211
215
 
212
216
  static void WeakCallback(const v8::WeakCallbackInfo<DestroyParam> &info);
213
217
 
@@ -237,6 +241,8 @@ class AsyncWrap : public BaseObject {
237
241
  // Because the values may be Reset(), cannot be made const.
238
242
  double async_id_ = kInvalidAsyncId;
239
243
  double trigger_async_id_ = kInvalidAsyncId;
244
+
245
+ v8::Global<v8::Value> context_frame_;
240
246
  };
241
247
 
242
248
  } // namespace node
@@ -33,37 +33,9 @@
33
33
  namespace node {
34
34
 
35
35
  BaseObject::BaseObject(Environment* env, v8::Local<v8::Object> object)
36
- : persistent_handle_(env->isolate(), object), env_(env) {
37
- CHECK_EQ(false, object.IsEmpty());
38
- CHECK_GT(object->InternalFieldCount(), 0);
39
- object->SetAlignedPointerInInternalField(
40
- BaseObject::kSlot,
41
- static_cast<void*>(this));
42
- env->AddCleanupHook(DeleteMe, static_cast<void*>(this));
43
- env->modify_base_object_count(1);
44
- }
45
-
46
- BaseObject::~BaseObject() {
47
- env()->modify_base_object_count(-1);
48
- env()->RemoveCleanupHook(DeleteMe, static_cast<void*>(this));
49
-
50
- if (UNLIKELY(has_pointer_data())) {
51
- PointerData* metadata = pointer_data();
52
- CHECK_EQ(metadata->strong_ptr_count, 0);
53
- metadata->self = nullptr;
54
- if (metadata->weak_ptr_count == 0)
55
- delete metadata;
56
- }
57
-
58
- if (persistent_handle_.IsEmpty()) {
59
- // This most likely happened because the weak callback below cleared it.
60
- return;
61
- }
62
-
63
- {
64
- v8::HandleScope handle_scope(env()->isolate());
65
- object()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr);
66
- }
36
+ : BaseObject(env->principal_realm(), object) {
37
+ // TODO(legendecas): Check the shorthand is only used in the principal realm
38
+ // while allowing to create a BaseObject in a vm context.
67
39
  }
68
40
 
69
41
  void BaseObject::Detach() {
@@ -83,52 +55,57 @@ v8::Local<v8::Object> BaseObject::object() const {
83
55
  v8::Local<v8::Object> BaseObject::object(v8::Isolate* isolate) const {
84
56
  v8::Local<v8::Object> handle = object();
85
57
 
86
- DCHECK_EQ(handle->GetCreationContext().ToLocalChecked()->GetIsolate(),
87
- isolate);
58
+ DCHECK_EQ(handle->GetCreationContextChecked()->GetIsolate(), isolate);
88
59
  DCHECK_EQ(env()->isolate(), isolate);
89
60
 
90
61
  return handle;
91
62
  }
92
63
 
93
64
  Environment* BaseObject::env() const {
94
- return env_;
65
+ return realm_->env();
66
+ }
67
+
68
+ Realm* BaseObject::realm() const {
69
+ return realm_;
70
+ }
71
+
72
+ bool BaseObject::IsBaseObject(IsolateData* isolate_data,
73
+ v8::Local<v8::Object> obj) {
74
+ if (obj->InternalFieldCount() < BaseObject::kInternalFieldCount) {
75
+ return false;
76
+ }
77
+
78
+ uint16_t* ptr = static_cast<uint16_t*>(
79
+ obj->GetAlignedPointerFromInternalField(BaseObject::kEmbedderType));
80
+ return ptr == isolate_data->embedder_id_for_non_cppgc();
81
+ }
82
+
83
+ void BaseObject::TagBaseObject(IsolateData* isolate_data,
84
+ v8::Local<v8::Object> object) {
85
+ DCHECK_GE(object->InternalFieldCount(), BaseObject::kInternalFieldCount);
86
+ object->SetAlignedPointerInInternalField(
87
+ BaseObject::kEmbedderType, isolate_data->embedder_id_for_non_cppgc());
88
+ }
89
+
90
+ void BaseObject::SetInternalFields(IsolateData* isolate_data,
91
+ v8::Local<v8::Object> object,
92
+ void* slot) {
93
+ TagBaseObject(isolate_data, object);
94
+ object->SetAlignedPointerInInternalField(BaseObject::kSlot, slot);
95
95
  }
96
96
 
97
97
  BaseObject* BaseObject::FromJSObject(v8::Local<v8::Value> value) {
98
98
  v8::Local<v8::Object> obj = value.As<v8::Object>();
99
- DCHECK_GE(obj->InternalFieldCount(), BaseObject::kSlot);
99
+ DCHECK_GE(obj->InternalFieldCount(), BaseObject::kInternalFieldCount);
100
100
  return static_cast<BaseObject*>(
101
101
  obj->GetAlignedPointerFromInternalField(BaseObject::kSlot));
102
102
  }
103
103
 
104
-
105
104
  template <typename T>
106
105
  T* BaseObject::FromJSObject(v8::Local<v8::Value> object) {
107
106
  return static_cast<T*>(FromJSObject(object));
108
107
  }
109
108
 
110
-
111
- void BaseObject::MakeWeak() {
112
- if (has_pointer_data()) {
113
- pointer_data()->wants_weak_jsobj = true;
114
- if (pointer_data()->strong_ptr_count > 0) return;
115
- }
116
-
117
- persistent_handle_.SetWeak(
118
- this,
119
- [](const v8::WeakCallbackInfo<BaseObject>& data) {
120
- BaseObject* obj = data.GetParameter();
121
- // Clear the persistent handle so that ~BaseObject() doesn't attempt
122
- // to mess with internal fields, since the JS object may have
123
- // transitioned into an invalid state.
124
- // Refs: https://github.com/nodejs/node/issues/18897
125
- obj->persistent_handle_.Reset();
126
- CHECK_IMPLIES(obj->has_pointer_data(),
127
- obj->pointer_data()->strong_ptr_count == 0);
128
- obj->OnGCCollect();
129
- }, v8::WeakCallbackType::kParameter);
130
- }
131
-
132
109
  void BaseObject::OnGCCollect() {
133
110
  delete this;
134
111
  }
@@ -148,78 +125,35 @@ bool BaseObject::IsWeakOrDetached() const {
148
125
  return pd->wants_weak_jsobj || pd->is_detached;
149
126
  }
150
127
 
151
- void BaseObject::LazilyInitializedJSTemplateConstructor(
152
- const v8::FunctionCallbackInfo<v8::Value>& args) {
153
- DCHECK(args.IsConstructCall());
154
- DCHECK_GT(args.This()->InternalFieldCount(), 0);
155
- args.This()->SetAlignedPointerInInternalField(BaseObject::kSlot, nullptr);
156
- }
157
-
158
- v8::Local<v8::FunctionTemplate>
159
- BaseObject::MakeLazilyInitializedJSTemplate(Environment* env) {
160
- v8::Local<v8::FunctionTemplate> t =
161
- env->NewFunctionTemplate(LazilyInitializedJSTemplateConstructor);
162
- t->Inherit(BaseObject::GetConstructorTemplate(env));
163
- t->InstanceTemplate()->SetInternalFieldCount(
164
- BaseObject::kInternalFieldCount);
165
- return t;
128
+ v8::EmbedderGraph::Node::Detachedness BaseObject::GetDetachedness() const {
129
+ return IsWeakOrDetached() ? v8::EmbedderGraph::Node::Detachedness::kDetached
130
+ : v8::EmbedderGraph::Node::Detachedness::kUnknown;
166
131
  }
167
132
 
168
133
  template <int Field>
169
134
  void BaseObject::InternalFieldGet(
170
- v8::Local<v8::String> property,
171
- const v8::PropertyCallbackInfo<v8::Value>& info) {
172
- info.GetReturnValue().Set(info.This()->GetInternalField(Field));
135
+ const v8::FunctionCallbackInfo<v8::Value>& args) {
136
+ args.GetReturnValue().Set(
137
+ args.This()->GetInternalField(Field).As<v8::Value>());
173
138
  }
174
139
 
175
- template <int Field, bool (v8::Value::* typecheck)() const>
176
- void BaseObject::InternalFieldSet(v8::Local<v8::String> property,
177
- v8::Local<v8::Value> value,
178
- const v8::PropertyCallbackInfo<void>& info) {
140
+ template <int Field, bool (v8::Value::*typecheck)() const>
141
+ void BaseObject::InternalFieldSet(
142
+ const v8::FunctionCallbackInfo<v8::Value>& args) {
143
+ v8::Local<v8::Value> value = args[0];
179
144
  // This could be e.g. value->IsFunction().
180
145
  CHECK(((*value)->*typecheck)());
181
- info.This()->SetInternalField(Field, value);
146
+ args.This()->SetInternalField(Field, value);
182
147
  }
183
148
 
184
149
  bool BaseObject::has_pointer_data() const {
185
150
  return pointer_data_ != nullptr;
186
151
  }
187
152
 
188
- BaseObject::PointerData* BaseObject::pointer_data() {
189
- if (!has_pointer_data()) {
190
- PointerData* metadata = new PointerData();
191
- metadata->wants_weak_jsobj = persistent_handle_.IsWeak();
192
- metadata->self = this;
193
- pointer_data_ = metadata;
194
- }
195
- CHECK(has_pointer_data());
196
- return pointer_data_;
197
- }
198
-
199
- void BaseObject::decrease_refcount() {
200
- CHECK(has_pointer_data());
201
- PointerData* metadata = pointer_data();
202
- CHECK_GT(metadata->strong_ptr_count, 0);
203
- unsigned int new_refcount = --metadata->strong_ptr_count;
204
- if (new_refcount == 0) {
205
- if (metadata->is_detached) {
206
- OnGCCollect();
207
- } else if (metadata->wants_weak_jsobj && !persistent_handle_.IsEmpty()) {
208
- MakeWeak();
209
- }
210
- }
211
- }
212
-
213
- void BaseObject::increase_refcount() {
214
- unsigned int prev_refcount = pointer_data()->strong_ptr_count++;
215
- if (prev_refcount == 0 && !persistent_handle_.IsEmpty())
216
- persistent_handle_.ClearWeak();
217
- }
218
-
219
153
  template <typename T, bool kIsWeak>
220
154
  BaseObject::PointerData*
221
155
  BaseObjectPtrImpl<T, kIsWeak>::pointer_data() const {
222
- if (kIsWeak) {
156
+ if constexpr (kIsWeak) {
223
157
  return data_.pointer_data;
224
158
  }
225
159
  if (get_base_object() == nullptr) {
@@ -230,7 +164,7 @@ BaseObjectPtrImpl<T, kIsWeak>::pointer_data() const {
230
164
 
231
165
  template <typename T, bool kIsWeak>
232
166
  BaseObject* BaseObjectPtrImpl<T, kIsWeak>::get_base_object() const {
233
- if (kIsWeak) {
167
+ if constexpr (kIsWeak) {
234
168
  if (pointer_data() == nullptr) {
235
169
  return nullptr;
236
170
  }
@@ -241,7 +175,7 @@ BaseObject* BaseObjectPtrImpl<T, kIsWeak>::get_base_object() const {
241
175
 
242
176
  template <typename T, bool kIsWeak>
243
177
  BaseObjectPtrImpl<T, kIsWeak>::~BaseObjectPtrImpl() {
244
- if (kIsWeak) {
178
+ if constexpr (kIsWeak) {
245
179
  if (pointer_data() != nullptr &&
246
180
  --pointer_data()->weak_ptr_count == 0 &&
247
181
  pointer_data()->self == nullptr) {
@@ -261,7 +195,7 @@ template <typename T, bool kIsWeak>
261
195
  BaseObjectPtrImpl<T, kIsWeak>::BaseObjectPtrImpl(T* target)
262
196
  : BaseObjectPtrImpl() {
263
197
  if (target == nullptr) return;
264
- if (kIsWeak) {
198
+ if constexpr (kIsWeak) {
265
199
  data_.pointer_data = target->pointer_data();
266
200
  CHECK_NOT_NULL(pointer_data());
267
201
  pointer_data()->weak_ptr_count++;
@@ -302,7 +236,7 @@ BaseObjectPtrImpl<T, kIsWeak>& BaseObjectPtrImpl<T, kIsWeak>::operator=(
302
236
  template <typename T, bool kIsWeak>
303
237
  BaseObjectPtrImpl<T, kIsWeak>::BaseObjectPtrImpl(BaseObjectPtrImpl&& other)
304
238
  : data_(other.data_) {
305
- if (kIsWeak)
239
+ if constexpr (kIsWeak)
306
240
  other.data_.target = nullptr;
307
241
  else
308
242
  other.data_.pointer_data = nullptr;
@@ -359,6 +293,12 @@ template <typename T, typename... Args>
359
293
  BaseObjectPtr<T> MakeBaseObject(Args&&... args) {
360
294
  return BaseObjectPtr<T>(new T(std::forward<Args>(args)...));
361
295
  }
296
+ template <typename T, typename... Args>
297
+ BaseObjectWeakPtr<T> MakeWeakBaseObject(Args&&... args) {
298
+ T* target = new T(std::forward<Args>(args)...);
299
+ target->MakeWeak();
300
+ return BaseObjectWeakPtr<T>(target);
301
+ }
362
302
 
363
303
  template <typename T, typename... Args>
364
304
  BaseObjectPtr<T> MakeDetachedBaseObject(Args&&... args) {
@@ -25,12 +25,15 @@
25
25
  #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
26
26
 
27
27
  #include <type_traits> // std::remove_reference
28
+ #include "base_object_types.h"
28
29
  #include "memory_tracker.h"
29
30
  #include "v8.h"
30
31
 
31
32
  namespace node {
32
33
 
33
34
  class Environment;
35
+ class IsolateData;
36
+ class Realm;
34
37
  template <typename T, bool kIsWeak>
35
38
  class BaseObjectPtrImpl;
36
39
 
@@ -40,12 +43,15 @@ class TransferData;
40
43
 
41
44
  class BaseObject : public MemoryRetainer {
42
45
  public:
43
- enum InternalFields { kSlot, kInternalFieldCount };
46
+ enum InternalFields { kEmbedderType, kSlot, kInternalFieldCount };
44
47
 
45
- // Associates this object with `object`. It uses the 0th internal field for
48
+ // Associates this object with `object`. It uses the 1st internal field for
46
49
  // that, and in particular aborts if there is no such field.
50
+ // This is the designated constructor.
51
+ BaseObject(Realm* realm, v8::Local<v8::Object> object);
52
+ // Convenient constructor for constructing BaseObject in the principal realm.
47
53
  inline BaseObject(Environment* env, v8::Local<v8::Object> object);
48
- inline ~BaseObject() override;
54
+ ~BaseObject() override;
49
55
 
50
56
  BaseObject() = delete;
51
57
 
@@ -60,12 +66,20 @@ class BaseObject : public MemoryRetainer {
60
66
  inline v8::Global<v8::Object>& persistent();
61
67
 
62
68
  inline Environment* env() const;
69
+ inline Realm* realm() const;
63
70
 
64
71
  // Get a BaseObject* pointer, or subclass pointer, for the JS object that
65
72
  // was also passed to the `BaseObject()` constructor initially.
66
73
  // This may return `nullptr` if the C++ object has not been constructed yet,
67
74
  // e.g. when the JS object used `MakeLazilyInitializedJSTemplate`.
68
- static inline void LazilyInitializedJSTemplateConstructor(
75
+ static inline void SetInternalFields(IsolateData* isolate_data,
76
+ v8::Local<v8::Object> object,
77
+ void* slot);
78
+ static inline bool IsBaseObject(IsolateData* isolate_data,
79
+ v8::Local<v8::Object> object);
80
+ static inline void TagBaseObject(IsolateData* isolate_data,
81
+ v8::Local<v8::Object> object);
82
+ static void LazilyInitializedJSTemplateConstructor(
69
83
  const v8::FunctionCallbackInfo<v8::Value>& args);
70
84
  static inline BaseObject* FromJSObject(v8::Local<v8::Value> object);
71
85
  template <typename T>
@@ -74,7 +88,7 @@ class BaseObject : public MemoryRetainer {
74
88
  // Make the `v8::Global` a weak reference and, `delete` this object once
75
89
  // the JS object has been garbage collected and there are no (strong)
76
90
  // BaseObjectPtr references to it.
77
- inline void MakeWeak();
91
+ void MakeWeak();
78
92
 
79
93
  // Undo `MakeWeak()`, i.e. turn this into a strong reference that is a GC
80
94
  // root and will not be touched by the garbage collector.
@@ -85,20 +99,21 @@ class BaseObject : public MemoryRetainer {
85
99
  // to it anymore.
86
100
  inline bool IsWeakOrDetached() const;
87
101
 
102
+ inline v8::EmbedderGraph::Node::Detachedness GetDetachedness() const override;
103
+
88
104
  // Utility to create a FunctionTemplate with one internal field (used for
89
105
  // the `BaseObject*` pointer) and a constructor that initializes that field
90
106
  // to `nullptr`.
91
- static inline v8::Local<v8::FunctionTemplate> MakeLazilyInitializedJSTemplate(
107
+ static v8::Local<v8::FunctionTemplate> MakeLazilyInitializedJSTemplate(
108
+ IsolateData* isolate);
109
+ static v8::Local<v8::FunctionTemplate> MakeLazilyInitializedJSTemplate(
92
110
  Environment* env);
93
111
 
94
112
  // Setter/Getter pair for internal fields that can be passed to SetAccessor.
95
113
  template <int Field>
96
- static void InternalFieldGet(v8::Local<v8::String> property,
97
- const v8::PropertyCallbackInfo<v8::Value>& info);
114
+ static void InternalFieldGet(const v8::FunctionCallbackInfo<v8::Value>& args);
98
115
  template <int Field, bool (v8::Value::*typecheck)() const>
99
- static void InternalFieldSet(v8::Local<v8::String> property,
100
- v8::Local<v8::Value> value,
101
- const v8::PropertyCallbackInfo<void>& info);
116
+ static void InternalFieldSet(const v8::FunctionCallbackInfo<v8::Value>& args);
102
117
 
103
118
  // This is a bit of a hack. See the override in async_wrap.cc for details.
104
119
  virtual bool IsDoneInitializing() const;
@@ -109,18 +124,20 @@ class BaseObject : public MemoryRetainer {
109
124
  // a BaseObjectPtr to this object.
110
125
  inline void Detach();
111
126
 
112
- static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
127
+ static inline v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
113
128
  Environment* env);
129
+ static v8::Local<v8::FunctionTemplate> GetConstructorTemplate(
130
+ IsolateData* isolate_data);
114
131
 
115
132
  // Interface for transferring BaseObject instances using the .postMessage()
116
133
  // method of MessagePorts (and, by extension, Workers).
117
134
  // GetTransferMode() returns a transfer mode that indicates how to deal with
118
135
  // the current object:
119
- // - kUntransferable:
120
- // No transfer is possible, either because this type of BaseObject does
121
- // not know how to be transferred, or because it is not in a state in
122
- // which it is possible to do so (e.g. because it has already been
123
- // transferred).
136
+ // - kDisallowCloneAndTransfer:
137
+ // No transfer or clone is possible, either because this type of
138
+ // BaseObject does not know how to be transferred, or because it is not
139
+ // in a state in which it is possible to do so (e.g. because it has
140
+ // already been transferred).
124
141
  // - kTransferable:
125
142
  // This object can be transferred in a destructive fashion, i.e. will be
126
143
  // rendered unusable on the sending side of the channel in the process
@@ -136,22 +153,27 @@ class BaseObject : public MemoryRetainer {
136
153
  // This object can be cloned without being modified.
137
154
  // CloneForMessaging() will be called to get a representation of the
138
155
  // object that is used for subsequent deserialization, unless the
139
- // object is listed in transferList, in which case TransferForMessaging()
140
- // is attempted first.
156
+ // object is listed in transferList and is kTransferable, in which case
157
+ // TransferForMessaging() is attempted first.
158
+ // - kTransferableAndCloneable:
159
+ // This object can be transferred or cloned.
141
160
  // After a successful clone, FinalizeTransferRead() is called on the receiving
142
161
  // end, and can read deserialize JS data possibly serialized by a previous
143
162
  // FinalizeTransferWrite() call.
144
- enum class TransferMode {
145
- kUntransferable,
146
- kTransferable,
147
- kCloneable
163
+ // By default, a BaseObject is kDisallowCloneAndTransfer and a JS Object is
164
+ // kCloneable unless otherwise specified.
165
+ enum TransferMode : uint32_t {
166
+ kDisallowCloneAndTransfer = 0,
167
+ kTransferable = 1 << 0,
168
+ kCloneable = 1 << 1,
169
+ kTransferableAndCloneable = kTransferable | kCloneable,
148
170
  };
149
171
  virtual TransferMode GetTransferMode() const;
150
172
  virtual std::unique_ptr<worker::TransferData> TransferForMessaging();
151
173
  virtual std::unique_ptr<worker::TransferData> CloneForMessaging() const;
152
174
  virtual v8::Maybe<std::vector<BaseObjectPtrImpl<BaseObject, false>>>
153
175
  NestedTransferables() const;
154
- virtual v8::Maybe<bool> FinalizeTransferRead(
176
+ virtual v8::Maybe<void> FinalizeTransferRead(
155
177
  v8::Local<v8::Context> context, v8::ValueDeserializer* deserializer);
156
178
 
157
179
  // Indicates whether this object is expected to use a strong reference during
@@ -173,7 +195,7 @@ class BaseObject : public MemoryRetainer {
173
195
  // position of members in memory are predictable. For more information please
174
196
  // refer to `doc/contributing/node-postmortem-support.md`
175
197
  friend int GenDebugSymbols();
176
- friend class CleanupHookCallback;
198
+ friend class CleanupQueue;
177
199
  template <typename T, bool kIsWeak>
178
200
  friend class BaseObjectPtrImpl;
179
201
 
@@ -202,13 +224,13 @@ class BaseObject : public MemoryRetainer {
202
224
  inline bool has_pointer_data() const;
203
225
  // This creates a PointerData struct if none was associated with this
204
226
  // BaseObject before.
205
- inline PointerData* pointer_data();
227
+ PointerData* pointer_data();
206
228
 
207
229
  // Functions that adjust the strong pointer count.
208
- inline void decrease_refcount();
209
- inline void increase_refcount();
230
+ void decrease_refcount();
231
+ void increase_refcount();
210
232
 
211
- Environment* env_;
233
+ Realm* realm_;
212
234
  PointerData* pointer_data_ = nullptr;
213
235
  };
214
236
 
@@ -230,7 +252,9 @@ inline T* Unwrap(v8::Local<v8::Value> obj) {
230
252
  // circumstances such as the GC or Environment cleanup.
231
253
  // If weak, destruction behaviour is not affected, but the pointer will be
232
254
  // reset to nullptr once the BaseObject is destroyed.
233
- // The API matches std::shared_ptr closely.
255
+ // The API matches std::shared_ptr closely. However, this class is not thread
256
+ // safe, that is, we can't have different BaseObjectPtrImpl instances in
257
+ // different threads referring to the same BaseObject instance.
234
258
  template <typename T, bool kIsWeak>
235
259
  class BaseObjectPtrImpl final {
236
260
  public:
@@ -281,6 +305,10 @@ using BaseObjectWeakPtr = BaseObjectPtrImpl<T, true>;
281
305
  template <typename T, typename... Args>
282
306
  inline BaseObjectPtr<T> MakeBaseObject(Args&&... args);
283
307
  // Create a BaseObject instance and return a pointer to it.
308
+ // This variant makes the object a weak GC root by default.
309
+ template <typename T, typename... Args>
310
+ inline BaseObjectWeakPtr<T> MakeWeakBaseObject(Args&&... args);
311
+ // Create a BaseObject instance and return a pointer to it.
284
312
  // This variant detaches the object by default, meaning that the caller fully
285
313
  // owns it, and once the last BaseObjectPtr to it is destroyed, the object
286
314
  // itself is also destroyed.