@encharm/cws 4.4.0 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
  2. package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
  3. package/dist/bindings/cws_linux_arm64_node115.node +0 -0
  4. package/dist/bindings/cws_linux_arm64_node127.node +0 -0
  5. package/dist/bindings/cws_linux_x64_node108.node +0 -0
  6. package/dist/bindings/cws_linux_x64_node115.node +0 -0
  7. package/dist/bindings/cws_linux_x64_node127.node +0 -0
  8. package/dist/bindings/cws_win32_x64_node108.node +0 -0
  9. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  10. package/dist/bindings/cws_win32_x64_node127.node +0 -0
  11. package/dist/bindings/cws_win32_x64_node83.node +0 -0
  12. package/dist/bindings/cws_win32_x64_node93.node +0 -0
  13. package/package.json +1 -1
  14. package/src/Addon.h +20 -24
  15. package/src/Socket.h +0 -1
  16. package/src/headers/20/acorn_version.h +1 -1
  17. package/src/headers/20/connection_wrap.h +1 -0
  18. package/src/headers/20/crypto/crypto_keys.h +3 -0
  19. package/src/headers/20/crypto/crypto_tls.h +12 -3
  20. package/src/headers/20/crypto/crypto_util.h +3 -2
  21. package/src/headers/20/env_properties.h +3 -1
  22. package/src/headers/20/js_native_api.h +11 -1
  23. package/src/headers/20/js_native_api_v8.h +40 -3
  24. package/src/headers/20/js_native_api_v8_internals.h +6 -0
  25. package/src/headers/20/module_wrap.h +1 -1
  26. package/src/headers/20/node.h +2 -0
  27. package/src/headers/20/node_api.h +8 -7
  28. package/src/headers/20/node_constants.h +3 -0
  29. package/src/headers/20/node_contextify.h +24 -0
  30. package/src/headers/20/node_file-inl.h +32 -0
  31. package/src/headers/20/node_file.h +25 -12
  32. package/src/headers/20/node_options.h +9 -9
  33. package/src/headers/20/node_version.h +1 -1
  34. package/src/headers/20/permission/child_process_permission.h +2 -1
  35. package/src/headers/20/permission/fs_permission.h +11 -9
  36. package/src/headers/20/permission/inspector_permission.h +29 -0
  37. package/src/headers/20/permission/permission.h +4 -1
  38. package/src/headers/20/permission/permission_base.h +6 -2
  39. package/src/headers/20/permission/worker_permission.h +2 -1
  40. package/src/headers/20/undici_version.h +2 -2
  41. package/src/headers/22/acorn_version.h +6 -0
  42. package/src/headers/22/aliased_buffer-inl.h +243 -0
  43. package/src/headers/22/aliased_buffer.h +206 -0
  44. package/src/headers/{18 → 22}/async_wrap-inl.h +8 -6
  45. package/src/headers/{18 → 22}/async_wrap.h +65 -59
  46. package/src/headers/{16 → 22}/base_object-inl.h +57 -117
  47. package/src/headers/{18 → 22}/base_object.h +58 -30
  48. package/src/headers/22/base_object_types.h +74 -0
  49. package/src/headers/22/blob_serializer_deserializer-inl.h +385 -0
  50. package/src/headers/22/blob_serializer_deserializer.h +132 -0
  51. package/src/headers/{16 → 22}/callback_queue.h +1 -0
  52. package/src/headers/{16 → 22}/cares_wrap.h +27 -20
  53. package/src/headers/22/cjs_module_lexer_version.h +6 -0
  54. package/src/headers/22/cleanup_queue-inl.h +62 -0
  55. package/src/headers/22/cleanup_queue.h +85 -0
  56. package/src/headers/22/compile_cache.h +104 -0
  57. package/src/headers/{18 → 22}/crypto/crypto_clienthello.h +1 -1
  58. package/src/headers/{18 → 22}/crypto/crypto_context.h +31 -7
  59. package/src/headers/{18 → 22}/crypto/crypto_keys.h +118 -148
  60. package/src/headers/{18 → 22}/crypto/crypto_tls.h +20 -5
  61. package/src/headers/{18 → 22}/crypto/crypto_util.h +219 -263
  62. package/src/headers/22/crypto/ncrypto.h +752 -0
  63. package/src/headers/{16 → 22}/debug_utils-inl.h +15 -7
  64. package/src/headers/{18 → 22}/debug_utils.h +25 -19
  65. package/src/headers/22/encoding_binding.h +59 -0
  66. package/src/headers/{14 → 22}/env-inl.h +276 -409
  67. package/src/headers/22/env.h +1266 -0
  68. package/src/headers/22/env_properties.h +497 -0
  69. package/src/headers/{18 → 22}/handle_wrap.h +2 -0
  70. package/src/headers/{18 → 22}/histogram.h +88 -48
  71. package/src/headers/{16 → 22}/inspector_agent.h +17 -1
  72. package/src/headers/{16 → 22}/inspector_profiler.h +15 -13
  73. package/src/headers/{18 → 22}/js_native_api.h +78 -30
  74. package/src/headers/{18 → 22}/js_native_api_types.h +46 -1
  75. package/src/headers/{18 → 22}/js_native_api_v8.h +206 -161
  76. package/src/headers/{18 → 22}/js_native_api_v8_internals.h +6 -0
  77. package/src/headers/22/json_parser.h +40 -0
  78. package/src/headers/{16 → 22}/json_utils.h +19 -8
  79. package/src/headers/{18 → 22}/memory_tracker-inl.h +16 -13
  80. package/src/headers/{14 → 22}/memory_tracker.h +13 -8
  81. package/src/headers/{16 → 22}/module_wrap.h +49 -19
  82. package/src/headers/22/ncrypto/ncrypto.h +752 -0
  83. package/src/headers/{18 → 22}/node.h +465 -68
  84. package/src/headers/{18 → 22}/node_api.h +66 -81
  85. package/src/headers/{18 → 22}/node_api_internals.h +8 -4
  86. package/src/headers/{18 → 22}/node_api_types.h +5 -0
  87. package/src/headers/22/node_binding.h +154 -0
  88. package/src/headers/{18 → 22}/node_blob.h +46 -78
  89. package/src/headers/{18 → 22}/node_bob-inl.h +1 -2
  90. package/src/headers/{18 → 22}/node_bob.h +2 -6
  91. package/src/headers/{18 → 22}/node_buffer.h +1 -1
  92. package/src/headers/22/node_builtins.h +220 -0
  93. package/src/headers/{18 → 22}/node_constants.h +3 -5
  94. package/src/headers/22/node_context_data.h +168 -0
  95. package/src/headers/22/node_contextify.h +199 -0
  96. package/src/headers/{16 → 22}/node_crypto.h +1 -2
  97. package/src/headers/22/node_dotenv.h +45 -0
  98. package/src/headers/{18 → 22}/node_errors.h +86 -27
  99. package/src/headers/22/node_exit_code.h +54 -0
  100. package/src/headers/22/node_external_reference.h +249 -0
  101. package/src/headers/{18 → 22}/node_file-inl.h +127 -30
  102. package/src/headers/{16 → 22}/node_file.h +122 -11
  103. package/src/headers/{18 → 22}/node_http2.h +28 -11
  104. package/src/headers/{16 → 22}/node_http2_state.h +34 -25
  105. package/src/headers/{18 → 22}/node_http_common-inl.h +2 -1
  106. package/src/headers/{18 → 22}/node_http_common.h +56 -55
  107. package/src/headers/{16 → 22}/node_i18n.h +5 -18
  108. package/src/headers/{18 → 22}/node_internals.h +121 -59
  109. package/src/headers/{18 → 22}/node_main_instance.h +4 -31
  110. package/src/headers/{18 → 22}/node_messaging.h +27 -10
  111. package/src/headers/{18 → 22}/node_metadata.h +23 -1
  112. package/src/headers/{18 → 22}/node_options-inl.h +24 -11
  113. package/src/headers/{18 → 22}/node_options.h +124 -39
  114. package/src/headers/{18 → 22}/node_perf.h +0 -2
  115. package/src/headers/{18 → 22}/node_perf_common.h +20 -9
  116. package/src/headers/{18 → 22}/node_platform.h +11 -5
  117. package/src/headers/{18 → 22}/node_process.h +26 -14
  118. package/src/headers/22/node_realm-inl.h +145 -0
  119. package/src/headers/22/node_realm.h +184 -0
  120. package/src/headers/{16 → 22}/node_report.h +13 -17
  121. package/src/headers/{16 → 22}/node_revert.h +3 -3
  122. package/src/headers/{16 → 22}/node_root_certs.h +902 -461
  123. package/src/headers/22/node_sea.h +64 -0
  124. package/src/headers/22/node_shadow_realm.h +46 -0
  125. package/src/headers/22/node_snapshot_builder.h +57 -0
  126. package/src/headers/22/node_snapshotable.h +174 -0
  127. package/src/headers/{18 → 22}/node_sockaddr.h +2 -2
  128. package/src/headers/{16 → 22}/node_stat_watcher.h +2 -1
  129. package/src/headers/22/node_threadsafe_cow-inl.h +54 -0
  130. package/src/headers/22/node_threadsafe_cow.h +105 -0
  131. package/src/headers/22/node_union_bytes.h +81 -0
  132. package/src/headers/22/node_url.h +96 -0
  133. package/src/headers/22/node_v8.h +77 -0
  134. package/src/headers/{14 → 22}/node_v8_platform-inl.h +17 -6
  135. package/src/headers/{18 → 22}/node_version.h +20 -8
  136. package/src/headers/22/node_wasi.h +185 -0
  137. package/src/headers/{14 → 22}/node_watchdog.h +2 -0
  138. package/src/headers/{18 → 22}/node_worker.h +7 -2
  139. package/src/headers/22/permission/child_process_permission.h +31 -0
  140. package/src/headers/22/permission/fs_permission.h +167 -0
  141. package/src/headers/22/permission/inspector_permission.h +31 -0
  142. package/src/headers/22/permission/permission.h +99 -0
  143. package/src/headers/22/permission/permission_base.h +60 -0
  144. package/src/headers/22/permission/wasi_permission.h +31 -0
  145. package/src/headers/22/permission/worker_permission.h +31 -0
  146. package/src/headers/{16 → 22}/req_wrap-inl.h +7 -6
  147. package/src/headers/{14 → 22}/spawn_sync.h +3 -3
  148. package/src/headers/{18 → 22}/stream_base-inl.h +0 -135
  149. package/src/headers/{18 → 22}/stream_base.h +35 -16
  150. package/src/headers/{18 → 22}/stream_pipe.h +3 -4
  151. package/src/headers/{16 → 22}/stream_wrap.h +2 -1
  152. package/src/headers/{18 → 22}/string_bytes.h +5 -14
  153. package/src/headers/{14 → 22}/string_decoder-inl.h +0 -6
  154. package/src/headers/{16 → 22}/string_decoder.h +0 -1
  155. package/src/headers/{18 → 22}/tcp_wrap.h +1 -1
  156. package/src/headers/{18 → 22}/threadpoolwork-inl.h +14 -1
  157. package/src/headers/22/timers.h +76 -0
  158. package/src/headers/{18 → 22}/tracing/trace_event.h +7 -5
  159. package/src/headers/{16 → 22}/udp_wrap.h +8 -5
  160. package/src/headers/22/undici_version.h +6 -0
  161. package/src/headers/{18 → 22}/util-inl.h +97 -127
  162. package/src/headers/{18 → 22}/util.h +293 -106
  163. package/src/headers/{18 → 22}/v8-fast-api-calls.h +103 -58
  164. package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
  165. package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
  166. package/dist/bindings/cws_darwin_x64_node83.node +0 -0
  167. package/dist/bindings/cws_darwin_x64_node93.node +0 -0
  168. package/dist/bindings/cws_linux_arm64_node83.node +0 -0
  169. package/dist/bindings/cws_linux_arm64_node93.node +0 -0
  170. package/dist/bindings/cws_linux_x64_node83.node +0 -0
  171. package/dist/bindings/cws_linux_x64_node93.node +0 -0
  172. package/src/headers/14/aliased_buffer.h +0 -263
  173. package/src/headers/14/allocated_buffer-inl.h +0 -110
  174. package/src/headers/14/allocated_buffer.h +0 -73
  175. package/src/headers/14/async_wrap-inl.h +0 -94
  176. package/src/headers/14/async_wrap.h +0 -230
  177. package/src/headers/14/base64.h +0 -183
  178. package/src/headers/14/base_object-inl.h +0 -371
  179. package/src/headers/14/base_object.h +0 -281
  180. package/src/headers/14/callback_queue-inl.h +0 -97
  181. package/src/headers/14/callback_queue.h +0 -78
  182. package/src/headers/14/debug_utils-inl.h +0 -223
  183. package/src/headers/14/debug_utils.h +0 -181
  184. package/src/headers/14/env.h +0 -1388
  185. package/src/headers/14/handle_wrap.h +0 -117
  186. package/src/headers/14/histogram-inl.h +0 -83
  187. package/src/headers/14/histogram.h +0 -98
  188. package/src/headers/14/inspector_agent.h +0 -149
  189. package/src/headers/14/inspector_profiler.h +0 -137
  190. package/src/headers/14/js_native_api.h +0 -544
  191. package/src/headers/14/js_native_api_types.h +0 -143
  192. package/src/headers/14/js_native_api_v8.h +0 -301
  193. package/src/headers/14/js_native_api_v8_internals.h +0 -38
  194. package/src/headers/14/json_utils.h +0 -161
  195. package/src/headers/14/memory_tracker-inl.h +0 -355
  196. package/src/headers/14/module_wrap.h +0 -99
  197. package/src/headers/14/node.h +0 -1032
  198. package/src/headers/14/node_api.h +0 -255
  199. package/src/headers/14/node_api_types.h +0 -44
  200. package/src/headers/14/node_binding.h +0 -99
  201. package/src/headers/14/node_buffer.h +0 -92
  202. package/src/headers/14/node_constants.h +0 -84
  203. package/src/headers/14/node_context_data.h +0 -44
  204. package/src/headers/14/node_contextify.h +0 -161
  205. package/src/headers/14/node_crypto.h +0 -865
  206. package/src/headers/14/node_crypto_bio.h +0 -195
  207. package/src/headers/14/node_crypto_clienthello-inl.h +0 -91
  208. package/src/headers/14/node_crypto_clienthello.h +0 -132
  209. package/src/headers/14/node_crypto_common.h +0 -138
  210. package/src/headers/14/node_crypto_groups.h +0 -415
  211. package/src/headers/14/node_dtrace.h +0 -86
  212. package/src/headers/14/node_errors.h +0 -214
  213. package/src/headers/14/node_file-inl.h +0 -306
  214. package/src/headers/14/node_file.h +0 -417
  215. package/src/headers/14/node_http2.h +0 -1191
  216. package/src/headers/14/node_http2_state.h +0 -149
  217. package/src/headers/14/node_http_common-inl.h +0 -194
  218. package/src/headers/14/node_http_common.h +0 -529
  219. package/src/headers/14/node_i18n.h +0 -144
  220. package/src/headers/14/node_internals.h +0 -405
  221. package/src/headers/14/node_main_instance.h +0 -96
  222. package/src/headers/14/node_mem.h +0 -45
  223. package/src/headers/14/node_messaging.h +0 -303
  224. package/src/headers/14/node_metadata.h +0 -109
  225. package/src/headers/14/node_mutex.h +0 -247
  226. package/src/headers/14/node_native_module.h +0 -101
  227. package/src/headers/14/node_native_module_env.h +0 -66
  228. package/src/headers/14/node_options-inl.h +0 -451
  229. package/src/headers/14/node_options.h +0 -481
  230. package/src/headers/14/node_perf.h +0 -181
  231. package/src/headers/14/node_perf_common.h +0 -97
  232. package/src/headers/14/node_platform.h +0 -189
  233. package/src/headers/14/node_process.h +0 -40
  234. package/src/headers/14/node_report.h +0 -47
  235. package/src/headers/14/node_revert.h +0 -72
  236. package/src/headers/14/node_root_certs.h +0 -3458
  237. package/src/headers/14/node_sockaddr-inl.h +0 -170
  238. package/src/headers/14/node_sockaddr.h +0 -123
  239. package/src/headers/14/node_stat_watcher.h +0 -70
  240. package/src/headers/14/node_union_bytes.h +0 -103
  241. package/src/headers/14/node_url.h +0 -188
  242. package/src/headers/14/node_version.h +0 -98
  243. package/src/headers/14/node_wasi.h +0 -108
  244. package/src/headers/14/node_win32_etw_provider-inl.h +0 -287
  245. package/src/headers/14/node_win32_etw_provider.h +0 -99
  246. package/src/headers/14/node_worker.h +0 -141
  247. package/src/headers/14/pipe_wrap.h +0 -78
  248. package/src/headers/14/req_wrap-inl.h +0 -170
  249. package/src/headers/14/req_wrap.h +0 -77
  250. package/src/headers/14/stream_base-inl.h +0 -275
  251. package/src/headers/14/stream_base.h +0 -434
  252. package/src/headers/14/stream_pipe.h +0 -73
  253. package/src/headers/14/stream_wrap.h +0 -130
  254. package/src/headers/14/string_bytes.h +0 -129
  255. package/src/headers/14/string_decoder.h +0 -50
  256. package/src/headers/14/string_search.h +0 -638
  257. package/src/headers/14/tcp_wrap.h +0 -101
  258. package/src/headers/14/threadpoolwork-inl.h +0 -57
  259. package/src/headers/14/tls_wrap.h +0 -222
  260. package/src/headers/14/tracing/agent.h +0 -195
  261. package/src/headers/14/tracing/trace_event.h +0 -720
  262. package/src/headers/14/tty_wrap.h +0 -64
  263. package/src/headers/14/udp_wrap.h +0 -227
  264. package/src/headers/14/util-inl.h +0 -566
  265. package/src/headers/14/util.h +0 -804
  266. package/src/headers/14/v8abbr.h +0 -124
  267. package/src/headers/16/aliased_buffer.h +0 -315
  268. package/src/headers/16/aliased_struct-inl.h +0 -54
  269. package/src/headers/16/aliased_struct.h +0 -63
  270. package/src/headers/16/allocated_buffer-inl.h +0 -110
  271. package/src/headers/16/allocated_buffer.h +0 -73
  272. package/src/headers/16/async_wrap-inl.h +0 -94
  273. package/src/headers/16/async_wrap.h +0 -246
  274. package/src/headers/16/base64-inl.h +0 -189
  275. package/src/headers/16/base64.h +0 -69
  276. package/src/headers/16/base_object.h +0 -294
  277. package/src/headers/16/connect_wrap.h +0 -26
  278. package/src/headers/16/connection_wrap.h +0 -30
  279. package/src/headers/16/crypto/crypto_aes.h +0 -89
  280. package/src/headers/16/crypto/crypto_bio.h +0 -194
  281. package/src/headers/16/crypto/crypto_cipher.h +0 -286
  282. package/src/headers/16/crypto/crypto_clienthello-inl.h +0 -90
  283. package/src/headers/16/crypto/crypto_clienthello.h +0 -131
  284. package/src/headers/16/crypto/crypto_common.h +0 -187
  285. package/src/headers/16/crypto/crypto_context.h +0 -147
  286. package/src/headers/16/crypto/crypto_dh.h +0 -157
  287. package/src/headers/16/crypto/crypto_dsa.h +0 -76
  288. package/src/headers/16/crypto/crypto_ec.h +0 -169
  289. package/src/headers/16/crypto/crypto_groups.h +0 -415
  290. package/src/headers/16/crypto/crypto_hash.h +0 -89
  291. package/src/headers/16/crypto/crypto_hkdf.h +0 -66
  292. package/src/headers/16/crypto/crypto_hmac.h +0 -94
  293. package/src/headers/16/crypto/crypto_keygen.h +0 -301
  294. package/src/headers/16/crypto/crypto_keys.h +0 -412
  295. package/src/headers/16/crypto/crypto_pbkdf2.h +0 -76
  296. package/src/headers/16/crypto/crypto_random.h +0 -130
  297. package/src/headers/16/crypto/crypto_rsa.h +0 -141
  298. package/src/headers/16/crypto/crypto_scrypt.h +0 -87
  299. package/src/headers/16/crypto/crypto_sig.h +0 -167
  300. package/src/headers/16/crypto/crypto_spkac.h +0 -20
  301. package/src/headers/16/crypto/crypto_timing.h +0 -20
  302. package/src/headers/16/crypto/crypto_tls.h +0 -292
  303. package/src/headers/16/crypto/crypto_util.h +0 -736
  304. package/src/headers/16/crypto/crypto_x509.h +0 -141
  305. package/src/headers/16/debug_utils.h +0 -184
  306. package/src/headers/16/diagnosticfilename-inl.h +0 -33
  307. package/src/headers/16/env-inl.h +0 -1277
  308. package/src/headers/16/env.h +0 -1629
  309. package/src/headers/16/handle_wrap.h +0 -121
  310. package/src/headers/16/histogram-inl.h +0 -88
  311. package/src/headers/16/histogram.h +0 -216
  312. package/src/headers/16/inspector_io.h +0 -78
  313. package/src/headers/16/inspector_socket.h +0 -60
  314. package/src/headers/16/inspector_socket_server.h +0 -110
  315. package/src/headers/16/js_native_api.h +0 -561
  316. package/src/headers/16/js_native_api_types.h +0 -160
  317. package/src/headers/16/js_native_api_v8.h +0 -451
  318. package/src/headers/16/js_native_api_v8_internals.h +0 -39
  319. package/src/headers/16/js_stream.h +0 -52
  320. package/src/headers/16/memory_tracker-inl.h +0 -356
  321. package/src/headers/16/memory_tracker.h +0 -284
  322. package/src/headers/16/node.d +0 -315
  323. package/src/headers/16/node.h +0 -1132
  324. package/src/headers/16/node.stp +0 -146
  325. package/src/headers/16/node_api.h +0 -275
  326. package/src/headers/16/node_api_internals.h +0 -30
  327. package/src/headers/16/node_api_types.h +0 -50
  328. package/src/headers/16/node_binding.h +0 -99
  329. package/src/headers/16/node_blob.h +0 -191
  330. package/src/headers/16/node_bob-inl.h +0 -37
  331. package/src/headers/16/node_bob.h +0 -111
  332. package/src/headers/16/node_buffer.h +0 -92
  333. package/src/headers/16/node_constants.h +0 -84
  334. package/src/headers/16/node_context_data.h +0 -44
  335. package/src/headers/16/node_contextify.h +0 -196
  336. package/src/headers/16/node_dir.h +0 -52
  337. package/src/headers/16/node_dtrace.h +0 -86
  338. package/src/headers/16/node_errors.h +0 -277
  339. package/src/headers/16/node_external_reference.h +0 -129
  340. package/src/headers/16/node_file-inl.h +0 -306
  341. package/src/headers/16/node_http2.h +0 -1140
  342. package/src/headers/16/node_http_common-inl.h +0 -200
  343. package/src/headers/16/node_http_common.h +0 -531
  344. package/src/headers/16/node_internals.h +0 -421
  345. package/src/headers/16/node_main_instance.h +0 -103
  346. package/src/headers/16/node_mem-inl.h +0 -112
  347. package/src/headers/16/node_messaging.h +0 -373
  348. package/src/headers/16/node_metadata.h +0 -122
  349. package/src/headers/16/node_native_module.h +0 -101
  350. package/src/headers/16/node_native_module_env.h +0 -68
  351. package/src/headers/16/node_object_wrap.h +0 -132
  352. package/src/headers/16/node_options-inl.h +0 -477
  353. package/src/headers/16/node_options.h +0 -494
  354. package/src/headers/16/node_perf.h +0 -185
  355. package/src/headers/16/node_perf_common.h +0 -89
  356. package/src/headers/16/node_platform.h +0 -192
  357. package/src/headers/16/node_process.h +0 -43
  358. package/src/headers/16/node_provider.d +0 -80
  359. package/src/headers/16/node_snapshotable.h +0 -137
  360. package/src/headers/16/node_sockaddr-inl.h +0 -266
  361. package/src/headers/16/node_sockaddr.h +0 -405
  362. package/src/headers/16/node_union_bytes.h +0 -103
  363. package/src/headers/16/node_url.h +0 -205
  364. package/src/headers/16/node_v8.h +0 -41
  365. package/src/headers/16/node_v8_platform-inl.h +0 -194
  366. package/src/headers/16/node_version.h +0 -98
  367. package/src/headers/16/node_wasi.h +0 -108
  368. package/src/headers/16/node_watchdog.h +0 -152
  369. package/src/headers/16/node_win32_etw_provider-inl.h +0 -288
  370. package/src/headers/16/node_win32_etw_provider.h +0 -99
  371. package/src/headers/16/node_worker.h +0 -145
  372. package/src/headers/16/req_wrap.h +0 -77
  373. package/src/headers/16/spawn_sync.h +0 -242
  374. package/src/headers/16/stream_base-inl.h +0 -303
  375. package/src/headers/16/stream_base.h +0 -454
  376. package/src/headers/16/stream_pipe.h +0 -73
  377. package/src/headers/16/string_bytes.h +0 -122
  378. package/src/headers/16/string_decoder-inl.h +0 -37
  379. package/src/headers/16/string_search.h +0 -638
  380. package/src/headers/16/tcp_wrap.h +0 -103
  381. package/src/headers/16/threadpoolwork-inl.h +0 -57
  382. package/src/headers/16/timer_wrap.h +0 -84
  383. package/src/headers/16/tracing/agent.h +0 -195
  384. package/src/headers/16/tracing/node_trace_buffer.h +0 -83
  385. package/src/headers/16/tracing/node_trace_writer.h +0 -75
  386. package/src/headers/16/tracing/trace_event.h +0 -720
  387. package/src/headers/16/tracing/trace_event_common.h +0 -1109
  388. package/src/headers/16/tracing/traced_value.h +0 -70
  389. package/src/headers/16/tty_wrap.h +0 -66
  390. package/src/headers/16/util-inl.h +0 -575
  391. package/src/headers/16/util.h +0 -824
  392. package/src/headers/16/v8abbr.h +0 -123
  393. package/src/headers/16/v8ustack.d +0 -695
  394. package/src/headers/18/aliased_buffer.h +0 -315
  395. package/src/headers/18/aliased_struct-inl.h +0 -54
  396. package/src/headers/18/aliased_struct.h +0 -63
  397. package/src/headers/18/base64-inl.h +0 -189
  398. package/src/headers/18/base64.h +0 -69
  399. package/src/headers/18/base_object-inl.h +0 -374
  400. package/src/headers/18/callback_queue-inl.h +0 -97
  401. package/src/headers/18/callback_queue.h +0 -78
  402. package/src/headers/18/cares_wrap.h +0 -523
  403. package/src/headers/18/connect_wrap.h +0 -26
  404. package/src/headers/18/connection_wrap.h +0 -30
  405. package/src/headers/18/crypto/crypto_aes.h +0 -89
  406. package/src/headers/18/crypto/crypto_bio.h +0 -194
  407. package/src/headers/18/crypto/crypto_cipher.h +0 -291
  408. package/src/headers/18/crypto/crypto_clienthello-inl.h +0 -90
  409. package/src/headers/18/crypto/crypto_common.h +0 -151
  410. package/src/headers/18/crypto/crypto_dh.h +0 -156
  411. package/src/headers/18/crypto/crypto_dsa.h +0 -77
  412. package/src/headers/18/crypto/crypto_ec.h +0 -170
  413. package/src/headers/18/crypto/crypto_groups.h +0 -415
  414. package/src/headers/18/crypto/crypto_hash.h +0 -89
  415. package/src/headers/18/crypto/crypto_hkdf.h +0 -65
  416. package/src/headers/18/crypto/crypto_hmac.h +0 -94
  417. package/src/headers/18/crypto/crypto_keygen.h +0 -305
  418. package/src/headers/18/crypto/crypto_pbkdf2.h +0 -76
  419. package/src/headers/18/crypto/crypto_random.h +0 -130
  420. package/src/headers/18/crypto/crypto_rsa.h +0 -141
  421. package/src/headers/18/crypto/crypto_scrypt.h +0 -87
  422. package/src/headers/18/crypto/crypto_sig.h +0 -168
  423. package/src/headers/18/crypto/crypto_spkac.h +0 -21
  424. package/src/headers/18/crypto/crypto_timing.h +0 -20
  425. package/src/headers/18/crypto/crypto_x509.h +0 -143
  426. package/src/headers/18/debug_utils-inl.h +0 -223
  427. package/src/headers/18/diagnosticfilename-inl.h +0 -33
  428. package/src/headers/18/env-inl.h +0 -1308
  429. package/src/headers/18/env.h +0 -1667
  430. package/src/headers/18/inspector_agent.h +0 -144
  431. package/src/headers/18/inspector_io.h +0 -78
  432. package/src/headers/18/inspector_profiler.h +0 -149
  433. package/src/headers/18/inspector_socket.h +0 -60
  434. package/src/headers/18/inspector_socket_server.h +0 -110
  435. package/src/headers/18/js_stream.h +0 -52
  436. package/src/headers/18/json_utils.h +0 -161
  437. package/src/headers/18/memory_tracker.h +0 -284
  438. package/src/headers/18/module_wrap.h +0 -116
  439. package/src/headers/18/node_binding.h +0 -99
  440. package/src/headers/18/node_context_data.h +0 -44
  441. package/src/headers/18/node_contextify.h +0 -196
  442. package/src/headers/18/node_crypto.h +0 -57
  443. package/src/headers/18/node_dir.h +0 -52
  444. package/src/headers/18/node_dtrace.h +0 -86
  445. package/src/headers/18/node_external_reference.h +0 -145
  446. package/src/headers/18/node_file.h +0 -426
  447. package/src/headers/18/node_http2_state.h +0 -149
  448. package/src/headers/18/node_i18n.h +0 -145
  449. package/src/headers/18/node_mem-inl.h +0 -112
  450. package/src/headers/18/node_mem.h +0 -45
  451. package/src/headers/18/node_mutex.h +0 -323
  452. package/src/headers/18/node_native_module.h +0 -109
  453. package/src/headers/18/node_native_module_env.h +0 -71
  454. package/src/headers/18/node_object_wrap.h +0 -132
  455. package/src/headers/18/node_process-inl.h +0 -26
  456. package/src/headers/18/node_report.h +0 -47
  457. package/src/headers/18/node_revert.h +0 -82
  458. package/src/headers/18/node_root_certs.h +0 -3246
  459. package/src/headers/18/node_snapshot_builder.h +0 -43
  460. package/src/headers/18/node_snapshotable.h +0 -130
  461. package/src/headers/18/node_stat_watcher.h +0 -72
  462. package/src/headers/18/node_union_bytes.h +0 -103
  463. package/src/headers/18/node_url.h +0 -205
  464. package/src/headers/18/node_v8.h +0 -41
  465. package/src/headers/18/node_v8_platform-inl.h +0 -194
  466. package/src/headers/18/node_wasi.h +0 -108
  467. package/src/headers/18/node_watchdog.h +0 -152
  468. package/src/headers/18/node_win32_etw_provider-inl.h +0 -288
  469. package/src/headers/18/node_win32_etw_provider.h +0 -99
  470. package/src/headers/18/pipe_wrap.h +0 -80
  471. package/src/headers/18/req_wrap-inl.h +0 -170
  472. package/src/headers/18/spawn_sync.h +0 -242
  473. package/src/headers/18/stream_wrap.h +0 -133
  474. package/src/headers/18/string_decoder-inl.h +0 -37
  475. package/src/headers/18/string_decoder.h +0 -50
  476. package/src/headers/18/string_search.h +0 -638
  477. package/src/headers/18/tracing/node_trace_buffer.h +0 -83
  478. package/src/headers/18/tracing/node_trace_writer.h +0 -75
  479. package/src/headers/18/tracing/trace_event_common.h +0 -1109
  480. package/src/headers/18/tracing/traced_value.h +0 -70
  481. package/src/headers/18/udp_wrap.h +0 -227
  482. package/src/headers/18/v8abbr.h +0 -123
  483. /package/src/headers/{14 → 20}/tracing/node_trace_buffer.h +0 -0
  484. /package/src/headers/{14 → 20}/tracing/node_trace_writer.h +0 -0
  485. /package/src/headers/{14 → 20}/tracing/traced_value.h +0 -0
  486. /package/src/headers/{14 → 22}/aliased_struct-inl.h +0 -0
  487. /package/src/headers/{14 → 22}/aliased_struct.h +0 -0
  488. /package/src/headers/{16 → 22}/callback_queue-inl.h +0 -0
  489. /package/src/headers/{14 → 22}/connect_wrap.h +0 -0
  490. /package/src/headers/{14 → 22}/connection_wrap.h +0 -0
  491. /package/src/headers/{14 → 22}/diagnosticfilename-inl.h +0 -0
  492. /package/src/headers/{18 → 22}/histogram-inl.h +0 -0
  493. /package/src/headers/{14 → 22}/inspector_io.h +0 -0
  494. /package/src/headers/{14 → 22}/inspector_socket.h +0 -0
  495. /package/src/headers/{14 → 22}/inspector_socket_server.h +0 -0
  496. /package/src/headers/{14 → 22}/js_stream.h +0 -0
  497. /package/src/headers/{14 → 22}/node_dir.h +0 -0
  498. /package/src/headers/{14 → 22}/node_mem-inl.h +0 -0
  499. /package/src/headers/{16 → 22}/node_mem.h +0 -0
  500. /package/src/headers/{16 → 22}/node_mutex.h +0 -0
  501. /package/src/headers/{14 → 22}/node_object_wrap.h +0 -0
  502. /package/src/headers/{16 → 22}/node_process-inl.h +0 -0
  503. /package/src/headers/{18 → 22}/node_sockaddr-inl.h +0 -0
  504. /package/src/headers/{18 → 22}/node_wasm_web_api.h +0 -0
  505. /package/src/headers/{16 → 22}/pipe_wrap.h +0 -0
  506. /package/src/headers/{18 → 22}/req_wrap.h +0 -0
  507. /package/src/headers/{18 → 22}/timer_wrap-inl.h +0 -0
  508. /package/src/headers/{18 → 22}/timer_wrap.h +0 -0
  509. /package/src/headers/{18 → 22}/tracing/agent.h +0 -0
  510. /package/src/headers/{14 → 22}/tracing/trace_event_common.h +0 -0
  511. /package/src/headers/{18 → 22}/tty_wrap.h +0 -0
@@ -24,9 +24,11 @@
24
24
 
25
25
  #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
26
26
 
27
+ #include "uv.h"
27
28
  #include "v8.h"
28
29
 
29
30
  #include "node.h"
31
+ #include "node_exit_code.h"
30
32
 
31
33
  #include <climits>
32
34
  #include <cstddef>
@@ -35,12 +37,15 @@
35
37
  #include <cstring>
36
38
 
37
39
  #include <array>
40
+ #include <bit>
41
+ #include <filesystem>
38
42
  #include <limits>
39
43
  #include <memory>
44
+ #include <optional>
45
+ #include <set>
40
46
  #include <string>
41
47
  #include <string_view>
42
48
  #include <type_traits>
43
- #include <set>
44
49
  #include <unordered_map>
45
50
  #include <utility>
46
51
  #include <vector>
@@ -53,13 +58,12 @@
53
58
 
54
59
  namespace node {
55
60
 
56
- // Maybe remove kPathSeparator when cpp17 is ready
61
+ constexpr char kPathSeparator = std::filesystem::path::preferred_separator;
62
+
57
63
  #ifdef _WIN32
58
- constexpr char kPathSeparator = '\\';
59
64
  /* MAX_PATH is in characters, not bytes. Make sure we have enough headroom. */
60
65
  #define PATH_MAX_BYTES (MAX_PATH * 4)
61
66
  #else
62
- constexpr char kPathSeparator = '/';
63
67
  #define PATH_MAX_BYTES (PATH_MAX)
64
68
  #endif
65
69
 
@@ -112,47 +116,65 @@ struct AssertionInfo {
112
116
  const char* message;
113
117
  const char* function;
114
118
  };
115
- [[noreturn]] void NODE_EXTERN_PRIVATE Assert(const AssertionInfo& info);
116
- [[noreturn]] void NODE_EXTERN_PRIVATE Abort();
117
- void DumpBacktrace(FILE* fp);
119
+
120
+ // This indirectly calls backtrace so it can not be marked as [[noreturn]].
121
+ void NODE_EXTERN_PRIVATE Assert(const AssertionInfo& info);
122
+ void DumpNativeBacktrace(FILE* fp);
123
+ void DumpJavaScriptBacktrace(FILE* fp);
118
124
 
119
125
  // Windows 8+ does not like abort() in Release mode
120
126
  #ifdef _WIN32
121
- #define ABORT_NO_BACKTRACE() _exit(134)
127
+ #define ABORT_NO_BACKTRACE() _exit(static_cast<int>(node::ExitCode::kAbort))
122
128
  #else
123
129
  #define ABORT_NO_BACKTRACE() abort()
124
130
  #endif
125
131
 
126
- #define ABORT() node::Abort()
132
+ // Caller of this macro must not be marked as [[noreturn]]. Printing of
133
+ // backtraces may not work correctly in [[noreturn]] functions because
134
+ // when generating code for them the compiler can choose not to
135
+ // maintain the frame pointers or link registers that are necessary for
136
+ // correct backtracing.
137
+ // `ABORT` must be a macro and not a [[noreturn]] function to make sure the
138
+ // backtrace is correct.
139
+ #define ABORT() \
140
+ do { \
141
+ node::DumpNativeBacktrace(stderr); \
142
+ node::DumpJavaScriptBacktrace(stderr); \
143
+ fflush(stderr); \
144
+ ABORT_NO_BACKTRACE(); \
145
+ } while (0)
127
146
 
128
- #define ERROR_AND_ABORT(expr) \
129
- do { \
130
- /* Make sure that this struct does not end up in inline code, but */ \
131
- /* rather in a read-only data section when modifying this code. */ \
132
- static const node::AssertionInfo args = { \
133
- __FILE__ ":" STRINGIFY(__LINE__), #expr, PRETTY_FUNCTION_NAME \
134
- }; \
135
- node::Assert(args); \
147
+ #define ERROR_AND_ABORT(expr) \
148
+ do { \
149
+ /* Make sure that this struct does not end up in inline code, but */ \
150
+ /* rather in a read-only data section when modifying this code. */ \
151
+ static const node::AssertionInfo error_and_abort_args = { \
152
+ __FILE__ ":" STRINGIFY(__LINE__), #expr, PRETTY_FUNCTION_NAME}; \
153
+ node::Assert(error_and_abort_args); \
154
+ /* `node::Assert` doesn't return. Add an [[noreturn]] abort() here to */ \
155
+ /* make the compiler happy about no return value in the caller */ \
156
+ /* function when calling ERROR_AND_ABORT. */ \
157
+ ABORT_NO_BACKTRACE(); \
136
158
  } while (0)
137
159
 
138
160
  #ifdef __GNUC__
139
- #define LIKELY(expr) __builtin_expect(!!(expr), 1)
140
- #define UNLIKELY(expr) __builtin_expect(!!(expr), 0)
141
161
  #define PRETTY_FUNCTION_NAME __PRETTY_FUNCTION__
142
162
  #else
143
- #define LIKELY(expr) expr
144
- #define UNLIKELY(expr) expr
163
+ #if defined(_MSC_VER)
164
+ #define PRETTY_FUNCTION_NAME __FUNCSIG__
165
+ #else
145
166
  #define PRETTY_FUNCTION_NAME ""
146
167
  #endif
168
+ #endif
147
169
 
148
170
  #define STRINGIFY_(x) #x
149
171
  #define STRINGIFY(x) STRINGIFY_(x)
150
172
 
151
- #define CHECK(expr) \
152
- do { \
153
- if (UNLIKELY(!(expr))) { \
154
- ERROR_AND_ABORT(expr); \
155
- } \
173
+ #define CHECK(expr) \
174
+ do { \
175
+ if (!(expr)) [[unlikely]] { \
176
+ ERROR_AND_ABORT(expr); \
177
+ } \
156
178
  } while (0)
157
179
 
158
180
  #define CHECK_EQ(a, b) CHECK((a) == (b))
@@ -193,7 +215,7 @@ void DumpBacktrace(FILE* fp);
193
215
  #define UNREACHABLE(...) \
194
216
  ERROR_AND_ABORT("Unreachable code reached" __VA_OPT__(": ") __VA_ARGS__)
195
217
 
196
- // ECMA262 20.1.2.6 Number.MAX_SAFE_INTEGER (2^53-1)
218
+ // ECMA-262, 15th edition, 21.1.2.6. Number.MAX_SAFE_INTEGER (2^53-1)
197
219
  constexpr int64_t kMaxSafeJsInteger = 9007199254740991;
198
220
 
199
221
  inline bool IsSafeJsInt(v8::Local<v8::Value> v);
@@ -273,6 +295,37 @@ template <typename Inner, typename Outer>
273
295
  constexpr ContainerOfHelper<Inner, Outer> ContainerOf(Inner Outer::*field,
274
296
  Inner* pointer);
275
297
 
298
+ class KVStore {
299
+ public:
300
+ KVStore() = default;
301
+ virtual ~KVStore() = default;
302
+ KVStore(const KVStore&) = delete;
303
+ KVStore& operator=(const KVStore&) = delete;
304
+ KVStore(KVStore&&) = delete;
305
+ KVStore& operator=(KVStore&&) = delete;
306
+
307
+ virtual v8::MaybeLocal<v8::String> Get(v8::Isolate* isolate,
308
+ v8::Local<v8::String> key) const = 0;
309
+ virtual std::optional<std::string> Get(const char* key) const = 0;
310
+ virtual void Set(v8::Isolate* isolate,
311
+ v8::Local<v8::String> key,
312
+ v8::Local<v8::String> value) = 0;
313
+ virtual int32_t Query(v8::Isolate* isolate,
314
+ v8::Local<v8::String> key) const = 0;
315
+ virtual int32_t Query(const char* key) const = 0;
316
+ virtual void Delete(v8::Isolate* isolate, v8::Local<v8::String> key) = 0;
317
+ virtual v8::Local<v8::Array> Enumerate(v8::Isolate* isolate) const = 0;
318
+
319
+ virtual std::shared_ptr<KVStore> Clone(v8::Isolate* isolate) const;
320
+ virtual v8::Maybe<void> AssignFromObject(v8::Local<v8::Context> context,
321
+ v8::Local<v8::Object> entries);
322
+ v8::Maybe<void> AssignToObject(v8::Isolate* isolate,
323
+ v8::Local<v8::Context> context,
324
+ v8::Local<v8::Object> object);
325
+
326
+ static std::shared_ptr<KVStore> CreateMapKVStore();
327
+ };
328
+
276
329
  // Convenience wrapper around v8::String::NewFromOneByte().
277
330
  inline v8::Local<v8::String> OneByteString(v8::Isolate* isolate,
278
331
  const char* data,
@@ -302,14 +355,6 @@ inline v8::Local<v8::String> FIXED_ONE_BYTE_STRING(
302
355
  return OneByteString(isolate, arr.data(), N - 1);
303
356
  }
304
357
 
305
-
306
-
307
- // Swaps bytes in place. nbytes is the number of bytes to swap and must be a
308
- // multiple of the word size (checked by function).
309
- inline void SwapBytes16(char* data, size_t nbytes);
310
- inline void SwapBytes32(char* data, size_t nbytes);
311
- inline void SwapBytes64(char* data, size_t nbytes);
312
-
313
358
  // tolower() is locale-sensitive. Use ToLower() instead.
314
359
  inline char ToLower(char c);
315
360
  inline std::string ToLower(const std::string& in);
@@ -380,19 +425,7 @@ class MaybeStackBuffer {
380
425
  // This method can be called multiple times throughout the lifetime of the
381
426
  // buffer, but once this has been called Invalidate() cannot be used.
382
427
  // Content of the buffer in the range [0, length()) is preserved.
383
- void AllocateSufficientStorage(size_t storage) {
384
- CHECK(!IsInvalidated());
385
- if (storage > capacity()) {
386
- bool was_allocated = IsAllocated();
387
- T* allocated_ptr = was_allocated ? buf_ : nullptr;
388
- buf_ = Realloc(allocated_ptr, storage);
389
- capacity_ = storage;
390
- if (!was_allocated && length_ > 0)
391
- memcpy(buf_, buf_st_, length_ * sizeof(buf_[0]));
392
- }
393
-
394
- length_ = storage;
395
- }
428
+ void AllocateSufficientStorage(size_t storage);
396
429
 
397
430
  void SetLength(size_t length) {
398
431
  // capacity() returns how much memory is actually available.
@@ -454,6 +487,11 @@ class MaybeStackBuffer {
454
487
  free(buf_);
455
488
  }
456
489
 
490
+ inline std::basic_string<T> ToString() const { return {out(), length()}; }
491
+ inline std::basic_string_view<T> ToStringView() const {
492
+ return {out(), length()};
493
+ }
494
+
457
495
  private:
458
496
  size_t length_;
459
497
  // capacity of the malloc'ed buf_
@@ -470,18 +508,31 @@ class ArrayBufferViewContents {
470
508
  public:
471
509
  ArrayBufferViewContents() = default;
472
510
 
511
+ ArrayBufferViewContents(const ArrayBufferViewContents&) = delete;
512
+ void operator=(const ArrayBufferViewContents&) = delete;
513
+
473
514
  explicit inline ArrayBufferViewContents(v8::Local<v8::Value> value);
474
515
  explicit inline ArrayBufferViewContents(v8::Local<v8::Object> value);
475
516
  explicit inline ArrayBufferViewContents(v8::Local<v8::ArrayBufferView> abv);
476
517
  inline void Read(v8::Local<v8::ArrayBufferView> abv);
518
+ inline void ReadValue(v8::Local<v8::Value> buf);
477
519
 
520
+ inline bool WasDetached() const { return was_detached_; }
478
521
  inline const T* data() const { return data_; }
479
522
  inline size_t length() const { return length_; }
480
523
 
481
524
  private:
525
+ // Declaring operator new and delete as deleted is not spec compliant.
526
+ // Therefore, declare them private instead to disable dynamic alloc.
527
+ void* operator new(size_t size);
528
+ void* operator new[](size_t size);
529
+ void operator delete(void*, size_t);
530
+ void operator delete[](void*, size_t);
531
+
482
532
  T stack_storage_[kStackStorageSize];
483
533
  T* data_ = nullptr;
484
534
  size_t length_ = 0;
535
+ bool was_detached_ = false;
485
536
  };
486
537
 
487
538
  class Utf8Value : public MaybeStackBuffer<char> {
@@ -489,10 +540,12 @@ class Utf8Value : public MaybeStackBuffer<char> {
489
540
  explicit Utf8Value(v8::Isolate* isolate, v8::Local<v8::Value> value);
490
541
 
491
542
  inline std::string ToString() const { return std::string(out(), length()); }
492
-
493
- inline bool operator==(const char* a) const {
494
- return strcmp(out(), a) == 0;
543
+ inline std::string_view ToStringView() const {
544
+ return std::string_view(out(), length());
495
545
  }
546
+
547
+ inline bool operator==(const char* a) const { return strcmp(out(), a) == 0; }
548
+ inline bool operator!=(const char* a) const { return !(*this == a); }
496
549
  };
497
550
 
498
551
  class TwoByteValue : public MaybeStackBuffer<uint16_t> {
@@ -505,19 +558,23 @@ class BufferValue : public MaybeStackBuffer<char> {
505
558
  explicit BufferValue(v8::Isolate* isolate, v8::Local<v8::Value> value);
506
559
 
507
560
  inline std::string ToString() const { return std::string(out(), length()); }
561
+ inline std::string_view ToStringView() const {
562
+ return std::string_view(out(), length());
563
+ }
564
+ inline std::u8string_view ToU8StringView() const {
565
+ return std::u8string_view(reinterpret_cast<const char8_t*>(out()),
566
+ length());
567
+ }
508
568
  };
509
569
 
510
- #define SPREAD_BUFFER_ARG(val, name) \
511
- CHECK((val)->IsArrayBufferView()); \
512
- v8::Local<v8::ArrayBufferView> name = (val).As<v8::ArrayBufferView>(); \
513
- std::shared_ptr<v8::BackingStore> name##_bs = \
514
- name->Buffer()->GetBackingStore(); \
515
- const size_t name##_offset = name->ByteOffset(); \
516
- const size_t name##_length = name->ByteLength(); \
517
- char* const name##_data = \
518
- static_cast<char*>(name##_bs->Data()) + name##_offset; \
519
- if (name##_length > 0) \
520
- CHECK_NE(name##_data, nullptr);
570
+ #define SPREAD_BUFFER_ARG(val, name) \
571
+ CHECK((val)->IsArrayBufferView()); \
572
+ v8::Local<v8::ArrayBufferView> name = (val).As<v8::ArrayBufferView>(); \
573
+ const size_t name##_offset = name->ByteOffset(); \
574
+ const size_t name##_length = name->ByteLength(); \
575
+ char* const name##_data = \
576
+ static_cast<char*>(name->Buffer()->Data()) + name##_offset; \
577
+ if (name##_length > 0) CHECK_NE(name##_data, nullptr);
521
578
 
522
579
  // Use this when a variable or parameter is unused in order to explicitly
523
580
  // silence a compiler warning about that.
@@ -537,12 +594,6 @@ struct OnScopeLeaveImpl {
537
594
  : fn_(std::move(other.fn_)), active_(other.active_) {
538
595
  other.active_ = false;
539
596
  }
540
- OnScopeLeaveImpl& operator=(OnScopeLeaveImpl&& other) {
541
- if (this == &other) return *this;
542
- this->~OnScopeLeave();
543
- new (this)OnScopeLeaveImpl(std::move(other));
544
- return *this;
545
- }
546
597
  };
547
598
 
548
599
  // Run a function when exiting the current scope. Used like this:
@@ -567,7 +618,7 @@ struct MallocedBuffer {
567
618
  }
568
619
 
569
620
  void Truncate(size_t new_size) {
570
- CHECK(new_size <= size);
621
+ CHECK_LE(new_size, size);
571
622
  size = new_size;
572
623
  }
573
624
 
@@ -576,7 +627,7 @@ struct MallocedBuffer {
576
627
  data = UncheckedRealloc(data, new_size);
577
628
  }
578
629
 
579
- inline bool is_empty() const { return data == nullptr; }
630
+ bool is_empty() const { return data == nullptr; }
580
631
 
581
632
  MallocedBuffer() : data(nullptr), size(0) {}
582
633
  explicit MallocedBuffer(size_t size) : data(Malloc<T>(size)), size(size) {}
@@ -645,7 +696,18 @@ struct FunctionDeleter {
645
696
  template <typename T, void (*function)(T*)>
646
697
  using DeleteFnPtr = typename FunctionDeleter<T, function>::Pointer;
647
698
 
648
- std::vector<std::string> SplitString(const std::string& in, char delim);
699
+ // Convert a v8::Array into an std::vector using the callback-based API.
700
+ // This can be faster than calling Array::Get() repeatedly when the array
701
+ // has more than 2 entries.
702
+ // Note that iterating over an array in C++ and performing operations on each
703
+ // element in a C++ loop is still slower than iterating over the array in JS
704
+ // and calling into native in the JS loop repeatedly on each element,
705
+ // as of V8 11.9.
706
+ inline v8::Maybe<void> FromV8Array(v8::Local<v8::Context> context,
707
+ v8::Local<v8::Array> js_array,
708
+ std::vector<v8::Global<v8::Value>>* out);
709
+ std::vector<std::string_view> SplitString(const std::string_view in,
710
+ const std::string_view delim);
649
711
 
650
712
  inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
651
713
  std::string_view str,
@@ -714,40 +776,16 @@ inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
714
776
  .Check(); \
715
777
  } while (0)
716
778
 
717
- enum Endianness {
718
- kLittleEndian, // _Not_ LITTLE_ENDIAN, clashes with endian.h.
719
- kBigEndian
720
- };
721
-
722
- inline enum Endianness GetEndianness() {
723
- // Constant-folded by the compiler.
724
- const union {
725
- uint8_t u8[2];
726
- uint16_t u16;
727
- } u = {{1, 0}};
728
- return u.u16 == 1 ? kLittleEndian : kBigEndian;
729
- }
730
-
731
- inline bool IsLittleEndian() {
732
- return GetEndianness() == kLittleEndian;
779
+ constexpr inline bool IsLittleEndian() {
780
+ return std::endian::native == std::endian::little;
733
781
  }
734
782
 
735
- inline bool IsBigEndian() {
736
- return GetEndianness() == kBigEndian;
783
+ constexpr inline bool IsBigEndian() {
784
+ return std::endian::native == std::endian::big;
737
785
  }
738
786
 
739
- // Round up a to the next highest multiple of b.
740
- template <typename T>
741
- constexpr T RoundUp(T a, T b) {
742
- return a % b != 0 ? a + b - (a % b) : a;
743
- }
744
-
745
- // Align ptr to an `alignment`-bytes boundary.
746
- template <typename T, typename U>
747
- constexpr T* AlignUp(T* ptr, U alignment) {
748
- return reinterpret_cast<T*>(
749
- RoundUp(reinterpret_cast<uintptr_t>(ptr), alignment));
750
- }
787
+ static_assert(IsLittleEndian() || IsBigEndian(),
788
+ "Node.js does not support mixed-endian systems");
751
789
 
752
790
  class SlicedArguments : public MaybeStackBuffer<v8::Local<v8::Value>> {
753
791
  public:
@@ -799,20 +837,20 @@ class PersistentToLocal {
799
837
  // computations.
800
838
  class FastStringKey {
801
839
  public:
802
- constexpr explicit FastStringKey(const char* name);
840
+ constexpr explicit FastStringKey(std::string_view name);
803
841
 
804
842
  struct Hash {
805
843
  constexpr size_t operator()(const FastStringKey& key) const;
806
844
  };
807
845
  constexpr bool operator==(const FastStringKey& other) const;
808
846
 
809
- constexpr const char* c_str() const;
847
+ constexpr std::string_view as_string_view() const;
810
848
 
811
849
  private:
812
- static constexpr size_t HashImpl(const char* str);
850
+ static constexpr size_t HashImpl(std::string_view str);
813
851
 
814
- const char* name_;
815
- size_t cached_hash_;
852
+ const std::string_view name_;
853
+ const size_t cached_hash_;
816
854
  };
817
855
 
818
856
  // Like std::static_pointer_cast but for unique_ptr with the default deleter.
@@ -826,6 +864,155 @@ std::unique_ptr<T> static_unique_pointer_cast(std::unique_ptr<U>&& ptr) {
826
864
  // Returns a non-zero code if it fails to open or read the file,
827
865
  // aborts if it fails to close the file.
828
866
  int ReadFileSync(std::string* result, const char* path);
867
+ // Reads all contents of a FILE*, aborts if it fails.
868
+ std::vector<char> ReadFileSync(FILE* fp);
869
+
870
+ v8::Local<v8::FunctionTemplate> NewFunctionTemplate(
871
+ v8::Isolate* isolate,
872
+ v8::FunctionCallback callback,
873
+ v8::Local<v8::Signature> signature = v8::Local<v8::Signature>(),
874
+ v8::ConstructorBehavior behavior = v8::ConstructorBehavior::kAllow,
875
+ v8::SideEffectType side_effect = v8::SideEffectType::kHasSideEffect,
876
+ const v8::CFunction* c_function = nullptr);
877
+
878
+ // Convenience methods for NewFunctionTemplate().
879
+ void SetMethod(v8::Local<v8::Context> context,
880
+ v8::Local<v8::Object> that,
881
+ const std::string_view name,
882
+ v8::FunctionCallback callback);
883
+ // Similar to SetProtoMethod but without receiver signature checks.
884
+ void SetMethod(v8::Isolate* isolate,
885
+ v8::Local<v8::Template> that,
886
+ const std::string_view name,
887
+ v8::FunctionCallback callback);
888
+
889
+ void SetFastMethod(v8::Isolate* isolate,
890
+ v8::Local<v8::Template> that,
891
+ const std::string_view name,
892
+ v8::FunctionCallback slow_callback,
893
+ const v8::CFunction* c_function);
894
+ void SetFastMethod(v8::Local<v8::Context> context,
895
+ v8::Local<v8::Object> that,
896
+ const std::string_view name,
897
+ v8::FunctionCallback slow_callback,
898
+ const v8::CFunction* c_function);
899
+ void SetFastMethod(v8::Isolate* isolate,
900
+ v8::Local<v8::Template> that,
901
+ const std::string_view name,
902
+ v8::FunctionCallback slow_callback,
903
+ const v8::MemorySpan<const v8::CFunction>& methods);
904
+ void SetFastMethodNoSideEffect(v8::Isolate* isolate,
905
+ v8::Local<v8::Template> that,
906
+ const std::string_view name,
907
+ v8::FunctionCallback slow_callback,
908
+ const v8::CFunction* c_function);
909
+ void SetFastMethodNoSideEffect(v8::Local<v8::Context> context,
910
+ v8::Local<v8::Object> that,
911
+ const std::string_view name,
912
+ v8::FunctionCallback slow_callback,
913
+ const v8::CFunction* c_function);
914
+ void SetFastMethodNoSideEffect(
915
+ v8::Isolate* isolate,
916
+ v8::Local<v8::Template> that,
917
+ const std::string_view name,
918
+ v8::FunctionCallback slow_callback,
919
+ const v8::MemorySpan<const v8::CFunction>& methods);
920
+ void SetProtoMethod(v8::Isolate* isolate,
921
+ v8::Local<v8::FunctionTemplate> that,
922
+ const std::string_view name,
923
+ v8::FunctionCallback callback);
924
+
925
+ void SetInstanceMethod(v8::Isolate* isolate,
926
+ v8::Local<v8::FunctionTemplate> that,
927
+ const std::string_view name,
928
+ v8::FunctionCallback callback);
929
+
930
+ // Safe variants denote the function has no side effects.
931
+ void SetMethodNoSideEffect(v8::Local<v8::Context> context,
932
+ v8::Local<v8::Object> that,
933
+ const std::string_view name,
934
+ v8::FunctionCallback callback);
935
+ void SetProtoMethodNoSideEffect(v8::Isolate* isolate,
936
+ v8::Local<v8::FunctionTemplate> that,
937
+ const std::string_view name,
938
+ v8::FunctionCallback callback);
939
+ void SetMethodNoSideEffect(v8::Isolate* isolate,
940
+ v8::Local<v8::Template> that,
941
+ const std::string_view name,
942
+ v8::FunctionCallback callback);
943
+
944
+ enum class SetConstructorFunctionFlag {
945
+ NONE,
946
+ SET_CLASS_NAME,
947
+ };
948
+
949
+ void SetConstructorFunction(v8::Local<v8::Context> context,
950
+ v8::Local<v8::Object> that,
951
+ const char* name,
952
+ v8::Local<v8::FunctionTemplate> tmpl,
953
+ SetConstructorFunctionFlag flag =
954
+ SetConstructorFunctionFlag::SET_CLASS_NAME);
955
+
956
+ void SetConstructorFunction(v8::Local<v8::Context> context,
957
+ v8::Local<v8::Object> that,
958
+ v8::Local<v8::String> name,
959
+ v8::Local<v8::FunctionTemplate> tmpl,
960
+ SetConstructorFunctionFlag flag =
961
+ SetConstructorFunctionFlag::SET_CLASS_NAME);
962
+
963
+ void SetConstructorFunction(v8::Isolate* isolate,
964
+ v8::Local<v8::Template> that,
965
+ const char* name,
966
+ v8::Local<v8::FunctionTemplate> tmpl,
967
+ SetConstructorFunctionFlag flag =
968
+ SetConstructorFunctionFlag::SET_CLASS_NAME);
969
+
970
+ void SetConstructorFunction(v8::Isolate* isolate,
971
+ v8::Local<v8::Template> that,
972
+ v8::Local<v8::String> name,
973
+ v8::Local<v8::FunctionTemplate> tmpl,
974
+ SetConstructorFunctionFlag flag =
975
+ SetConstructorFunctionFlag::SET_CLASS_NAME);
976
+
977
+ // Like RAIIIsolate, except doesn't enter the isolate while it's in scope.
978
+ class RAIIIsolateWithoutEntering {
979
+ public:
980
+ explicit RAIIIsolateWithoutEntering(const SnapshotData* data = nullptr);
981
+ ~RAIIIsolateWithoutEntering();
982
+
983
+ v8::Isolate* get() const { return isolate_; }
984
+
985
+ private:
986
+ std::unique_ptr<v8::ArrayBuffer::Allocator> allocator_;
987
+ v8::Isolate* isolate_;
988
+ };
989
+
990
+ // Simple RAII class to spin up a v8::Isolate instance and enter it
991
+ // immediately.
992
+ class RAIIIsolate {
993
+ public:
994
+ explicit RAIIIsolate(const SnapshotData* data = nullptr);
995
+ ~RAIIIsolate();
996
+
997
+ v8::Isolate* get() const { return isolate_.get(); }
998
+
999
+ private:
1000
+ RAIIIsolateWithoutEntering isolate_;
1001
+ v8::Isolate::Scope isolate_scope_;
1002
+ };
1003
+
1004
+ std::string DetermineSpecificErrorType(Environment* env,
1005
+ v8::Local<v8::Value> input);
1006
+
1007
+ v8::Maybe<int32_t> GetValidatedFd(Environment* env, v8::Local<v8::Value> input);
1008
+ v8::Maybe<int> GetValidFileMode(Environment* env,
1009
+ v8::Local<v8::Value> input,
1010
+ uv_fs_type type);
1011
+
1012
+ // Returns true if OS==Windows and filename ends in .bat or .cmd,
1013
+ // case insensitive.
1014
+ inline bool IsWindowsBatchFile(const char* filename);
1015
+
829
1016
  } // namespace node
830
1017
 
831
1018
  #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS