@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
@@ -1,22 +1,21 @@
1
1
  #ifndef SRC_JS_NATIVE_API_V8_H_
2
2
  #define SRC_JS_NATIVE_API_V8_H_
3
3
 
4
- // This file needs to be compatible with C compilers.
5
- #include <string.h> // NOLINT(modernize-deprecated-headers)
6
4
  #include "js_native_api_types.h"
7
5
  #include "js_native_api_v8_internals.h"
8
6
 
9
- static napi_status napi_clear_last_error(napi_env env);
7
+ inline napi_status napi_clear_last_error(node_api_basic_env env);
10
8
 
11
9
  namespace v8impl {
12
10
 
11
+ // Base class to track references and finalizers in a doubly linked list.
13
12
  class RefTracker {
14
13
  public:
15
- RefTracker() {}
16
- virtual ~RefTracker() {}
17
- virtual void Finalize(bool isEnvTeardown) {}
14
+ using RefList = RefTracker;
18
15
 
19
- typedef RefTracker RefList;
16
+ RefTracker() = default;
17
+ virtual ~RefTracker() = default;
18
+ virtual void Finalize() {}
20
19
 
21
20
  inline void Link(RefList* list) {
22
21
  prev_ = list;
@@ -40,7 +39,7 @@ class RefTracker {
40
39
 
41
40
  static void FinalizeAll(RefList* list) {
42
41
  while (list->next_ != nullptr) {
43
- list->next_->Finalize(true);
42
+ list->next_->Finalize();
44
43
  }
45
44
  }
46
45
 
@@ -52,14 +51,13 @@ class RefTracker {
52
51
  } // end of namespace v8impl
53
52
 
54
53
  struct napi_env__ {
55
- explicit napi_env__(v8::Local<v8::Context> context)
56
- : isolate(context->GetIsolate()), context_persistent(isolate, context) {
57
- CHECK_EQ(isolate, context->GetIsolate());
54
+ explicit napi_env__(v8::Local<v8::Context> context,
55
+ int32_t module_api_version)
56
+ : isolate(context->GetIsolate()),
57
+ context_persistent(isolate, context),
58
+ module_api_version(module_api_version) {
58
59
  napi_clear_last_error(this);
59
60
  }
60
- virtual ~napi_env__() { FinalizeAll(); }
61
- v8::Isolate* const isolate; // Shortcut for context()->GetIsolate()
62
- v8impl::Persistent<v8::Context> context_persistent;
63
61
 
64
62
  inline v8::Local<v8::Context> context() const {
65
63
  return v8impl::PersistentToLocal::Strong(context_persistent);
@@ -67,19 +65,26 @@ struct napi_env__ {
67
65
 
68
66
  inline void Ref() { refs++; }
69
67
  inline void Unref() {
70
- if (--refs == 0) delete this;
68
+ if (--refs == 0) DeleteMe();
71
69
  }
72
70
 
73
71
  virtual bool can_call_into_js() const { return true; }
74
- virtual v8::Maybe<bool> mark_arraybuffer_as_untransferable(
75
- v8::Local<v8::ArrayBuffer> ab) const {
76
- return v8::Just(true);
77
- }
78
72
 
79
73
  static inline void HandleThrow(napi_env env, v8::Local<v8::Value> value) {
74
+ if (env->terminatedOrTerminating()) {
75
+ return;
76
+ }
80
77
  env->isolate->ThrowException(value);
81
78
  }
82
79
 
80
+ // i.e. whether v8 exited or is about to exit
81
+ inline bool terminatedOrTerminating() {
82
+ return this->isolate->IsExecutionTerminating() || !can_call_into_js();
83
+ }
84
+
85
+ // v8 uses a special exception to indicate termination, the
86
+ // `handle_exception` callback should identify such case using
87
+ // terminatedOrTerminating() before actually handle the exception
83
88
  template <typename T, typename U = decltype(HandleThrow)>
84
89
  inline void CallIntoModule(T&& call, U&& handle_exception = HandleThrow) {
85
90
  int open_handle_scopes_before = open_handle_scopes;
@@ -94,14 +99,26 @@ struct napi_env__ {
94
99
  }
95
100
  }
96
101
 
97
- // This should be overridden to schedule the finalization to a properiate
98
- // timing, like next tick of the event loop.
99
- virtual void CallFinalizer(napi_finalize cb, void* data, void* hint) {
100
- v8::HandleScope handle_scope(isolate);
101
- CallIntoModule([&](napi_env env) { cb(env, data, hint); });
102
+ virtual void CallFinalizer(napi_finalize cb, void* data, void* hint) = 0;
103
+
104
+ // Invoke finalizer from V8 garbage collector.
105
+ void InvokeFinalizerFromGC(v8impl::RefTracker* finalizer);
106
+
107
+ // Enqueue the finalizer to the napi_env's own queue of the second pass
108
+ // weak callback.
109
+ // Implementation should drain the queue at the time it is safe to call
110
+ // into JavaScript.
111
+ virtual void EnqueueFinalizer(v8impl::RefTracker* finalizer) {
112
+ pending_finalizers.emplace(finalizer);
113
+ }
114
+
115
+ // Remove the finalizer from the scheduled second pass weak callback queue.
116
+ // The finalizer can be deleted after this call.
117
+ virtual void DequeueFinalizer(v8impl::RefTracker* finalizer) {
118
+ pending_finalizers.erase(finalizer);
102
119
  }
103
120
 
104
- void FinalizeAll() {
121
+ virtual void DeleteMe() {
105
122
  // First we must finalize those references that have `napi_finalizer`
106
123
  // callbacks. The reason is that addons might store other references which
107
124
  // they delete during their `napi_finalizer` callbacks. If we deleted such
@@ -109,8 +126,25 @@ struct napi_env__ {
109
126
  // `napi_finalizer` deleted them subsequently.
110
127
  v8impl::RefTracker::FinalizeAll(&finalizing_reflist);
111
128
  v8impl::RefTracker::FinalizeAll(&reflist);
129
+ delete this;
112
130
  }
113
131
 
132
+ void CheckGCAccess() {
133
+ if (module_api_version == NAPI_VERSION_EXPERIMENTAL && in_gc_finalizer) {
134
+ v8impl::OnFatalError(
135
+ nullptr,
136
+ "Finalizer is calling a function that may affect GC state.\n"
137
+ "The finalizers are run directly from GC and must not affect GC "
138
+ "state.\n"
139
+ "Use `node_api_post_finalizer` from inside of the finalizer to work "
140
+ "around this issue.\n"
141
+ "It schedules the call as a new task in the event loop.");
142
+ }
143
+ }
144
+
145
+ v8::Isolate* const isolate; // Shortcut for context()->GetIsolate()
146
+ v8impl::Persistent<v8::Context> context_persistent;
147
+
114
148
  v8impl::Persistent<v8::Value> last_exception;
115
149
 
116
150
  // We store references in two different lists, depending on whether they have
@@ -118,54 +152,36 @@ struct napi_env__ {
118
152
  // have such a callback. See `~napi_env__()` above for details.
119
153
  v8impl::RefTracker::RefList reflist;
120
154
  v8impl::RefTracker::RefList finalizing_reflist;
155
+ // The invocation order of the finalizers is not determined.
156
+ std::unordered_set<v8impl::RefTracker*> pending_finalizers;
121
157
  napi_extended_error_info last_error;
122
158
  int open_handle_scopes = 0;
123
159
  int open_callback_scopes = 0;
124
160
  int refs = 1;
125
161
  void* instance_data = nullptr;
126
- };
127
-
128
- // This class is used to keep a napi_env live in a way that
129
- // is exception safe versus calling Ref/Unref directly
130
- class EnvRefHolder {
131
- public:
132
- explicit EnvRefHolder(napi_env env) : _env(env) { _env->Ref(); }
133
-
134
- explicit EnvRefHolder(const EnvRefHolder& other) : _env(other.env()) {
135
- _env->Ref();
136
- }
137
-
138
- EnvRefHolder(EnvRefHolder&& other) {
139
- _env = other._env;
140
- other._env = nullptr;
141
- }
162
+ int32_t module_api_version = NODE_API_DEFAULT_MODULE_API_VERSION;
163
+ bool in_gc_finalizer = false;
142
164
 
143
- ~EnvRefHolder() {
144
- if (_env != nullptr) {
145
- _env->Unref();
146
- }
147
- }
148
-
149
- napi_env env(void) const { return _env; }
150
-
151
- private:
152
- napi_env _env;
165
+ protected:
166
+ // Should not be deleted directly. Delete with `napi_env__::DeleteMe()`
167
+ // instead.
168
+ virtual ~napi_env__() = default;
153
169
  };
154
170
 
155
- static inline napi_status napi_clear_last_error(napi_env env) {
171
+ inline napi_status napi_clear_last_error(node_api_basic_env basic_env) {
172
+ napi_env env = const_cast<napi_env>(basic_env);
156
173
  env->last_error.error_code = napi_ok;
157
-
158
- // TODO(boingoing): Should this be a callback?
159
174
  env->last_error.engine_error_code = 0;
160
175
  env->last_error.engine_reserved = nullptr;
161
176
  env->last_error.error_message = nullptr;
162
177
  return napi_ok;
163
178
  }
164
179
 
165
- static inline napi_status napi_set_last_error(napi_env env,
166
- napi_status error_code,
167
- uint32_t engine_error_code = 0,
168
- void* engine_reserved = nullptr) {
180
+ inline napi_status napi_set_last_error(node_api_basic_env basic_env,
181
+ napi_status error_code,
182
+ uint32_t engine_error_code = 0,
183
+ void* engine_reserved = nullptr) {
184
+ napi_env env = const_cast<napi_env>(basic_env);
169
185
  env->last_error.error_code = error_code;
170
186
  env->last_error.engine_error_code = engine_error_code;
171
187
  env->last_error.engine_reserved = engine_reserved;
@@ -194,6 +210,12 @@ static inline napi_status napi_set_last_error(napi_env env,
194
210
  } \
195
211
  } while (0)
196
212
 
213
+ #define CHECK_ENV_NOT_IN_GC(env) \
214
+ do { \
215
+ CHECK_ENV((env)); \
216
+ (env)->CheckGCAccess(); \
217
+ } while (0)
218
+
197
219
  #define CHECK_ARG(env, arg) \
198
220
  RETURN_STATUS_IF_FALSE((env), ((arg) != nullptr), napi_invalid_arg)
199
221
 
@@ -209,11 +231,14 @@ static inline napi_status napi_set_last_error(napi_env env,
209
231
 
210
232
  // NAPI_PREAMBLE is not wrapped in do..while: try_catch must have function scope
211
233
  #define NAPI_PREAMBLE(env) \
212
- CHECK_ENV((env)); \
234
+ CHECK_ENV_NOT_IN_GC((env)); \
235
+ RETURN_STATUS_IF_FALSE( \
236
+ (env), (env)->last_exception.IsEmpty(), napi_pending_exception); \
213
237
  RETURN_STATUS_IF_FALSE( \
214
238
  (env), \
215
- (env)->last_exception.IsEmpty() && (env)->can_call_into_js(), \
216
- napi_pending_exception); \
239
+ (env)->can_call_into_js(), \
240
+ (env->module_api_version >= 10 ? napi_cannot_run_js \
241
+ : napi_pending_exception)); \
217
242
  napi_clear_last_error((env)); \
218
243
  v8impl::TryCatch try_catch((env))
219
244
 
@@ -264,17 +289,15 @@ static inline napi_status napi_set_last_error(napi_env env,
264
289
  } \
265
290
  } while (0)
266
291
 
267
- #define RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, condition, status) \
268
- do { \
269
- if (!(condition)) { \
270
- return napi_set_last_error( \
271
- (env), try_catch.HasCaught() ? napi_pending_exception : (status)); \
272
- } \
273
- } while (0)
274
-
275
292
  #define CHECK_MAYBE_EMPTY_WITH_PREAMBLE(env, maybe, status) \
276
293
  RETURN_STATUS_IF_FALSE_WITH_PREAMBLE((env), !((maybe).IsEmpty()), (status))
277
294
 
295
+ #define STATUS_CALL(call) \
296
+ do { \
297
+ napi_status status = (call); \
298
+ if (status != napi_ok) return status; \
299
+ } while (0)
300
+
278
301
  namespace v8impl {
279
302
 
280
303
  //=== Conversion between V8 Handles and napi_value ========================
@@ -297,48 +320,27 @@ inline v8::Local<v8::Value> V8LocalValueFromJsValue(napi_value v) {
297
320
  // Adapter for napi_finalize callbacks.
298
321
  class Finalizer {
299
322
  public:
300
- // Some Finalizers are run during shutdown when the napi_env is destroyed,
301
- // and some need to keep an explicit reference to the napi_env because they
302
- // are run independently.
303
- enum EnvReferenceMode { kNoEnvReference, kKeepEnvReference };
304
-
305
- protected:
306
323
  Finalizer(napi_env env,
307
324
  napi_finalize finalize_callback,
308
325
  void* finalize_data,
309
- void* finalize_hint,
310
- EnvReferenceMode refmode = kNoEnvReference)
311
- : _env(env),
312
- _finalize_callback(finalize_callback),
313
- _finalize_data(finalize_data),
314
- _finalize_hint(finalize_hint),
315
- _has_env_reference(refmode == kKeepEnvReference) {
316
- if (_has_env_reference) _env->Ref();
317
- }
326
+ void* finalize_hint)
327
+ : env_(env),
328
+ finalize_callback_(finalize_callback),
329
+ finalize_data_(finalize_data),
330
+ finalize_hint_(finalize_hint) {}
318
331
 
319
- ~Finalizer() {
320
- if (_has_env_reference) _env->Unref();
321
- }
322
-
323
- public:
324
- static Finalizer* New(napi_env env,
325
- napi_finalize finalize_callback = nullptr,
326
- void* finalize_data = nullptr,
327
- void* finalize_hint = nullptr,
328
- EnvReferenceMode refmode = kNoEnvReference) {
329
- return new Finalizer(
330
- env, finalize_callback, finalize_data, finalize_hint, refmode);
331
- }
332
+ napi_env env() { return env_; }
333
+ void* data() { return finalize_data_; }
332
334
 
333
- static void Delete(Finalizer* finalizer) { delete finalizer; }
335
+ void ResetEnv();
336
+ void ResetFinalizer();
337
+ void CallFinalizer();
334
338
 
335
- protected:
336
- napi_env _env;
337
- napi_finalize _finalize_callback;
338
- void* _finalize_data;
339
- void* _finalize_hint;
340
- bool _finalize_ran = false;
341
- bool _has_env_reference = false;
339
+ private:
340
+ napi_env env_;
341
+ napi_finalize finalize_callback_;
342
+ void* finalize_data_;
343
+ void* finalize_hint_;
342
344
  };
343
345
 
344
346
  class TryCatch : public v8::TryCatch {
@@ -355,86 +357,129 @@ class TryCatch : public v8::TryCatch {
355
357
  napi_env _env;
356
358
  };
357
359
 
358
- // Wrapper around v8impl::Persistent that implements reference counting.
359
- class RefBase : protected Finalizer, RefTracker {
360
- protected:
361
- RefBase(napi_env env,
362
- uint32_t initial_refcount,
363
- bool delete_self,
364
- napi_finalize finalize_callback,
365
- void* finalize_data,
366
- void* finalize_hint);
367
-
360
+ // Wrapper around Finalizer that can be tracked.
361
+ class TrackedFinalizer final : public RefTracker {
368
362
  public:
369
- static RefBase* New(napi_env env,
370
- uint32_t initial_refcount,
371
- bool delete_self,
372
- napi_finalize finalize_callback,
373
- void* finalize_data,
374
- void* finalize_hint);
363
+ static TrackedFinalizer* New(napi_env env,
364
+ napi_finalize finalize_callback,
365
+ void* finalize_data,
366
+ void* finalize_hint);
367
+ ~TrackedFinalizer() override;
375
368
 
376
- static inline void Delete(RefBase* reference);
377
-
378
- virtual ~RefBase();
379
- void* Data();
380
- uint32_t Ref();
381
- uint32_t Unref();
382
- uint32_t RefCount();
369
+ void* data() { return finalizer_.data(); }
383
370
 
384
- protected:
385
- void Finalize(bool is_env_teardown = false) override;
371
+ private:
372
+ TrackedFinalizer(napi_env env,
373
+ napi_finalize finalize_callback,
374
+ void* finalize_data,
375
+ void* finalize_hint);
376
+ void Finalize() override;
386
377
 
387
378
  private:
388
- uint32_t _refcount;
389
- bool _delete_self;
379
+ Finalizer finalizer_;
390
380
  };
391
381
 
392
- class Reference : public RefBase {
393
- using SecondPassCallParameterRef = Reference*;
394
-
395
- protected:
396
- template <typename... Args>
397
- Reference(napi_env env, v8::Local<v8::Value> value, Args&&... args);
382
+ // Ownership of a reference.
383
+ enum class ReferenceOwnership : uint8_t {
384
+ // The reference is owned by the runtime. No userland call is needed to
385
+ // destruct the reference.
386
+ kRuntime,
387
+ // The reference is owned by the userland. User code is responsible to delete
388
+ // the reference with appropriate node-api calls.
389
+ kUserland,
390
+ };
398
391
 
392
+ // Wrapper around v8impl::Persistent.
393
+ class Reference : public RefTracker {
399
394
  public:
400
395
  static Reference* New(napi_env env,
401
396
  v8::Local<v8::Value> value,
402
397
  uint32_t initial_refcount,
403
- bool delete_self,
404
- napi_finalize finalize_callback = nullptr,
405
- void* finalize_data = nullptr,
406
- void* finalize_hint = nullptr);
398
+ ReferenceOwnership ownership);
399
+ ~Reference() override;
407
400
 
408
- virtual ~Reference();
409
401
  uint32_t Ref();
410
402
  uint32_t Unref();
411
- v8::Local<v8::Value> Get();
403
+ v8::Local<v8::Value> Get(napi_env env);
404
+
405
+ virtual void ResetFinalizer() {}
406
+ virtual void* Data() { return nullptr; }
407
+
408
+ uint32_t refcount() const { return refcount_; }
409
+ ReferenceOwnership ownership() { return ownership_; }
412
410
 
413
411
  protected:
414
- void Finalize(bool is_env_teardown = false) override;
412
+ Reference(napi_env env,
413
+ v8::Local<v8::Value> value,
414
+ uint32_t initial_refcount,
415
+ ReferenceOwnership ownership);
416
+ virtual void CallUserFinalizer() {}
417
+ virtual void InvokeFinalizerFromGC();
415
418
 
416
419
  private:
417
- void ClearWeak();
420
+ static void WeakCallback(const v8::WeakCallbackInfo<Reference>& data);
418
421
  void SetWeak();
422
+ void Finalize() override;
423
+
424
+ private:
425
+ v8impl::Persistent<v8::Value> persistent_;
426
+ uint32_t refcount_;
427
+ ReferenceOwnership ownership_;
428
+ bool can_be_weak_;
429
+ };
419
430
 
420
- static void FinalizeCallback(
421
- const v8::WeakCallbackInfo<SecondPassCallParameterRef>& data);
422
- static void SecondPassCallback(
423
- const v8::WeakCallbackInfo<SecondPassCallParameterRef>& data);
431
+ // Reference that can store additional data.
432
+ class ReferenceWithData final : public Reference {
433
+ public:
434
+ static ReferenceWithData* New(napi_env env,
435
+ v8::Local<v8::Value> value,
436
+ uint32_t initial_refcount,
437
+ ReferenceOwnership ownership,
438
+ void* data);
424
439
 
425
- v8impl::Persistent<v8::Value> _persistent;
426
- SecondPassCallParameterRef* _secondPassParameter;
427
- bool _secondPassScheduled;
440
+ void* Data() override { return data_; }
428
441
 
429
- FRIEND_TEST(JsNativeApiV8Test, Reference);
442
+ private:
443
+ ReferenceWithData(napi_env env,
444
+ v8::Local<v8::Value> value,
445
+ uint32_t initial_refcount,
446
+ ReferenceOwnership ownership,
447
+ void* data);
448
+
449
+ private:
450
+ void* data_;
430
451
  };
431
452
 
432
- } // end of namespace v8impl
453
+ // Reference that has a user finalizer callback.
454
+ class ReferenceWithFinalizer final : public Reference {
455
+ public:
456
+ static ReferenceWithFinalizer* New(napi_env env,
457
+ v8::Local<v8::Value> value,
458
+ uint32_t initial_refcount,
459
+ ReferenceOwnership ownership,
460
+ napi_finalize finalize_callback,
461
+ void* finalize_data,
462
+ void* finalize_hint);
463
+ ~ReferenceWithFinalizer() override;
464
+
465
+ void ResetFinalizer() override { finalizer_.ResetFinalizer(); }
466
+ void* Data() override { return finalizer_.data(); }
433
467
 
434
- #define STATUS_CALL(call) \
435
- do { \
436
- napi_status status = (call); \
437
- if (status != napi_ok) return status; \
438
- } while (0)
468
+ private:
469
+ ReferenceWithFinalizer(napi_env env,
470
+ v8::Local<v8::Value> value,
471
+ uint32_t initial_refcount,
472
+ ReferenceOwnership ownership,
473
+ napi_finalize finalize_callback,
474
+ void* finalize_data,
475
+ void* finalize_hint);
476
+ void CallUserFinalizer() override;
477
+ void InvokeFinalizerFromGC() override;
478
+
479
+ private:
480
+ Finalizer finalizer_;
481
+ };
482
+
483
+ } // end of namespace v8impl
439
484
 
440
485
  #endif // SRC_JS_NATIVE_API_V8_H_
@@ -14,18 +14,19 @@
14
14
  // included below, defines `NAPI_VERSION`.
15
15
 
16
16
  #include "node_version.h"
17
+
17
18
  #include "env.h"
18
- #include "node_internals.h"
19
19
  #include "gtest/gtest_prod.h"
20
+ #include "node_errors.h"
21
+ #include "node_internals.h"
20
22
 
21
- #define NAPI_ARRAYSIZE(array) \
22
- node::arraysize((array))
23
+ #define NAPI_ARRAYSIZE(array) node::arraysize((array))
23
24
 
24
- #define NAPI_FIXED_ONE_BYTE_STRING(isolate, string) \
25
+ #define NAPI_FIXED_ONE_BYTE_STRING(isolate, string) \
25
26
  node::FIXED_ONE_BYTE_STRING((isolate), (string))
26
27
 
27
- #define NAPI_PRIVATE_KEY(context, suffix) \
28
- (node::Environment::GetCurrent((context))->napi_ ## suffix())
28
+ #define NAPI_PRIVATE_KEY(context, suffix) \
29
+ (node::Environment::GetCurrent((context))->napi_##suffix())
29
30
 
30
31
  namespace v8impl {
31
32
 
@@ -34,6 +35,11 @@ using Persistent = v8::Global<T>;
34
35
 
35
36
  using PersistentToLocal = node::PersistentToLocal;
36
37
 
38
+ [[noreturn]] inline void OnFatalError(const char* location,
39
+ const char* message) {
40
+ node::OnFatalError(location, message);
41
+ }
42
+
37
43
  } // end of namespace v8impl
38
44
 
39
45
  #endif // SRC_JS_NATIVE_API_V8_INTERNALS_H_
@@ -0,0 +1,40 @@
1
+ #ifndef SRC_JSON_PARSER_H_
2
+ #define SRC_JSON_PARSER_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include <memory>
7
+ #include <optional>
8
+ #include <string>
9
+ #include <unordered_map>
10
+ #include "util.h"
11
+ #include "v8.h"
12
+
13
+ namespace node {
14
+ // This is intended to be used to get some top-level fields out of a JSON
15
+ // without having to spin up a full Node.js environment that unnecessarily
16
+ // complicates things.
17
+ class JSONParser {
18
+ public:
19
+ using StringDict = std::unordered_map<std::string, std::string>;
20
+ JSONParser();
21
+ ~JSONParser() = default;
22
+ bool Parse(const std::string& content);
23
+ std::optional<std::string> GetTopLevelStringField(std::string_view field);
24
+ std::optional<bool> GetTopLevelBoolField(std::string_view field);
25
+ std::optional<StringDict> GetTopLevelStringDict(std::string_view field);
26
+
27
+ private:
28
+ // We might want a lighter-weight JSON parser for this use case. But for now
29
+ // using V8 is good enough.
30
+ RAIIIsolateWithoutEntering isolate_;
31
+
32
+ v8::Global<v8::Context> context_;
33
+ v8::Global<v8::Object> content_;
34
+ bool parsed_ = false;
35
+ };
36
+ } // namespace node
37
+
38
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
39
+
40
+ #endif // SRC_JSON_PARSER_H_
@@ -4,13 +4,21 @@
4
4
  #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
5
 
6
6
  #include <iomanip>
7
- #include <ostream>
8
7
  #include <limits>
8
+ #include <ostream>
9
9
  #include <string>
10
+ #include <string_view>
10
11
 
11
12
  namespace node {
12
13
 
13
- std::string EscapeJsonChars(const std::string& str);
14
+ constexpr bool NeedsJsonEscape(std::string_view str) {
15
+ for (const char c : str) {
16
+ if (c == '\\' || c == '"' || c < 0x20) return true;
17
+ }
18
+ return false;
19
+ }
20
+
21
+ std::string EscapeJsonChars(std::string_view str);
14
22
  std::string Reindent(const std::string& str, int indentation);
15
23
 
16
24
  // JSON compiler definitions.
@@ -128,24 +136,27 @@ class JSONWriter {
128
136
  typename test_for_number = typename std::
129
137
  enable_if<std::numeric_limits<T>::is_specialized, bool>::type>
130
138
  inline void write_value(T number) {
131
- if (std::is_same<T, bool>::value)
139
+ if constexpr (std::is_same<T, bool>::value)
132
140
  out_ << (number ? "true" : "false");
133
141
  else
134
142
  out_ << number;
135
143
  }
136
144
 
137
145
  inline void write_value(Null null) { out_ << "null"; }
138
- inline void write_value(const char* str) { write_string(str); }
139
- inline void write_value(const std::string& str) { write_string(str); }
146
+ inline void write_value(std::string_view str) { write_string(str); }
140
147
 
141
148
  inline void write_value(const ForeignJSON& json) {
142
149
  out_ << Reindent(json.as_string, indent_);
143
150
  }
144
151
 
145
- inline void write_string(const std::string& str) {
146
- out_ << '"' << EscapeJsonChars(str) << '"';
152
+ inline void write_string(std::string_view str) {
153
+ out_ << '"';
154
+ if (NeedsJsonEscape(str)) // only create temporary std::string if necessary
155
+ out_ << EscapeJsonChars(str);
156
+ else
157
+ out_ << str;
158
+ out_ << '"';
147
159
  }
148
- inline void write_string(const char* str) { write_string(std::string(str)); }
149
160
 
150
161
  enum JSONState { kObjectStart, kAfterValue };
151
162
  std::ostream& out_;