visaljs 0.0.7 → 0.0.8

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 (428) hide show
  1. package/README.md +63 -2
  2. package/THIRD_PARTY_LICENSES +1216 -0
  3. package/cli.js +4413 -324
  4. package/node/include/js_node.h +57 -1
  5. package/node/include/js_uv.h +8 -1
  6. package/node/prelude/_stream_duplex.js +4 -0
  7. package/node/prelude/_stream_passthrough.js +4 -0
  8. package/node/prelude/_stream_readable.js +4 -0
  9. package/node/prelude/_stream_transform.js +4 -0
  10. package/node/prelude/_stream_writable.js +4 -0
  11. package/node/prelude/assert.js +1334 -0
  12. package/node/prelude/assert_strict.js +12 -0
  13. package/node/prelude/async_hooks.js +1 -1
  14. package/node/prelude/buffer.js +43 -3
  15. package/node/prelude/child_process.js +1098 -0
  16. package/node/prelude/cluster.js +52 -0
  17. package/node/prelude/console.js +328 -0
  18. package/node/prelude/constants.js +10 -0
  19. package/node/prelude/crypto.js +1 -1
  20. package/node/prelude/diagnostics_channel.js +1 -1
  21. package/node/prelude/dns.js +1 -1
  22. package/node/prelude/domain.js +115 -0
  23. package/node/prelude/events.js +144 -16
  24. package/node/prelude/fs.js +1138 -151
  25. package/node/prelude/fs_promises.js +117 -11
  26. package/node/prelude/http.js +104 -27
  27. package/node/prelude/http2.js +1 -1
  28. package/node/prelude/https.js +148 -0
  29. package/node/prelude/inspector.js +27 -0
  30. package/node/prelude/inspector_promises.js +4 -0
  31. package/node/prelude/internal/async_context.js +1 -1
  32. package/node/prelude/internal/buffer_transcode.js +44 -0
  33. package/node/prelude/internal/comparisons.js +916 -0
  34. package/node/prelude/internal/compression_streams.js +153 -0
  35. package/node/prelude/internal/crypto/asym.js +27 -14
  36. package/node/prelude/internal/crypto/cipher.js +16 -5
  37. package/node/prelude/internal/crypto/diffiehellman.js +3 -2
  38. package/node/prelude/internal/crypto/hash.js +2 -1
  39. package/node/prelude/internal/crypto/kdf.js +14 -9
  40. package/node/prelude/internal/crypto/keys.js +63 -50
  41. package/node/prelude/internal/crypto/random.js +2 -1
  42. package/node/prelude/internal/crypto/util.js +4 -4
  43. package/node/prelude/internal/dotenv.js +98 -0
  44. package/node/prelude/internal/errors.js +21 -5
  45. package/node/prelude/internal/events_extras.js +116 -0
  46. package/node/prelude/internal/events_on.js +100 -0
  47. package/node/prelude/internal/features.js +55 -0
  48. package/node/prelude/internal/fetch.js +364 -0
  49. package/node/prelude/internal/form_data.js +376 -0
  50. package/node/prelude/internal/fs_bigint_stats.js +41 -0
  51. package/node/prelude/internal/fs_blob.js +19 -0
  52. package/node/prelude/internal/fs_cp.js +709 -0
  53. package/node/prelude/internal/fs_dir.js +166 -0
  54. package/node/prelude/internal/fs_filehandle.js +287 -0
  55. package/node/prelude/internal/fs_glob.js +296 -0
  56. package/node/prelude/internal/fs_statfs.js +42 -0
  57. package/node/prelude/internal/fs_stats.js +89 -0
  58. package/node/prelude/internal/fs_streams.js +541 -0
  59. package/node/prelude/internal/fs_utils.js +286 -0
  60. package/node/prelude/internal/fs_watch.js +580 -0
  61. package/node/prelude/internal/http_agent.js +26 -0
  62. package/node/prelude/internal/mime.js +249 -0
  63. package/node/prelude/internal/net.js +1 -0
  64. package/node/prelude/internal/parse_args.js +288 -0
  65. package/node/prelude/internal/perf_histogram.js +435 -0
  66. package/node/prelude/internal/perf_observe.js +119 -0
  67. package/node/prelude/internal/performance_global.js +19 -0
  68. package/node/prelude/internal/process_events.js +49 -1
  69. package/node/prelude/internal/process_memory.js +14 -0
  70. package/node/prelude/internal/process_more.js +414 -0
  71. package/node/prelude/internal/process_signals.js +2 -1
  72. package/node/prelude/internal/process_stdin.js +52 -0
  73. package/node/prelude/internal/process_stdio.js +36 -0
  74. package/node/prelude/internal/querystring.js +0 -0
  75. package/node/prelude/internal/readline.js +338 -0
  76. package/node/prelude/internal/socketaddress.js +8 -4
  77. package/node/prelude/internal/source_map.js +122 -0
  78. package/node/prelude/internal/stream_compose.js +74 -0
  79. package/node/prelude/internal/stream_from.js +6 -0
  80. package/node/prelude/internal/stream_operators.js +23 -0
  81. package/node/prelude/internal/stream_pipeline.js +7 -0
  82. package/node/prelude/internal/stream_transform.js +10 -0
  83. package/node/prelude/internal/stream_web_adapters.js +143 -0
  84. package/node/prelude/internal/streams/add_abort_signal.js +58 -0
  85. package/node/prelude/internal/streams/compose.js +244 -0
  86. package/node/prelude/internal/streams/destroy.js +358 -0
  87. package/node/prelude/internal/streams/duplex.js +199 -0
  88. package/node/prelude/internal/streams/duplexify.js +378 -0
  89. package/node/prelude/internal/streams/end_of_stream.js +387 -0
  90. package/node/prelude/internal/streams/errors.js +216 -0
  91. package/node/prelude/internal/streams/from.js +211 -0
  92. package/node/prelude/internal/streams/legacy.js +120 -0
  93. package/node/prelude/internal/streams/operators.js +375 -0
  94. package/node/prelude/internal/streams/passthrough.js +45 -0
  95. package/node/prelude/internal/streams/pipeline.js +468 -0
  96. package/node/prelude/internal/streams/readable.js +1835 -0
  97. package/node/prelude/internal/streams/state.js +48 -0
  98. package/node/prelude/internal/streams/transform.js +203 -0
  99. package/node/prelude/internal/streams/utils.js +355 -0
  100. package/node/prelude/internal/streams/validators.js +108 -0
  101. package/node/prelude/internal/streams/writable.js +1160 -0
  102. package/node/prelude/internal/structured_clone.js +238 -0
  103. package/node/prelude/internal/system_errors.js +37 -0
  104. package/node/prelude/internal/test_runner/mock.js +431 -0
  105. package/node/prelude/internal/test_runner/reporters.js +404 -0
  106. package/node/prelude/internal/test_runner/test.js +1571 -0
  107. package/node/prelude/internal/timers.js +38 -7
  108. package/node/prelude/internal/timers_global.js +1 -1
  109. package/node/prelude/internal/tls/common.js +8 -2
  110. package/node/prelude/internal/tls/wrap.js +3 -15
  111. package/node/prelude/internal/tls/x509.js +1 -1
  112. package/node/prelude/internal/tty_read_stream.js +39 -0
  113. package/node/prelude/internal/tty_streams.js +3 -0
  114. package/node/prelude/internal/util_debuglog.js +68 -0
  115. package/node/prelude/internal/util_diff.js +63 -0
  116. package/node/prelude/internal/util_more.js +111 -0
  117. package/node/prelude/internal/util_styles.js +76 -0
  118. package/node/prelude/internal/zlib_engines.js +1 -1
  119. package/node/prelude/module.js +194 -7
  120. package/node/prelude/net.js +2 -1
  121. package/node/prelude/os.js +88 -11
  122. package/node/prelude/path.js +11 -7
  123. package/node/prelude/path_posix.js +1 -1
  124. package/node/prelude/path_win32.js +1 -1
  125. package/node/prelude/perf_hooks.js +147 -0
  126. package/node/prelude/process.js +36 -1
  127. package/node/prelude/punycode.js +188 -0
  128. package/node/prelude/querystring.js +1 -1
  129. package/node/prelude/readline.js +8 -0
  130. package/node/prelude/readline_promises.js +88 -0
  131. package/node/prelude/repl.js +38 -0
  132. package/node/prelude/sea.js +23 -0
  133. package/node/prelude/stream.js +70 -1332
  134. package/node/prelude/stream_consumers.js +34 -0
  135. package/node/prelude/stream_promises.js +1 -1
  136. package/node/prelude/stream_web.js +15 -2
  137. package/node/prelude/string_decoder.js +1 -1
  138. package/node/prelude/sys.js +7 -0
  139. package/node/prelude/test.js +56 -0
  140. package/node/prelude/test_reporters.js +269 -0
  141. package/node/prelude/timers.js +7 -84
  142. package/node/prelude/timers_promises.js +1 -1
  143. package/node/prelude/tls.js +2 -1
  144. package/node/prelude/trace_events.js +52 -0
  145. package/node/prelude/tty.js +10 -4
  146. package/node/prelude/url.js +88 -27
  147. package/node/prelude/util.js +121 -5
  148. package/node/prelude/util_types.js +4 -3
  149. package/node/prelude/v8.js +814 -0
  150. package/node/prelude/vm.js +86 -0
  151. package/node/prelude/wasi.js +10 -0
  152. package/node/prelude/worker_threads.js +56 -0
  153. package/node/prelude/zlib.js +58 -25
  154. package/node/src/host_brotli.c +59 -11
  155. package/node/src/host_fs.c +342 -11
  156. package/node/src/host_fswatch.c +170 -0
  157. package/node/src/host_http.c +143 -20
  158. package/node/src/host_loop.c +25 -2
  159. package/node/src/host_net.c +55 -7
  160. package/node/src/host_os.c +55 -1
  161. package/node/src/host_proc.c +291 -0
  162. package/node/src/host_process.c +488 -0
  163. package/node/src/host_sys.c +64 -2
  164. package/node/src/host_zlib.c +27 -7
  165. package/node/src/host_zstd.c +41 -6
  166. package/node/third_party/hdrhistogram/LICENSE +42 -0
  167. package/node/third_party/hdrhistogram/README.md +5 -0
  168. package/node/third_party/libuv/LICENSE +0 -0
  169. package/node/third_party/libuv/LICENSE-extra +36 -0
  170. package/node/third_party/libuv/include/uv/aix.h +0 -0
  171. package/node/third_party/libuv/include/uv/bsd.h +0 -0
  172. package/node/third_party/libuv/include/uv/darwin.h +0 -0
  173. package/node/third_party/libuv/include/uv/errno.h +0 -0
  174. package/node/third_party/libuv/include/uv/linux.h +0 -0
  175. package/node/third_party/libuv/include/uv/os390.h +0 -0
  176. package/node/third_party/libuv/include/uv/posix.h +0 -0
  177. package/node/third_party/libuv/include/uv/sunos.h +0 -0
  178. package/node/third_party/libuv/include/uv/threadpool.h +0 -0
  179. package/node/third_party/libuv/include/uv/tree.h +0 -0
  180. package/node/third_party/libuv/include/uv/unix.h +0 -0
  181. package/node/third_party/libuv/include/uv/version.h +0 -0
  182. package/node/third_party/libuv/include/uv/win.h +0 -0
  183. package/node/third_party/libuv/include/uv.h +0 -0
  184. package/node/third_party/libuv/src/fs-poll.c +0 -0
  185. package/node/third_party/libuv/src/heap-inl.h +0 -0
  186. package/node/third_party/libuv/src/idna.c +0 -0
  187. package/node/third_party/libuv/src/idna.h +0 -0
  188. package/node/third_party/libuv/src/inet.c +0 -0
  189. package/node/third_party/libuv/src/queue.h +0 -0
  190. package/node/third_party/libuv/src/random.c +0 -0
  191. package/node/third_party/libuv/src/strscpy.c +0 -0
  192. package/node/third_party/libuv/src/strscpy.h +0 -0
  193. package/node/third_party/libuv/src/strtok.c +0 -0
  194. package/node/third_party/libuv/src/strtok.h +0 -0
  195. package/node/third_party/libuv/src/thread-common.c +0 -0
  196. package/node/third_party/libuv/src/threadpool.c +0 -0
  197. package/node/third_party/libuv/src/timer.c +0 -0
  198. package/node/third_party/libuv/src/unix/async.c +0 -0
  199. package/node/third_party/libuv/src/unix/bsd-ifaddrs.c +0 -0
  200. package/node/third_party/libuv/src/unix/core.c +0 -0
  201. package/node/third_party/libuv/src/unix/darwin-proctitle.c +0 -0
  202. package/node/third_party/libuv/src/unix/darwin-stub.h +0 -0
  203. package/node/third_party/libuv/src/unix/darwin-syscalls.h +0 -0
  204. package/node/third_party/libuv/src/unix/darwin.c +0 -0
  205. package/node/third_party/libuv/src/unix/dl.c +0 -0
  206. package/node/third_party/libuv/src/unix/fs.c +0 -0
  207. package/node/third_party/libuv/src/unix/fsevents.c +0 -0
  208. package/node/third_party/libuv/src/unix/getaddrinfo.c +0 -0
  209. package/node/third_party/libuv/src/unix/getnameinfo.c +0 -0
  210. package/node/third_party/libuv/src/unix/internal.h +0 -0
  211. package/node/third_party/libuv/src/unix/kqueue.c +0 -0
  212. package/node/third_party/libuv/src/unix/linux.c +0 -0
  213. package/node/third_party/libuv/src/unix/loop-watcher.c +0 -0
  214. package/node/third_party/libuv/src/unix/loop.c +0 -0
  215. package/node/third_party/libuv/src/unix/pipe.c +0 -0
  216. package/node/third_party/libuv/src/unix/poll.c +0 -0
  217. package/node/third_party/libuv/src/unix/process.c +0 -0
  218. package/node/third_party/libuv/src/unix/procfs-exepath.c +0 -0
  219. package/node/third_party/libuv/src/unix/proctitle.c +0 -0
  220. package/node/third_party/libuv/src/unix/random-devurandom.c +0 -0
  221. package/node/third_party/libuv/src/unix/random-getentropy.c +0 -0
  222. package/node/third_party/libuv/src/unix/random-getrandom.c +0 -0
  223. package/node/third_party/libuv/src/unix/random-sysctl-linux.c +0 -0
  224. package/node/third_party/libuv/src/unix/signal.c +0 -0
  225. package/node/third_party/libuv/src/unix/stream.c +0 -0
  226. package/node/third_party/libuv/src/unix/tcp.c +0 -0
  227. package/node/third_party/libuv/src/unix/thread.c +0 -0
  228. package/node/third_party/libuv/src/unix/tty.c +0 -0
  229. package/node/third_party/libuv/src/unix/udp.c +0 -0
  230. package/node/third_party/libuv/src/uv-common.c +0 -0
  231. package/node/third_party/libuv/src/uv-common.h +0 -0
  232. package/node/third_party/libuv/src/uv-data-getter-setters.c +0 -0
  233. package/node/third_party/libuv/src/version.c +0 -0
  234. package/node/third_party/llhttp/LICENSE +0 -0
  235. package/node/third_party/llhttp/api.c +0 -0
  236. package/node/third_party/llhttp/http.c +0 -0
  237. package/node/third_party/llhttp/llhttp.c +0 -0
  238. package/node/third_party/llhttp/llhttp.h +0 -0
  239. package/node/third_party/nodejs/LICENSE +47 -0
  240. package/node/third_party/nodejs/README.md +5 -0
  241. package/node/third_party/parseargs/LICENSE +21 -0
  242. package/node/third_party/parseargs/README.md +5 -0
  243. package/node/third_party/punycode/LICENSE +20 -0
  244. package/node/third_party/punycode/README.md +5 -0
  245. package/node/third_party/zlib/LICENSE.chromium +27 -0
  246. package/package.json +1 -1
  247. package/prebuilt/darwin-arm64/boringssl-4a47438eaf7e73ba.a +0 -0
  248. package/prebuilt/darwin-arm64/brotli-7995bbdacc52e51c.a +0 -0
  249. package/prebuilt/darwin-arm64/uv-72ab666eae197cd8.a +0 -0
  250. package/prebuilt/darwin-arm64/zlib-4ce2317a4c3f5fb5.a +0 -0
  251. package/prebuilt/darwin-arm64/zstd-015315ac7c784c73.a +0 -0
  252. package/prebuilt/darwin-x64/boringssl-4a47438eaf7e73ba.a +0 -0
  253. package/prebuilt/darwin-x64/brotli-7995bbdacc52e51c.a +0 -0
  254. package/prebuilt/darwin-x64/uv-72ab666eae197cd8.a +0 -0
  255. package/prebuilt/darwin-x64/zlib-4ce2317a4c3f5fb5.a +0 -0
  256. package/prebuilt/darwin-x64/zstd-015315ac7c784c73.a +0 -0
  257. package/prebuilt/linux-arm64/boringssl-4a47438eaf7e73ba.a +0 -0
  258. package/prebuilt/linux-arm64/brotli-65481ff838ce9def.a +0 -0
  259. package/prebuilt/linux-arm64/uv-f1353f50ff983f3c.a +0 -0
  260. package/prebuilt/linux-arm64/zlib-4ce2317a4c3f5fb5.a +0 -0
  261. package/prebuilt/linux-arm64/zstd-015315ac7c784c73.a +0 -0
  262. package/prebuilt/linux-arm64-musl/boringssl-4a47438eaf7e73ba.a +0 -0
  263. package/prebuilt/linux-arm64-musl/brotli-65481ff838ce9def.a +0 -0
  264. package/prebuilt/linux-arm64-musl/uv-f1353f50ff983f3c.a +0 -0
  265. package/prebuilt/linux-arm64-musl/zlib-4ce2317a4c3f5fb5.a +0 -0
  266. package/prebuilt/linux-arm64-musl/zstd-015315ac7c784c73.a +0 -0
  267. package/prebuilt/linux-x64/boringssl-4a47438eaf7e73ba.a +0 -0
  268. package/prebuilt/linux-x64/brotli-65481ff838ce9def.a +0 -0
  269. package/prebuilt/linux-x64/uv-f1353f50ff983f3c.a +0 -0
  270. package/prebuilt/linux-x64/zlib-4ce2317a4c3f5fb5.a +0 -0
  271. package/prebuilt/linux-x64/zstd-015315ac7c784c73.a +0 -0
  272. package/prebuilt/linux-x64-musl/boringssl-4a47438eaf7e73ba.a +0 -0
  273. package/prebuilt/linux-x64-musl/brotli-65481ff838ce9def.a +0 -0
  274. package/prebuilt/linux-x64-musl/uv-f1353f50ff983f3c.a +0 -0
  275. package/prebuilt/linux-x64-musl/zlib-4ce2317a4c3f5fb5.a +0 -0
  276. package/prebuilt/linux-x64-musl/zstd-015315ac7c784c73.a +0 -0
  277. package/prebuilt/win32-x64/boringssl-ce573858472b7fc9.a +0 -0
  278. package/prebuilt/win32-x64/brotli-20d86a61f30baeb3.a +0 -0
  279. package/prebuilt/win32-x64/uv-b11bae65d7fced82.a +0 -0
  280. package/prebuilt/win32-x64/zlib-4ce2317a4c3f5fb5.a +0 -0
  281. package/prebuilt/win32-x64/zstd-015315ac7c784c73.a +0 -0
  282. package/runtime/include/js_atoms.gen.h +0 -0
  283. package/runtime/include/js_atoms.h +1 -1
  284. package/runtime/include/js_bigint.h +1 -1
  285. package/runtime/include/js_buffer.h +4 -4
  286. package/runtime/include/js_builtins.h +41 -3
  287. package/runtime/include/js_console.h +9 -4
  288. package/runtime/include/js_convert.h +1 -1
  289. package/runtime/include/js_core.def +5 -4
  290. package/runtime/include/js_crypto.h +1 -1
  291. package/runtime/include/js_error.h +1 -1
  292. package/runtime/include/js_exception.h +21 -1
  293. package/runtime/include/js_function.h +33 -9
  294. package/runtime/include/js_gc.h +172 -30
  295. package/runtime/include/js_generator.h +2 -2
  296. package/runtime/include/js_host.h +19 -1
  297. package/runtime/include/js_jobs.h +5 -5
  298. package/runtime/include/js_module.h +1 -1
  299. package/runtime/include/js_object.h +142 -15
  300. package/runtime/include/js_ops.h +107 -5
  301. package/runtime/include/js_promise.h +3 -3
  302. package/runtime/include/js_regexp.h +1 -1
  303. package/runtime/include/js_runtime.h +0 -0
  304. package/runtime/include/js_symbol.h +1 -1
  305. package/runtime/include/js_web.h +2 -1
  306. package/runtime/include/jscell.h +22 -15
  307. package/runtime/include/jscontext.h +74 -39
  308. package/runtime/include/jsnum.h +1 -1
  309. package/runtime/include/jsstring.h +19 -6
  310. package/runtime/include/jsvalue.h +7 -3
  311. package/runtime/src/arguments.c +2 -2
  312. package/runtime/src/array.c +4 -1
  313. package/runtime/src/arraybuffer.c +19 -7
  314. package/runtime/src/async_iter.c +4 -3
  315. package/runtime/src/atoms.c +1 -1
  316. package/runtime/src/base64.c +2 -2
  317. package/runtime/src/bigint.c +1 -1
  318. package/runtime/src/blob.c +22 -9
  319. package/runtime/src/boringssl_support.cc +1 -1
  320. package/runtime/src/buffer.c +299 -91
  321. package/runtime/src/builtin_table.c +1 -1
  322. package/runtime/src/builtins.c +30 -4
  323. package/runtime/src/builtins_util.h +0 -0
  324. package/runtime/src/collections.c +18 -3
  325. package/runtime/src/components.c +1 -1
  326. package/runtime/src/console.c +14 -7
  327. package/runtime/src/convert.c +0 -0
  328. package/runtime/src/core_all.c +1 -1
  329. package/runtime/src/crypto.c +1 -1
  330. package/runtime/src/crypto_asym.c +1 -1
  331. package/runtime/src/crypto_bn.c +1 -1
  332. package/runtime/src/crypto_cipher.c +10 -3
  333. package/runtime/src/crypto_hash.c +1 -1
  334. package/runtime/src/crypto_host.c +1 -1
  335. package/runtime/src/crypto_internal.h +1 -1
  336. package/runtime/src/crypto_kdf.c +1 -1
  337. package/runtime/src/crypto_key.c +14 -1
  338. package/runtime/src/crypto_pkey.c +1 -1
  339. package/runtime/src/crypto_subtle.c +142 -58
  340. package/runtime/src/crypto_tls.c +1 -1
  341. package/runtime/src/date.c +5 -2
  342. package/runtime/src/domexception.c +2 -2
  343. package/runtime/src/elements.c +56 -17
  344. package/runtime/src/elements.h +7 -2
  345. package/runtime/src/encoding.c +1 -1
  346. package/runtime/src/error.c +4 -4
  347. package/runtime/src/events.c +23 -14
  348. package/runtime/src/exception.c +1 -1
  349. package/runtime/src/fetch.c +241 -17
  350. package/runtime/src/function.c +31 -19
  351. package/runtime/src/gc.c +1716 -207
  352. package/runtime/src/gc_visit.h +87 -0
  353. package/runtime/src/generator.c +5 -3
  354. package/runtime/src/global.c +14 -6
  355. package/runtime/src/headers.c +10 -10
  356. package/runtime/src/inspect.c +76 -17
  357. package/runtime/src/internal.h +5 -2
  358. package/runtime/src/iterate.c +94 -2
  359. package/runtime/src/iterator.c +1 -1
  360. package/runtime/src/jobs.c +11 -5
  361. package/runtime/src/jsnum.c +2 -2
  362. package/runtime/src/json.c +1 -1
  363. package/runtime/src/math.c +9 -1
  364. package/runtime/src/module.c +3 -3
  365. package/runtime/src/number.c +0 -0
  366. package/runtime/src/object.c +107 -74
  367. package/runtime/src/ops.c +21 -3
  368. package/runtime/src/os.c +192 -1
  369. package/runtime/src/os.h +33 -2
  370. package/runtime/src/process.c +73 -8
  371. package/runtime/src/promise.c +4 -4
  372. package/runtime/src/proxy.c +1 -1
  373. package/runtime/src/reflect.c +1 -1
  374. package/runtime/src/regexp.c +134 -2
  375. package/runtime/src/regexp_anchor.h +1 -1
  376. package/runtime/src/regexp_message.h +1 -1
  377. package/runtime/src/shape.c +10 -19
  378. package/runtime/src/shape.h +0 -0
  379. package/runtime/src/streams.c +22 -8
  380. package/runtime/src/streams.h +0 -0
  381. package/runtime/src/string.c +64 -25
  382. package/runtime/src/string_builtins.c +7 -7
  383. package/runtime/src/symbol.c +2 -7
  384. package/runtime/src/test_host.c +3 -3
  385. package/runtime/src/tls_roots.gen.h +102 -620
  386. package/runtime/src/typedarray.c +8 -3
  387. package/runtime/src/tznames.gen.h +2 -1
  388. package/runtime/src/uri.c +1 -1
  389. package/runtime/src/url.c +42 -39
  390. package/runtime/src/weak.c +15 -12
  391. package/runtime/src/web.c +21 -3
  392. package/runtime/src/wrapper.c +0 -0
  393. package/runtime/src/writable.c +7 -6
  394. package/runtime/third_party/ada-idna/LICENSE-MIT +0 -0
  395. package/runtime/third_party/ada-idna/README.md +7 -7
  396. package/runtime/third_party/ada-idna/convert.mjs +89 -27
  397. package/runtime/third_party/ada-idna/idna.c +30 -31
  398. package/runtime/third_party/ada-idna/idna.h +0 -0
  399. package/runtime/third_party/ada-idna/idna_tables.h +2272 -1952
  400. package/runtime/third_party/boringssl/third_party/fiat/LICENSE +15 -0
  401. package/runtime/third_party/mozilla-ca/LICENSE +373 -0
  402. package/runtime/third_party/mozilla-ca/README.md +9 -0
  403. package/runtime/third_party/nodejs/LICENSE +47 -0
  404. package/runtime/third_party/nodejs/README.md +7 -0
  405. package/runtime/third_party/quickjs-dtoa/LICENSE +0 -0
  406. package/runtime/third_party/quickjs-dtoa/README.md +1 -1
  407. package/runtime/third_party/quickjs-dtoa/dtoa.c +0 -0
  408. package/runtime/third_party/quickjs-dtoa/dtoa.h +0 -0
  409. package/runtime/third_party/quickjs-dtoa/dtoa_compat.h +0 -0
  410. package/runtime/third_party/quickjs-regexp/LICENSE +0 -0
  411. package/runtime/third_party/quickjs-regexp/README.md +2 -2
  412. package/runtime/third_party/quickjs-regexp/cutils.c +0 -0
  413. package/runtime/third_party/quickjs-regexp/cutils.h +0 -0
  414. package/runtime/third_party/quickjs-regexp/libregexp-opcode.h +0 -0
  415. package/runtime/third_party/quickjs-regexp/libregexp.c +0 -0
  416. package/runtime/third_party/quickjs-regexp/libregexp.h +0 -0
  417. package/runtime/third_party/quickjs-regexp/libunicode-table.h +0 -0
  418. package/runtime/third_party/quickjs-regexp/libunicode.c +0 -0
  419. package/runtime/third_party/quickjs-regexp/libunicode.h +0 -0
  420. package/runtime/third_party/unicode/LICENSE +39 -0
  421. package/runtime/third_party/unicode/README.md +9 -0
  422. package/runtime/third_party/v8-ieee754/LICENSE +0 -0
  423. package/runtime/third_party/v8-ieee754/LICENSE.fdlibm +10 -0
  424. package/runtime/third_party/v8-ieee754/README.md +3 -2
  425. package/runtime/third_party/v8-ieee754/convert.py +0 -0
  426. package/runtime/third_party/v8-ieee754/ieee754.c +0 -0
  427. package/runtime/third_party/v8-ieee754/ieee754.h +0 -0
  428. package/runtime/tools/regexp_compile.c +2 -2
@@ -0,0 +1,364 @@
1
+ // The fetch global, as Node's (undici's, Node 24): Fetch's "main fetch" over node:http's and
2
+ // node:https's clients, for programs whose code names fetch (implicitModules in node/index.ts).
3
+ // The request is the fetch component's Request (runtime/src/fetch.c); it is sent with undici's
4
+ // headers in undici's order, redirects are followed as Fetch's HTTP-redirect fetch, and the
5
+ // response's body, decoded as its Content-Encoding says, is a ReadableStream. data: URLs are
6
+ // read here; blob: URLs (URL.createObjectURL makes none here), HTTP/2 and proxies aren't
7
+ // supported. A failure rejects with Node's TypeError "fetch failed", its cause the reason.
8
+ import { fetchHeaderList, fetchRequestBody, fetchResponse } from "visaljs:host";
9
+ import { Buffer } from "../buffer.js";
10
+ import { Agent as HttpAgent, request as httpRequest } from "../http.js";
11
+ import { Agent as HttpsAgent, request as httpsRequest } from "../https.js";
12
+ import { constants, createBrotliDecompress, createGunzip, createInflate, createInflateRaw, createZstdDecompress } from "../zlib.js";
13
+
14
+ /* undici's pools: kept-alive sockets, unref'd while free */
15
+ let httpAgent, httpsAgent;
16
+
17
+ /* Fetch's bad ports: a request to one fails */
18
+ const BAD_PORTS = new Set([1, 7, 9, 11, 13, 15, 17, 19, 20, 21, 22, 23, 25, 37, 42, 43, 53, 69, 77, 79, 87, 95, 101, 102, 103, 104,
19
+ 109, 110, 111, 113, 115, 117, 119, 123, 135, 137, 139, 143, 161, 179, 389, 427, 465, 512, 513, 514, 515, 526, 530, 531, 532,
20
+ 540, 548, 554, 556, 563, 587, 601, 636, 989, 990, 993, 995, 1719, 1720, 1723, 2049, 3659, 4045, 4190, 5060, 5061, 6000,
21
+ 6566, 6665, 6666, 6667, 6668, 6669, 6679, 6697, 10080]);
22
+ const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
23
+ const NULL_BODY_STATUSES = new Set([101, 103, 204, 205, 304]);
24
+ /* the headers that describe a body: dropped with it when a redirect changes the method */
25
+ const BODY_HEADERS = new Set(["content-encoding", "content-language", "content-location", "content-type", "content-length"]);
26
+ /* dropped on a redirect to another origin */
27
+ const CREDENTIAL_HEADERS = new Set(["authorization", "proxy-authorization", "cookie"]);
28
+
29
+ /** Fetch's network error: Node's TypeError "fetch failed", its cause the reason. */
30
+ function networkError(cause) {
31
+ return new TypeError("fetch failed", { cause: typeof cause === "string" ? new Error(cause) : cause });
32
+ }
33
+
34
+ /** The reason a fetch aborted with: the signal's (an AbortError DOMException by default). */
35
+ function abortReason(signal) {
36
+ return signal.reason === undefined ? new DOMException("This operation was aborted", "AbortError") : signal.reason;
37
+ }
38
+
39
+ /** An index of a header in a flat [name, value, …] list, by its lowercase name, or -1. */
40
+ function headerIndex(list, lower) {
41
+ for (let i = 0; i < list.length; i += 2) if (list[i].toLowerCase() === lower) return i;
42
+ return -1;
43
+ }
44
+
45
+ /** The list without the headers `drop` names (lowercase). */
46
+ function withoutHeaders(list, drop) {
47
+ const out = [];
48
+ for (let i = 0; i < list.length; i += 2) if (!drop.has(list[i].toLowerCase())) out.push(list[i], list[i + 1]);
49
+ return out;
50
+ }
51
+
52
+ /** A URL serialized without its fragment, as Response's url is. */
53
+ function withoutFragment(url) {
54
+ const hash = url.indexOf("#");
55
+ return hash === -1 ? url : url.slice(0, hash);
56
+ }
57
+
58
+ /* ---- data: URLs (Fetch's data: URL processor) ------------------------------------------------- */
59
+
60
+ /** A data: URL's response, or a network error. */
61
+ function fetchDataURL(href) {
62
+ const input = withoutFragment(href).slice(5);
63
+ const comma = input.indexOf(",");
64
+ if (comma === -1) throw networkError("invalid data: URL");
65
+ let mime = input.slice(0, comma).replace(/^[\t\n\f\r ]+|[\t\n\f\r ]+$/g, "");
66
+ let bytes = Buffer.from(decodeURIComponentBytes(input.slice(comma + 1)));
67
+ const base64 = /;[\t\n\f\r ]*base64[\t\n\f\r ]*$/i.exec(mime);
68
+ if (base64) {
69
+ mime = mime.slice(0, base64.index);
70
+ const text = bytes.toString("latin1").replace(/[\t\n\f\r ]/g, "");
71
+ if (/[^A-Za-z0-9+/=]/.test(text) || /=[^=]/.test(text) || (text.replace(/=+$/, "").length % 4 === 1))
72
+ throw networkError("invalid data: URL");
73
+ bytes = Buffer.from(text, "base64");
74
+ }
75
+ if (mime.startsWith(";")) mime = "text/plain" + mime;
76
+ const type = serializeMime(mime) ?? "text/plain;charset=US-ASCII";
77
+ const headers = new Headers();
78
+ headers.append("content-type", type);
79
+ return fetchResponse(200, "OK", headers, new Response(bytes).body, href, false);
80
+ }
81
+
82
+ /** Percent-decoded bytes of a URL's text (its other characters as they are, UTF-8). */
83
+ function decodeURIComponentBytes(text) {
84
+ const raw = Buffer.from(text, "utf8");
85
+ const out = [];
86
+ for (let i = 0; i < raw.length; i++) {
87
+ const hex = (c) => (c >= 48 && c <= 57) || (c >= 65 && c <= 70) || (c >= 97 && c <= 102);
88
+ if (raw[i] === 37 && i + 2 < raw.length && hex(raw[i + 1]) && hex(raw[i + 2])) {
89
+ out.push(parseInt(String.fromCharCode(raw[i + 1], raw[i + 2]), 16));
90
+ i += 2;
91
+ } else out.push(raw[i]);
92
+ }
93
+ return out;
94
+ }
95
+
96
+ /** A MIME type's serialization (WHATWG MIME Sniffing's parse, simplified), or null if it isn't one. */
97
+ function serializeMime(text) {
98
+ const m = /^([!#$%&'*+.^_`|~0-9A-Za-z-]+)\/([!#$%&'*+.^_`|~0-9A-Za-z-]+)[\t\n\r ]*(.*)$/s.exec(text);
99
+ if (!m) return null;
100
+ let out = `${m[1].toLowerCase()}/${m[2].toLowerCase()}`;
101
+ const seen = new Set();
102
+ for (const param of m[3].split(";").slice(1)) {
103
+ const eq = param.indexOf("=");
104
+ if (eq === -1) continue;
105
+ const name = param.slice(0, eq).replace(/^[\t\n\r ]+/, "").toLowerCase();
106
+ let value = param.slice(eq + 1).replace(/[\t\n\r ]+$/, "");
107
+ if (!name || !/^[!#$%&'*+.^_`|~0-9a-z-]+$/.test(name) || seen.has(name) || !value) continue;
108
+ if (value.startsWith('"')) value = value.slice(1).replace(/".*$/s, "").replace(/\\(.)/g, "$1");
109
+ seen.add(name);
110
+ out += `;${name}=${/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(value) ? value : `"${value.replace(/(["\\])/g, "\\$1")}"`}`;
111
+ }
112
+ return out;
113
+ }
114
+
115
+ /* ---- the response's body ---------------------------------------------------------------------- */
116
+
117
+ /** The decoders a Content-Encoding names, last applied first; none for one undici doesn't know. */
118
+ function decoders(encoding) {
119
+ const codings = encoding.toLowerCase().split(",").map((c) => c.trim()).filter(Boolean).reverse();
120
+ const out = [];
121
+ for (const coding of codings) {
122
+ if (coding === "gzip" || coding === "x-gzip") out.push(() => createGunzip({ flush: constants.Z_SYNC_FLUSH, finishFlush: constants.Z_SYNC_FLUSH }));
123
+ else if (coding === "deflate") out.push(() => inflater({ flush: constants.Z_SYNC_FLUSH, finishFlush: constants.Z_SYNC_FLUSH }));
124
+ else if (coding === "br") out.push(() => createBrotliDecompress({ flush: constants.BROTLI_OPERATION_FLUSH, finishFlush: constants.BROTLI_OPERATION_FLUSH }));
125
+ else if (coding === "zstd") out.push(() => createZstdDecompress({ flush: constants.ZSTD_e_continue, finishFlush: constants.ZSTD_e_end }));
126
+ else return [];
127
+ }
128
+ return out;
129
+ }
130
+
131
+ /** A deflate decoder, as undici's: zlib's (RFC 1950) when the first byte's low nibble is 8 (its
132
+ * header's CM, deflate), raw deflate otherwise. */
133
+ function inflater(options) {
134
+ let inner = null;
135
+ const out = createInflate(options);
136
+ const write = out.write;
137
+ out.write = function (chunk, ...rest) {
138
+ if (inner === null) {
139
+ inner = (chunk[0] & 0x0f) === 0x08 ? out : createInflateRaw(options);
140
+ if (inner !== out) {
141
+ inner.on("data", (d) => out.push(d));
142
+ inner.on("end", () => out.push(null));
143
+ inner.on("error", (e) => out.destroy(e));
144
+ out.write = (c, ...r) => inner.write(c, ...r);
145
+ out.end = (...r) => inner.end(...r);
146
+ return inner.write(chunk, ...rest);
147
+ }
148
+ }
149
+ return write.call(this, chunk, ...rest);
150
+ };
151
+ return out;
152
+ }
153
+
154
+ /** The body as a ReadableStream of Uint8Arrays: the response's bytes through the decoders. */
155
+ function bodyStream(res, coders, controllerOf) {
156
+ let source = res;
157
+ const errorWith = (e) => controllerOf.error(new TypeError("terminated", { cause: e }));
158
+ try {
159
+ for (const make of coders) {
160
+ const next = make();
161
+ source.on("error", (e) => next.destroy(e));
162
+ source.pipe(next);
163
+ source = next;
164
+ }
165
+ } catch (e) {
166
+ res.destroy();
167
+ return new ReadableStream({ start(c) { c.error(e); } });
168
+ }
169
+ return new ReadableStream({
170
+ start(controller) {
171
+ controllerOf.controller = controller;
172
+ source.on("data", (chunk) => {
173
+ if (controllerOf.done) return;
174
+ controller.enqueue(new Uint8Array(chunk));
175
+ if (controller.desiredSize <= 0) source.pause();
176
+ });
177
+ source.on("end", () => {
178
+ if (controllerOf.done) return;
179
+ controllerOf.done = true;
180
+ controller.close();
181
+ });
182
+ source.on("error", (e) => errorWith(e));
183
+ res.on("aborted", () => errorWith(Object.assign(new Error("other side closed"), { code: "UND_ERR_SOCKET" })));
184
+ },
185
+ pull() {
186
+ source.resume();
187
+ },
188
+ cancel() {
189
+ controllerOf.done = true;
190
+ res.destroy();
191
+ },
192
+ }, { highWaterMark: 65536, size: (chunk) => chunk.byteLength });
193
+ }
194
+
195
+ /* ---- HTTP -------------------------------------------------------------------------------------- */
196
+
197
+ /** One request, as undici sends it: a promise of the IncomingMessage. */
198
+ function send(state, url, onRequest) {
199
+ return new Promise((resolve, reject) => {
200
+ const https = url.protocol === "https:";
201
+ /* undici closes after a HEAD, for servers that send a body anyway */
202
+ const headers = ["host", url.host, "connection", state.method === "HEAD" ? "close" : "keep-alive", ...state.headers];
203
+ const defaults = [["accept", "*/*"], ["accept-language", "*"], ["sec-fetch-mode", "cors"], ["user-agent", "node"], ["accept-encoding", "gzip, deflate"]];
204
+ for (const [name, value] of defaults) if (headerIndex(headers, name) === -1) headers.push(name, value);
205
+ const body = state.body;
206
+ if (body instanceof Uint8Array) headers.push("content-length", String(body.byteLength));
207
+ else if (body === null && (state.method === "POST" || state.method === "PUT")) headers.push("content-length", "0");
208
+ else if (body !== null) headers.push("transfer-encoding", "chunked");
209
+ const options = {
210
+ protocol: url.protocol,
211
+ hostname: url.hostname.startsWith("[") ? url.hostname.slice(1, -1) : url.hostname,
212
+ port: url.port || (https ? 443 : 80),
213
+ path: url.pathname + url.search,
214
+ method: state.method,
215
+ headers,
216
+ setHost: false,
217
+ agent: https ? (httpsAgent ??= new HttpsAgent({ keepAlive: true })) : (httpAgent ??= new HttpAgent({ keepAlive: true })),
218
+ };
219
+ let req;
220
+ try {
221
+ req = (https ? httpsRequest : httpRequest)(options);
222
+ } catch (e) {
223
+ reject(networkError(e));
224
+ return;
225
+ }
226
+ onRequest(req);
227
+ req.on("response", resolve);
228
+ req.on("error", (e) => reject(networkError(e)));
229
+ if (body instanceof Uint8Array) req.end(body);
230
+ else if (body === null) req.end();
231
+ else {
232
+ const reader = body.getReader();
233
+ const pump = () => reader.read().then(({ value, done }) => {
234
+ if (done) req.end();
235
+ else if (req.write(value)) pump();
236
+ else req.once("drain", pump);
237
+ }, (e) => req.destroy(e));
238
+ pump();
239
+ }
240
+ });
241
+ }
242
+
243
+ /** fetch(input, init): a promise of the Response. */
244
+ function fetch(input, init = undefined) {
245
+ let request;
246
+ try {
247
+ request = new Request(input, init);
248
+ } catch (e) {
249
+ return Promise.reject(e);
250
+ }
251
+ const signal = request.signal;
252
+ if (signal.aborted) return Promise.reject(abortReason(signal));
253
+ let body;
254
+ try {
255
+ body = fetchRequestBody(request);
256
+ } catch (e) {
257
+ return Promise.reject(e);
258
+ }
259
+ const state = {
260
+ method: request.method,
261
+ headers: fetchHeaderList(request.headers),
262
+ body,
263
+ redirect: request.redirect,
264
+ };
265
+ return new Promise((resolve, reject) => {
266
+ let current = null; // the ClientRequest in flight
267
+ let response = null; // the IncomingMessage whose body is being read
268
+ const sink = { controller: null, done: false, error(e) {
269
+ if (this.done) return;
270
+ this.done = true;
271
+ this.controller?.error(e);
272
+ } };
273
+ let settled = false;
274
+ const onAbort = () => {
275
+ const reason = abortReason(signal);
276
+ if (!settled) {
277
+ settled = true;
278
+ reject(reason);
279
+ } else sink.error(reason);
280
+ current?.destroy();
281
+ response?.destroy();
282
+ };
283
+ signal.addEventListener("abort", onAbort, { once: true });
284
+ const fail = (e) => {
285
+ signal.removeEventListener("abort", onAbort);
286
+ if (settled) return;
287
+ settled = true;
288
+ reject(e);
289
+ };
290
+
291
+ const urlList = [request.url];
292
+ const step = () => {
293
+ const href = urlList[urlList.length - 1];
294
+ const url = new URL(href);
295
+ if (url.protocol === "data:") return Promise.resolve(fetchDataURL(href)).then((r) => ({ done: r }));
296
+ if (url.protocol === "blob:") throw networkError("invalid method");
297
+ if (url.protocol === "about:") throw networkError("about scheme is not supported");
298
+ if (url.protocol === "file:") throw networkError("not implemented... yet...");
299
+ if (url.protocol !== "http:" && url.protocol !== "https:") throw networkError("unknown scheme");
300
+ if (BAD_PORTS.has(Number(url.port))) throw networkError("bad port");
301
+ return send(state, url, (req) => (current = req)).then((res) => {
302
+ if (settled) {
303
+ res.destroy();
304
+ return { done: null };
305
+ }
306
+ const status = res.statusCode;
307
+ const headers = new Headers();
308
+ const raw = res.rawHeaders;
309
+ for (let i = 0; i < raw.length; i += 2) headers.append(raw[i], raw[i + 1]);
310
+ const location = REDIRECT_STATUSES.has(status) ? headers.get("location") : null;
311
+ if (location !== null && state.redirect !== "manual") {
312
+ res.resume();
313
+ if (state.redirect === "error") throw networkError("unexpected redirect");
314
+ let next;
315
+ try {
316
+ next = new URL(location, url);
317
+ } catch (e) {
318
+ throw networkError(e);
319
+ }
320
+ if (next.protocol !== "http:" && next.protocol !== "https:") throw networkError("URL scheme must be a HTTP(S) scheme");
321
+ if (urlList.length > 20) throw networkError("redirect count exceeded");
322
+ if (status !== 303 && state.body !== null && !(state.body instanceof Uint8Array)) throw networkError("Cannot follow redirect with a ReadableStream body");
323
+ if (((status === 301 || status === 302) && state.method === "POST") || (status === 303 && state.method !== "GET" && state.method !== "HEAD")) {
324
+ state.method = "GET";
325
+ state.body = null;
326
+ state.headers = withoutHeaders(state.headers, BODY_HEADERS);
327
+ }
328
+ if (next.origin !== url.origin) state.headers = withoutHeaders(state.headers, CREDENTIAL_HEADERS);
329
+ if (next.hash === "" && url.hash !== "") next.hash = url.hash;
330
+ urlList.push(next.href);
331
+ return { done: undefined };
332
+ }
333
+ let stream = null;
334
+ if (state.method === "HEAD" || state.method === "CONNECT" || NULL_BODY_STATUSES.has(status)) res.resume();
335
+ else {
336
+ response = res;
337
+ stream = bodyStream(res, decoders(headers.get("content-encoding") ?? ""), sink);
338
+ res.on("end", () => signal.removeEventListener("abort", onAbort));
339
+ }
340
+ return { done: fetchResponse(status, res.statusMessage ?? "", headers, stream, withoutFragment(href), urlList.length > 1) };
341
+ });
342
+ };
343
+ const loop = () => {
344
+ let next;
345
+ try {
346
+ next = step();
347
+ } catch (e) {
348
+ fail(e);
349
+ return;
350
+ }
351
+ next.then(({ done }) => {
352
+ if (done === undefined) loop();
353
+ else if (done !== null && !settled) {
354
+ settled = true;
355
+ if (!response) signal.removeEventListener("abort", onAbort);
356
+ resolve(done);
357
+ }
358
+ }, fail);
359
+ };
360
+ loop();
361
+ });
362
+ }
363
+
364
+ Object.defineProperty(globalThis, "fetch", { value: fetch, writable: true, enumerable: true, configurable: true });