@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
@@ -32,6 +32,16 @@
32
32
  # define NODE_EXTERN __attribute__((visibility("default")))
33
33
  #endif
34
34
 
35
+ // Declarations annotated with NODE_EXTERN_PRIVATE do not form part of
36
+ // the public API. They are implementation details that can and will
37
+ // change between releases, even in semver patch releases. Do not use
38
+ // any such symbol in external code.
39
+ #ifdef NODE_SHARED_MODE
40
+ #define NODE_EXTERN_PRIVATE NODE_EXTERN
41
+ #else
42
+ #define NODE_EXTERN_PRIVATE
43
+ #endif
44
+
35
45
  #ifdef BUILDING_NODE_EXTENSION
36
46
  # undef BUILDING_V8_SHARED
37
47
  # undef BUILDING_UV_SHARED
@@ -60,19 +70,13 @@
60
70
  # define SIGKILL 9
61
71
  #endif
62
72
 
63
- #if (__GNUC__ >= 8) && !defined(__clang__)
64
- #pragma GCC diagnostic push
65
- #pragma GCC diagnostic ignored "-Wcast-function-type"
66
- #endif
67
73
  #include "v8.h" // NOLINT(build/include_order)
68
- #if (__GNUC__ >= 8) && !defined(__clang__)
69
- #pragma GCC diagnostic pop
70
- #endif
71
74
 
72
75
  #include "v8-platform.h" // NOLINT(build/include_order)
73
76
  #include "node_version.h" // NODE_MODULE_VERSION
74
77
 
75
78
  #include <memory>
79
+ #include <functional>
76
80
 
77
81
  // We cannot use __POSIX__ in this header because that's only defined when
78
82
  // building Node.js.
@@ -116,6 +120,8 @@
116
120
  // Forward-declare libuv loop
117
121
  struct uv_loop_s;
118
122
 
123
+ struct napi_module;
124
+
119
125
  // Forward-declare these functions now to stop MSVS from becoming
120
126
  // terminally confused when it's done in node_internals.h
121
127
  namespace node {
@@ -218,6 +224,20 @@ namespace node {
218
224
  class IsolateData;
219
225
  class Environment;
220
226
 
227
+ namespace ProcessFlags {
228
+ enum Flags : uint64_t {
229
+ kNoFlags = 0,
230
+ // Enable stdio inheritance, which is disabled by default.
231
+ kEnableStdioInheritance = 1 << 0,
232
+ // Disable reading the NODE_OPTIONS environment variable.
233
+ kDisableNodeOptionsEnv = 1 << 1,
234
+ // Do not parse CLI options.
235
+ kDisableCLIOptions = 1 << 2,
236
+ // Do not initialize ICU.
237
+ kNoICU = 1 << 3,
238
+ };
239
+ } // namespace ProcessFlags
240
+
221
241
  // TODO(addaleax): Officially deprecate this and replace it with something
222
242
  // better suited for a public embedder API.
223
243
  NODE_EXTERN int Start(int argc, char* argv[]);
@@ -226,12 +246,20 @@ NODE_EXTERN int Start(int argc, char* argv[]);
226
246
  // in the loop and / or actively executing JavaScript code).
227
247
  NODE_EXTERN int Stop(Environment* env);
228
248
 
229
- // TODO(addaleax): Officially deprecate this and replace it with something
230
- // better suited for a public embedder API.
231
- NODE_EXTERN void Init(int* argc,
232
- const char** argv,
233
- int* exec_argc,
234
- const char*** exec_argv);
249
+ // Set up per-process state needed to run Node.js. This will consume arguments
250
+ // from argv, fill exec_argv, and possibly add errors resulting from parsing
251
+ // the arguments to `errors`. The return value is a suggested exit code for the
252
+ // program; If it is 0, then initializing Node.js succeeded.
253
+ NODE_EXTERN int InitializeNodeWithArgs(
254
+ std::vector<std::string>* argv,
255
+ std::vector<std::string>* exec_argv,
256
+ std::vector<std::string>* errors);
257
+ // TODO(zcbenz): Turn above overloaded version into below's default argument.
258
+ NODE_EXTERN int InitializeNodeWithArgs(
259
+ std::vector<std::string>* argv,
260
+ std::vector<std::string>* exec_argv,
261
+ std::vector<std::string>* errors,
262
+ ProcessFlags::Flags flags);
235
263
 
236
264
  enum OptionEnvvarSettings {
237
265
  kAllowedInEnvironment,
@@ -270,6 +298,12 @@ class NODE_EXTERN ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
270
298
  NODE_EXTERN ArrayBufferAllocator* CreateArrayBufferAllocator();
271
299
  NODE_EXTERN void FreeArrayBufferAllocator(ArrayBufferAllocator* allocator);
272
300
 
301
+ class NODE_EXTERN IsolatePlatformDelegate {
302
+ public:
303
+ virtual std::shared_ptr<v8::TaskRunner> GetForegroundTaskRunner() = 0;
304
+ virtual bool IdleTasksEnabled() = 0;
305
+ };
306
+
273
307
  class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
274
308
  public:
275
309
  ~MultiIsolatePlatform() override = default;
@@ -279,11 +313,6 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
279
313
  virtual bool FlushForegroundTasks(v8::Isolate* isolate) = 0;
280
314
  virtual void DrainTasks(v8::Isolate* isolate) = 0;
281
315
 
282
- // TODO(addaleax): Remove this, it is unnecessary.
283
- // This would currently be called before `UnregisterIsolate()` but will be
284
- // folded into it in the future.
285
- virtual void CancelPendingDelayedTasks(v8::Isolate* isolate);
286
-
287
316
  // This needs to be called between the calls to `Isolate::Allocate()` and
288
317
  // `Isolate::Initialize()`, so that initialization can already start
289
318
  // using the platform.
@@ -291,6 +320,12 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
291
320
  // This function may only be called once per `Isolate`.
292
321
  virtual void RegisterIsolate(v8::Isolate* isolate,
293
322
  struct uv_loop_s* loop) = 0;
323
+ // This method can be used when an application handles task scheduling on its
324
+ // own through `IsolatePlatformDelegate`. Upon registering an isolate with
325
+ // this overload any other method in this class with the exception of
326
+ // `UnregisterIsolate` *must not* be used on that isolate.
327
+ virtual void RegisterIsolate(v8::Isolate* isolate,
328
+ IsolatePlatformDelegate* delegate) = 0;
294
329
 
295
330
  // This function may only be called once per `Isolate`, and discard any
296
331
  // pending delayed tasks scheduled for that isolate.
@@ -303,11 +338,18 @@ class NODE_EXTERN MultiIsolatePlatform : public v8::Platform {
303
338
  virtual void AddIsolateFinishedCallback(v8::Isolate* isolate,
304
339
  void (*callback)(void*),
305
340
  void* data) = 0;
341
+
342
+ static std::unique_ptr<MultiIsolatePlatform> Create(
343
+ int thread_pool_size,
344
+ v8::TracingController* tracing_controller = nullptr,
345
+ v8::PageAllocator* page_allocator = nullptr);
306
346
  };
307
347
 
308
348
  enum IsolateSettingsFlags {
309
349
  MESSAGE_LISTENER_WITH_ERROR_LEVEL = 1 << 0,
310
- DETAILED_SOURCE_POSITIONS_FOR_PROFILING = 1 << 1
350
+ DETAILED_SOURCE_POSITIONS_FOR_PROFILING = 1 << 1,
351
+ SHOULD_NOT_SET_PROMISE_REJECTION_CALLBACK = 1 << 2,
352
+ SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK = 1 << 3
311
353
  };
312
354
 
313
355
  struct IsolateSettings {
@@ -325,8 +367,6 @@ struct IsolateSettings {
325
367
  v8::PromiseRejectCallback promise_reject_callback = nullptr;
326
368
  v8::AllowWasmCodeGenerationCallback
327
369
  allow_wasm_code_generation_callback = nullptr;
328
- v8::HostCleanupFinalizationGroupCallback
329
- host_cleanup_finalization_group_callback = nullptr;
330
370
  };
331
371
 
332
372
  // Overriding IsolateSettings may produce unexpected behavior
@@ -342,11 +382,9 @@ NODE_EXTERN void SetIsolateUpForNode(v8::Isolate* isolate);
342
382
  // This is a convenience method equivalent to using SetIsolateCreateParams(),
343
383
  // Isolate::Allocate(), MultiIsolatePlatform::RegisterIsolate(),
344
384
  // Isolate::Initialize(), and SetIsolateUpForNode().
345
- NODE_EXTERN v8::Isolate* NewIsolate(ArrayBufferAllocator* allocator,
346
- struct uv_loop_s* event_loop);
347
385
  NODE_EXTERN v8::Isolate* NewIsolate(ArrayBufferAllocator* allocator,
348
386
  struct uv_loop_s* event_loop,
349
- MultiIsolatePlatform* platform);
387
+ MultiIsolatePlatform* platform = nullptr);
350
388
  NODE_EXTERN v8::Isolate* NewIsolate(
351
389
  std::shared_ptr<ArrayBufferAllocator> allocator,
352
390
  struct uv_loop_s* event_loop,
@@ -360,7 +398,7 @@ NODE_EXTERN v8::Local<v8::Context> NewContext(
360
398
 
361
399
  // Runs Node.js-specific tweaks on an already constructed context
362
400
  // Return value indicates success of operation
363
- NODE_EXTERN bool InitializeContext(v8::Local<v8::Context> context);
401
+ NODE_EXTERN v8::Maybe<bool> InitializeContext(v8::Local<v8::Context> context);
364
402
 
365
403
  // If `platform` is passed, it will be used to register new Worker instances.
366
404
  // It can be `nullptr`, in which case creating new Workers inside of
@@ -372,41 +410,234 @@ NODE_EXTERN IsolateData* CreateIsolateData(
372
410
  ArrayBufferAllocator* allocator = nullptr);
373
411
  NODE_EXTERN void FreeIsolateData(IsolateData* isolate_data);
374
412
 
375
- // TODO(addaleax): Add an official variant using STL containers, and move
376
- // per-Environment options parsing here.
413
+ struct ThreadId {
414
+ uint64_t id = static_cast<uint64_t>(-1);
415
+ };
416
+ NODE_EXTERN ThreadId AllocateEnvironmentThreadId();
417
+
418
+ namespace EnvironmentFlags {
419
+ enum Flags : uint64_t {
420
+ kNoFlags = 0,
421
+ // Use the default behaviour for Node.js instances.
422
+ kDefaultFlags = 1 << 0,
423
+ // Controls whether this Environment is allowed to affect per-process state
424
+ // (e.g. cwd, process title, uid, etc.).
425
+ // This is set when using kDefaultFlags.
426
+ kOwnsProcessState = 1 << 1,
427
+ // Set if this Environment instance is associated with the global inspector
428
+ // handling code (i.e. listening on SIGUSR1).
429
+ // This is set when using kDefaultFlags.
430
+ kOwnsInspector = 1 << 2,
431
+ // Set if Node.js should not run its own esm loader. This is needed by some
432
+ // embedders, because it's possible for the Node.js esm loader to conflict
433
+ // with another one in an embedder environment, e.g. Blink's in Chromium.
434
+ kNoRegisterESMLoader = 1 << 3,
435
+ // Set this flag to make Node.js track "raw" file descriptors, i.e. managed
436
+ // by fs.open() and fs.close(), and close them during FreeEnvironment().
437
+ kTrackUnmanagedFds = 1 << 4,
438
+ // Set this flag to force hiding console windows when spawning child
439
+ // processes. This is usually used when embedding Node.js in GUI programs on
440
+ // Windows.
441
+ kHideConsoleWindows = 1 << 5,
442
+ // Set this flag to disable loading native addons via `process.dlopen`.
443
+ // This environment flag is especially important for worker threads
444
+ // so that a worker thread can't load a native addon even if `execArgv`
445
+ // is overwritten and `--no-addons` is not specified but was specified
446
+ // for this Environment instance.
447
+ kNoNativeAddons = 1 << 6,
448
+ // Set this flag to disable searching modules from global paths like
449
+ // $HOME/.node_modules and $NODE_PATH. This is used by standalone apps that
450
+ // do not expect to have their behaviors changed because of globally
451
+ // installed modules.
452
+ kNoGlobalSearchPaths = 1 << 7,
453
+ // Do not export browser globals like setTimeout, console, etc.
454
+ kNoBrowserGlobals = 1 << 8,
455
+ // Controls whether or not the Environment should call V8Inspector::create().
456
+ // This control is needed by embedders who may not want to initialize the V8
457
+ // inspector in situations where one has already been created,
458
+ // e.g. Blink's in Chromium.
459
+ kNoCreateInspector = 1 << 9
460
+ };
461
+ } // namespace EnvironmentFlags
462
+
463
+ struct InspectorParentHandle {
464
+ virtual ~InspectorParentHandle();
465
+ };
466
+
467
+ // TODO(addaleax): Maybe move per-Environment options parsing here.
377
468
  // Returns nullptr when the Environment cannot be created e.g. there are
378
469
  // pending JavaScript exceptions.
379
- NODE_EXTERN Environment* CreateEnvironment(IsolateData* isolate_data,
380
- v8::Local<v8::Context> context,
381
- int argc,
382
- const char* const* argv,
383
- int exec_argc,
384
- const char* const* exec_argv);
385
-
386
- NODE_EXTERN void LoadEnvironment(Environment* env);
387
- NODE_EXTERN void FreeEnvironment(Environment* env);
470
+ NODE_EXTERN Environment* CreateEnvironment(
471
+ IsolateData* isolate_data,
472
+ v8::Local<v8::Context> context,
473
+ const std::vector<std::string>& args,
474
+ const std::vector<std::string>& exec_args,
475
+ EnvironmentFlags::Flags flags = EnvironmentFlags::kDefaultFlags,
476
+ ThreadId thread_id = {} /* allocates a thread id automatically */,
477
+ std::unique_ptr<InspectorParentHandle> inspector_parent_handle = {});
478
+
479
+ // Returns a handle that can be passed to `LoadEnvironment()`, making the
480
+ // child Environment accessible to the inspector as if it were a Node.js Worker.
481
+ // `child_thread_id` can be created using `AllocateEnvironmentThreadId()`
482
+ // and then later passed on to `CreateEnvironment()` to create the child
483
+ // Environment, together with the inspector handle.
484
+ // This method should not be called while the parent Environment is active
485
+ // on another thread.
486
+ NODE_EXTERN std::unique_ptr<InspectorParentHandle> GetInspectorParentHandle(
487
+ Environment* parent_env,
488
+ ThreadId child_thread_id,
489
+ const char* child_url);
490
+
491
+ struct StartExecutionCallbackInfo {
492
+ v8::Local<v8::Object> process_object;
493
+ v8::Local<v8::Function> native_require;
494
+ };
388
495
 
389
- // This may return nullptr if context is not associated with a Node instance.
390
- NODE_EXTERN Environment* GetCurrentEnvironment(v8::Local<v8::Context> context);
496
+ using StartExecutionCallback =
497
+ std::function<v8::MaybeLocal<v8::Value>(const StartExecutionCallbackInfo&)>;
391
498
 
392
- // This returns the MultiIsolatePlatform used in the main thread of Node.js.
393
- // If NODE_USE_V8_PLATFORM haven't been defined when Node.js was built,
394
- // it returns nullptr.
395
- NODE_EXTERN MultiIsolatePlatform* GetMainThreadMultiIsolatePlatform();
499
+ NODE_EXTERN v8::MaybeLocal<v8::Value> LoadEnvironment(
500
+ Environment* env,
501
+ StartExecutionCallback cb);
502
+ NODE_EXTERN v8::MaybeLocal<v8::Value> LoadEnvironment(
503
+ Environment* env,
504
+ const char* main_script_source_utf8);
505
+ NODE_EXTERN void FreeEnvironment(Environment* env);
396
506
 
397
- NODE_EXTERN MultiIsolatePlatform* CreatePlatform(
398
- int thread_pool_size,
399
- node::tracing::TracingController* tracing_controller);
400
- NODE_EXTERN void FreePlatform(MultiIsolatePlatform* platform);
507
+ // Set a callback that is called when process.exit() is called from JS,
508
+ // overriding the default handler.
509
+ // It receives the Environment* instance and the exit code as arguments.
510
+ // This could e.g. call Stop(env); in order to terminate execution and stop
511
+ // the event loop.
512
+ // The default handler disposes of the global V8 platform instance, if one is
513
+ // being used, and calls exit().
514
+ NODE_EXTERN void SetProcessExitHandler(
515
+ Environment* env,
516
+ std::function<void(Environment*, int)>&& handler);
517
+ NODE_EXTERN void DefaultProcessExitHandler(Environment* env, int exit_code);
401
518
 
402
- NODE_EXTERN void EmitBeforeExit(Environment* env);
403
- NODE_EXTERN int EmitExit(Environment* env);
519
+ // This may return nullptr if context is not associated with a Node instance.
520
+ NODE_EXTERN Environment* GetCurrentEnvironment(v8::Local<v8::Context> context);
521
+ NODE_EXTERN IsolateData* GetEnvironmentIsolateData(Environment* env);
522
+ NODE_EXTERN ArrayBufferAllocator* GetArrayBufferAllocator(IsolateData* data);
523
+
524
+ NODE_EXTERN void OnFatalError(const char* location, const char* message);
525
+ NODE_EXTERN void PromiseRejectCallback(v8::PromiseRejectMessage message);
526
+ NODE_EXTERN bool AllowWasmCodeGenerationCallback(v8::Local<v8::Context> context,
527
+ v8::Local<v8::String>);
528
+ NODE_EXTERN bool ShouldAbortOnUncaughtException(v8::Isolate* isolate);
529
+ NODE_EXTERN v8::MaybeLocal<v8::Value> PrepareStackTraceCallback(
530
+ v8::Local<v8::Context> context,
531
+ v8::Local<v8::Value> exception,
532
+ v8::Local<v8::Array> trace);
533
+
534
+ // This returns the MultiIsolatePlatform used for an Environment or IsolateData
535
+ // instance, if one exists.
536
+ NODE_EXTERN MultiIsolatePlatform* GetMultiIsolatePlatform(Environment* env);
537
+ NODE_EXTERN MultiIsolatePlatform* GetMultiIsolatePlatform(IsolateData* env);
538
+
539
+ NODE_DEPRECATED("Use MultiIsolatePlatform::Create() instead",
540
+ NODE_EXTERN MultiIsolatePlatform* CreatePlatform(
541
+ int thread_pool_size,
542
+ v8::TracingController* tracing_controller));
543
+ NODE_DEPRECATED("Use MultiIsolatePlatform::Create() instead",
544
+ NODE_EXTERN void FreePlatform(MultiIsolatePlatform* platform));
545
+
546
+ // Get/set the currently active tracing controller. Using CreatePlatform()
547
+ // will implicitly set this by default. This is global and should be initialized
548
+ // along with the v8::Platform instance that is being used. `controller`
549
+ // is allowed to be `nullptr`.
550
+ // This is used for tracing events from Node.js itself. V8 uses the tracing
551
+ // controller returned from the active `v8::Platform` instance.
552
+ NODE_EXTERN v8::TracingController* GetTracingController();
553
+ NODE_EXTERN void SetTracingController(v8::TracingController* controller);
554
+
555
+ // Run `process.emit('beforeExit')` as it would usually happen when Node.js is
556
+ // run in standalone mode.
557
+ NODE_EXTERN v8::Maybe<bool> EmitProcessBeforeExit(Environment* env);
558
+ NODE_DEPRECATED("Use Maybe version (EmitProcessBeforeExit) instead",
559
+ NODE_EXTERN void EmitBeforeExit(Environment* env));
560
+ // Run `process.emit('exit')` as it would usually happen when Node.js is run
561
+ // in standalone mode. The return value corresponds to the exit code.
562
+ NODE_EXTERN v8::Maybe<int> EmitProcessExit(Environment* env);
563
+ NODE_DEPRECATED("Use Maybe version (EmitProcessExit) instead",
564
+ NODE_EXTERN int EmitExit(Environment* env));
565
+
566
+ // Runs hooks added through `AtExit()`. This is part of `FreeEnvironment()`,
567
+ // so calling it manually is typically not necessary.
404
568
  NODE_EXTERN void RunAtExit(Environment* env);
405
569
 
406
570
  // This may return nullptr if the current v8::Context is not associated
407
571
  // with a Node instance.
408
572
  NODE_EXTERN struct uv_loop_s* GetCurrentEventLoop(v8::Isolate* isolate);
409
573
 
574
+ // Runs the main loop for a given Environment. This roughly performs the
575
+ // following steps:
576
+ // 1. Call uv_run() on the event loop until it is drained.
577
+ // 2. Call platform->DrainTasks() on the associated platform/isolate.
578
+ // 3. If the event loop is alive again, go to Step 1.
579
+ // 4. Call EmitProcessBeforeExit().
580
+ // 5. If the event loop is alive again, go to Step 1.
581
+ // 6. Call EmitProcessExit() and forward the return value.
582
+ // If at any point node::Stop() is called, the function will attempt to return
583
+ // as soon as possible, returning an empty `Maybe`.
584
+ // This function only works if `env` has an associated `MultiIsolatePlatform`.
585
+ NODE_EXTERN v8::Maybe<int> SpinEventLoop(Environment* env);
586
+
587
+ class NODE_EXTERN CommonEnvironmentSetup {
588
+ public:
589
+ ~CommonEnvironmentSetup();
590
+
591
+ // Create a new CommonEnvironmentSetup, that is, a group of objects that
592
+ // together form the typical setup for a single Node.js Environment instance.
593
+ // If any error occurs, `*errors` will be populated and the returned pointer
594
+ // will be empty.
595
+ // env_args will be passed through as arguments to CreateEnvironment(), after
596
+ // `isolate_data` and `context`.
597
+ template <typename... EnvironmentArgs>
598
+ static std::unique_ptr<CommonEnvironmentSetup> Create(
599
+ MultiIsolatePlatform* platform,
600
+ std::vector<std::string>* errors,
601
+ EnvironmentArgs&&... env_args);
602
+
603
+ struct uv_loop_s* event_loop() const;
604
+ std::shared_ptr<ArrayBufferAllocator> array_buffer_allocator() const;
605
+ v8::Isolate* isolate() const;
606
+ IsolateData* isolate_data() const;
607
+ Environment* env() const;
608
+ v8::Local<v8::Context> context() const;
609
+
610
+ CommonEnvironmentSetup(const CommonEnvironmentSetup&) = delete;
611
+ CommonEnvironmentSetup& operator=(const CommonEnvironmentSetup&) = delete;
612
+ CommonEnvironmentSetup(CommonEnvironmentSetup&&) = delete;
613
+ CommonEnvironmentSetup& operator=(CommonEnvironmentSetup&&) = delete;
614
+
615
+ private:
616
+ struct Impl;
617
+ Impl* impl_;
618
+ CommonEnvironmentSetup(
619
+ MultiIsolatePlatform*,
620
+ std::vector<std::string>*,
621
+ std::function<Environment*(const CommonEnvironmentSetup*)>);
622
+ };
623
+
624
+ // Implementation for CommonEnvironmentSetup::Create
625
+ template <typename... EnvironmentArgs>
626
+ std::unique_ptr<CommonEnvironmentSetup> CommonEnvironmentSetup::Create(
627
+ MultiIsolatePlatform* platform,
628
+ std::vector<std::string>* errors,
629
+ EnvironmentArgs&&... env_args) {
630
+ auto ret = std::unique_ptr<CommonEnvironmentSetup>(new CommonEnvironmentSetup(
631
+ platform, errors,
632
+ [&](const CommonEnvironmentSetup* setup) -> Environment* {
633
+ return CreateEnvironment(
634
+ setup->isolate_data(), setup->context(),
635
+ std::forward<EnvironmentArgs>(env_args)...);
636
+ }));
637
+ if (!errors->empty()) ret.reset();
638
+ return ret;
639
+ }
640
+
410
641
  /* Converts a unixtime to V8 Date */
411
642
  NODE_DEPRECATED("Use v8::Date::New() directly",
412
643
  inline v8::Local<v8::Value> NODE_UNIXTIME_V8(double time) {
@@ -510,7 +741,18 @@ inline void NODE_SET_PROTOTYPE_METHOD(v8::Local<v8::FunctionTemplate> recv,
510
741
  #define NODE_SET_PROTOTYPE_METHOD node::NODE_SET_PROTOTYPE_METHOD
511
742
 
512
743
  // BINARY is a deprecated alias of LATIN1.
513
- enum encoding {ASCII, UTF8, BASE64, UCS2, BINARY, HEX, BUFFER, LATIN1 = BINARY};
744
+ // BASE64URL is not currently exposed to the JavaScript side.
745
+ enum encoding {
746
+ ASCII,
747
+ UTF8,
748
+ BASE64,
749
+ UCS2,
750
+ BINARY,
751
+ HEX,
752
+ BUFFER,
753
+ BASE64URL,
754
+ LATIN1 = BINARY
755
+ };
514
756
 
515
757
  NODE_EXTERN enum encoding ParseEncoding(
516
758
  v8::Isolate* isolate,
@@ -595,11 +837,13 @@ extern "C" NODE_EXTERN void node_module_register(void* mod);
595
837
  #endif
596
838
 
597
839
  #if defined(_MSC_VER)
598
- #pragma section(".CRT$XCU", read)
599
840
  #define NODE_C_CTOR(fn) \
600
841
  NODE_CTOR_PREFIX void __cdecl fn(void); \
601
- __declspec(dllexport, allocate(".CRT$XCU")) \
602
- void (__cdecl*fn ## _)(void) = fn; \
842
+ namespace { \
843
+ struct fn##_ { \
844
+ fn##_() { fn(); }; \
845
+ } fn##_v_; \
846
+ } \
603
847
  NODE_CTOR_PREFIX void __cdecl fn(void)
604
848
  #else
605
849
  #define NODE_C_CTOR(fn) \
@@ -696,21 +940,13 @@ extern "C" NODE_EXTERN void node_module_register(void* mod);
696
940
  // In each variant, the registration function needs to be usable at least for
697
941
  // the time during which the Environment exists.
698
942
  NODE_EXTERN void AddLinkedBinding(Environment* env, const node_module& mod);
943
+ NODE_EXTERN void AddLinkedBinding(Environment* env,
944
+ const struct napi_module& mod);
699
945
  NODE_EXTERN void AddLinkedBinding(Environment* env,
700
946
  const char* name,
701
947
  addon_context_register_func fn,
702
948
  void* priv);
703
949
 
704
- /* Called after the event loop exits but before the VM is disposed.
705
- * Callbacks are run in reverse order of registration, i.e. newest first.
706
- *
707
- * You should always use the three-argument variant (or, for addons,
708
- * AddEnvironmentCleanupHook) in order to avoid relying on global state.
709
- */
710
- NODE_DEPRECATED(
711
- "Use the three-argument variant of AtExit() or AddEnvironmentCleanupHook()",
712
- NODE_EXTERN void AtExit(void (*cb)(void* arg), void* arg = nullptr));
713
-
714
950
  /* Registers a callback with the passed-in Environment instance. The callback
715
951
  * is called after the event loop exits, but before the VM is disposed.
716
952
  * Callbacks are run in reverse order of registration, i.e. newest first.
@@ -718,12 +954,6 @@ NODE_DEPRECATED(
718
954
  NODE_EXTERN void AtExit(Environment* env,
719
955
  void (*cb)(void* arg),
720
956
  void* arg);
721
- NODE_DEPRECATED(
722
- "Use the three-argument variant of AtExit() or AddEnvironmentCleanupHook()",
723
- inline void AtExit(Environment* env,
724
- void (*cb)(void* arg)) {
725
- AtExit(env, cb, nullptr);
726
- })
727
957
 
728
958
  typedef double async_id;
729
959
  struct async_context {
@@ -744,6 +974,34 @@ NODE_EXTERN void RemoveEnvironmentCleanupHook(v8::Isolate* isolate,
744
974
  void (*fun)(void* arg),
745
975
  void* arg);
746
976
 
977
+ /* These are async equivalents of the above. After the cleanup hook is invoked,
978
+ * `cb(cbarg)` *must* be called, and attempting to remove the cleanup hook will
979
+ * have no effect. */
980
+ struct ACHHandle;
981
+ struct NODE_EXTERN DeleteACHHandle { void operator()(ACHHandle*) const; };
982
+ typedef std::unique_ptr<ACHHandle, DeleteACHHandle> AsyncCleanupHookHandle;
983
+
984
+ /* This function is not intended to be used externally, it exists to aid in
985
+ * keeping ABI compatibility between Node and Electron. */
986
+ NODE_EXTERN ACHHandle* AddEnvironmentCleanupHookInternal(
987
+ v8::Isolate* isolate,
988
+ void (*fun)(void* arg, void (*cb)(void*), void* cbarg),
989
+ void* arg);
990
+ inline AsyncCleanupHookHandle AddEnvironmentCleanupHook(
991
+ v8::Isolate* isolate,
992
+ void (*fun)(void* arg, void (*cb)(void*), void* cbarg),
993
+ void* arg) {
994
+ return AsyncCleanupHookHandle(AddEnvironmentCleanupHookInternal(isolate, fun,
995
+ arg));
996
+ }
997
+
998
+ /* This function is not intended to be used externally, it exists to aid in
999
+ * keeping ABI compatibility between Node and Electron. */
1000
+ NODE_EXTERN void RemoveEnvironmentCleanupHookInternal(ACHHandle* holder);
1001
+ inline void RemoveEnvironmentCleanupHook(AsyncCleanupHookHandle holder) {
1002
+ RemoveEnvironmentCleanupHookInternal(holder.get());
1003
+ }
1004
+
747
1005
  /* Returns the id of the current execution context. If the return value is
748
1006
  * zero then no execution has been set. This will happen if the user handles
749
1007
  * I/O from native code. */
@@ -802,6 +1060,9 @@ class NODE_EXTERN CallbackScope {
802
1060
  CallbackScope(v8::Isolate* isolate,
803
1061
  v8::Local<v8::Object> resource,
804
1062
  async_context asyncContext);
1063
+ CallbackScope(Environment* env,
1064
+ v8::Local<v8::Object> resource,
1065
+ async_context asyncContext);
805
1066
  ~CallbackScope();
806
1067
 
807
1068
  void operator=(const CallbackScope&) = delete;