@encharm/cws 4.4.1 → 4.5.1

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