@encharm/cws 4.1.0 → 4.2.0

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