@encharm/cws 4.0.2 → 4.3.0

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 (410) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/LICENSE +3 -2
  3. package/README.md +9 -2
  4. package/binding.gyp +2 -2
  5. package/dist/bindings/cws_darwin_arm64_node108.node +0 -0
  6. package/dist/bindings/cws_darwin_arm64_node64.node +0 -0
  7. package/dist/bindings/cws_darwin_arm64_node72.node +0 -0
  8. package/dist/bindings/cws_darwin_arm64_node79.node +0 -0
  9. package/dist/bindings/cws_darwin_arm64_node83.node +0 -0
  10. package/dist/bindings/cws_darwin_arm64_node93.node +0 -0
  11. package/dist/bindings/cws_darwin_x64_node108.node +0 -0
  12. package/dist/bindings/cws_darwin_x64_node64.node +0 -0
  13. package/dist/bindings/cws_darwin_x64_node72.node +0 -0
  14. package/dist/bindings/cws_darwin_x64_node79.node +0 -0
  15. package/dist/bindings/cws_darwin_x64_node83.node +0 -0
  16. package/dist/bindings/cws_darwin_x64_node93.node +0 -0
  17. package/dist/bindings/cws_linux_x64_node108.node +0 -0
  18. package/dist/bindings/cws_linux_x64_node64.node +0 -0
  19. package/dist/bindings/cws_linux_x64_node72.node +0 -0
  20. package/dist/bindings/cws_linux_x64_node79.node +0 -0
  21. package/dist/bindings/cws_linux_x64_node83.node +0 -0
  22. package/dist/bindings/cws_linux_x64_node93.node +0 -0
  23. package/dist/bindings/cws_win32_x64_node108.node +0 -0
  24. package/dist/bindings/cws_win32_x64_node64.node +0 -0
  25. package/dist/bindings/cws_win32_x64_node72.node +0 -0
  26. package/dist/bindings/cws_win32_x64_node79.node +0 -0
  27. package/dist/bindings/cws_win32_x64_node83.node +0 -0
  28. package/dist/bindings/cws_win32_x64_node93.node +0 -0
  29. package/dist/client.d.ts +1 -0
  30. package/dist/client.js +4 -0
  31. package/dist/index.js +3 -2
  32. package/dist/server.js +1 -0
  33. package/dist/shared.js +2 -1
  34. package/package.json +1 -1
  35. package/src/Addon.cpp +1 -0
  36. package/src/Addon.h +35 -2
  37. package/src/HTTPSocket.cpp +1 -1
  38. package/src/LICENSE +4 -0
  39. package/src/Socket.h +12 -3
  40. package/src/headers/{13 → 18}/aliased_buffer.h +61 -9
  41. package/src/headers/18/aliased_struct-inl.h +54 -0
  42. package/src/headers/18/aliased_struct.h +63 -0
  43. package/src/headers/{12 → 18}/async_wrap-inl.h +0 -0
  44. package/src/headers/{12 → 18}/async_wrap.h +26 -2
  45. package/src/headers/{12/base64.h → 18/base64-inl.h} +78 -86
  46. package/src/headers/18/base64.h +69 -0
  47. package/src/headers/{12 → 18}/base_object-inl.h +46 -25
  48. package/src/headers/{12 → 18}/base_object.h +82 -17
  49. package/src/headers/{12 → 18}/callback_queue-inl.h +9 -9
  50. package/src/headers/{12 → 18}/callback_queue.h +13 -5
  51. package/src/headers/18/cares_wrap.h +523 -0
  52. package/src/headers/{12 → 18}/connect_wrap.h +0 -0
  53. package/src/headers/{12 → 18}/connection_wrap.h +0 -0
  54. package/src/headers/18/crypto/crypto_aes.h +89 -0
  55. package/src/headers/{13/node_crypto_bio.h → 18/crypto/crypto_bio.h} +3 -4
  56. package/src/headers/18/crypto/crypto_cipher.h +291 -0
  57. package/src/headers/{13/node_crypto_clienthello-inl.h → 18/crypto/crypto_clienthello-inl.h} +4 -5
  58. package/src/headers/{13/node_crypto_clienthello.h → 18/crypto/crypto_clienthello.h} +3 -4
  59. package/src/headers/{12/node_crypto_common.h → 18/crypto/crypto_common.h} +49 -36
  60. package/src/headers/18/crypto/crypto_context.h +147 -0
  61. package/src/headers/18/crypto/crypto_dh.h +156 -0
  62. package/src/headers/18/crypto/crypto_dsa.h +77 -0
  63. package/src/headers/18/crypto/crypto_ec.h +170 -0
  64. package/src/headers/{12/node_crypto_groups.h → 18/crypto/crypto_groups.h} +3 -3
  65. package/src/headers/18/crypto/crypto_hash.h +89 -0
  66. package/src/headers/18/crypto/crypto_hkdf.h +65 -0
  67. package/src/headers/18/crypto/crypto_hmac.h +94 -0
  68. package/src/headers/18/crypto/crypto_keygen.h +305 -0
  69. package/src/headers/18/crypto/crypto_keys.h +420 -0
  70. package/src/headers/18/crypto/crypto_pbkdf2.h +76 -0
  71. package/src/headers/18/crypto/crypto_random.h +130 -0
  72. package/src/headers/18/crypto/crypto_rsa.h +141 -0
  73. package/src/headers/18/crypto/crypto_scrypt.h +87 -0
  74. package/src/headers/18/crypto/crypto_sig.h +168 -0
  75. package/src/headers/18/crypto/crypto_spkac.h +21 -0
  76. package/src/headers/18/crypto/crypto_timing.h +20 -0
  77. package/src/headers/{12/tls_wrap.h → 18/crypto/crypto_tls.h} +137 -66
  78. package/src/headers/18/crypto/crypto_util.h +791 -0
  79. package/src/headers/18/crypto/crypto_x509.h +143 -0
  80. package/src/headers/{12 → 18}/debug_utils-inl.h +0 -0
  81. package/src/headers/{13 → 18}/debug_utils.h +7 -4
  82. package/src/headers/{12 → 18}/diagnosticfilename-inl.h +0 -0
  83. package/src/headers/{12 → 18}/env-inl.h +397 -304
  84. package/src/headers/{12 → 18}/env.h +397 -172
  85. package/src/headers/{12 → 18}/handle_wrap.h +7 -3
  86. package/src/headers/18/histogram-inl.h +107 -0
  87. package/src/headers/18/histogram.h +239 -0
  88. package/src/headers/{13 → 18}/inspector_agent.h +4 -7
  89. package/src/headers/{12 → 18}/inspector_io.h +0 -0
  90. package/src/headers/{13 → 18}/inspector_profiler.h +17 -5
  91. package/src/headers/{12 → 18}/inspector_socket.h +0 -0
  92. package/src/headers/{12 → 18}/inspector_socket_server.h +0 -0
  93. package/src/headers/18/js_native_api.h +571 -0
  94. package/src/headers/{13 → 18}/js_native_api_types.h +30 -7
  95. package/src/headers/{12 → 18}/js_native_api_v8.h +220 -83
  96. package/src/headers/{12 → 18}/js_native_api_v8_internals.h +6 -5
  97. package/src/headers/{12 → 18}/js_stream.h +0 -0
  98. package/src/headers/{12 → 18}/json_utils.h +0 -0
  99. package/src/headers/{13 → 18}/memory_tracker-inl.h +6 -5
  100. package/src/headers/{13 → 18}/memory_tracker.h +0 -7
  101. package/src/headers/{13 → 18}/module_wrap.h +24 -7
  102. package/src/headers/{13 → 18}/node.h +329 -68
  103. package/src/headers/18/node_api.h +288 -0
  104. package/src/headers/18/node_api_internals.h +38 -0
  105. package/src/headers/{12 → 18}/node_api_types.h +12 -9
  106. package/src/headers/{12 → 18}/node_binding.h +0 -0
  107. package/src/headers/18/node_blob.h +191 -0
  108. package/src/headers/18/node_bob-inl.h +37 -0
  109. package/src/headers/18/node_bob.h +111 -0
  110. package/src/headers/{13 → 18}/node_buffer.h +0 -0
  111. package/src/headers/{13 → 18}/node_constants.h +5 -1
  112. package/src/headers/{12 → 18}/node_context_data.h +5 -0
  113. package/src/headers/{12 → 18}/node_contextify.h +37 -2
  114. package/src/headers/{10/node_javascript.h → 18/node_crypto.h} +30 -14
  115. package/src/headers/{12 → 18}/node_dir.h +0 -0
  116. package/src/headers/{12 → 18}/node_dtrace.h +0 -0
  117. package/src/headers/{12 → 18}/node_errors.h +90 -24
  118. package/src/headers/18/node_external_reference.h +145 -0
  119. package/src/headers/{13 → 18}/node_file-inl.h +38 -21
  120. package/src/headers/{12 → 18}/node_file.h +74 -13
  121. package/src/headers/{13 → 18}/node_http2.h +365 -269
  122. package/src/headers/{12 → 18}/node_http2_state.h +40 -50
  123. package/src/headers/{13 → 18}/node_http_common-inl.h +25 -5
  124. package/src/headers/{13 → 18}/node_http_common.h +24 -20
  125. package/src/headers/{13 → 18}/node_i18n.h +2 -1
  126. package/src/headers/{12 → 18}/node_internals.h +39 -41
  127. package/src/headers/{12 → 18}/node_main_instance.h +15 -18
  128. package/src/headers/{12 → 18}/node_mem-inl.h +0 -0
  129. package/src/headers/{12 → 18}/node_mem.h +1 -1
  130. package/src/headers/{13 → 18}/node_messaging.h +170 -23
  131. package/src/headers/{12 → 18}/node_metadata.h +17 -4
  132. package/src/headers/{12 → 18}/node_mutex.h +77 -1
  133. package/src/headers/{12 → 18}/node_native_module.h +11 -1
  134. package/src/headers/{12 → 18}/node_native_module_env.h +14 -8
  135. package/src/headers/{12 → 18}/node_object_wrap.h +0 -0
  136. package/src/headers/{13 → 18}/node_options-inl.h +51 -21
  137. package/src/headers/{13 → 18}/node_options.h +46 -14
  138. package/src/headers/18/node_perf.h +168 -0
  139. package/src/headers/{12 → 18}/node_perf_common.h +16 -22
  140. package/src/headers/{12 → 18}/node_platform.h +21 -16
  141. package/src/headers/18/node_process-inl.h +26 -0
  142. package/src/headers/18/node_process.h +97 -0
  143. package/src/headers/{13 → 18}/node_report.h +2 -2
  144. package/src/headers/{13 → 18}/node_revert.h +10 -0
  145. package/src/headers/{12 → 18}/node_root_certs.h +439 -651
  146. package/src/headers/18/node_snapshot_builder.h +43 -0
  147. package/src/headers/18/node_snapshotable.h +130 -0
  148. package/src/headers/{12 → 18}/node_sockaddr-inl.h +100 -4
  149. package/src/headers/18/node_sockaddr.h +405 -0
  150. package/src/headers/{13 → 18}/node_stat_watcher.h +7 -1
  151. package/src/headers/{12 → 18}/node_union_bytes.h +0 -0
  152. package/src/headers/{13 → 18}/node_url.h +18 -1
  153. package/src/headers/18/node_v8.h +41 -0
  154. package/src/headers/{12 → 18}/node_v8_platform-inl.h +10 -0
  155. package/src/headers/{13 → 18}/node_version.h +7 -7
  156. package/src/headers/{12 → 18}/node_wasi.h +0 -0
  157. package/src/headers/18/node_wasm_web_api.h +55 -0
  158. package/src/headers/{13 → 18}/node_watchdog.h +0 -0
  159. package/src/headers/{10 → 18}/node_win32_etw_provider-inl.h +7 -6
  160. package/src/headers/{10 → 18}/node_win32_etw_provider.h +0 -0
  161. package/src/headers/{13 → 18}/node_worker.h +24 -17
  162. package/src/headers/{12 → 18}/pipe_wrap.h +2 -0
  163. package/src/headers/{12 → 18}/req_wrap-inl.h +0 -0
  164. package/src/headers/{13 → 18}/req_wrap.h +1 -1
  165. package/src/headers/{12 → 18}/spawn_sync.h +0 -0
  166. package/src/headers/{13 → 18}/stream_base-inl.h +58 -22
  167. package/src/headers/{13 → 18}/stream_base.h +29 -3
  168. package/src/headers/{13 → 18}/stream_pipe.h +8 -3
  169. package/src/headers/{12 → 18}/stream_wrap.h +4 -1
  170. package/src/headers/{13 → 18}/string_bytes.h +0 -7
  171. package/src/headers/{12 → 18}/string_decoder-inl.h +0 -0
  172. package/src/headers/{10 → 18}/string_decoder.h +0 -0
  173. package/src/headers/{13 → 18}/string_search.h +2 -2
  174. package/src/headers/{12 → 18}/tcp_wrap.h +4 -0
  175. package/src/headers/{12 → 18}/threadpoolwork-inl.h +0 -0
  176. package/src/headers/18/timer_wrap-inl.h +32 -0
  177. package/src/headers/18/timer_wrap.h +85 -0
  178. package/src/headers/{13 → 18}/tracing/agent.h +1 -1
  179. package/src/headers/{12 → 18}/tracing/node_trace_buffer.h +0 -0
  180. package/src/headers/{12 → 18}/tracing/node_trace_writer.h +0 -0
  181. package/src/headers/{13 → 18}/tracing/trace_event.h +23 -13
  182. package/src/headers/{12 → 18}/tracing/trace_event_common.h +0 -0
  183. package/src/headers/{12 → 18}/tracing/traced_value.h +0 -0
  184. package/src/headers/{13 → 18}/tty_wrap.h +2 -1
  185. package/src/headers/{13 → 18}/udp_wrap.h +5 -0
  186. package/src/headers/{13 → 18}/util-inl.h +69 -15
  187. package/src/headers/{13 → 18}/util.h +93 -31
  188. package/src/headers/18/v8-fast-api-calls.h +939 -0
  189. package/src/headers/{12 → 18}/v8abbr.h +2 -2
  190. package/dist/bindings/cws_darwin_64.node +0 -0
  191. package/dist/bindings/cws_darwin_72.node +0 -0
  192. package/dist/bindings/cws_darwin_79.node +0 -0
  193. package/dist/bindings/cws_darwin_83.node +0 -0
  194. package/dist/bindings/cws_darwin_93.node +0 -0
  195. package/dist/bindings/cws_linux_64.node +0 -0
  196. package/dist/bindings/cws_linux_72.node +0 -0
  197. package/dist/bindings/cws_linux_79.node +0 -0
  198. package/dist/bindings/cws_linux_83.node +0 -0
  199. package/dist/bindings/cws_linux_93.node +0 -0
  200. package/dist/bindings/cws_win32_64.node +0 -0
  201. package/dist/bindings/cws_win32_72.node +0 -0
  202. package/dist/bindings/cws_win32_79.node +0 -0
  203. package/dist/bindings/cws_win32_83.node +0 -0
  204. package/dist/bindings/cws_win32_93.node +0 -0
  205. package/src/headers/10/aliased_buffer.h +0 -241
  206. package/src/headers/10/async_wrap-inl.h +0 -106
  207. package/src/headers/10/async_wrap.h +0 -218
  208. package/src/headers/10/base64.h +0 -197
  209. package/src/headers/10/base_object-inl.h +0 -132
  210. package/src/headers/10/base_object.h +0 -115
  211. package/src/headers/10/connect_wrap.h +0 -28
  212. package/src/headers/10/connection_wrap.h +0 -30
  213. package/src/headers/10/debug_utils.h +0 -128
  214. package/src/headers/10/env-inl.h +0 -906
  215. package/src/headers/10/env.h +0 -1046
  216. package/src/headers/10/handle_wrap.h +0 -114
  217. package/src/headers/10/inspector_agent.h +0 -137
  218. package/src/headers/10/inspector_io.h +0 -97
  219. package/src/headers/10/inspector_socket.h +0 -59
  220. package/src/headers/10/inspector_socket_server.h +0 -104
  221. package/src/headers/10/js_stream.h +0 -57
  222. package/src/headers/10/memory_tracker-inl.h +0 -318
  223. package/src/headers/10/memory_tracker.h +0 -246
  224. package/src/headers/10/module_wrap.h +0 -100
  225. package/src/headers/10/node.h +0 -863
  226. package/src/headers/10/node_api.h +0 -752
  227. package/src/headers/10/node_api_types.h +0 -171
  228. package/src/headers/10/node_buffer.h +0 -90
  229. package/src/headers/10/node_code_cache.h +0 -17
  230. package/src/headers/10/node_constants.h +0 -74
  231. package/src/headers/10/node_context_data.h +0 -39
  232. package/src/headers/10/node_contextify.h +0 -141
  233. package/src/headers/10/node_counters.h +0 -59
  234. package/src/headers/10/node_crypto.h +0 -699
  235. package/src/headers/10/node_crypto_bio.h +0 -177
  236. package/src/headers/10/node_crypto_clienthello-inl.h +0 -92
  237. package/src/headers/10/node_crypto_clienthello.h +0 -131
  238. package/src/headers/10/node_crypto_groups.h +0 -416
  239. package/src/headers/10/node_dtrace.h +0 -84
  240. package/src/headers/10/node_errors.h +0 -118
  241. package/src/headers/10/node_file.h +0 -373
  242. package/src/headers/10/node_http2.h +0 -1304
  243. package/src/headers/10/node_http2_state.h +0 -158
  244. package/src/headers/10/node_i18n.h +0 -69
  245. package/src/headers/10/node_internals.h +0 -952
  246. package/src/headers/10/node_messaging.h +0 -219
  247. package/src/headers/10/node_mutex.h +0 -191
  248. package/src/headers/10/node_object_wrap.h +0 -130
  249. package/src/headers/10/node_options-inl.h +0 -444
  250. package/src/headers/10/node_options.h +0 -397
  251. package/src/headers/10/node_perf.h +0 -134
  252. package/src/headers/10/node_perf_common.h +0 -96
  253. package/src/headers/10/node_persistent.h +0 -30
  254. package/src/headers/10/node_platform.h +0 -170
  255. package/src/headers/10/node_revert.h +0 -75
  256. package/src/headers/10/node_root_certs.h +0 -3393
  257. package/src/headers/10/node_stat_watcher.h +0 -65
  258. package/src/headers/10/node_url.h +0 -193
  259. package/src/headers/10/node_version.h +0 -120
  260. package/src/headers/10/node_watchdog.h +0 -114
  261. package/src/headers/10/node_win32_perfctr_provider.h +0 -58
  262. package/src/headers/10/node_worker.h +0 -94
  263. package/src/headers/10/pipe_wrap.h +0 -76
  264. package/src/headers/10/req_wrap-inl.h +0 -166
  265. package/src/headers/10/req_wrap.h +0 -61
  266. package/src/headers/10/sharedarraybuffer_metadata.h +0 -67
  267. package/src/headers/10/spawn_sync.h +0 -240
  268. package/src/headers/10/stream_base-inl.h +0 -458
  269. package/src/headers/10/stream_base.h +0 -378
  270. package/src/headers/10/stream_pipe.h +0 -72
  271. package/src/headers/10/stream_wrap.h +0 -130
  272. package/src/headers/10/string_bytes.h +0 -126
  273. package/src/headers/10/string_decoder-inl.h +0 -38
  274. package/src/headers/10/string_search.h +0 -620
  275. package/src/headers/10/tcp_wrap.h +0 -99
  276. package/src/headers/10/tls_wrap.h +0 -195
  277. package/src/headers/10/tracing/agent.h +0 -178
  278. package/src/headers/10/tracing/node_trace_buffer.h +0 -83
  279. package/src/headers/10/tracing/node_trace_writer.h +0 -75
  280. package/src/headers/10/tracing/trace_event.h +0 -706
  281. package/src/headers/10/tracing/trace_event_common.h +0 -1102
  282. package/src/headers/10/tracing/traced_value.h +0 -68
  283. package/src/headers/10/tty_wrap.h +0 -63
  284. package/src/headers/10/udp_wrap.h +0 -102
  285. package/src/headers/10/util-inl.h +0 -459
  286. package/src/headers/10/util.h +0 -508
  287. package/src/headers/10/v8abbr.h +0 -121
  288. package/src/headers/12/aliased_buffer.h +0 -263
  289. package/src/headers/12/debug_utils.h +0 -181
  290. package/src/headers/12/histogram-inl.h +0 -83
  291. package/src/headers/12/histogram.h +0 -98
  292. package/src/headers/12/http_parser_adaptor.h +0 -24
  293. package/src/headers/12/inspector_agent.h +0 -147
  294. package/src/headers/12/inspector_profiler.h +0 -137
  295. package/src/headers/12/js_native_api.h +0 -541
  296. package/src/headers/12/js_native_api_types.h +0 -139
  297. package/src/headers/12/memory_tracker-inl.h +0 -339
  298. package/src/headers/12/memory_tracker.h +0 -283
  299. package/src/headers/12/module_wrap.h +0 -99
  300. package/src/headers/12/node.h +0 -887
  301. package/src/headers/12/node_api.h +0 -239
  302. package/src/headers/12/node_buffer.h +0 -92
  303. package/src/headers/12/node_constants.h +0 -80
  304. package/src/headers/12/node_crypto.h +0 -800
  305. package/src/headers/12/node_crypto_bio.h +0 -195
  306. package/src/headers/12/node_crypto_clienthello-inl.h +0 -91
  307. package/src/headers/12/node_crypto_clienthello.h +0 -132
  308. package/src/headers/12/node_file-inl.h +0 -289
  309. package/src/headers/12/node_http2.h +0 -1311
  310. package/src/headers/12/node_http_parser_impl.h +0 -994
  311. package/src/headers/12/node_i18n.h +0 -144
  312. package/src/headers/12/node_messaging.h +0 -227
  313. package/src/headers/12/node_options-inl.h +0 -447
  314. package/src/headers/12/node_options.h +0 -479
  315. package/src/headers/12/node_perf.h +0 -181
  316. package/src/headers/12/node_process.h +0 -41
  317. package/src/headers/12/node_report.h +0 -47
  318. package/src/headers/12/node_revert.h +0 -78
  319. package/src/headers/12/node_sockaddr.h +0 -123
  320. package/src/headers/12/node_stat_watcher.h +0 -66
  321. package/src/headers/12/node_url.h +0 -188
  322. package/src/headers/12/node_version.h +0 -98
  323. package/src/headers/12/node_watchdog.h +0 -152
  324. package/src/headers/12/node_win32_etw_provider-inl.h +0 -287
  325. package/src/headers/12/node_win32_etw_provider.h +0 -99
  326. package/src/headers/12/node_worker.h +0 -142
  327. package/src/headers/12/req_wrap.h +0 -77
  328. package/src/headers/12/sharedarraybuffer_metadata.h +0 -72
  329. package/src/headers/12/stream_base-inl.h +0 -323
  330. package/src/headers/12/stream_base.h +0 -431
  331. package/src/headers/12/stream_pipe.h +0 -72
  332. package/src/headers/12/string_bytes.h +0 -142
  333. package/src/headers/12/string_decoder.h +0 -50
  334. package/src/headers/12/string_search.h +0 -638
  335. package/src/headers/12/tracing/agent.h +0 -195
  336. package/src/headers/12/tracing/trace_event.h +0 -710
  337. package/src/headers/12/tty_wrap.h +0 -64
  338. package/src/headers/12/udp_wrap.h +0 -222
  339. package/src/headers/12/util-inl.h +0 -529
  340. package/src/headers/12/util.h +0 -765
  341. package/src/headers/13/async_wrap-inl.h +0 -94
  342. package/src/headers/13/async_wrap.h +0 -224
  343. package/src/headers/13/base64.h +0 -197
  344. package/src/headers/13/base_object-inl.h +0 -353
  345. package/src/headers/13/base_object.h +0 -229
  346. package/src/headers/13/connect_wrap.h +0 -26
  347. package/src/headers/13/connection_wrap.h +0 -30
  348. package/src/headers/13/debug_utils-inl.h +0 -223
  349. package/src/headers/13/diagnosticfilename-inl.h +0 -33
  350. package/src/headers/13/env-inl.h +0 -1293
  351. package/src/headers/13/env.h +0 -1469
  352. package/src/headers/13/handle_wrap.h +0 -117
  353. package/src/headers/13/histogram-inl.h +0 -83
  354. package/src/headers/13/histogram.h +0 -98
  355. package/src/headers/13/inspector_io.h +0 -78
  356. package/src/headers/13/inspector_socket.h +0 -60
  357. package/src/headers/13/inspector_socket_server.h +0 -110
  358. package/src/headers/13/js_native_api.h +0 -541
  359. package/src/headers/13/js_native_api_v8.h +0 -303
  360. package/src/headers/13/js_native_api_v8_internals.h +0 -38
  361. package/src/headers/13/js_stream.h +0 -52
  362. package/src/headers/13/json_utils.h +0 -160
  363. package/src/headers/13/node_api.h +0 -239
  364. package/src/headers/13/node_api_types.h +0 -44
  365. package/src/headers/13/node_binding.h +0 -99
  366. package/src/headers/13/node_context_data.h +0 -39
  367. package/src/headers/13/node_contextify.h +0 -161
  368. package/src/headers/13/node_crypto.h +0 -800
  369. package/src/headers/13/node_crypto_common.h +0 -138
  370. package/src/headers/13/node_crypto_groups.h +0 -415
  371. package/src/headers/13/node_dir.h +0 -52
  372. package/src/headers/13/node_dtrace.h +0 -86
  373. package/src/headers/13/node_errors.h +0 -210
  374. package/src/headers/13/node_file.h +0 -364
  375. package/src/headers/13/node_http2_state.h +0 -144
  376. package/src/headers/13/node_internals.h +0 -405
  377. package/src/headers/13/node_main_instance.h +0 -97
  378. package/src/headers/13/node_mem-inl.h +0 -112
  379. package/src/headers/13/node_mem.h +0 -41
  380. package/src/headers/13/node_metadata.h +0 -109
  381. package/src/headers/13/node_mutex.h +0 -247
  382. package/src/headers/13/node_native_module.h +0 -99
  383. package/src/headers/13/node_native_module_env.h +0 -65
  384. package/src/headers/13/node_object_wrap.h +0 -132
  385. package/src/headers/13/node_perf.h +0 -181
  386. package/src/headers/13/node_perf_common.h +0 -97
  387. package/src/headers/13/node_platform.h +0 -190
  388. package/src/headers/13/node_process.h +0 -41
  389. package/src/headers/13/node_root_certs.h +0 -3424
  390. package/src/headers/13/node_sockaddr-inl.h +0 -170
  391. package/src/headers/13/node_sockaddr.h +0 -123
  392. package/src/headers/13/node_union_bytes.h +0 -103
  393. package/src/headers/13/node_v8_platform-inl.h +0 -184
  394. package/src/headers/13/node_wasi.h +0 -108
  395. package/src/headers/13/node_win32_etw_provider-inl.h +0 -287
  396. package/src/headers/13/node_win32_etw_provider.h +0 -99
  397. package/src/headers/13/pipe_wrap.h +0 -78
  398. package/src/headers/13/req_wrap-inl.h +0 -170
  399. package/src/headers/13/spawn_sync.h +0 -242
  400. package/src/headers/13/stream_wrap.h +0 -130
  401. package/src/headers/13/string_decoder-inl.h +0 -37
  402. package/src/headers/13/string_decoder.h +0 -50
  403. package/src/headers/13/tcp_wrap.h +0 -101
  404. package/src/headers/13/threadpoolwork-inl.h +0 -57
  405. package/src/headers/13/tls_wrap.h +0 -221
  406. package/src/headers/13/tracing/node_trace_buffer.h +0 -83
  407. package/src/headers/13/tracing/node_trace_writer.h +0 -75
  408. package/src/headers/13/tracing/trace_event_common.h +0 -1109
  409. package/src/headers/13/tracing/traced_value.h +0 -70
  410. package/src/headers/13/v8abbr.h +0 -124
@@ -0,0 +1,85 @@
1
+ #ifndef SRC_TIMER_WRAP_H_
2
+ #define SRC_TIMER_WRAP_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include "memory_tracker.h"
7
+ #include "env.h"
8
+ #include "uv.h"
9
+
10
+ #include <functional>
11
+
12
+ namespace node {
13
+
14
+ // Utility class that makes working with libuv timers a bit easier.
15
+ class TimerWrap final : public MemoryRetainer {
16
+ public:
17
+ using TimerCb = std::function<void()>;
18
+
19
+ template <typename... Args>
20
+ explicit inline TimerWrap(Environment* env, Args&&... args);
21
+
22
+ TimerWrap(const TimerWrap&) = delete;
23
+
24
+ inline Environment* env() const { return env_; }
25
+
26
+ // Stop calling the timer callback.
27
+ void Stop();
28
+ // Render the timer unusable and delete this object.
29
+ void Close();
30
+
31
+ // Starts / Restarts the Timer
32
+ void Update(uint64_t interval, uint64_t repeat = 0);
33
+
34
+ void Ref();
35
+ void Unref();
36
+
37
+ SET_NO_MEMORY_INFO()
38
+ SET_MEMORY_INFO_NAME(TimerWrap)
39
+ SET_SELF_SIZE(TimerWrap)
40
+
41
+ private:
42
+ static void TimerClosedCb(uv_handle_t* handle);
43
+ static void OnTimeout(uv_timer_t* timer);
44
+ ~TimerWrap() = default;
45
+
46
+ Environment* env_;
47
+ TimerCb fn_;
48
+ uv_timer_t timer_;
49
+
50
+ friend std::unique_ptr<TimerWrap>::deleter_type;
51
+ };
52
+
53
+ class TimerWrapHandle : public MemoryRetainer {
54
+ public:
55
+ template <typename... Args>
56
+ explicit inline TimerWrapHandle(Environment* env, Args&&... args);
57
+
58
+ TimerWrapHandle(const TimerWrapHandle&) = delete;
59
+
60
+ ~TimerWrapHandle() { Close(); }
61
+
62
+ void Update(uint64_t interval, uint64_t repeat = 0);
63
+
64
+ void Ref();
65
+ void Unref();
66
+
67
+ void Stop();
68
+ void Close();
69
+
70
+ void MemoryInfo(node::MemoryTracker* tracker) const override;
71
+
72
+ SET_MEMORY_INFO_NAME(TimerWrapHandle)
73
+ SET_SELF_SIZE(TimerWrapHandle)
74
+
75
+ private:
76
+ static void CleanupHook(void* data);
77
+
78
+ TimerWrap* timer_;
79
+ };
80
+
81
+ } // namespace node
82
+
83
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
84
+
85
+ #endif // SRC_TIMER_WRAP_H_
@@ -76,7 +76,7 @@ class AgentWriterHandle {
76
76
  inline AgentWriterHandle(Agent* agent, int id) : agent_(agent), id_(id) {}
77
77
 
78
78
  Agent* agent_ = nullptr;
79
- int id_;
79
+ int id_ = 0;
80
80
 
81
81
  friend class Agent;
82
82
  };
@@ -5,8 +5,8 @@
5
5
  #ifndef SRC_TRACING_TRACE_EVENT_H_
6
6
  #define SRC_TRACING_TRACE_EVENT_H_
7
7
 
8
- #include "../node_platform.h"
9
8
  #include "v8-platform.h"
9
+ #include "tracing/agent.h"
10
10
  #include "trace_event_common.h"
11
11
  #include <atomic>
12
12
 
@@ -70,8 +70,7 @@ enum CategoryGroupEnabledFlags {
70
70
  // const uint8_t*
71
71
  // TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(const char* category_group)
72
72
  #define TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED \
73
- node::tracing::TraceEventHelper::GetTracingController() \
74
- ->GetCategoryGroupEnabled
73
+ node::tracing::TraceEventHelper::GetCategoryGroupEnabled
75
74
 
76
75
  // Get the number of times traces have been recorded. This is used to implement
77
76
  // the TRACE_EVENT_IS_NEW_TRACE facility.
@@ -115,9 +114,10 @@ enum CategoryGroupEnabledFlags {
115
114
  // const uint8_t* category_group_enabled,
116
115
  // const char* name,
117
116
  // uint64_t id)
118
- #define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \
119
- node::tracing::TraceEventHelper::GetTracingController() \
120
- ->UpdateTraceEventDuration
117
+ #define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \
118
+ if (auto controller = \
119
+ node::tracing::TraceEventHelper::GetTracingController()) \
120
+ controller->UpdateTraceEventDuration
121
121
 
122
122
  // Adds a metadata event to the trace log. The |AppendValueAsTraceFormat| method
123
123
  // on the convertable value will be called at flush time.
@@ -310,13 +310,20 @@ const int kZeroNumArgs = 0;
310
310
  const decltype(nullptr) kGlobalScope = nullptr;
311
311
  const uint64_t kNoId = 0;
312
312
 
313
- // Extern (for now) because embedders need access to TraceEventHelper.
314
- // Refs: https://github.com/nodejs/node/pull/28724
315
- class NODE_EXTERN TraceEventHelper {
313
+ class TraceEventHelper {
316
314
  public:
317
- static TracingController* GetTracingController();
315
+ static v8::TracingController* GetTracingController();
316
+ static void SetTracingController(v8::TracingController* controller);
317
+
318
318
  static Agent* GetAgent();
319
319
  static void SetAgent(Agent* agent);
320
+
321
+ static inline const uint8_t* GetCategoryGroupEnabled(const char* group) {
322
+ v8::TracingController* controller = GetTracingController();
323
+ static const uint8_t disabled = 0;
324
+ if (UNLIKELY(controller == nullptr)) return &disabled;
325
+ return controller->GetCategoryGroupEnabled(group);
326
+ }
320
327
  };
321
328
 
322
329
  // TraceID encapsulates an ID that can either be an integer or pointer. Pointers
@@ -465,6 +472,7 @@ static inline uint64_t AddTraceEventImpl(
465
472
  // DCHECK(num_args, 2);
466
473
  v8::TracingController* controller =
467
474
  node::tracing::TraceEventHelper::GetTracingController();
475
+ if (controller == nullptr) return 0;
468
476
  return controller->AddTraceEvent(phase, category_group_enabled, name, scope, id,
469
477
  bind_id, num_args, arg_names, arg_types,
470
478
  arg_values, arg_convertibles, flags);
@@ -487,6 +495,7 @@ static V8_INLINE uint64_t AddTraceEventWithTimestampImpl(
487
495
  // DCHECK_LE(num_args, 2);
488
496
  v8::TracingController* controller =
489
497
  node::tracing::TraceEventHelper::GetTracingController();
498
+ if (controller == nullptr) return 0;
490
499
  return controller->AddTraceEventWithTimestamp(
491
500
  phase, category_group_enabled, name, scope, id, bind_id, num_args,
492
501
  arg_names, arg_types, arg_values, arg_convertables, flags, timestamp);
@@ -505,9 +514,10 @@ static V8_INLINE void AddMetadataEventImpl(
505
514
  arg_convertibles[1].reset(reinterpret_cast<v8::ConvertableToTraceFormat*>(
506
515
  static_cast<intptr_t>(arg_values[1])));
507
516
  }
508
- node::tracing::TracingController* controller =
509
- node::tracing::TraceEventHelper::GetTracingController();
510
- return controller->AddMetadataEvent(
517
+ node::tracing::Agent* agent =
518
+ node::tracing::TraceEventHelper::GetAgent();
519
+ if (agent == nullptr) return;
520
+ return agent->GetTracingController()->AddMetadataEvent(
511
521
  category_group_enabled, name, num_args, arg_names, arg_types, arg_values,
512
522
  arg_convertibles, flags);
513
523
  }
File without changes
@@ -30,6 +30,7 @@
30
30
  namespace node {
31
31
 
32
32
  class Environment;
33
+ class ExternalReferenceRegistry;
33
34
 
34
35
  class TTYWrap : public LibuvStreamWrap {
35
36
  public:
@@ -37,6 +38,7 @@ class TTYWrap : public LibuvStreamWrap {
37
38
  v8::Local<v8::Value> unused,
38
39
  v8::Local<v8::Context> context,
39
40
  void* priv);
41
+ static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
40
42
 
41
43
  SET_NO_MEMORY_INFO()
42
44
  SET_MEMORY_INFO_NAME(TTYWrap)
@@ -46,7 +48,6 @@ class TTYWrap : public LibuvStreamWrap {
46
48
  TTYWrap(Environment* env,
47
49
  v8::Local<v8::Object> object,
48
50
  int fd,
49
- bool readable,
50
51
  int* init_err);
51
52
 
52
53
  static void IsTTY(const v8::FunctionCallbackInfo<v8::Value>& args);
@@ -215,6 +215,11 @@ class UDPWrap final : public HandleWrap,
215
215
  v8::Local<v8::Object> current_send_req_wrap_;
216
216
  };
217
217
 
218
+ int sockaddr_for_family(int address_family,
219
+ const char* address,
220
+ const unsigned short port,
221
+ sockaddr_storage* addr);
222
+
218
223
  } // namespace node
219
224
 
220
225
  #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
@@ -26,6 +26,7 @@
26
26
 
27
27
  #include <cmath>
28
28
  #include <cstring>
29
+ #include <locale>
29
30
  #include "util.h"
30
31
 
31
32
  // These are defined by <sys/byteorder.h> or <netinet/in.h> on some systems.
@@ -63,6 +64,14 @@
63
64
  (((x) & 0x00000000000000FFull) << 56)
64
65
  #endif
65
66
 
67
+ #define CHAR_TEST(bits, name, expr) \
68
+ template <typename T> \
69
+ bool name(const T ch) { \
70
+ static_assert(sizeof(ch) >= (bits) / 8, \
71
+ "Character must be wider than " #bits " bits"); \
72
+ return (expr); \
73
+ }
74
+
66
75
  namespace node {
67
76
 
68
77
  template <typename T>
@@ -208,8 +217,7 @@ void SwapBytes16(char* data, size_t nbytes) {
208
217
  CHECK_EQ(nbytes % 2, 0);
209
218
 
210
219
  #if defined(_MSC_VER)
211
- int align = reinterpret_cast<uintptr_t>(data) % sizeof(uint16_t);
212
- if (align == 0) {
220
+ if (AlignUp(data, sizeof(uint16_t)) == data) {
213
221
  // MSVC has no strict aliasing, and is able to highly optimize this case.
214
222
  uint16_t* data16 = reinterpret_cast<uint16_t*>(data);
215
223
  size_t len16 = nbytes / sizeof(*data16);
@@ -232,9 +240,8 @@ void SwapBytes32(char* data, size_t nbytes) {
232
240
  CHECK_EQ(nbytes % 4, 0);
233
241
 
234
242
  #if defined(_MSC_VER)
235
- int align = reinterpret_cast<uintptr_t>(data) % sizeof(uint32_t);
236
243
  // MSVC has no strict aliasing, and is able to highly optimize this case.
237
- if (align == 0) {
244
+ if (AlignUp(data, sizeof(uint32_t)) == data) {
238
245
  uint32_t* data32 = reinterpret_cast<uint32_t*>(data);
239
246
  size_t len32 = nbytes / sizeof(*data32);
240
247
  for (size_t i = 0; i < len32; i++) {
@@ -256,8 +263,7 @@ void SwapBytes64(char* data, size_t nbytes) {
256
263
  CHECK_EQ(nbytes % 8, 0);
257
264
 
258
265
  #if defined(_MSC_VER)
259
- int align = reinterpret_cast<uintptr_t>(data) % sizeof(uint64_t);
260
- if (align == 0) {
266
+ if (AlignUp(data, sizeof(uint64_t)) == data) {
261
267
  // MSVC has no strict aliasing, and is able to highly optimize this case.
262
268
  uint64_t* data64 = reinterpret_cast<uint64_t*>(data);
263
269
  size_t len64 = nbytes / sizeof(*data64);
@@ -277,7 +283,7 @@ void SwapBytes64(char* data, size_t nbytes) {
277
283
  }
278
284
 
279
285
  char ToLower(char c) {
280
- return c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c;
286
+ return std::tolower(c, std::locale::classic());
281
287
  }
282
288
 
283
289
  std::string ToLower(const std::string& in) {
@@ -288,7 +294,7 @@ std::string ToLower(const std::string& in) {
288
294
  }
289
295
 
290
296
  char ToUpper(char c) {
291
- return c >= 'a' && c <= 'z' ? (c - 'a') + 'A' : c;
297
+ return std::toupper(c, std::locale::classic());
292
298
  }
293
299
 
294
300
  std::string ToUpper(const std::string& in) {
@@ -299,12 +305,10 @@ std::string ToUpper(const std::string& in) {
299
305
  }
300
306
 
301
307
  bool StringEqualNoCase(const char* a, const char* b) {
302
- do {
303
- if (*a == '\0')
304
- return *b == '\0';
305
- if (*b == '\0')
306
- return *a == '\0';
307
- } while (ToLower(*a++) == ToLower(*b++));
308
+ while (ToLower(*a) == ToLower(*b++)) {
309
+ if (*a++ == '\0')
310
+ return true;
311
+ }
308
312
  return false;
309
313
  }
310
314
 
@@ -400,7 +404,7 @@ inline char* UncheckedCalloc(size_t n) { return UncheckedCalloc<char>(n); }
400
404
  void ThrowErrStringTooLong(v8::Isolate* isolate);
401
405
 
402
406
  v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
403
- const std::string& str,
407
+ std::string_view str,
404
408
  v8::Isolate* isolate) {
405
409
  if (isolate == nullptr) isolate = context->GetIsolate();
406
410
  if (UNLIKELY(str.size() >= static_cast<size_t>(v8::String::kMaxLength))) {
@@ -432,6 +436,25 @@ v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
432
436
  return handle_scope.Escape(v8::Array::New(isolate, arr.out(), arr.length()));
433
437
  }
434
438
 
439
+ template <typename T>
440
+ v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
441
+ const std::set<T>& set,
442
+ v8::Isolate* isolate) {
443
+ if (isolate == nullptr) isolate = context->GetIsolate();
444
+ v8::Local<v8::Set> set_js = v8::Set::New(isolate);
445
+ v8::HandleScope handle_scope(isolate);
446
+
447
+ for (const T& entry : set) {
448
+ v8::Local<v8::Value> value;
449
+ if (!ToV8Value(context, entry, isolate).ToLocal(&value))
450
+ return {};
451
+ if (set_js->Add(context, value).IsEmpty())
452
+ return {};
453
+ }
454
+
455
+ return set_js;
456
+ }
457
+
435
458
  template <typename T, typename U>
436
459
  v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
437
460
  const std::unordered_map<T, U>& map,
@@ -533,6 +556,37 @@ inline bool IsSafeJsInt(v8::Local<v8::Value> v) {
533
556
  return false;
534
557
  }
535
558
 
559
+ constexpr size_t FastStringKey::HashImpl(const char* str) {
560
+ // Low-quality hash (djb2), but just fine for current use cases.
561
+ size_t h = 5381;
562
+ while (*str != '\0') {
563
+ h = h * 33 + *(str++); // NOLINT(readability/pointer_notation)
564
+ }
565
+ return h;
566
+ }
567
+
568
+ constexpr size_t FastStringKey::Hash::operator()(
569
+ const FastStringKey& key) const {
570
+ return key.cached_hash_;
571
+ }
572
+
573
+ constexpr bool FastStringKey::operator==(const FastStringKey& other) const {
574
+ const char* p1 = name_;
575
+ const char* p2 = other.name_;
576
+ if (p1 == p2) return true;
577
+ do {
578
+ if (*(p1++) != *(p2++)) return false;
579
+ } while (*p1 != '\0');
580
+ return *p2 == '\0';
581
+ }
582
+
583
+ constexpr FastStringKey::FastStringKey(const char* name)
584
+ : name_(name), cached_hash_(HashImpl(name)) {}
585
+
586
+ constexpr const char* FastStringKey::c_str() const {
587
+ return name_;
588
+ }
589
+
536
590
  } // namespace node
537
591
 
538
592
  #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
@@ -24,30 +24,26 @@
24
24
 
25
25
  #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
26
26
 
27
- #if (__GNUC__ >= 8) && !defined(__clang__)
28
- #pragma GCC diagnostic push
29
- #pragma GCC diagnostic ignored "-Wcast-function-type"
30
- #endif
31
27
  #include "v8.h"
32
- #if (__GNUC__ >= 8) && !defined(__clang__)
33
- #pragma GCC diagnostic pop
34
- #endif
35
28
 
36
- #include <cassert>
37
- #include <climits> // PATH_MAX
38
- #include <csignal>
29
+ #include "node.h"
30
+
31
+ #include <climits>
39
32
  #include <cstddef>
40
33
  #include <cstdio>
41
34
  #include <cstdlib>
42
35
  #include <cstring>
43
36
 
44
- #include <functional> // std::function
37
+ #include <array>
45
38
  #include <limits>
46
- #include <set>
39
+ #include <memory>
47
40
  #include <string>
48
- #include <array>
41
+ #include <string_view>
42
+ #include <type_traits>
43
+ #include <set>
49
44
  #include <unordered_map>
50
45
  #include <utility>
46
+ #include <vector>
51
47
 
52
48
  #ifdef __GNUC__
53
49
  #define MUST_USE_RESULT __attribute__((warn_unused_result))
@@ -100,7 +96,7 @@ inline T MultiplyWithOverflowCheck(T a, T b);
100
96
 
101
97
  namespace per_process {
102
98
  // Tells whether the per-process V8::Initialize() is called and
103
- // if it is safe to call v8::Isolate::GetCurrent().
99
+ // if it is safe to call v8::Isolate::TryGetCurrent().
104
100
  extern bool v8_initialized;
105
101
  } // namespace per_process
106
102
 
@@ -116,8 +112,8 @@ struct AssertionInfo {
116
112
  const char* message;
117
113
  const char* function;
118
114
  };
119
- [[noreturn]] void Assert(const AssertionInfo& info);
120
- [[noreturn]] void Abort();
115
+ [[noreturn]] void NODE_EXTERN_PRIVATE Assert(const AssertionInfo& info);
116
+ [[noreturn]] void NODE_EXTERN_PRIVATE Abort();
121
117
  void DumpBacktrace(FILE* fp);
122
118
 
123
119
  // Windows 8+ does not like abort() in Release mode
@@ -328,6 +324,16 @@ inline bool StringEqualNoCase(const char* a, const char* b);
328
324
  // strncasecmp() is locale-sensitive. Use StringEqualNoCaseN() instead.
329
325
  inline bool StringEqualNoCaseN(const char* a, const char* b, size_t length);
330
326
 
327
+ template <typename T, size_t N>
328
+ constexpr size_t arraysize(const T (&)[N]) {
329
+ return N;
330
+ }
331
+
332
+ template <typename T, size_t N>
333
+ constexpr size_t strsize(const T (&)[N]) {
334
+ return N - 1;
335
+ }
336
+
331
337
  // Allocates an array of member type T. For up to kStackStorageSize items,
332
338
  // the stack is used, otherwise malloc().
333
339
  template <typename T, size_t kStackStorageSize = 1024>
@@ -367,8 +373,7 @@ class MaybeStackBuffer {
367
373
  // Current maximum capacity of the buffer with which SetLength() can be used
368
374
  // without first calling AllocateSufficientStorage().
369
375
  size_t capacity() const {
370
- return IsAllocated() ? capacity_ :
371
- IsInvalidated() ? 0 : kStackStorageSize;
376
+ return capacity_;
372
377
  }
373
378
 
374
379
  // Make sure enough space for `storage` entries is available.
@@ -404,12 +409,13 @@ class MaybeStackBuffer {
404
409
  buf_[length] = T();
405
410
  }
406
411
 
407
- // Make derefencing this object return nullptr.
412
+ // Make dereferencing this object return nullptr.
408
413
  // This method can be called multiple times throughout the lifetime of the
409
414
  // buffer, but once this has been called AllocateSufficientStorage() cannot
410
415
  // be used.
411
416
  void Invalidate() {
412
417
  CHECK(!IsAllocated());
418
+ capacity_ = 0;
413
419
  length_ = 0;
414
420
  buf_ = nullptr;
415
421
  }
@@ -430,10 +436,11 @@ class MaybeStackBuffer {
430
436
  CHECK(IsAllocated());
431
437
  buf_ = buf_st_;
432
438
  length_ = 0;
433
- capacity_ = 0;
439
+ capacity_ = arraysize(buf_st_);
434
440
  }
435
441
 
436
- MaybeStackBuffer() : length_(0), capacity_(0), buf_(buf_st_) {
442
+ MaybeStackBuffer()
443
+ : length_(0), capacity_(arraysize(buf_st_)), buf_(buf_st_) {
437
444
  // Default to a zero-length, null-terminated buffer.
438
445
  buf_[0] = T();
439
446
  }
@@ -482,6 +489,10 @@ class Utf8Value : public MaybeStackBuffer<char> {
482
489
  explicit Utf8Value(v8::Isolate* isolate, v8::Local<v8::Value> value);
483
490
 
484
491
  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;
495
+ }
485
496
  };
486
497
 
487
498
  class TwoByteValue : public MaybeStackBuffer<uint16_t> {
@@ -560,6 +571,11 @@ struct MallocedBuffer {
560
571
  size = new_size;
561
572
  }
562
573
 
574
+ void Realloc(size_t new_size) {
575
+ Truncate(new_size);
576
+ data = UncheckedRealloc(data, new_size);
577
+ }
578
+
563
579
  inline bool is_empty() const { return data == nullptr; }
564
580
 
565
581
  MallocedBuffer() : data(nullptr), size(0) {}
@@ -591,6 +607,15 @@ class NonCopyableMaybe {
591
607
  return empty_;
592
608
  }
593
609
 
610
+ const T* get() const {
611
+ return empty_ ? nullptr : &value_;
612
+ }
613
+
614
+ const T* operator->() const {
615
+ CHECK(!empty_);
616
+ return &value_;
617
+ }
618
+
594
619
  T&& Release() {
595
620
  CHECK_EQ(empty_, false);
596
621
  empty_ = true;
@@ -623,7 +648,7 @@ using DeleteFnPtr = typename FunctionDeleter<T, function>::Pointer;
623
648
  std::vector<std::string> SplitString(const std::string& in, char delim);
624
649
 
625
650
  inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
626
- const std::string& str,
651
+ std::string_view str,
627
652
  v8::Isolate* isolate = nullptr);
628
653
  template <typename T, typename test_for_number =
629
654
  typename std::enable_if<std::numeric_limits<T>::is_specialized, bool>::type>
@@ -634,6 +659,10 @@ template <typename T>
634
659
  inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
635
660
  const std::vector<T>& vec,
636
661
  v8::Isolate* isolate = nullptr);
662
+ template <typename T>
663
+ inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
664
+ const std::set<T>& set,
665
+ v8::Isolate* isolate = nullptr);
637
666
  template <typename T, typename U>
638
667
  inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
639
668
  const std::unordered_map<T, U>& map,
@@ -672,11 +701,9 @@ inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
672
701
  do { \
673
702
  v8::Isolate* isolate = target->GetIsolate(); \
674
703
  v8::Local<v8::String> constant_name = \
675
- v8::String::NewFromUtf8(isolate, name, v8::NewStringType::kNormal) \
676
- .ToLocalChecked(); \
704
+ v8::String::NewFromUtf8(isolate, name).ToLocalChecked(); \
677
705
  v8::Local<v8::String> constant_value = \
678
- v8::String::NewFromUtf8(isolate, constant, v8::NewStringType::kNormal) \
679
- .ToLocalChecked(); \
706
+ v8::String::NewFromUtf8(isolate, constant).ToLocalChecked(); \
680
707
  v8::PropertyAttribute constant_attributes = \
681
708
  static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete); \
682
709
  target \
@@ -709,17 +736,19 @@ inline bool IsBigEndian() {
709
736
  return GetEndianness() == kBigEndian;
710
737
  }
711
738
 
712
- template <typename T, size_t N>
713
- constexpr size_t arraysize(const T (&)[N]) {
714
- return N;
715
- }
716
-
717
739
  // Round up a to the next highest multiple of b.
718
740
  template <typename T>
719
741
  constexpr T RoundUp(T a, T b) {
720
742
  return a % b != 0 ? a + b - (a % b) : a;
721
743
  }
722
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
+ }
751
+
723
752
  class SlicedArguments : public MaybeStackBuffer<v8::Local<v8::Value>> {
724
753
  public:
725
754
  inline explicit SlicedArguments(
@@ -752,6 +781,7 @@ class PersistentToLocal {
752
781
  template <class TypeName>
753
782
  static inline v8::Local<TypeName> Strong(
754
783
  const v8::PersistentBase<TypeName>& persistent) {
784
+ DCHECK(!persistent.IsWeak());
755
785
  return *reinterpret_cast<v8::Local<TypeName>*>(
756
786
  const_cast<v8::PersistentBase<TypeName>*>(&persistent));
757
787
  }
@@ -764,6 +794,38 @@ class PersistentToLocal {
764
794
  }
765
795
  };
766
796
 
797
+ // Can be used as a key for std::unordered_map when lookup performance is more
798
+ // important than size and the keys are statically used to avoid redundant hash
799
+ // computations.
800
+ class FastStringKey {
801
+ public:
802
+ constexpr explicit FastStringKey(const char* name);
803
+
804
+ struct Hash {
805
+ constexpr size_t operator()(const FastStringKey& key) const;
806
+ };
807
+ constexpr bool operator==(const FastStringKey& other) const;
808
+
809
+ constexpr const char* c_str() const;
810
+
811
+ private:
812
+ static constexpr size_t HashImpl(const char* str);
813
+
814
+ const char* name_;
815
+ size_t cached_hash_;
816
+ };
817
+
818
+ // Like std::static_pointer_cast but for unique_ptr with the default deleter.
819
+ template <typename T, typename U>
820
+ std::unique_ptr<T> static_unique_pointer_cast(std::unique_ptr<U>&& ptr) {
821
+ return std::unique_ptr<T>(static_cast<T*>(ptr.release()));
822
+ }
823
+
824
+ #define MAYBE_FIELD_PTR(ptr, field) ptr == nullptr ? nullptr : &(ptr->field)
825
+
826
+ // Returns a non-zero code if it fails to open or read the file,
827
+ // aborts if it fails to close the file.
828
+ int ReadFileSync(std::string* result, const char* path);
767
829
  } // namespace node
768
830
 
769
831
  #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS