@kungfu-tech/libnode-win32-x64 22.22.3-kf.0 → 22.22.3-kf.1

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 (340) hide show
  1. package/dist/node/include/acorn_version.h +6 -0
  2. package/dist/node/include/aliased_buffer-inl.h +244 -0
  3. package/dist/node/include/aliased_buffer.h +206 -0
  4. package/dist/node/include/aliased_struct-inl.h +54 -0
  5. package/dist/node/include/aliased_struct.h +63 -0
  6. package/dist/node/include/amaro_version.h +6 -0
  7. package/dist/node/include/async_context_frame.h +33 -0
  8. package/dist/node/include/async_wrap-inl.h +96 -0
  9. package/dist/node/include/async_wrap.h +243 -0
  10. package/dist/node/include/base_object-inl.h +335 -0
  11. package/dist/node/include/base_object.h +342 -0
  12. package/dist/node/include/base_object_types.h +74 -0
  13. package/dist/node/include/blob_serializer_deserializer-inl.h +385 -0
  14. package/dist/node/include/blob_serializer_deserializer.h +132 -0
  15. package/dist/node/include/callback_queue-inl.h +97 -0
  16. package/dist/node/include/callback_queue.h +79 -0
  17. package/dist/node/include/cares_wrap.h +447 -0
  18. package/dist/node/include/cjs_module_lexer_version.h +6 -0
  19. package/dist/node/include/cleanup_queue-inl.h +36 -0
  20. package/dist/node/include/cleanup_queue.h +79 -0
  21. package/dist/node/include/compile_cache.h +104 -0
  22. package/dist/node/include/connect_wrap.h +26 -0
  23. package/dist/node/include/connection_wrap.h +30 -0
  24. package/dist/node/include/cppgc/allocation.h +310 -0
  25. package/dist/node/include/cppgc/common.h +28 -0
  26. package/dist/node/include/cppgc/cross-thread-persistent.h +466 -0
  27. package/dist/node/include/cppgc/custom-space.h +97 -0
  28. package/dist/node/include/cppgc/default-platform.h +67 -0
  29. package/dist/node/include/cppgc/ephemeron-pair.h +30 -0
  30. package/dist/node/include/cppgc/explicit-management.h +100 -0
  31. package/dist/node/include/cppgc/garbage-collected.h +106 -0
  32. package/dist/node/include/cppgc/heap-consistency.h +309 -0
  33. package/dist/node/include/cppgc/heap-handle.h +48 -0
  34. package/dist/node/include/cppgc/heap-state.h +82 -0
  35. package/dist/node/include/cppgc/heap-statistics.h +120 -0
  36. package/dist/node/include/cppgc/heap.h +202 -0
  37. package/dist/node/include/cppgc/internal/api-constants.h +87 -0
  38. package/dist/node/include/cppgc/internal/atomic-entry-flag.h +48 -0
  39. package/dist/node/include/cppgc/internal/base-page-handle.h +45 -0
  40. package/dist/node/include/cppgc/internal/caged-heap-local-data.h +121 -0
  41. package/dist/node/include/cppgc/internal/caged-heap.h +68 -0
  42. package/dist/node/include/cppgc/internal/compiler-specific.h +38 -0
  43. package/dist/node/include/cppgc/internal/finalizer-trait.h +93 -0
  44. package/dist/node/include/cppgc/internal/gc-info.h +148 -0
  45. package/dist/node/include/cppgc/internal/logging.h +50 -0
  46. package/dist/node/include/cppgc/internal/member-storage.h +256 -0
  47. package/dist/node/include/cppgc/internal/name-trait.h +137 -0
  48. package/dist/node/include/cppgc/internal/persistent-node.h +214 -0
  49. package/dist/node/include/cppgc/internal/pointer-policies.h +243 -0
  50. package/dist/node/include/cppgc/internal/write-barrier.h +487 -0
  51. package/dist/node/include/cppgc/liveness-broker.h +78 -0
  52. package/dist/node/include/cppgc/macros.h +35 -0
  53. package/dist/node/include/cppgc/member.h +629 -0
  54. package/dist/node/include/cppgc/name-provider.h +65 -0
  55. package/dist/node/include/cppgc/object-size-trait.h +58 -0
  56. package/dist/node/include/cppgc/persistent.h +377 -0
  57. package/dist/node/include/cppgc/platform.h +163 -0
  58. package/dist/node/include/cppgc/prefinalizer.h +75 -0
  59. package/dist/node/include/cppgc/process-heap-statistics.h +36 -0
  60. package/dist/node/include/cppgc/sentinel-pointer.h +39 -0
  61. package/dist/node/include/cppgc/source-location.h +16 -0
  62. package/dist/node/include/cppgc/testing.h +106 -0
  63. package/dist/node/include/cppgc/trace-trait.h +128 -0
  64. package/dist/node/include/cppgc/type-traits.h +271 -0
  65. package/dist/node/include/cppgc/visitor.h +504 -0
  66. package/dist/node/include/crypto/crypto_aes.h +88 -0
  67. package/dist/node/include/crypto/crypto_bio.h +193 -0
  68. package/dist/node/include/crypto/crypto_cipher.h +293 -0
  69. package/dist/node/include/crypto/crypto_clienthello-inl.h +90 -0
  70. package/dist/node/include/crypto/crypto_clienthello.h +131 -0
  71. package/dist/node/include/crypto/crypto_common.h +64 -0
  72. package/dist/node/include/crypto/crypto_context.h +171 -0
  73. package/dist/node/include/crypto/crypto_dh.h +126 -0
  74. package/dist/node/include/crypto/crypto_dsa.h +52 -0
  75. package/dist/node/include/crypto/crypto_ec.h +164 -0
  76. package/dist/node/include/crypto/crypto_hash.h +91 -0
  77. package/dist/node/include/crypto/crypto_hkdf.h +61 -0
  78. package/dist/node/include/crypto/crypto_hmac.h +92 -0
  79. package/dist/node/include/crypto/crypto_keygen.h +299 -0
  80. package/dist/node/include/crypto/crypto_keys.h +392 -0
  81. package/dist/node/include/crypto/crypto_pbkdf2.h +74 -0
  82. package/dist/node/include/crypto/crypto_random.h +124 -0
  83. package/dist/node/include/crypto/crypto_rsa.h +136 -0
  84. package/dist/node/include/crypto/crypto_scrypt.h +85 -0
  85. package/dist/node/include/crypto/crypto_sig.h +165 -0
  86. package/dist/node/include/crypto/crypto_spkac.h +21 -0
  87. package/dist/node/include/crypto/crypto_timing.h +20 -0
  88. package/dist/node/include/crypto/crypto_tls.h +305 -0
  89. package/dist/node/include/crypto/crypto_util.h +725 -0
  90. package/dist/node/include/crypto/crypto_x509.h +140 -0
  91. package/dist/node/include/dataqueue/queue.h +306 -0
  92. package/dist/node/include/debug_utils-inl.h +278 -0
  93. package/dist/node/include/debug_utils.h +196 -0
  94. package/dist/node/include/diagnosticfilename-inl.h +33 -0
  95. package/dist/node/include/embedded_data.h +17 -0
  96. package/dist/node/include/encoding_binding.h +61 -0
  97. package/dist/node/include/env-inl.h +984 -0
  98. package/dist/node/include/env.h +1287 -0
  99. package/dist/node/include/env_properties.h +540 -0
  100. package/dist/node/include/handle_wrap.h +123 -0
  101. package/dist/node/include/histogram-inl.h +107 -0
  102. package/dist/node/include/histogram.h +279 -0
  103. package/dist/node/include/inspector/io_agent.h +30 -0
  104. package/dist/node/include/inspector/main_thread_interface.h +116 -0
  105. package/dist/node/include/inspector/network_agent.h +94 -0
  106. package/dist/node/include/inspector/network_inspector.h +45 -0
  107. package/dist/node/include/inspector/network_requests_buffer.h +195 -0
  108. package/dist/node/include/inspector/network_resource_manager.h +29 -0
  109. package/dist/node/include/inspector/node_json.h +24 -0
  110. package/dist/node/include/inspector/node_string.h +101 -0
  111. package/dist/node/include/inspector/protocol_helper.h +27 -0
  112. package/dist/node/include/inspector/runtime_agent.h +41 -0
  113. package/dist/node/include/inspector/target_agent.h +75 -0
  114. package/dist/node/include/inspector/tracing_agent.h +43 -0
  115. package/dist/node/include/inspector/worker_agent.h +40 -0
  116. package/dist/node/include/inspector/worker_inspector.h +124 -0
  117. package/dist/node/include/inspector_agent.h +165 -0
  118. package/dist/node/include/inspector_io.h +78 -0
  119. package/dist/node/include/inspector_profiler.h +149 -0
  120. package/dist/node/include/inspector_socket.h +60 -0
  121. package/dist/node/include/inspector_socket_server.h +110 -0
  122. package/dist/node/include/js_native_api.h +607 -0
  123. package/dist/node/include/js_native_api_types.h +226 -0
  124. package/dist/node/include/js_native_api_v8.h +485 -0
  125. package/dist/node/include/js_native_api_v8_internals.h +45 -0
  126. package/dist/node/include/js_stream.h +52 -0
  127. package/dist/node/include/json_utils.h +172 -0
  128. package/dist/node/include/large_pages/node_large_page.h +34 -0
  129. package/dist/node/include/libplatform/libplatform-export.h +29 -0
  130. package/dist/node/include/libplatform/libplatform.h +112 -0
  131. package/dist/node/include/libplatform/v8-tracing.h +333 -0
  132. package/dist/node/include/memory_tracker-inl.h +359 -0
  133. package/dist/node/include/memory_tracker.h +289 -0
  134. package/dist/node/include/module_wrap.h +216 -0
  135. package/dist/node/include/node.h +1593 -0
  136. package/dist/node/include/node_api.h +265 -0
  137. package/dist/node/include/node_api_internals.h +48 -0
  138. package/dist/node/include/node_api_types.h +56 -0
  139. package/dist/node/include/node_binding.h +161 -0
  140. package/dist/node/include/node_blob.h +159 -0
  141. package/dist/node/include/node_bob-inl.h +36 -0
  142. package/dist/node/include/node_bob.h +107 -0
  143. package/dist/node/include/node_buffer.h +92 -0
  144. package/dist/node/include/node_builtins.h +220 -0
  145. package/dist/node/include/node_config_file.h +46 -0
  146. package/dist/node/include/node_constants.h +82 -0
  147. package/dist/node/include/node_context_data.h +168 -0
  148. package/dist/node/include/node_contextify.h +204 -0
  149. package/dist/node/include/node_crypto.h +56 -0
  150. package/dist/node/include/node_debug.h +30 -0
  151. package/dist/node/include/node_dir.h +52 -0
  152. package/dist/node/include/node_dotenv.h +45 -0
  153. package/dist/node/include/node_errors.h +380 -0
  154. package/dist/node/include/node_exit_code.h +54 -0
  155. package/dist/node/include/node_external_reference.h +165 -0
  156. package/dist/node/include/node_file-inl.h +406 -0
  157. package/dist/node/include/node_file.h +537 -0
  158. package/dist/node/include/node_http2.h +1177 -0
  159. package/dist/node/include/node_http2_state.h +159 -0
  160. package/dist/node/include/node_http_common-inl.h +202 -0
  161. package/dist/node/include/node_http_common.h +535 -0
  162. package/dist/node/include/node_i18n.h +132 -0
  163. package/dist/node/include/node_internals.h +483 -0
  164. package/dist/node/include/node_main_instance.h +67 -0
  165. package/dist/node/include/node_mem-inl.h +113 -0
  166. package/dist/node/include/node_mem.h +45 -0
  167. package/dist/node/include/node_messaging.h +389 -0
  168. package/dist/node/include/node_metadata.h +164 -0
  169. package/dist/node/include/node_modules.h +91 -0
  170. package/dist/node/include/node_mutex.h +323 -0
  171. package/dist/node/include/node_object_wrap.h +132 -0
  172. package/dist/node/include/node_options-inl.h +490 -0
  173. package/dist/node/include/node_options.h +615 -0
  174. package/dist/node/include/node_perf.h +166 -0
  175. package/dist/node/include/node_perf_common.h +102 -0
  176. package/dist/node/include/node_platform.h +238 -0
  177. package/dist/node/include/node_process-inl.h +26 -0
  178. package/dist/node/include/node_process.h +112 -0
  179. package/dist/node/include/node_realm-inl.h +151 -0
  180. package/dist/node/include/node_realm.h +183 -0
  181. package/dist/node/include/node_report.h +43 -0
  182. package/dist/node/include/node_revert.h +82 -0
  183. package/dist/node/include/node_root_certs.h +3520 -0
  184. package/dist/node/include/node_sea.h +74 -0
  185. package/dist/node/include/node_shadow_realm.h +46 -0
  186. package/dist/node/include/node_snapshot_builder.h +57 -0
  187. package/dist/node/include/node_snapshotable.h +174 -0
  188. package/dist/node/include/node_sockaddr-inl.h +257 -0
  189. package/dist/node/include/node_sockaddr.h +394 -0
  190. package/dist/node/include/node_sqlite.h +270 -0
  191. package/dist/node/include/node_stat_watcher.h +73 -0
  192. package/dist/node/include/node_task_runner.h +92 -0
  193. package/dist/node/include/node_threadsafe_cow-inl.h +54 -0
  194. package/dist/node/include/node_threadsafe_cow.h +105 -0
  195. package/dist/node/include/node_union_bytes.h +81 -0
  196. package/dist/node/include/node_url.h +96 -0
  197. package/dist/node/include/node_v8.h +77 -0
  198. package/dist/node/include/node_v8_platform-inl.h +185 -0
  199. package/dist/node/include/node_version.h +110 -0
  200. package/dist/node/include/node_wasi.h +184 -0
  201. package/dist/node/include/node_wasm_web_api.h +55 -0
  202. package/dist/node/include/node_watchdog.h +154 -0
  203. package/dist/node/include/node_webstorage.h +60 -0
  204. package/dist/node/include/node_worker.h +158 -0
  205. package/dist/node/include/path.h +33 -0
  206. package/dist/node/include/permission/addon_permission.h +31 -0
  207. package/dist/node/include/permission/child_process_permission.h +31 -0
  208. package/dist/node/include/permission/fs_permission.h +167 -0
  209. package/dist/node/include/permission/inspector_permission.h +31 -0
  210. package/dist/node/include/permission/permission.h +138 -0
  211. package/dist/node/include/permission/permission_base.h +65 -0
  212. package/dist/node/include/permission/wasi_permission.h +31 -0
  213. package/dist/node/include/permission/worker_permission.h +31 -0
  214. package/dist/node/include/pipe_wrap.h +80 -0
  215. package/dist/node/include/quic/application.h +159 -0
  216. package/dist/node/include/quic/bindingdata.h +272 -0
  217. package/dist/node/include/quic/cid.h +127 -0
  218. package/dist/node/include/quic/data.h +148 -0
  219. package/dist/node/include/quic/defs.h +245 -0
  220. package/dist/node/include/quic/endpoint.h +458 -0
  221. package/dist/node/include/quic/http3.h +15 -0
  222. package/dist/node/include/quic/logstream.h +81 -0
  223. package/dist/node/include/quic/packet.h +152 -0
  224. package/dist/node/include/quic/preferredaddress.h +72 -0
  225. package/dist/node/include/quic/session.h +443 -0
  226. package/dist/node/include/quic/sessionticket.h +108 -0
  227. package/dist/node/include/quic/streams.h +232 -0
  228. package/dist/node/include/quic/tlscontext.h +227 -0
  229. package/dist/node/include/quic/tokens.h +256 -0
  230. package/dist/node/include/quic/transportparams.h +165 -0
  231. package/dist/node/include/req_wrap-inl.h +171 -0
  232. package/dist/node/include/req_wrap.h +77 -0
  233. package/dist/node/include/spawn_sync.h +243 -0
  234. package/dist/node/include/stream_base-inl.h +173 -0
  235. package/dist/node/include/stream_base.h +478 -0
  236. package/dist/node/include/stream_pipe.h +76 -0
  237. package/dist/node/include/stream_wrap.h +132 -0
  238. package/dist/node/include/string_bytes.h +113 -0
  239. package/dist/node/include/string_decoder-inl.h +31 -0
  240. package/dist/node/include/string_decoder.h +49 -0
  241. package/dist/node/include/tcp_wrap.h +105 -0
  242. package/dist/node/include/threadpoolwork-inl.h +70 -0
  243. package/dist/node/include/timer_wrap-inl.h +32 -0
  244. package/dist/node/include/timer_wrap.h +85 -0
  245. package/dist/node/include/timers.h +70 -0
  246. package/dist/node/include/tracing/agent.h +195 -0
  247. package/dist/node/include/tracing/node_trace_buffer.h +83 -0
  248. package/dist/node/include/tracing/node_trace_writer.h +75 -0
  249. package/dist/node/include/tracing/trace_event.h +722 -0
  250. package/dist/node/include/tracing/trace_event_common.h +1109 -0
  251. package/dist/node/include/tracing/traced_value.h +129 -0
  252. package/dist/node/include/tty_wrap.h +65 -0
  253. package/dist/node/include/udp_wrap.h +230 -0
  254. package/dist/node/include/undici_version.h +6 -0
  255. package/dist/node/include/util-inl.h +700 -0
  256. package/dist/node/include/util.h +1021 -0
  257. package/dist/node/include/uv/aix.h +32 -0
  258. package/dist/node/include/uv/bsd.h +34 -0
  259. package/dist/node/include/uv/darwin.h +61 -0
  260. package/dist/node/include/uv/errno.h +483 -0
  261. package/dist/node/include/uv/linux.h +34 -0
  262. package/dist/node/include/uv/os390.h +33 -0
  263. package/dist/node/include/uv/posix.h +31 -0
  264. package/dist/node/include/uv/sunos.h +44 -0
  265. package/dist/node/include/uv/threadpool.h +37 -0
  266. package/dist/node/include/uv/tree.h +521 -0
  267. package/dist/node/include/uv/unix.h +512 -0
  268. package/dist/node/include/uv/version.h +43 -0
  269. package/dist/node/include/uv/win.h +698 -0
  270. package/dist/node/include/uv.h +1990 -0
  271. package/dist/node/include/v8-array-buffer.h +525 -0
  272. package/dist/node/include/v8-callbacks.h +462 -0
  273. package/dist/node/include/v8-container.h +183 -0
  274. package/dist/node/include/v8-context.h +485 -0
  275. package/dist/node/include/v8-cppgc.h +245 -0
  276. package/dist/node/include/v8-data.h +80 -0
  277. package/dist/node/include/v8-date.h +48 -0
  278. package/dist/node/include/v8-debug.h +168 -0
  279. package/dist/node/include/v8-embedder-heap.h +82 -0
  280. package/dist/node/include/v8-embedder-state-scope.h +52 -0
  281. package/dist/node/include/v8-exception.h +223 -0
  282. package/dist/node/include/v8-extension.h +62 -0
  283. package/dist/node/include/v8-external.h +37 -0
  284. package/dist/node/include/v8-fast-api-calls.h +984 -0
  285. package/dist/node/include/v8-forward.h +82 -0
  286. package/dist/node/include/v8-function-callback.h +607 -0
  287. package/dist/node/include/v8-function.h +140 -0
  288. package/dist/node/include/v8-handle-base.h +137 -0
  289. package/dist/node/include/v8-initialization.h +289 -0
  290. package/dist/node/include/v8-inspector-protocol.h +13 -0
  291. package/dist/node/include/v8-inspector.h +419 -0
  292. package/dist/node/include/v8-internal.h +1397 -0
  293. package/dist/node/include/v8-isolate.h +1767 -0
  294. package/dist/node/include/v8-json.h +47 -0
  295. package/dist/node/include/v8-local-handle.h +758 -0
  296. package/dist/node/include/v8-locker.h +138 -0
  297. package/dist/node/include/v8-maybe.h +160 -0
  298. package/dist/node/include/v8-memory-span.h +198 -0
  299. package/dist/node/include/v8-message.h +233 -0
  300. package/dist/node/include/v8-metrics.h +264 -0
  301. package/dist/node/include/v8-microtask-queue.h +157 -0
  302. package/dist/node/include/v8-microtask.h +28 -0
  303. package/dist/node/include/v8-object.h +824 -0
  304. package/dist/node/include/v8-persistent-handle.h +582 -0
  305. package/dist/node/include/v8-platform.h +1358 -0
  306. package/dist/node/include/v8-primitive-object.h +118 -0
  307. package/dist/node/include/v8-primitive.h +877 -0
  308. package/dist/node/include/v8-profiler.h +1302 -0
  309. package/dist/node/include/v8-promise.h +174 -0
  310. package/dist/node/include/v8-proxy.h +50 -0
  311. package/dist/node/include/v8-regexp.h +106 -0
  312. package/dist/node/include/v8-script.h +904 -0
  313. package/dist/node/include/v8-snapshot.h +266 -0
  314. package/dist/node/include/v8-source-location.h +92 -0
  315. package/dist/node/include/v8-statistics.h +238 -0
  316. package/dist/node/include/v8-template.h +1297 -0
  317. package/dist/node/include/v8-traced-handle.h +432 -0
  318. package/dist/node/include/v8-typed-array.h +390 -0
  319. package/dist/node/include/v8-unwinder-state.h +31 -0
  320. package/dist/node/include/v8-unwinder.h +132 -0
  321. package/dist/node/include/v8-util.h +665 -0
  322. package/dist/node/include/v8-value-serializer-version.h +24 -0
  323. package/dist/node/include/v8-value-serializer.h +316 -0
  324. package/dist/node/include/v8-value.h +655 -0
  325. package/dist/node/include/v8-version-string.h +38 -0
  326. package/dist/node/include/v8-version.h +20 -0
  327. package/dist/node/include/v8-wasm-trap-handler-posix.h +31 -0
  328. package/dist/node/include/v8-wasm-trap-handler-win.h +28 -0
  329. package/dist/node/include/v8-wasm.h +201 -0
  330. package/dist/node/include/v8-weak-callback-info.h +80 -0
  331. package/dist/node/include/v8.h +88 -0
  332. package/dist/node/include/v8config.h +981 -0
  333. package/dist/node/include/zlib_version.h +6 -0
  334. package/dist/node/libnode.dll +0 -0
  335. package/dist/node/libnode.lib +0 -0
  336. package/dist/node/libnodebuildinfo.json +10 -0
  337. package/dist/node/link_node.lib +0 -0
  338. package/dist/node/link_node.node +0 -0
  339. package/libnode.release.json +2 -2
  340. package/package.json +1 -1
@@ -0,0 +1,406 @@
1
+ #ifndef SRC_NODE_FILE_INL_H_
2
+ #define SRC_NODE_FILE_INL_H_
3
+
4
+ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5
+
6
+ #include "node_file.h"
7
+ #include "req_wrap-inl.h"
8
+
9
+ namespace node {
10
+ namespace fs {
11
+
12
+ FSContinuationData::FSContinuationData(uv_fs_t* req, int mode, uv_fs_cb done_cb)
13
+ : done_cb_(done_cb), req_(req), mode_(mode) {
14
+ }
15
+
16
+ void FSContinuationData::PushPath(std::string&& path) {
17
+ paths_.emplace_back(std::move(path));
18
+ }
19
+
20
+ void FSContinuationData::PushPath(const std::string& path) {
21
+ paths_.push_back(path);
22
+ }
23
+
24
+ void FSContinuationData::MaybeSetFirstPath(const std::string& path) {
25
+ if (first_path_.empty()) {
26
+ first_path_ = path;
27
+ }
28
+ }
29
+
30
+ std::string FSContinuationData::PopPath() {
31
+ CHECK(!paths_.empty());
32
+ std::string path = std::move(paths_.back());
33
+ paths_.pop_back();
34
+ return path;
35
+ }
36
+
37
+ void FSContinuationData::Done(int result) {
38
+ req_->result = result;
39
+ done_cb_(req_);
40
+ }
41
+
42
+ FSReqBase::FSReqBase(BindingData* binding_data,
43
+ v8::Local<v8::Object> req,
44
+ AsyncWrap::ProviderType type,
45
+ bool use_bigint)
46
+ : ReqWrap(binding_data->env(), req, type),
47
+ use_bigint_(use_bigint),
48
+ binding_data_(binding_data) {
49
+ }
50
+
51
+ void FSReqBase::Init(const char* syscall,
52
+ const char* data,
53
+ size_t len,
54
+ enum encoding encoding) {
55
+ syscall_ = syscall;
56
+ encoding_ = encoding;
57
+
58
+ if (data != nullptr) {
59
+ CHECK(!has_data_);
60
+ buffer_.AllocateSufficientStorage(len + 1);
61
+ buffer_.SetLengthAndZeroTerminate(len);
62
+ memcpy(*buffer_, data, len);
63
+ has_data_ = true;
64
+ }
65
+ }
66
+
67
+ FSReqBase::FSReqBuffer&
68
+ FSReqBase::Init(const char* syscall, size_t len, enum encoding encoding) {
69
+ syscall_ = syscall;
70
+ encoding_ = encoding;
71
+
72
+ buffer_.AllocateSufficientStorage(len + 1);
73
+ has_data_ = false; // so that the data does not show up in error messages
74
+ return buffer_;
75
+ }
76
+
77
+ FSReqCallback::FSReqCallback(BindingData* binding_data,
78
+ v8::Local<v8::Object> req,
79
+ bool use_bigint)
80
+ : FSReqBase(binding_data,
81
+ req,
82
+ AsyncWrap::PROVIDER_FSREQCALLBACK,
83
+ use_bigint) {}
84
+
85
+ template <typename NativeT, typename V8T>
86
+ void FillStatsArray(AliasedBufferBase<NativeT, V8T>* fields,
87
+ const uv_stat_t* s,
88
+ const size_t offset) {
89
+ #define SET_FIELD_WITH_STAT(stat_offset, stat) \
90
+ fields->SetValue(offset + static_cast<size_t>(FsStatsOffset::stat_offset), \
91
+ static_cast<NativeT>(stat))
92
+
93
+ // On win32, time is stored in uint64_t and starts from 1601-01-01.
94
+ // libuv calculates tv_sec and tv_nsec from it and converts to signed long,
95
+ // which causes Y2038 overflow. On the other platforms it is safe to treat
96
+ // negative values as pre-epoch time.
97
+ #ifdef _WIN32
98
+ #define SET_FIELD_WITH_TIME_STAT(stat_offset, stat) \
99
+ /* NOLINTNEXTLINE(runtime/int) */ \
100
+ SET_FIELD_WITH_STAT(stat_offset, static_cast<unsigned long>(stat))
101
+ #else
102
+ #define SET_FIELD_WITH_TIME_STAT(stat_offset, stat) \
103
+ SET_FIELD_WITH_STAT(stat_offset, static_cast<double>(stat))
104
+ #endif // _WIN32
105
+
106
+ SET_FIELD_WITH_STAT(kDev, s->st_dev);
107
+ SET_FIELD_WITH_STAT(kMode, s->st_mode);
108
+ SET_FIELD_WITH_STAT(kNlink, s->st_nlink);
109
+ SET_FIELD_WITH_STAT(kUid, s->st_uid);
110
+ SET_FIELD_WITH_STAT(kGid, s->st_gid);
111
+ SET_FIELD_WITH_STAT(kRdev, s->st_rdev);
112
+ SET_FIELD_WITH_STAT(kBlkSize, s->st_blksize);
113
+ SET_FIELD_WITH_STAT(kIno, s->st_ino);
114
+ SET_FIELD_WITH_STAT(kSize, s->st_size);
115
+ SET_FIELD_WITH_STAT(kBlocks, s->st_blocks);
116
+
117
+ SET_FIELD_WITH_TIME_STAT(kATimeSec, s->st_atim.tv_sec);
118
+ SET_FIELD_WITH_TIME_STAT(kATimeNsec, s->st_atim.tv_nsec);
119
+ SET_FIELD_WITH_TIME_STAT(kMTimeSec, s->st_mtim.tv_sec);
120
+ SET_FIELD_WITH_TIME_STAT(kMTimeNsec, s->st_mtim.tv_nsec);
121
+ SET_FIELD_WITH_TIME_STAT(kCTimeSec, s->st_ctim.tv_sec);
122
+ SET_FIELD_WITH_TIME_STAT(kCTimeNsec, s->st_ctim.tv_nsec);
123
+ SET_FIELD_WITH_TIME_STAT(kBirthTimeSec, s->st_birthtim.tv_sec);
124
+ SET_FIELD_WITH_TIME_STAT(kBirthTimeNsec, s->st_birthtim.tv_nsec);
125
+
126
+ #undef SET_FIELD_WITH_TIME_STAT
127
+ #undef SET_FIELD_WITH_STAT
128
+ }
129
+
130
+ v8::Local<v8::Value> FillGlobalStatsArray(BindingData* binding_data,
131
+ const bool use_bigint,
132
+ const uv_stat_t* s,
133
+ const bool second) {
134
+ const ptrdiff_t offset =
135
+ second ? static_cast<ptrdiff_t>(FsStatsOffset::kFsStatsFieldsNumber) : 0;
136
+ if (use_bigint) {
137
+ auto* const arr = &binding_data->stats_field_bigint_array;
138
+ FillStatsArray(arr, s, offset);
139
+ return arr->GetJSArray();
140
+ } else {
141
+ auto* const arr = &binding_data->stats_field_array;
142
+ FillStatsArray(arr, s, offset);
143
+ return arr->GetJSArray();
144
+ }
145
+ }
146
+
147
+ template <typename NativeT, typename V8T>
148
+ void FillStatFsArray(AliasedBufferBase<NativeT, V8T>* fields,
149
+ const uv_statfs_t* s) {
150
+ #define SET_FIELD(field, stat) \
151
+ fields->SetValue(static_cast<size_t>(FsStatFsOffset::field), \
152
+ static_cast<NativeT>(stat))
153
+
154
+ SET_FIELD(kType, s->f_type);
155
+ SET_FIELD(kBSize, s->f_bsize);
156
+ SET_FIELD(kBlocks, s->f_blocks);
157
+ SET_FIELD(kBFree, s->f_bfree);
158
+ SET_FIELD(kBAvail, s->f_bavail);
159
+ SET_FIELD(kFiles, s->f_files);
160
+ SET_FIELD(kFFree, s->f_ffree);
161
+
162
+ #undef SET_FIELD
163
+ }
164
+
165
+ v8::Local<v8::Value> FillGlobalStatFsArray(BindingData* binding_data,
166
+ const bool use_bigint,
167
+ const uv_statfs_t* s) {
168
+ if (use_bigint) {
169
+ auto* const arr = &binding_data->statfs_field_bigint_array;
170
+ FillStatFsArray(arr, s);
171
+ return arr->GetJSArray();
172
+ } else {
173
+ auto* const arr = &binding_data->statfs_field_array;
174
+ FillStatFsArray(arr, s);
175
+ return arr->GetJSArray();
176
+ }
177
+ }
178
+
179
+ template <typename AliasedBufferT>
180
+ FSReqPromise<AliasedBufferT>*
181
+ FSReqPromise<AliasedBufferT>::New(BindingData* binding_data,
182
+ bool use_bigint) {
183
+ Environment* env = binding_data->env();
184
+ v8::Local<v8::Object> obj;
185
+ if (!env->fsreqpromise_constructor_template()
186
+ ->NewInstance(env->context())
187
+ .ToLocal(&obj)) {
188
+ return nullptr;
189
+ }
190
+ v8::Local<v8::Promise::Resolver> resolver;
191
+ if (!v8::Promise::Resolver::New(env->context()).ToLocal(&resolver) ||
192
+ obj->Set(env->context(), env->promise_string(), resolver).IsNothing()) {
193
+ return nullptr;
194
+ }
195
+ return new FSReqPromise(binding_data, obj, use_bigint);
196
+ }
197
+
198
+ template <typename AliasedBufferT>
199
+ FSReqPromise<AliasedBufferT>::~FSReqPromise() {
200
+ // Validate that the promise was explicitly resolved or rejected but only if
201
+ // the Isolate is not terminating because in this case the promise might have
202
+ // not finished.
203
+ CHECK_IMPLIES(!finished_, !env()->can_call_into_js());
204
+ }
205
+
206
+ template <typename AliasedBufferT>
207
+ FSReqPromise<AliasedBufferT>::FSReqPromise(BindingData* binding_data,
208
+ v8::Local<v8::Object> obj,
209
+ bool use_bigint)
210
+ : FSReqBase(
211
+ binding_data, obj, AsyncWrap::PROVIDER_FSREQPROMISE, use_bigint),
212
+ stats_field_array_(
213
+ env()->isolate(),
214
+ static_cast<size_t>(FsStatsOffset::kFsStatsFieldsNumber)),
215
+ statfs_field_array_(
216
+ env()->isolate(),
217
+ static_cast<size_t>(FsStatFsOffset::kFsStatFsFieldsNumber)) {}
218
+
219
+ template <typename AliasedBufferT>
220
+ void FSReqPromise<AliasedBufferT>::Reject(v8::Local<v8::Value> reject) {
221
+ finished_ = true;
222
+ v8::HandleScope scope(env()->isolate());
223
+ InternalCallbackScope callback_scope(this);
224
+ v8::Local<v8::Value> value;
225
+ if (!object()
226
+ ->Get(env()->context(), env()->promise_string())
227
+ .ToLocal(&value)) {
228
+ // If we hit this, getting the value from the object failed and
229
+ // an error was likely scheduled. We could try to reject the promise
230
+ // but let's just allow the error to propagate.
231
+ return;
232
+ }
233
+ v8::Local<v8::Promise::Resolver> resolver = value.As<v8::Promise::Resolver>();
234
+ USE(resolver->Reject(env()->context(), reject).FromJust());
235
+ }
236
+
237
+ template <typename AliasedBufferT>
238
+ void FSReqPromise<AliasedBufferT>::Resolve(v8::Local<v8::Value> value) {
239
+ finished_ = true;
240
+ v8::HandleScope scope(env()->isolate());
241
+ InternalCallbackScope callback_scope(this);
242
+ v8::Local<v8::Value> val;
243
+ if (!object()->Get(env()->context(), env()->promise_string()).ToLocal(&val)) {
244
+ // If we hit this, getting the value from the object failed and
245
+ // an error was likely scheduled. We could try to reject the promise
246
+ // but let's just allow the error to propagate.
247
+ return;
248
+ }
249
+ v8::Local<v8::Promise::Resolver> resolver = val.As<v8::Promise::Resolver>();
250
+ USE(resolver->Resolve(env()->context(), value).FromJust());
251
+ }
252
+
253
+ template <typename AliasedBufferT>
254
+ void FSReqPromise<AliasedBufferT>::ResolveStat(const uv_stat_t* stat) {
255
+ FillStatsArray(&stats_field_array_, stat);
256
+ Resolve(stats_field_array_.GetJSArray());
257
+ }
258
+
259
+ template <typename AliasedBufferT>
260
+ void FSReqPromise<AliasedBufferT>::ResolveStatFs(const uv_statfs_t* stat) {
261
+ FillStatFsArray(&statfs_field_array_, stat);
262
+ Resolve(statfs_field_array_.GetJSArray());
263
+ }
264
+
265
+ template <typename AliasedBufferT>
266
+ void FSReqPromise<AliasedBufferT>::SetReturnValue(
267
+ const v8::FunctionCallbackInfo<v8::Value>& args) {
268
+ v8::Local<v8::Value> val;
269
+ if (!object()->Get(env()->context(), env()->promise_string()).ToLocal(&val)) {
270
+ // If we hit this, getting the value from the object failed and
271
+ // an error was likely scheduled. We could try to reject the promise
272
+ // but let's just allow the error to propagate.
273
+ return;
274
+ }
275
+ v8::Local<v8::Promise::Resolver> resolver = val.As<v8::Promise::Resolver>();
276
+ args.GetReturnValue().Set(resolver->GetPromise());
277
+ }
278
+
279
+ template <typename AliasedBufferT>
280
+ void FSReqPromise<AliasedBufferT>::MemoryInfo(MemoryTracker* tracker) const {
281
+ FSReqBase::MemoryInfo(tracker);
282
+ tracker->TrackField("stats_field_array", stats_field_array_);
283
+ tracker->TrackField("statfs_field_array", statfs_field_array_);
284
+ }
285
+
286
+ FSReqBase* GetReqWrap(const v8::FunctionCallbackInfo<v8::Value>& args,
287
+ int index,
288
+ bool use_bigint) {
289
+ v8::Local<v8::Value> value = args[index];
290
+ FSReqBase* result = nullptr;
291
+ if (value->IsObject()) {
292
+ result = Unwrap<FSReqBase>(value.As<v8::Object>());
293
+ } else {
294
+ Realm* realm = Realm::GetCurrent(args);
295
+ BindingData* binding_data = realm->GetBindingData<BindingData>();
296
+
297
+ if (value->StrictEquals(realm->isolate_data()->fs_use_promises_symbol())) {
298
+ if (use_bigint) {
299
+ result =
300
+ FSReqPromise<AliasedBigInt64Array>::New(binding_data, use_bigint);
301
+ } else {
302
+ result =
303
+ FSReqPromise<AliasedFloat64Array>::New(binding_data, use_bigint);
304
+ }
305
+ }
306
+ }
307
+ if (result != nullptr) {
308
+ result->SetReturnValue(args);
309
+ }
310
+ return result;
311
+ }
312
+
313
+ // Returns nullptr if the operation fails from the start.
314
+ template <typename Func, typename... Args>
315
+ FSReqBase* AsyncDestCall(Environment* env, FSReqBase* req_wrap,
316
+ const v8::FunctionCallbackInfo<v8::Value>& args,
317
+ const char* syscall, const char* dest,
318
+ size_t len, enum encoding enc, uv_fs_cb after,
319
+ Func fn, Args... fn_args) {
320
+ CHECK_NOT_NULL(req_wrap);
321
+ req_wrap->Init(syscall, dest, len, enc);
322
+ int err = req_wrap->Dispatch(fn, fn_args..., after);
323
+ if (err < 0) {
324
+ uv_fs_t* uv_req = req_wrap->req();
325
+ uv_req->result = err;
326
+ uv_req->path = nullptr;
327
+ after(uv_req); // after may delete req_wrap if there is an error
328
+ req_wrap = nullptr;
329
+ }
330
+ return req_wrap;
331
+ }
332
+
333
+ // Returns nullptr if the operation fails from the start.
334
+ template <typename Func, typename... Args>
335
+ FSReqBase* AsyncCall(Environment* env,
336
+ FSReqBase* req_wrap,
337
+ const v8::FunctionCallbackInfo<v8::Value>& args,
338
+ const char* syscall, enum encoding enc,
339
+ uv_fs_cb after, Func fn, Args... fn_args) {
340
+ return AsyncDestCall(env, req_wrap, args,
341
+ syscall, nullptr, 0, enc,
342
+ after, fn, fn_args...);
343
+ }
344
+
345
+ // Template counterpart of SYNC_CALL, except that it only puts
346
+ // the error number and the syscall in the context instead of
347
+ // creating an error in the C++ land.
348
+ // ctx must be checked using value->IsObject() before being passed.
349
+ template <typename Func, typename... Args>
350
+ int SyncCall(Environment* env, v8::Local<v8::Value> ctx,
351
+ FSReqWrapSync* req_wrap, const char* syscall,
352
+ Func fn, Args... args) {
353
+ env->PrintSyncTrace();
354
+ int err = fn(env->event_loop(), &(req_wrap->req), args..., nullptr);
355
+ if (err < 0) {
356
+ v8::Local<v8::Context> context = env->context();
357
+ v8::Local<v8::Object> ctx_obj = ctx.As<v8::Object>();
358
+ v8::Isolate* isolate = env->isolate();
359
+ ctx_obj->Set(context,
360
+ env->errno_string(),
361
+ v8::Integer::New(isolate, err)).Check();
362
+ ctx_obj->Set(context,
363
+ env->syscall_string(),
364
+ OneByteString(isolate, syscall)).Check();
365
+ }
366
+ return err;
367
+ }
368
+
369
+ // Similar to SyncCall but throws immediately if there is an error.
370
+ template <typename Predicate, typename Func, typename... Args>
371
+ int SyncCallAndThrowIf(Predicate should_throw,
372
+ Environment* env,
373
+ FSReqWrapSync* req_wrap,
374
+ Func fn,
375
+ Args... args) {
376
+ env->PrintSyncTrace();
377
+ int result = fn(nullptr, &(req_wrap->req), args..., nullptr);
378
+ if (should_throw(result)) {
379
+ env->ThrowUVException(result,
380
+ req_wrap->syscall_p,
381
+ nullptr,
382
+ req_wrap->path_p,
383
+ req_wrap->dest_p);
384
+ }
385
+ return result;
386
+ }
387
+
388
+ constexpr bool is_uv_error(int result) {
389
+ return result < 0;
390
+ }
391
+
392
+ // Similar to SyncCall but throws immediately if there is an error.
393
+ template <typename Func, typename... Args>
394
+ int SyncCallAndThrowOnError(Environment* env,
395
+ FSReqWrapSync* req_wrap,
396
+ Func fn,
397
+ Args... args) {
398
+ return SyncCallAndThrowIf(is_uv_error, env, req_wrap, fn, args...);
399
+ }
400
+
401
+ } // namespace fs
402
+ } // namespace node
403
+
404
+ #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
405
+
406
+ #endif // SRC_NODE_FILE_INL_H_