visaljs 0.0.9 → 0.0.11
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.
- package/README.md +12 -4
- package/THIRD_PARTY_LICENSES +31 -1
- package/cli.js +3745 -890
- package/node/include/js_node.h +12 -1
- package/node/prelude/_http_common.js +29 -0
- package/node/prelude/async_hooks.js +50 -11
- package/node/prelude/child_process.js +31 -4
- package/node/prelude/console.js +311 -143
- package/node/prelude/crypto.js +6 -4
- package/node/prelude/dgram.js +1169 -0
- package/node/prelude/diagnostics_channel.js +3 -1
- package/node/prelude/dns.js +250 -45
- package/node/prelude/dns_promises.js +8 -2
- package/node/prelude/fs_promises.js +9 -1
- package/node/prelude/http.js +405 -94
- package/node/prelude/https.js +13 -4
- package/node/prelude/internal/console_class.js +7 -0
- package/node/prelude/internal/console_global.js +25 -0
- package/node/prelude/internal/crypto/key_encryption.js +217 -0
- package/node/prelude/internal/crypto/keys.js +161 -26
- package/node/prelude/internal/crypto/random.js +24 -0
- package/node/prelude/internal/crypto/util.js +2 -1
- package/node/prelude/internal/crypto_x509.js +161 -0
- package/node/prelude/internal/dns_classes.js +6 -0
- package/node/prelude/internal/dns_resolver.js +371 -0
- package/node/prelude/internal/errors.js +9 -0
- package/node/prelude/internal/events_on.js +82 -37
- package/node/prelude/internal/features.js +8 -4
- package/node/prelude/internal/fs_filehandle.js +10 -4
- package/node/prelude/internal/http_chars.ts +22 -0
- package/node/prelude/internal/perf_histogram.js +1 -1
- package/node/prelude/internal/process_more.js +32 -17
- package/node/prelude/internal/process_signals.js +8 -2
- package/node/prelude/internal/punycode.ts +163 -0
- package/node/prelude/internal/readline.js +648 -274
- package/node/prelude/internal/readline_editor.js +1240 -0
- package/node/prelude/internal/string_width.js +43 -0
- package/node/prelude/internal/tls/common.js +145 -33
- package/node/prelude/internal/tls/wrap.js +182 -49
- package/node/prelude/internal/tls/x509.js +4 -1
- package/node/prelude/internal/udp.js +177 -0
- package/node/prelude/net.js +30 -14
- package/node/prelude/os.js +24 -6
- package/node/prelude/perf_hooks.js +37 -2
- package/node/prelude/punycode.js +2 -130
- package/node/prelude/readline.js +113 -4
- package/node/prelude/readline_promises.js +56 -32
- package/node/prelude/tls.js +21 -4
- package/node/prelude/util.js +3 -16
- package/node/src/host_dns.c +623 -0
- package/node/src/host_http.c +12 -0
- package/node/src/host_net.c +46 -0
- package/node/src/host_os.c +1 -6
- package/node/src/host_sys.c +79 -0
- package/node/src/host_udp.c +418 -0
- package/node/third_party/c-ares/LICENSE.md +24 -0
- package/node/third_party/c-ares/config/darwin/ares_config.h +573 -0
- package/node/third_party/c-ares/config/freebsd/ares_config.h +573 -0
- package/node/third_party/c-ares/config/linux/ares_config.h +573 -0
- package/node/third_party/c-ares/config/openbsd/ares_config.h +583 -0
- package/node/third_party/c-ares/include/ares.h +1237 -0
- package/node/third_party/c-ares/include/ares_build.h +202 -0
- package/node/third_party/c-ares/include/ares_dns.h +127 -0
- package/node/third_party/c-ares/include/ares_dns_record.h +1119 -0
- package/node/third_party/c-ares/include/ares_nameser.h +510 -0
- package/node/third_party/c-ares/include/ares_version.h +47 -0
- package/node/third_party/c-ares/src/lib/ares_addrinfo2hostent.c +305 -0
- package/node/third_party/c-ares/src/lib/ares_addrinfo_localhost.c +245 -0
- package/node/third_party/c-ares/src/lib/ares_android.c +496 -0
- package/node/third_party/c-ares/src/lib/ares_android.h +38 -0
- package/node/third_party/c-ares/src/lib/ares_cancel.c +87 -0
- package/node/third_party/c-ares/src/lib/ares_close_sockets.c +137 -0
- package/node/third_party/c-ares/src/lib/ares_conn.c +511 -0
- package/node/third_party/c-ares/src/lib/ares_conn.h +202 -0
- package/node/third_party/c-ares/src/lib/ares_cookie.c +461 -0
- package/node/third_party/c-ares/src/lib/ares_data.c +168 -0
- package/node/third_party/c-ares/src/lib/ares_data.h +92 -0
- package/node/third_party/c-ares/src/lib/ares_destroy.c +159 -0
- package/node/third_party/c-ares/src/lib/ares_free_hostent.c +54 -0
- package/node/third_party/c-ares/src/lib/ares_free_string.c +33 -0
- package/node/third_party/c-ares/src/lib/ares_freeaddrinfo.c +67 -0
- package/node/third_party/c-ares/src/lib/ares_getaddrinfo.c +806 -0
- package/node/third_party/c-ares/src/lib/ares_getenv.c +38 -0
- package/node/third_party/c-ares/src/lib/ares_getenv.h +34 -0
- package/node/third_party/c-ares/src/lib/ares_gethostbyaddr.c +229 -0
- package/node/third_party/c-ares/src/lib/ares_gethostbyname.c +341 -0
- package/node/third_party/c-ares/src/lib/ares_getnameinfo.c +437 -0
- package/node/third_party/c-ares/src/lib/ares_hosts_file.c +960 -0
- package/node/third_party/c-ares/src/lib/ares_inet_net_pton.h +31 -0
- package/node/third_party/c-ares/src/lib/ares_init.c +631 -0
- package/node/third_party/c-ares/src/lib/ares_ipv6.h +115 -0
- package/node/third_party/c-ares/src/lib/ares_library_init.c +190 -0
- package/node/third_party/c-ares/src/lib/ares_metrics.c +261 -0
- package/node/third_party/c-ares/src/lib/ares_options.c +492 -0
- package/node/third_party/c-ares/src/lib/ares_parse_into_addrinfo.c +179 -0
- package/node/third_party/c-ares/src/lib/ares_private.h +648 -0
- package/node/third_party/c-ares/src/lib/ares_process.c +1649 -0
- package/node/third_party/c-ares/src/lib/ares_qcache.c +442 -0
- package/node/third_party/c-ares/src/lib/ares_query.c +151 -0
- package/node/third_party/c-ares/src/lib/ares_search.c +623 -0
- package/node/third_party/c-ares/src/lib/ares_send.c +300 -0
- package/node/third_party/c-ares/src/lib/ares_set_socket_functions.c +590 -0
- package/node/third_party/c-ares/src/lib/ares_setup.h +224 -0
- package/node/third_party/c-ares/src/lib/ares_socket.c +427 -0
- package/node/third_party/c-ares/src/lib/ares_socket.h +163 -0
- package/node/third_party/c-ares/src/lib/ares_sortaddrinfo.c +447 -0
- package/node/third_party/c-ares/src/lib/ares_strerror.c +91 -0
- package/node/third_party/c-ares/src/lib/ares_sysconfig.c +642 -0
- package/node/third_party/c-ares/src/lib/ares_sysconfig_files.c +851 -0
- package/node/third_party/c-ares/src/lib/ares_sysconfig_mac.c +373 -0
- package/node/third_party/c-ares/src/lib/ares_sysconfig_win.c +673 -0
- package/node/third_party/c-ares/src/lib/ares_timeout.c +162 -0
- package/node/third_party/c-ares/src/lib/ares_update_servers.c +1376 -0
- package/node/third_party/c-ares/src/lib/ares_version.c +36 -0
- package/node/third_party/c-ares/src/lib/config-dos.h +114 -0
- package/node/third_party/c-ares/src/lib/config-win32.h +396 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_array.c +409 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_htable.c +451 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_htable.h +174 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_htable_asvp.c +224 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_htable_dict.c +230 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_htable_strvp.c +210 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_htable_szvp.c +188 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_htable_vpstr.c +186 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_htable_vpvp.c +194 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_llist.c +385 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_slist.c +479 -0
- package/node/third_party/c-ares/src/lib/dsa/ares_slist.h +207 -0
- package/node/third_party/c-ares/src/lib/event/ares_event.h +191 -0
- package/node/third_party/c-ares/src/lib/event/ares_event_configchg.c +746 -0
- package/node/third_party/c-ares/src/lib/event/ares_event_epoll.c +192 -0
- package/node/third_party/c-ares/src/lib/event/ares_event_kqueue.c +248 -0
- package/node/third_party/c-ares/src/lib/event/ares_event_poll.c +140 -0
- package/node/third_party/c-ares/src/lib/event/ares_event_select.c +159 -0
- package/node/third_party/c-ares/src/lib/event/ares_event_thread.c +575 -0
- package/node/third_party/c-ares/src/lib/event/ares_event_wake_pipe.c +172 -0
- package/node/third_party/c-ares/src/lib/event/ares_event_win32.c +981 -0
- package/node/third_party/c-ares/src/lib/event/ares_event_win32.h +161 -0
- package/node/third_party/c-ares/src/lib/include/ares_array.h +276 -0
- package/node/third_party/c-ares/src/lib/include/ares_buf.h +732 -0
- package/node/third_party/c-ares/src/lib/include/ares_htable_asvp.h +130 -0
- package/node/third_party/c-ares/src/lib/include/ares_htable_dict.h +123 -0
- package/node/third_party/c-ares/src/lib/include/ares_htable_strvp.h +130 -0
- package/node/third_party/c-ares/src/lib/include/ares_htable_szvp.h +118 -0
- package/node/third_party/c-ares/src/lib/include/ares_htable_vpstr.h +111 -0
- package/node/third_party/c-ares/src/lib/include/ares_htable_vpvp.h +128 -0
- package/node/third_party/c-ares/src/lib/include/ares_llist.h +239 -0
- package/node/third_party/c-ares/src/lib/include/ares_mem.h +41 -0
- package/node/third_party/c-ares/src/lib/include/ares_str.h +261 -0
- package/node/third_party/c-ares/src/lib/inet_net_pton.c +451 -0
- package/node/third_party/c-ares/src/lib/inet_ntop.c +219 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_create_query.c +78 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_expand_name.c +99 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_expand_string.c +107 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_fds.c +80 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_getsock.c +85 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_a_reply.c +107 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
- package/node/third_party/c-ares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
- package/node/third_party/c-ares/src/lib/record/ares_dns_mapping.c +982 -0
- package/node/third_party/c-ares/src/lib/record/ares_dns_multistring.c +309 -0
- package/node/third_party/c-ares/src/lib/record/ares_dns_multistring.h +72 -0
- package/node/third_party/c-ares/src/lib/record/ares_dns_name.c +736 -0
- package/node/third_party/c-ares/src/lib/record/ares_dns_parse.c +1360 -0
- package/node/third_party/c-ares/src/lib/record/ares_dns_private.h +273 -0
- package/node/third_party/c-ares/src/lib/record/ares_dns_record.c +1701 -0
- package/node/third_party/c-ares/src/lib/record/ares_dns_write.c +1229 -0
- package/node/third_party/c-ares/src/lib/str/ares_buf.c +1510 -0
- package/node/third_party/c-ares/src/lib/str/ares_str.c +562 -0
- package/node/third_party/c-ares/src/lib/str/ares_strsplit.c +90 -0
- package/node/third_party/c-ares/src/lib/str/ares_strsplit.h +51 -0
- package/node/third_party/c-ares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
- package/node/third_party/c-ares/src/lib/util/ares_iface_ips.c +640 -0
- package/node/third_party/c-ares/src/lib/util/ares_iface_ips.h +140 -0
- package/node/third_party/c-ares/src/lib/util/ares_math.c +167 -0
- package/node/third_party/c-ares/src/lib/util/ares_math.h +58 -0
- package/node/third_party/c-ares/src/lib/util/ares_rand.c +389 -0
- package/node/third_party/c-ares/src/lib/util/ares_rand.h +36 -0
- package/node/third_party/c-ares/src/lib/util/ares_threads.c +613 -0
- package/node/third_party/c-ares/src/lib/util/ares_threads.h +60 -0
- package/node/third_party/c-ares/src/lib/util/ares_time.h +49 -0
- package/node/third_party/c-ares/src/lib/util/ares_timeval.c +95 -0
- package/node/third_party/c-ares/src/lib/util/ares_uri.c +1627 -0
- package/node/third_party/c-ares/src/lib/util/ares_uri.h +252 -0
- package/node/third_party/c-ares/src/lib/windows_port.c +29 -0
- package/package.json +1 -1
- package/prebuilt/darwin-arm64/cares-a6286c65ca9374a3.a +0 -0
- package/prebuilt/darwin-x64/cares-a6286c65ca9374a3.a +0 -0
- package/prebuilt/linux-arm64/cares-4ba05ac8e948af8e.a +0 -0
- package/prebuilt/linux-arm64-musl/cares-4ba05ac8e948af8e.a +0 -0
- package/prebuilt/linux-x64/cares-4ba05ac8e948af8e.a +0 -0
- package/prebuilt/linux-x64-musl/cares-4ba05ac8e948af8e.a +0 -0
- package/prebuilt/win32-x64/boringssl-ce573858472b7fc9.a +0 -0
- package/prebuilt/win32-x64/brotli-20d86a61f30baeb3.a +0 -0
- package/prebuilt/win32-x64/cares-49c9ec95162b912d.a +0 -0
- package/prebuilt/win32-x64/uv-b11bae65d7fced82.a +0 -0
- package/prebuilt/win32-x64/zlib-4ce2317a4c3f5fb5.a +0 -0
- package/prebuilt/win32-x64/zstd-015315ac7c784c73.a +0 -0
- package/runtime/include/js_buffer.h +185 -0
- package/runtime/include/js_builtins.h +58 -0
- package/runtime/include/js_crypto.h +11 -0
- package/runtime/include/js_exception.h +3 -0
- package/runtime/include/js_function.h +1 -1
- package/runtime/include/js_gc.h +13 -10
- package/runtime/include/js_jobs.h +2 -0
- package/runtime/include/js_object.h +79 -3
- package/runtime/include/js_ops.h +27 -0
- package/runtime/include/js_runtime.h +1 -0
- package/runtime/include/js_web.h +0 -3
- package/runtime/include/jscontext.h +8 -0
- package/runtime/src/builtins.c +17 -4
- package/runtime/src/crypto_internal.h +1 -0
- package/runtime/src/crypto_subtle.c +66 -7
- package/runtime/src/crypto_tls.c +265 -19
- package/runtime/src/function.c +37 -10
- package/runtime/src/gc.c +76 -93
- package/runtime/src/inspect.c +18 -1
- package/runtime/src/iterator.c +5 -1
- package/runtime/src/jobs.c +37 -22
- package/runtime/src/object.c +91 -8
- package/runtime/src/os.c +16 -6
- package/runtime/src/os.h +2 -0
- package/runtime/src/process.c +97 -10
- package/runtime/src/typedarray.c +23 -0
package/runtime/src/os.h
CHANGED
|
@@ -56,5 +56,7 @@ size_t js_os_peak_rss(void);
|
|
|
56
56
|
double js_os_time_ms(void);
|
|
57
57
|
int32_t js_os_local_offset(int64_t seconds, bool *dst);
|
|
58
58
|
const char *js_os_timezone_id(void);
|
|
59
|
+
/* TZ changed (process.env.TZ): local time and the zone's id are looked up again. */
|
|
60
|
+
void js_os_timezone_changed(void);
|
|
59
61
|
|
|
60
62
|
#endif /* JS_OS_H */
|
package/runtime/src/process.c
CHANGED
|
@@ -197,7 +197,7 @@ static JSValue specific_type(JSContext *ctx, JSValue v) {
|
|
|
197
197
|
JSValue s = js_concat(ctx, prefix, quoted);
|
|
198
198
|
return js_is_exception(s) ? s : js_concat(ctx, s, suffix);
|
|
199
199
|
}
|
|
200
|
-
const char *type = js_is_number(v) ? "number" : js_is_bool(v) ? "boolean" : "symbol";
|
|
200
|
+
const char *type = js_is_number(v) ? "number" : js_is_bool(v) ? "boolean" : js_is_symbol(v) ? "symbol" : "bigint";
|
|
201
201
|
JSValue shown = js_is_symbol(v) ? js_symbol_descriptive_string(ctx, v) : js_inspect(ctx, v);
|
|
202
202
|
if (js_is_exception(shown)) return shown;
|
|
203
203
|
snprintf(buf, sizeof buf, "type %s (", type);
|
|
@@ -293,8 +293,7 @@ NATIVE(process_getgid) { UNUSED_ARGS; (void)ctx, (void)argc, (void)argv; return
|
|
|
293
293
|
NATIVE(process_getegid) { UNUSED_ARGS; (void)ctx, (void)argc, (void)argv; return js_number((double)getegid()); }
|
|
294
294
|
#endif
|
|
295
295
|
|
|
296
|
-
/* nextTick(callback, ...args):
|
|
297
|
-
* with them. */
|
|
296
|
+
/* nextTick(callback, ...args): on the tick queue, which runs before the promise jobs */
|
|
298
297
|
NATIVE(process_next_tick) {
|
|
299
298
|
UNUSED_ARGS;
|
|
300
299
|
if (!js_is_callable(ARG(0))) return invalid_arg_type(ctx, "callback", "of type function", ARG(0));
|
|
@@ -304,7 +303,7 @@ NATIVE(process_next_tick) {
|
|
|
304
303
|
if (js_is_exception(args)) return args;
|
|
305
304
|
}
|
|
306
305
|
JSJob job = { JS_JOB_CALLBACK, NULL, argv[0], args, JS_UNDEFINED, JS_UNDEFINED };
|
|
307
|
-
|
|
306
|
+
js_enqueue_tick(ctx, &job);
|
|
308
307
|
return JS_UNDEFINED;
|
|
309
308
|
}
|
|
310
309
|
|
|
@@ -467,6 +466,88 @@ static const char *arch(void) {
|
|
|
467
466
|
#endif
|
|
468
467
|
}
|
|
469
468
|
|
|
469
|
+
/* ---- process.env ------------------------------------------------------------------------------ */
|
|
470
|
+
|
|
471
|
+
/* Node's process.env interceptors (src/node_env_var.cc): a value is stored as a string and set in
|
|
472
|
+
* the C environment, a delete unsets it, and only plain data properties are accepted. Reads are
|
|
473
|
+
* ordinary (no get_own_property hook), so they stay as fast as a plain object's; writes aren't
|
|
474
|
+
* cached, so each reaches env_define. */
|
|
475
|
+
static bool env_populating; /* new_process copying environ in: nothing to set */
|
|
476
|
+
|
|
477
|
+
static char *env_utf8(JSContext *ctx, JSValue s) {
|
|
478
|
+
JSStrView v = js_string_view(ctx, s);
|
|
479
|
+
size_t n = js_view_to_utf8(v, NULL, 0);
|
|
480
|
+
char *out = malloc(n + 1);
|
|
481
|
+
if (!out) js_fatal("out of memory in process.env");
|
|
482
|
+
js_view_to_utf8(v, out, n + 1);
|
|
483
|
+
out[n] = '\0';
|
|
484
|
+
return out;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
static void env_apply(JSContext *ctx, JSValue key, JSValue value) {
|
|
488
|
+
char *k = env_utf8(ctx, key);
|
|
489
|
+
if (js_is_undefined(value)) {
|
|
490
|
+
#ifdef _WIN32
|
|
491
|
+
_putenv_s(k, "");
|
|
492
|
+
#else
|
|
493
|
+
unsetenv(k);
|
|
494
|
+
#endif
|
|
495
|
+
} else {
|
|
496
|
+
char *v = env_utf8(ctx, value);
|
|
497
|
+
#ifdef _WIN32
|
|
498
|
+
_putenv_s(k, v);
|
|
499
|
+
#else
|
|
500
|
+
setenv(k, v, 1);
|
|
501
|
+
#endif
|
|
502
|
+
free(v);
|
|
503
|
+
}
|
|
504
|
+
if (strcmp(k, "TZ") == 0) js_os_timezone_changed();
|
|
505
|
+
free(k);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
static int env_define(JSContext *ctx, JSObject *o, JSValue key, const JSPropertyDescriptor *desc, bool throw_on_fail) {
|
|
509
|
+
(void)throw_on_fail;
|
|
510
|
+
if (env_populating) return JS_ORDINARY;
|
|
511
|
+
if (js_is_symbol(key)) {
|
|
512
|
+
js_discard(js_throw_type_error(ctx, "Cannot convert a Symbol value to a string"));
|
|
513
|
+
return -1;
|
|
514
|
+
}
|
|
515
|
+
if (desc->has & (JS_DESC_GET | JS_DESC_SET)) {
|
|
516
|
+
js_discard(throw_with_code(ctx, JS_TYPE_ERROR, "ERR_INVALID_OBJECT_DEFINE_PROPERTY",
|
|
517
|
+
js_new_string_cstr(ctx, "'process.env' does not accept an accessor(getter/setter) descriptor")));
|
|
518
|
+
return -1;
|
|
519
|
+
}
|
|
520
|
+
const uint8_t all = JS_DESC_WRITABLE | JS_DESC_ENUMERABLE | JS_DESC_CONFIGURABLE;
|
|
521
|
+
bool full = (desc->has & JS_DESC_VALUE) && (desc->has & all) == all && (desc->attrs & JS_PROP_DEFAULT) == JS_PROP_DEFAULT;
|
|
522
|
+
/* an assignment to a variable already set: [[Set]] redefines it with the value alone */
|
|
523
|
+
JSPropertyDescriptor existing;
|
|
524
|
+
bool assign = (desc->has & JS_DESC_VALUE) && !(desc->has & all) && js_ordinary_get_own_property(ctx, o, key, &existing) == 1;
|
|
525
|
+
if (!full && !assign) {
|
|
526
|
+
js_discard(throw_with_code(ctx, JS_TYPE_ERROR, "ERR_INVALID_OBJECT_DEFINE_PROPERTY",
|
|
527
|
+
js_new_string_cstr(ctx, "'process.env' only accepts a configurable, writable, and enumerable data descriptor")));
|
|
528
|
+
return -1;
|
|
529
|
+
}
|
|
530
|
+
JSValue value = js_to_string(ctx, desc->value);
|
|
531
|
+
if (js_is_exception(value)) return -1;
|
|
532
|
+
JSValue name = js_to_string(ctx, key);
|
|
533
|
+
if (js_is_exception(name)) return -1;
|
|
534
|
+
if (js_string_length(name) == 0) return 1; /* as Node's: setenv refuses an empty name, nothing is stored */
|
|
535
|
+
env_apply(ctx, name, value);
|
|
536
|
+
JSPropertyDescriptor d = js_data_descriptor(value, JS_PROP_DEFAULT);
|
|
537
|
+
return js_ordinary_define_own_property(ctx, o, key, &d, true);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
static int env_delete(JSContext *ctx, JSObject *o, JSValue key, bool throw_on_fail) {
|
|
541
|
+
(void)o, (void)throw_on_fail;
|
|
542
|
+
if (env_populating || js_is_symbol(key)) return JS_ORDINARY;
|
|
543
|
+
JSValue name = js_to_string(ctx, key);
|
|
544
|
+
if (js_is_exception(name)) return -1;
|
|
545
|
+
env_apply(ctx, name, JS_UNDEFINED);
|
|
546
|
+
return JS_ORDINARY;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
static const JSClass env_class = { "Object", sizeof(JSObject), NULL, env_define, env_delete, NULL, NULL, NULL, NULL };
|
|
550
|
+
|
|
470
551
|
static JSValue new_process(JSContext *ctx) {
|
|
471
552
|
JSValue process = js_new_object(ctx);
|
|
472
553
|
if (js_is_exception(process)) return process;
|
|
@@ -494,9 +575,11 @@ static JSValue new_process(JSContext *ctx) {
|
|
|
494
575
|
define(ctx, p, "execArgv", js_new_array(ctx, 0)); /* Node's own options: a compiled program has none */
|
|
495
576
|
define(ctx, p, "execPath", exec);
|
|
496
577
|
|
|
497
|
-
/* env:
|
|
498
|
-
|
|
499
|
-
|
|
578
|
+
/* env: the environment as it was at startup, in an object whose writes and deletes reach the C
|
|
579
|
+
* environment (env_class) */
|
|
580
|
+
JSValue env = js_object_value(js_alloc_object(ctx, JS_CELL_OBJECT, js_shape_root(ctx, &env_class,
|
|
581
|
+
ctx->intrinsics[JS_INTRINSIC_OBJECT_PROTOTYPE], JS_DEFAULT_INLINE_SLOTS)));
|
|
582
|
+
env_populating = true;
|
|
500
583
|
for (size_t i = 0; environ && environ[i]; i++) {
|
|
501
584
|
const char *eq = strchr(environ[i] + 1, '=');
|
|
502
585
|
if (!eq) continue;
|
|
@@ -507,6 +590,7 @@ static JSValue new_process(JSContext *ctx) {
|
|
|
507
590
|
if (js_is_exception(key)) return key;
|
|
508
591
|
js_define_data(ctx, js_as_object(env), key, value, JS_PROP_DEFAULT);
|
|
509
592
|
}
|
|
593
|
+
env_populating = false;
|
|
510
594
|
define(ctx, p, "env", env);
|
|
511
595
|
define(ctx, p, "pid", js_int32((int32_t)getpid()));
|
|
512
596
|
/* version and versions: the Node API implemented, and visaljs's own; read-only, as Node's,
|
|
@@ -516,13 +600,16 @@ static JSValue new_process(JSContext *ctx) {
|
|
|
516
600
|
if (js_is_exception(versions)) return versions;
|
|
517
601
|
js_define_data(ctx, js_as_object(versions), js_atom_from_cstr(ctx, "node"), js_new_string_cstr(ctx, JS_NODE_VERSION), JS_PROP_ENUMERABLE | JS_PROP_CONFIGURABLE);
|
|
518
602
|
js_define_data(ctx, js_as_object(versions), js_atom_from_cstr(ctx, "visaljs"), js_new_string_cstr(ctx, JS_VISALJS_VERSION), JS_PROP_ENUMERABLE | JS_PROP_CONFIGURABLE);
|
|
603
|
+
/* Node 24.21's OpenSSL: crypto is BoringSSL, but behaves as Node's (its errors and limits), so programs
|
|
604
|
+
and Node's tests see the Node they expect. Node's own check for crypto is Boolean(process.versions.openssl). */
|
|
605
|
+
js_define_data(ctx, js_as_object(versions), js_atom_from_cstr(ctx, "openssl"), js_new_string_cstr(ctx, "3.5.5"), JS_PROP_ENUMERABLE | JS_PROP_CONFIGURABLE);
|
|
519
606
|
js_define_data(ctx, p, js_atom_from_cstr(ctx, "versions"), versions, JS_PROP_ENUMERABLE | JS_PROP_CONFIGURABLE);
|
|
520
|
-
/* features: what this build has, in Node 24's names. No inspector, TLS
|
|
521
|
-
|
|
607
|
+
/* features: what this build has, in Node 24's names. No inspector, TLS without OCSP stapling, require()
|
|
608
|
+
of ES modules, no QUIC, no type stripping; openssl_is_boringssl false, as crypto behaves as OpenSSL's */
|
|
522
609
|
static const struct { const char *name; bool on; } features[] = {
|
|
523
610
|
{ "inspector", false }, { "debug", false }, { "uv", true }, { "ipv6", true },
|
|
524
611
|
{ "tls_alpn", true }, { "tls_sni", true }, { "tls_ocsp", false }, { "tls", true },
|
|
525
|
-
{ "openssl_is_boringssl",
|
|
612
|
+
{ "openssl_is_boringssl", false }, { "cached_builtins", true }, { "require_module", true }, { "quic", false },
|
|
526
613
|
{ "typescript", false },
|
|
527
614
|
};
|
|
528
615
|
JSValue feats = js_new_object(ctx);
|
package/runtime/src/typedarray.c
CHANGED
|
@@ -1234,6 +1234,26 @@ static double hook_typed_array_length(JSValue v) {
|
|
|
1234
1234
|
return out_of_bounds(as_ta(v)) ? -1 : (double)ta_length(as_ta(v));
|
|
1235
1235
|
}
|
|
1236
1236
|
|
|
1237
|
+
/* An element the core may read or write inline: of a typed array, a valid index (§10.4.5.15
|
|
1238
|
+
* IsValidIntegerIndex), a Number element. Its own data property: no prototype, no code runs. */
|
|
1239
|
+
static bool inline_elem(JSValue v, int32_t i) {
|
|
1240
|
+
if (!is_ta(v) || i < 0) return false;
|
|
1241
|
+
const JSTypedArray *ta = as_ta(v);
|
|
1242
|
+
return !is_bigint_type(ta->type) && (size_t)i < ta_length(ta);
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
static bool hook_typed_array_get(JSValue v, int32_t i, JSValue *out) {
|
|
1246
|
+
if (!inline_elem(v, i)) return false;
|
|
1247
|
+
*out = js_number(load_number(as_ta(v), (size_t)i));
|
|
1248
|
+
return true;
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
static bool hook_typed_array_set(JSValue v, int32_t i, double d) {
|
|
1252
|
+
if (!inline_elem(v, i) || immutable(as_ta(v))) return false;
|
|
1253
|
+
store(as_ta(v), (size_t)i, d);
|
|
1254
|
+
return true;
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1237
1257
|
static bool hook_view_bytes(JSValue v, uint8_t **data, size_t *length) {
|
|
1238
1258
|
return !js_is_array_buffer(v) && js_buffer_source_bytes(v, data, length);
|
|
1239
1259
|
}
|
|
@@ -1330,6 +1350,9 @@ static void install_typedarray(JSContext *ctx, JSObject *global) {
|
|
|
1330
1350
|
ctx->rt->is_typed_array = hook_is_typed_array;
|
|
1331
1351
|
ctx->rt->typed_array_length = hook_typed_array_length;
|
|
1332
1352
|
ctx->rt->view_bytes = hook_view_bytes;
|
|
1353
|
+
ctx->rt->typed_array_get = hook_typed_array_get;
|
|
1354
|
+
ctx->rt->typed_array_class = &ta_class;
|
|
1355
|
+
ctx->rt->typed_array_set = hook_typed_array_set;
|
|
1333
1356
|
}
|
|
1334
1357
|
|
|
1335
1358
|
const JSComponent js_component_typedarray = { "typedarray", install_typedarray };
|