@encharm/cws 4.4.1 → 4.5.2

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 (606) hide show
  1. package/binding.gyp +1 -1
  2. package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
  3. package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
  4. package/dist/bindings/cws_darwin_arm64_node137.node +0 -0
  5. package/dist/bindings/cws_linux_arm64_node115.node +0 -0
  6. package/dist/bindings/cws_linux_arm64_node127.node +0 -0
  7. package/dist/bindings/cws_linux_x64_node115.node +0 -0
  8. package/dist/bindings/cws_linux_x64_node127.node +0 -0
  9. package/dist/bindings/cws_linux_x64_node137.node +0 -0
  10. package/dist/bindings/cws_win32_x64_node108.node +0 -0
  11. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  12. package/dist/bindings/cws_win32_x64_node127.node +0 -0
  13. package/dist/bindings/cws_win32_x64_node83.node +0 -0
  14. package/dist/bindings/cws_win32_x64_node93.node +0 -0
  15. package/package.json +1 -1
  16. package/src/Addon.h +13 -23
  17. package/src/Socket.h +0 -1
  18. package/src/headers/22/acorn_version.h +6 -0
  19. package/src/headers/22/aliased_buffer-inl.h +243 -0
  20. package/src/headers/22/aliased_buffer.h +206 -0
  21. package/src/headers/{18 → 22}/async_wrap-inl.h +8 -6
  22. package/src/headers/{18 → 22}/async_wrap.h +65 -59
  23. package/src/headers/{18 → 22}/base_object-inl.h +57 -117
  24. package/src/headers/{18 → 22}/base_object.h +58 -30
  25. package/src/headers/22/base_object_types.h +74 -0
  26. package/src/headers/22/blob_serializer_deserializer-inl.h +385 -0
  27. package/src/headers/22/blob_serializer_deserializer.h +132 -0
  28. package/src/headers/{16 → 22}/callback_queue.h +1 -0
  29. package/src/headers/{16 → 22}/cares_wrap.h +27 -20
  30. package/src/headers/22/cjs_module_lexer_version.h +6 -0
  31. package/src/headers/22/cleanup_queue-inl.h +62 -0
  32. package/src/headers/22/cleanup_queue.h +85 -0
  33. package/src/headers/22/compile_cache.h +104 -0
  34. package/src/headers/{18 → 22}/crypto/crypto_clienthello.h +1 -1
  35. package/src/headers/{18 → 22}/crypto/crypto_context.h +31 -7
  36. package/src/headers/{18 → 22}/crypto/crypto_keys.h +118 -148
  37. package/src/headers/{18 → 22}/crypto/crypto_tls.h +20 -5
  38. package/src/headers/{18 → 22}/crypto/crypto_util.h +219 -263
  39. package/src/headers/22/crypto/ncrypto.h +752 -0
  40. package/src/headers/{16 → 22}/debug_utils-inl.h +15 -7
  41. package/src/headers/{18 → 22}/debug_utils.h +25 -19
  42. package/src/headers/22/encoding_binding.h +59 -0
  43. package/src/headers/{14 → 22}/env-inl.h +276 -409
  44. package/src/headers/22/env.h +1266 -0
  45. package/src/headers/22/env_properties.h +497 -0
  46. package/src/headers/{18 → 22}/handle_wrap.h +2 -0
  47. package/src/headers/{18 → 22}/histogram.h +88 -48
  48. package/src/headers/{16 → 22}/inspector_agent.h +17 -1
  49. package/src/headers/{16 → 22}/inspector_profiler.h +15 -13
  50. package/src/headers/22/js_native_api.h +619 -0
  51. package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
  52. package/src/headers/22/js_native_api_v8.h +485 -0
  53. package/src/headers/{18 → 22}/js_native_api_v8_internals.h +6 -0
  54. package/src/headers/22/json_parser.h +40 -0
  55. package/src/headers/{16 → 22}/json_utils.h +19 -8
  56. package/src/headers/{18 → 22}/memory_tracker-inl.h +16 -13
  57. package/src/headers/{14 → 22}/memory_tracker.h +13 -8
  58. package/src/headers/{16 → 22}/module_wrap.h +49 -19
  59. package/src/headers/22/ncrypto/ncrypto.h +752 -0
  60. package/src/headers/{18 → 22}/node.h +465 -68
  61. package/src/headers/{18 → 22}/node_api.h +66 -81
  62. package/src/headers/{18 → 22}/node_api_internals.h +8 -4
  63. package/src/headers/{18 → 22}/node_api_types.h +5 -0
  64. package/src/headers/22/node_binding.h +154 -0
  65. package/src/headers/{18 → 22}/node_blob.h +46 -78
  66. package/src/headers/{18 → 22}/node_bob-inl.h +1 -2
  67. package/src/headers/{18 → 22}/node_bob.h +2 -6
  68. package/src/headers/{18 → 22}/node_buffer.h +1 -1
  69. package/src/headers/22/node_builtins.h +220 -0
  70. package/src/headers/{18 → 22}/node_constants.h +3 -5
  71. package/src/headers/22/node_context_data.h +168 -0
  72. package/src/headers/22/node_contextify.h +199 -0
  73. package/src/headers/{16 → 22}/node_crypto.h +1 -2
  74. package/src/headers/22/node_dotenv.h +45 -0
  75. package/src/headers/{18 → 22}/node_errors.h +86 -27
  76. package/src/headers/22/node_exit_code.h +54 -0
  77. package/src/headers/22/node_external_reference.h +249 -0
  78. package/src/headers/{18 → 22}/node_file-inl.h +127 -30
  79. package/src/headers/{16 → 22}/node_file.h +122 -11
  80. package/src/headers/{18 → 22}/node_http2.h +28 -11
  81. package/src/headers/{16 → 22}/node_http2_state.h +34 -25
  82. package/src/headers/{18 → 22}/node_http_common-inl.h +2 -1
  83. package/src/headers/{18 → 22}/node_http_common.h +56 -55
  84. package/src/headers/{16 → 22}/node_i18n.h +5 -18
  85. package/src/headers/{18 → 22}/node_internals.h +121 -59
  86. package/src/headers/{18 → 22}/node_main_instance.h +4 -31
  87. package/src/headers/{18 → 22}/node_messaging.h +27 -10
  88. package/src/headers/{18 → 22}/node_metadata.h +23 -1
  89. package/src/headers/{18 → 22}/node_options-inl.h +24 -11
  90. package/src/headers/{18 → 22}/node_options.h +124 -39
  91. package/src/headers/{18 → 22}/node_perf.h +0 -2
  92. package/src/headers/{18 → 22}/node_perf_common.h +20 -9
  93. package/src/headers/{18 → 22}/node_platform.h +11 -5
  94. package/src/headers/{18 → 22}/node_process.h +26 -14
  95. package/src/headers/22/node_realm-inl.h +145 -0
  96. package/src/headers/22/node_realm.h +184 -0
  97. package/src/headers/{16 → 22}/node_report.h +13 -17
  98. package/src/headers/{16 → 22}/node_revert.h +3 -3
  99. package/src/headers/{16 → 22}/node_root_certs.h +902 -461
  100. package/src/headers/22/node_sea.h +64 -0
  101. package/src/headers/22/node_shadow_realm.h +46 -0
  102. package/src/headers/22/node_snapshot_builder.h +57 -0
  103. package/src/headers/22/node_snapshotable.h +174 -0
  104. package/src/headers/{18 → 22}/node_sockaddr.h +2 -2
  105. package/src/headers/{16 → 22}/node_stat_watcher.h +2 -1
  106. package/src/headers/22/node_threadsafe_cow-inl.h +54 -0
  107. package/src/headers/22/node_threadsafe_cow.h +105 -0
  108. package/src/headers/22/node_union_bytes.h +81 -0
  109. package/src/headers/22/node_url.h +96 -0
  110. package/src/headers/22/node_v8.h +77 -0
  111. package/src/headers/{14 → 22}/node_v8_platform-inl.h +17 -6
  112. package/src/headers/{16 → 22}/node_version.h +21 -9
  113. package/src/headers/22/node_wasi.h +185 -0
  114. package/src/headers/{14 → 22}/node_watchdog.h +2 -0
  115. package/src/headers/{18 → 22}/node_worker.h +7 -2
  116. package/src/headers/22/permission/child_process_permission.h +31 -0
  117. package/src/headers/22/permission/fs_permission.h +167 -0
  118. package/src/headers/22/permission/inspector_permission.h +31 -0
  119. package/src/headers/22/permission/permission.h +99 -0
  120. package/src/headers/22/permission/permission_base.h +60 -0
  121. package/src/headers/22/permission/wasi_permission.h +31 -0
  122. package/src/headers/22/permission/worker_permission.h +31 -0
  123. package/src/headers/{16 → 22}/req_wrap-inl.h +7 -6
  124. package/src/headers/{14 → 22}/spawn_sync.h +3 -3
  125. package/src/headers/{18 → 22}/stream_base-inl.h +0 -135
  126. package/src/headers/{18 → 22}/stream_base.h +35 -16
  127. package/src/headers/{18 → 22}/stream_pipe.h +3 -4
  128. package/src/headers/{16 → 22}/stream_wrap.h +2 -1
  129. package/src/headers/{18 → 22}/string_bytes.h +5 -14
  130. package/src/headers/{14 → 22}/string_decoder-inl.h +0 -6
  131. package/src/headers/{16 → 22}/string_decoder.h +0 -1
  132. package/src/headers/{18 → 22}/tcp_wrap.h +1 -1
  133. package/src/headers/{18 → 22}/threadpoolwork-inl.h +14 -1
  134. package/src/headers/22/timers.h +76 -0
  135. package/src/headers/{18 → 22}/tracing/trace_event.h +7 -5
  136. package/src/headers/{16 → 22}/udp_wrap.h +8 -5
  137. package/src/headers/22/undici_version.h +6 -0
  138. package/src/headers/{18 → 22}/util-inl.h +97 -127
  139. package/src/headers/{18 → 22}/util.h +293 -106
  140. package/src/headers/{18 → 22}/v8-fast-api-calls.h +103 -58
  141. package/src/headers/24/acorn_version.h +6 -0
  142. package/src/headers/24/addon_permission.h +31 -0
  143. package/src/headers/{16/tracing → 24}/agent.h +1 -1
  144. package/src/headers/24/aliased_buffer-inl.h +244 -0
  145. package/src/headers/24/aliased_buffer.h +206 -0
  146. package/src/headers/24/amaro_version.h +6 -0
  147. package/src/headers/24/application.h +165 -0
  148. package/src/headers/24/async_context_frame.h +33 -0
  149. package/src/headers/{14 → 24}/async_wrap-inl.h +8 -6
  150. package/src/headers/{16 → 24}/async_wrap.h +86 -88
  151. package/src/headers/{16 → 24}/base_object-inl.h +75 -119
  152. package/src/headers/{16 → 24}/base_object.h +84 -40
  153. package/src/headers/24/base_object_types.h +74 -0
  154. package/src/headers/24/bindingdata.h +272 -0
  155. package/src/headers/24/blob_serializer_deserializer-inl.h +385 -0
  156. package/src/headers/24/blob_serializer_deserializer.h +132 -0
  157. package/src/headers/{18 → 24}/callback_queue.h +1 -0
  158. package/src/headers/{18 → 24}/cares_wrap.h +68 -144
  159. package/src/headers/24/child_process_permission.h +31 -0
  160. package/src/headers/24/cid.h +127 -0
  161. package/src/headers/24/cjs_module_lexer_version.h +6 -0
  162. package/src/headers/24/cleanup_queue-inl.h +36 -0
  163. package/src/headers/24/cleanup_queue.h +79 -0
  164. package/src/headers/24/compile_cache.h +113 -0
  165. package/src/headers/24/cppgc_helpers-inl.h +65 -0
  166. package/src/headers/24/cppgc_helpers.h +162 -0
  167. package/src/headers/24/crypto/crypto_aes.h +97 -0
  168. package/src/headers/24/crypto/crypto_argon2.h +86 -0
  169. package/src/headers/{16 → 24}/crypto/crypto_bio.h +8 -9
  170. package/src/headers/24/crypto/crypto_chacha20_poly1305.h +64 -0
  171. package/src/headers/{18 → 24}/crypto/crypto_cipher.h +48 -58
  172. package/src/headers/{16 → 24}/crypto/crypto_clienthello-inl.h +2 -2
  173. package/src/headers/{16 → 24}/crypto/crypto_clienthello.h +1 -1
  174. package/src/headers/24/crypto/crypto_common.h +48 -0
  175. package/src/headers/{16 → 24}/crypto/crypto_context.h +46 -22
  176. package/src/headers/{18 → 24}/crypto/crypto_dh.h +27 -57
  177. package/src/headers/{18 → 24}/crypto/crypto_dsa.h +7 -34
  178. package/src/headers/{18 → 24}/crypto/crypto_ec.h +42 -49
  179. package/src/headers/{18 → 24}/crypto/crypto_hash.h +11 -11
  180. package/src/headers/{18 → 24}/crypto/crypto_hkdf.h +10 -14
  181. package/src/headers/{18 → 24}/crypto/crypto_hmac.h +11 -13
  182. package/src/headers/24/crypto/crypto_kem.h +113 -0
  183. package/src/headers/{18 → 24}/crypto/crypto_keygen.h +59 -74
  184. package/src/headers/{16 → 24}/crypto/crypto_keys.h +134 -154
  185. package/src/headers/24/crypto/crypto_ml_dsa.h +21 -0
  186. package/src/headers/{18 → 24}/crypto/crypto_pbkdf2.h +9 -11
  187. package/src/headers/{18 → 24}/crypto/crypto_random.h +28 -34
  188. package/src/headers/{18 → 24}/crypto/crypto_rsa.h +30 -35
  189. package/src/headers/{18 → 24}/crypto/crypto_scrypt.h +8 -10
  190. package/src/headers/{18 → 24}/crypto/crypto_sig.h +36 -48
  191. package/src/headers/{16 → 24}/crypto/crypto_tls.h +35 -18
  192. package/src/headers/{16 → 24}/crypto/crypto_util.h +183 -321
  193. package/src/headers/24/crypto/crypto_x509.h +140 -0
  194. package/src/headers/24/data.h +148 -0
  195. package/src/headers/{14 → 24}/debug_utils-inl.h +17 -8
  196. package/src/headers/{16 → 24}/debug_utils.h +31 -22
  197. package/src/headers/24/defs.h +254 -0
  198. package/src/headers/24/embedded_data.h +17 -0
  199. package/src/headers/24/encoding_binding.h +60 -0
  200. package/src/headers/24/endpoint.h +421 -0
  201. package/src/headers/{16 → 24}/env-inl.h +198 -540
  202. package/src/headers/24/env.h +1257 -0
  203. package/src/headers/24/env_properties.h +561 -0
  204. package/src/headers/24/fs_permission.h +167 -0
  205. package/src/headers/{16 → 24}/handle_wrap.h +4 -2
  206. package/src/headers/{16 → 24}/histogram-inl.h +34 -15
  207. package/src/headers/24/histogram.h +279 -0
  208. package/src/headers/24/http3.h +44 -0
  209. package/src/headers/{18 → 24}/inspector_agent.h +23 -2
  210. package/src/headers/24/inspector_permission.h +31 -0
  211. package/src/headers/{18 → 24}/inspector_profiler.h +15 -15
  212. package/src/headers/24/io_agent.h +30 -0
  213. package/src/headers/{18 → 24}/js_native_api.h +74 -30
  214. package/src/headers/{16 → 24}/js_native_api_types.h +61 -10
  215. package/src/headers/{18 → 24}/js_native_api_v8.h +205 -160
  216. package/src/headers/{16 → 24}/js_native_api_v8_internals.h +12 -6
  217. package/src/headers/24/json_parser.h +40 -0
  218. package/src/headers/{18 → 24}/json_utils.h +19 -8
  219. package/src/headers/24/logstream.h +81 -0
  220. package/src/headers/24/main_thread_interface.h +116 -0
  221. package/src/headers/{16 → 24}/memory_tracker-inl.h +115 -17
  222. package/src/headers/{16 → 24}/memory_tracker.h +58 -9
  223. package/src/headers/24/module_wrap.h +229 -0
  224. package/src/headers/24/ncrypto.h +1625 -0
  225. package/src/headers/24/network_agent.h +118 -0
  226. package/src/headers/24/network_inspector.h +45 -0
  227. package/src/headers/24/network_resource_manager.h +29 -0
  228. package/src/headers/{16 → 24}/node.h +560 -72
  229. package/src/headers/24/node_api.h +269 -0
  230. package/src/headers/24/node_api_internals.h +46 -0
  231. package/src/headers/{16 → 24}/node_api_types.h +13 -11
  232. package/src/headers/24/node_binding.h +163 -0
  233. package/src/headers/{16 → 24}/node_blob.h +46 -78
  234. package/src/headers/{16 → 24}/node_bob-inl.h +1 -2
  235. package/src/headers/{16 → 24}/node_bob.h +2 -6
  236. package/src/headers/{14 → 24}/node_buffer.h +1 -1
  237. package/src/headers/24/node_builtins.h +223 -0
  238. package/src/headers/24/node_config_file.h +65 -0
  239. package/src/headers/{14 → 24}/node_constants.h +3 -5
  240. package/src/headers/24/node_context_data.h +168 -0
  241. package/src/headers/24/node_contextify.h +261 -0
  242. package/src/headers/{18 → 24}/node_crypto.h +7 -2
  243. package/src/headers/24/node_debug.h +25 -0
  244. package/src/headers/24/node_dotenv.h +45 -0
  245. package/src/headers/{16 → 24}/node_errors.h +146 -32
  246. package/src/headers/24/node_exit_code.h +54 -0
  247. package/src/headers/{18 → 24}/node_external_reference.h +44 -22
  248. package/src/headers/{16 → 24}/node_file-inl.h +156 -50
  249. package/src/headers/{18 → 24}/node_file.h +129 -15
  250. package/src/headers/{16 → 24}/node_http2.h +53 -18
  251. package/src/headers/{14 → 24}/node_http2_state.h +35 -25
  252. package/src/headers/{16 → 24}/node_http_common-inl.h +8 -10
  253. package/src/headers/{16 → 24}/node_http_common.h +63 -59
  254. package/src/headers/{18 → 24}/node_i18n.h +5 -18
  255. package/src/headers/{16 → 24}/node_internals.h +131 -76
  256. package/src/headers/24/node_json.h +24 -0
  257. package/src/headers/24/node_large_page.h +34 -0
  258. package/src/headers/24/node_locks.h +180 -0
  259. package/src/headers/{14 → 24}/node_main_instance.h +15 -44
  260. package/src/headers/{16 → 24}/node_mem-inl.h +7 -7
  261. package/src/headers/{16 → 24}/node_messaging.h +27 -11
  262. package/src/headers/{16 → 24}/node_metadata.h +44 -2
  263. package/src/headers/24/node_modules.h +93 -0
  264. package/src/headers/{16 → 24}/node_options-inl.h +93 -46
  265. package/src/headers/{16 → 24}/node_options.h +251 -63
  266. package/src/headers/{16 → 24}/node_perf.h +6 -25
  267. package/src/headers/{16 → 24}/node_perf_common.h +23 -10
  268. package/src/headers/24/node_platform.h +286 -0
  269. package/src/headers/24/node_process.h +111 -0
  270. package/src/headers/24/node_realm-inl.h +153 -0
  271. package/src/headers/24/node_realm.h +236 -0
  272. package/src/headers/{18 → 24}/node_report.h +13 -17
  273. package/src/headers/{18 → 24}/node_revert.h +3 -3
  274. package/src/headers/{18 → 24}/node_root_certs.h +1010 -710
  275. package/src/headers/24/node_sea.h +74 -0
  276. package/src/headers/24/node_shadow_realm.h +46 -0
  277. package/src/headers/24/node_snapshot_builder.h +57 -0
  278. package/src/headers/24/node_snapshotable.h +174 -0
  279. package/src/headers/{16 → 24}/node_sockaddr-inl.h +11 -20
  280. package/src/headers/{16 → 24}/node_sockaddr.h +9 -20
  281. package/src/headers/24/node_sqlite.h +270 -0
  282. package/src/headers/{18 → 24}/node_stat_watcher.h +2 -1
  283. package/src/headers/24/node_string.h +101 -0
  284. package/src/headers/24/node_task_runner.h +92 -0
  285. package/src/headers/24/node_threadsafe_cow-inl.h +54 -0
  286. package/src/headers/24/node_threadsafe_cow.h +105 -0
  287. package/src/headers/24/node_union_bytes.h +81 -0
  288. package/src/headers/24/node_url.h +101 -0
  289. package/src/headers/24/node_url_pattern.h +118 -0
  290. package/src/headers/24/node_v8.h +77 -0
  291. package/src/headers/{18 → 24}/node_v8_platform-inl.h +22 -31
  292. package/src/headers/{18 → 24}/node_version.h +18 -6
  293. package/src/headers/24/node_wasi.h +185 -0
  294. package/src/headers/24/node_wasm_web_api.h +55 -0
  295. package/src/headers/{18 → 24}/node_watchdog.h +2 -0
  296. package/src/headers/24/node_webstorage.h +60 -0
  297. package/src/headers/{16 → 24}/node_worker.h +24 -10
  298. package/src/headers/24/packet.h +155 -0
  299. package/src/headers/24/path.h +33 -0
  300. package/src/headers/24/permission/addon_permission.h +31 -0
  301. package/src/headers/24/permission/child_process_permission.h +31 -0
  302. package/src/headers/24/permission/fs_permission.h +167 -0
  303. package/src/headers/24/permission/inspector_permission.h +31 -0
  304. package/src/headers/24/permission/permission.h +100 -0
  305. package/src/headers/24/permission/permission_base.h +65 -0
  306. package/src/headers/24/permission/wasi_permission.h +31 -0
  307. package/src/headers/24/permission/worker_permission.h +31 -0
  308. package/src/headers/24/permission.h +100 -0
  309. package/src/headers/24/permission_base.h +65 -0
  310. package/src/headers/24/preferredaddress.h +72 -0
  311. package/src/headers/24/protocol_helper.h +27 -0
  312. package/src/headers/24/queue.h +306 -0
  313. package/src/headers/{18 → 24}/req_wrap-inl.h +12 -6
  314. package/src/headers/{16 → 24}/req_wrap.h +3 -1
  315. package/src/headers/24/runtime_agent.h +41 -0
  316. package/src/headers/24/session.h +528 -0
  317. package/src/headers/24/sessionticket.h +108 -0
  318. package/src/headers/{18 → 24}/spawn_sync.h +9 -8
  319. package/src/headers/{16 → 24}/stream_base-inl.h +3 -133
  320. package/src/headers/{16 → 24}/stream_base.h +43 -19
  321. package/src/headers/{16 → 24}/stream_pipe.h +7 -4
  322. package/src/headers/{18 → 24}/stream_wrap.h +2 -3
  323. package/src/headers/24/streams.h +370 -0
  324. package/src/headers/{16 → 24}/string_bytes.h +8 -21
  325. package/src/headers/{18 → 24}/string_decoder-inl.h +0 -6
  326. package/src/headers/{18 → 24}/string_decoder.h +0 -1
  327. package/src/headers/24/target_agent.h +75 -0
  328. package/src/headers/{16 → 24}/tcp_wrap.h +3 -1
  329. package/src/headers/{14 → 24}/threadpoolwork-inl.h +14 -1
  330. package/src/headers/24/timer_wrap-inl.h +32 -0
  331. package/src/headers/{16 → 24}/timer_wrap.h +7 -4
  332. package/src/headers/24/timers.h +75 -0
  333. package/src/headers/24/tlscontext.h +228 -0
  334. package/src/headers/24/tokens.h +256 -0
  335. package/src/headers/{14/tracing → 24}/trace_event.h +7 -5
  336. package/src/headers/24/traced_value.h +129 -0
  337. package/src/headers/24/tracing_agent.h +43 -0
  338. package/src/headers/24/transportparams.h +166 -0
  339. package/src/headers/{16 → 24}/tty_wrap.h +0 -1
  340. package/src/headers/{18 → 24}/udp_wrap.h +8 -5
  341. package/src/headers/24/undici_version.h +6 -0
  342. package/src/headers/{16 → 24}/util-inl.h +267 -131
  343. package/src/headers/{16 → 24}/util.h +338 -146
  344. package/src/headers/24/v8-external-memory-accounter.h +60 -0
  345. package/src/headers/24/v8-fast-api-calls.h +819 -0
  346. package/src/headers/24/v8-inspector.h +426 -0
  347. package/src/headers/24/wasi_permission.h +31 -0
  348. package/src/headers/24/worker_agent.h +40 -0
  349. package/src/headers/24/worker_inspector.h +124 -0
  350. package/src/headers/24/worker_permission.h +31 -0
  351. package/src/headers/24/zlib_version.h +6 -0
  352. package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
  353. package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
  354. package/dist/bindings/cws_darwin_x64_node83.node +0 -0
  355. package/dist/bindings/cws_darwin_x64_node93.node +0 -0
  356. package/dist/bindings/cws_linux_arm64_node83.node +0 -0
  357. package/dist/bindings/cws_linux_arm64_node93.node +0 -0
  358. package/dist/bindings/cws_linux_x64_node83.node +0 -0
  359. package/dist/bindings/cws_linux_x64_node93.node +0 -0
  360. package/src/headers/14/aliased_buffer.h +0 -263
  361. package/src/headers/14/allocated_buffer-inl.h +0 -110
  362. package/src/headers/14/allocated_buffer.h +0 -73
  363. package/src/headers/14/async_wrap.h +0 -230
  364. package/src/headers/14/base64.h +0 -183
  365. package/src/headers/14/base_object-inl.h +0 -371
  366. package/src/headers/14/base_object.h +0 -281
  367. package/src/headers/14/callback_queue-inl.h +0 -97
  368. package/src/headers/14/callback_queue.h +0 -78
  369. package/src/headers/14/debug_utils.h +0 -181
  370. package/src/headers/14/env.h +0 -1388
  371. package/src/headers/14/handle_wrap.h +0 -117
  372. package/src/headers/14/histogram-inl.h +0 -83
  373. package/src/headers/14/histogram.h +0 -98
  374. package/src/headers/14/inspector_agent.h +0 -149
  375. package/src/headers/14/inspector_profiler.h +0 -137
  376. package/src/headers/14/js_native_api.h +0 -544
  377. package/src/headers/14/js_native_api_types.h +0 -143
  378. package/src/headers/14/js_native_api_v8.h +0 -301
  379. package/src/headers/14/js_native_api_v8_internals.h +0 -38
  380. package/src/headers/14/json_utils.h +0 -161
  381. package/src/headers/14/memory_tracker-inl.h +0 -355
  382. package/src/headers/14/module_wrap.h +0 -99
  383. package/src/headers/14/node.h +0 -1032
  384. package/src/headers/14/node_api.h +0 -255
  385. package/src/headers/14/node_api_types.h +0 -44
  386. package/src/headers/14/node_binding.h +0 -99
  387. package/src/headers/14/node_context_data.h +0 -44
  388. package/src/headers/14/node_contextify.h +0 -161
  389. package/src/headers/14/node_crypto.h +0 -865
  390. package/src/headers/14/node_crypto_bio.h +0 -195
  391. package/src/headers/14/node_crypto_clienthello-inl.h +0 -91
  392. package/src/headers/14/node_crypto_clienthello.h +0 -132
  393. package/src/headers/14/node_crypto_common.h +0 -138
  394. package/src/headers/14/node_crypto_groups.h +0 -415
  395. package/src/headers/14/node_dtrace.h +0 -86
  396. package/src/headers/14/node_errors.h +0 -214
  397. package/src/headers/14/node_file-inl.h +0 -306
  398. package/src/headers/14/node_file.h +0 -417
  399. package/src/headers/14/node_http2.h +0 -1191
  400. package/src/headers/14/node_http_common-inl.h +0 -194
  401. package/src/headers/14/node_http_common.h +0 -529
  402. package/src/headers/14/node_i18n.h +0 -144
  403. package/src/headers/14/node_internals.h +0 -405
  404. package/src/headers/14/node_mem.h +0 -45
  405. package/src/headers/14/node_messaging.h +0 -303
  406. package/src/headers/14/node_metadata.h +0 -109
  407. package/src/headers/14/node_mutex.h +0 -247
  408. package/src/headers/14/node_native_module.h +0 -101
  409. package/src/headers/14/node_native_module_env.h +0 -66
  410. package/src/headers/14/node_options-inl.h +0 -451
  411. package/src/headers/14/node_options.h +0 -481
  412. package/src/headers/14/node_perf.h +0 -181
  413. package/src/headers/14/node_perf_common.h +0 -97
  414. package/src/headers/14/node_platform.h +0 -189
  415. package/src/headers/14/node_process.h +0 -40
  416. package/src/headers/14/node_report.h +0 -47
  417. package/src/headers/14/node_revert.h +0 -72
  418. package/src/headers/14/node_root_certs.h +0 -3458
  419. package/src/headers/14/node_sockaddr-inl.h +0 -170
  420. package/src/headers/14/node_sockaddr.h +0 -123
  421. package/src/headers/14/node_stat_watcher.h +0 -70
  422. package/src/headers/14/node_union_bytes.h +0 -103
  423. package/src/headers/14/node_url.h +0 -188
  424. package/src/headers/14/node_version.h +0 -98
  425. package/src/headers/14/node_wasi.h +0 -108
  426. package/src/headers/14/node_win32_etw_provider-inl.h +0 -287
  427. package/src/headers/14/node_win32_etw_provider.h +0 -99
  428. package/src/headers/14/node_worker.h +0 -141
  429. package/src/headers/14/pipe_wrap.h +0 -78
  430. package/src/headers/14/req_wrap-inl.h +0 -170
  431. package/src/headers/14/req_wrap.h +0 -77
  432. package/src/headers/14/stream_base-inl.h +0 -275
  433. package/src/headers/14/stream_base.h +0 -434
  434. package/src/headers/14/stream_pipe.h +0 -73
  435. package/src/headers/14/stream_wrap.h +0 -130
  436. package/src/headers/14/string_bytes.h +0 -129
  437. package/src/headers/14/string_decoder.h +0 -50
  438. package/src/headers/14/string_search.h +0 -638
  439. package/src/headers/14/tcp_wrap.h +0 -101
  440. package/src/headers/14/tls_wrap.h +0 -222
  441. package/src/headers/14/tracing/agent.h +0 -195
  442. package/src/headers/14/tracing/traced_value.h +0 -70
  443. package/src/headers/14/tty_wrap.h +0 -64
  444. package/src/headers/14/udp_wrap.h +0 -227
  445. package/src/headers/14/util-inl.h +0 -566
  446. package/src/headers/14/util.h +0 -804
  447. package/src/headers/14/v8abbr.h +0 -124
  448. package/src/headers/16/aliased_buffer.h +0 -315
  449. package/src/headers/16/allocated_buffer-inl.h +0 -110
  450. package/src/headers/16/allocated_buffer.h +0 -73
  451. package/src/headers/16/async_wrap-inl.h +0 -94
  452. package/src/headers/16/base64-inl.h +0 -189
  453. package/src/headers/16/base64.h +0 -69
  454. package/src/headers/16/crypto/crypto_aes.h +0 -89
  455. package/src/headers/16/crypto/crypto_cipher.h +0 -286
  456. package/src/headers/16/crypto/crypto_common.h +0 -187
  457. package/src/headers/16/crypto/crypto_dh.h +0 -157
  458. package/src/headers/16/crypto/crypto_dsa.h +0 -76
  459. package/src/headers/16/crypto/crypto_ec.h +0 -169
  460. package/src/headers/16/crypto/crypto_groups.h +0 -415
  461. package/src/headers/16/crypto/crypto_hash.h +0 -89
  462. package/src/headers/16/crypto/crypto_hkdf.h +0 -66
  463. package/src/headers/16/crypto/crypto_hmac.h +0 -94
  464. package/src/headers/16/crypto/crypto_keygen.h +0 -301
  465. package/src/headers/16/crypto/crypto_pbkdf2.h +0 -76
  466. package/src/headers/16/crypto/crypto_random.h +0 -130
  467. package/src/headers/16/crypto/crypto_rsa.h +0 -141
  468. package/src/headers/16/crypto/crypto_scrypt.h +0 -87
  469. package/src/headers/16/crypto/crypto_sig.h +0 -167
  470. package/src/headers/16/crypto/crypto_spkac.h +0 -20
  471. package/src/headers/16/crypto/crypto_timing.h +0 -20
  472. package/src/headers/16/crypto/crypto_x509.h +0 -141
  473. package/src/headers/16/env.h +0 -1629
  474. package/src/headers/16/histogram.h +0 -216
  475. package/src/headers/16/js_native_api.h +0 -561
  476. package/src/headers/16/js_native_api_v8.h +0 -451
  477. package/src/headers/16/node.d +0 -315
  478. package/src/headers/16/node.stp +0 -146
  479. package/src/headers/16/node_api.h +0 -275
  480. package/src/headers/16/node_api_internals.h +0 -30
  481. package/src/headers/16/node_binding.h +0 -99
  482. package/src/headers/16/node_buffer.h +0 -92
  483. package/src/headers/16/node_constants.h +0 -84
  484. package/src/headers/16/node_context_data.h +0 -44
  485. package/src/headers/16/node_contextify.h +0 -196
  486. package/src/headers/16/node_dtrace.h +0 -86
  487. package/src/headers/16/node_external_reference.h +0 -129
  488. package/src/headers/16/node_main_instance.h +0 -103
  489. package/src/headers/16/node_native_module.h +0 -101
  490. package/src/headers/16/node_native_module_env.h +0 -68
  491. package/src/headers/16/node_platform.h +0 -192
  492. package/src/headers/16/node_process.h +0 -43
  493. package/src/headers/16/node_provider.d +0 -80
  494. package/src/headers/16/node_snapshotable.h +0 -137
  495. package/src/headers/16/node_union_bytes.h +0 -103
  496. package/src/headers/16/node_url.h +0 -205
  497. package/src/headers/16/node_v8.h +0 -41
  498. package/src/headers/16/node_v8_platform-inl.h +0 -194
  499. package/src/headers/16/node_wasi.h +0 -108
  500. package/src/headers/16/node_watchdog.h +0 -152
  501. package/src/headers/16/node_win32_etw_provider-inl.h +0 -288
  502. package/src/headers/16/node_win32_etw_provider.h +0 -99
  503. package/src/headers/16/spawn_sync.h +0 -242
  504. package/src/headers/16/string_decoder-inl.h +0 -37
  505. package/src/headers/16/string_search.h +0 -638
  506. package/src/headers/16/threadpoolwork-inl.h +0 -57
  507. package/src/headers/16/tracing/node_trace_buffer.h +0 -83
  508. package/src/headers/16/tracing/node_trace_writer.h +0 -75
  509. package/src/headers/16/tracing/trace_event.h +0 -720
  510. package/src/headers/16/tracing/traced_value.h +0 -70
  511. package/src/headers/16/v8abbr.h +0 -123
  512. package/src/headers/16/v8ustack.d +0 -695
  513. package/src/headers/18/aliased_buffer.h +0 -315
  514. package/src/headers/18/aliased_struct-inl.h +0 -54
  515. package/src/headers/18/aliased_struct.h +0 -63
  516. package/src/headers/18/base64-inl.h +0 -189
  517. package/src/headers/18/base64.h +0 -69
  518. package/src/headers/18/connect_wrap.h +0 -26
  519. package/src/headers/18/connection_wrap.h +0 -30
  520. package/src/headers/18/crypto/crypto_aes.h +0 -89
  521. package/src/headers/18/crypto/crypto_bio.h +0 -194
  522. package/src/headers/18/crypto/crypto_clienthello-inl.h +0 -90
  523. package/src/headers/18/crypto/crypto_common.h +0 -151
  524. package/src/headers/18/crypto/crypto_groups.h +0 -415
  525. package/src/headers/18/crypto/crypto_x509.h +0 -143
  526. package/src/headers/18/debug_utils-inl.h +0 -223
  527. package/src/headers/18/diagnosticfilename-inl.h +0 -33
  528. package/src/headers/18/env-inl.h +0 -1308
  529. package/src/headers/18/env.h +0 -1667
  530. package/src/headers/18/inspector_io.h +0 -78
  531. package/src/headers/18/inspector_socket.h +0 -60
  532. package/src/headers/18/inspector_socket_server.h +0 -110
  533. package/src/headers/18/js_stream.h +0 -52
  534. package/src/headers/18/memory_tracker.h +0 -284
  535. package/src/headers/18/module_wrap.h +0 -116
  536. package/src/headers/18/node_binding.h +0 -99
  537. package/src/headers/18/node_context_data.h +0 -44
  538. package/src/headers/18/node_contextify.h +0 -196
  539. package/src/headers/18/node_dir.h +0 -52
  540. package/src/headers/18/node_dtrace.h +0 -86
  541. package/src/headers/18/node_http2_state.h +0 -149
  542. package/src/headers/18/node_mem-inl.h +0 -112
  543. package/src/headers/18/node_native_module.h +0 -109
  544. package/src/headers/18/node_native_module_env.h +0 -71
  545. package/src/headers/18/node_object_wrap.h +0 -132
  546. package/src/headers/18/node_snapshot_builder.h +0 -43
  547. package/src/headers/18/node_snapshotable.h +0 -130
  548. package/src/headers/18/node_union_bytes.h +0 -103
  549. package/src/headers/18/node_url.h +0 -205
  550. package/src/headers/18/node_v8.h +0 -41
  551. package/src/headers/18/node_wasi.h +0 -108
  552. package/src/headers/18/node_win32_etw_provider-inl.h +0 -288
  553. package/src/headers/18/node_win32_etw_provider.h +0 -99
  554. package/src/headers/18/string_search.h +0 -638
  555. package/src/headers/18/tracing/node_trace_buffer.h +0 -83
  556. package/src/headers/18/tracing/node_trace_writer.h +0 -75
  557. package/src/headers/18/tracing/trace_event_common.h +0 -1109
  558. package/src/headers/18/tracing/traced_value.h +0 -70
  559. package/src/headers/18/v8abbr.h +0 -123
  560. /package/src/headers/{14 → 22}/aliased_struct-inl.h +0 -0
  561. /package/src/headers/{14 → 22}/aliased_struct.h +0 -0
  562. /package/src/headers/{16 → 22}/callback_queue-inl.h +0 -0
  563. /package/src/headers/{14 → 22}/connect_wrap.h +0 -0
  564. /package/src/headers/{14 → 22}/connection_wrap.h +0 -0
  565. /package/src/headers/{14 → 22}/diagnosticfilename-inl.h +0 -0
  566. /package/src/headers/{18 → 22}/histogram-inl.h +0 -0
  567. /package/src/headers/{14 → 22}/inspector_io.h +0 -0
  568. /package/src/headers/{14 → 22}/inspector_socket.h +0 -0
  569. /package/src/headers/{14 → 22}/inspector_socket_server.h +0 -0
  570. /package/src/headers/{14 → 22}/js_stream.h +0 -0
  571. /package/src/headers/{14 → 22}/node_dir.h +0 -0
  572. /package/src/headers/{14 → 22}/node_mem-inl.h +0 -0
  573. /package/src/headers/{16 → 22}/node_mem.h +0 -0
  574. /package/src/headers/{16 → 22}/node_mutex.h +0 -0
  575. /package/src/headers/{14 → 22}/node_object_wrap.h +0 -0
  576. /package/src/headers/{16 → 22}/node_process-inl.h +0 -0
  577. /package/src/headers/{18 → 22}/node_sockaddr-inl.h +0 -0
  578. /package/src/headers/{18 → 22}/node_wasm_web_api.h +0 -0
  579. /package/src/headers/{16 → 22}/pipe_wrap.h +0 -0
  580. /package/src/headers/{18 → 22}/req_wrap.h +0 -0
  581. /package/src/headers/{18 → 22}/timer_wrap-inl.h +0 -0
  582. /package/src/headers/{18 → 22}/timer_wrap.h +0 -0
  583. /package/src/headers/{18 → 22}/tracing/agent.h +0 -0
  584. /package/src/headers/{14 → 22}/tracing/trace_event_common.h +0 -0
  585. /package/src/headers/{18 → 22}/tty_wrap.h +0 -0
  586. /package/src/headers/{16 → 24}/aliased_struct-inl.h +0 -0
  587. /package/src/headers/{16 → 24}/aliased_struct.h +0 -0
  588. /package/src/headers/{18 → 24}/callback_queue-inl.h +0 -0
  589. /package/src/headers/{16 → 24}/connect_wrap.h +0 -0
  590. /package/src/headers/{16 → 24}/connection_wrap.h +0 -0
  591. /package/src/headers/{18 → 24}/crypto/crypto_spkac.h +0 -0
  592. /package/src/headers/{18 → 24}/crypto/crypto_timing.h +0 -0
  593. /package/src/headers/{16 → 24}/diagnosticfilename-inl.h +0 -0
  594. /package/src/headers/{16 → 24}/inspector_io.h +0 -0
  595. /package/src/headers/{16 → 24}/inspector_socket.h +0 -0
  596. /package/src/headers/{16 → 24}/inspector_socket_server.h +0 -0
  597. /package/src/headers/{16 → 24}/js_stream.h +0 -0
  598. /package/src/headers/{16 → 24}/node_dir.h +0 -0
  599. /package/src/headers/{18 → 24}/node_mem.h +0 -0
  600. /package/src/headers/{18 → 24}/node_mutex.h +0 -0
  601. /package/src/headers/{16 → 24}/node_object_wrap.h +0 -0
  602. /package/src/headers/{18 → 24}/node_process-inl.h +0 -0
  603. /package/src/headers/{14/tracing → 24}/node_trace_buffer.h +0 -0
  604. /package/src/headers/{14/tracing → 24}/node_trace_writer.h +0 -0
  605. /package/src/headers/{18 → 24}/pipe_wrap.h +0 -0
  606. /package/src/headers/{16/tracing → 24}/trace_event_common.h +0 -0
@@ -32,6 +32,16 @@
32
32
  # define NODE_EXTERN __attribute__((visibility("default")))
33
33
  #endif
34
34
 
35
+ // Declarations annotated with NODE_EXTERN_PRIVATE do not form part of
36
+ // the public API. They are implementation details that can and will
37
+ // change between releases, even in semver patch releases. Do not use
38
+ // any such symbol in external code.
39
+ #ifdef NODE_SHARED_MODE
40
+ #define NODE_EXTERN_PRIVATE NODE_EXTERN
41
+ #else
42
+ #define NODE_EXTERN_PRIVATE
43
+ #endif
44
+
35
45
  #ifdef BUILDING_NODE_EXTENSION
36
46
  # undef BUILDING_V8_SHARED
37
47
  # undef BUILDING_UV_SHARED
@@ -57,7 +67,8 @@
57
67
  #endif
58
68
 
59
69
  #ifdef _WIN32
60
- # define SIGKILL 9
70
+ #define SIGQUIT 3
71
+ #define SIGKILL 9
61
72
  #endif
62
73
 
63
74
  #include "v8.h" // NOLINT(build/include_order)
@@ -65,8 +76,13 @@
65
76
  #include "v8-platform.h" // NOLINT(build/include_order)
66
77
  #include "node_version.h" // NODE_MODULE_VERSION
67
78
 
68
- #include <memory>
79
+ #define NAPI_EXPERIMENTAL
80
+ #include "node_api.h"
81
+
69
82
  #include <functional>
83
+ #include <memory>
84
+ #include <optional>
85
+ #include <ostream>
70
86
 
71
87
  // We cannot use __POSIX__ in this header because that's only defined when
72
88
  // building Node.js.
@@ -110,12 +126,12 @@
110
126
  // Forward-declare libuv loop
111
127
  struct uv_loop_s;
112
128
 
113
- struct napi_module;
114
-
115
129
  // Forward-declare these functions now to stop MSVS from becoming
116
130
  // terminally confused when it's done in node_internals.h
117
131
  namespace node {
118
132
 
133
+ struct SnapshotData;
134
+
119
135
  namespace tracing {
120
136
 
121
137
  class TracingController;
@@ -213,6 +229,96 @@ namespace node {
213
229
 
214
230
  class IsolateData;
215
231
  class Environment;
232
+ class MultiIsolatePlatform;
233
+ class InitializationResultImpl;
234
+
235
+ namespace ProcessInitializationFlags {
236
+ enum Flags : uint32_t {
237
+ kNoFlags = 0,
238
+ // Enable stdio inheritance, which is disabled by default.
239
+ // This flag is also implied by kNoStdioInitialization.
240
+ kEnableStdioInheritance = 1 << 0,
241
+ // Disable reading the NODE_OPTIONS environment variable.
242
+ kDisableNodeOptionsEnv = 1 << 1,
243
+ // Do not parse CLI options.
244
+ kDisableCLIOptions = 1 << 2,
245
+ // Do not initialize ICU.
246
+ kNoICU = 1 << 3,
247
+ // Do not modify stdio file descriptor or TTY state.
248
+ kNoStdioInitialization = 1 << 4,
249
+ // Do not register Node.js-specific signal handlers
250
+ // and reset other signal handlers to default state.
251
+ kNoDefaultSignalHandling = 1 << 5,
252
+ // Do not perform V8 initialization.
253
+ kNoInitializeV8 = 1 << 6,
254
+ // Do not initialize a default Node.js-provided V8 platform instance.
255
+ kNoInitializeNodeV8Platform = 1 << 7,
256
+ // Do not initialize OpenSSL config.
257
+ kNoInitOpenSSL = 1 << 8,
258
+ // Do not initialize Node.js debugging based on environment variables.
259
+ kNoParseGlobalDebugVariables = 1 << 9,
260
+ // Do not adjust OS resource limits for this process.
261
+ kNoAdjustResourceLimits = 1 << 10,
262
+ // Do not map code segments into large pages for this process.
263
+ kNoUseLargePages = 1 << 11,
264
+ // Skip printing output for --help, --version, --v8-options.
265
+ kNoPrintHelpOrVersionOutput = 1 << 12,
266
+ // Do not perform cppgc initialization. If set, the embedder must call
267
+ // cppgc::InitializeProcess() before creating a Node.js environment
268
+ // and call cppgc::ShutdownProcess() before process shutdown.
269
+ kNoInitializeCppgc = 1 << 13,
270
+ // Initialize the process for predictable snapshot generation.
271
+ kGeneratePredictableSnapshot = 1 << 14,
272
+
273
+ // Emulate the behavior of InitializeNodeWithArgs() when passing
274
+ // a flags argument to the InitializeOncePerProcess() replacement
275
+ // function.
276
+ kLegacyInitializeNodeWithArgsBehavior =
277
+ kNoStdioInitialization | kNoDefaultSignalHandling | kNoInitializeV8 |
278
+ kNoInitializeNodeV8Platform | kNoInitOpenSSL |
279
+ kNoParseGlobalDebugVariables | kNoAdjustResourceLimits |
280
+ kNoUseLargePages | kNoPrintHelpOrVersionOutput | kNoInitializeCppgc,
281
+ };
282
+ } // namespace ProcessInitializationFlags
283
+ namespace ProcessFlags = ProcessInitializationFlags; // Legacy alias.
284
+
285
+ namespace StopFlags {
286
+ enum Flags : uint32_t {
287
+ kNoFlags = 0,
288
+ // Do not explicitly terminate the Isolate
289
+ // when exiting the Environment.
290
+ kDoNotTerminateIsolate = 1 << 0,
291
+ };
292
+ } // namespace StopFlags
293
+
294
+ class NODE_EXTERN InitializationResult {
295
+ public:
296
+ virtual ~InitializationResult() = default;
297
+
298
+ // Returns a suggested process exit code.
299
+ virtual int exit_code() const = 0;
300
+
301
+ // Returns 'true' if initialization was aborted early due to errors.
302
+ virtual bool early_return() const = 0;
303
+
304
+ // Returns the parsed list of non-Node.js arguments.
305
+ virtual const std::vector<std::string>& args() const = 0;
306
+
307
+ // Returns the parsed list of Node.js arguments.
308
+ virtual const std::vector<std::string>& exec_args() const = 0;
309
+
310
+ // Returns an array of errors. Note that these may be warnings
311
+ // whose existence does not imply a non-zero exit code.
312
+ virtual const std::vector<std::string>& errors() const = 0;
313
+
314
+ // If kNoInitializeNodeV8Platform was not specified, the global Node.js
315
+ // platform instance.
316
+ virtual MultiIsolatePlatform* platform() const = 0;
317
+
318
+ private:
319
+ InitializationResult() = default;
320
+ friend class InitializationResultImpl;
321
+ };
216
322
 
217
323
  // TODO(addaleax): Officially deprecate this and replace it with something
218
324
  // better suited for a public embedder API.
@@ -220,21 +326,64 @@ NODE_EXTERN int Start(int argc, char* argv[]);
220
326
 
221
327
  // Tear down Node.js while it is running (there are active handles
222
328
  // in the loop and / or actively executing JavaScript code).
223
- NODE_EXTERN int Stop(Environment* env);
329
+ NODE_EXTERN int Stop(Environment* env,
330
+ StopFlags::Flags flags = StopFlags::kNoFlags);
224
331
 
225
332
  // Set up per-process state needed to run Node.js. This will consume arguments
226
333
  // from argv, fill exec_argv, and possibly add errors resulting from parsing
227
334
  // the arguments to `errors`. The return value is a suggested exit code for the
228
335
  // program; If it is 0, then initializing Node.js succeeded.
229
- NODE_EXTERN int InitializeNodeWithArgs(std::vector<std::string>* argv,
230
- std::vector<std::string>* exec_argv,
231
- std::vector<std::string>* errors);
336
+ // This runs a subset of the initialization performed by
337
+ // InitializeOncePerProcess(), which supersedes this function.
338
+ // The subset is roughly equivalent to the one given by
339
+ // `ProcessInitializationFlags::kLegacyInitializeNodeWithArgsBehavior`.
340
+ NODE_DEPRECATED("Use InitializeOncePerProcess() instead",
341
+ NODE_EXTERN int InitializeNodeWithArgs(
342
+ std::vector<std::string>* argv,
343
+ std::vector<std::string>* exec_argv,
344
+ std::vector<std::string>* errors,
345
+ ProcessInitializationFlags::Flags flags =
346
+ ProcessInitializationFlags::kNoFlags));
347
+
348
+ // Set up per-process state needed to run Node.js. This will consume arguments
349
+ // from args, and return information about the initialization success,
350
+ // including the arguments split into argv/exec_argv, a list of potential
351
+ // errors encountered during initialization, and a potential suggested
352
+ // exit code.
353
+ NODE_EXTERN std::shared_ptr<InitializationResult> InitializeOncePerProcess(
354
+ const std::vector<std::string>& args,
355
+ ProcessInitializationFlags::Flags flags =
356
+ ProcessInitializationFlags::kNoFlags);
357
+ // Undoes the initialization performed by InitializeOncePerProcess(),
358
+ // where cleanup is necessary.
359
+ NODE_EXTERN void TearDownOncePerProcess();
360
+ // Convenience overload for specifying multiple flags without having
361
+ // to worry about casts.
362
+ inline std::shared_ptr<InitializationResult> InitializeOncePerProcess(
363
+ const std::vector<std::string>& args,
364
+ std::initializer_list<ProcessInitializationFlags::Flags> list) {
365
+ uint64_t flags_accum = ProcessInitializationFlags::kNoFlags;
366
+ for (const auto flag : list) flags_accum |= static_cast<uint64_t>(flag);
367
+ return InitializeOncePerProcess(
368
+ args, static_cast<ProcessInitializationFlags::Flags>(flags_accum));
369
+ }
232
370
 
233
371
  enum OptionEnvvarSettings {
234
- kAllowedInEnvironment,
235
- kDisallowedInEnvironment
372
+ // Allow the options to be set via the environment variable, like
373
+ // `NODE_OPTIONS`.
374
+ kAllowedInEnvvar = 0,
375
+ // Disallow the options to be set via the environment variable, like
376
+ // `NODE_OPTIONS`.
377
+ kDisallowedInEnvvar = 1,
236
378
  };
237
379
 
380
+ // Process the arguments and set up the per-process options.
381
+ // If the `settings` is set as OptionEnvvarSettings::kAllowedInEnvvar, the
382
+ // options that are allowed in the environment variable are processed. Options
383
+ // that are disallowed to be set via environment variable are processed as
384
+ // errors.
385
+ // Otherwise all the options that are disallowed (and those are allowed) to be
386
+ // set via environment variable are processed.
238
387
  NODE_EXTERN int ProcessGlobalArgs(std::vector<std::string>* args,
239
388
  std::vector<std::string>* exec_args,
240
389
  std::vector<std::string>* errors,
@@ -298,8 +447,11 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
298
447
 
299
448
  // This function may only be called once per `Isolate`, and discard any
300
449
  // pending delayed tasks scheduled for that isolate.
301
- // This needs to be called right before calling `Isolate::Dispose()`.
450
+ // This needs to be called right after calling `Isolate::Dispose()`.
302
451
  virtual void UnregisterIsolate(v8::Isolate* isolate) = 0;
452
+ // This disposes, unregisters and frees up an isolate that's allocated using
453
+ // v8::Isolate::Allocate() in the correct order to prevent race conditions.
454
+ void DisposeIsolate(v8::Isolate* isolate);
303
455
 
304
456
  // The platform should call the passed function once all state associated
305
457
  // with the given isolate has been cleaned up. This can, but does not have to,
@@ -310,14 +462,16 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
310
462
 
311
463
  static std::unique_ptr<MultiIsolatePlatform> Create(
312
464
  int thread_pool_size,
313
- v8::TracingController* tracing_controller = nullptr);
465
+ v8::TracingController* tracing_controller = nullptr,
466
+ v8::PageAllocator* page_allocator = nullptr);
314
467
  };
315
468
 
316
469
  enum IsolateSettingsFlags {
317
470
  MESSAGE_LISTENER_WITH_ERROR_LEVEL = 1 << 0,
318
471
  DETAILED_SOURCE_POSITIONS_FOR_PROFILING = 1 << 1,
319
472
  SHOULD_NOT_SET_PROMISE_REJECTION_CALLBACK = 1 << 2,
320
- SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK = 1 << 3
473
+ SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK = 1 << 3,
474
+ ALLOW_MODIFY_CODE_GENERATION_FROM_STRINGS_CALLBACK = 0, /* legacy no-op */
321
475
  };
322
476
 
323
477
  struct IsolateSettings {
@@ -329,12 +483,101 @@ struct IsolateSettings {
329
483
  v8::Isolate::AbortOnUncaughtExceptionCallback
330
484
  should_abort_on_uncaught_exception_callback = nullptr;
331
485
  v8::FatalErrorCallback fatal_error_callback = nullptr;
486
+ v8::OOMErrorCallback oom_error_callback = nullptr;
332
487
  v8::PrepareStackTraceCallback prepare_stack_trace_callback = nullptr;
333
488
 
334
489
  // Miscellaneous callbacks
335
490
  v8::PromiseRejectCallback promise_reject_callback = nullptr;
336
491
  v8::AllowWasmCodeGenerationCallback
337
492
  allow_wasm_code_generation_callback = nullptr;
493
+ v8::ModifyCodeGenerationFromStringsCallback2
494
+ modify_code_generation_from_strings_callback = nullptr;
495
+
496
+ // When the settings is passed to NewIsolate():
497
+ // - If cpp_heap is not nullptr, this CppHeap will be used to create
498
+ // the isolate and its ownership will be passed to V8.
499
+ // - If this is nullptr, Node.js will create a CppHeap that will be
500
+ // owned by V8.
501
+ //
502
+ // When the settings is passed to SetIsolateUpForNode():
503
+ // cpp_heap will be ignored. Embedders must ensure that the
504
+ // v8::Isolate has a CppHeap attached while it's still used by
505
+ // Node.js, for example using v8::CreateParams.
506
+ //
507
+ // See https://issues.chromium.org/issues/42203693. In future version
508
+ // of V8, this CppHeap will be created by V8 if not provided.
509
+ v8::CppHeap* cpp_heap = nullptr;
510
+ };
511
+
512
+ // Represents a startup snapshot blob, e.g. created by passing
513
+ // --node-snapshot-main=entry.js to the configure script at build time,
514
+ // or by running Node.js with the --build-snapshot option.
515
+ //
516
+ // If used, the snapshot *must* have been built with the same Node.js
517
+ // version and V8 flags as the version that is currently running, and will
518
+ // be rejected otherwise.
519
+ // The same EmbedderSnapshotData instance *must* be passed to both
520
+ // `NewIsolate()` and `CreateIsolateData()`. The first `Environment` instance
521
+ // should be created with an empty `context` argument and will then
522
+ // use the main context included in the snapshot blob. It can be retrieved
523
+ // using `GetMainContext()`. `LoadEnvironment` can receive an empty
524
+ // `StartExecutionCallback` in this case.
525
+ // If V8 was configured with the shared-readonly-heap option, it requires
526
+ // all snapshots used to create `Isolate` instances to be identical.
527
+ // This option *must* be unset by embedders who wish to use the startup
528
+ // feature during the build step by passing the --disable-shared-readonly-heap
529
+ // flag to the configure script.
530
+ //
531
+ // The snapshot *must* be kept alive during the execution of the Isolate
532
+ // that was created using it.
533
+ //
534
+ // Snapshots are an *experimental* feature. In particular, the embedder API
535
+ // exposed through this class is subject to change or removal between Node.js
536
+ // versions, including possible API and ABI breakage.
537
+ class EmbedderSnapshotData {
538
+ public:
539
+ struct DeleteSnapshotData {
540
+ void operator()(const EmbedderSnapshotData*) const;
541
+ };
542
+ using Pointer =
543
+ std::unique_ptr<const EmbedderSnapshotData, DeleteSnapshotData>;
544
+
545
+ // Return an EmbedderSnapshotData object that refers to the built-in
546
+ // snapshot of Node.js. This can have been configured through e.g.
547
+ // --node-snapshot-main=entry.js.
548
+ static Pointer BuiltinSnapshotData();
549
+
550
+ // Return an EmbedderSnapshotData object that is based on an input file.
551
+ // Calling this method will consume but not close the FILE* handle.
552
+ // The FILE* handle can be closed immediately following this call.
553
+ // If the snapshot is invalid, this returns an empty pointer.
554
+ static Pointer FromFile(FILE* in);
555
+ static Pointer FromBlob(const std::vector<char>& in);
556
+ static Pointer FromBlob(std::string_view in);
557
+
558
+ // Write this EmbedderSnapshotData object to an output file.
559
+ // Calling this method will not close the FILE* handle.
560
+ // The FILE* handle can be closed immediately following this call.
561
+ void ToFile(FILE* out) const;
562
+ std::vector<char> ToBlob() const;
563
+
564
+ // Returns whether custom snapshots can be used. Currently, this always
565
+ // returns false since V8 enforces shared readonly-heap.
566
+ static bool CanUseCustomSnapshotPerIsolate();
567
+
568
+ EmbedderSnapshotData(const EmbedderSnapshotData&) = delete;
569
+ EmbedderSnapshotData& operator=(const EmbedderSnapshotData&) = delete;
570
+ EmbedderSnapshotData(EmbedderSnapshotData&&) = delete;
571
+ EmbedderSnapshotData& operator=(EmbedderSnapshotData&&) = delete;
572
+
573
+ protected:
574
+ EmbedderSnapshotData(const SnapshotData* impl, bool owns_impl);
575
+
576
+ private:
577
+ const SnapshotData* impl_;
578
+ bool owns_impl_;
579
+ friend struct SnapshotData;
580
+ friend class CommonEnvironmentSetup;
338
581
  };
339
582
 
340
583
  // Overriding IsolateSettings may produce unexpected behavior
@@ -350,13 +593,18 @@ NODE_EXTERN void SetIsolateUpForNode(v8::Isolate* isolate);
350
593
  // This is a convenience method equivalent to using SetIsolateCreateParams(),
351
594
  // Isolate::Allocate(), MultiIsolatePlatform::RegisterIsolate(),
352
595
  // Isolate::Initialize(), and SetIsolateUpForNode().
353
- NODE_EXTERN v8::Isolate* NewIsolate(ArrayBufferAllocator* allocator,
354
- struct uv_loop_s* event_loop,
355
- MultiIsolatePlatform* platform = nullptr);
596
+ NODE_EXTERN v8::Isolate* NewIsolate(
597
+ ArrayBufferAllocator* allocator,
598
+ struct uv_loop_s* event_loop,
599
+ MultiIsolatePlatform* platform,
600
+ const EmbedderSnapshotData* snapshot_data = nullptr,
601
+ const IsolateSettings& settings = {});
356
602
  NODE_EXTERN v8::Isolate* NewIsolate(
357
603
  std::shared_ptr<ArrayBufferAllocator> allocator,
358
604
  struct uv_loop_s* event_loop,
359
- MultiIsolatePlatform* platform);
605
+ MultiIsolatePlatform* platform,
606
+ const EmbedderSnapshotData* snapshot_data = nullptr,
607
+ const IsolateSettings& settings = {});
360
608
 
361
609
  // Creates a new context with Node.js-specific tweaks.
362
610
  NODE_EXTERN v8::Local<v8::Context> NewContext(
@@ -366,7 +614,7 @@ NODE_EXTERN v8::Local<v8::Context> NewContext(
366
614
 
367
615
  // Runs Node.js-specific tweaks on an already constructed context
368
616
  // Return value indicates success of operation
369
- NODE_EXTERN bool InitializeContext(v8::Local<v8::Context> context);
617
+ NODE_EXTERN v8::Maybe<bool> InitializeContext(v8::Local<v8::Context> context);
370
618
 
371
619
  // If `platform` is passed, it will be used to register new Worker instances.
372
620
  // It can be `nullptr`, in which case creating new Workers inside of
@@ -375,7 +623,8 @@ NODE_EXTERN IsolateData* CreateIsolateData(
375
623
  v8::Isolate* isolate,
376
624
  struct uv_loop_s* loop,
377
625
  MultiIsolatePlatform* platform = nullptr,
378
- ArrayBufferAllocator* allocator = nullptr);
626
+ ArrayBufferAllocator* allocator = nullptr,
627
+ const EmbedderSnapshotData* snapshot_data = nullptr);
379
628
  NODE_EXTERN void FreeIsolateData(IsolateData* isolate_data);
380
629
 
381
630
  struct ThreadId {
@@ -417,17 +666,61 @@ enum Flags : uint64_t {
417
666
  // $HOME/.node_modules and $NODE_PATH. This is used by standalone apps that
418
667
  // do not expect to have their behaviors changed because of globally
419
668
  // installed modules.
420
- kNoGlobalSearchPaths = 1 << 7
669
+ kNoGlobalSearchPaths = 1 << 7,
670
+ // Do not export browser globals like setTimeout, console, etc.
671
+ kNoBrowserGlobals = 1 << 8,
672
+ // Controls whether or not the Environment should call V8Inspector::create().
673
+ // This control is needed by embedders who may not want to initialize the V8
674
+ // inspector in situations where one has already been created,
675
+ // e.g. Blink's in Chromium.
676
+ kNoCreateInspector = 1 << 9,
677
+ // Controls whether or not the InspectorAgent for this Environment should
678
+ // call StartDebugSignalHandler. This control is needed by embedders who may
679
+ // not want to allow other processes to start the V8 inspector.
680
+ kNoStartDebugSignalHandler = 1 << 10,
681
+ // Controls whether the InspectorAgent created for this Environment waits for
682
+ // Inspector frontend events during the Environment creation. It's used to
683
+ // call node::Stop(env) on a Worker thread that is waiting for the events.
684
+ kNoWaitForInspectorFrontend = 1 << 11
421
685
  };
422
686
  } // namespace EnvironmentFlags
423
687
 
688
+ enum class SnapshotFlags : uint32_t {
689
+ kDefault = 0,
690
+ // Whether code cache should be generated as part of the snapshot.
691
+ // Code cache reduces the time spent on compiling functions included
692
+ // in the snapshot at the expense of a bigger snapshot size and
693
+ // potentially breaking portability of the snapshot.
694
+ kWithoutCodeCache = 1 << 0,
695
+ };
696
+
697
+ struct SnapshotConfig {
698
+ SnapshotFlags flags = SnapshotFlags::kDefault;
699
+
700
+ // When builder_script_path is std::nullopt, the snapshot is generated as a
701
+ // built-in snapshot instead of a custom one, and it's expected that the
702
+ // built-in snapshot only contains states that reproduce in every run of the
703
+ // application. The event loop won't be run when generating a built-in
704
+ // snapshot, so asynchronous operations should be avoided.
705
+ //
706
+ // When builder_script_path is an std::string, it should match args[1]
707
+ // passed to CreateForSnapshotting(). The embedder is also expected to use
708
+ // LoadEnvironment() to run a script matching this path. In that case the
709
+ // snapshot is generated as a custom snapshot and the event loop is run, so
710
+ // the snapshot builder can execute asynchronous operations as long as they
711
+ // are run to completion when the snapshot is taken.
712
+ std::optional<std::string> builder_script_path;
713
+ };
714
+
424
715
  struct InspectorParentHandle {
425
- virtual ~InspectorParentHandle();
716
+ virtual ~InspectorParentHandle() = default;
426
717
  };
427
718
 
428
719
  // TODO(addaleax): Maybe move per-Environment options parsing here.
429
720
  // Returns nullptr when the Environment cannot be created e.g. there are
430
721
  // pending JavaScript exceptions.
722
+ // `context` may be empty if an `EmbedderSnapshotData` instance was provided
723
+ // to `NewIsolate()` and `CreateIsolateData()`.
431
724
  NODE_EXTERN Environment* CreateEnvironment(
432
725
  IsolateData* isolate_data,
433
726
  v8::Local<v8::Context> context,
@@ -437,6 +730,16 @@ NODE_EXTERN Environment* CreateEnvironment(
437
730
  ThreadId thread_id = {} /* allocates a thread id automatically */,
438
731
  std::unique_ptr<InspectorParentHandle> inspector_parent_handle = {});
439
732
 
733
+ NODE_EXTERN Environment* CreateEnvironment(
734
+ IsolateData* isolate_data,
735
+ v8::Local<v8::Context> context,
736
+ const std::vector<std::string>& args,
737
+ const std::vector<std::string>& exec_args,
738
+ EnvironmentFlags::Flags flags,
739
+ ThreadId thread_id,
740
+ std::unique_ptr<InspectorParentHandle> inspector_parent_handle,
741
+ std::string_view thread_name);
742
+
440
743
  // Returns a handle that can be passed to `LoadEnvironment()`, making the
441
744
  // child Environment accessible to the inspector as if it were a Node.js Worker.
442
745
  // `child_thread_id` can be created using `AllocateEnvironmentThreadId()`
@@ -449,20 +752,53 @@ NODE_EXTERN std::unique_ptr<InspectorParentHandle> GetInspectorParentHandle(
449
752
  ThreadId child_thread_id,
450
753
  const char* child_url);
451
754
 
755
+ NODE_EXTERN std::unique_ptr<InspectorParentHandle> GetInspectorParentHandle(
756
+ Environment* parent_env,
757
+ ThreadId child_thread_id,
758
+ const char* child_url,
759
+ const char* name);
760
+
761
+ NODE_EXTERN std::unique_ptr<InspectorParentHandle> GetInspectorParentHandle(
762
+ Environment* parent_env,
763
+ ThreadId child_thread_id,
764
+ std::string_view child_url,
765
+ std::string_view name);
766
+
452
767
  struct StartExecutionCallbackInfo {
453
768
  v8::Local<v8::Object> process_object;
454
769
  v8::Local<v8::Function> native_require;
770
+ v8::Local<v8::Function> run_cjs;
455
771
  };
456
772
 
457
773
  using StartExecutionCallback =
458
774
  std::function<v8::MaybeLocal<v8::Value>(const StartExecutionCallbackInfo&)>;
775
+ using EmbedderPreloadCallback =
776
+ std::function<void(Environment* env,
777
+ v8::Local<v8::Value> process,
778
+ v8::Local<v8::Value> require)>;
459
779
 
780
+ // Run initialization for the environment.
781
+ //
782
+ // The |preload| function, usually used by embedders to inject scripts,
783
+ // will be run by Node.js before Node.js executes the entry point.
784
+ // The function is guaranteed to run before the user land module loader running
785
+ // any user code, so it is safe to assume that at this point, no user code has
786
+ // been run yet.
787
+ // The function will be executed with preload(process, require), and the passed
788
+ // require function has access to internal Node.js modules. There is no
789
+ // stability guarantee about the internals exposed to the internal require
790
+ // function. Expect breakages when updating Node.js versions if the embedder
791
+ // imports internal modules with the internal require function.
792
+ // Worker threads created in the environment will also respect The |preload|
793
+ // function, so make sure the function is thread-safe.
460
794
  NODE_EXTERN v8::MaybeLocal<v8::Value> LoadEnvironment(
461
795
  Environment* env,
462
- StartExecutionCallback cb);
796
+ StartExecutionCallback cb,
797
+ EmbedderPreloadCallback preload = nullptr);
463
798
  NODE_EXTERN v8::MaybeLocal<v8::Value> LoadEnvironment(
464
799
  Environment* env,
465
- const char* main_script_source_utf8);
800
+ std::string_view main_script_source_utf8,
801
+ EmbedderPreloadCallback preload = nullptr);
466
802
  NODE_EXTERN void FreeEnvironment(Environment* env);
467
803
 
468
804
  // Set a callback that is called when process.exit() is called from JS,
@@ -481,8 +817,12 @@ NODE_EXTERN void DefaultProcessExitHandler(Environment* env, int exit_code);
481
817
  NODE_EXTERN Environment* GetCurrentEnvironment(v8::Local<v8::Context> context);
482
818
  NODE_EXTERN IsolateData* GetEnvironmentIsolateData(Environment* env);
483
819
  NODE_EXTERN ArrayBufferAllocator* GetArrayBufferAllocator(IsolateData* data);
820
+ // This is mostly useful for Environment* instances that were created through
821
+ // a snapshot and have a main context that was read from that snapshot.
822
+ NODE_EXTERN v8::Local<v8::Context> GetMainContext(Environment* env);
484
823
 
485
- NODE_EXTERN void OnFatalError(const char* location, const char* message);
824
+ [[noreturn]] NODE_EXTERN void OnFatalError(const char* location,
825
+ const char* message);
486
826
  NODE_EXTERN void PromiseRejectCallback(v8::PromiseRejectMessage message);
487
827
  NODE_EXTERN bool AllowWasmCodeGenerationCallback(v8::Local<v8::Context> context,
488
828
  v8::Local<v8::String>);
@@ -492,6 +832,33 @@ NODE_EXTERN v8::MaybeLocal<v8::Value> PrepareStackTraceCallback(
492
832
  v8::Local<v8::Value> exception,
493
833
  v8::Local<v8::Array> trace);
494
834
 
835
+ // Writes a diagnostic report to a file. If filename is not provided, the
836
+ // default filename includes the date, time, PID, and a sequence number.
837
+ // The report's JavaScript stack trace is taken from err, if present.
838
+ // If isolate is nullptr, no information about the JavaScript environment
839
+ // is included in the report.
840
+ // Returns the filename of the written report.
841
+ NODE_EXTERN std::string TriggerNodeReport(v8::Isolate* isolate,
842
+ const char* message,
843
+ const char* trigger,
844
+ const std::string& filename,
845
+ v8::Local<v8::Value> error);
846
+ NODE_EXTERN std::string TriggerNodeReport(Environment* env,
847
+ const char* message,
848
+ const char* trigger,
849
+ const std::string& filename,
850
+ v8::Local<v8::Value> error);
851
+ NODE_EXTERN void GetNodeReport(v8::Isolate* isolate,
852
+ const char* message,
853
+ const char* trigger,
854
+ v8::Local<v8::Value> error,
855
+ std::ostream& out);
856
+ NODE_EXTERN void GetNodeReport(Environment* env,
857
+ const char* message,
858
+ const char* trigger,
859
+ v8::Local<v8::Value> error,
860
+ std::ostream& out);
861
+
495
862
  // This returns the MultiIsolatePlatform used for an Environment or IsolateData
496
863
  // instance, if one exists.
497
864
  NODE_EXTERN MultiIsolatePlatform* GetMultiIsolatePlatform(Environment* env);
@@ -545,6 +912,8 @@ NODE_EXTERN struct uv_loop_s* GetCurrentEventLoop(v8::Isolate* isolate);
545
912
  // This function only works if `env` has an associated `MultiIsolatePlatform`.
546
913
  NODE_EXTERN v8::Maybe<int> SpinEventLoop(Environment* env);
547
914
 
915
+ NODE_EXTERN std::string GetAnonymousMainPath();
916
+
548
917
  class NODE_EXTERN CommonEnvironmentSetup {
549
918
  public:
550
919
  ~CommonEnvironmentSetup();
@@ -560,8 +929,44 @@ class NODE_EXTERN CommonEnvironmentSetup {
560
929
  MultiIsolatePlatform* platform,
561
930
  std::vector<std::string>* errors,
562
931
  EnvironmentArgs&&... env_args);
932
+ template <typename... EnvironmentArgs>
933
+ static std::unique_ptr<CommonEnvironmentSetup> CreateFromSnapshot(
934
+ MultiIsolatePlatform* platform,
935
+ std::vector<std::string>* errors,
936
+ const EmbedderSnapshotData* snapshot_data,
937
+ EnvironmentArgs&&... env_args);
938
+
939
+ // Create an embedding setup which will be used for creating a snapshot
940
+ // using CreateSnapshot().
941
+ //
942
+ // This will create and attach a v8::SnapshotCreator to this instance,
943
+ // and the same restrictions apply to this instance that also apply to
944
+ // other V8 snapshotting environments.
945
+ // Not all Node.js APIs are supported in this case. Currently, there is
946
+ // no support for native/host objects other than Node.js builtins
947
+ // in the snapshot.
948
+ //
949
+ // If the embedder wants to use LoadEnvironment() later to run a snapshot
950
+ // builder script they should make sure args[1] contains the path of the
951
+ // snapshot script, which will be used to create __filename and __dirname
952
+ // in the context where the builder script is run. If they do not want to
953
+ // include the build-time paths into the snapshot, use the string returned
954
+ // by GetAnonymousMainPath() as args[1] to anonymize the script.
955
+ //
956
+ // Snapshots are an *experimental* feature. In particular, the embedder API
957
+ // exposed through this class is subject to change or removal between Node.js
958
+ // versions, including possible API and ABI breakage.
959
+ static std::unique_ptr<CommonEnvironmentSetup> CreateForSnapshotting(
960
+ MultiIsolatePlatform* platform,
961
+ std::vector<std::string>* errors,
962
+ const std::vector<std::string>& args = {},
963
+ const std::vector<std::string>& exec_args = {},
964
+ const SnapshotConfig& snapshot_config = {});
965
+ EmbedderSnapshotData::Pointer CreateSnapshot();
563
966
 
564
967
  struct uv_loop_s* event_loop() const;
968
+ v8::SnapshotCreator* snapshot_creator();
969
+ // Empty for snapshotting environments.
565
970
  std::shared_ptr<ArrayBufferAllocator> array_buffer_allocator() const;
566
971
  v8::Isolate* isolate() const;
567
972
  IsolateData* isolate_data() const;
@@ -574,12 +979,25 @@ class NODE_EXTERN CommonEnvironmentSetup {
574
979
  CommonEnvironmentSetup& operator=(CommonEnvironmentSetup&&) = delete;
575
980
 
576
981
  private:
982
+ enum Flags : uint32_t {
983
+ kNoFlags = 0,
984
+ kIsForSnapshotting = 1,
985
+ };
986
+
577
987
  struct Impl;
578
988
  Impl* impl_;
989
+
579
990
  CommonEnvironmentSetup(
580
991
  MultiIsolatePlatform*,
581
992
  std::vector<std::string>*,
582
993
  std::function<Environment*(const CommonEnvironmentSetup*)>);
994
+ CommonEnvironmentSetup(
995
+ MultiIsolatePlatform*,
996
+ std::vector<std::string>*,
997
+ const EmbedderSnapshotData*,
998
+ uint32_t flags,
999
+ std::function<Environment*(const CommonEnvironmentSetup*)>,
1000
+ const SnapshotConfig* config = nullptr);
583
1001
  };
584
1002
 
585
1003
  // Implementation for CommonEnvironmentSetup::Create
@@ -599,6 +1017,29 @@ std::unique_ptr<CommonEnvironmentSetup> CommonEnvironmentSetup::Create(
599
1017
  return ret;
600
1018
  }
601
1019
 
1020
+ // Implementation for ::CreateFromSnapshot -- the ::Create() method
1021
+ // could call this with a nullptr snapshot_data in a major version.
1022
+ template <typename... EnvironmentArgs>
1023
+ std::unique_ptr<CommonEnvironmentSetup>
1024
+ CommonEnvironmentSetup::CreateFromSnapshot(
1025
+ MultiIsolatePlatform* platform,
1026
+ std::vector<std::string>* errors,
1027
+ const EmbedderSnapshotData* snapshot_data,
1028
+ EnvironmentArgs&&... env_args) {
1029
+ auto ret = std::unique_ptr<CommonEnvironmentSetup>(new CommonEnvironmentSetup(
1030
+ platform,
1031
+ errors,
1032
+ snapshot_data,
1033
+ Flags::kNoFlags,
1034
+ [&](const CommonEnvironmentSetup* setup) -> Environment* {
1035
+ return CreateEnvironment(setup->isolate_data(),
1036
+ setup->context(),
1037
+ std::forward<EnvironmentArgs>(env_args)...);
1038
+ }));
1039
+ if (!errors->empty()) ret.reset();
1040
+ return ret;
1041
+ }
1042
+
602
1043
  /* Converts a unixtime to V8 Date */
603
1044
  NODE_DEPRECATED("Use v8::Date::New() directly",
604
1045
  inline v8::Local<v8::Value> NODE_UNIXTIME_V8(double time) {
@@ -614,44 +1055,38 @@ NODE_DEPRECATED("Use v8::Date::ValueOf() directly",
614
1055
  })
615
1056
  #define NODE_V8_UNIXTIME node::NODE_V8_UNIXTIME
616
1057
 
617
- #define NODE_DEFINE_CONSTANT(target, constant) \
618
- do { \
619
- v8::Isolate* isolate = target->GetIsolate(); \
620
- v8::Local<v8::Context> context = isolate->GetCurrentContext(); \
621
- v8::Local<v8::String> constant_name = \
622
- v8::String::NewFromUtf8(isolate, #constant, \
623
- v8::NewStringType::kInternalized).ToLocalChecked(); \
624
- v8::Local<v8::Number> constant_value = \
625
- v8::Number::New(isolate, static_cast<double>(constant)); \
626
- v8::PropertyAttribute constant_attributes = \
627
- static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete); \
628
- (target)->DefineOwnProperty(context, \
629
- constant_name, \
630
- constant_value, \
631
- constant_attributes).Check(); \
632
- } \
633
- while (0)
634
-
635
- #define NODE_DEFINE_HIDDEN_CONSTANT(target, constant) \
636
- do { \
637
- v8::Isolate* isolate = target->GetIsolate(); \
638
- v8::Local<v8::Context> context = isolate->GetCurrentContext(); \
639
- v8::Local<v8::String> constant_name = \
640
- v8::String::NewFromUtf8(isolate, #constant, \
641
- v8::NewStringType::kInternalized) \
642
- .ToLocalChecked(); \
643
- v8::Local<v8::Number> constant_value = \
644
- v8::Number::New(isolate, static_cast<double>(constant)); \
645
- v8::PropertyAttribute constant_attributes = \
646
- static_cast<v8::PropertyAttribute>(v8::ReadOnly | \
647
- v8::DontDelete | \
648
- v8::DontEnum); \
649
- (target)->DefineOwnProperty(context, \
650
- constant_name, \
651
- constant_value, \
652
- constant_attributes).Check(); \
653
- } \
654
- while (0)
1058
+ #define NODE_DEFINE_CONSTANT(target, constant) \
1059
+ do { \
1060
+ v8::Isolate* isolate = target->GetIsolate(); \
1061
+ v8::Local<v8::Context> context = isolate->GetCurrentContext(); \
1062
+ v8::Local<v8::String> constant_name = v8::String::NewFromUtf8Literal( \
1063
+ isolate, #constant, v8::NewStringType::kInternalized); \
1064
+ v8::Local<v8::Number> constant_value = \
1065
+ v8::Number::New(isolate, static_cast<double>(constant)); \
1066
+ v8::PropertyAttribute constant_attributes = \
1067
+ static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete); \
1068
+ (target) \
1069
+ ->DefineOwnProperty( \
1070
+ context, constant_name, constant_value, constant_attributes) \
1071
+ .Check(); \
1072
+ } while (0)
1073
+
1074
+ #define NODE_DEFINE_HIDDEN_CONSTANT(target, constant) \
1075
+ do { \
1076
+ v8::Isolate* isolate = target->GetIsolate(); \
1077
+ v8::Local<v8::Context> context = isolate->GetCurrentContext(); \
1078
+ v8::Local<v8::String> constant_name = v8::String::NewFromUtf8Literal( \
1079
+ isolate, #constant, v8::NewStringType::kInternalized); \
1080
+ v8::Local<v8::Number> constant_value = \
1081
+ v8::Number::New(isolate, static_cast<double>(constant)); \
1082
+ v8::PropertyAttribute constant_attributes = \
1083
+ static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete | \
1084
+ v8::DontEnum); \
1085
+ (target) \
1086
+ ->DefineOwnProperty( \
1087
+ context, constant_name, constant_value, constant_attributes) \
1088
+ .Check(); \
1089
+ } while (0)
655
1090
 
656
1091
  // Used to be a macro, hence the uppercase name.
657
1092
  inline void NODE_SET_METHOD(v8::Local<v8::Template> recv,
@@ -723,16 +1158,37 @@ NODE_EXTERN enum encoding ParseEncoding(
723
1158
  NODE_EXTERN void FatalException(v8::Isolate* isolate,
724
1159
  const v8::TryCatch& try_catch);
725
1160
 
726
- NODE_EXTERN v8::Local<v8::Value> Encode(v8::Isolate* isolate,
727
- const char* buf,
728
- size_t len,
729
- enum encoding encoding = LATIN1);
1161
+ NODE_EXTERN v8::MaybeLocal<v8::Value> TryEncode(
1162
+ v8::Isolate* isolate,
1163
+ const char* buf,
1164
+ size_t len,
1165
+ enum encoding encoding = LATIN1);
1166
+
1167
+ // Warning: This reverses endianness on Big Endian platforms, even though the
1168
+ // signature using uint16_t implies that it should not.
1169
+ NODE_EXTERN v8::MaybeLocal<v8::Value> TryEncode(v8::Isolate* isolate,
1170
+ const uint16_t* buf,
1171
+ size_t len);
1172
+
1173
+ // The original Encode(...) functions are deprecated because they do not
1174
+ // appropriately propagate exceptions and instead rely on ToLocalChecked()
1175
+ // which crashes the process if an exception occurs. We cannot just remove
1176
+ // these as it would break ABI compatibility, so we keep them around but
1177
+ // deprecate them in favor of the TryEncode(...) variations which return
1178
+ // a MaybeLocal<> and do not crash the process if an exception occurs.
1179
+ NODE_DEPRECATED(
1180
+ "Use TryEncode(...) instead",
1181
+ NODE_EXTERN v8::Local<v8::Value> Encode(v8::Isolate* isolate,
1182
+ const char* buf,
1183
+ size_t len,
1184
+ enum encoding encoding = LATIN1));
730
1185
 
731
1186
  // Warning: This reverses endianness on Big Endian platforms, even though the
732
1187
  // signature using uint16_t implies that it should not.
733
- NODE_EXTERN v8::Local<v8::Value> Encode(v8::Isolate* isolate,
734
- const uint16_t* buf,
735
- size_t len);
1188
+ NODE_DEPRECATED("Use TryEncode(...) instead",
1189
+ NODE_EXTERN v8::Local<v8::Value> Encode(v8::Isolate* isolate,
1190
+ const uint16_t* buf,
1191
+ size_t len));
736
1192
 
737
1193
  // Returns -1 if the handle was not valid for decoding
738
1194
  NODE_EXTERN ssize_t DecodeBytes(v8::Isolate* isolate,
@@ -798,11 +1254,13 @@ extern "C" NODE_EXTERN void node_module_register(void* mod);
798
1254
  #endif
799
1255
 
800
1256
  #if defined(_MSC_VER)
801
- #pragma section(".CRT$XCU", read)
802
1257
  #define NODE_C_CTOR(fn) \
803
1258
  NODE_CTOR_PREFIX void __cdecl fn(void); \
804
- __declspec(dllexport, allocate(".CRT$XCU")) \
805
- void (__cdecl*fn ## _)(void) = fn; \
1259
+ namespace { \
1260
+ struct fn##_ { \
1261
+ fn##_() { fn(); }; \
1262
+ } fn##_v_; \
1263
+ } \
806
1264
  NODE_CTOR_PREFIX void __cdecl fn(void)
807
1265
  #else
808
1266
  #define NODE_C_CTOR(fn) \
@@ -905,6 +1363,11 @@ NODE_EXTERN void AddLinkedBinding(Environment* env,
905
1363
  const char* name,
906
1364
  addon_context_register_func fn,
907
1365
  void* priv);
1366
+ NODE_EXTERN void AddLinkedBinding(
1367
+ Environment* env,
1368
+ const char* name,
1369
+ napi_addon_register_func fn,
1370
+ int32_t module_api_version = NODE_API_DEFAULT_MODULE_API_VERSION);
908
1371
 
909
1372
  /* Registers a callback with the passed-in Environment instance. The callback
910
1373
  * is called after the event loop exits, but before the VM is disposed.
@@ -961,11 +1424,26 @@ inline void RemoveEnvironmentCleanupHook(AsyncCleanupHookHandle holder) {
961
1424
  RemoveEnvironmentCleanupHookInternal(holder.get());
962
1425
  }
963
1426
 
1427
+ // This behaves like V8's Isolate::RequestInterrupt(), but also wakes up
1428
+ // the event loop if it is currently idle. Interrupt requests are drained
1429
+ // in `FreeEnvironment()`. The passed callback can not call back into
1430
+ // JavaScript.
1431
+ // This function can be called from any thread.
1432
+ NODE_EXTERN void RequestInterrupt(Environment* env,
1433
+ void (*fun)(void* arg),
1434
+ void* arg);
1435
+
964
1436
  /* Returns the id of the current execution context. If the return value is
965
1437
  * zero then no execution has been set. This will happen if the user handles
966
1438
  * I/O from native code. */
967
1439
  NODE_EXTERN async_id AsyncHooksGetExecutionAsyncId(v8::Isolate* isolate);
968
1440
 
1441
+ /* Returns the id of the current execution context. If the return value is
1442
+ * zero then no execution has been set. This will happen if the user handles
1443
+ * I/O from native code. */
1444
+ NODE_EXTERN async_id
1445
+ AsyncHooksGetExecutionAsyncId(v8::Local<v8::Context> context);
1446
+
969
1447
  /* Return same value as async_hooks.triggerAsyncId(); */
970
1448
  NODE_EXTERN async_id AsyncHooksGetTriggerAsyncId(v8::Isolate* isolate);
971
1449
 
@@ -1109,6 +1587,7 @@ class NODE_EXTERN AsyncResource {
1109
1587
  private:
1110
1588
  Environment* env_;
1111
1589
  v8::Global<v8::Object> resource_;
1590
+ v8::Global<v8::Value> context_frame_;
1112
1591
  async_context async_context_;
1113
1592
  };
1114
1593
 
@@ -1127,6 +1606,15 @@ void RegisterSignalHandler(int signal,
1127
1606
  bool reset_handler = false);
1128
1607
  #endif // _WIN32
1129
1608
 
1609
+ // This is kept as a compatibility layer for addons to wrap cppgc-managed
1610
+ // objects on Node.js versions without v8::Object::Wrap(). Addons created to
1611
+ // work with only Node.js versions with v8::Object::Wrap() should use that
1612
+ // instead.
1613
+ NODE_DEPRECATED("Use v8::Object::Wrap()",
1614
+ NODE_EXTERN void SetCppgcReference(v8::Isolate* isolate,
1615
+ v8::Local<v8::Object> object,
1616
+ void* wrappable));
1617
+
1130
1618
  } // namespace node
1131
1619
 
1132
1620
  #endif // SRC_NODE_H_