@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
@@ -86,13 +86,22 @@ template <typename NativeT, typename V8T>
86
86
  void FillStatsArray(AliasedBufferBase<NativeT, V8T>* fields,
87
87
  const uv_stat_t* s,
88
88
  const size_t offset) {
89
- #define SET_FIELD_WITH_STAT(stat_offset, stat) \
90
- fields->SetValue(offset + static_cast<size_t>(FsStatsOffset::stat_offset), \
89
+ #define SET_FIELD_WITH_STAT(stat_offset, stat) \
90
+ fields->SetValue(offset + static_cast<size_t>(FsStatsOffset::stat_offset), \
91
91
  static_cast<NativeT>(stat))
92
92
 
93
- #define SET_FIELD_WITH_TIME_STAT(stat_offset, stat) \
94
- /* NOLINTNEXTLINE(runtime/int) */ \
93
+ // On win32, time is stored in uint64_t and starts from 1601-01-01.
94
+ // libuv calculates tv_sec and tv_nsec from it and converts to signed long,
95
+ // which causes Y2038 overflow. On the other platforms it is safe to treat
96
+ // negative values as pre-epoch time.
97
+ #ifdef _WIN32
98
+ #define SET_FIELD_WITH_TIME_STAT(stat_offset, stat) \
99
+ /* NOLINTNEXTLINE(runtime/int) */ \
95
100
  SET_FIELD_WITH_STAT(stat_offset, static_cast<unsigned long>(stat))
101
+ #else
102
+ #define SET_FIELD_WITH_TIME_STAT(stat_offset, stat) \
103
+ SET_FIELD_WITH_STAT(stat_offset, static_cast<double>(stat))
104
+ #endif // _WIN32
96
105
 
97
106
  SET_FIELD_WITH_STAT(kDev, s->st_dev);
98
107
  SET_FIELD_WITH_STAT(kMode, s->st_mode);
@@ -135,6 +144,38 @@ v8::Local<v8::Value> FillGlobalStatsArray(BindingData* binding_data,
135
144
  }
136
145
  }
137
146
 
147
+ template <typename NativeT, typename V8T>
148
+ void FillStatFsArray(AliasedBufferBase<NativeT, V8T>* fields,
149
+ const uv_statfs_t* s) {
150
+ #define SET_FIELD(field, stat) \
151
+ fields->SetValue(static_cast<size_t>(FsStatFsOffset::field), \
152
+ static_cast<NativeT>(stat))
153
+
154
+ SET_FIELD(kType, s->f_type);
155
+ SET_FIELD(kBSize, s->f_bsize);
156
+ SET_FIELD(kBlocks, s->f_blocks);
157
+ SET_FIELD(kBFree, s->f_bfree);
158
+ SET_FIELD(kBAvail, s->f_bavail);
159
+ SET_FIELD(kFiles, s->f_files);
160
+ SET_FIELD(kFFree, s->f_ffree);
161
+
162
+ #undef SET_FIELD
163
+ }
164
+
165
+ v8::Local<v8::Value> FillGlobalStatFsArray(BindingData* binding_data,
166
+ const bool use_bigint,
167
+ const uv_statfs_t* s) {
168
+ if (use_bigint) {
169
+ auto* const arr = &binding_data->statfs_field_bigint_array;
170
+ FillStatFsArray(arr, s);
171
+ return arr->GetJSArray();
172
+ } else {
173
+ auto* const arr = &binding_data->statfs_field_array;
174
+ FillStatFsArray(arr, s);
175
+ return arr->GetJSArray();
176
+ }
177
+ }
178
+
138
179
  template <typename AliasedBufferT>
139
180
  FSReqPromise<AliasedBufferT>*
140
181
  FSReqPromise<AliasedBufferT>::New(BindingData* binding_data,
@@ -156,31 +197,39 @@ FSReqPromise<AliasedBufferT>::New(BindingData* binding_data,
156
197
 
157
198
  template <typename AliasedBufferT>
158
199
  FSReqPromise<AliasedBufferT>::~FSReqPromise() {
159
- // Validate that the promise was explicitly resolved or rejected.
160
- CHECK(finished_);
200
+ // Validate that the promise was explicitly resolved or rejected but only if
201
+ // the Isolate is not terminating because in this case the promise might have
202
+ // not finished.
203
+ CHECK_IMPLIES(!finished_, !env()->can_call_into_js());
161
204
  }
162
205
 
163
206
  template <typename AliasedBufferT>
164
- FSReqPromise<AliasedBufferT>::FSReqPromise(
165
- BindingData* binding_data,
166
- v8::Local<v8::Object> obj,
167
- bool use_bigint)
168
- : FSReqBase(binding_data,
169
- obj,
170
- AsyncWrap::PROVIDER_FSREQPROMISE,
171
- use_bigint),
172
- stats_field_array_(
173
- env()->isolate(),
174
- static_cast<size_t>(FsStatsOffset::kFsStatsFieldsNumber)) {}
207
+ FSReqPromise<AliasedBufferT>::FSReqPromise(BindingData* binding_data,
208
+ v8::Local<v8::Object> obj,
209
+ bool use_bigint)
210
+ : FSReqBase(
211
+ binding_data, obj, AsyncWrap::PROVIDER_FSREQPROMISE, use_bigint),
212
+ stats_field_array_(
213
+ env()->isolate(),
214
+ static_cast<size_t>(FsStatsOffset::kFsStatsFieldsNumber)),
215
+ statfs_field_array_(
216
+ env()->isolate(),
217
+ static_cast<size_t>(FsStatFsOffset::kFsStatFsFieldsNumber)) {}
175
218
 
176
219
  template <typename AliasedBufferT>
177
220
  void FSReqPromise<AliasedBufferT>::Reject(v8::Local<v8::Value> reject) {
178
221
  finished_ = true;
179
222
  v8::HandleScope scope(env()->isolate());
180
223
  InternalCallbackScope callback_scope(this);
181
- v8::Local<v8::Value> value =
182
- object()->Get(env()->context(),
183
- env()->promise_string()).ToLocalChecked();
224
+ v8::Local<v8::Value> value;
225
+ if (!object()
226
+ ->Get(env()->context(), env()->promise_string())
227
+ .ToLocal(&value)) {
228
+ // If we hit this, getting the value from the object failed and
229
+ // an error was likely scheduled. We could try to reject the promise
230
+ // but let's just allow the error to propagate.
231
+ return;
232
+ }
184
233
  v8::Local<v8::Promise::Resolver> resolver = value.As<v8::Promise::Resolver>();
185
234
  USE(resolver->Reject(env()->context(), reject).FromJust());
186
235
  }
@@ -190,9 +239,13 @@ void FSReqPromise<AliasedBufferT>::Resolve(v8::Local<v8::Value> value) {
190
239
  finished_ = true;
191
240
  v8::HandleScope scope(env()->isolate());
192
241
  InternalCallbackScope callback_scope(this);
193
- v8::Local<v8::Value> val =
194
- object()->Get(env()->context(),
195
- env()->promise_string()).ToLocalChecked();
242
+ v8::Local<v8::Value> val;
243
+ if (!object()->Get(env()->context(), env()->promise_string()).ToLocal(&val)) {
244
+ // If we hit this, getting the value from the object failed and
245
+ // an error was likely scheduled. We could try to reject the promise
246
+ // but let's just allow the error to propagate.
247
+ return;
248
+ }
196
249
  v8::Local<v8::Promise::Resolver> resolver = val.As<v8::Promise::Resolver>();
197
250
  USE(resolver->Resolve(env()->context(), value).FromJust());
198
251
  }
@@ -203,12 +256,22 @@ void FSReqPromise<AliasedBufferT>::ResolveStat(const uv_stat_t* stat) {
203
256
  Resolve(stats_field_array_.GetJSArray());
204
257
  }
205
258
 
259
+ template <typename AliasedBufferT>
260
+ void FSReqPromise<AliasedBufferT>::ResolveStatFs(const uv_statfs_t* stat) {
261
+ FillStatFsArray(&statfs_field_array_, stat);
262
+ Resolve(statfs_field_array_.GetJSArray());
263
+ }
264
+
206
265
  template <typename AliasedBufferT>
207
266
  void FSReqPromise<AliasedBufferT>::SetReturnValue(
208
267
  const v8::FunctionCallbackInfo<v8::Value>& args) {
209
- v8::Local<v8::Value> val =
210
- object()->Get(env()->context(),
211
- env()->promise_string()).ToLocalChecked();
268
+ v8::Local<v8::Value> val;
269
+ if (!object()->Get(env()->context(), env()->promise_string()).ToLocal(&val)) {
270
+ // If we hit this, getting the value from the object failed and
271
+ // an error was likely scheduled. We could try to reject the promise
272
+ // but let's just allow the error to propagate.
273
+ return;
274
+ }
212
275
  v8::Local<v8::Promise::Resolver> resolver = val.As<v8::Promise::Resolver>();
213
276
  args.GetReturnValue().Set(resolver->GetPromise());
214
277
  }
@@ -217,6 +280,7 @@ template <typename AliasedBufferT>
217
280
  void FSReqPromise<AliasedBufferT>::MemoryInfo(MemoryTracker* tracker) const {
218
281
  FSReqBase::MemoryInfo(tracker);
219
282
  tracker->TrackField("stats_field_array", stats_field_array_);
283
+ tracker->TrackField("statfs_field_array", statfs_field_array_);
220
284
  }
221
285
 
222
286
  FSReqBase* GetReqWrap(const v8::FunctionCallbackInfo<v8::Value>& args,
@@ -227,11 +291,12 @@ FSReqBase* GetReqWrap(const v8::FunctionCallbackInfo<v8::Value>& args,
227
291
  return Unwrap<FSReqBase>(value.As<v8::Object>());
228
292
  }
229
293
 
230
- BindingData* binding_data = Environment::GetBindingData<BindingData>(args);
231
- Environment* env = binding_data->env();
232
- if (value->StrictEquals(env->fs_use_promises_symbol())) {
294
+ Realm* realm = Realm::GetCurrent(args);
295
+ BindingData* binding_data = realm->GetBindingData<BindingData>();
296
+
297
+ if (value->StrictEquals(realm->isolate_data()->fs_use_promises_symbol())) {
233
298
  if (use_bigint) {
234
- return FSReqPromise<AliasedBigUint64Array>::New(binding_data, use_bigint);
299
+ return FSReqPromise<AliasedBigInt64Array>::New(binding_data, use_bigint);
235
300
  } else {
236
301
  return FSReqPromise<AliasedFloat64Array>::New(binding_data, use_bigint);
237
302
  }
@@ -298,6 +363,38 @@ int SyncCall(Environment* env, v8::Local<v8::Value> ctx,
298
363
  return err;
299
364
  }
300
365
 
366
+ // Similar to SyncCall but throws immediately if there is an error.
367
+ template <typename Predicate, typename Func, typename... Args>
368
+ int SyncCallAndThrowIf(Predicate should_throw,
369
+ Environment* env,
370
+ FSReqWrapSync* req_wrap,
371
+ Func fn,
372
+ Args... args) {
373
+ env->PrintSyncTrace();
374
+ int result = fn(nullptr, &(req_wrap->req), args..., nullptr);
375
+ if (should_throw(result)) {
376
+ env->ThrowUVException(result,
377
+ req_wrap->syscall_p,
378
+ nullptr,
379
+ req_wrap->path_p,
380
+ req_wrap->dest_p);
381
+ }
382
+ return result;
383
+ }
384
+
385
+ constexpr bool is_uv_error(int result) {
386
+ return result < 0;
387
+ }
388
+
389
+ // Similar to SyncCall but throws immediately if there is an error.
390
+ template <typename Func, typename... Args>
391
+ int SyncCallAndThrowOnError(Environment* env,
392
+ FSReqWrapSync* req_wrap,
393
+ Func fn,
394
+ Args... args) {
395
+ return SyncCallAndThrowIf(is_uv_error, env, req_wrap, fn, args...);
396
+ }
397
+
301
398
  } // namespace fs
302
399
  } // namespace node
303
400
 
@@ -3,6 +3,7 @@
3
3
 
4
4
  #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
5
 
6
+ #include <optional>
6
7
  #include "aliased_buffer.h"
7
8
  #include "node_messaging.h"
8
9
  #include "node_snapshotable.h"
@@ -13,24 +14,94 @@ namespace fs {
13
14
 
14
15
  class FileHandleReadWrap;
15
16
 
17
+ enum class FsStatsOffset {
18
+ kDev = 0,
19
+ kMode,
20
+ kNlink,
21
+ kUid,
22
+ kGid,
23
+ kRdev,
24
+ kBlkSize,
25
+ kIno,
26
+ kSize,
27
+ kBlocks,
28
+ kATimeSec,
29
+ kATimeNsec,
30
+ kMTimeSec,
31
+ kMTimeNsec,
32
+ kCTimeSec,
33
+ kCTimeNsec,
34
+ kBirthTimeSec,
35
+ kBirthTimeNsec,
36
+ kFsStatsFieldsNumber
37
+ };
38
+
39
+ // Stat fields buffers contain twice the number of entries in an uv_stat_t
40
+ // because `fs.StatWatcher` needs room to store 2 `fs.Stats` instances.
41
+ constexpr size_t kFsStatsBufferLength =
42
+ static_cast<size_t>(FsStatsOffset::kFsStatsFieldsNumber) * 2;
43
+
44
+ enum class FsStatFsOffset {
45
+ kType = 0,
46
+ kBSize,
47
+ kBlocks,
48
+ kBFree,
49
+ kBAvail,
50
+ kFiles,
51
+ kFFree,
52
+ kFsStatFsFieldsNumber
53
+ };
54
+
55
+ constexpr size_t kFsStatFsBufferLength =
56
+ static_cast<size_t>(FsStatFsOffset::kFsStatFsFieldsNumber);
57
+
16
58
  class BindingData : public SnapshotableObject {
17
59
  public:
18
- explicit BindingData(Environment* env, v8::Local<v8::Object> wrap);
60
+ struct InternalFieldInfo : public node::InternalFieldInfoBase {
61
+ AliasedBufferIndex stats_field_array;
62
+ AliasedBufferIndex stats_field_bigint_array;
63
+ AliasedBufferIndex statfs_field_array;
64
+ AliasedBufferIndex statfs_field_bigint_array;
65
+ };
66
+
67
+ enum class FilePathIsFileReturnType {
68
+ kIsFile = 0,
69
+ kIsNotFile,
70
+ kThrowInsufficientPermissions
71
+ };
72
+
73
+ explicit BindingData(Realm* realm,
74
+ v8::Local<v8::Object> wrap,
75
+ InternalFieldInfo* info = nullptr);
19
76
 
20
77
  AliasedFloat64Array stats_field_array;
21
- AliasedBigUint64Array stats_field_bigint_array;
78
+ AliasedBigInt64Array stats_field_bigint_array;
79
+
80
+ AliasedFloat64Array statfs_field_array;
81
+ AliasedBigInt64Array statfs_field_bigint_array;
22
82
 
23
83
  std::vector<BaseObjectPtr<FileHandleReadWrap>>
24
84
  file_handle_read_wrap_freelist;
25
85
 
26
86
  SERIALIZABLE_OBJECT_METHODS()
27
- static constexpr FastStringKey type_name{"node::fs::BindingData"};
28
- static constexpr EmbedderObjectType type_int =
29
- EmbedderObjectType::k_fs_binding_data;
87
+ SET_BINDING_ID(fs_binding_data)
88
+
89
+ static void LegacyMainResolve(
90
+ const v8::FunctionCallbackInfo<v8::Value>& args);
91
+
92
+ static void CreatePerIsolateProperties(IsolateData* isolate_data,
93
+ v8::Local<v8::ObjectTemplate> ctor);
94
+ static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
30
95
 
31
96
  void MemoryInfo(MemoryTracker* tracker) const override;
32
97
  SET_SELF_SIZE(BindingData)
33
98
  SET_MEMORY_INFO_NAME(BindingData)
99
+
100
+ private:
101
+ InternalFieldInfo* internal_field_info_ = nullptr;
102
+
103
+ static FilePathIsFileReturnType FilePathIsFile(Environment* env,
104
+ const std::string& file_path);
34
105
  };
35
106
 
36
107
  // structure used to store state during a complex operation, e.g., mkdirp.
@@ -81,6 +152,7 @@ class FSReqBase : public ReqWrap<uv_fs_t> {
81
152
  virtual void Reject(v8::Local<v8::Value> reject) = 0;
82
153
  virtual void Resolve(v8::Local<v8::Value> value) = 0;
83
154
  virtual void ResolveStat(const uv_stat_t* stat) = 0;
155
+ virtual void ResolveStatFs(const uv_statfs_t* stat) = 0;
84
156
  virtual void SetReturnValue(
85
157
  const v8::FunctionCallbackInfo<v8::Value>& args) = 0;
86
158
 
@@ -89,8 +161,10 @@ class FSReqBase : public ReqWrap<uv_fs_t> {
89
161
  enum encoding encoding() const { return encoding_; }
90
162
  bool use_bigint() const { return use_bigint_; }
91
163
  bool is_plain_open() const { return is_plain_open_; }
164
+ bool with_file_types() const { return with_file_types_; }
92
165
 
93
166
  void set_is_plain_open(bool value) { is_plain_open_ = value; }
167
+ void set_with_file_types(bool value) { with_file_types_ = value; }
94
168
 
95
169
  FSContinuationData* continuation_data() const {
96
170
  return continuation_data_.get();
@@ -116,6 +190,7 @@ class FSReqBase : public ReqWrap<uv_fs_t> {
116
190
  bool has_data_ = false;
117
191
  bool use_bigint_ = false;
118
192
  bool is_plain_open_ = false;
193
+ bool with_file_types_ = false;
119
194
  const char* syscall_ = nullptr;
120
195
 
121
196
  BaseObjectPtr<BindingData> binding_data_;
@@ -134,6 +209,7 @@ class FSReqCallback final : public FSReqBase {
134
209
  void Reject(v8::Local<v8::Value> reject) override;
135
210
  void Resolve(v8::Local<v8::Value> value) override;
136
211
  void ResolveStat(const uv_stat_t* stat) override;
212
+ void ResolveStatFs(const uv_statfs_t* stat) override;
137
213
  void SetReturnValue(const v8::FunctionCallbackInfo<v8::Value>& args) override;
138
214
 
139
215
  SET_MEMORY_INFO_NAME(FSReqCallback)
@@ -153,6 +229,14 @@ inline v8::Local<v8::Value> FillGlobalStatsArray(BindingData* binding_data,
153
229
  const uv_stat_t* s,
154
230
  const bool second = false);
155
231
 
232
+ template <typename NativeT, typename V8T>
233
+ void FillStatFsArray(AliasedBufferBase<NativeT, V8T>* fields,
234
+ const uv_statfs_t* s);
235
+
236
+ inline v8::Local<v8::Value> FillGlobalStatFsArray(BindingData* binding_data,
237
+ const bool use_bigint,
238
+ const uv_statfs_t* s);
239
+
156
240
  template <typename AliasedBufferT>
157
241
  class FSReqPromise final : public FSReqBase {
158
242
  public:
@@ -163,6 +247,7 @@ class FSReqPromise final : public FSReqBase {
163
247
  inline void Reject(v8::Local<v8::Value> reject) override;
164
248
  inline void Resolve(v8::Local<v8::Value> value) override;
165
249
  inline void ResolveStat(const uv_stat_t* stat) override;
250
+ inline void ResolveStatFs(const uv_statfs_t* stat) override;
166
251
  inline void SetReturnValue(
167
252
  const v8::FunctionCallbackInfo<v8::Value>& args) override;
168
253
  inline void MemoryInfo(MemoryTracker* tracker) const override;
@@ -182,6 +267,7 @@ class FSReqPromise final : public FSReqBase {
182
267
 
183
268
  bool finished_ = false;
184
269
  AliasedBufferT stats_field_array_;
270
+ AliasedBufferT statfs_field_array_;
185
271
  };
186
272
 
187
273
  class FSReqAfterScope final {
@@ -242,13 +328,17 @@ class FileHandle final : public AsyncWrap, public StreamBase {
242
328
 
243
329
  static FileHandle* New(BindingData* binding_data,
244
330
  int fd,
245
- v8::Local<v8::Object> obj = v8::Local<v8::Object>());
331
+ v8::Local<v8::Object> obj = v8::Local<v8::Object>(),
332
+ std::optional<int64_t> maybeOffset = std::nullopt,
333
+ std::optional<int64_t> maybeLength = std::nullopt);
246
334
  ~FileHandle() override;
247
335
 
248
336
  static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
249
337
 
250
338
  int GetFD() override { return fd_; }
251
339
 
340
+ int Release();
341
+
252
342
  // Will asynchronously close the FD and return a Promise that will
253
343
  // be resolved once closing is complete.
254
344
  static void Close(const v8::FunctionCallbackInfo<v8::Value>& args);
@@ -283,7 +373,7 @@ class FileHandle final : public AsyncWrap, public StreamBase {
283
373
  FileHandle(const FileHandle&&) = delete;
284
374
  FileHandle& operator=(const FileHandle&&) = delete;
285
375
 
286
- TransferMode GetTransferMode() const override;
376
+ BaseObject::TransferMode GetTransferMode() const override;
287
377
  std::unique_ptr<worker::TransferData> TransferForMessaging() override;
288
378
 
289
379
  private:
@@ -367,10 +457,22 @@ int MKDirpSync(uv_loop_t* loop,
367
457
 
368
458
  class FSReqWrapSync {
369
459
  public:
370
- FSReqWrapSync() = default;
460
+ FSReqWrapSync(const char* syscall = nullptr,
461
+ const char* path = nullptr,
462
+ const char* dest = nullptr)
463
+ : syscall_p(syscall), path_p(path), dest_p(dest) {}
371
464
  ~FSReqWrapSync() { uv_fs_req_cleanup(&req); }
465
+
372
466
  uv_fs_t req;
467
+ const char* syscall_p;
468
+ const char* path_p;
469
+ const char* dest_p;
373
470
 
471
+ FSReqWrapSync(const FSReqWrapSync&) = delete;
472
+ FSReqWrapSync& operator=(const FSReqWrapSync&) = delete;
473
+
474
+ // TODO(joyeecheung): move these out of FSReqWrapSync and into a special
475
+ // class for mkdirp
374
476
  FSContinuationData* continuation_data() const {
375
477
  return continuation_data_.get();
376
478
  }
@@ -378,9 +480,6 @@ class FSReqWrapSync {
378
480
  continuation_data_ = std::move(data);
379
481
  }
380
482
 
381
- FSReqWrapSync(const FSReqWrapSync&) = delete;
382
- FSReqWrapSync& operator=(const FSReqWrapSync&) = delete;
383
-
384
483
  private:
385
484
  std::unique_ptr<FSContinuationData> continuation_data_;
386
485
  };
@@ -417,6 +516,18 @@ inline int SyncCall(Environment* env, v8::Local<v8::Value> ctx,
417
516
  FSReqWrapSync* req_wrap, const char* syscall,
418
517
  Func fn, Args... args);
419
518
 
519
+ // Similar to SyncCall but throws immediately if there is an error.
520
+ template <typename Predicate, typename Func, typename... Args>
521
+ int SyncCallAndThrowIf(Predicate should_throw,
522
+ Environment* env,
523
+ FSReqWrapSync* req_wrap,
524
+ Func fn,
525
+ Args... args);
526
+ template <typename Func, typename... Args>
527
+ int SyncCallAndThrowOnError(Environment* env,
528
+ FSReqWrapSync* req_wrap,
529
+ Func fn,
530
+ Args... args);
420
531
  } // namespace fs
421
532
 
422
533
  } // namespace node
@@ -3,8 +3,9 @@
3
3
 
4
4
  #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
5
 
6
- // FIXME(joyeecheung): nghttp2.h needs stdint.h to compile on Windows
7
- #include <cstdint>
6
+ // clang-format off
7
+ #include "node.h" // nghttp2.h needs ssize_t
8
+ // clang-format on
8
9
  #include "nghttp2/nghttp2.h"
9
10
 
10
11
  #include "env.h"
@@ -626,6 +627,15 @@ class Http2Session : public AsyncWrap,
626
627
  flags_ |= kSessionStateClosed;
627
628
  }
628
629
 
630
+ struct custom_settings_state {
631
+ size_t number;
632
+ nghttp2_settings_entry entries[MAX_ADDITIONAL_SETTINGS];
633
+ };
634
+
635
+ custom_settings_state& custom_settings(bool local) {
636
+ return local ? local_custom_settings_ : remote_custom_settings_;
637
+ }
638
+
629
639
  #define IS_FLAG(name, flag) \
630
640
  bool is_##name() const { return flags_ & flag; } \
631
641
  void set_##name(bool on = true) { \
@@ -714,7 +724,7 @@ class Http2Session : public AsyncWrap,
714
724
  static void AltSvc(const v8::FunctionCallbackInfo<v8::Value>& args);
715
725
  static void Origin(const v8::FunctionCallbackInfo<v8::Value>& args);
716
726
 
717
- template <get_setting fn>
727
+ template <get_setting fn, bool local>
718
728
  static void RefreshSettings(const v8::FunctionCallbackInfo<v8::Value>& args);
719
729
 
720
730
  uv_loop_t* event_loop() const {
@@ -738,6 +748,9 @@ class Http2Session : public AsyncWrap,
738
748
  current_session_memory_ -= amount;
739
749
  }
740
750
 
751
+ void UpdateLocalCustomSettings(size_t count_,
752
+ nghttp2_settings_entry* entries_);
753
+
741
754
  // Tell our custom memory allocator that this rcbuf is independent of
742
755
  // this session now, and may outlive it.
743
756
  void StopTrackingRcbuf(nghttp2_rcbuf* buf);
@@ -775,6 +788,8 @@ class Http2Session : public AsyncWrap,
775
788
  private:
776
789
  void EmitStatistics();
777
790
 
791
+ void FetchAllowedRemoteCustomSettings();
792
+
778
793
  // Frame Padding Strategies
779
794
  ssize_t OnDWordAlignedPadding(size_t frameLength,
780
795
  size_t maxPayloadLen);
@@ -842,11 +857,11 @@ class Http2Session : public AsyncWrap,
842
857
  const nghttp2_frame* frame,
843
858
  size_t maxPayloadLen,
844
859
  void* user_data);
845
- static int OnNghttpError(
846
- nghttp2_session* session,
847
- const char* message,
848
- size_t len,
849
- void* user_data);
860
+ static int OnNghttpError(nghttp2_session* session,
861
+ int lib_error_code,
862
+ const char* message,
863
+ size_t len,
864
+ void* user_data);
850
865
  static int OnSendData(
851
866
  nghttp2_session* session,
852
867
  nghttp2_frame* frame,
@@ -914,6 +929,9 @@ class Http2Session : public AsyncWrap,
914
929
  size_t max_outstanding_settings_ = kDefaultMaxSettings;
915
930
  std::queue<BaseObjectPtr<Http2Settings>> outstanding_settings_;
916
931
 
932
+ struct custom_settings_state local_custom_settings_;
933
+ struct custom_settings_state remote_custom_settings_;
934
+
917
935
  std::vector<NgHttp2StreamWrite> outgoing_buffers_;
918
936
  std::vector<uint8_t> outgoing_storage_;
919
937
  size_t outgoing_length_ = 0;
@@ -1017,8 +1035,7 @@ class Http2Settings : public AsyncWrap {
1017
1035
  static void RefreshDefaults(Http2State* http2_state);
1018
1036
 
1019
1037
  // Update the local or remote settings for the given session
1020
- static void Update(Http2Session* session,
1021
- get_setting fn);
1038
+ static void Update(Http2Session* session, get_setting fn, bool local);
1022
1039
 
1023
1040
  private:
1024
1041
  static size_t Init(
@@ -1034,7 +1051,7 @@ class Http2Settings : public AsyncWrap {
1034
1051
  v8::Global<v8::Function> callback_;
1035
1052
  uint64_t startTime_;
1036
1053
  size_t count_ = 0;
1037
- nghttp2_settings_entry entries_[IDX_SETTINGS_COUNT];
1054
+ nghttp2_settings_entry entries_[IDX_SETTINGS_COUNT + MAX_ADDITIONAL_SETTINGS];
1038
1055
  };
1039
1056
 
1040
1057
  class Origins {
@@ -21,6 +21,9 @@ namespace http2 {
21
21
  IDX_SETTINGS_COUNT
22
22
  };
23
23
 
24
+ // number of max additional settings, thus settings not implemented by nghttp2
25
+ const size_t MAX_ADDITIONAL_SETTINGS = 10;
26
+
24
27
  enum Http2SessionStateIndex {
25
28
  IDX_SESSION_STATE_EFFECTIVE_LOCAL_WINDOW_SIZE,
26
29
  IDX_SESSION_STATE_EFFECTIVE_RECV_DATA_LENGTH,
@@ -55,6 +58,8 @@ namespace http2 {
55
58
  IDX_OPTIONS_MAX_OUTSTANDING_SETTINGS,
56
59
  IDX_OPTIONS_MAX_SESSION_MEMORY,
57
60
  IDX_OPTIONS_MAX_SETTINGS,
61
+ IDX_OPTIONS_STREAM_RESET_RATE,
62
+ IDX_OPTIONS_STREAM_RESET_BURST,
58
63
  IDX_OPTIONS_FLAGS
59
64
  };
60
65
 
@@ -83,37 +88,36 @@ namespace http2 {
83
88
 
84
89
  class Http2State : public BaseObject {
85
90
  public:
86
- Http2State(Environment* env, v8::Local<v8::Object> obj)
87
- : BaseObject(env, obj),
88
- root_buffer(env->isolate(), sizeof(http2_state_internal)),
91
+ Http2State(Realm* realm, v8::Local<v8::Object> obj)
92
+ : BaseObject(realm, obj),
93
+ root_buffer(realm->isolate(), sizeof(http2_state_internal)),
89
94
  session_state_buffer(
90
- env->isolate(),
95
+ realm->isolate(),
91
96
  offsetof(http2_state_internal, session_state_buffer),
92
97
  IDX_SESSION_STATE_COUNT,
93
98
  root_buffer),
94
- stream_state_buffer(
95
- env->isolate(),
96
- offsetof(http2_state_internal, stream_state_buffer),
97
- IDX_STREAM_STATE_COUNT,
98
- root_buffer),
99
- stream_stats_buffer(
100
- env->isolate(),
101
- offsetof(http2_state_internal, stream_stats_buffer),
102
- IDX_STREAM_STATS_COUNT,
103
- root_buffer),
99
+ stream_state_buffer(realm->isolate(),
100
+ offsetof(http2_state_internal, stream_state_buffer),
101
+ IDX_STREAM_STATE_COUNT,
102
+ root_buffer),
103
+ stream_stats_buffer(realm->isolate(),
104
+ offsetof(http2_state_internal, stream_stats_buffer),
105
+ IDX_STREAM_STATS_COUNT,
106
+ root_buffer),
104
107
  session_stats_buffer(
105
- env->isolate(),
108
+ realm->isolate(),
106
109
  offsetof(http2_state_internal, session_stats_buffer),
107
110
  IDX_SESSION_STATS_COUNT,
108
111
  root_buffer),
109
- options_buffer(env->isolate(),
110
- offsetof(http2_state_internal, options_buffer),
111
- IDX_OPTIONS_FLAGS + 1,
112
- root_buffer),
113
- settings_buffer(env->isolate(),
114
- offsetof(http2_state_internal, settings_buffer),
115
- IDX_SETTINGS_COUNT + 1,
116
- root_buffer) {}
112
+ options_buffer(realm->isolate(),
113
+ offsetof(http2_state_internal, options_buffer),
114
+ IDX_OPTIONS_FLAGS + 1,
115
+ root_buffer),
116
+ settings_buffer(
117
+ realm->isolate(),
118
+ offsetof(http2_state_internal, settings_buffer),
119
+ IDX_SETTINGS_COUNT + 1 + 1 + 2 * MAX_ADDITIONAL_SETTINGS,
120
+ root_buffer) {}
117
121
 
118
122
  AliasedUint8Array root_buffer;
119
123
  AliasedFloat64Array session_state_buffer;
@@ -127,7 +131,7 @@ class Http2State : public BaseObject {
127
131
  SET_SELF_SIZE(Http2State)
128
132
  SET_MEMORY_INFO_NAME(Http2State)
129
133
 
130
- static constexpr FastStringKey type_name { "http2" };
134
+ SET_BINDING_ID(http2_binding_data)
131
135
 
132
136
  private:
133
137
  struct http2_state_internal {
@@ -137,7 +141,12 @@ class Http2State : public BaseObject {
137
141
  double stream_stats_buffer[IDX_STREAM_STATS_COUNT];
138
142
  double session_stats_buffer[IDX_SESSION_STATS_COUNT];
139
143
  uint32_t options_buffer[IDX_OPTIONS_FLAGS + 1];
140
- uint32_t settings_buffer[IDX_SETTINGS_COUNT + 1];
144
+ // first + 1: number of actual nghttp2 supported settings
145
+ // second + 1: number of additional settings not supported by nghttp2
146
+ // 2 * MAX_ADDITIONAL_SETTINGS: settings id and value for each
147
+ // additional setting
148
+ uint32_t settings_buffer[IDX_SETTINGS_COUNT + 1 + 1 +
149
+ 2 * MAX_ADDITIONAL_SETTINGS];
141
150
  };
142
151
  };
143
152