@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
package/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## Released 4.1.0
2
+ * Add support for socket.bufferedAmount
3
+
1
4
  ## Released 4.0.2
2
5
  * Add support for Node 16
3
6
 
package/LICENSE CHANGED
@@ -1,11 +1,12 @@
1
- This software is based on uWebSockets 0.14 which has ZLIB license
1
+ This software is based on ClusterWS/cWS and before on uWebSockets 0.14 which has ZLIB license
2
2
  make sure to check /src/LICENSE.
3
3
 
4
- For the code provided by cWS:
4
+ For the code provided by cWS (ClusterWS) as well as later by Code Charm:
5
5
 
6
6
  MIT License
7
7
 
8
8
  Copyright (c) 2018 cWS
9
+ 2021 Code Charm
9
10
 
10
11
  Permission is hereby granted, free of charge, to any person obtaining a copy
11
12
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  * **Consider using latest version of uWebSockets if you do not need compatibility with ws or a multi-process architecture.**
7
7
 
8
8
  * This repository is a fork of [ClusterWS/cWS](https://github.com/ClusterWS/cWS)
9
- * Prior, this repository was a fork of [uWebSockets v0.14](https://github.com/uNetworking/uWebSockets/tree/v0.14) therefore has two licence [MIT](https://github.com/ClusterWS/uWS/blob/master/LICENSE) and [ZLIB](https://github.com/ClusterWS/uWS/blob/master/src/LICENSE)
9
+ * Prior, this repository was a fork of [uWebSockets v0.14](https://github.com/uNetworking/uWebSockets/tree/v0.14) therefore has two licence [MIT](https://github.com/encharm/cWS/blob/master/LICENSE) and [ZLIB](https://github.com/encharm/cWS/blob/master/src/LICENSE)
10
10
 
11
11
  ## Supported Node Versions (SSL)
12
12
 
@@ -14,7 +14,8 @@ This table is true if you run ssl directly with `cws` (`Node.js`). In case if yo
14
14
 
15
15
  | CWS Version | Node 10 | Node 11 | Node 12 | Node 13 | Node 14 | Node 16 |
16
16
  |--------------|----------|---------|------------------|-----------|---------|----------|
17
- | 4.0.0 | >=10.0 | X | >=12.16 | >=13.9 | >=14.5 | >= 16.11 |
17
+ | 4.x.x | >=10.0 | X | >=12.16 | >=13.9 | >=14.5 | >= 16.11 |
18
+ | *The versions below are available via @clusterws/cws* |
18
19
  | 3.0.0 | >=10.0 | X | >=12.16 | >=13.9 | >=14.5 | X |
19
20
  | 2.0.0 | >=10.0 | X | >=12.16 | >=13.9 | X | X |
20
21
  | 1.6.0 | >=10.0 | >=11.0 | >=12.0 & <12.16 | >=13.9 | X | X |
@@ -136,6 +137,12 @@ if(socket.readyState === socket.OPEN) {}
136
137
  if(socket.readyState === socket.CLOSED) {}
137
138
  ```
138
139
 
140
+ To find out number of buffered (and not yet sent) bytes:
141
+ ```js
142
+ socket.bufferedAmount;
143
+ // useful for implementing back-pressure
144
+ ```
145
+
139
146
  To get addresses use `_socket` getter:
140
147
  ```js
141
148
  socket._socket;
package/binding.gyp CHANGED
@@ -64,7 +64,7 @@
64
64
  'outputs': [
65
65
  'cws'
66
66
  ],
67
- 'action': ['cp', '<@(PRODUCT_DIR)/cws.node', 'dist/bindings/cws_<!@(node -p process.platform)_<!@(node -p process.versions.modules).node']
67
+ 'action': ['cp', '<@(PRODUCT_DIR)/cws.node', 'dist/bindings/cws_<!@(node -p process.platform)_<!@(node -p process.arch)_node<!@(node -p process.versions.modules).node']
68
68
  }
69
69
  ]}
70
70
  ],
@@ -78,7 +78,7 @@
78
78
  'outputs': [
79
79
  'cws'
80
80
  ],
81
- 'action': ['copy', '<@(PRODUCT_DIR)/cws.node', 'dist/bindings/cws_<!@(node -p process.platform)_<!@(node -p process.versions.modules).node']
81
+ 'action': ['copy', '<@(PRODUCT_DIR)/cws.node', 'cws_<!@(node -p process.platform)_<!@(node -p process.arch)_node<!@(node -p process.versions.modules).node']
82
82
  }
83
83
  ]}
84
84
  ]
package/dist/client.d.ts CHANGED
@@ -13,6 +13,7 @@ export declare class WebSocket {
13
13
  private external;
14
14
  private socketType;
15
15
  constructor(url: string, options?: any);
16
+ get bufferedAmount(): number;
16
17
  get _socket(): SocketAddress;
17
18
  get readyState(): number;
18
19
  set onopen(listener: () => void);
package/dist/client.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebSocket = void 0;
3
4
  const server_1 = require("./server");
4
5
  const shared_1 = require("./shared");
5
6
  const clientGroup = shared_1.native.client.group.create(0, shared_1.DEFAULT_PAYLOAD_LIMIT);
@@ -27,6 +28,9 @@ class WebSocket {
27
28
  shared_1.native.connect(clientGroup, url, this);
28
29
  }
29
30
  }
31
+ get bufferedAmount() {
32
+ return this.external ? shared_1.native.getBufferedAmount(this.external) : 0;
33
+ }
30
34
  get _socket() {
31
35
  const address = this.external ? shared_1.native.getAddress(this.external) : new Array(3);
32
36
  return {
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.secureProtocol = void 0;
3
4
  var client_1 = require("./client");
4
- exports.WebSocket = client_1.WebSocket;
5
+ Object.defineProperty(exports, "WebSocket", { enumerable: true, get: function () { return client_1.WebSocket; } });
5
6
  var server_1 = require("./server");
6
- exports.WebSocketServer = server_1.WebSocketServer;
7
+ Object.defineProperty(exports, "WebSocketServer", { enumerable: true, get: function () { return server_1.WebSocketServer; } });
7
8
  exports.secureProtocol = 'TLSv1_2_method';
package/dist/server.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebSocketServer = void 0;
3
4
  const HTTP = require("http");
4
5
  const shared_1 = require("./shared");
5
6
  class WebSocketServer {
package/dist/shared.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupNative = exports.native = exports.DEFAULT_PAYLOAD_LIMIT = exports.SLIDING_DEFLATE_WINDOW = exports.PERMESSAGE_DEFLATE = exports.APP_PING_CODE = exports.OPCODE_BINARY = exports.OPCODE_PING = exports.OPCODE_TEXT = exports.noop = void 0;
3
4
  const client_1 = require("./client");
4
5
  exports.noop = () => { };
5
6
  exports.OPCODE_TEXT = 1;
@@ -11,7 +12,7 @@ exports.SLIDING_DEFLATE_WINDOW = 16;
11
12
  exports.DEFAULT_PAYLOAD_LIMIT = 16777216;
12
13
  exports.native = (() => {
13
14
  try {
14
- return require(`../dist/bindings/cws_${process.platform}_${process.versions.modules}`);
15
+ return require(`../dist/bindings/cws_${process.platform}_${process.arch}_node${process.versions.modules}`);
15
16
  }
16
17
  catch (err) {
17
18
  err.message = err.message + ` check './node_modules/@clusterws/cws/build_log.txt' for post install build logs`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@encharm/cws",
3
- "version": "4.0.2",
3
+ "version": "4.3.0",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "description": "cWS - fast C++ WebSocket implementation for Node.js",
package/src/Addon.cpp CHANGED
@@ -18,6 +18,7 @@ void Initialize(Local<Object> exports) {
18
18
  #endif
19
19
 
20
20
  NODE_SET_METHOD(exports, "getSSLContext", getSSLContext);
21
+ NODE_SET_METHOD(exports, "getBufferedAmount", getBufferedAmount<cWS::SERVER>);
21
22
  NODE_SET_METHOD(exports, "setUserData", setUserData<cWS::SERVER>);
22
23
  NODE_SET_METHOD(exports, "getUserData", getUserData<cWS::SERVER>);
23
24
  NODE_SET_METHOD(exports, "clearUserData", clearUserData<cWS::SERVER>);
package/src/Addon.h CHANGED
@@ -32,8 +32,13 @@
32
32
  #include "headers/16/base_object-inl.h"
33
33
  #endif
34
34
 
35
+ #if NODE_MAJOR_VERSION==18
36
+ #include "headers/18/crypto/crypto_tls.h"
37
+ #include "headers/18/base_object-inl.h"
38
+ #endif
39
+
35
40
  using BaseObject = node::BaseObject;
36
- #if NODE_MAJOR_VERSION==16
41
+ #if NODE_MAJOR_VERSION==16 || NODE_MAJOR_VERSION==18
37
42
  using TLSWrap = node::crypto::TLSWrap;
38
43
  #else
39
44
  using TLSWrap = node::TLSWrap;
@@ -125,14 +130,26 @@ class NativeString {
125
130
  } else if (value->IsTypedArray()) {
126
131
  Local<ArrayBufferView> arrayBufferView =
127
132
  Local<ArrayBufferView>::Cast(value);
133
+ #if NODE_MAJOR_VERSION == 18
134
+ std::shared_ptr<v8::BackingStore> contents = arrayBufferView->Buffer()->GetBackingStore();
135
+ length = arrayBufferView->ByteLength();
136
+ data = (char *)contents->Data();
137
+ #else
128
138
  ArrayBuffer::Contents contents = arrayBufferView->Buffer()->GetContents();
129
139
  length = contents.ByteLength();
130
140
  data = (char *)contents.Data();
141
+ #endif
131
142
  } else if (value->IsArrayBuffer()) {
132
143
  Local<ArrayBuffer> arrayBuffer = Local<ArrayBuffer>::Cast(value);
144
+ #if NODE_MAJOR_VERSION == 18
145
+ std::shared_ptr<v8::BackingStore> contents = arrayBuffer->GetBackingStore();
146
+ length = arrayBuffer->ByteLength();
147
+ data = (char *)contents->Data();
148
+ #else
133
149
  ArrayBuffer::Contents contents = arrayBuffer->GetContents();
134
150
  length = contents.ByteLength();
135
151
  data = (char *)contents.Data();
152
+ #endif
136
153
  } else {
137
154
  static char empty[] = "";
138
155
  data = empty;
@@ -187,7 +204,12 @@ inline Local<Value> wrapMessage(const char *message, size_t length,
187
204
  cWS::OpCode opCode, Isolate *isolate) {
188
205
 
189
206
  if (opCode == cWS::OpCode::BINARY) {
190
- return (Local<Value>)ArrayBuffer::New(isolate, (char *)message, length);
207
+ // return (Local<Value>)ArrayBuffer::New(isolate, (char *)message, length);
208
+ std::unique_ptr<v8::BackingStore> backing = v8::ArrayBuffer::NewBackingStore((char*)message,
209
+ length,
210
+ [](void*, size_t, void*){},
211
+ nullptr);
212
+ return (Local<Value>)v8::ArrayBuffer::New(isolate, std::move(backing));
191
213
  }
192
214
 
193
215
  #if NODE_MAJOR_VERSION >= 13
@@ -206,6 +228,17 @@ inline Local<Value> getDataV8(cWS::WebSocket<isServer> *webSocket,
206
228
  : Local<Value>::Cast(Undefined(isolate));
207
229
  }
208
230
 
231
+
232
+ template <bool isServer>
233
+ void getBufferedAmount(const FunctionCallbackInfo<Value> &args) {
234
+ cWS::WebSocket<isServer> *webSocket =
235
+ unwrapSocket<isServer>(args[0].As<External>());
236
+
237
+ args.GetReturnValue().Set(
238
+ Integer::NewFromUnsigned(args.GetIsolate(), webSocket->getBufferedAmount())
239
+ );
240
+ }
241
+
209
242
  template <bool isServer>
210
243
  void getUserData(const FunctionCallbackInfo<Value> &args) {
211
244
  args.GetReturnValue().Set(getDataV8(
@@ -247,7 +247,7 @@ void HttpSocket<isServer>::upgrade(const char *secKey, const char *extensions, s
247
247
  memcpy(upgradeBuffer + upgradeResponseLength + 24 + subprotocolLength, "\r\n", 2);
248
248
  upgradeResponseLength += 24 + subprotocolLength + 2;
249
249
  }
250
- static char stamp[] = "Sec-WebSocket-Version: 13\r\nWebSocket-Server: cWebSockets\r\n\r\n";
250
+ static char stamp[] = "Sec-WebSocket-Version: 13\r\n\r\n";
251
251
  memcpy(upgradeBuffer + upgradeResponseLength, stamp, sizeof(stamp) - 1);
252
252
  upgradeResponseLength += sizeof(stamp) - 1;
253
253
 
package/src/LICENSE CHANGED
@@ -1,3 +1,7 @@
1
+ Code Charm notice:
2
+
3
+ This software is a modified fork of ClusterWS/cWS. THe original software is available at https://github.com/ClusterWS/cWS
4
+
1
5
  ClusterWS notice:
2
6
 
3
7
  This software is modified fork of uWebSockets the original software
package/src/Socket.h CHANGED
@@ -22,14 +22,13 @@ struct TransferData {
22
22
  void (*transferCb)(Poll *);
23
23
  };
24
24
 
25
- // perfectly 64 bytes (4 + 60)
25
+ // perfectly 64 bytes (4 + 60) (only for EPoll and if packed)
26
26
  struct WIN32_EXPORT Socket : Poll {
27
- protected:
28
27
  struct {
29
28
  int poll : 4;
30
29
  int shuttingDown : 4;
31
30
  } state = {0, false};
32
-
31
+ protected:
33
32
  SSL *ssl;
34
33
  void *user = nullptr;
35
34
  NodeData *nodeData;
@@ -45,15 +44,19 @@ protected:
45
44
  };
46
45
 
47
46
  Message *head = nullptr, *tail = nullptr;
47
+ size_t totalLength = 0;
48
+
48
49
  void pop()
49
50
  {
50
51
  Message *nextMessage;
51
52
  if ((nextMessage = head->nextMessage)) {
53
+ totalLength -= head->length;
52
54
  delete [] (char *) head;
53
55
  head = nextMessage;
54
56
  } else {
55
57
  delete [] (char *) head;
56
58
  head = tail = nullptr;
59
+ totalLength = 0;
57
60
  }
58
61
  }
59
62
 
@@ -70,6 +73,7 @@ protected:
70
73
  head = message;
71
74
  tail = message;
72
75
  }
76
+ totalLength += message->length;
73
77
  }
74
78
  } messageQueue;
75
79
 
@@ -248,6 +252,7 @@ protected:
248
252
  break;
249
253
  } else {
250
254
  messagePtr->length -= sent;
255
+ socket->messageQueue.totalLength -= sent;
251
256
  messagePtr->data += sent;
252
257
  break;
253
258
  }
@@ -411,6 +416,10 @@ protected:
411
416
  }
412
417
 
413
418
  public:
419
+ auto getBufferedAmount() {
420
+ return messageQueue.totalLength;
421
+ }
422
+
414
423
  Socket(NodeData *nodeData, Loop *loop, uv_os_sock_t fd, SSL *ssl) : Poll(loop, fd), ssl(ssl), nodeData(nodeData) {
415
424
  if (ssl) {
416
425
  // OpenSSL treats SOCKETs as int
@@ -9,6 +9,8 @@
9
9
 
10
10
  namespace node {
11
11
 
12
+ typedef size_t AliasedBufferIndex;
13
+
12
14
  /**
13
15
  * Do not use this class directly when creating instances of it - use the
14
16
  * Aliased*Array defined at the end of this file instead.
@@ -32,9 +34,15 @@ template <class NativeT,
32
34
  typename = std::enable_if_t<std::is_scalar<NativeT>::value>>
33
35
  class AliasedBufferBase {
34
36
  public:
35
- AliasedBufferBase(v8::Isolate* isolate, const size_t count)
36
- : isolate_(isolate), count_(count), byte_offset_(0) {
37
+ AliasedBufferBase(v8::Isolate* isolate,
38
+ const size_t count,
39
+ const AliasedBufferIndex* index = nullptr)
40
+ : isolate_(isolate), count_(count), byte_offset_(0), index_(index) {
37
41
  CHECK_GT(count, 0);
42
+ if (index != nullptr) {
43
+ // Will be deserialized later.
44
+ return;
45
+ }
38
46
  const v8::HandleScope handle_scope(isolate_);
39
47
  const size_t size_in_bytes =
40
48
  MultiplyWithOverflowCheck(sizeof(NativeT), count);
@@ -62,10 +70,17 @@ class AliasedBufferBase {
62
70
  v8::Isolate* isolate,
63
71
  const size_t byte_offset,
64
72
  const size_t count,
65
- const AliasedBufferBase<uint8_t, v8::Uint8Array>& backing_buffer)
66
- : isolate_(isolate), count_(count), byte_offset_(byte_offset) {
73
+ const AliasedBufferBase<uint8_t, v8::Uint8Array>& backing_buffer,
74
+ const AliasedBufferIndex* index = nullptr)
75
+ : isolate_(isolate),
76
+ count_(count),
77
+ byte_offset_(byte_offset),
78
+ index_(index) {
79
+ if (index != nullptr) {
80
+ // Will be deserialized later.
81
+ return;
82
+ }
67
83
  const v8::HandleScope handle_scope(isolate_);
68
-
69
84
  v8::Local<v8::ArrayBuffer> ab = backing_buffer.GetArrayBuffer();
70
85
 
71
86
  // validate that the byte_offset is aligned with sizeof(NativeT)
@@ -86,10 +101,33 @@ class AliasedBufferBase {
86
101
  count_(that.count_),
87
102
  byte_offset_(that.byte_offset_),
88
103
  buffer_(that.buffer_) {
104
+ DCHECK_NULL(index_);
89
105
  js_array_ = v8::Global<V8T>(that.isolate_, that.GetJSArray());
90
106
  }
91
107
 
108
+ AliasedBufferIndex Serialize(v8::Local<v8::Context> context,
109
+ v8::SnapshotCreator* creator) {
110
+ DCHECK_NULL(index_);
111
+ return creator->AddData(context, GetJSArray());
112
+ }
113
+
114
+ inline void Deserialize(v8::Local<v8::Context> context) {
115
+ DCHECK_NOT_NULL(index_);
116
+ v8::Local<V8T> arr =
117
+ context->GetDataFromSnapshotOnce<V8T>(*index_).ToLocalChecked();
118
+ // These may not hold true for AliasedBuffers that have grown, so should
119
+ // be removed when we expand the snapshot support.
120
+ DCHECK_EQ(count_, arr->Length());
121
+ DCHECK_EQ(byte_offset_, arr->ByteOffset());
122
+ uint8_t* raw =
123
+ static_cast<uint8_t*>(arr->Buffer()->GetBackingStore()->Data());
124
+ buffer_ = reinterpret_cast<NativeT*>(raw + byte_offset_);
125
+ js_array_.Reset(isolate_, arr);
126
+ index_ = nullptr;
127
+ }
128
+
92
129
  AliasedBufferBase& operator=(AliasedBufferBase&& that) noexcept {
130
+ DCHECK_NULL(index_);
93
131
  this->~AliasedBufferBase();
94
132
  isolate_ = that.isolate_;
95
133
  count_ = that.count_;
@@ -155,9 +193,15 @@ class AliasedBufferBase {
155
193
  * Get the underlying v8 TypedArray overlayed on top of the native buffer
156
194
  */
157
195
  v8::Local<V8T> GetJSArray() const {
196
+ DCHECK_NULL(index_);
158
197
  return js_array_.Get(isolate_);
159
198
  }
160
199
 
200
+ void Release() {
201
+ DCHECK_NULL(index_);
202
+ js_array_.Reset();
203
+ }
204
+
161
205
  /**
162
206
  * Get the underlying v8::ArrayBuffer underlying the TypedArray and
163
207
  * overlaying the native buffer
@@ -171,6 +215,7 @@ class AliasedBufferBase {
171
215
  * through the GetValue/SetValue/operator[] methods
172
216
  */
173
217
  inline const NativeT* GetNativeBuffer() const {
218
+ DCHECK_NULL(index_);
174
219
  return buffer_;
175
220
  }
176
221
 
@@ -186,6 +231,7 @@ class AliasedBufferBase {
186
231
  */
187
232
  inline void SetValue(const size_t index, NativeT value) {
188
233
  DCHECK_LT(index, count_);
234
+ DCHECK_NULL(index_);
189
235
  buffer_[index] = value;
190
236
  }
191
237
 
@@ -193,6 +239,7 @@ class AliasedBufferBase {
193
239
  * Get value at position index
194
240
  */
195
241
  inline const NativeT GetValue(const size_t index) const {
242
+ DCHECK_NULL(index_);
196
243
  DCHECK_LT(index, count_);
197
244
  return buffer_[index];
198
245
  }
@@ -201,6 +248,7 @@ class AliasedBufferBase {
201
248
  * Effectively, a synonym for GetValue/SetValue
202
249
  */
203
250
  Reference operator[](size_t index) {
251
+ DCHECK_NULL(index_);
204
252
  return Reference(this, index);
205
253
  }
206
254
 
@@ -216,6 +264,7 @@ class AliasedBufferBase {
216
264
  // Should only be used on an owning array, not one created as a sub array of
217
265
  // an owning `AliasedBufferBase`.
218
266
  void reserve(size_t new_capacity) {
267
+ DCHECK_NULL(index_);
219
268
  DCHECK_GE(new_capacity, count_);
220
269
  DCHECK_EQ(byte_offset_, 0);
221
270
  const v8::HandleScope handle_scope(isolate_);
@@ -244,11 +293,14 @@ class AliasedBufferBase {
244
293
  }
245
294
 
246
295
  private:
247
- v8::Isolate* isolate_;
248
- size_t count_;
249
- size_t byte_offset_;
250
- NativeT* buffer_;
296
+ v8::Isolate* isolate_ = nullptr;
297
+ size_t count_ = 0;
298
+ size_t byte_offset_ = 0;
299
+ NativeT* buffer_ = nullptr;
251
300
  v8::Global<V8T> js_array_;
301
+
302
+ // Deserialize data
303
+ const AliasedBufferIndex* index_ = nullptr;
252
304
  };
253
305
 
254
306
  typedef AliasedBufferBase<int32_t, v8::Int32Array> AliasedInt32Array;
@@ -0,0 +1,54 @@
1
+ #ifndef SRC_ALIASED_STRUCT_INL_H_
2
+ #define SRC_ALIASED_STRUCT_INL_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include "aliased_struct.h"
7
+ #include "v8.h"
8
+ #include <memory>
9
+
10
+ namespace node {
11
+
12
+ template <typename T>
13
+ template <typename... Args>
14
+ AliasedStruct<T>::AliasedStruct(v8::Isolate* isolate, Args&&... args)
15
+ : isolate_(isolate) {
16
+ const v8::HandleScope handle_scope(isolate);
17
+
18
+ store_ = v8::ArrayBuffer::NewBackingStore(isolate, sizeof(T));
19
+ ptr_ = new (store_->Data()) T(std::forward<Args>(args)...);
20
+ DCHECK_NOT_NULL(ptr_);
21
+
22
+ v8::Local<v8::ArrayBuffer> buffer = v8::ArrayBuffer::New(isolate, store_);
23
+ buffer_ = v8::Global<v8::ArrayBuffer>(isolate, buffer);
24
+ }
25
+
26
+ template <typename T>
27
+ AliasedStruct<T>::AliasedStruct(const AliasedStruct& that)
28
+ : AliasedStruct(that.isolate_, *that) {}
29
+
30
+ template <typename T>
31
+ AliasedStruct<T>& AliasedStruct<T>::operator=(
32
+ AliasedStruct<T>&& that) noexcept {
33
+ this->~AliasedStruct();
34
+ isolate_ = that.isolate_;
35
+ store_ = that.store_;
36
+ ptr_ = that.ptr_;
37
+
38
+ buffer_ = std::move(that.buffer_);
39
+
40
+ that.ptr_ = nullptr;
41
+ that.store_.reset();
42
+ return *this;
43
+ }
44
+
45
+ template <typename T>
46
+ AliasedStruct<T>::~AliasedStruct() {
47
+ if (ptr_ != nullptr) ptr_->~T();
48
+ }
49
+
50
+ } // namespace node
51
+
52
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
53
+
54
+ #endif // SRC_ALIASED_STRUCT_INL_H_
@@ -0,0 +1,63 @@
1
+ #ifndef SRC_ALIASED_STRUCT_H_
2
+ #define SRC_ALIASED_STRUCT_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include "node_internals.h"
7
+ #include "v8.h"
8
+ #include <memory>
9
+
10
+ namespace node {
11
+
12
+ // AliasedStruct is a utility that allows uses a V8 Backing Store
13
+ // to be exposed to the C++/C side as a struct and to the
14
+ // JavaScript side as an ArrayBuffer to efficiently share
15
+ // data without marshalling. It is similar in nature to
16
+ // AliasedBuffer.
17
+ //
18
+ // struct Foo { int x; }
19
+ //
20
+ // AliasedStruct<Foo> foo;
21
+ // foo->x = 1;
22
+ //
23
+ // Local<ArrayBuffer> ab = foo.GetArrayBuffer();
24
+ template <typename T>
25
+ class AliasedStruct final {
26
+ public:
27
+ template <typename... Args>
28
+ explicit AliasedStruct(v8::Isolate* isolate, Args&&... args);
29
+
30
+ inline AliasedStruct(const AliasedStruct& that);
31
+
32
+ inline ~AliasedStruct();
33
+
34
+ inline AliasedStruct& operator=(AliasedStruct&& that) noexcept;
35
+
36
+ v8::Local<v8::ArrayBuffer> GetArrayBuffer() const {
37
+ return buffer_.Get(isolate_);
38
+ }
39
+
40
+ const T* Data() const { return ptr_; }
41
+
42
+ T* Data() { return ptr_; }
43
+
44
+ const T& operator*() const { return *ptr_; }
45
+
46
+ T& operator*() { return *ptr_; }
47
+
48
+ const T* operator->() const { return ptr_; }
49
+
50
+ T* operator->() { return ptr_; }
51
+
52
+ private:
53
+ v8::Isolate* isolate_;
54
+ std::shared_ptr<v8::BackingStore> store_;
55
+ T* ptr_;
56
+ v8::Global<v8::ArrayBuffer> buffer_;
57
+ };
58
+
59
+ } // namespace node
60
+
61
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
62
+
63
+ #endif // SRC_ALIASED_STRUCT_H_
File without changes