@encharm/cws 4.1.0 → 4.2.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 (370) hide show
  1. package/dist/bindings/cws_linux_108.node +0 -0
  2. package/dist/bindings/cws_linux_64.node +0 -0
  3. package/dist/bindings/cws_linux_72.node +0 -0
  4. package/dist/bindings/cws_linux_79.node +0 -0
  5. package/dist/bindings/cws_linux_83.node +0 -0
  6. package/dist/bindings/cws_linux_93.node +0 -0
  7. package/dist/bindings/cws_win32_64.node +0 -0
  8. package/dist/bindings/cws_win32_72.node +0 -0
  9. package/dist/bindings/cws_win32_79.node +0 -0
  10. package/dist/bindings/cws_win32_83.node +0 -0
  11. package/dist/bindings/cws_win32_93.node +0 -0
  12. package/package.json +1 -1
  13. package/src/Addon.h +24 -2
  14. package/src/HTTPSocket.cpp +1 -1
  15. package/src/headers/{13 → 18}/aliased_buffer.h +61 -9
  16. package/src/headers/18/aliased_struct-inl.h +54 -0
  17. package/src/headers/18/aliased_struct.h +63 -0
  18. package/src/headers/{12 → 18}/async_wrap-inl.h +0 -0
  19. package/src/headers/{12 → 18}/async_wrap.h +26 -2
  20. package/src/headers/{12/base64.h → 18/base64-inl.h} +78 -86
  21. package/src/headers/18/base64.h +69 -0
  22. package/src/headers/{12 → 18}/base_object-inl.h +46 -25
  23. package/src/headers/{12 → 18}/base_object.h +82 -17
  24. package/src/headers/{12 → 18}/callback_queue-inl.h +9 -9
  25. package/src/headers/{12 → 18}/callback_queue.h +13 -5
  26. package/src/headers/18/cares_wrap.h +523 -0
  27. package/src/headers/{12 → 18}/connect_wrap.h +0 -0
  28. package/src/headers/{12 → 18}/connection_wrap.h +0 -0
  29. package/src/headers/18/crypto/crypto_aes.h +89 -0
  30. package/src/headers/{13/node_crypto_bio.h → 18/crypto/crypto_bio.h} +3 -4
  31. package/src/headers/18/crypto/crypto_cipher.h +291 -0
  32. package/src/headers/{13/node_crypto_clienthello-inl.h → 18/crypto/crypto_clienthello-inl.h} +4 -5
  33. package/src/headers/{13/node_crypto_clienthello.h → 18/crypto/crypto_clienthello.h} +3 -4
  34. package/src/headers/{12/node_crypto_common.h → 18/crypto/crypto_common.h} +49 -36
  35. package/src/headers/18/crypto/crypto_context.h +147 -0
  36. package/src/headers/18/crypto/crypto_dh.h +156 -0
  37. package/src/headers/18/crypto/crypto_dsa.h +77 -0
  38. package/src/headers/18/crypto/crypto_ec.h +170 -0
  39. package/src/headers/{12/node_crypto_groups.h → 18/crypto/crypto_groups.h} +3 -3
  40. package/src/headers/18/crypto/crypto_hash.h +89 -0
  41. package/src/headers/18/crypto/crypto_hkdf.h +65 -0
  42. package/src/headers/18/crypto/crypto_hmac.h +94 -0
  43. package/src/headers/18/crypto/crypto_keygen.h +305 -0
  44. package/src/headers/18/crypto/crypto_keys.h +420 -0
  45. package/src/headers/18/crypto/crypto_pbkdf2.h +76 -0
  46. package/src/headers/18/crypto/crypto_random.h +130 -0
  47. package/src/headers/18/crypto/crypto_rsa.h +141 -0
  48. package/src/headers/18/crypto/crypto_scrypt.h +87 -0
  49. package/src/headers/18/crypto/crypto_sig.h +168 -0
  50. package/src/headers/18/crypto/crypto_spkac.h +21 -0
  51. package/src/headers/18/crypto/crypto_timing.h +20 -0
  52. package/src/headers/{13/tls_wrap.h → 18/crypto/crypto_tls.h} +137 -66
  53. package/src/headers/18/crypto/crypto_util.h +791 -0
  54. package/src/headers/18/crypto/crypto_x509.h +143 -0
  55. package/src/headers/{12 → 18}/debug_utils-inl.h +0 -0
  56. package/src/headers/{13 → 18}/debug_utils.h +7 -4
  57. package/src/headers/{12 → 18}/diagnosticfilename-inl.h +0 -0
  58. package/src/headers/{12 → 18}/env-inl.h +397 -304
  59. package/src/headers/{12 → 18}/env.h +397 -172
  60. package/src/headers/{12 → 18}/handle_wrap.h +7 -3
  61. package/src/headers/18/histogram-inl.h +107 -0
  62. package/src/headers/18/histogram.h +239 -0
  63. package/src/headers/{13 → 18}/inspector_agent.h +4 -7
  64. package/src/headers/{12 → 18}/inspector_io.h +0 -0
  65. package/src/headers/{13 → 18}/inspector_profiler.h +17 -5
  66. package/src/headers/{12 → 18}/inspector_socket.h +0 -0
  67. package/src/headers/{12 → 18}/inspector_socket_server.h +0 -0
  68. package/src/headers/18/js_native_api.h +571 -0
  69. package/src/headers/{13 → 18}/js_native_api_types.h +30 -7
  70. package/src/headers/{12 → 18}/js_native_api_v8.h +220 -83
  71. package/src/headers/{12 → 18}/js_native_api_v8_internals.h +6 -5
  72. package/src/headers/{12 → 18}/js_stream.h +0 -0
  73. package/src/headers/{12 → 18}/json_utils.h +0 -0
  74. package/src/headers/{13 → 18}/memory_tracker-inl.h +6 -5
  75. package/src/headers/{13 → 18}/memory_tracker.h +0 -7
  76. package/src/headers/{13 → 18}/module_wrap.h +24 -7
  77. package/src/headers/{13 → 18}/node.h +329 -68
  78. package/src/headers/18/node_api.h +288 -0
  79. package/src/headers/18/node_api_internals.h +38 -0
  80. package/src/headers/{12 → 18}/node_api_types.h +12 -9
  81. package/src/headers/{12 → 18}/node_binding.h +0 -0
  82. package/src/headers/18/node_blob.h +191 -0
  83. package/src/headers/18/node_bob-inl.h +37 -0
  84. package/src/headers/18/node_bob.h +111 -0
  85. package/src/headers/{13 → 18}/node_buffer.h +0 -0
  86. package/src/headers/{13 → 18}/node_constants.h +5 -1
  87. package/src/headers/{12 → 18}/node_context_data.h +5 -0
  88. package/src/headers/{12 → 18}/node_contextify.h +37 -2
  89. package/src/headers/{10/node_win32_perfctr_provider.h → 18/node_crypto.h} +30 -31
  90. package/src/headers/{12 → 18}/node_dir.h +0 -0
  91. package/src/headers/{12 → 18}/node_dtrace.h +0 -0
  92. package/src/headers/{12 → 18}/node_errors.h +90 -24
  93. package/src/headers/18/node_external_reference.h +145 -0
  94. package/src/headers/{13 → 18}/node_file-inl.h +38 -21
  95. package/src/headers/{12 → 18}/node_file.h +74 -13
  96. package/src/headers/{13 → 18}/node_http2.h +365 -269
  97. package/src/headers/{12 → 18}/node_http2_state.h +40 -50
  98. package/src/headers/{13 → 18}/node_http_common-inl.h +25 -5
  99. package/src/headers/{13 → 18}/node_http_common.h +24 -20
  100. package/src/headers/{13 → 18}/node_i18n.h +2 -1
  101. package/src/headers/{12 → 18}/node_internals.h +39 -41
  102. package/src/headers/{13 → 18}/node_main_instance.h +15 -18
  103. package/src/headers/{12 → 18}/node_mem-inl.h +0 -0
  104. package/src/headers/{12 → 18}/node_mem.h +1 -1
  105. package/src/headers/{13 → 18}/node_messaging.h +170 -23
  106. package/src/headers/{12 → 18}/node_metadata.h +17 -4
  107. package/src/headers/{12 → 18}/node_mutex.h +77 -1
  108. package/src/headers/{12 → 18}/node_native_module.h +11 -1
  109. package/src/headers/{13 → 18}/node_native_module_env.h +14 -8
  110. package/src/headers/{12 → 18}/node_object_wrap.h +0 -0
  111. package/src/headers/{13 → 18}/node_options-inl.h +51 -21
  112. package/src/headers/{13 → 18}/node_options.h +46 -14
  113. package/src/headers/18/node_perf.h +168 -0
  114. package/src/headers/{12 → 18}/node_perf_common.h +16 -22
  115. package/src/headers/{12 → 18}/node_platform.h +21 -16
  116. package/src/headers/18/node_process-inl.h +26 -0
  117. package/src/headers/18/node_process.h +97 -0
  118. package/src/headers/{13 → 18}/node_report.h +2 -2
  119. package/src/headers/{13 → 18}/node_revert.h +10 -0
  120. package/src/headers/{12 → 18}/node_root_certs.h +439 -651
  121. package/src/headers/18/node_snapshot_builder.h +43 -0
  122. package/src/headers/18/node_snapshotable.h +130 -0
  123. package/src/headers/{12 → 18}/node_sockaddr-inl.h +100 -4
  124. package/src/headers/18/node_sockaddr.h +405 -0
  125. package/src/headers/{12 → 18}/node_stat_watcher.h +7 -1
  126. package/src/headers/{12 → 18}/node_union_bytes.h +0 -0
  127. package/src/headers/{13 → 18}/node_url.h +18 -1
  128. package/src/headers/18/node_v8.h +41 -0
  129. package/src/headers/{12 → 18}/node_v8_platform-inl.h +10 -0
  130. package/src/headers/{13 → 18}/node_version.h +7 -7
  131. package/src/headers/{12 → 18}/node_wasi.h +0 -0
  132. package/src/headers/18/node_wasm_web_api.h +55 -0
  133. package/src/headers/{13 → 18}/node_watchdog.h +0 -0
  134. package/src/headers/{10 → 18}/node_win32_etw_provider-inl.h +7 -6
  135. package/src/headers/{10 → 18}/node_win32_etw_provider.h +0 -0
  136. package/src/headers/{13 → 18}/node_worker.h +24 -17
  137. package/src/headers/{12 → 18}/pipe_wrap.h +2 -0
  138. package/src/headers/{12 → 18}/req_wrap-inl.h +0 -0
  139. package/src/headers/{12 → 18}/req_wrap.h +1 -1
  140. package/src/headers/{12 → 18}/spawn_sync.h +0 -0
  141. package/src/headers/{13 → 18}/stream_base-inl.h +58 -22
  142. package/src/headers/{13 → 18}/stream_base.h +29 -3
  143. package/src/headers/{13 → 18}/stream_pipe.h +8 -3
  144. package/src/headers/{12 → 18}/stream_wrap.h +4 -1
  145. package/src/headers/{13 → 18}/string_bytes.h +0 -7
  146. package/src/headers/{12 → 18}/string_decoder-inl.h +0 -0
  147. package/src/headers/{10 → 18}/string_decoder.h +0 -0
  148. package/src/headers/{13 → 18}/string_search.h +2 -2
  149. package/src/headers/{12 → 18}/tcp_wrap.h +4 -0
  150. package/src/headers/{12 → 18}/threadpoolwork-inl.h +0 -0
  151. package/src/headers/18/timer_wrap-inl.h +32 -0
  152. package/src/headers/18/timer_wrap.h +85 -0
  153. package/src/headers/{13 → 18}/tracing/agent.h +1 -1
  154. package/src/headers/{12 → 18}/tracing/node_trace_buffer.h +0 -0
  155. package/src/headers/{12 → 18}/tracing/node_trace_writer.h +0 -0
  156. package/src/headers/{13 → 18}/tracing/trace_event.h +23 -13
  157. package/src/headers/{12 → 18}/tracing/trace_event_common.h +0 -0
  158. package/src/headers/{12 → 18}/tracing/traced_value.h +0 -0
  159. package/src/headers/{13 → 18}/tty_wrap.h +2 -1
  160. package/src/headers/{13 → 18}/udp_wrap.h +5 -0
  161. package/src/headers/{13 → 18}/util-inl.h +69 -15
  162. package/src/headers/{13 → 18}/util.h +93 -31
  163. package/src/headers/18/v8-fast-api-calls.h +939 -0
  164. package/src/headers/{12 → 18}/v8abbr.h +2 -2
  165. package/src/headers/10/aliased_buffer.h +0 -241
  166. package/src/headers/10/async_wrap-inl.h +0 -106
  167. package/src/headers/10/async_wrap.h +0 -218
  168. package/src/headers/10/base64.h +0 -197
  169. package/src/headers/10/base_object-inl.h +0 -132
  170. package/src/headers/10/base_object.h +0 -115
  171. package/src/headers/10/connect_wrap.h +0 -28
  172. package/src/headers/10/connection_wrap.h +0 -30
  173. package/src/headers/10/debug_utils.h +0 -128
  174. package/src/headers/10/env-inl.h +0 -906
  175. package/src/headers/10/env.h +0 -1046
  176. package/src/headers/10/handle_wrap.h +0 -114
  177. package/src/headers/10/inspector_agent.h +0 -137
  178. package/src/headers/10/inspector_io.h +0 -97
  179. package/src/headers/10/inspector_socket.h +0 -59
  180. package/src/headers/10/inspector_socket_server.h +0 -104
  181. package/src/headers/10/js_stream.h +0 -57
  182. package/src/headers/10/memory_tracker-inl.h +0 -318
  183. package/src/headers/10/memory_tracker.h +0 -246
  184. package/src/headers/10/module_wrap.h +0 -100
  185. package/src/headers/10/node.h +0 -863
  186. package/src/headers/10/node_api.h +0 -752
  187. package/src/headers/10/node_api_types.h +0 -171
  188. package/src/headers/10/node_buffer.h +0 -90
  189. package/src/headers/10/node_code_cache.h +0 -17
  190. package/src/headers/10/node_constants.h +0 -74
  191. package/src/headers/10/node_context_data.h +0 -39
  192. package/src/headers/10/node_contextify.h +0 -141
  193. package/src/headers/10/node_counters.h +0 -59
  194. package/src/headers/10/node_crypto.h +0 -699
  195. package/src/headers/10/node_crypto_bio.h +0 -177
  196. package/src/headers/10/node_crypto_clienthello-inl.h +0 -92
  197. package/src/headers/10/node_crypto_clienthello.h +0 -131
  198. package/src/headers/10/node_crypto_groups.h +0 -416
  199. package/src/headers/10/node_dtrace.h +0 -84
  200. package/src/headers/10/node_errors.h +0 -118
  201. package/src/headers/10/node_file.h +0 -373
  202. package/src/headers/10/node_http2.h +0 -1304
  203. package/src/headers/10/node_http2_state.h +0 -158
  204. package/src/headers/10/node_i18n.h +0 -69
  205. package/src/headers/10/node_internals.h +0 -952
  206. package/src/headers/10/node_javascript.h +0 -41
  207. package/src/headers/10/node_messaging.h +0 -219
  208. package/src/headers/10/node_mutex.h +0 -191
  209. package/src/headers/10/node_object_wrap.h +0 -130
  210. package/src/headers/10/node_options-inl.h +0 -444
  211. package/src/headers/10/node_options.h +0 -397
  212. package/src/headers/10/node_perf.h +0 -134
  213. package/src/headers/10/node_perf_common.h +0 -96
  214. package/src/headers/10/node_persistent.h +0 -30
  215. package/src/headers/10/node_platform.h +0 -170
  216. package/src/headers/10/node_revert.h +0 -75
  217. package/src/headers/10/node_root_certs.h +0 -3393
  218. package/src/headers/10/node_stat_watcher.h +0 -65
  219. package/src/headers/10/node_url.h +0 -193
  220. package/src/headers/10/node_version.h +0 -120
  221. package/src/headers/10/node_watchdog.h +0 -114
  222. package/src/headers/10/node_worker.h +0 -94
  223. package/src/headers/10/pipe_wrap.h +0 -76
  224. package/src/headers/10/req_wrap-inl.h +0 -166
  225. package/src/headers/10/req_wrap.h +0 -61
  226. package/src/headers/10/sharedarraybuffer_metadata.h +0 -67
  227. package/src/headers/10/spawn_sync.h +0 -240
  228. package/src/headers/10/stream_base-inl.h +0 -458
  229. package/src/headers/10/stream_base.h +0 -378
  230. package/src/headers/10/stream_pipe.h +0 -72
  231. package/src/headers/10/stream_wrap.h +0 -130
  232. package/src/headers/10/string_bytes.h +0 -126
  233. package/src/headers/10/string_decoder-inl.h +0 -38
  234. package/src/headers/10/string_search.h +0 -620
  235. package/src/headers/10/tcp_wrap.h +0 -99
  236. package/src/headers/10/tls_wrap.h +0 -195
  237. package/src/headers/10/tracing/agent.h +0 -178
  238. package/src/headers/10/tracing/node_trace_buffer.h +0 -83
  239. package/src/headers/10/tracing/node_trace_writer.h +0 -75
  240. package/src/headers/10/tracing/trace_event.h +0 -706
  241. package/src/headers/10/tracing/trace_event_common.h +0 -1102
  242. package/src/headers/10/tracing/traced_value.h +0 -68
  243. package/src/headers/10/tty_wrap.h +0 -63
  244. package/src/headers/10/udp_wrap.h +0 -102
  245. package/src/headers/10/util-inl.h +0 -459
  246. package/src/headers/10/util.h +0 -508
  247. package/src/headers/10/v8abbr.h +0 -121
  248. package/src/headers/12/aliased_buffer.h +0 -263
  249. package/src/headers/12/debug_utils.h +0 -181
  250. package/src/headers/12/histogram-inl.h +0 -83
  251. package/src/headers/12/histogram.h +0 -98
  252. package/src/headers/12/http_parser_adaptor.h +0 -24
  253. package/src/headers/12/inspector_agent.h +0 -147
  254. package/src/headers/12/inspector_profiler.h +0 -137
  255. package/src/headers/12/js_native_api.h +0 -541
  256. package/src/headers/12/js_native_api_types.h +0 -139
  257. package/src/headers/12/memory_tracker-inl.h +0 -339
  258. package/src/headers/12/memory_tracker.h +0 -283
  259. package/src/headers/12/module_wrap.h +0 -99
  260. package/src/headers/12/node.h +0 -887
  261. package/src/headers/12/node_api.h +0 -239
  262. package/src/headers/12/node_buffer.h +0 -92
  263. package/src/headers/12/node_constants.h +0 -80
  264. package/src/headers/12/node_crypto.h +0 -800
  265. package/src/headers/12/node_crypto_bio.h +0 -195
  266. package/src/headers/12/node_crypto_clienthello-inl.h +0 -91
  267. package/src/headers/12/node_crypto_clienthello.h +0 -132
  268. package/src/headers/12/node_file-inl.h +0 -289
  269. package/src/headers/12/node_http2.h +0 -1311
  270. package/src/headers/12/node_http_parser_impl.h +0 -994
  271. package/src/headers/12/node_i18n.h +0 -144
  272. package/src/headers/12/node_main_instance.h +0 -97
  273. package/src/headers/12/node_messaging.h +0 -227
  274. package/src/headers/12/node_native_module_env.h +0 -65
  275. package/src/headers/12/node_options-inl.h +0 -447
  276. package/src/headers/12/node_options.h +0 -479
  277. package/src/headers/12/node_perf.h +0 -181
  278. package/src/headers/12/node_process.h +0 -41
  279. package/src/headers/12/node_report.h +0 -47
  280. package/src/headers/12/node_revert.h +0 -78
  281. package/src/headers/12/node_sockaddr.h +0 -123
  282. package/src/headers/12/node_url.h +0 -188
  283. package/src/headers/12/node_version.h +0 -98
  284. package/src/headers/12/node_watchdog.h +0 -152
  285. package/src/headers/12/node_win32_etw_provider-inl.h +0 -287
  286. package/src/headers/12/node_win32_etw_provider.h +0 -99
  287. package/src/headers/12/node_worker.h +0 -142
  288. package/src/headers/12/sharedarraybuffer_metadata.h +0 -72
  289. package/src/headers/12/stream_base-inl.h +0 -323
  290. package/src/headers/12/stream_base.h +0 -431
  291. package/src/headers/12/stream_pipe.h +0 -72
  292. package/src/headers/12/string_bytes.h +0 -142
  293. package/src/headers/12/string_decoder.h +0 -50
  294. package/src/headers/12/string_search.h +0 -638
  295. package/src/headers/12/tls_wrap.h +0 -221
  296. package/src/headers/12/tracing/agent.h +0 -195
  297. package/src/headers/12/tracing/trace_event.h +0 -710
  298. package/src/headers/12/tty_wrap.h +0 -64
  299. package/src/headers/12/udp_wrap.h +0 -222
  300. package/src/headers/12/util-inl.h +0 -529
  301. package/src/headers/12/util.h +0 -765
  302. package/src/headers/13/async_wrap-inl.h +0 -94
  303. package/src/headers/13/async_wrap.h +0 -224
  304. package/src/headers/13/base64.h +0 -197
  305. package/src/headers/13/base_object-inl.h +0 -353
  306. package/src/headers/13/base_object.h +0 -229
  307. package/src/headers/13/connect_wrap.h +0 -26
  308. package/src/headers/13/connection_wrap.h +0 -30
  309. package/src/headers/13/debug_utils-inl.h +0 -223
  310. package/src/headers/13/diagnosticfilename-inl.h +0 -33
  311. package/src/headers/13/env-inl.h +0 -1293
  312. package/src/headers/13/env.h +0 -1469
  313. package/src/headers/13/handle_wrap.h +0 -117
  314. package/src/headers/13/histogram-inl.h +0 -83
  315. package/src/headers/13/histogram.h +0 -98
  316. package/src/headers/13/inspector_io.h +0 -78
  317. package/src/headers/13/inspector_socket.h +0 -60
  318. package/src/headers/13/inspector_socket_server.h +0 -110
  319. package/src/headers/13/js_native_api.h +0 -541
  320. package/src/headers/13/js_native_api_v8.h +0 -303
  321. package/src/headers/13/js_native_api_v8_internals.h +0 -38
  322. package/src/headers/13/js_stream.h +0 -52
  323. package/src/headers/13/json_utils.h +0 -160
  324. package/src/headers/13/node_api.h +0 -239
  325. package/src/headers/13/node_api_types.h +0 -44
  326. package/src/headers/13/node_binding.h +0 -99
  327. package/src/headers/13/node_context_data.h +0 -39
  328. package/src/headers/13/node_contextify.h +0 -161
  329. package/src/headers/13/node_crypto.h +0 -800
  330. package/src/headers/13/node_crypto_common.h +0 -138
  331. package/src/headers/13/node_crypto_groups.h +0 -415
  332. package/src/headers/13/node_dir.h +0 -52
  333. package/src/headers/13/node_dtrace.h +0 -86
  334. package/src/headers/13/node_errors.h +0 -210
  335. package/src/headers/13/node_file.h +0 -364
  336. package/src/headers/13/node_http2_state.h +0 -144
  337. package/src/headers/13/node_internals.h +0 -405
  338. package/src/headers/13/node_mem-inl.h +0 -112
  339. package/src/headers/13/node_mem.h +0 -41
  340. package/src/headers/13/node_metadata.h +0 -109
  341. package/src/headers/13/node_mutex.h +0 -247
  342. package/src/headers/13/node_native_module.h +0 -99
  343. package/src/headers/13/node_object_wrap.h +0 -132
  344. package/src/headers/13/node_perf.h +0 -181
  345. package/src/headers/13/node_perf_common.h +0 -97
  346. package/src/headers/13/node_platform.h +0 -190
  347. package/src/headers/13/node_process.h +0 -41
  348. package/src/headers/13/node_root_certs.h +0 -3424
  349. package/src/headers/13/node_sockaddr-inl.h +0 -170
  350. package/src/headers/13/node_sockaddr.h +0 -123
  351. package/src/headers/13/node_stat_watcher.h +0 -66
  352. package/src/headers/13/node_union_bytes.h +0 -103
  353. package/src/headers/13/node_v8_platform-inl.h +0 -184
  354. package/src/headers/13/node_wasi.h +0 -108
  355. package/src/headers/13/node_win32_etw_provider-inl.h +0 -287
  356. package/src/headers/13/node_win32_etw_provider.h +0 -99
  357. package/src/headers/13/pipe_wrap.h +0 -78
  358. package/src/headers/13/req_wrap-inl.h +0 -170
  359. package/src/headers/13/req_wrap.h +0 -77
  360. package/src/headers/13/spawn_sync.h +0 -242
  361. package/src/headers/13/stream_wrap.h +0 -130
  362. package/src/headers/13/string_decoder-inl.h +0 -37
  363. package/src/headers/13/string_decoder.h +0 -50
  364. package/src/headers/13/tcp_wrap.h +0 -101
  365. package/src/headers/13/threadpoolwork-inl.h +0 -57
  366. package/src/headers/13/tracing/node_trace_buffer.h +0 -83
  367. package/src/headers/13/tracing/node_trace_writer.h +0 -75
  368. package/src/headers/13/tracing/trace_event_common.h +0 -1109
  369. package/src/headers/13/tracing/traced_value.h +0 -70
  370. 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