@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
@@ -53,19 +53,11 @@ class RefTracker {
53
53
 
54
54
  struct napi_env__ {
55
55
  explicit napi_env__(v8::Local<v8::Context> context)
56
- : isolate(context->GetIsolate()),
57
- context_persistent(isolate, context) {
56
+ : isolate(context->GetIsolate()), context_persistent(isolate, context) {
58
57
  CHECK_EQ(isolate, context->GetIsolate());
58
+ napi_clear_last_error(this);
59
59
  }
60
- virtual ~napi_env__() {
61
- // First we must finalize those references that have `napi_finalizer`
62
- // callbacks. The reason is that addons might store other references which
63
- // they delete during their `napi_finalizer` callbacks. If we deleted such
64
- // references here first, they would be doubly deleted when the
65
- // `napi_finalizer` deleted them subsequently.
66
- v8impl::RefTracker::FinalizeAll(&finalizing_reflist);
67
- v8impl::RefTracker::FinalizeAll(&reflist);
68
- }
60
+ virtual ~napi_env__() { FinalizeAll(); }
69
61
  v8::Isolate* const isolate; // Shortcut for context()->GetIsolate()
70
62
  v8impl::Persistent<v8::Context> context_persistent;
71
63
 
@@ -74,7 +66,9 @@ struct napi_env__ {
74
66
  }
75
67
 
76
68
  inline void Ref() { refs++; }
77
- inline void Unref() { if ( --refs == 0) delete this; }
69
+ inline void Unref() {
70
+ if (--refs == 0) delete this;
71
+ }
78
72
 
79
73
  virtual bool can_call_into_js() const { return true; }
80
74
  virtual v8::Maybe<bool> mark_arraybuffer_as_untransferable(
@@ -82,8 +76,12 @@ struct napi_env__ {
82
76
  return v8::Just(true);
83
77
  }
84
78
 
85
- template <typename T, typename U>
86
- void CallIntoModule(T&& call, U&& handle_exception) {
79
+ static inline void HandleThrow(napi_env env, v8::Local<v8::Value> value) {
80
+ env->isolate->ThrowException(value);
81
+ }
82
+
83
+ template <typename T, typename U = decltype(HandleThrow)>
84
+ inline void CallIntoModule(T&& call, U&& handle_exception = HandleThrow) {
87
85
  int open_handle_scopes_before = open_handle_scopes;
88
86
  int open_callback_scopes_before = open_callback_scopes;
89
87
  napi_clear_last_error(this);
@@ -96,11 +94,21 @@ struct napi_env__ {
96
94
  }
97
95
  }
98
96
 
99
- template <typename T>
100
- void CallIntoModuleThrow(T&& call) {
101
- CallIntoModule(call, [&](napi_env env, v8::Local<v8::Value> value) {
102
- env->isolate->ThrowException(value);
103
- });
97
+ // This should be overridden to schedule the finalization to a properiate
98
+ // timing, like next tick of the event loop.
99
+ virtual void CallFinalizer(napi_finalize cb, void* data, void* hint) {
100
+ v8::HandleScope handle_scope(isolate);
101
+ CallIntoModule([&](napi_env env) { cb(env, data, hint); });
102
+ }
103
+
104
+ void FinalizeAll() {
105
+ // First we must finalize those references that have `napi_finalizer`
106
+ // callbacks. The reason is that addons might store other references which
107
+ // they delete during their `napi_finalizer` callbacks. If we deleted such
108
+ // references here first, they would be doubly deleted when the
109
+ // `napi_finalizer` deleted them subsequently.
110
+ v8impl::RefTracker::FinalizeAll(&finalizing_reflist);
111
+ v8impl::RefTracker::FinalizeAll(&reflist);
104
112
  }
105
113
 
106
114
  v8impl::Persistent<v8::Value> last_exception;
@@ -117,86 +125,143 @@ struct napi_env__ {
117
125
  void* instance_data = nullptr;
118
126
  };
119
127
 
128
+ // This class is used to keep a napi_env live in a way that
129
+ // is exception safe versus calling Ref/Unref directly
130
+ class EnvRefHolder {
131
+ public:
132
+ explicit EnvRefHolder(napi_env env) : _env(env) { _env->Ref(); }
133
+
134
+ explicit EnvRefHolder(const EnvRefHolder& other) : _env(other.env()) {
135
+ _env->Ref();
136
+ }
137
+
138
+ EnvRefHolder(EnvRefHolder&& other) {
139
+ _env = other._env;
140
+ other._env = nullptr;
141
+ }
142
+
143
+ ~EnvRefHolder() {
144
+ if (_env != nullptr) {
145
+ _env->Unref();
146
+ }
147
+ }
148
+
149
+ napi_env env(void) const { return _env; }
150
+
151
+ private:
152
+ napi_env _env;
153
+ };
154
+
120
155
  static inline napi_status napi_clear_last_error(napi_env env) {
121
156
  env->last_error.error_code = napi_ok;
122
157
 
123
158
  // TODO(boingoing): Should this be a callback?
124
159
  env->last_error.engine_error_code = 0;
125
160
  env->last_error.engine_reserved = nullptr;
161
+ env->last_error.error_message = nullptr;
126
162
  return napi_ok;
127
163
  }
128
164
 
129
- static inline
130
- napi_status napi_set_last_error(napi_env env, napi_status error_code,
131
- uint32_t engine_error_code = 0,
132
- void* engine_reserved = nullptr) {
165
+ static inline napi_status napi_set_last_error(napi_env env,
166
+ napi_status error_code,
167
+ uint32_t engine_error_code = 0,
168
+ void* engine_reserved = nullptr) {
133
169
  env->last_error.error_code = error_code;
134
170
  env->last_error.engine_error_code = engine_error_code;
135
171
  env->last_error.engine_reserved = engine_reserved;
136
172
  return error_code;
137
173
  }
138
174
 
139
- #define RETURN_STATUS_IF_FALSE(env, condition, status) \
140
- do { \
141
- if (!(condition)) { \
142
- return napi_set_last_error((env), (status)); \
143
- } \
175
+ #define RETURN_STATUS_IF_FALSE(env, condition, status) \
176
+ do { \
177
+ if (!(condition)) { \
178
+ return napi_set_last_error((env), (status)); \
179
+ } \
180
+ } while (0)
181
+
182
+ #define RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, condition, status) \
183
+ do { \
184
+ if (!(condition)) { \
185
+ return napi_set_last_error( \
186
+ (env), try_catch.HasCaught() ? napi_pending_exception : (status)); \
187
+ } \
144
188
  } while (0)
145
189
 
146
- #define CHECK_ENV(env) \
147
- do { \
148
- if ((env) == nullptr) { \
149
- return napi_invalid_arg; \
150
- } \
190
+ #define CHECK_ENV(env) \
191
+ do { \
192
+ if ((env) == nullptr) { \
193
+ return napi_invalid_arg; \
194
+ } \
151
195
  } while (0)
152
196
 
153
- #define CHECK_ARG(env, arg) \
197
+ #define CHECK_ARG(env, arg) \
154
198
  RETURN_STATUS_IF_FALSE((env), ((arg) != nullptr), napi_invalid_arg)
155
199
 
156
- #define CHECK_MAYBE_EMPTY(env, maybe, status) \
200
+ #define CHECK_ARG_WITH_PREAMBLE(env, arg) \
201
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE( \
202
+ (env), ((arg) != nullptr), napi_invalid_arg)
203
+
204
+ #define CHECK_MAYBE_EMPTY(env, maybe, status) \
157
205
  RETURN_STATUS_IF_FALSE((env), !((maybe).IsEmpty()), (status))
158
206
 
207
+ #define CHECK_MAYBE_EMPTY_WITH_PREAMBLE(env, maybe, status) \
208
+ RETURN_STATUS_IF_FALSE_WITH_PREAMBLE((env), !((maybe).IsEmpty()), (status))
209
+
159
210
  // NAPI_PREAMBLE is not wrapped in do..while: try_catch must have function scope
160
- #define NAPI_PREAMBLE(env) \
161
- CHECK_ENV((env)); \
162
- RETURN_STATUS_IF_FALSE((env), \
163
- (env)->last_exception.IsEmpty() && (env)->can_call_into_js(), \
164
- napi_pending_exception); \
165
- napi_clear_last_error((env)); \
211
+ #define NAPI_PREAMBLE(env) \
212
+ CHECK_ENV((env)); \
213
+ RETURN_STATUS_IF_FALSE( \
214
+ (env), \
215
+ (env)->last_exception.IsEmpty() && (env)->can_call_into_js(), \
216
+ napi_pending_exception); \
217
+ napi_clear_last_error((env)); \
166
218
  v8impl::TryCatch try_catch((env))
167
219
 
168
- #define CHECK_TO_TYPE(env, type, context, result, src, status) \
169
- do { \
170
- CHECK_ARG((env), (src)); \
171
- auto maybe = v8impl::V8LocalValueFromJsValue((src))->To##type((context)); \
172
- CHECK_MAYBE_EMPTY((env), maybe, (status)); \
173
- (result) = maybe.ToLocalChecked(); \
220
+ #define CHECK_TO_TYPE(env, type, context, result, src, status) \
221
+ do { \
222
+ CHECK_ARG((env), (src)); \
223
+ auto maybe = v8impl::V8LocalValueFromJsValue((src))->To##type((context)); \
224
+ CHECK_MAYBE_EMPTY((env), maybe, (status)); \
225
+ (result) = maybe.ToLocalChecked(); \
226
+ } while (0)
227
+
228
+ #define CHECK_TO_TYPE_WITH_PREAMBLE(env, type, context, result, src, status) \
229
+ do { \
230
+ CHECK_ARG_WITH_PREAMBLE((env), (src)); \
231
+ auto maybe = v8impl::V8LocalValueFromJsValue((src))->To##type((context)); \
232
+ CHECK_MAYBE_EMPTY_WITH_PREAMBLE((env), maybe, (status)); \
233
+ (result) = maybe.ToLocalChecked(); \
174
234
  } while (0)
175
235
 
176
- #define CHECK_TO_FUNCTION(env, result, src) \
177
- do { \
178
- CHECK_ARG((env), (src)); \
179
- v8::Local<v8::Value> v8value = v8impl::V8LocalValueFromJsValue((src)); \
180
- RETURN_STATUS_IF_FALSE((env), v8value->IsFunction(), napi_invalid_arg); \
181
- (result) = v8value.As<v8::Function>(); \
236
+ #define CHECK_TO_FUNCTION(env, result, src) \
237
+ do { \
238
+ CHECK_ARG((env), (src)); \
239
+ v8::Local<v8::Value> v8value = v8impl::V8LocalValueFromJsValue((src)); \
240
+ RETURN_STATUS_IF_FALSE((env), v8value->IsFunction(), napi_invalid_arg); \
241
+ (result) = v8value.As<v8::Function>(); \
182
242
  } while (0)
183
243
 
184
- #define CHECK_TO_OBJECT(env, context, result, src) \
244
+ #define CHECK_TO_OBJECT(env, context, result, src) \
185
245
  CHECK_TO_TYPE((env), Object, (context), (result), (src), napi_object_expected)
186
246
 
187
- #define CHECK_TO_STRING(env, context, result, src) \
247
+ #define CHECK_TO_OBJECT_WITH_PREAMBLE(env, context, result, src) \
248
+ CHECK_TO_TYPE_WITH_PREAMBLE( \
249
+ (env), Object, (context), (result), (src), napi_object_expected)
250
+
251
+ #define CHECK_TO_STRING(env, context, result, src) \
188
252
  CHECK_TO_TYPE((env), String, (context), (result), (src), napi_string_expected)
189
253
 
190
- #define GET_RETURN_STATUS(env) \
191
- (!try_catch.HasCaught() ? napi_ok \
192
- : napi_set_last_error((env), napi_pending_exception))
254
+ #define GET_RETURN_STATUS(env) \
255
+ (!try_catch.HasCaught() \
256
+ ? napi_ok \
257
+ : napi_set_last_error((env), napi_pending_exception))
193
258
 
194
- #define THROW_RANGE_ERROR_IF_FALSE(env, condition, error, message) \
195
- do { \
196
- if (!(condition)) { \
197
- napi_throw_range_error((env), (error), (message)); \
198
- return napi_set_last_error((env), napi_generic_failure); \
199
- } \
259
+ #define THROW_RANGE_ERROR_IF_FALSE(env, condition, error, message) \
260
+ do { \
261
+ if (!(condition)) { \
262
+ napi_throw_range_error((env), (error), (message)); \
263
+ return napi_set_last_error((env), napi_generic_failure); \
264
+ } \
200
265
  } while (0)
201
266
 
202
267
  #define RETURN_STATUS_IF_FALSE_WITH_PREAMBLE(env, condition, status) \
@@ -217,7 +282,7 @@ namespace v8impl {
217
282
  // This asserts v8::Local<> will always be implemented with a single
218
283
  // pointer field so that we can pass it around as a void*.
219
284
  static_assert(sizeof(v8::Local<v8::Value>) == sizeof(napi_value),
220
- "Cannot convert between v8::Local<v8::Value> and napi_value");
285
+ "Cannot convert between v8::Local<v8::Value> and napi_value");
221
286
 
222
287
  inline napi_value JsValueFromV8LocalValue(v8::Local<v8::Value> local) {
223
288
  return reinterpret_cast<napi_value>(*local);
@@ -235,10 +300,7 @@ class Finalizer {
235
300
  // Some Finalizers are run during shutdown when the napi_env is destroyed,
236
301
  // and some need to keep an explicit reference to the napi_env because they
237
302
  // are run independently.
238
- enum EnvReferenceMode {
239
- kNoEnvReference,
240
- kKeepEnvReference
241
- };
303
+ enum EnvReferenceMode { kNoEnvReference, kKeepEnvReference };
242
304
 
243
305
  protected:
244
306
  Finalizer(napi_env env,
@@ -246,18 +308,16 @@ class Finalizer {
246
308
  void* finalize_data,
247
309
  void* finalize_hint,
248
310
  EnvReferenceMode refmode = kNoEnvReference)
249
- : _env(env),
250
- _finalize_callback(finalize_callback),
251
- _finalize_data(finalize_data),
252
- _finalize_hint(finalize_hint),
253
- _has_env_reference(refmode == kKeepEnvReference) {
254
- if (_has_env_reference)
255
- _env->Ref();
311
+ : _env(env),
312
+ _finalize_callback(finalize_callback),
313
+ _finalize_data(finalize_data),
314
+ _finalize_hint(finalize_hint),
315
+ _has_env_reference(refmode == kKeepEnvReference) {
316
+ if (_has_env_reference) _env->Ref();
256
317
  }
257
318
 
258
319
  ~Finalizer() {
259
- if (_has_env_reference)
260
- _env->Unref();
320
+ if (_has_env_reference) _env->Unref();
261
321
  }
262
322
 
263
323
  public:
@@ -270,9 +330,7 @@ class Finalizer {
270
330
  env, finalize_callback, finalize_data, finalize_hint, refmode);
271
331
  }
272
332
 
273
- static void Delete(Finalizer* finalizer) {
274
- delete finalizer;
275
- }
333
+ static void Delete(Finalizer* finalizer) { delete finalizer; }
276
334
 
277
335
  protected:
278
336
  napi_env _env;
@@ -285,8 +343,7 @@ class Finalizer {
285
343
 
286
344
  class TryCatch : public v8::TryCatch {
287
345
  public:
288
- explicit TryCatch(napi_env env)
289
- : v8::TryCatch(env->isolate), _env(env) {}
346
+ explicit TryCatch(napi_env env) : v8::TryCatch(env->isolate), _env(env) {}
290
347
 
291
348
  ~TryCatch() {
292
349
  if (HasCaught()) {
@@ -298,6 +355,86 @@ class TryCatch : public v8::TryCatch {
298
355
  napi_env _env;
299
356
  };
300
357
 
358
+ // Wrapper around v8impl::Persistent that implements reference counting.
359
+ class RefBase : protected Finalizer, RefTracker {
360
+ protected:
361
+ RefBase(napi_env env,
362
+ uint32_t initial_refcount,
363
+ bool delete_self,
364
+ napi_finalize finalize_callback,
365
+ void* finalize_data,
366
+ void* finalize_hint);
367
+
368
+ public:
369
+ static RefBase* New(napi_env env,
370
+ uint32_t initial_refcount,
371
+ bool delete_self,
372
+ napi_finalize finalize_callback,
373
+ void* finalize_data,
374
+ void* finalize_hint);
375
+
376
+ static inline void Delete(RefBase* reference);
377
+
378
+ virtual ~RefBase();
379
+ void* Data();
380
+ uint32_t Ref();
381
+ uint32_t Unref();
382
+ uint32_t RefCount();
383
+
384
+ protected:
385
+ void Finalize(bool is_env_teardown = false) override;
386
+
387
+ private:
388
+ uint32_t _refcount;
389
+ bool _delete_self;
390
+ };
391
+
392
+ class Reference : public RefBase {
393
+ using SecondPassCallParameterRef = Reference*;
394
+
395
+ protected:
396
+ template <typename... Args>
397
+ Reference(napi_env env, v8::Local<v8::Value> value, Args&&... args);
398
+
399
+ public:
400
+ static Reference* New(napi_env env,
401
+ v8::Local<v8::Value> value,
402
+ uint32_t initial_refcount,
403
+ bool delete_self,
404
+ napi_finalize finalize_callback = nullptr,
405
+ void* finalize_data = nullptr,
406
+ void* finalize_hint = nullptr);
407
+
408
+ virtual ~Reference();
409
+ uint32_t Ref();
410
+ uint32_t Unref();
411
+ v8::Local<v8::Value> Get();
412
+
413
+ protected:
414
+ void Finalize(bool is_env_teardown = false) override;
415
+
416
+ private:
417
+ void ClearWeak();
418
+ void SetWeak();
419
+
420
+ static void FinalizeCallback(
421
+ const v8::WeakCallbackInfo<SecondPassCallParameterRef>& data);
422
+ static void SecondPassCallback(
423
+ const v8::WeakCallbackInfo<SecondPassCallParameterRef>& data);
424
+
425
+ v8impl::Persistent<v8::Value> _persistent;
426
+ SecondPassCallParameterRef* _secondPassParameter;
427
+ bool _secondPassScheduled;
428
+
429
+ FRIEND_TEST(JsNativeApiV8Test, Reference);
430
+ };
431
+
301
432
  } // end of namespace v8impl
302
433
 
434
+ #define STATUS_CALL(call) \
435
+ do { \
436
+ napi_status status = (call); \
437
+ if (status != napi_ok) return status; \
438
+ } while (0)
439
+
303
440
  #endif // SRC_JS_NATIVE_API_V8_H_
@@ -14,17 +14,18 @@
14
14
  // included below, defines `NAPI_VERSION`.
15
15
 
16
16
  #include "node_version.h"
17
+
17
18
  #include "env.h"
19
+ #include "gtest/gtest_prod.h"
18
20
  #include "node_internals.h"
19
21
 
20
- #define NAPI_ARRAYSIZE(array) \
21
- node::arraysize((array))
22
+ #define NAPI_ARRAYSIZE(array) node::arraysize((array))
22
23
 
23
- #define NAPI_FIXED_ONE_BYTE_STRING(isolate, string) \
24
+ #define NAPI_FIXED_ONE_BYTE_STRING(isolate, string) \
24
25
  node::FIXED_ONE_BYTE_STRING((isolate), (string))
25
26
 
26
- #define NAPI_PRIVATE_KEY(context, suffix) \
27
- (node::Environment::GetCurrent((context))->napi_ ## suffix())
27
+ #define NAPI_PRIVATE_KEY(context, suffix) \
28
+ (node::Environment::GetCurrent((context))->napi_##suffix())
28
29
 
29
30
  namespace v8impl {
30
31
 
File without changes
File without changes
@@ -22,7 +22,7 @@ inline const char* GetNodeName(const char* node_name, const char* edge_name) {
22
22
  class MemoryRetainerNode : public v8::EmbedderGraph::Node {
23
23
  public:
24
24
  inline MemoryRetainerNode(MemoryTracker* tracker,
25
- const MemoryRetainer* retainer)
25
+ const MemoryRetainer* retainer)
26
26
  : retainer_(retainer) {
27
27
  CHECK_NOT_NULL(retainer_);
28
28
  v8::HandleScope handle_scope(tracker->isolate());
@@ -34,9 +34,9 @@ class MemoryRetainerNode : public v8::EmbedderGraph::Node {
34
34
  }
35
35
 
36
36
  inline MemoryRetainerNode(MemoryTracker* tracker,
37
- const char* name,
38
- size_t size,
39
- bool is_root_node = false)
37
+ const char* name,
38
+ size_t size,
39
+ bool is_root_node = false)
40
40
  : retainer_(nullptr) {
41
41
  name_ = name;
42
42
  size_ = size;
@@ -131,7 +131,7 @@ template <typename T, bool kIsWeak>
131
131
  void MemoryTracker::TrackField(const char* edge_name,
132
132
  const BaseObjectPtrImpl<T, kIsWeak>& value,
133
133
  const char* node_name) {
134
- if (value.get() == nullptr) return;
134
+ if (value.get() == nullptr || kIsWeak) return;
135
135
  TrackField(edge_name, value.get(), node_name);
136
136
  }
137
137
 
@@ -214,6 +214,7 @@ template <typename T>
214
214
  void MemoryTracker::TrackField(const char* edge_name,
215
215
  const v8::PersistentBase<T>& value,
216
216
  const char* node_name) {
217
+ if (value.IsWeak()) return;
217
218
  TrackField(edge_name, value.Get(isolate_));
218
219
  }
219
220
 
@@ -216,13 +216,6 @@ class MemoryTracker {
216
216
  inline void TrackField(const char* edge_name,
217
217
  const v8::BackingStore* value,
218
218
  const char* node_name = nullptr);
219
- // We do not implement CleanupHookCallback as MemoryRetainer
220
- // but instead specialize the method here to avoid the cost of
221
- // virtual pointers.
222
- // TODO(joyeecheung): do this for BaseObject and remove WrappedObject()
223
- void TrackField(const char* edge_name,
224
- const CleanupHookCallback& value,
225
- const char* node_name = nullptr);
226
219
  inline void TrackField(const char* edge_name,
227
220
  const uv_buf_t& value,
228
221
  const char* node_name = nullptr);
@@ -12,6 +12,10 @@ namespace node {
12
12
 
13
13
  class Environment;
14
14
 
15
+ namespace contextify {
16
+ class ContextifyContext;
17
+ }
18
+
15
19
  namespace loader {
16
20
 
17
21
  enum ScriptType : int {
@@ -28,6 +32,14 @@ enum HostDefinedOptions : int {
28
32
 
29
33
  class ModuleWrap : public BaseObject {
30
34
  public:
35
+ enum InternalFields {
36
+ kModuleWrapBaseField = BaseObject::kInternalFieldCount,
37
+ kURLSlot,
38
+ kSyntheticEvaluationStepsSlot,
39
+ kContextObjectSlot, // Object whose creation context is the target Context
40
+ kInternalFieldCount
41
+ };
42
+
31
43
  static void Initialize(v8::Local<v8::Object> target,
32
44
  v8::Local<v8::Value> unused,
33
45
  v8::Local<v8::Context> context,
@@ -38,16 +50,22 @@ class ModuleWrap : public BaseObject {
38
50
  v8::Local<v8::Object> meta);
39
51
 
40
52
  void MemoryInfo(MemoryTracker* tracker) const override {
41
- tracker->TrackField("url", url_);
42
53
  tracker->TrackField("resolve_cache", resolve_cache_);
43
54
  }
44
55
 
45
56
  inline uint32_t id() { return id_; }
57
+ v8::Local<v8::Context> context() const;
46
58
  static ModuleWrap* GetFromID(node::Environment*, uint32_t id);
47
59
 
48
60
  SET_MEMORY_INFO_NAME(ModuleWrap)
49
61
  SET_SELF_SIZE(ModuleWrap)
50
62
 
63
+ bool IsNotIndicativeOfMemoryLeakAtExit() const override {
64
+ // XXX: The garbage collection rules for ModuleWrap are *super* unclear.
65
+ // Do these objects ever get GC'd? Are we just okay with leaking them?
66
+ return true;
67
+ }
68
+
51
69
  private:
52
70
  ModuleWrap(Environment* env,
53
71
  v8::Local<v8::Object> object,
@@ -75,19 +93,18 @@ class ModuleWrap : public BaseObject {
75
93
  const v8::FunctionCallbackInfo<v8::Value>& args);
76
94
  static void CreateCachedData(const v8::FunctionCallbackInfo<v8::Value>& args);
77
95
 
78
- static v8::MaybeLocal<v8::Module> ResolveCallback(
96
+ static v8::MaybeLocal<v8::Module> ResolveModuleCallback(
79
97
  v8::Local<v8::Context> context,
80
98
  v8::Local<v8::String> specifier,
99
+ v8::Local<v8::FixedArray> import_assertions,
81
100
  v8::Local<v8::Module> referrer);
82
101
  static ModuleWrap* GetFromModule(node::Environment*, v8::Local<v8::Module>);
83
102
 
84
- v8::Global<v8::Function> synthetic_evaluation_steps_;
85
- bool synthetic_ = false;
86
103
  v8::Global<v8::Module> module_;
87
- v8::Global<v8::String> url_;
88
- bool linked_ = false;
89
104
  std::unordered_map<std::string, v8::Global<v8::Promise>> resolve_cache_;
90
- v8::Global<v8::Context> context_;
105
+ contextify::ContextifyContext* contextify_context_ = nullptr;
106
+ bool synthetic_ = false;
107
+ bool linked_ = false;
91
108
  uint32_t id_;
92
109
  };
93
110