@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
@@ -1,765 +0,0 @@
1
- // Copyright Joyent, Inc. and other Node contributors.
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a
4
- // copy of this software and associated documentation files (the
5
- // "Software"), to deal in the Software without restriction, including
6
- // without limitation the rights to use, copy, modify, merge, publish,
7
- // distribute, sublicense, and/or sell copies of the Software, and to permit
8
- // persons to whom the Software is furnished to do so, subject to the
9
- // following conditions:
10
- //
11
- // The above copyright notice and this permission notice shall be included
12
- // in all copies or substantial portions of the Software.
13
- //
14
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
21
-
22
- #ifndef SRC_UTIL_H_
23
- #define SRC_UTIL_H_
24
-
25
- #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
26
-
27
- #if (__GNUC__ >= 8) && !defined(__clang__)
28
- #pragma GCC diagnostic push
29
- #pragma GCC diagnostic ignored "-Wcast-function-type"
30
- #endif
31
- #include "v8.h"
32
- #if (__GNUC__ >= 8) && !defined(__clang__)
33
- #pragma GCC diagnostic pop
34
- #endif
35
-
36
- #include <cassert>
37
- #include <climits> // PATH_MAX
38
- #include <csignal>
39
- #include <cstddef>
40
- #include <cstdio>
41
- #include <cstdlib>
42
- #include <cstring>
43
-
44
- #include <functional> // std::function
45
- #include <limits>
46
- #include <set>
47
- #include <string>
48
- #include <array>
49
- #include <unordered_map>
50
- #include <utility>
51
-
52
- #ifdef __GNUC__
53
- #define MUST_USE_RESULT __attribute__((warn_unused_result))
54
- #else
55
- #define MUST_USE_RESULT
56
- #endif
57
-
58
- namespace node {
59
-
60
- // Maybe remove kPathSeparator when cpp17 is ready
61
- #ifdef _WIN32
62
- constexpr char kPathSeparator = '\\';
63
- /* MAX_PATH is in characters, not bytes. Make sure we have enough headroom. */
64
- #define PATH_MAX_BYTES (MAX_PATH * 4)
65
- #else
66
- constexpr char kPathSeparator = '/';
67
- #define PATH_MAX_BYTES (PATH_MAX)
68
- #endif
69
-
70
- // These should be used in our code as opposed to the native
71
- // versions as they abstract out some platform and or
72
- // compiler version specific functionality
73
- // malloc(0) and realloc(ptr, 0) have implementation-defined behavior in
74
- // that the standard allows them to either return a unique pointer or a
75
- // nullptr for zero-sized allocation requests. Normalize by always using
76
- // a nullptr.
77
- template <typename T>
78
- inline T* UncheckedRealloc(T* pointer, size_t n);
79
- template <typename T>
80
- inline T* UncheckedMalloc(size_t n);
81
- template <typename T>
82
- inline T* UncheckedCalloc(size_t n);
83
-
84
- // Same things, but aborts immediately instead of returning nullptr when
85
- // no memory is available.
86
- template <typename T>
87
- inline T* Realloc(T* pointer, size_t n);
88
- template <typename T>
89
- inline T* Malloc(size_t n);
90
- template <typename T>
91
- inline T* Calloc(size_t n);
92
-
93
- inline char* Malloc(size_t n);
94
- inline char* Calloc(size_t n);
95
- inline char* UncheckedMalloc(size_t n);
96
- inline char* UncheckedCalloc(size_t n);
97
-
98
- template <typename T>
99
- inline T MultiplyWithOverflowCheck(T a, T b);
100
-
101
- namespace per_process {
102
- // Tells whether the per-process V8::Initialize() is called and
103
- // if it is safe to call v8::Isolate::GetCurrent().
104
- extern bool v8_initialized;
105
- } // namespace per_process
106
-
107
- // Used by the allocation functions when allocation fails.
108
- // Thin wrapper around v8::Isolate::LowMemoryNotification() that checks
109
- // whether V8 is initialized.
110
- void LowMemoryNotification();
111
-
112
- // The reason that Assert() takes a struct argument instead of individual
113
- // const char*s is to ease instruction cache pressure in calls from CHECK.
114
- struct AssertionInfo {
115
- const char* file_line; // filename:line
116
- const char* message;
117
- const char* function;
118
- };
119
- [[noreturn]] void Assert(const AssertionInfo& info);
120
- [[noreturn]] void Abort();
121
- void DumpBacktrace(FILE* fp);
122
-
123
- // Windows 8+ does not like abort() in Release mode
124
- #ifdef _WIN32
125
- #define ABORT_NO_BACKTRACE() _exit(134)
126
- #else
127
- #define ABORT_NO_BACKTRACE() abort()
128
- #endif
129
-
130
- #define ABORT() node::Abort()
131
-
132
- #define ERROR_AND_ABORT(expr) \
133
- do { \
134
- /* Make sure that this struct does not end up in inline code, but */ \
135
- /* rather in a read-only data section when modifying this code. */ \
136
- static const node::AssertionInfo args = { \
137
- __FILE__ ":" STRINGIFY(__LINE__), #expr, PRETTY_FUNCTION_NAME \
138
- }; \
139
- node::Assert(args); \
140
- } while (0)
141
-
142
- #ifdef __GNUC__
143
- #define LIKELY(expr) __builtin_expect(!!(expr), 1)
144
- #define UNLIKELY(expr) __builtin_expect(!!(expr), 0)
145
- #define PRETTY_FUNCTION_NAME __PRETTY_FUNCTION__
146
- #else
147
- #define LIKELY(expr) expr
148
- #define UNLIKELY(expr) expr
149
- #define PRETTY_FUNCTION_NAME ""
150
- #endif
151
-
152
- #define STRINGIFY_(x) #x
153
- #define STRINGIFY(x) STRINGIFY_(x)
154
-
155
- #define CHECK(expr) \
156
- do { \
157
- if (UNLIKELY(!(expr))) { \
158
- ERROR_AND_ABORT(expr); \
159
- } \
160
- } while (0)
161
-
162
- #define CHECK_EQ(a, b) CHECK((a) == (b))
163
- #define CHECK_GE(a, b) CHECK((a) >= (b))
164
- #define CHECK_GT(a, b) CHECK((a) > (b))
165
- #define CHECK_LE(a, b) CHECK((a) <= (b))
166
- #define CHECK_LT(a, b) CHECK((a) < (b))
167
- #define CHECK_NE(a, b) CHECK((a) != (b))
168
- #define CHECK_NULL(val) CHECK((val) == nullptr)
169
- #define CHECK_NOT_NULL(val) CHECK((val) != nullptr)
170
- #define CHECK_IMPLIES(a, b) CHECK(!(a) || (b))
171
-
172
- #ifdef DEBUG
173
- #define DCHECK(expr) CHECK(expr)
174
- #define DCHECK_EQ(a, b) CHECK((a) == (b))
175
- #define DCHECK_GE(a, b) CHECK((a) >= (b))
176
- #define DCHECK_GT(a, b) CHECK((a) > (b))
177
- #define DCHECK_LE(a, b) CHECK((a) <= (b))
178
- #define DCHECK_LT(a, b) CHECK((a) < (b))
179
- #define DCHECK_NE(a, b) CHECK((a) != (b))
180
- #define DCHECK_NULL(val) CHECK((val) == nullptr)
181
- #define DCHECK_NOT_NULL(val) CHECK((val) != nullptr)
182
- #define DCHECK_IMPLIES(a, b) CHECK(!(a) || (b))
183
- #else
184
- #define DCHECK(expr)
185
- #define DCHECK_EQ(a, b)
186
- #define DCHECK_GE(a, b)
187
- #define DCHECK_GT(a, b)
188
- #define DCHECK_LE(a, b)
189
- #define DCHECK_LT(a, b)
190
- #define DCHECK_NE(a, b)
191
- #define DCHECK_NULL(val)
192
- #define DCHECK_NOT_NULL(val)
193
- #define DCHECK_IMPLIES(a, b)
194
- #endif
195
-
196
-
197
- #define UNREACHABLE(...) \
198
- ERROR_AND_ABORT("Unreachable code reached" __VA_OPT__(": ") __VA_ARGS__)
199
-
200
- // TAILQ-style intrusive list node.
201
- template <typename T>
202
- class ListNode;
203
-
204
- // TAILQ-style intrusive list head.
205
- template <typename T, ListNode<T> (T::*M)>
206
- class ListHead;
207
-
208
- template <typename T>
209
- class ListNode {
210
- public:
211
- inline ListNode();
212
- inline ~ListNode();
213
- inline void Remove();
214
- inline bool IsEmpty() const;
215
-
216
- ListNode(const ListNode&) = delete;
217
- ListNode& operator=(const ListNode&) = delete;
218
-
219
- private:
220
- template <typename U, ListNode<U> (U::*M)> friend class ListHead;
221
- friend int GenDebugSymbols();
222
- ListNode* prev_;
223
- ListNode* next_;
224
- };
225
-
226
- template <typename T, ListNode<T> (T::*M)>
227
- class ListHead {
228
- public:
229
- class Iterator {
230
- public:
231
- inline T* operator*() const;
232
- inline const Iterator& operator++();
233
- inline bool operator!=(const Iterator& that) const;
234
-
235
- private:
236
- friend class ListHead;
237
- inline explicit Iterator(ListNode<T>* node);
238
- ListNode<T>* node_;
239
- };
240
-
241
- inline ListHead() = default;
242
- inline ~ListHead();
243
- inline void PushBack(T* element);
244
- inline void PushFront(T* element);
245
- inline bool IsEmpty() const;
246
- inline T* PopFront();
247
- inline Iterator begin() const;
248
- inline Iterator end() const;
249
-
250
- ListHead(const ListHead&) = delete;
251
- ListHead& operator=(const ListHead&) = delete;
252
-
253
- private:
254
- friend int GenDebugSymbols();
255
- ListNode<T> head_;
256
- };
257
-
258
- // The helper is for doing safe downcasts from base types to derived types.
259
- template <typename Inner, typename Outer>
260
- class ContainerOfHelper {
261
- public:
262
- inline ContainerOfHelper(Inner Outer::*field, Inner* pointer);
263
- template <typename TypeName>
264
- inline operator TypeName*() const;
265
- private:
266
- Outer* const pointer_;
267
- };
268
-
269
- // Calculate the address of the outer (i.e. embedding) struct from
270
- // the interior pointer to a data member.
271
- template <typename Inner, typename Outer>
272
- constexpr ContainerOfHelper<Inner, Outer> ContainerOf(Inner Outer::*field,
273
- Inner* pointer);
274
-
275
- // Convenience wrapper around v8::String::NewFromOneByte().
276
- inline v8::Local<v8::String> OneByteString(v8::Isolate* isolate,
277
- const char* data,
278
- int length = -1);
279
-
280
- // For the people that compile with -funsigned-char.
281
- inline v8::Local<v8::String> OneByteString(v8::Isolate* isolate,
282
- const signed char* data,
283
- int length = -1);
284
-
285
- inline v8::Local<v8::String> OneByteString(v8::Isolate* isolate,
286
- const unsigned char* data,
287
- int length = -1);
288
-
289
- // Used to be a macro, hence the uppercase name.
290
- template <int N>
291
- inline v8::Local<v8::String> FIXED_ONE_BYTE_STRING(
292
- v8::Isolate* isolate,
293
- const char(&data)[N]) {
294
- return OneByteString(isolate, data, N - 1);
295
- }
296
-
297
- template <std::size_t N>
298
- inline v8::Local<v8::String> FIXED_ONE_BYTE_STRING(
299
- v8::Isolate* isolate,
300
- const std::array<char, N>& arr) {
301
- return OneByteString(isolate, arr.data(), N - 1);
302
- }
303
-
304
-
305
-
306
- // Swaps bytes in place. nbytes is the number of bytes to swap and must be a
307
- // multiple of the word size (checked by function).
308
- inline void SwapBytes16(char* data, size_t nbytes);
309
- inline void SwapBytes32(char* data, size_t nbytes);
310
- inline void SwapBytes64(char* data, size_t nbytes);
311
-
312
- // tolower() is locale-sensitive. Use ToLower() instead.
313
- inline char ToLower(char c);
314
- inline std::string ToLower(const std::string& in);
315
-
316
- // toupper() is locale-sensitive. Use ToUpper() instead.
317
- inline char ToUpper(char c);
318
- inline std::string ToUpper(const std::string& in);
319
-
320
- // strcasecmp() is locale-sensitive. Use StringEqualNoCase() instead.
321
- inline bool StringEqualNoCase(const char* a, const char* b);
322
-
323
- // strncasecmp() is locale-sensitive. Use StringEqualNoCaseN() instead.
324
- inline bool StringEqualNoCaseN(const char* a, const char* b, size_t length);
325
-
326
- // Allocates an array of member type T. For up to kStackStorageSize items,
327
- // the stack is used, otherwise malloc().
328
- template <typename T, size_t kStackStorageSize = 1024>
329
- class MaybeStackBuffer {
330
- public:
331
- const T* out() const {
332
- return buf_;
333
- }
334
-
335
- T* out() {
336
- return buf_;
337
- }
338
-
339
- // operator* for compatibility with `v8::String::(Utf8)Value`
340
- T* operator*() {
341
- return buf_;
342
- }
343
-
344
- const T* operator*() const {
345
- return buf_;
346
- }
347
-
348
- T& operator[](size_t index) {
349
- CHECK_LT(index, length());
350
- return buf_[index];
351
- }
352
-
353
- const T& operator[](size_t index) const {
354
- CHECK_LT(index, length());
355
- return buf_[index];
356
- }
357
-
358
- size_t length() const {
359
- return length_;
360
- }
361
-
362
- // Current maximum capacity of the buffer with which SetLength() can be used
363
- // without first calling AllocateSufficientStorage().
364
- size_t capacity() const {
365
- return IsAllocated() ? capacity_ :
366
- IsInvalidated() ? 0 : kStackStorageSize;
367
- }
368
-
369
- // Make sure enough space for `storage` entries is available.
370
- // This method can be called multiple times throughout the lifetime of the
371
- // buffer, but once this has been called Invalidate() cannot be used.
372
- // Content of the buffer in the range [0, length()) is preserved.
373
- void AllocateSufficientStorage(size_t storage) {
374
- CHECK(!IsInvalidated());
375
- if (storage > capacity()) {
376
- bool was_allocated = IsAllocated();
377
- T* allocated_ptr = was_allocated ? buf_ : nullptr;
378
- buf_ = Realloc(allocated_ptr, storage);
379
- capacity_ = storage;
380
- if (!was_allocated && length_ > 0)
381
- memcpy(buf_, buf_st_, length_ * sizeof(buf_[0]));
382
- }
383
-
384
- length_ = storage;
385
- }
386
-
387
- void SetLength(size_t length) {
388
- // capacity() returns how much memory is actually available.
389
- CHECK_LE(length, capacity());
390
- length_ = length;
391
- }
392
-
393
- void SetLengthAndZeroTerminate(size_t length) {
394
- // capacity() returns how much memory is actually available.
395
- CHECK_LE(length + 1, capacity());
396
- SetLength(length);
397
-
398
- // T() is 0 for integer types, nullptr for pointers, etc.
399
- buf_[length] = T();
400
- }
401
-
402
- // Make derefencing this object return nullptr.
403
- // This method can be called multiple times throughout the lifetime of the
404
- // buffer, but once this has been called AllocateSufficientStorage() cannot
405
- // be used.
406
- void Invalidate() {
407
- CHECK(!IsAllocated());
408
- length_ = 0;
409
- buf_ = nullptr;
410
- }
411
-
412
- // If the buffer is stored in the heap rather than on the stack.
413
- bool IsAllocated() const {
414
- return !IsInvalidated() && buf_ != buf_st_;
415
- }
416
-
417
- // If Invalidate() has been called.
418
- bool IsInvalidated() const {
419
- return buf_ == nullptr;
420
- }
421
-
422
- // Release ownership of the malloc'd buffer.
423
- // Note: This does not free the buffer.
424
- void Release() {
425
- CHECK(IsAllocated());
426
- buf_ = buf_st_;
427
- length_ = 0;
428
- capacity_ = 0;
429
- }
430
-
431
- MaybeStackBuffer() : length_(0), capacity_(0), buf_(buf_st_) {
432
- // Default to a zero-length, null-terminated buffer.
433
- buf_[0] = T();
434
- }
435
-
436
- explicit MaybeStackBuffer(size_t storage) : MaybeStackBuffer() {
437
- AllocateSufficientStorage(storage);
438
- }
439
-
440
- ~MaybeStackBuffer() {
441
- if (IsAllocated())
442
- free(buf_);
443
- }
444
-
445
- private:
446
- size_t length_;
447
- // capacity of the malloc'ed buf_
448
- size_t capacity_;
449
- T* buf_;
450
- T buf_st_[kStackStorageSize];
451
- };
452
-
453
- // Provides access to an ArrayBufferView's storage, either the original,
454
- // or for small data, a copy of it. This object's lifetime is bound to the
455
- // original ArrayBufferView's lifetime.
456
- template <typename T, size_t kStackStorageSize = 64>
457
- class ArrayBufferViewContents {
458
- public:
459
- ArrayBufferViewContents() = default;
460
-
461
- explicit inline ArrayBufferViewContents(v8::Local<v8::Value> value);
462
- explicit inline ArrayBufferViewContents(v8::Local<v8::Object> value);
463
- explicit inline ArrayBufferViewContents(v8::Local<v8::ArrayBufferView> abv);
464
- inline void Read(v8::Local<v8::ArrayBufferView> abv);
465
-
466
- inline const T* data() const { return data_; }
467
- inline size_t length() const { return length_; }
468
-
469
- private:
470
- T stack_storage_[kStackStorageSize];
471
- T* data_ = nullptr;
472
- size_t length_ = 0;
473
- };
474
-
475
- class Utf8Value : public MaybeStackBuffer<char> {
476
- public:
477
- explicit Utf8Value(v8::Isolate* isolate, v8::Local<v8::Value> value);
478
-
479
- inline std::string ToString() const { return std::string(out(), length()); }
480
- };
481
-
482
- class TwoByteValue : public MaybeStackBuffer<uint16_t> {
483
- public:
484
- explicit TwoByteValue(v8::Isolate* isolate, v8::Local<v8::Value> value);
485
- };
486
-
487
- class BufferValue : public MaybeStackBuffer<char> {
488
- public:
489
- explicit BufferValue(v8::Isolate* isolate, v8::Local<v8::Value> value);
490
-
491
- inline std::string ToString() const { return std::string(out(), length()); }
492
- };
493
-
494
- #define SPREAD_BUFFER_ARG(val, name) \
495
- CHECK((val)->IsArrayBufferView()); \
496
- v8::Local<v8::ArrayBufferView> name = (val).As<v8::ArrayBufferView>(); \
497
- v8::ArrayBuffer::Contents name##_c = name->Buffer()->GetContents(); \
498
- const size_t name##_offset = name->ByteOffset(); \
499
- const size_t name##_length = name->ByteLength(); \
500
- char* const name##_data = \
501
- static_cast<char*>(name##_c.Data()) + name##_offset; \
502
- if (name##_length > 0) \
503
- CHECK_NE(name##_data, nullptr);
504
-
505
- // Use this when a variable or parameter is unused in order to explicitly
506
- // silence a compiler warning about that.
507
- template <typename T> inline void USE(T&&) {}
508
-
509
- template <typename Fn>
510
- struct OnScopeLeaveImpl {
511
- Fn fn_;
512
- bool active_;
513
-
514
- explicit OnScopeLeaveImpl(Fn&& fn) : fn_(std::move(fn)), active_(true) {}
515
- ~OnScopeLeaveImpl() { if (active_) fn_(); }
516
-
517
- OnScopeLeaveImpl(const OnScopeLeaveImpl& other) = delete;
518
- OnScopeLeaveImpl& operator=(const OnScopeLeaveImpl& other) = delete;
519
- OnScopeLeaveImpl(OnScopeLeaveImpl&& other)
520
- : fn_(std::move(other.fn_)), active_(other.active_) {
521
- other.active_ = false;
522
- }
523
- OnScopeLeaveImpl& operator=(OnScopeLeaveImpl&& other) {
524
- if (this == &other) return *this;
525
- this->~OnScopeLeave();
526
- new (this)OnScopeLeaveImpl(std::move(other));
527
- return *this;
528
- }
529
- };
530
-
531
- // Run a function when exiting the current scope. Used like this:
532
- // auto on_scope_leave = OnScopeLeave([&] {
533
- // // ... run some code ...
534
- // });
535
- template <typename Fn>
536
- inline MUST_USE_RESULT OnScopeLeaveImpl<Fn> OnScopeLeave(Fn&& fn) {
537
- return OnScopeLeaveImpl<Fn>{std::move(fn)};
538
- }
539
-
540
- // Simple RAII wrapper for contiguous data that uses malloc()/free().
541
- template <typename T>
542
- struct MallocedBuffer {
543
- T* data;
544
- size_t size;
545
-
546
- T* release() {
547
- T* ret = data;
548
- data = nullptr;
549
- return ret;
550
- }
551
-
552
- void Truncate(size_t new_size) {
553
- CHECK(new_size <= size);
554
- size = new_size;
555
- }
556
-
557
- inline bool is_empty() const { return data == nullptr; }
558
-
559
- MallocedBuffer() : data(nullptr), size(0) {}
560
- explicit MallocedBuffer(size_t size) : data(Malloc<T>(size)), size(size) {}
561
- MallocedBuffer(T* data, size_t size) : data(data), size(size) {}
562
- MallocedBuffer(MallocedBuffer&& other) : data(other.data), size(other.size) {
563
- other.data = nullptr;
564
- }
565
- MallocedBuffer& operator=(MallocedBuffer&& other) {
566
- this->~MallocedBuffer();
567
- return *new(this) MallocedBuffer(std::move(other));
568
- }
569
- ~MallocedBuffer() {
570
- free(data);
571
- }
572
- MallocedBuffer(const MallocedBuffer&) = delete;
573
- MallocedBuffer& operator=(const MallocedBuffer&) = delete;
574
- };
575
-
576
- template <typename T>
577
- class NonCopyableMaybe {
578
- public:
579
- NonCopyableMaybe() : empty_(true) {}
580
- explicit NonCopyableMaybe(T&& value)
581
- : empty_(false),
582
- value_(std::move(value)) {}
583
-
584
- bool IsEmpty() const {
585
- return empty_;
586
- }
587
-
588
- T&& Release() {
589
- CHECK_EQ(empty_, false);
590
- empty_ = true;
591
- return std::move(value_);
592
- }
593
-
594
- private:
595
- bool empty_;
596
- T value_;
597
- };
598
-
599
- // Test whether some value can be called with ().
600
- template <typename T, typename = void>
601
- struct is_callable : std::is_function<T> { };
602
-
603
- template <typename T>
604
- struct is_callable<T, typename std::enable_if<
605
- std::is_same<decltype(void(&T::operator())), void>::value
606
- >::type> : std::true_type { };
607
-
608
- template <typename T, void (*function)(T*)>
609
- struct FunctionDeleter {
610
- void operator()(T* pointer) const { function(pointer); }
611
- typedef std::unique_ptr<T, FunctionDeleter> Pointer;
612
- };
613
-
614
- template <typename T, void (*function)(T*)>
615
- using DeleteFnPtr = typename FunctionDeleter<T, function>::Pointer;
616
-
617
- std::vector<std::string> SplitString(const std::string& in, char delim);
618
-
619
- inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
620
- const std::string& str,
621
- v8::Isolate* isolate = nullptr);
622
- template <typename T, typename test_for_number =
623
- typename std::enable_if<std::numeric_limits<T>::is_specialized, bool>::type>
624
- inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
625
- const T& number,
626
- v8::Isolate* isolate = nullptr);
627
- template <typename T>
628
- inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
629
- const std::vector<T>& vec,
630
- v8::Isolate* isolate = nullptr);
631
- template <typename T, typename U>
632
- inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
633
- const std::unordered_map<T, U>& map,
634
- v8::Isolate* isolate = nullptr);
635
-
636
- // These macros expects a `Isolate* isolate` and a `Local<Context> context`
637
- // to be in the scope.
638
- #define READONLY_PROPERTY(obj, name, value) \
639
- do { \
640
- obj->DefineOwnProperty( \
641
- context, FIXED_ONE_BYTE_STRING(isolate, name), value, v8::ReadOnly) \
642
- .Check(); \
643
- } while (0)
644
-
645
- #define READONLY_DONT_ENUM_PROPERTY(obj, name, var) \
646
- do { \
647
- obj->DefineOwnProperty( \
648
- context, \
649
- OneByteString(isolate, name), \
650
- var, \
651
- static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontEnum)) \
652
- .Check(); \
653
- } while (0)
654
-
655
- #define READONLY_FALSE_PROPERTY(obj, name) \
656
- READONLY_PROPERTY(obj, name, v8::False(isolate))
657
-
658
- #define READONLY_TRUE_PROPERTY(obj, name) \
659
- READONLY_PROPERTY(obj, name, v8::True(isolate))
660
-
661
- #define READONLY_STRING_PROPERTY(obj, name, str) \
662
- READONLY_PROPERTY(obj, name, ToV8Value(context, str).ToLocalChecked())
663
-
664
- // Variation on NODE_DEFINE_CONSTANT that sets a String value.
665
- #define NODE_DEFINE_STRING_CONSTANT(target, name, constant) \
666
- do { \
667
- v8::Isolate* isolate = target->GetIsolate(); \
668
- v8::Local<v8::String> constant_name = \
669
- v8::String::NewFromUtf8(isolate, name, v8::NewStringType::kNormal) \
670
- .ToLocalChecked(); \
671
- v8::Local<v8::String> constant_value = \
672
- v8::String::NewFromUtf8(isolate, constant, v8::NewStringType::kNormal) \
673
- .ToLocalChecked(); \
674
- v8::PropertyAttribute constant_attributes = \
675
- static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete); \
676
- target \
677
- ->DefineOwnProperty(isolate->GetCurrentContext(), \
678
- constant_name, \
679
- constant_value, \
680
- constant_attributes) \
681
- .Check(); \
682
- } while (0)
683
-
684
- enum Endianness {
685
- kLittleEndian, // _Not_ LITTLE_ENDIAN, clashes with endian.h.
686
- kBigEndian
687
- };
688
-
689
- inline enum Endianness GetEndianness() {
690
- // Constant-folded by the compiler.
691
- const union {
692
- uint8_t u8[2];
693
- uint16_t u16;
694
- } u = {{1, 0}};
695
- return u.u16 == 1 ? kLittleEndian : kBigEndian;
696
- }
697
-
698
- inline bool IsLittleEndian() {
699
- return GetEndianness() == kLittleEndian;
700
- }
701
-
702
- inline bool IsBigEndian() {
703
- return GetEndianness() == kBigEndian;
704
- }
705
-
706
- template <typename T, size_t N>
707
- constexpr size_t arraysize(const T (&)[N]) {
708
- return N;
709
- }
710
-
711
- // Round up a to the next highest multiple of b.
712
- template <typename T>
713
- constexpr T RoundUp(T a, T b) {
714
- return a % b != 0 ? a + b - (a % b) : a;
715
- }
716
-
717
- class SlicedArguments : public MaybeStackBuffer<v8::Local<v8::Value>> {
718
- public:
719
- inline explicit SlicedArguments(
720
- const v8::FunctionCallbackInfo<v8::Value>& args, size_t start = 0);
721
- };
722
-
723
- // Convert a v8::PersistentBase, e.g. v8::Global, to a Local, with an extra
724
- // optimization for strong persistent handles.
725
- class PersistentToLocal {
726
- public:
727
- // If persistent.IsWeak() == false, then do not call persistent.Reset()
728
- // while the returned Local<T> is still in scope, it will destroy the
729
- // reference to the object.
730
- template <class TypeName>
731
- static inline v8::Local<TypeName> Default(
732
- v8::Isolate* isolate,
733
- const v8::PersistentBase<TypeName>& persistent) {
734
- if (persistent.IsWeak()) {
735
- return PersistentToLocal::Weak(isolate, persistent);
736
- } else {
737
- return PersistentToLocal::Strong(persistent);
738
- }
739
- }
740
-
741
- // Unchecked conversion from a non-weak Persistent<T> to Local<T>,
742
- // use with care!
743
- //
744
- // Do not call persistent.Reset() while the returned Local<T> is still in
745
- // scope, it will destroy the reference to the object.
746
- template <class TypeName>
747
- static inline v8::Local<TypeName> Strong(
748
- const v8::PersistentBase<TypeName>& persistent) {
749
- return *reinterpret_cast<v8::Local<TypeName>*>(
750
- const_cast<v8::PersistentBase<TypeName>*>(&persistent));
751
- }
752
-
753
- template <class TypeName>
754
- static inline v8::Local<TypeName> Weak(
755
- v8::Isolate* isolate,
756
- const v8::PersistentBase<TypeName>& persistent) {
757
- return v8::Local<TypeName>::New(isolate, persistent);
758
- }
759
- };
760
-
761
- } // namespace node
762
-
763
- #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
764
-
765
- #endif // SRC_UTIL_H_