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,414 @@
1
+ // process's members beyond the runtime's process object, as Node's: the working directory and
2
+ // file mode mask, uptime, CPU, resource and memory figures, the parent pid, the title, user and
3
+ // group ids (POSIX), abort, reallyExit and execve; loadEnvFile and getBuiltinModule; the uncaught
4
+ // exception capture callback; finalization; report; ref and unref; and the settings and lists a
5
+ // compiled program has as constants (release, config, allowedNodeEnvironmentFlags, …). Linked
6
+ // into programs that name them (implicitModules in node/index.ts); some link libuv.
7
+ import {
8
+ fsReadFile, fsWriteFile, procAbort, procChdir, procCpuUsage, procExecve, procGetGroups, procGroupId, procInitGroups, procMemory, procPpid,
9
+ procReallyExit, procResourceUsage, procSetGroups, procSetId, procUmask, procUptime, procUserId, procUserName, errnoMessage, errnoName,
10
+ } from "visaljs:host";
11
+ import { isBuiltin, REQUIRE_TABLE } from "../module.js";
12
+ import { parseDotenv } from "./dotenv.js";
13
+ import { codeError, invalidArgType, notSupported, systemError } from "./errors.js";
14
+ import "./process_events.js";
15
+
16
+ const p = globalThis.process;
17
+ const posix = p.platform !== "win32";
18
+
19
+ const define = (name, value) => Object.defineProperty(p, name, { value, writable: true, enumerable: true, configurable: true });
20
+ const accessor = (name, get, set) => Object.defineProperty(p, name, { get, set, enumerable: true, configurable: true });
21
+
22
+ function validateString(value, name) {
23
+ if (typeof value !== "string") throw invalidArgType(name, "of type string", value);
24
+ }
25
+
26
+ /* Node's ErrnoException from C++: `EPERM, Operation not permitted`, errno positive */
27
+ function errnoException(err, syscall) {
28
+ const message = errnoMessage(err);
29
+ const e = new Error(`${errnoName(err)}, ${message.charAt(0).toUpperCase()}${message.slice(1)}`);
30
+ e.errno = -err;
31
+ e.code = errnoName(err);
32
+ e.syscall = syscall;
33
+ return e;
34
+ }
35
+
36
+ /* ---- the working directory, the mask, time and resources ------------------------------------- */
37
+
38
+ define("chdir", function chdir(directory) {
39
+ validateString(directory, "directory");
40
+ const err = procChdir(directory);
41
+ if (err < 0) throw systemError(err, "chdir", p.cwd(), directory);
42
+ });
43
+
44
+ define("umask", function umask(mask) {
45
+ if (mask === undefined) return procUmask(-1);
46
+ if (typeof mask === "string") {
47
+ let octal = mask.length > 0;
48
+ for (const c of mask) octal &&= c >= "0" && c <= "7";
49
+ if (!octal) {
50
+ throw codeError(TypeError, "ERR_INVALID_ARG_VALUE", `The argument 'mask' must be a 32-bit unsigned integer or an octal string. Received '${mask}'`);
51
+ }
52
+ mask = parseInt(mask, 8);
53
+ } else if (typeof mask !== "number") {
54
+ throw invalidArgType("mask", "of type number", mask);
55
+ } else if (!Number.isInteger(mask) || mask < 0 || mask > 4294967295) {
56
+ throw codeError(RangeError, "ERR_OUT_OF_RANGE", `The value of "mask" is out of range. It must be >= 0 && <= 4294967295. Received ${mask}`);
57
+ }
58
+ return procUmask(mask);
59
+ });
60
+
61
+ define("uptime", function uptime() {
62
+ return procUptime();
63
+ });
64
+
65
+ /* the user and system CPU time (µs), or what it's been since prevValue */
66
+ function cpuUsageOf(thread, prevValue) {
67
+ const usage = procCpuUsage(thread);
68
+ const [user, system] = typeof usage === "number" ? [0, 0] : usage;
69
+ if (prevValue === undefined) return { user, system };
70
+ for (const key of ["user", "system"]) {
71
+ const value = prevValue?.[key];
72
+ if (typeof value !== "number") throw invalidArgType(`prevValue.${key}`, "of type number", value);
73
+ if (!(value >= 0) || !Number.isFinite(value)) {
74
+ throw codeError(RangeError, "ERR_INVALID_ARG_VALUE", `The property 'prevValue.${key}' is invalid. Received ${value}`);
75
+ }
76
+ }
77
+ return { user: user - prevValue.user, system: system - prevValue.system };
78
+ }
79
+
80
+ define("cpuUsage", function cpuUsage(prevValue) {
81
+ return cpuUsageOf(false, prevValue);
82
+ });
83
+
84
+ define("threadCpuUsage", function threadCpuUsage(prevValue) {
85
+ return cpuUsageOf(true, prevValue);
86
+ });
87
+
88
+ const resourceNames = ["userCPUTime", "systemCPUTime", "maxRSS", "sharedMemorySize", "unsharedDataSize", "unsharedStackSize",
89
+ "minorPageFault", "majorPageFault", "swappedOut", "fsRead", "fsWrite", "ipcSent", "ipcReceived", "signalsCount",
90
+ "voluntaryContextSwitches", "involuntaryContextSwitches"];
91
+
92
+ define("resourceUsage", function resourceUsage() {
93
+ const values = procResourceUsage();
94
+ const usage = {};
95
+ resourceNames.forEach((name, i) => (usage[name] = typeof values === "number" ? 0 : values[i]));
96
+ return usage;
97
+ });
98
+
99
+ define("availableMemory", function availableMemory() {
100
+ return procMemory()[0];
101
+ });
102
+
103
+ define("constrainedMemory", function constrainedMemory() {
104
+ return procMemory()[1];
105
+ });
106
+
107
+ accessor("ppid", () => procPpid());
108
+
109
+ /* the title: the program's name until set (ps shows the process as it was started) */
110
+ let title;
111
+ const argv0 = p.argv0 ?? "";
112
+ accessor("title", () => title ?? argv0.slice(Math.max(argv0.lastIndexOf("/"), argv0.lastIndexOf("\\")) + 1), (value) => {
113
+ title = `${value}`;
114
+ });
115
+
116
+ /* ---- user and group ids (POSIX) ----------------------------------------------------------------- */
117
+
118
+ /* an id, or a name looked up: ERR_UNKNOWN_CREDENTIAL for one that doesn't exist */
119
+ function idOf(id, kind) {
120
+ if (typeof id === "number") return id;
121
+ if (typeof id !== "string") throw invalidArgType("id", "one of type number or string", id);
122
+ const found = kind === "User" ? procUserId(id) : procGroupId(id);
123
+ if (found === -1) throw codeError(Error, "ERR_UNKNOWN_CREDENTIAL", `${kind} identifier does not exist: ${id}`);
124
+ return found;
125
+ }
126
+
127
+ if (posix) {
128
+ for (const [name, kind, which] of [["setuid", "User", 0], ["setgid", "Group", 1], ["seteuid", "User", 2], ["setegid", "Group", 3]]) {
129
+ define(name, {
130
+ [name](id) {
131
+ const err = procSetId(which, idOf(id, kind));
132
+ if (err < 0) throw errnoException(err, name);
133
+ },
134
+ }[name]);
135
+ }
136
+
137
+ define("getgroups", function getgroups() {
138
+ const groups = procGetGroups();
139
+ if (typeof groups === "number") throw errnoException(groups, "getgroups");
140
+ return groups;
141
+ });
142
+
143
+ define("setgroups", function setgroups(groups) {
144
+ if (!Array.isArray(groups)) throw invalidArgType("groups", "an instance of Array", groups);
145
+ const ids = groups.map((group, i) => {
146
+ if (typeof group !== "number" && typeof group !== "string") throw invalidArgType(`groups[${i}]`, "one of type number or string", group);
147
+ return idOf(group, "Group");
148
+ });
149
+ const err = procSetGroups(ids);
150
+ if (err < 0) throw errnoException(err, "setgroups");
151
+ });
152
+
153
+ define("initgroups", function initgroups(user, extraGroup) {
154
+ let name = user;
155
+ if (typeof user === "number") {
156
+ name = procUserName(user);
157
+ if (name === null) throw codeError(Error, "ERR_UNKNOWN_CREDENTIAL", `User identifier does not exist: ${user}`);
158
+ } else if (typeof user !== "string") {
159
+ throw invalidArgType("user", "one of type number or string", user);
160
+ } else if (procUserId(user) === -1) {
161
+ throw codeError(Error, "ERR_UNKNOWN_CREDENTIAL", `User identifier does not exist: ${user}`);
162
+ }
163
+ if (typeof extraGroup !== "number" && typeof extraGroup !== "string") throw invalidArgType("extraGroup", "one of type number or string", extraGroup);
164
+ const err = procInitGroups(name, idOf(extraGroup, "Group"));
165
+ if (err < 0) throw errnoException(err, "initgroups");
166
+ });
167
+ }
168
+
169
+ /* ---- ending, replacing ---------------------------------------------------------------------------- */
170
+
171
+ define("abort", function abort() {
172
+ procAbort();
173
+ });
174
+
175
+ /** Exits at once, without 'exit'. */
176
+ define("reallyExit", function reallyExit(code) {
177
+ procReallyExit(code | 0);
178
+ });
179
+
180
+ /** Replaces the program with another (POSIX execve): returns only by failing, which, as in Node,
181
+ * ends the process. */
182
+ define("execve", function execve(execPath, args = [], env = p.env) {
183
+ if (!posix) throw codeError(Error, "ERR_FEATURE_UNAVAILABLE_ON_PLATFORM", `process.execve is not available on ${p.platform}`);
184
+ validateString(execPath, "execPath");
185
+ if (!Array.isArray(args)) throw invalidArgType("args", "an instance of Array", args);
186
+ args.forEach((arg, i) => validateString(arg, `args[${i}]`));
187
+ if (env === null || typeof env !== "object") throw invalidArgType("env", "of type object", env);
188
+ const pairs = Object.entries(env).map(([key, value]) => `${key}=${value}`);
189
+ const err = procExecve(execPath, args, pairs);
190
+ p.stderr.write(`process.execve failed with error code ${errnoName(err)}\n`);
191
+ procAbort();
192
+ });
193
+
194
+ /* ---- modules and environment files ------------------------------------------------------------ */
195
+
196
+ /** A built-in module, without importing it: one the program names with a literal string is
197
+ * bundled (the driver puts it in the require table); undefined for a name that isn't one. */
198
+ define("getBuiltinModule", function getBuiltinModule(id) {
199
+ validateString(id, "id");
200
+ if (!isBuiltin(id)) return undefined;
201
+ const name = id.startsWith("node:") ? id.slice(5) : id;
202
+ const table = globalThis[REQUIRE_TABLE];
203
+ const load = table?.get(id) ?? table?.get(name) ?? table?.get(`node:${name}`);
204
+ if (load === undefined) throw notSupported(`process.getBuiltinModule(${JSON.stringify(id)}) of a module named only at run time`);
205
+ return load();
206
+ });
207
+
208
+ /** A .env file's variables into process.env, those already set kept. */
209
+ define("loadEnvFile", function loadEnvFile(path = ".env") {
210
+ if (typeof path !== "string" && !(path instanceof URL) && !(path instanceof Uint8Array)) throw invalidArgType("path", "of type string or an instance of Buffer or URL", path);
211
+ const file = path instanceof URL ? decodeURIComponent(path.pathname) : `${path}`;
212
+ const text = fsReadFile(file, false);
213
+ if (typeof text === "number") throw systemError(text, "open", file);
214
+ for (const [key, value] of Object.entries(parseDotenv(text))) {
215
+ if (p.env[key] === undefined) p.env[key] = value;
216
+ }
217
+ });
218
+
219
+ /* ---- the uncaught exception capture callback ------------------------------------------------- */
220
+
221
+ let captureCallback = null;
222
+ const baseEmit = p.emit;
223
+
224
+ define("hasUncaughtExceptionCaptureCallback", function hasUncaughtExceptionCaptureCallback() {
225
+ return captureCallback !== null;
226
+ });
227
+
228
+ /** fn takes the uncaught errors instead of 'uncaughtException' (the runtime emits through process.emit). */
229
+ define("setUncaughtExceptionCaptureCallback", function setUncaughtExceptionCaptureCallback(fn) {
230
+ if (fn === null) {
231
+ captureCallback = null;
232
+ return;
233
+ }
234
+ if (typeof fn !== "function") throw invalidArgType("fn", "of type function or null", fn);
235
+ if (captureCallback !== null) {
236
+ throw codeError(Error, "ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET",
237
+ "`process.setupUncaughtExceptionCapture()` was called while a capture callback was already active");
238
+ }
239
+ captureCallback = fn;
240
+ });
241
+
242
+ p.emit = function emit(type, ...args) {
243
+ if (type === "uncaughtException" && captureCallback !== null) {
244
+ captureCallback(args[0]);
245
+ return true;
246
+ }
247
+ return typeof baseEmit === "function" ? baseEmit.call(this, type, ...args) : false;
248
+ };
249
+
250
+ /* ---- finalization: callbacks at exit for the objects still alive ------------------------------ */
251
+
252
+ const finalizers = { exit: [], beforeExit: [] };
253
+ const runFinalizers = (event) => {
254
+ for (const { ref, callback } of finalizers[event].splice(0)) {
255
+ const obj = ref.deref();
256
+ if (obj !== undefined) callback(obj, event);
257
+ }
258
+ };
259
+
260
+ /* Node's: an ExperimentalWarning the first time each is used; the listeners from the first register */
261
+ const warned = new Set();
262
+ let listening = false;
263
+ function experimental(name) {
264
+ if (!warned.has(name)) {
265
+ warned.add(name);
266
+ p.emitWarning(`process.finalization.${name} is an experimental feature and might change at any time`, "ExperimentalWarning");
267
+ }
268
+ if (!listening) {
269
+ listening = true;
270
+ p.on("exit", () => runFinalizers("exit"));
271
+ p.on("beforeExit", () => runFinalizers("beforeExit"));
272
+ }
273
+ }
274
+
275
+ function validateFinalization(obj, callback) {
276
+ if (obj === null || (typeof obj !== "object" && typeof obj !== "function")) throw invalidArgType("obj", "of type object", obj);
277
+ if (typeof callback !== "function") throw invalidArgType("callback", "of type function", callback);
278
+ }
279
+
280
+ define("finalization", {
281
+ register(obj, callback) {
282
+ experimental("register");
283
+ validateFinalization(obj, callback);
284
+ finalizers.exit.push({ ref: new WeakRef(obj), callback });
285
+ },
286
+ registerBeforeExit(obj, callback) {
287
+ experimental("registerBeforeExit");
288
+ validateFinalization(obj, callback);
289
+ finalizers.beforeExit.push({ ref: new WeakRef(obj), callback });
290
+ },
291
+ unregister(obj) {
292
+ experimental("unregister");
293
+ for (const list of Object.values(finalizers)) {
294
+ for (let i = list.length - 1; i >= 0; i--) if (list[i].ref.deref() === obj) list.splice(i, 1);
295
+ }
296
+ },
297
+ });
298
+
299
+ /* ---- ref, unref, openStdin ------------------------------------------------------------------- */
300
+
301
+ const kRef = Symbol.for("nodejs.ref");
302
+ const kUnref = Symbol.for("nodejs.unref");
303
+
304
+ define("ref", function ref(maybeRefable) {
305
+ const fn = maybeRefable?.[kRef] || maybeRefable?.ref;
306
+ if (typeof fn === "function") fn.call(maybeRefable);
307
+ });
308
+
309
+ define("unref", function unref(maybeRefable) {
310
+ const fn = maybeRefable?.[kUnref] || maybeRefable?.unref;
311
+ if (typeof fn === "function") fn.call(maybeRefable);
312
+ });
313
+
314
+ define("openStdin", function openStdin() {
315
+ p.stdin.resume();
316
+ return p.stdin;
317
+ });
318
+
319
+ /* ---- what a compiled program has as constants -------------------------------------------------- */
320
+
321
+ const version = p.version;
322
+ define("release", {
323
+ name: "node",
324
+ ...(version.startsWith("v24.") ? { lts: "Krypton" } : {}),
325
+ sourceUrl: `https://nodejs.org/download/release/${version}/node-${version}.tar.gz`,
326
+ headersUrl: `https://nodejs.org/download/release/${version}/node-${version}-headers.tar.gz`,
327
+ });
328
+ define("config", Object.freeze({ variables: Object.freeze({ host_arch: p.arch, target_arch: p.arch }), target_defaults: Object.freeze({}) }));
329
+
330
+ /* the flags NODE_OPTIONS may give: a compiled program reads none */
331
+ class NodeEnvironmentFlagsSet extends Set {
332
+ add() {
333
+ return this;
334
+ }
335
+ delete() {
336
+ return false;
337
+ }
338
+ clear() {}
339
+ }
340
+ define("allowedNodeEnvironmentFlags", new NodeEnvironmentFlagsSet());
341
+ define("debugPort", 9229);
342
+ define("moduleLoadList", []);
343
+ define("domain", null);
344
+
345
+ let sourceMaps = false;
346
+ accessor("sourceMapsEnabled", () => sourceMaps);
347
+ define("setSourceMapsEnabled", function setSourceMapsEnabled(enabled) {
348
+ if (typeof enabled !== "boolean") throw invalidArgType("enabled", "of type boolean", enabled);
349
+ sourceMaps = enabled;
350
+ });
351
+
352
+ /** The handles keeping the program alive, by type: not tracked by visaljs (an empty list). */
353
+ define("getActiveResourcesInfo", function getActiveResourcesInfo() {
354
+ return [];
355
+ });
356
+
357
+ let assertWarned = false;
358
+ define("assert", function assert(value, message) {
359
+ if (!assertWarned && p.noDeprecation !== true) {
360
+ assertWarned = true;
361
+ p.emitWarning("process.assert() is deprecated. Please use the `assert` module instead.", "DeprecationWarning", "DEP0100");
362
+ }
363
+ if (!value) throw codeError(Error, "ERR_ASSERTION", message || "assertion error");
364
+ });
365
+
366
+ define("binding", function binding() {
367
+ throw notSupported("process.binding (Node's internal bindings)");
368
+ });
369
+
370
+ define("dlopen", function dlopen() {
371
+ throw notSupported("process.dlopen (native addons)");
372
+ });
373
+
374
+ /* ---- report: what Node's diagnostic report says that a compiled program knows ------------------ */
375
+
376
+ function getReport(err) {
377
+ const usage = p.resourceUsage();
378
+ return {
379
+ header: {
380
+ reportVersion: 3, event: "JavaScript API", trigger: "GetReport", filename: null, dumpEventTime: new Date().toISOString(),
381
+ processId: p.pid, cwd: p.cwd(), commandLine: p.argv, nodejsVersion: p.version, arch: p.arch, platform: p.platform,
382
+ componentVersions: p.versions, release: p.release,
383
+ },
384
+ javascriptStack: { message: err ? String(err.message ?? err) : "No stack.", stack: [] },
385
+ resourceUsage: { userCpuSeconds: usage.userCPUTime / 1e6, kernelCpuSeconds: usage.systemCPUTime / 1e6, maxRss: usage.maxRSS * 1024 },
386
+ environmentVariables: { ...p.env },
387
+ sharedObjects: [],
388
+ };
389
+ }
390
+
391
+ define("report", {
392
+ directory: "",
393
+ filename: "",
394
+ compact: false,
395
+ excludeNetwork: false,
396
+ signal: "SIGUSR2",
397
+ reportOnFatalError: false,
398
+ reportOnSignal: false,
399
+ reportOnUncaughtException: false,
400
+ excludeEnv: false,
401
+ getReport,
402
+ /* the report as JSON to a file: the name given, or Node's report.<date>.<time>.<pid>.0.001.json */
403
+ writeReport(file, err) {
404
+ if (typeof file === "object" && file !== null) [file, err] = [undefined, file];
405
+ const now = new Date();
406
+ const pad = (n) => String(n).padStart(2, "0");
407
+ file ??= `report.${now.getFullYear()}${pad(now.getMonth() + 1)}${pad(now.getDate())}.${pad(now.getHours())}${pad(now.getMinutes())}` +
408
+ `${pad(now.getSeconds())}.${p.pid}.0.001.json`;
409
+ const path = this.directory ? `${this.directory}/${file}` : file;
410
+ const r = fsWriteFile(path, JSON.stringify(getReport(err), null, this.compact ? 0 : 2), false);
411
+ if (typeof r === "number" && r < 0) throw systemError(r, "open", path);
412
+ return file;
413
+ },
414
+ });
@@ -1,7 +1,8 @@
1
- // process's signal events and process.kill (ADR 0012): Node's startListeningIfSignal and
1
+ // process's signal events and process.kill: Node's startListeningIfSignal and
2
2
  // stopListeningIfSignal, on libuv's signal handles (src/host_signal.c). A program gets this
3
3
  // module when its code names process and a signal ("SIGINT") or kill (implicitModules in
4
4
  // node/index.ts); apart from process_events.js, as it links libuv.
5
+ // Ported from Node.js (Copyright Node.js contributors, MIT): node/third_party/nodejs/LICENSE.
5
6
  import { osConstants, processKill, signalStart, signalStop } from "visaljs:host";
6
7
  import { codeError, errnoException, invalidArgType } from "./errors.js";
7
8
  import "./process_events.js";
@@ -0,0 +1,52 @@
1
+ // process.stdin: made when first read, as Node's getStdin makes it, by what descriptor 0 is: a
2
+ // terminal is tty.ReadStream, a file fs.ReadStream, a pipe or socket a net.Socket, and anything
3
+ // else (closed) an empty stream. It starts paused; paused again, it stops reading, so a program
4
+ // that doesn't read it all can exit. A program that may use it gets this module first (the
5
+ // driver adds it: implicitModules in node/index.ts).
6
+ // Ported from Node.js (Copyright Node.js contributors, MIT): node/third_party/nodejs/LICENSE.
7
+ import { netGuessHandle, netReadStop } from "visaljs:host";
8
+ import { ReadStream as FileReadStream } from "./fs_streams.js";
9
+ import { Socket } from "../net.js";
10
+ import { Readable } from "../stream.js";
11
+ import { ReadStream as TTYReadStream } from "../tty.js";
12
+ import "./tty_read_stream.js";
13
+
14
+ const p = globalThis.process;
15
+ let stdin;
16
+
17
+ function getStdin() {
18
+ const fd = 0;
19
+ switch (netGuessHandle(fd)) {
20
+ case "TTY":
21
+ stdin = new TTYReadStream(fd);
22
+ break;
23
+ case "FILE":
24
+ stdin = new FileReadStream(null, { fd, autoClose: false });
25
+ break;
26
+ case "PIPE":
27
+ case "TCP":
28
+ stdin = new Socket({ fd, readable: true, writable: false, manualStart: true });
29
+ stdin._writableState.ended = true;
30
+ break;
31
+ default:
32
+ stdin = new Readable({ read() {} });
33
+ stdin.push(null);
34
+ }
35
+ stdin.fd = fd;
36
+ /* paused: stop reading a tick later, once the stream has (Node's onpause) */
37
+ stdin.on("pause", () => process.nextTick(onpause));
38
+ return stdin;
39
+ }
40
+
41
+ function onpause() {
42
+ if (typeof stdin._handle !== "number" || !stdin._reading || stdin.readableFlowing) return;
43
+ stdin._readableState.reading = false;
44
+ stdin._reading = false;
45
+ netReadStop(stdin._handle);
46
+ }
47
+
48
+ Object.defineProperty(p, "stdin", {
49
+ configurable: true,
50
+ enumerable: true,
51
+ get: () => stdin ?? getStdin(),
52
+ });
@@ -0,0 +1,36 @@
1
+ // process.stdout and process.stderr as Writables, as Node's are (lib/internal/bootstrap/switches/
2
+ // is_main_thread.js: a SyncWriteStream for a file, a tty.WriteStream for a terminal, writing at
3
+ // once): a program that pipes into them, listens on them or ends them gets this module first
4
+ // (implicitModules in node/index.ts). The runtime's own stdout and stderr only write. Like Node's,
5
+ // destroying one doesn't close its fd.
6
+ import { Writable } from "../stream.js";
7
+
8
+ const p = globalThis.process;
9
+
10
+ function stdio(name) {
11
+ const native = p[name];
12
+ const write = native.write;
13
+ const stream = new Writable({
14
+ write(chunk, encoding, cb) {
15
+ try {
16
+ Reflect.apply(write, native, [chunk]);
17
+ } catch (e) {
18
+ cb(e);
19
+ return;
20
+ }
21
+ cb();
22
+ },
23
+ });
24
+ /* the runtime's fd, isTTY and the rest */
25
+ for (const key of Object.keys(native)) if (key !== "write") stream[key] = native[key];
26
+ stream._isStdio = true;
27
+ stream.destroySoon = stream.destroy;
28
+ stream._destroy = (err, cb) => {
29
+ /* Node's dummyDestroy: stdio isn't closed */
30
+ cb(err);
31
+ };
32
+ Object.defineProperty(p, name, { value: stream, writable: true, enumerable: true, configurable: true });
33
+ }
34
+
35
+ stdio("stdout");
36
+ stdio("stderr");
File without changes