@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
@@ -5,7 +5,11 @@
5
5
 
6
6
  #include "env.h"
7
7
  #include "node_mutex.h"
8
- #include <list>
8
+ #include "v8.h"
9
+ #include <deque>
10
+ #include <string>
11
+ #include <unordered_map>
12
+ #include <set>
9
13
 
10
14
  namespace node {
11
15
  namespace worker {
@@ -15,6 +19,29 @@ class MessagePort;
15
19
 
16
20
  typedef MaybeStackBuffer<v8::Local<v8::Value>, 8> TransferList;
17
21
 
22
+ // Used to represent the in-flight structure of an object that is being
23
+ // transferred or cloned using postMessage().
24
+ class TransferData : public MemoryRetainer {
25
+ public:
26
+ // Deserialize this object on the receiving end after a .postMessage() call.
27
+ // - `context` may not be the same as `env->context()`. This method should
28
+ // not produce JS objects coming from Contexts other than `context`.
29
+ // - `self` is a unique_ptr for the object that this is being called on.
30
+ // - The return value is treated like a `Maybe`, i.e. if `nullptr` is
31
+ // returned, any further deserialization of the message is stopped and
32
+ // control is returned to the event loop or JS as soon as possible.
33
+ virtual BaseObjectPtr<BaseObject> Deserialize(
34
+ Environment* env,
35
+ v8::Local<v8::Context> context,
36
+ std::unique_ptr<TransferData> self) = 0;
37
+ // FinalizeTransferWrite() is the counterpart to
38
+ // BaseObject::FinalizeTransferRead(). It is called right after the transfer
39
+ // data was created, and defaults to doing nothing. After this function,
40
+ // this object should not hold any more Isolate-specific data.
41
+ virtual v8::Maybe<bool> FinalizeTransferWrite(
42
+ v8::Local<v8::Context> context, v8::ValueSerializer* serializer);
43
+ };
44
+
18
45
  // Represents a single communication message.
19
46
  class Message : public MemoryRetainer {
20
47
  public:
@@ -22,6 +49,7 @@ class Message : public MemoryRetainer {
22
49
  // V8 ValueSerializer API. If `payload` is empty, this message indicates
23
50
  // that the receiving message port should close itself.
24
51
  explicit Message(MallocedBuffer<char>&& payload = MallocedBuffer<char>());
52
+ ~Message() = default;
25
53
 
26
54
  Message(Message&& other) = default;
27
55
  Message& operator=(Message&& other) = default;
@@ -34,8 +62,10 @@ class Message : public MemoryRetainer {
34
62
 
35
63
  // Deserialize the contained JS value. May only be called once, and only
36
64
  // after Serialize() has been called (e.g. by another thread).
37
- v8::MaybeLocal<v8::Value> Deserialize(Environment* env,
38
- v8::Local<v8::Context> context);
65
+ v8::MaybeLocal<v8::Value> Deserialize(
66
+ Environment* env,
67
+ v8::Local<v8::Context> context,
68
+ v8::Local<v8::Value>* port_list = nullptr);
39
69
 
40
70
  // Serialize a JS value, and optionally transfer objects, into this message.
41
71
  // The Message object retains ownership of all transferred objects until
@@ -54,16 +84,20 @@ class Message : public MemoryRetainer {
54
84
  void AddSharedArrayBuffer(std::shared_ptr<v8::BackingStore> backing_store);
55
85
  // Internal method of Message that is called once serialization finishes
56
86
  // and that transfers ownership of `data` to this message.
57
- void AddMessagePort(std::unique_ptr<MessagePortData>&& data);
87
+ void AddTransferable(std::unique_ptr<TransferData>&& data);
58
88
  // Internal method of Message that is called when a new WebAssembly.Module
59
89
  // object is encountered in the incoming value's structure.
60
- uint32_t AddWASMModule(v8::WasmModuleObject::TransferrableModule&& mod);
90
+ uint32_t AddWASMModule(v8::CompiledWasmModule&& mod);
61
91
 
62
- // The MessagePorts that will be transferred, as recorded by Serialize().
92
+ // The host objects that will be transferred, as recorded by Serialize()
93
+ // (e.g. MessagePorts).
63
94
  // Used for warning user about posting the target MessagePort to itself,
64
95
  // which will as a side effect destroy the communication channel.
65
- const std::vector<std::unique_ptr<MessagePortData>>& message_ports() const {
66
- return message_ports_;
96
+ const std::vector<std::unique_ptr<TransferData>>& transferables() const {
97
+ return transferables_;
98
+ }
99
+ bool has_transferables() const {
100
+ return !transferables_.empty() || !array_buffers_.empty();
67
101
  }
68
102
 
69
103
  void MemoryInfo(MemoryTracker* tracker) const override;
@@ -73,17 +107,65 @@ class Message : public MemoryRetainer {
73
107
 
74
108
  private:
75
109
  MallocedBuffer<char> main_message_buf_;
110
+ // TODO(addaleax): Make this a std::variant to save storage size in the common
111
+ // case (which is that all of these vectors are empty) once that is available
112
+ // with C++17.
76
113
  std::vector<std::shared_ptr<v8::BackingStore>> array_buffers_;
77
114
  std::vector<std::shared_ptr<v8::BackingStore>> shared_array_buffers_;
78
- std::vector<std::unique_ptr<MessagePortData>> message_ports_;
79
- std::vector<v8::WasmModuleObject::TransferrableModule> wasm_modules_;
115
+ std::vector<std::unique_ptr<TransferData>> transferables_;
116
+ std::vector<v8::CompiledWasmModule> wasm_modules_;
80
117
 
81
118
  friend class MessagePort;
82
119
  };
83
120
 
121
+ class SiblingGroup final : public std::enable_shared_from_this<SiblingGroup> {
122
+ public:
123
+ // Named SiblingGroup, Used for one-to-many BroadcastChannels.
124
+ static std::shared_ptr<SiblingGroup> Get(const std::string& name);
125
+
126
+ // Anonymous SiblingGroup, Used for one-to-one MessagePort pairs.
127
+ SiblingGroup() = default;
128
+ explicit SiblingGroup(const std::string& name);
129
+ ~SiblingGroup();
130
+
131
+ // Dispatches the Message to the collection of associated
132
+ // ports. If there is more than one destination port and
133
+ // the Message contains transferables, Dispatch will fail.
134
+ // Returns Just(true) if successful and the message was
135
+ // dispatched to at least one destination. Returns Just(false)
136
+ // if there were no destinations. Returns Nothing<bool>()
137
+ // if there was an error. If error is not nullptr, it will
138
+ // be set to an error message or warning message as appropriate.
139
+ v8::Maybe<bool> Dispatch(
140
+ MessagePortData* source,
141
+ std::shared_ptr<Message> message,
142
+ std::string* error = nullptr);
143
+
144
+ void Entangle(MessagePortData* data);
145
+ void Entangle(std::initializer_list<MessagePortData*> data);
146
+ void Disentangle(MessagePortData* data);
147
+
148
+ const std::string& name() const { return name_; }
149
+
150
+ size_t size() const { return ports_.size(); }
151
+
152
+ private:
153
+ const std::string name_;
154
+ RwLock group_mutex_; // Protects ports_.
155
+ std::set<MessagePortData*> ports_;
156
+
157
+ static void CheckSiblingGroup(const std::string& name);
158
+
159
+ using Map =
160
+ std::unordered_map<std::string, std::weak_ptr<SiblingGroup>>;
161
+
162
+ static Mutex groups_mutex_;
163
+ static Map groups_;
164
+ };
165
+
84
166
  // This contains all data for a `MessagePort` instance that is not tied to
85
167
  // a specific Environment/Isolate/event loop, for easier transfer between those.
86
- class MessagePortData : public MemoryRetainer {
168
+ class MessagePortData : public TransferData {
87
169
  public:
88
170
  explicit MessagePortData(MessagePort* owner);
89
171
  ~MessagePortData() override;
@@ -95,7 +177,10 @@ class MessagePortData : public MemoryRetainer {
95
177
 
96
178
  // Add a message to the incoming queue and notify the receiver.
97
179
  // This may be called from any thread.
98
- void AddToIncomingQueue(Message&& message);
180
+ void AddToIncomingQueue(std::shared_ptr<Message> message);
181
+ v8::Maybe<bool> Dispatch(
182
+ std::shared_ptr<Message> message,
183
+ std::string* error = nullptr);
99
184
 
100
185
  // Turns `a` and `b` into siblings, i.e. connects the sending side of one
101
186
  // to the receiving side of the other. This is not thread-safe.
@@ -108,6 +193,10 @@ class MessagePortData : public MemoryRetainer {
108
193
  void Disentangle();
109
194
 
110
195
  void MemoryInfo(MemoryTracker* tracker) const override;
196
+ BaseObjectPtr<BaseObject> Deserialize(
197
+ Environment* env,
198
+ v8::Local<v8::Context> context,
199
+ std::unique_ptr<TransferData> self) override;
111
200
 
112
201
  SET_MEMORY_INFO_NAME(MessagePortData)
113
202
  SET_SELF_SIZE(MessagePortData)
@@ -116,15 +205,14 @@ class MessagePortData : public MemoryRetainer {
116
205
  // This mutex protects all fields below it, with the exception of
117
206
  // sibling_.
118
207
  mutable Mutex mutex_;
119
- std::list<Message> incoming_messages_;
208
+ // TODO(addaleax): Make this a std::variant<std::shared_ptr, std::unique_ptr>
209
+ // once that is available with C++17, because std::shared_ptr comes with
210
+ // overhead that is only necessary for BroadcastChannel.
211
+ std::deque<std::shared_ptr<Message>> incoming_messages_;
120
212
  MessagePort* owner_ = nullptr;
121
- // This mutex protects the sibling_ field and is shared between two entangled
122
- // MessagePorts. If both mutexes are acquired, this one needs to be
123
- // acquired first.
124
- std::shared_ptr<Mutex> sibling_mutex_ = std::make_shared<Mutex>();
125
- MessagePortData* sibling_ = nullptr;
126
-
213
+ std::shared_ptr<SiblingGroup> group_;
127
214
  friend class MessagePort;
215
+ friend class SiblingGroup;
128
216
  };
129
217
 
130
218
  // A message port that receives messages from other threads, including
@@ -147,12 +235,14 @@ class MessagePort : public HandleWrap {
147
235
  // `MessagePortData` object.
148
236
  static MessagePort* New(Environment* env,
149
237
  v8::Local<v8::Context> context,
150
- std::unique_ptr<MessagePortData> data = nullptr);
238
+ std::unique_ptr<MessagePortData> data = {},
239
+ std::shared_ptr<SiblingGroup> sibling_group = {});
151
240
 
152
241
  // Send a message, i.e. deliver it into the sibling's incoming queue.
153
242
  // If this port is closed, or if there is no sibling, this message is
154
243
  // serialized with transfers, then silently discarded.
155
244
  v8::Maybe<bool> PostMessage(Environment* env,
245
+ v8::Local<v8::Context> context,
156
246
  v8::Local<v8::Value> message,
157
247
  const TransferList& transfer);
158
248
 
@@ -167,6 +257,7 @@ class MessagePort : public HandleWrap {
167
257
  static void PostMessage(const v8::FunctionCallbackInfo<v8::Value>& args);
168
258
  static void Start(const v8::FunctionCallbackInfo<v8::Value>& args);
169
259
  static void Stop(const v8::FunctionCallbackInfo<v8::Value>& args);
260
+ static void CheckType(const v8::FunctionCallbackInfo<v8::Value>& args);
170
261
  static void Drain(const v8::FunctionCallbackInfo<v8::Value>& args);
171
262
  static void ReceiveMessage(const v8::FunctionCallbackInfo<v8::Value>& args);
172
263
 
@@ -195,16 +286,26 @@ class MessagePort : public HandleWrap {
195
286
  // NULL pointer to the C++ MessagePort object is also detached.
196
287
  inline bool IsDetached() const;
197
288
 
289
+ TransferMode GetTransferMode() const override;
290
+ std::unique_ptr<TransferData> TransferForMessaging() override;
291
+
198
292
  void MemoryInfo(MemoryTracker* tracker) const override;
199
293
  SET_MEMORY_INFO_NAME(MessagePort)
200
294
  SET_SELF_SIZE(MessagePort)
201
295
 
202
296
  private:
297
+ enum class MessageProcessingMode {
298
+ kNormalOperation,
299
+ kForceReadMessages
300
+ };
301
+
203
302
  void OnClose() override;
204
- void OnMessage();
303
+ void OnMessage(MessageProcessingMode mode);
205
304
  void TriggerAsync();
206
- v8::MaybeLocal<v8::Value> ReceiveMessage(v8::Local<v8::Context> context,
207
- bool only_if_receiving);
305
+ v8::MaybeLocal<v8::Value> ReceiveMessage(
306
+ v8::Local<v8::Context> context,
307
+ MessageProcessingMode mode,
308
+ v8::Local<v8::Value>* port_list = nullptr);
208
309
 
209
310
  std::unique_ptr<MessagePortData> data_ = nullptr;
210
311
  bool receiving_messages_ = false;
@@ -214,6 +315,52 @@ class MessagePort : public HandleWrap {
214
315
  friend class MessagePortData;
215
316
  };
216
317
 
318
+ // Provide a base class from which JS classes that should be transferable or
319
+ // cloneable by postMesssage() can inherit.
320
+ // See e.g. FileHandle in internal/fs/promises.js for an example.
321
+ class JSTransferable : public BaseObject {
322
+ public:
323
+ JSTransferable(Environment* env, v8::Local<v8::Object> obj);
324
+ static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
325
+
326
+ TransferMode GetTransferMode() const override;
327
+ std::unique_ptr<TransferData> TransferForMessaging() override;
328
+ std::unique_ptr<TransferData> CloneForMessaging() const override;
329
+ v8::Maybe<std::vector<BaseObjectPtr<BaseObject>>>
330
+ NestedTransferables() const override;
331
+ v8::Maybe<bool> FinalizeTransferRead(
332
+ v8::Local<v8::Context> context,
333
+ v8::ValueDeserializer* deserializer) override;
334
+
335
+ SET_NO_MEMORY_INFO()
336
+ SET_MEMORY_INFO_NAME(JSTransferable)
337
+ SET_SELF_SIZE(JSTransferable)
338
+
339
+ private:
340
+ std::unique_ptr<TransferData> TransferOrClone(TransferMode mode) const;
341
+
342
+ class Data : public TransferData {
343
+ public:
344
+ Data(std::string&& deserialize_info, v8::Global<v8::Value>&& data);
345
+
346
+ BaseObjectPtr<BaseObject> Deserialize(
347
+ Environment* env,
348
+ v8::Local<v8::Context> context,
349
+ std::unique_ptr<TransferData> self) override;
350
+ v8::Maybe<bool> FinalizeTransferWrite(
351
+ v8::Local<v8::Context> context,
352
+ v8::ValueSerializer* serializer) override;
353
+
354
+ SET_NO_MEMORY_INFO()
355
+ SET_MEMORY_INFO_NAME(JSTransferableTransferData)
356
+ SET_SELF_SIZE(Data)
357
+
358
+ private:
359
+ std::string deserialize_info_;
360
+ v8::Global<v8::Value> data_;
361
+ };
362
+ };
363
+
217
364
  v8::Local<v8::FunctionTemplate> GetMessagePortConstructorTemplate(
218
365
  Environment* env);
219
366
 
@@ -6,6 +6,13 @@
6
6
  #include <string>
7
7
  #include "node_version.h"
8
8
 
9
+ #if HAVE_OPENSSL
10
+ #include <openssl/crypto.h>
11
+ #if NODE_OPENSSL_HAS_QUIC
12
+ #include <openssl/quic.h>
13
+ #endif
14
+ #endif // HAVE_OPENSSL
15
+
9
16
  namespace node {
10
17
 
11
18
  // if this is a release build and no explicit base has been set
@@ -31,7 +38,6 @@ namespace node {
31
38
  V(nghttp2) \
32
39
  V(napi) \
33
40
  V(llhttp) \
34
- V(http_parser) \
35
41
 
36
42
  #if HAVE_OPENSSL
37
43
  #define NODE_VERSIONS_KEY_CRYPTO(V) V(openssl)
@@ -49,10 +55,19 @@ namespace node {
49
55
  #define NODE_VERSIONS_KEY_INTL(V)
50
56
  #endif // NODE_HAVE_I18N_SUPPORT
51
57
 
58
+ #ifdef OPENSSL_INFO_QUIC
59
+ #define NODE_VERSIONS_KEY_QUIC(V) \
60
+ V(ngtcp2) \
61
+ V(nghttp3)
62
+ #else
63
+ #define NODE_VERSIONS_KEY_QUIC(V)
64
+ #endif
65
+
52
66
  #define NODE_VERSIONS_KEYS(V) \
53
67
  NODE_VERSIONS_KEYS_BASE(V) \
54
68
  NODE_VERSIONS_KEY_CRYPTO(V) \
55
- NODE_VERSIONS_KEY_INTL(V)
69
+ NODE_VERSIONS_KEY_INTL(V) \
70
+ NODE_VERSIONS_KEY_QUIC(V)
56
71
 
57
72
  class Metadata {
58
73
  public:
@@ -102,8 +117,6 @@ class Metadata {
102
117
  // Per-process global
103
118
  namespace per_process {
104
119
  extern Metadata metadata;
105
- extern const char* const llhttp_version;
106
- extern const char* const http_parser_version;
107
120
  }
108
121
 
109
122
  } // namespace node
@@ -14,9 +14,11 @@ namespace node {
14
14
  template <typename Traits> class ConditionVariableBase;
15
15
  template <typename Traits> class MutexBase;
16
16
  struct LibuvMutexTraits;
17
+ struct LibuvRwlockTraits;
17
18
 
18
19
  using ConditionVariable = ConditionVariableBase<LibuvMutexTraits>;
19
20
  using Mutex = MutexBase<LibuvMutexTraits>;
21
+ using RwLock = MutexBase<LibuvRwlockTraits>;
20
22
 
21
23
  template <typename T, typename MutexT = Mutex>
22
24
  class ExclusiveAccess {
@@ -32,7 +34,7 @@ class ExclusiveAccess {
32
34
 
33
35
  class Scoped {
34
36
  public:
35
- // ExclusiveAccess will commonly be used in conjuction with std::shared_ptr
37
+ // ExclusiveAccess will commonly be used in conjunction with std::shared_ptr
36
38
  // and without this constructor it's too easy to forget to keep a reference
37
39
  // around to the shared_ptr while operating on the ExclusiveAccess object.
38
40
  explicit Scoped(const std::shared_ptr<ExclusiveAccess>& shared)
@@ -70,6 +72,8 @@ class MutexBase {
70
72
  inline ~MutexBase();
71
73
  inline void Lock();
72
74
  inline void Unlock();
75
+ inline void RdLock();
76
+ inline void RdUnlock();
73
77
 
74
78
  MutexBase(const MutexBase&) = delete;
75
79
  MutexBase& operator=(const MutexBase&) = delete;
@@ -92,6 +96,21 @@ class MutexBase {
92
96
  const MutexBase& mutex_;
93
97
  };
94
98
 
99
+ class ScopedReadLock {
100
+ public:
101
+ inline explicit ScopedReadLock(const MutexBase& mutex);
102
+ inline ~ScopedReadLock();
103
+
104
+ ScopedReadLock(const ScopedReadLock&) = delete;
105
+ ScopedReadLock& operator=(const ScopedReadLock&) = delete;
106
+
107
+ private:
108
+ template <typename> friend class ConditionVariableBase;
109
+ const MutexBase& mutex_;
110
+ };
111
+
112
+ using ScopedWriteLock = ScopedLock;
113
+
95
114
  class ScopedUnlock {
96
115
  public:
97
116
  inline explicit ScopedUnlock(const ScopedLock& scoped_lock);
@@ -167,6 +186,42 @@ struct LibuvMutexTraits {
167
186
  static inline void mutex_unlock(MutexT* mutex) {
168
187
  uv_mutex_unlock(mutex);
169
188
  }
189
+
190
+ static inline void mutex_rdlock(MutexT* mutex) {
191
+ uv_mutex_lock(mutex);
192
+ }
193
+
194
+ static inline void mutex_rdunlock(MutexT* mutex) {
195
+ uv_mutex_unlock(mutex);
196
+ }
197
+ };
198
+
199
+ struct LibuvRwlockTraits {
200
+ using MutexT = uv_rwlock_t;
201
+
202
+ static inline int mutex_init(MutexT* mutex) {
203
+ return uv_rwlock_init(mutex);
204
+ }
205
+
206
+ static inline void mutex_destroy(MutexT* mutex) {
207
+ uv_rwlock_destroy(mutex);
208
+ }
209
+
210
+ static inline void mutex_lock(MutexT* mutex) {
211
+ uv_rwlock_wrlock(mutex);
212
+ }
213
+
214
+ static inline void mutex_unlock(MutexT* mutex) {
215
+ uv_rwlock_wrunlock(mutex);
216
+ }
217
+
218
+ static inline void mutex_rdlock(MutexT* mutex) {
219
+ uv_rwlock_rdlock(mutex);
220
+ }
221
+
222
+ static inline void mutex_rdunlock(MutexT* mutex) {
223
+ uv_rwlock_rdunlock(mutex);
224
+ }
170
225
  };
171
226
 
172
227
  template <typename Traits>
@@ -214,6 +269,16 @@ void MutexBase<Traits>::Unlock() {
214
269
  Traits::mutex_unlock(&mutex_);
215
270
  }
216
271
 
272
+ template <typename Traits>
273
+ void MutexBase<Traits>::RdLock() {
274
+ Traits::mutex_rdlock(&mutex_);
275
+ }
276
+
277
+ template <typename Traits>
278
+ void MutexBase<Traits>::RdUnlock() {
279
+ Traits::mutex_rdunlock(&mutex_);
280
+ }
281
+
217
282
  template <typename Traits>
218
283
  MutexBase<Traits>::ScopedLock::ScopedLock(const MutexBase& mutex)
219
284
  : mutex_(mutex) {
@@ -229,6 +294,17 @@ MutexBase<Traits>::ScopedLock::~ScopedLock() {
229
294
  Traits::mutex_unlock(&mutex_.mutex_);
230
295
  }
231
296
 
297
+ template <typename Traits>
298
+ MutexBase<Traits>::ScopedReadLock::ScopedReadLock(const MutexBase& mutex)
299
+ : mutex_(mutex) {
300
+ Traits::mutex_rdlock(&mutex_.mutex_);
301
+ }
302
+
303
+ template <typename Traits>
304
+ MutexBase<Traits>::ScopedReadLock::~ScopedReadLock() {
305
+ Traits::mutex_rdunlock(&mutex_.mutex_);
306
+ }
307
+
232
308
  template <typename Traits>
233
309
  MutexBase<Traits>::ScopedUnlock::ScopedUnlock(const ScopedLock& scoped_lock)
234
310
  : mutex_(scoped_lock.mutex_) {
@@ -15,6 +15,7 @@
15
15
  class PerProcessTest;
16
16
 
17
17
  namespace node {
18
+ class SnapshotBuilder;
18
19
  namespace native_module {
19
20
 
20
21
  using NativeModuleRecordMap = std::map<std::string, UnionBytes>;
@@ -22,6 +23,11 @@ using NativeModuleCacheMap =
22
23
  std::unordered_map<std::string,
23
24
  std::unique_ptr<v8::ScriptCompiler::CachedData>>;
24
25
 
26
+ struct CodeCacheInfo {
27
+ std::string id;
28
+ std::vector<uint8_t> data;
29
+ };
30
+
25
31
  // The native (C++) side of the NativeModule in JS land, which
26
32
  // handles compilation and caching of builtin modules (NativeModule)
27
33
  // and bootstrappers, whose source are bundled into the binary
@@ -29,7 +35,7 @@ using NativeModuleCacheMap =
29
35
  // This class should not depend on any Environment, or depend on access to
30
36
  // the its own singleton - that should be encapsulated in NativeModuleEnv
31
37
  // instead.
32
- class NativeModuleLoader {
38
+ class NODE_EXTERN_PRIVATE NativeModuleLoader {
33
39
  public:
34
40
  NativeModuleLoader(const NativeModuleLoader&) = delete;
35
41
  NativeModuleLoader& operator=(const NativeModuleLoader&) = delete;
@@ -47,6 +53,8 @@ class NativeModuleLoader {
47
53
  UnionBytes GetConfig(); // Return data for config.gypi
48
54
 
49
55
  bool Exists(const char* id);
56
+ bool Add(const char* id, const UnionBytes& source);
57
+
50
58
  v8::Local<v8::Object> GetSourceObject(v8::Local<v8::Context> context);
51
59
  v8::Local<v8::String> GetConfigString(v8::Isolate* isolate);
52
60
  std::vector<std::string> GetModuleIds();
@@ -64,6 +72,8 @@ class NativeModuleLoader {
64
72
  bool CannotBeRequired(const char* id);
65
73
 
66
74
  NativeModuleCacheMap* code_cache();
75
+ const Mutex& code_cache_mutex() const { return code_cache_mutex_; }
76
+
67
77
  v8::ScriptCompiler::CachedData* GetCodeCache(const char* id) const;
68
78
  enum class Result { kWithCache, kWithoutCache };
69
79
  v8::MaybeLocal<v8::String> LoadBuiltinModuleSource(v8::Isolate* isolate,
@@ -3,17 +3,20 @@
3
3
 
4
4
  #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
5
 
6
+ #include <vector>
6
7
  #include "node_native_module.h"
7
8
 
8
9
  namespace node {
9
10
  class Environment;
10
-
11
+ class ExternalReferenceRegistry;
11
12
  namespace native_module {
12
13
 
13
- extern const bool has_code_cache;
14
-
14
+ // TODO(joyeecheung): since it's safer to make the code cache part of the
15
+ // embedded snapshot, there is no need to separate NativeModuleEnv and
16
+ // NativeModuleLoader. Merge the two.
15
17
  class NativeModuleEnv {
16
18
  public:
19
+ static void RegisterExternalReferences(ExternalReferenceRegistry* registry);
17
20
  static void Initialize(v8::Local<v8::Object> target,
18
21
  v8::Local<v8::Value> unused,
19
22
  v8::Local<v8::Context> context,
@@ -29,12 +32,11 @@ class NativeModuleEnv {
29
32
  // Returns config.gypi as a JSON string
30
33
  static v8::Local<v8::String> GetConfigString(v8::Isolate* isolate);
31
34
  static bool Exists(const char* id);
35
+ static bool Add(const char* id, const UnionBytes& source);
32
36
 
33
- // Loads data into NativeModuleLoader::.instance.code_cache_
34
- // Generated by mkcodecache as node_code_cache.cc when
35
- // the build is configured with --code-cache-path=.... They are noops
36
- // in node_code_cache_stub.cc
37
- static void InitializeCodeCache();
37
+ static bool CompileAllModules(v8::Local<v8::Context> context);
38
+ static void RefreshCodeCache(const std::vector<CodeCacheInfo>& in);
39
+ static void CopyCodeCache(std::vector<CodeCacheInfo>* out);
38
40
 
39
41
  private:
40
42
  static void RecordResult(const char* id,
@@ -54,6 +56,10 @@ class NativeModuleEnv {
54
56
  const v8::PropertyCallbackInfo<v8::Value>& info);
55
57
  // Compile a specific native module as a function
56
58
  static void CompileFunction(const v8::FunctionCallbackInfo<v8::Value>& args);
59
+ static void HasCachedBuiltins(
60
+ const v8::FunctionCallbackInfo<v8::Value>& args);
61
+
62
+ static bool has_code_cache_;
57
63
  };
58
64
 
59
65
  } // namespace native_module
File without changes