From f8aa3655082bd95ce05cb9eb21251b74ff8d0306 Mon Sep 17 00:00:00 2001 From: Soar <58918356+soar-beep@users.noreply.github.com> Date: Sun, 15 Dec 2019 19:45:15 -0500 Subject: [PATCH 001/180] assert: use for...of Refs: #30960 PR-URL: https://github.com/nodejs/node/pull/30983 Refs: https://github.com/nodejs/node/pull/30960 Reviewed-By: David Carlier Reviewed-By: Trivikram Kamat Reviewed-By: Rich Trott Reviewed-By: Luigi Pinca --- lib/assert.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/assert.js b/lib/assert.js index c3faba09053474..61258deb6b076d 100644 --- a/lib/assert.js +++ b/lib/assert.js @@ -868,9 +868,9 @@ assert.ifError = function ifError(err) { tmp2.shift(); // Filter all frames existing in err.stack. let tmp1 = newErr.stack.split('\n'); - for (let i = 0; i < tmp2.length; i++) { + for (const errFrame of tmp2) { // Find the first occurrence of the frame. - const pos = tmp1.indexOf(tmp2[i]); + const pos = tmp1.indexOf(errFrame); if (pos !== -1) { // Only keep new frames. tmp1 = tmp1.slice(0, pos); From 32805a9525d533ea7e58bd2536be4b40f5ed3fe9 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Sun, 15 Dec 2019 10:38:58 -0500 Subject: [PATCH 002/180] deps,src,test: update to uvwasi 0.0.3 This commit updates to uvwasi 0.0.3, which implements a newer version of the WASI spec, snapshot_1. Since the WASI API has changed, this also requires updating the WebAssembly memory interfacing logic and recompiling the WASI tests with a version of wasi-libc that supports snapshot_1. PR-URL: https://github.com/nodejs/node/pull/30980 Reviewed-By: David Carlier Reviewed-By: Anna Henningsen Reviewed-By: Rich Trott --- deps/uvwasi/include/fd_table.h | 20 +--- deps/uvwasi/include/uvwasi.h | 5 +- deps/uvwasi/include/wasi_types.h | 9 +- deps/uvwasi/src/fd_table.c | 59 +++++++++--- deps/uvwasi/src/uvwasi.c | 103 ++++++++++++++++++++- doc/api/wasi.md | 6 +- src/node_wasi.cc | 29 +++--- test/wasi/test-wasi-symlinks.js | 2 +- test/wasi/test-wasi.js | 2 +- test/wasi/wasm/cant_dotdot.wasm | Bin 33007 -> 32641 bytes test/wasi/wasm/clock_getres.wasm | Bin 30146 -> 30064 bytes test/wasi/wasm/exitcode.wasm | Bin 12694 -> 12107 bytes test/wasi/wasm/fd_prestat_get_refresh.wasm | Bin 12855 -> 12307 bytes test/wasi/wasm/follow_symlink.wasm | Bin 34948 -> 34590 bytes test/wasi/wasm/getentropy.wasm | Bin 29943 -> 29861 bytes test/wasi/wasm/getrusage.wasm | Bin 30602 -> 30455 bytes test/wasi/wasm/gettimeofday.wasm | Bin 30428 -> 30346 bytes test/wasi/wasm/notdir.wasm | Bin 31267 -> 30998 bytes test/wasi/wasm/poll.wasm | Bin 34096 -> 33777 bytes test/wasi/wasm/preopen_populates.wasm | Bin 12689 -> 12102 bytes test/wasi/wasm/read_file.wasm | Bin 34932 -> 34574 bytes test/wasi/wasm/read_file_twice.wasm | Bin 35018 -> 34660 bytes test/wasi/wasm/stat.wasm | Bin 34507 -> 34188 bytes test/wasi/wasm/stdin.wasm | Bin 18390 -> 18044 bytes test/wasi/wasm/symlink_escape.wasm | Bin 33026 -> 32660 bytes test/wasi/wasm/symlink_loop.wasm | Bin 33009 -> 32643 bytes test/wasi/wasm/write_file.wasm | Bin 33357 -> 32983 bytes 27 files changed, 176 insertions(+), 59 deletions(-) diff --git a/deps/uvwasi/include/fd_table.h b/deps/uvwasi/include/fd_table.h index 42a5f0d920ff6e..639ff9abc8d34f 100644 --- a/deps/uvwasi/include/fd_table.h +++ b/deps/uvwasi/include/fd_table.h @@ -6,33 +6,22 @@ #include "wasi_types.h" #include "uv_mapping.h" -/* TODO(cjihrig): PATH_MAX_BYTES shouldn't be stack allocated. On Windows, paths - can be 32k long, and this PATH_MAX_BYTES is an artificial limitation. */ -#ifdef _WIN32 -/* MAX_PATH is in characters, not bytes. Make sure we have enough headroom. */ -# define PATH_MAX_BYTES (MAX_PATH * 4) -#else -# include -# define PATH_MAX_BYTES (PATH_MAX) -#endif - struct uvwasi_s; struct uvwasi_fd_wrap_t { uvwasi_fd_t id; uv_file fd; - char path[PATH_MAX_BYTES]; - char real_path[PATH_MAX_BYTES]; + char* path; + char* real_path; uvwasi_filetype_t type; uvwasi_rights_t rights_base; uvwasi_rights_t rights_inheriting; int preopen; - int valid; uv_mutex_t mutex; }; struct uvwasi_fd_table_t { - struct uvwasi_fd_wrap_t* fds; + struct uvwasi_fd_wrap_t** fds; uint32_t size; uint32_t used; uv_rwlock_t rwlock; @@ -61,7 +50,8 @@ uvwasi_errno_t uvwasi_fd_table_get(const struct uvwasi_fd_table_t* table, struct uvwasi_fd_wrap_t** wrap, uvwasi_rights_t rights_base, uvwasi_rights_t rights_inheriting); -uvwasi_errno_t uvwasi_fd_table_remove(struct uvwasi_fd_table_t* table, +uvwasi_errno_t uvwasi_fd_table_remove(struct uvwasi_s* uvwasi, + struct uvwasi_fd_table_t* table, const uvwasi_fd_t id); #endif /* __UVWASI_FD_TABLE_H__ */ diff --git a/deps/uvwasi/include/uvwasi.h b/deps/uvwasi/include/uvwasi.h index 2a4e389164357d..2fbcbc583dcbfb 100644 --- a/deps/uvwasi/include/uvwasi.h +++ b/deps/uvwasi/include/uvwasi.h @@ -11,7 +11,7 @@ extern "C" { #define UVWASI_VERSION_MAJOR 0 #define UVWASI_VERSION_MINOR 0 -#define UVWASI_VERSION_PATCH 1 +#define UVWASI_VERSION_PATCH 3 #define UVWASI_VERSION_HEX ((UVWASI_VERSION_MAJOR << 16) | \ (UVWASI_VERSION_MINOR << 8) | \ (UVWASI_VERSION_PATCH)) @@ -20,7 +20,7 @@ extern "C" { #define UVWASI_VERSION_STRING UVWASI_STRINGIFY(UVWASI_VERSION_MAJOR) "." \ UVWASI_STRINGIFY(UVWASI_VERSION_MINOR) "." \ UVWASI_STRINGIFY(UVWASI_VERSION_PATCH) -#define UVWASI_VERSION_WASI "snapshot_0" +#define UVWASI_VERSION_WASI "snapshot_1" typedef void* (*uvwasi_malloc)(size_t size, void* mem_user_data); typedef void (*uvwasi_free)(void* ptr, void* mem_user_data); @@ -69,6 +69,7 @@ void uvwasi_destroy(uvwasi_t* uvwasi); uvwasi_errno_t uvwasi_embedder_remap_fd(uvwasi_t* uvwasi, const uvwasi_fd_t fd, uv_file new_host_fd); +const char* uvwasi_embedder_err_code_to_string(uvwasi_errno_t code); // WASI system call API. diff --git a/deps/uvwasi/include/wasi_types.h b/deps/uvwasi/include/wasi_types.h index 34b5291c577627..ec1013663f6a76 100644 --- a/deps/uvwasi/include/wasi_types.h +++ b/deps/uvwasi/include/wasi_types.h @@ -155,7 +155,7 @@ typedef struct uvwasi_iovec_s { size_t buf_len; } uvwasi_iovec_t; -typedef uint32_t uvwasi_linkcount_t; +typedef uint64_t uvwasi_linkcount_t; typedef uint32_t uvwasi_lookupflags_t; /* Bitfield */ #define UVWASI_LOOKUP_SYMLINK_FOLLOW (1 << 0) @@ -266,7 +266,6 @@ typedef struct uvwasi_subscription_s { uvwasi_eventtype_t type; union { struct { - uvwasi_userdata_t identifier; uvwasi_clockid_t clock_id; uvwasi_timestamp_t timeout; uvwasi_timestamp_t precision; @@ -316,8 +315,8 @@ typedef struct uvwasi_event_s { } uvwasi_event_t; typedef uint8_t uvwasi_whence_t; -#define UVWASI_WHENCE_CUR 0 -#define UVWASI_WHENCE_END 1 -#define UVWASI_WHENCE_SET 2 +#define UVWASI_WHENCE_SET 0 +#define UVWASI_WHENCE_CUR 1 +#define UVWASI_WHENCE_END 2 #endif /* __UVWASI_WASI_TYPES_H__ */ diff --git a/deps/uvwasi/src/fd_table.c b/deps/uvwasi/src/fd_table.c index f716495e9a02b2..0abddb5a21dd36 100644 --- a/deps/uvwasi/src/fd_table.c +++ b/deps/uvwasi/src/fd_table.c @@ -187,12 +187,29 @@ static uvwasi_errno_t uvwasi__fd_table_insert(uvwasi_t* uvwasi, int preopen, struct uvwasi_fd_wrap_t** wrap) { struct uvwasi_fd_wrap_t* entry; - struct uvwasi_fd_wrap_t* new_fds; + struct uvwasi_fd_wrap_t** new_fds; uvwasi_errno_t err; uint32_t new_size; int index; uint32_t i; int r; + size_t mp_len; + char* mp_copy; + size_t rp_len; + char* rp_copy; + + mp_len = strlen(mapped_path); + rp_len = strlen(real_path); + entry = (struct uvwasi_fd_wrap_t*) + uvwasi__malloc(uvwasi, sizeof(*entry) + mp_len + rp_len + 2); + if (entry == NULL) return UVWASI_ENOMEM; + + mp_copy = (char*)(entry + 1); + rp_copy = mp_copy + mp_len + 1; + memcpy(mp_copy, mapped_path, mp_len); + mp_copy[mp_len] = '\0'; + memcpy(rp_copy, real_path, rp_len); + rp_copy[rp_len] = '\0'; uv_rwlock_wrlock(&table->rwlock); @@ -201,12 +218,13 @@ static uvwasi_errno_t uvwasi__fd_table_insert(uvwasi_t* uvwasi, new_size = table->size * 2; new_fds = uvwasi__realloc(uvwasi, table->fds, new_size * sizeof(*new_fds)); if (new_fds == NULL) { + uvwasi__free(uvwasi, entry); err = UVWASI_ENOMEM; goto exit; } for (i = table->size; i < new_size; ++i) - new_fds[i].valid = 0; + new_fds[i] = NULL; index = table->size; table->fds = new_fds; @@ -215,7 +233,7 @@ static uvwasi_errno_t uvwasi__fd_table_insert(uvwasi_t* uvwasi, /* The table is big enough, so find an empty slot for the new data. */ index = -1; for (i = 0; i < table->size; ++i) { - if (table->fds[i].valid != 1) { + if (table->fds[i] == NULL) { index = i; break; } @@ -223,12 +241,13 @@ static uvwasi_errno_t uvwasi__fd_table_insert(uvwasi_t* uvwasi, /* index should never be -1. */ if (index == -1) { + uvwasi__free(uvwasi, entry); err = UVWASI_ENOSPC; goto exit; } } - entry = &table->fds[index]; + table->fds[index] = entry; r = uv_mutex_init(&entry->mutex); if (r != 0) { @@ -238,13 +257,12 @@ static uvwasi_errno_t uvwasi__fd_table_insert(uvwasi_t* uvwasi, entry->id = index; entry->fd = fd; - strcpy(entry->path, mapped_path); - strcpy(entry->real_path, real_path); + entry->path = mp_copy; + entry->real_path = rp_copy; entry->type = type; entry->rights_base = rights_base; entry->rights_inheriting = rights_inheriting; entry->preopen = preopen; - entry->valid = 1; table->used++; if (wrap != NULL) @@ -281,7 +299,7 @@ uvwasi_errno_t uvwasi_fd_table_init(uvwasi_t* uvwasi, table->size = init_size; table->fds = uvwasi__calloc(uvwasi, init_size, - sizeof(struct uvwasi_fd_wrap_t)); + sizeof(struct uvwasi_fd_wrap_t*)); if (table->fds == NULL) { err = UVWASI_ENOMEM; @@ -325,9 +343,20 @@ uvwasi_errno_t uvwasi_fd_table_init(uvwasi_t* uvwasi, void uvwasi_fd_table_free(uvwasi_t* uvwasi, struct uvwasi_fd_table_t* table) { + struct uvwasi_fd_wrap_t* entry; + uint32_t i; + if (table == NULL) return; + for (i = 0; i < table->size; i++) { + entry = table->fds[i]; + if (entry == NULL) continue; + + uv_mutex_destroy(&entry->mutex); + uvwasi__free(uvwasi, entry); + } + uvwasi__free(uvwasi, table->fds); table->fds = NULL; table->size = 0; @@ -430,9 +459,9 @@ uvwasi_errno_t uvwasi_fd_table_get(const struct uvwasi_fd_table_t* table, goto exit; } - entry = &table->fds[id]; + entry = table->fds[id]; - if (entry->valid != 1 || entry->id != id) { + if (entry == NULL || entry->id != id) { err = UVWASI_EBADF; goto exit; } @@ -453,7 +482,8 @@ uvwasi_errno_t uvwasi_fd_table_get(const struct uvwasi_fd_table_t* table, } -uvwasi_errno_t uvwasi_fd_table_remove(struct uvwasi_fd_table_t* table, +uvwasi_errno_t uvwasi_fd_table_remove(uvwasi_t* uvwasi, + struct uvwasi_fd_table_t* table, const uvwasi_fd_t id) { struct uvwasi_fd_wrap_t* entry; uvwasi_errno_t err; @@ -468,15 +498,16 @@ uvwasi_errno_t uvwasi_fd_table_remove(struct uvwasi_fd_table_t* table, goto exit; } - entry = &table->fds[id]; + entry = table->fds[id]; - if (entry->valid != 1 || entry->id != id) { + if (entry == NULL || entry->id != id) { err = UVWASI_EBADF; goto exit; } uv_mutex_destroy(&entry->mutex); - entry->valid = 0; + uvwasi__free(uvwasi, entry); + table->fds[id] = NULL; table->used--; err = UVWASI_ESUCCESS; exit: diff --git a/deps/uvwasi/src/uvwasi.c b/deps/uvwasi/src/uvwasi.c index 0f7c4c5d3aa0ef..28c6dcc26104c9 100644 --- a/deps/uvwasi/src/uvwasi.c +++ b/deps/uvwasi/src/uvwasi.c @@ -25,6 +25,16 @@ #include "fd_table.h" #include "clocks.h" +/* TODO(cjihrig): PATH_MAX_BYTES shouldn't be stack allocated. On Windows, paths + can be 32k long, and this PATH_MAX_BYTES is an artificial limitation. */ +#ifdef _WIN32 +/* MAX_PATH is in characters, not bytes. Make sure we have enough headroom. */ +# define PATH_MAX_BYTES (MAX_PATH * 4) +#else +# include +# define PATH_MAX_BYTES (PATH_MAX) +#endif + static void* default_malloc(size_t size, void* mem_user_data) { return malloc(size); } @@ -688,7 +698,7 @@ uvwasi_errno_t uvwasi_fd_close(uvwasi_t* uvwasi, uvwasi_fd_t fd) { if (r != 0) return uvwasi__translate_uv_error(r); - return uvwasi_fd_table_remove(&uvwasi->fds, fd); + return uvwasi_fd_table_remove(uvwasi, &uvwasi->fds, fd); } @@ -1319,7 +1329,7 @@ uvwasi_errno_t uvwasi_fd_renumber(uvwasi_t* uvwasi, to_wrap->id = to; uv_mutex_unlock(&from_wrap->mutex); uv_mutex_unlock(&to_wrap->mutex); - return uvwasi_fd_table_remove(&uvwasi->fds, from); + return uvwasi_fd_table_remove(uvwasi, &uvwasi->fds, from); } @@ -1773,7 +1783,7 @@ uvwasi_errno_t uvwasi_path_open(uvwasi_t* uvwasi, if ((o_flags & UVWASI_O_DIRECTORY) != 0 && wrap.type != UVWASI_FILETYPE_DIRECTORY) { uv_mutex_unlock(&dirfd_wrap->mutex); - uvwasi_fd_table_remove(&uvwasi->fds, wrap.id); + uvwasi_fd_table_remove(uvwasi, &uvwasi->fds, wrap.id); err = UVWASI_ENOTDIR; goto close_file_and_error_exit; } @@ -2140,3 +2150,90 @@ uvwasi_errno_t uvwasi_sock_shutdown(uvwasi_t* uvwasi, https://github.com/WebAssembly/WASI/issues/4 */ return UVWASI_ENOTSUP; } + + +const char* uvwasi_embedder_err_code_to_string(uvwasi_errno_t code) { + switch (code) { +#define V(errcode) case errcode: return #errcode; + V(UVWASI_E2BIG) + V(UVWASI_EACCES) + V(UVWASI_EADDRINUSE) + V(UVWASI_EADDRNOTAVAIL) + V(UVWASI_EAFNOSUPPORT) + V(UVWASI_EAGAIN) + V(UVWASI_EALREADY) + V(UVWASI_EBADF) + V(UVWASI_EBADMSG) + V(UVWASI_EBUSY) + V(UVWASI_ECANCELED) + V(UVWASI_ECHILD) + V(UVWASI_ECONNABORTED) + V(UVWASI_ECONNREFUSED) + V(UVWASI_ECONNRESET) + V(UVWASI_EDEADLK) + V(UVWASI_EDESTADDRREQ) + V(UVWASI_EDOM) + V(UVWASI_EDQUOT) + V(UVWASI_EEXIST) + V(UVWASI_EFAULT) + V(UVWASI_EFBIG) + V(UVWASI_EHOSTUNREACH) + V(UVWASI_EIDRM) + V(UVWASI_EILSEQ) + V(UVWASI_EINPROGRESS) + V(UVWASI_EINTR) + V(UVWASI_EINVAL) + V(UVWASI_EIO) + V(UVWASI_EISCONN) + V(UVWASI_EISDIR) + V(UVWASI_ELOOP) + V(UVWASI_EMFILE) + V(UVWASI_EMLINK) + V(UVWASI_EMSGSIZE) + V(UVWASI_EMULTIHOP) + V(UVWASI_ENAMETOOLONG) + V(UVWASI_ENETDOWN) + V(UVWASI_ENETRESET) + V(UVWASI_ENETUNREACH) + V(UVWASI_ENFILE) + V(UVWASI_ENOBUFS) + V(UVWASI_ENODEV) + V(UVWASI_ENOENT) + V(UVWASI_ENOEXEC) + V(UVWASI_ENOLCK) + V(UVWASI_ENOLINK) + V(UVWASI_ENOMEM) + V(UVWASI_ENOMSG) + V(UVWASI_ENOPROTOOPT) + V(UVWASI_ENOSPC) + V(UVWASI_ENOSYS) + V(UVWASI_ENOTCONN) + V(UVWASI_ENOTDIR) + V(UVWASI_ENOTEMPTY) + V(UVWASI_ENOTRECOVERABLE) + V(UVWASI_ENOTSOCK) + V(UVWASI_ENOTSUP) + V(UVWASI_ENOTTY) + V(UVWASI_ENXIO) + V(UVWASI_EOVERFLOW) + V(UVWASI_EOWNERDEAD) + V(UVWASI_EPERM) + V(UVWASI_EPIPE) + V(UVWASI_EPROTO) + V(UVWASI_EPROTONOSUPPORT) + V(UVWASI_EPROTOTYPE) + V(UVWASI_ERANGE) + V(UVWASI_EROFS) + V(UVWASI_ESPIPE) + V(UVWASI_ESRCH) + V(UVWASI_ESTALE) + V(UVWASI_ETIMEDOUT) + V(UVWASI_ETXTBSY) + V(UVWASI_EXDEV) + V(UVWASI_ENOTCAPABLE) + V(UVWASI_ESUCCESS) +#undef V + default: + return "UVWASI_UNKNOWN_ERROR"; + } +} diff --git a/doc/api/wasi.md b/doc/api/wasi.md index f5425bb2bd85ce..7127e7f8bb087e 100644 --- a/doc/api/wasi.md +++ b/doc/api/wasi.md @@ -19,7 +19,7 @@ const wasi = new WASI({ '/sandbox': '/some/real/path/that/wasm/can/access' } }); -const importObject = { wasi_unstable: wasi.wasiImport }; +const importObject = { wasi_snapshot_preview1: wasi.wasiImport }; (async () => { const wasm = await WebAssembly.compile(fs.readFileSync('./binary.wasm')); @@ -82,8 +82,8 @@ added: v13.3.0 * {Object} `wasiImport` is an object that implements the WASI system call API. This object -should be passed as the `wasi_unstable` import during the instantiation of a -[`WebAssembly.Instance`][]. +should be passed as the `wasi_snapshot_preview1` import during the instantiation +of a [`WebAssembly.Instance`][]. [`WebAssembly.Instance`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance [`WebAssembly.Memory`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory diff --git a/src/node_wasi.cc b/src/node_wasi.cc index 39669df490c957..5f4644e03ac080 100644 --- a/src/node_wasi.cc +++ b/src/node_wasi.cc @@ -511,11 +511,11 @@ void WASI::FdFilestatGet(const FunctionCallbackInfo& args) { wasi->writeUInt64(memory, stats.st_dev, buf); wasi->writeUInt64(memory, stats.st_ino, buf + 8); wasi->writeUInt8(memory, stats.st_filetype, buf + 16); - wasi->writeUInt32(memory, stats.st_nlink, buf + 20); - wasi->writeUInt64(memory, stats.st_size, buf + 24); - wasi->writeUInt64(memory, stats.st_atim, buf + 32); - wasi->writeUInt64(memory, stats.st_mtim, buf + 40); - wasi->writeUInt64(memory, stats.st_ctim, buf + 48); + wasi->writeUInt32(memory, stats.st_nlink, buf + 24); + wasi->writeUInt64(memory, stats.st_size, buf + 32); + wasi->writeUInt64(memory, stats.st_atim, buf + 40); + wasi->writeUInt64(memory, stats.st_mtim, buf + 48); + wasi->writeUInt64(memory, stats.st_ctim, buf + 56); } args.GetReturnValue().Set(err); @@ -1039,11 +1039,11 @@ void WASI::PathFilestatGet(const FunctionCallbackInfo& args) { wasi->writeUInt64(memory, stats.st_dev, buf_ptr); wasi->writeUInt64(memory, stats.st_ino, buf_ptr + 8); wasi->writeUInt8(memory, stats.st_filetype, buf_ptr + 16); - wasi->writeUInt32(memory, stats.st_nlink, buf_ptr + 20); - wasi->writeUInt64(memory, stats.st_size, buf_ptr + 24); - wasi->writeUInt64(memory, stats.st_atim, buf_ptr + 32); - wasi->writeUInt64(memory, stats.st_mtim, buf_ptr + 40); - wasi->writeUInt64(memory, stats.st_ctim, buf_ptr + 48); + wasi->writeUInt32(memory, stats.st_nlink, buf_ptr + 24); + wasi->writeUInt64(memory, stats.st_size, buf_ptr + 32); + wasi->writeUInt64(memory, stats.st_atim, buf_ptr + 40); + wasi->writeUInt64(memory, stats.st_mtim, buf_ptr + 48); + wasi->writeUInt64(memory, stats.st_ctim, buf_ptr + 56); } args.GetReturnValue().Set(err); @@ -1406,11 +1406,10 @@ void WASI::PollOneoff(const FunctionCallbackInfo& args) { wasi->readUInt8(memory, &sub.type, in_ptr + 8); if (sub.type == UVWASI_EVENTTYPE_CLOCK) { - wasi->readUInt64(memory, &sub.u.clock.identifier, in_ptr + 16); - wasi->readUInt32(memory, &sub.u.clock.clock_id, in_ptr + 24); - wasi->readUInt64(memory, &sub.u.clock.timeout, in_ptr + 32); - wasi->readUInt64(memory, &sub.u.clock.precision, in_ptr + 40); - wasi->readUInt16(memory, &sub.u.clock.flags, in_ptr + 48); + wasi->readUInt32(memory, &sub.u.clock.clock_id, in_ptr + 16); + wasi->readUInt64(memory, &sub.u.clock.timeout, in_ptr + 24); + wasi->readUInt64(memory, &sub.u.clock.precision, in_ptr + 32); + wasi->readUInt16(memory, &sub.u.clock.flags, in_ptr + 40); } else if (sub.type == UVWASI_EVENTTYPE_FD_READ || sub.type == UVWASI_EVENTTYPE_FD_WRITE) { wasi->readUInt32(memory, &sub.u.fd_readwrite.fd, in_ptr + 16); diff --git a/test/wasi/test-wasi-symlinks.js b/test/wasi/test-wasi-symlinks.js index 7c6e6809738975..56e49331b0bc76 100644 --- a/test/wasi/test-wasi-symlinks.js +++ b/test/wasi/test-wasi-symlinks.js @@ -17,7 +17,7 @@ if (process.argv[2] === 'wasi-child') { '/sandbox': process.argv[4] } }); - const importObject = { wasi_unstable: wasi.wasiImport }; + const importObject = { wasi_snapshot_preview1: wasi.wasiImport }; const modulePath = path.join(wasmDir, `${process.argv[3]}.wasm`); const buffer = fs.readFileSync(modulePath); diff --git a/test/wasi/test-wasi.js b/test/wasi/test-wasi.js index d1060f5b32d33d..f80ed835f82ed5 100644 --- a/test/wasi/test-wasi.js +++ b/test/wasi/test-wasi.js @@ -22,7 +22,7 @@ if (process.argv[2] === 'wasi-child') { '/tmp': tmpdir.path } }); - const importObject = { wasi_unstable: wasi.wasiImport }; + const importObject = { wasi_snapshot_preview1: wasi.wasiImport }; const modulePath = path.join(wasmDir, `${process.argv[3]}.wasm`); const buffer = fs.readFileSync(modulePath); diff --git a/test/wasi/wasm/cant_dotdot.wasm b/test/wasi/wasm/cant_dotdot.wasm index 61e202d6913a3e000ecbd8978ce183df41f8e64f..1ffbe23c6afdb2fcb784db4d1c7d08ce3897e1c8 100755 GIT binary patch literal 32641 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 Y@%P2NebFS!Z?q9zlwHsDPZ{U`0byLDrvLx| literal 33007 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 J->)&w{{wP$&w>B| diff --git a/test/wasi/wasm/clock_getres.wasm b/test/wasi/wasm/clock_getres.wasm index fac14edb04d794431f1b5a605af66af8c95c2949..510049dca4a0099b587983afeffe9f3ec4be71be 100755 GIT binary patch literal 30064 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 delta 3538 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 S54n1DG@nbVKK_x*F!n!Z#u*U+ delta 3716 zcmaJ^YiwLc6`sf4m+xNhwGuyKC(hhk<2ba5T2yw^hQdxN*G<3TSafUxoILP8JJReLCPK*pZ zd3s`U@C&Dg8&3=koE;y=W^&-<@FZg!+1u8!hepN+P7gjY%=ku`rs3rD)X4am(*qMD z=Y}V?GUE@Y5?i=v92`G6@xN8`mc4~u;q3UC#|MU=8kuCD6&oW85cP?nwVY&Yi)xv|js2Li4{AVpQNeL$Eg)+0R4YvCo*j74wYK|xq@ zc%Ep1Ot&@7?oAjYcK9{oMBs$a(@M#}^A(4km8vAKvoQ>Egtg9V1T=aC za}Fb+$fdHLxOHH&yFfO21L5nRu<%9NAg6E+i-%miaE{o401scLPsM=}4x;9cp|oDH zj?o4h4_`F@;+5X7lXko2QATB|tX+9wN(rMZa?jSHoXR<)N|yW*=Slcg>scsK@*5CN zIB%xK1fMbQiF-Ph5G1Q1!PwLJTEvvsBl59SS^b*%l)RVEnsaiVFPXfz$mh(rz1i*S zG)R&;8><_xkRSIql_|E%fGei24q$o4|&X7)(%nspmV;x3qdInsVC zcSmu7=s5dKS@m;jlzY2x?T}=0Q0}5YDH1d`dxF`zy0nsJE|LN$5#&YVk;C5B^B{IQo(X&hN^Oz zRm3~yPkw8wHKoBRi}#%fEpM1z#gCVMNQ4-U!0r)CX0W((=M5|5jRg&&YBRN&dnB`L zUM_yD^$L|loYlz#K|vKF;l$oCzb)Q(i^2Ut$6hCowEF_D=p$NvXIcE2ycAooi{RT) z%y=-#ubAHl_w#qn?TsB+_cb0UTm5#@LyT#3fY`2lRnY%gSy{;)LGKm9dT1=XV%}`r z*Skbsl&HnX*sett2Lm&25aTGNt-!K7+#~MymZbNT?n*AZdY}f*Dt0X3h=&f+($g%I zD2ul(dX}~9mO3emS4rC?V2`6LuGJ}J@pF=s6qsudEL@4lC@aLL-h$g!s>#E*cGa$@-=+`g<9lvfo3Ubn~SaYwak#Ms6`pQ z{8G~^e8Ifh^blV*?=@XbHu+c=Oup`;fICXFz2c`7cLk{wXlG%mh&=Gy5-&*QYh|ZI zkfi{D+=Yg+IOWR1WViL#dm2JLV#W+_`)=TF5X1}0tm)YPw0Wz!+uYb*M7RHJ`vKeq zqWRMYT{ELsZ3Up2?ct&aYjH+_j3-WW>SDyWE-~P^Xy%*aZdbewR05!_c4m+3Of)ss z+nl-C{7BP`J*;QYta564tc)=4ZaIgG>H96`8)s9VB*v`yWb31wGJ2);JN1mD%c#HY zX=L)tHp(Qo<8c@o-Ek4?zwS7*N%u_q6-eefG-M8UJO`PZ9fSM@Q`vc}(;oEU0Jl0~ zjaa?#MU|W^m}@&fhg*>EI=ULYSdD&Q*LfKH&91rC=sg$xbZ4dHN=xF|cZS~TJZYwO z_Z+f2O13Y^xg$-lLONXwA09EhYySt!=XY-v&HK9v%advi%QTw5tKB7QxUb&hbEYfW zvk9ZeqScDA@4~EUjGqB&^Kk`u{W$JF=o&Y{q>(l;z2V$PxVESxE~|>u3uv!BC2+#(ClH-z&I1bD?O&-h$DD(pl-@w33AdN|sbYhHjoC!0KEi`3u3b^Ua(t39 zB$X(GOVmn7S$dX>c+`O;*a>F0t7Ht5RTjjyQ>Y|@g63Y_VhBDri{IsfeJQ`BgL&kDziOSHy5#&0$2Yyt!_ ZjbKK7f7atn&*c3N<@Kih|KyS}_FuY8eCq%J diff --git a/test/wasi/wasm/follow_symlink.wasm b/test/wasi/wasm/follow_symlink.wasm index 48cf8da1eb28605e93a9611e394a0632b899c4ef..f5f236c53f2440a5212de439577a959028b8dc65 100755 GIT binary patch literal 34590 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∋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 RdanPp$LdSB_W3Es`G5ZeZDRlc diff --git a/test/wasi/wasm/getrusage.wasm b/test/wasi/wasm/getrusage.wasm index 524e809175b5aafe5f8124ecf0d181eae03c8d99..c9546e232c795648eeb2966cc0b40c424bb2e4f2 100755 GIT binary patch literal 30455 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 kh8cjiNwaRH9Xd)aFffm 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 F{{sOI-^l;~ diff --git a/test/wasi/wasm/gettimeofday.wasm b/test/wasi/wasm/gettimeofday.wasm index 94627f00866903691760e8cfb59830d432c1978f..7629b119d8895d3a74b4cf26ad304889a220bf29 100755 GIT binary patch literal 30346 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 literal 30428 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 bvqVg0?~8f+qDhqBXw$VQyOHa+80Y^2iabgN literal 31267 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 H?+fw24IUw> literal 34096 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 G*na`l1_mPl delta 3562 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 C*d_%4 literal 34932 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 diff --git a/test/wasi/wasm/read_file_twice.wasm b/test/wasi/wasm/read_file_twice.wasm index cd075a4de75a51b6921a665137bb4c04a1ec3a7b..6917a105eb4c08fca2ad381322ee64e738790343 100755 GIT binary patch literal 34660 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 a@pQ^->rFK{(rZG~U?Q2sb!f+X$~c z8rem-5jH|&YxxbDlxU)+B|YF61dj&(^4hh)-whru>!BZTgHfXQZG`WOek9&j ze`;oR?)>`V>e|d>3$xoEzj*%g$}AUa=bxBe3!?tVV?B>A&aIqZoVhd`1pRGBW*4u_ ztt>5`U!D8Av#VQ;QY~6+F~hc*l_yqj-gU?xZ_%%Ed1dLs`Pr*;YeC!(PaT*azj!l@ zDwk*0o;<&Fd3G@<_4ga1--U&x)!Crj|3E~@2V9+9JOB8?%oD5E6Kaq)tFyE7!9ags z4f@o|+}dm~*#AHsR%T}|27~dL(?dg*s9cWYC>|Ot2gC7DR2~|tmWRsxFDQqSkRT{W zk^WVN%0Vz#j)Gc!h`SLTBc4RtO6Bl!I51F-!yp>i5pRUq*MFf@-3W@qA0Dg@-ccI3 zG<#`j<>@G>oX}BT>m@owcDwlj-K)p>WjhN_27#V7e_9U`9yEVcXD+Un zsxD-hG^_{Jsz!G~R%Bc)JWY7(`!TXY-EKDkH$W@k;VK)r& z^si={9}=v!>?3xpyPB&v|GB}xjX}2^kG5;D?McHmlBTOBBd+O2&L*P_Hs(g%*mANx zns(b^&5zj#JF<`4aXcGLc4oh7=M!#+8+SY1MDu4ga!~a{PP)nFCvB=-OttG|FlO*? zBrO*m3C5D$*+jC(?RI(+?lyP(S~BIP-0kbhLC}4pd*f8}vcYu79dw79|H7s}%=CwkM>T;}OOCiB$sO)M za@5`7j-E}9G0C0on7ea1c@vnv2~2<8MtF0M>0MbZc}tGzarb6-mwSsl-jC@CcOu91 zZl<~$Olt^@=h9ml|D=1XJK0X&#>2P4#^T}byfS|FCz%t=(d6b>JG;Ehv3jnR z##wwNEnP{2EMAtLVWO5@X(bC+({dKCr32a5)w7MdrKN1Bodm8l6%D1a8_2$9Ptt)i zb)?!2h%o~+k%R}exC)b{P+#15puWv!Ws=LwNi5s&IRj_#bbTA#9)ev#HUto|9D9=? z7iX`$^2#8fb4FjDZvOc_?W}nv8(L0FYYepc^}TjoT29NrOPjLY-fYp{Kv9U_9A5wu zz5}lv-+oC5>Vq|jNg=Bk;vqN8Dyh zYHbGGlcbzAWT_D&krqc{8V(=KB6T$!7^;P+i4A!}?je#)1RuKM$J37ZVIm9hqfs=C z@L@^_TTT4rj*{4e$GwjDl@cg`1M&iAd_>@Ng~;aOSG`gEL9IkJ#?J&X@s?ixU1u+KI^%u->K;(Bz3#OtM?V9JZy4*(pz0P~Z zv*w&a9&0HQ zUFRRxIf4)4=#T@Tu3*Mv5*&$^{6mLtIZ;6(I; z{tmfBtxY77eeF~K;Zx<+;~oS*>QDJ58ugnbVL`UJS%R||B$GUY{`Y`quuUulz2;K_ z5|{}8qG_S<4fXPY3|C*bE6g3v)Ro>%oK$wf1IkHA+x!Hj<@&Ji>UmUB4D^!vC4tPJ z5D(N_I!15E(ALF(nL?yPnOYV!pI1;xxVCWyCs|1%Kc=CKP7)o!cheUna~?bfNX6tx z+eswB1p}g&?9YANRe3dJq8yoFkIXRL^VwneS&LpE=CR|^^CD(#+^E-kN8)StrE5sN zWmNFxO{F)a$Z=6fVd{;ho27qe2AaU`Yp)atAo{2TFPZo?)VaMBW5{ z5oa$VoDrJRC4dY%lnmXVi{?9`nFcx0plD7hM)k<6Io8HS5VSTRoCna=My)A>vLUiS zXFJPnRW$EA?xL+`$i)E(w=;RId=BhDhrI=(gNFewhY|J)RH(0bG|ujBgG)ZDNgzO_ zkjc&=y-oMW5;4S9QgA%7tBzF>I9o}hY><~m4yClxR^-pANg-Nm1E}*0-rUIK(FIU} zM#jMIi#D2;Sml2U2>-}L9!hK+kG`tjo+xG=jz@o3+&LconYzS6!Y3x2d`(XgaC27K zAKR5o8JJ-b;MHbyR}MC9 zZZMR1y>@oD0$A9KQrE~(3~RJq`f6%RvVf`Z6U$23#00=(6}hPvhlX6aW0rv&HAf@c zpy5ez9WZ#z0vHJEt#-*VwgD4L#cX&Zxp{>y17HebS}x2?;Yf<3s4G<|n^YC-jYvwm z2pT&fu<4V5iAmXlzSv15(uV|Po|khnlyfpD{EX&tCkX<9ds1MlILy43g@(GqW=Y^m zB&k_=w%)+jUtOkNQp#Q-!5!Aqno?51isO{uC#1ozTD)1?R_&sCGn?v7teD6kI6US3 zTOlNY8S(-{_|y>?NLul<2mW$)q6g7)#_x8Pweb{$1eh=q?@G2W_hqjpXF~;RWfrsG zVDz%Y{{+mb=*pDlL_{>XwKmae2nn)IlA>IFxV;~zEI~m4|^WREA#01$mQ^lrb3IuhNm^ zzbwbMS7Ojf{v(oqietUWf1n()C;7*`tk7oQy5zrX$$xpv1>qDCVXgQiGU(uQ)aL9rs5U=AiFnBh38sq}7Xzq-3-pw5 zG3=1yDtioHB(HQdG@(Ndg5oavse`%`R0~0cpmx_fGbqiy+qH4knpu3ZYyi_<5s~Pa zyAcJRK(4Sc2OkjVRG6>=YlbSUMIO#6xJekQ8&C`jZ#v|Oqh_%PFej5g?~q9Z^GwDo z%R(r|HhW?D9!^vUT1KjT&!{$Bk4!i_;;XC&;qKHkF!nN*aJ2|dVi|pO)Q2>2o;WBM zjC*oHwd&0Ux$fkGgfNk1F{BNu`q~VdLz!RPl~0?&r>eu2`wefI`x!>erjfvFxF`2h zi0M&91+L5ec$VjWP(o_1)X>1{Xa&TGyD1_y>b zz%9rv2eG~?R$E$*7#*bGRYC_*Mj2=MT7;rx17JCzwk(HIhN5g3U^!IC>n|H}-7OnZ za$BJdmZLp9U#GmC?u2#{J)5G}TFo2sBCaXgK6v>GtQbfQfVk^JjmZWEje`NyaP zshP_G!3KZ=N|p)CbpvT0bYh`*Y5uW*HH7S7(yVe(YWT@-c{IH=TNhyqdKB>$Iw?gA zvFiItt~Ze>zkc&$x~P71TR6C3=u*DmS$36WQx5O*g?|E6Ld7Ju77`w;lMuR4 z=tT3Wg}D}@pTksOESS<0QNOY%J_Zg|>hp1yb*|yD7-J}fYFc6NTIszs)v=OTgu=@k)^jUHhDlp7?#FXM#YCK{z+u1t&5r<5={HaMXOX{%U z+XQYsBNjj*j36RmG_)|+5=O(#s4Wk4YrZE>G`#eXGI2z*;eA)xn3VSH;+$Y5Jb zp)k3r6y6ZG^_1?n;yE&1SR4u_Jtm@&t5!!S`vN!geXEoY|LLN&R8@MIiX>7PGanM6 zR<_=2wa&e$c7Nb@ox5XQPsr-wKvqzfRv9hh~03^O8J-qdM9OURk`E4EOv|Jy8uqU%WQJtyI>v_T!s3v z#9wBQd`t1Q58ue8d%`zhWk-wm!W@RgC|v;-SLgzkpRRBRMd|8r+!YcY}m4qY&dF&!}Zuv;y12=jWrMv1XyB@r# zXbA;;U9g~vv`$u3Qm4)Uoi^m~7G;R72JQDnP|yx@F`=q$TP0LZ$4<(%9tnukEUXX# zqUMWo#k+V`tp-$LKd8%~S_=62OdLfU@wI$&m77mX-iv#{a_}TUn=ggSI$UmNld4}- zh~SDw2!pB?*)u9!2xi*3U489N}{7IiE@mKI;a)t6rAA5CRUho8L!A zWC>Wr|GdP`MvF4*ldg0m7?P)lr3d4Q6z6Q+A+#-zM%l!bY-3fsAVM}jeOW^>8#@MG z*}F{G!(=LK>7s;lXtH^Rx!BPVi_}FqUyC8x?%tVI#>tNN-jSAPUq+y81;D^loJKUF z3PmY%ZO;l6voCtPR^>aFE`;_`iGbNgkDQahL*8D7x5Rveo6b?d!o!Y_C zGg=hP?l_xhM@@}K^_Z1XmXIeF+UYi_VZ$>sX%>@rkE}t6uvPHW#y$;cDSnA@Q7Rra zvqD{0}u~-bmX|;ktV1!tp|j8u_BNYWDF0h zFPABEzi4~ZY|S6;V#y?alrpqhA5_* z1@Q9QE`w7g3eY^3Q$m4rF_-R|_!qZuT!G(aD&tT*Me)B9g#$fW9Ti%gt4}^4d&xRz z6^d2LRfys4^Cnw1M%jvzJVh{+DDcKP)Jhj99>@&Agc=1&kz-<^`FlcYmp#Zg!mKs4{z@$1Z- zh7DbW%$-jKK0I9aAJ*tXU`@#L760-TqGV%CsD|nL4() zuF0f!imKU0m-~p_wxIblLZtcg`mKI9{=B7=D*a02#78J$J5^)A(`neQbBM8ZMQ~`N$@lA08cCX9V;U#ai;TQG| zI1PB0-zw1jbwTMu5Z|ai>pAe+A%AW3?@aFL_-S*CqV%^X5!|~)Huvz*81VX!Z9IS7 z$F6>#!Ww6y{&osN8*K#Yc=YyLg8w?n_I(0IVOt3!ig;7{IgFW?mLg7Oj;@=+x(}J8yhstsFsHsc6Y9tJ{BNgX;`X7yyZK)sCuX6 z0=-=H%1tRs0f|{nyra1Xj0V=`8PP)_^7ElI69qZc{MUYR-F5oeWP17X{}m8%U^av7 z<-j*Gh4?S|#V+Qc?TW)Nw6GNl650JKZ|wU*sm)E&Nrub*l(9JcQE+CZ`Vn3O*@$|Q zhu9+|jV=CTG;OQNV%#ubmbR4!O1v#1n#Nrlk0&O(lyUUiVJtQ-;%8a>B3?D-$kPyj zH-A9*+M5qOeWlZRZWLNiJVjbQ^+NEhN+U!hqIA+plGMX; z*iNEkFc6y*=}4{~rRwiQRFS*BHJ?&KA>V5C0+tX3=Y+Cxr6-(k=lv30vLUns8z9*l zt1ybQsQJ$fGTYJ`Cn03HyPXWi)099h0u;MI!wS5mbm)P!VhVx)a!(ryDlIm*dHqzf zPpy1jrh~$$_RT9MqC4w@B-Z&{6~wUYD)3udMO5Pe)F}_PT({LNjDg%g%+M55lL3*& zduSv>E9M<9t?q%hPJ~%3tIHV*lzC;x%Ib154*Ufe_d|b4#$Db@Li_n9p#fbPgN#&C zIklfP7guR~pR^)3N;H*;64Upg7*xME3d>tcN>?lnYY&v9#^`Qq0tgbc3(n4`7SZzH z?qtvaBOJCR6GY{+qJ>YP2H{|-`OE%>bag0(&!T89O;KA;ZU8IHi)e(e$N*^~qZzw-MWxh|M-nAUH*gvlghcaW z0u$uljKCI1 z&C>vs0-rD|{ELu_l=&#SRH>)gZhlIDQIfJ=e-xapM@9^$@sDsheldt~^KeEHxr9y2uk418nw4+z};j)>#zjixU2v-UJfAolmTrU(}LzN z3O)fIXD_gyaac%k{sG-S9_{D!8Gq_Heb%4u=JYv#ig-1@pi^zHj=Jt4uKsXHINvp8 zJ-o>N=Z#z-S0cpLFpTo6q!0nZro5NyCL8W>f84px#4K!n&Tf#S6Nnh+cd0cJqC*dD z1X9N=l&U9QO-ap@H2;+WA#2|07ghfb{Qw0)yD=ieE&DxwGFli!Yi3q%f^%en6vhE( zZsL?;=td{X`plMOl4Uy?G)&d#+SFPn<^WDMe@zeyb08GIV`MOz)&$#A)X~Bz&tbe` zs`{S-1$sh@B2X)GCs#YU0H=(xaCr8?qAZ}Vt|U%V9~u<{qvBzgAIayczVnK zL>+odk_viDDvjRrF0}W({7~KG)bhwOQ%KpY9)V<*9V2p#W01>Nt)LOS!R_LW<%_8y zG3y{FLSJ@-@xa4EimlfQic^{H~nWU6yf(}>^;Y?7Uz ziWuhw)y?s5_*oJU6_4EIZEGjU77E(2o3%nIFzZjd33kmieOaJE(bq>|s< zUVW8#D)!DptY*)zW_cbeyS8#HSjw1D!F#<2@9oI-ZVgpLdd*efAbg8uy zE#eR%TYVit*L$gEjU$s`>dy^r$$4eaZJWOz4Q#k=?POcQvDb363U*3SJaD6;tp3yB zm{;A5b#Xwe`bd9BHC@u5FrjbZOV`PWf}@afIxP%B)#1^W?11e1h`NlZz8>-Nw+i>E zMjF$&UfUY76eDhQKJB8Fj@(~w0gDgWG#D#g012*vw+%!!jkoS~PVe4_*_S{1D}Tc4KPWyI!wV@SXu}mRSK<8qtzrDQa}v=acPjTq}~0PFAIn?DPhr zPV?~Gvm7Nhh~ai^!^WZO;lQn9I$!h{65*HVMgm1FR- zdmD{<>jS*7o$Kvbc5=ZHhJBc&6LW$*-@r&2D^d7bA(n8mB?|A5TL|^u&<-E}mN-Ea zUBkQYm`h~uV2stj+ZZOucgrA{5Xg+7fl>2I<_O{TE3f>$<#ZQcb}+_cV0RXC{^gFK zxFL>$(fMVjZ0HRaHnea$)`G~M7$*>T&Ep!|?hc|j3W9**TJgVEr9xN7Fs`0u29qY2z`s$L*Ps4FVC( z`^~7`{P!Yo+H$Su(^lRx2xb6)EwsGPg{MOezsY=)1pnz9G9`nd+nrU~d@O@|%jq}( zAxYH->XTW`HRn&)C%Ih1y5{2@n@;v1Uj-n?ra#V?Hl*@tL#AN2^zz8r`UK#$KIZoP z%=2KTH&=JbVl_pH7YL4bIIPlx9LkpRIbF`DNJAu%h|Z;rR-XSVN(j(zoId`eKITSF zV}iz$k$74hgorZ3ei(Wee!;pWV^wqwtVY#mB-^~!PDk)s@W1LtnH@MJ!rA7~h@l6_*=1m$zpxvmG_~Fk(K(!So04|9&k_hrQ`MO4uj(w^AB(~A`_?&vfzy290cJNUV&jT zip~Fa7}*0Q(%E!_Oj?6VyRgwGKw`?5kee@P9zfHZ|2)QlAloAu-^);rGqPqKiebQkRUI!sVIUS%-W#d9L6ILtM8j4GNQb$dUN4K8QLR+PH!Jr#clI%^HwR@gh# zgTh0Iz%g*C`RIYb7Bq2PO*He)+MC4NA^m$mw`jhC=X^OxCi}S12ZmGuJg$cZWAYNY zzRw&QIb5X(0MN18orX52M{6XMA_wMbQ^wdeTFIzE zMT|3=`;VrHW~=!X&r3A15F8$0m`mb@8^aMC>q97~s+YR=)~9L*ZL)6yMl~A{iCTCh zUb&0fZrCh)D|KG2phckvFJ%`x=Rxo|;g>ip8EpMxg8ZYCass(LVQ4@9Gxy3s&3@%8 z*~fc~&|~n8VTrg{7rnHtaK(a5tZ0M5L7~J0Xr+e`vNL-i89qqZTb^v4IF}D30 zr|XAmM;J%>hnWG~N?`>wrP+@L3}xQkZdd1-w-DM#=={^{CuMB2pVlv|bIW|M1Ur;{ z#BTq%-ELr8UF)${7I((c0J3T&wrsti+=XIE`v@;g-sbl*+ylQJH5z%F!kc;n2f<#cFYPv zyRv8nH5y|B5b?t#)g&1QHOY=-hX5tGucbRO3JhTBl{bxfdeHi)iDwXeJ-dJ`qf?t# zeeTlwl1z>Umak{l*94{zQU2DLrK1v*~aU0f*e!HD`O$T}h5L4CKY6USnJ z*vS$G5+~b3=D$4{6Q}h*sOf>$3|Qmr>(SH$t-HAE9&FbGimWV{_4i;| zmmQHjICkBG-Fl#}Q;^Q}&EfQbcb#Nh`k(CA6Ma2RAGGN7sp*B;WSc(W65)9GuvW~0 zPgImR5JQ$Zu&Z}~12uv{4y3z79LS0)iaOW~ssz-RWC?mzoAOD$*<`#5FZ*IbLnawv zuI@?|RdHxch8+E+{v&maf)G_EH}P_MZ;WUHmu@QuVO$zykM)jh zkN(|9h{uBwwvMMn$|T)x^fO6vDoFO?HSv^hA)HD+NWiNiOyk-2rF^>Z)aH-=_x~Jk z5&+xDwfDc1MvZ(3s{d7DWnaJ>(@lbU#0&@+aU|X6#{FY4 zxMTAB`}snMsxEGaDsdHNsQ~i0VKe6TF0DhVq_c$mIY0|=t zs_a9IabVf)SfE7%E`jzwt2K<_xRs{Rx`neIRkdTE8&!{e;^scN$^J%NxW|i>%+cfx z*`Kh(f`Rv2U1A@@H0HBt-R&o`*(bE_tJ`{rNbj+5^iz|pBDe$t1v?dCvf-ow7JQ~s zdwf;SqAu1Dkrn9?VGx_=^EKyneU{7r8k|XQTTX9>X3XvKfwQOD55Zr@7@H_SI+ax} zr3VCJdN6zL(RMPf$ryFY9RQB>08s>m7}XRYSv&jC=UJ7Wm}kn{=jRi^GspxGW`f|q zoi>e^C1xrK zj3X>Z@U3$9VfEfH(Err7T7*ycBzpi{7bL1#<#i*e0_u$dFDPNwU_{8 z`{0cc_;$gw4=AL9n27`Kw&D$Yog(cPx85eXCkI|dy(Th@izIvWes2A}`z%;f~pGn zd&F0Qq+DnP1w)GHc$=FLFJv47Xdc`z;3ixHBjMl5&s&TV_HWt90$cF1(AIxYi2k>& zq*JZ?>w7qzLZxgi@t_HDF?;$(kSdbmgDiRMq;E>GP7RJ2ap6B0VDjvIh&c7-`aMex@L;gG%J_7pN-C=Ec=|=H~=dmP2 zfcm+iXx3B}1B=HP4be_Tu!AbF=*Fu@@>Wh(IZ%B@t#Ag^zHl~@aV>_HP$$*oVk z5B9}*y}|jez9&bz!Fdlp3eNx9;^W>(5QSmjKleZ@y(2kF=+bfXN2O?5D?>q`FN^6C ze~3)hE9EM(UKO^?3zGGscF=Y_Uo)nkUOO2@-i%>!MM65HTn%p%k6D}U8 zaHq9ulIPyXGO=CqHyF4v-{pWiDr0rjxp&uDFLYC~7M<4F&sw=7>}ie-(yo`I?sk^4 z2-VV>K5|e1D%5e^Y|qP81?7-HkKTxUj`gUpmO(CXvjqz&)eXp*&+WiQmkB}={*mT( zQVOo0YNrNdP@s1Ex%##$4*;C~W0v$D;}T8L&kdT=DKE3HK@valdgQx<%%zl1pTyvl zQe7G2Y9Y^oR&vaZC3h0=N`@evci4AcCr3UD93>{Wb#an1A~J{)WqqvGsPxktKwm^L z`MT4MNxoE6?#Ne9qvAm>Uwz`ldsaQf=ZaZqfcpVUNecOlVh82rTS!v{^J-qI(@6dV zyN?sOzmKi5wtC?mGPP4aq%D^Y9q+I6u9MBg-p?CZJF>;f0mXleR^xSJZHf6itR2xe z>b(JE>qB0haM-vP*j%E|v|@cbCbHY2hf3}cuH{g#hFWg|G1gYMF!@ahvVLwN$Q_e! z!pu8pw_@^NeXT_E31cmdL(C37?D8n;F#=WpteD7xXMk*z%!M3C?PM)2(X)f(zM>`# z9mvS^Wn&#^q5~atuWW-Y2V45ITu@gESsGe@9@aOix4TBagCqu-6t(noF1=1R z%t88M<_NMicA6AuQY*U%9Xl3Yt<=@yAV<(?tt@HP!{SIeNLGKL)}&=HU265$b8?5F zYU!vHe@qEb8Da0P+)&d?sgkl2pic#TqaMQ)Il3Buz-tQ;nufTBuA#OkNPf1~SMB4dn1hwiP|I zFm+!m-JLJ+?6B=SJKS!z0f7E?H_1aR7IlT3kJNB?F%wUfPI{Z?7>;t_0SUK$ZV>MA zEjW4L);NhrQg7<7H*#_(oIGH{ec(FbKG2oNK4EqI4Tp}A;0cS|zBJp1&oPhB4&kGp zTf%3@>x0h@!)M2J`1C^!-@3#<#!AveUmf{6HQLIu?7TH#znx|2sU!EO(aq|}qqx-$ z@kM%X6#7V?i&BqQ8SD3#%(bnc9xs%iT+17P@{# z7M=>;JM#BulrIt5v2Hog-mm2w-ifaM2Cq3`w7=bd6bXqG!)ydIjUa~GMgz8VlnE6Z z1I^Ol2s_wE2~7JpExEw9EKzyjedPQZ-}2Dcl=Q}m>J+rF%`e*5dt>LjBKE~>{fJuM z%^tl%$xS^jc+7F&=IngP+KY6Z30SB)63BFO6l+H+%j zO$n1Fblg_pUADIZ<7He80 z+r_IXGp#cGE8qIRPqkT#romN)cY3urk=LO1#8==Hp`boeV-IyyK+Wq+wk6rO#$A@x zG_%d>)nBfLL$)_v=zHWz1r7N?bYYNKdo2Avd*Q651#srB4xvY!_p?A;Jq?VQ6Ya0J z?Zmt|=J=wT-GVGO5uc`2m9Lat=6hRy4zQKZ#fpblW8;}?X?nPuQ|}fZ~UZ5K61YDAb^S{{_g5M@NZ!rDVS$PFN+%z?M3H5=Ff_ts>SGV$A}2w4lo;9`PN^;!z)B{k{4S>+RK#m>eY^x9j1P#1^O*Jz`!|n`Q<; z>Sz$WtxpUM(fDM*`lC=ToeZ!FIzwEsbvhe38NgVb4W0~GL)6*O$w04|a#lGRunelR z;gi9zKdYVuCc9TV8SwI#p4LwW+6m3swv&NAw8~k7x0eu^9<}%2YP(pjD`u^%u~$xY zGySo9uMKds5V^hZ6Lk#5jaFc*iOha50A@ti4=UfX8R31YexxWaRR1iB_%ngm7|DN# z#oncISQ2y}ee#!4#-|wr?m_^pzYa1|@6R8{$Y;@Tu+vb>$?xmjuh{*JLFQ$ zG``&Fw$M3yvU7H^7z*gwtTnNc@^$;j46O@4lMbA6A9MqJ=8Exn5hKLg@G`Pqw6QOl zE8J+A6vuHY+ z##ft5Woot7XN1kv`vAZ@XU6i*Q_W={;pHkA^}BtM&PNClgYo{*>elT-jltigDWZg} z218r$kgRAB7zi?qa9V(etazMQ98x0!;DCI?UT|tx@5tZO^VjMZ=I^WUWlLgLxnc5wpBKLTTP)s~Ac6 zK`sQANkEWM!y89Mx;=6>GFR1IVFKNrzD z3+wAe|1uc!qTXDSv7)JJKx&%ZLu?naFU?;KT*+S0Rgl@s zjoIb~kH2VZxZQE-wfR}}9ExR|)7qyWTX6%UB@Skj#U~WlV%`gDr^DB`9FKUgue)+QYUXiuGKi-24uKIV3z}aQElpPb zVHkzHb|reb;5X9f)LkF?1VrL(Q+|n;xXtT$u2_{0*aZ&|_XhUAm)`Yp7-O5|6Tq}U zBb)ZAoa6=>dgiKKMz#xs%F_33ZaiySX@TISd!GBEUWS*n^P-3h6~h0Yl9;U#L)D)j zJGwfvc=55Nt4HS+FR!oNv37MWSP34VTbR{fWPIpvKKNj8;i&#N?0MZgzxLGJh1okU z1ea#!7K5i&me#D<>4(n*cLdq$>g>we+|r_Ze1^6cPr3uEZtB3Qj{LiLa5z|bYR3M7 z*rVGGyC9exz4vX=J%`V3f5)4T4Yvl)JaGC%<$RNFD0 z-qF1Koz=VUoH&|Q-a4}HU2i&dvRt}t>h}5@-|&{fUH6UcfAEzcc+dKU3$v@M!MTNn z*(YWe++$AzEbETwYq4S(#gS+O03nT!B~m>&tY!GP5v8C;jQ*cdaa~t{%BKtLfar+~Pd_XD%LD zTBMU<=!XvOEwD5yGBPxK*V5u5sEcNz=^8A6PO~dLq+6T21b9p9YyFKMUtfii_bsii zxw%z&n~*la}ep=(T8(>7A(lYhLkhDTZaYy376t; zmqX`P`!3%*dv(oYX%szub@qZ7b7^KRpQs=eEL*>X&;(h20;z!A*txX$MDU)cFFm%j zFn7Ty=oXfiE*tapm#e#t-V5_D%`86c^oO8rT0=7@FgO{#FV3!BSed(wKmluqXQyT^ zUjJCQUU+hD;i4<#O^pgdnCx}LE$GZG7O$%7!qSEL-WfW=brJsSp?hj+oxztbTv%TT z-oxMOp3N2L!qOEqLz48!3UafwzUr2qTAY<8^r_8-859xo5S&?G^im>4n!9v)VOF&C zs&olv&!7)TIhZ447rjQDLkrjD9-m{_75;ei6awZt_Uig&^v~nDhRrCh3K4&N=8{xXBXk~`3gs9DMZ^9%9-3WyYKcF-fZ|+)?m=_3p60sXl^tT`_XJhPFe$t>{qo=XyRe%=377FbG?f>O>G!26$Kv2Gl3-Sv1yhTXDh2bv>^KK@?PUyP}7k z=S92DvDP^Yf-#-jPsQKnxA%EZQ%;*bmkrKK`UxujHov{kdzx}O+H*OgbNi|I+x+tX zUEJNZOTSzHukX1LZ|ioQyG10R8#_Bc6@Q!G-shc8b~4^`xkKmnQ}MU?<^S*T3T9gB z1ps}20z1dg#ie!ZmBa6?OKgzl^_3Nb2KBo*w<=q9@s8p5B0!5ecXMlpWk}tTg$qY6 zugop3tzyfLXrv?gNNY=O?Md%2QG!dDbq45xk<(*$zUj?(z2*3cyWg6fde^FJ^k-G@9A&8%CE`_{|}ClW61yj diff --git a/test/wasi/wasm/stat.wasm b/test/wasi/wasm/stat.wasm index 9007334d37d1a166a9399975059aaf324bad1021..0d7980970fbe8b38add0fd6ed1fc49d4ddd8ed1f 100755 GIT binary patch literal 34188 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 literal 34507 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 diff --git a/test/wasi/wasm/stdin.wasm b/test/wasi/wasm/stdin.wasm index 7264608753229f610a0327453e49d0b0beb01ac3..3cc548607af2e08ac762fd1a547d714eaad7dc99 100755 GIT binary patch delta 4123 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 diff --git a/test/wasi/wasm/symlink_escape.wasm b/test/wasi/wasm/symlink_escape.wasm index 0cdb8327a1a23b88c42ae305be21ba6832cc3c4f..fcb8cfd579078277554d2a239afc353872d52748 100755 GIT binary patch literal 32660 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 ZSc$(k^7ciOD8JFhbWwIA*Kab;{{!|vts4LU literal 33026 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 OZ|(1H?f2`9^Zx)Dvf2ay diff --git a/test/wasi/wasm/symlink_loop.wasm b/test/wasi/wasm/symlink_loop.wasm index 3883d5278c7008ad7053529111570c9ff7c8574e..98e5c62f4b8355718bbd2f2ef396c23acd918f04 100755 GIT binary patch literal 32643 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 literal 33009 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ūQKxHW(P;d(1BJr4zX*hU&OA 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 literal 33357 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

4-Br(tI&644Analx#Se>nxXTWo6F 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 From d6f942003b35449107d4f4ffb2ef35a093e0e84a Mon Sep 17 00:00:00 2001 From: cjihrig Date: Sun, 15 Dec 2019 11:30:45 -0500 Subject: [PATCH 003/180] doc,lib,src,test: rename WASI CLI flag The WASI API has moved from preview0 to preview1. This commit updates the CLI flag accordingly. PR-URL: https://github.com/nodejs/node/pull/30980 Reviewed-By: David Carlier Reviewed-By: Anna Henningsen Reviewed-By: Rich Trott --- doc/api/cli.md | 9 +++++++-- doc/api/wasi.md | 2 +- doc/node.1 | 2 +- lib/internal/bootstrap/pre_execution.js | 2 +- src/node_options.cc | 2 +- test/wasi/test-wasi-binding.js | 2 +- test/wasi/test-wasi-options-validation.js | 2 +- test/wasi/test-wasi-start-validation.js | 2 +- test/wasi/test-wasi-symlinks.js | 2 +- test/wasi/test-wasi.js | 2 +- 10 files changed, 16 insertions(+), 11 deletions(-) diff --git a/doc/api/cli.md b/doc/api/cli.md index 6050e3dc0fb7fe..f3d5df070ccac3 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -230,9 +230,14 @@ added: v9.6.0 Enable experimental ES Module support in the `vm` module. -### `--experimental-wasi-unstable-preview0` +### `--experimental-wasi-unstable-preview1` Enable experimental WebAssembly System Interface (WASI) support. @@ -1073,7 +1078,7 @@ Node.js options that are allowed are: * `--experimental-resolve-self` * `--experimental-specifier-resolution` * `--experimental-vm-modules` -* `--experimental-wasi-unstable-preview0` +* `--experimental-wasi-unstable-preview1` * `--experimental-wasm-modules` * `--force-context-aware` * `--force-fips` diff --git a/doc/api/wasi.md b/doc/api/wasi.md index 7127e7f8bb087e..078aeb8107ebd9 100644 --- a/doc/api/wasi.md +++ b/doc/api/wasi.md @@ -29,7 +29,7 @@ const importObject = { wasi_snapshot_preview1: wasi.wasiImport }; })(); ``` -The `--experimental-wasi-unstable-preview0` and `--experimental-wasm-bigint` +The `--experimental-wasi-unstable-preview1` and `--experimental-wasm-bigint` CLI arguments are needed for the previous example to run. ## Class: WASI diff --git a/doc/node.1 b/doc/node.1 index 255f6746abf3f3..c783195c957f86 100644 --- a/doc/node.1 +++ b/doc/node.1 @@ -141,7 +141,7 @@ Enable experimental support for a package to load itself. .It Fl -experimental-vm-modules Enable experimental ES module support in VM module. . -.It Fl -experimental-wasi-unstable-preview0 +.It Fl -experimental-wasi-unstable-preview1 Enable experimental WebAssembly System Interface support. . .It Fl -experimental-wasm-modules diff --git a/lib/internal/bootstrap/pre_execution.js b/lib/internal/bootstrap/pre_execution.js index 47c709b424ec14..40dabdda504e4b 100644 --- a/lib/internal/bootstrap/pre_execution.js +++ b/lib/internal/bootstrap/pre_execution.js @@ -404,7 +404,7 @@ function initializeWASI() { const { NativeModule } = require('internal/bootstrap/loaders'); const mod = NativeModule.map.get('wasi'); mod.canBeRequiredByUsers = - getOptionValue('--experimental-wasi-unstable-preview0'); + getOptionValue('--experimental-wasi-unstable-preview1'); } function initializeCJSLoader() { diff --git a/src/node_options.cc b/src/node_options.cc index ff3bf9b4edd876..622287d5248f0c 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -361,7 +361,7 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { &EnvironmentOptions::experimental_report, kAllowedInEnvironment); #endif // NODE_REPORT - AddOption("--experimental-wasi-unstable-preview0", + AddOption("--experimental-wasi-unstable-preview1", "experimental WASI support", &EnvironmentOptions::experimental_wasi, kAllowedInEnvironment); diff --git a/test/wasi/test-wasi-binding.js b/test/wasi/test-wasi-binding.js index 876c8a15a72c13..b3e5f02085b663 100644 --- a/test/wasi/test-wasi-binding.js +++ b/test/wasi/test-wasi-binding.js @@ -1,4 +1,4 @@ -// Flags: --experimental-wasi-unstable-preview0 +// Flags: --experimental-wasi-unstable-preview1 'use strict'; const common = require('../common'); diff --git a/test/wasi/test-wasi-options-validation.js b/test/wasi/test-wasi-options-validation.js index f8ec2604d5b9f1..fe23e446b08733 100644 --- a/test/wasi/test-wasi-options-validation.js +++ b/test/wasi/test-wasi-options-validation.js @@ -1,6 +1,6 @@ 'use strict'; -// Flags: --experimental-wasi-unstable-preview0 +// Flags: --experimental-wasi-unstable-preview1 require('../common'); const assert = require('assert'); diff --git a/test/wasi/test-wasi-start-validation.js b/test/wasi/test-wasi-start-validation.js index 8c8c6f7e44acc6..a31c5847968491 100644 --- a/test/wasi/test-wasi-start-validation.js +++ b/test/wasi/test-wasi-start-validation.js @@ -1,4 +1,4 @@ -// Flags: --experimental-wasi-unstable-preview0 +// Flags: --experimental-wasi-unstable-preview1 'use strict'; const common = require('../common'); diff --git a/test/wasi/test-wasi-symlinks.js b/test/wasi/test-wasi-symlinks.js index 56e49331b0bc76..8332c8d147d9c4 100644 --- a/test/wasi/test-wasi-symlinks.js +++ b/test/wasi/test-wasi-symlinks.js @@ -59,7 +59,7 @@ if (process.argv[2] === 'wasi-child') { console.log('executing', options.test); const opts = { env: { ...process.env, NODE_DEBUG_NATIVE: 'wasi' } }; const child = cp.spawnSync(process.execPath, [ - '--experimental-wasi-unstable-preview0', + '--experimental-wasi-unstable-preview1', '--experimental-wasm-bigint', __filename, 'wasi-child', diff --git a/test/wasi/test-wasi.js b/test/wasi/test-wasi.js index f80ed835f82ed5..9c8b2a752778f9 100644 --- a/test/wasi/test-wasi.js +++ b/test/wasi/test-wasi.js @@ -44,7 +44,7 @@ if (process.argv[2] === 'wasi-child') { opts.input = options.stdin; const child = cp.spawnSync(process.execPath, [ - '--experimental-wasi-unstable-preview0', + '--experimental-wasi-unstable-preview1', '--experimental-wasm-bigint', __filename, 'wasi-child', From d36ae62bd76c066bdbe285c482ebbfbf07792c82 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Sun, 15 Dec 2019 11:36:30 -0500 Subject: [PATCH 004/180] test: remove obsolete WASI test test-wasi-binding.js was added during the initial WASI development, but it is now considered obsolete. It also does not provide any additional test coverage. This commit removes it. PR-URL: https://github.com/nodejs/node/pull/30980 Reviewed-By: David Carlier Reviewed-By: Anna Henningsen Reviewed-By: Rich Trott --- test/fixtures/wasi/simple-wasi.wasm | Bin 15873 -> 0 bytes test/fixtures/wasi/simple-wasi.wat | 6533 --------------------------- test/wasi/test-wasi-binding.js | 19 - 3 files changed, 6552 deletions(-) delete mode 100755 test/fixtures/wasi/simple-wasi.wasm delete mode 100644 test/fixtures/wasi/simple-wasi.wat delete mode 100644 test/wasi/test-wasi-binding.js diff --git a/test/fixtures/wasi/simple-wasi.wasm b/test/fixtures/wasi/simple-wasi.wasm deleted file mode 100755 index 334d3a3dcac6c09aade3babbc7a6f9a8a3ab6f16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15873 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 { - assert(results.instance.exports._start); - wasi.start(results.instance); -})); From 0e864a383c80aa1da0937d165fcd33bdbf729dfb Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 15 Dec 2019 13:44:15 +0100 Subject: [PATCH 005/180] benchmark: update manywrites back pressure Make manywrites benchmark a bit more realistic by taking back pressure into account. Otherwise memory usage would no correspond well with real world usage. PR-URL: https://github.com/nodejs/node/pull/30977 Reviewed-By: Ruben Bridgewater Reviewed-By: Luigi Pinca Reviewed-By: Jeremiah Senkpiel Reviewed-By: Rich Trott --- benchmark/streams/writable-manywrites.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/benchmark/streams/writable-manywrites.js b/benchmark/streams/writable-manywrites.js index 0ed38d0357a438..ebd83779b76158 100644 --- a/benchmark/streams/writable-manywrites.js +++ b/benchmark/streams/writable-manywrites.js @@ -20,8 +20,13 @@ function main({ n, sync }) { }; bench.start(); - for (var k = 0; k < n; ++k) { - s.write(b); + + let k = 0; + function run() { + while (k++ < n && s.write(b)); + if (k >= n) + bench.end(n); } - bench.end(n); + s.on('drain', run); + run(); } From 7815d5f2cb40b8ff29477ce27142e940aeeed30c Mon Sep 17 00:00:00 2001 From: Tadao Iseki Date: Sat, 7 Dec 2019 13:20:20 +0900 Subject: [PATCH 006/180] doc: update message.url example in http.IncomingMessage Update message.url example to use The WHATWG URL API. This is because the old example suggests using deprecated url API. Fixes: https://github.com/nodejs/node/issues/30048 PR-URL: https://github.com/nodejs/node/pull/30830 Reviewed-By: Luigi Pinca Reviewed-By: Rich Trott --- doc/api/http.md | 56 +++++++++++++++---------------------------------- 1 file changed, 17 insertions(+), 39 deletions(-) diff --git a/doc/api/http.md b/doc/api/http.md index 3550136aebb5b9..8c04ef2ecbbe3d 100644 --- a/doc/api/http.md +++ b/doc/api/http.md @@ -1979,54 +1979,32 @@ Accept: text/plain\r\n \r\n ``` -Then `request.url` will be: +To parse the URL into its parts: - ```js -'/status?name=ryan' +new URL(request.url, `http://${request.headers.host}`); ``` -To parse the url into its parts `require('url').parse(request.url)` -can be used: +When `request.url` is `'/status?name=ryan'` and +`request.headers.host` is `'localhost:3000'`: ```console $ node -> require('url').parse('/status?name=ryan') -Url { - protocol: null, - slashes: null, - auth: null, - host: null, - port: null, - hostname: null, - hash: null, - search: '?name=ryan', - query: 'name=ryan', +> new URL(request.url, request.headers.host) +URL { + href: 'http://localhost:3000/status?name=ryan', + origin: 'http://localhost:3000', + protocol: 'http:', + username: '', + password: '', + host: 'localhost:3000', + hostname: 'localhost', + port: '3000', pathname: '/status', - path: '/status?name=ryan', - href: '/status?name=ryan' } -``` - -To extract the parameters from the query string, the -`require('querystring').parse` function can be used, or -`true` can be passed as the second argument to `require('url').parse`: - -```console -$ node -> require('url').parse('/status?name=ryan', true) -Url { - protocol: null, - slashes: null, - auth: null, - host: null, - port: null, - hostname: null, - hash: null, search: '?name=ryan', - query: { name: 'ryan' }, - pathname: '/status', - path: '/status?name=ryan', - href: '/status?name=ryan' } + searchParams: URLSearchParams { 'name' => 'ryan' }, + hash: '' +} ``` ## http.METHODS From 3753f47677853f1c51955530d125d13929c48802 Mon Sep 17 00:00:00 2001 From: Richard Lau Date: Mon, 16 Dec 2019 16:25:31 -0500 Subject: [PATCH 007/180] test: use tmpdir.refresh() in test-esm-windows.js Use `tmpdir.refresh()` in `test/es-module/test-esm-windows.js` so that the temporary directory is cleaned before use and when the test exits. PR-URL: https://github.com/nodejs/node/pull/30997 Reviewed-By: Denys Otrishko Reviewed-By: Colin Ihrig Reviewed-By: Rich Trott Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- test/es-module/test-esm-windows.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/es-module/test-esm-windows.js b/test/es-module/test-esm-windows.js index c4d9ff4cde2c95..76e016217b3ef8 100644 --- a/test/es-module/test-esm-windows.js +++ b/test/es-module/test-esm-windows.js @@ -14,9 +14,8 @@ const imp = (file) => { }; (async () => { - const tmp = tmpdir.path; - await fs.mkdir(tmp).catch(() => {}); - const rel = (file) => path.join(tmp, file); + tmpdir.refresh(); + const rel = (file) => path.join(tmpdir.path, file); { // Load a single script const file = rel('con.mjs'); From 7f6a0ed548822f88a744bb2e0c014f6cc1bc4ca7 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 11 Aug 2019 15:29:30 +0200 Subject: [PATCH 008/180] fs: allow overriding fs for streams Allow overriding open, write, and close when using createReadStream() and createWriteStream(). PR-URL: https://github.com/nodejs/node/pull/29083 Refs: https://github.com/nodejs/node/issues/29050 Reviewed-By: Matteo Collina Reviewed-By: Anna Henningsen Reviewed-By: Rich Trott --- doc/api/fs.md | 26 ++++- lib/internal/fs/streams.js | 128 ++++++++++++++++------- test/parallel/test-fs-read-stream.js | 13 ++- test/parallel/test-fs-write-stream-fs.js | 38 +++++++ 4 files changed, 164 insertions(+), 41 deletions(-) create mode 100644 test/parallel/test-fs-write-stream-fs.js diff --git a/doc/api/fs.md b/doc/api/fs.md index a6372f3b115337..11f03c8a2caac7 100644 --- a/doc/api/fs.md +++ b/doc/api/fs.md @@ -1674,6 +1674,10 @@ changes: - version: v2.3.0 pr-url: https://github.com/nodejs/node/pull/1845 description: The passed `options` object can be a string now. + - version: REPLACEME + pr-url: https://github.com/nodejs/node/pull/REPLACEME + description: The `fs` options allow overriding the used `fs` + implementation. --> * `path` {string|Buffer|URL} @@ -1688,7 +1692,8 @@ changes: * `start` {integer} * `end` {integer} **Default:** `Infinity` * `highWaterMark` {integer} **Default:** `64 * 1024` -* Returns: {fs.ReadStream} + * `fs` {Object|null} **Default:** `null` +* Returns: {fs.ReadStream} See [Readable Stream][]. Unlike the 16 kb default `highWaterMark` for a readable stream, the stream returned by this method has a default `highWaterMark` of 64 kb. @@ -1715,6 +1720,10 @@ By default, the stream will not emit a `'close'` event after it has been destroyed. This is the opposite of the default for other `Readable` streams. Set the `emitClose` option to `true` to change this behavior. +By providing the `fs` option it is possible to override the corresponding `fs` +implementations for `open`, `read` and `close`. When providing the `fs` option, +you must override `open`, `close` and `read`. + ```js const fs = require('fs'); // Create a stream from some character device. @@ -1768,6 +1777,10 @@ changes: - version: v2.3.0 pr-url: https://github.com/nodejs/node/pull/1845 description: The passed `options` object can be a string now. + - version: REPLACEME + pr-url: https://github.com/nodejs/node/pull/REPLACEME + description: The `fs` options allow overriding the used `fs` + implementation. --> * `path` {string|Buffer|URL} @@ -1780,7 +1793,8 @@ changes: * `autoClose` {boolean} **Default:** `true` * `emitClose` {boolean} **Default:** `false` * `start` {integer} -* Returns: {fs.WriteStream} + * `fs` {Object|null} **Default:** `null` +* Returns: {fs.WriteStream} See [Writable Stream][]. `options` may also include a `start` option to allow writing data at some position past the beginning of the file, allowed values are in the @@ -1799,6 +1813,12 @@ By default, the stream will not emit a `'close'` event after it has been destroyed. This is the opposite of the default for other `Writable` streams. Set the `emitClose` option to `true` to change this behavior. +By providing the `fs` option it is possible to override the corresponding `fs` +implementations for `open`, `write`, `writev` and `close`. Overriding `write()` +without `writev()` can reduce performance as some optimizations (`_writev()`) +will be disabled. When providing the `fs` option, you must override `open`, +`close` and at least one of `write` and `writev`. + Like [`ReadStream`][], if `fd` is specified, [`WriteStream`][] will ignore the `path` argument and will use the specified file descriptor. This means that no `'open'` event will be emitted. `fd` should be blocking; non-blocking `fd`s @@ -5520,6 +5540,7 @@ the file contents. [`Number.MAX_SAFE_INTEGER`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER [`ReadDirectoryChangesW`]: https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-readdirectorychangesw [`ReadStream`]: #fs_class_fs_readstream +[Readable Stream]: #stream_class_stream_readable [`URL`]: url.html#url_the_whatwg_url_api [`UV_THREADPOOL_SIZE`]: cli.html#cli_uv_threadpool_size_size [`WriteStream`]: #fs_class_fs_writestream @@ -5577,3 +5598,4 @@ the file contents. [chcp]: https://ss64.com/nt/chcp.html [inode]: https://en.wikipedia.org/wiki/Inode [support of file system `flags`]: #fs_file_system_flags +[Writable Stream]: #stream_class_stream_writable diff --git a/lib/internal/fs/streams.js b/lib/internal/fs/streams.js index b17ebe5cb4317e..456b57d2af8f9a 100644 --- a/lib/internal/fs/streams.js +++ b/lib/internal/fs/streams.js @@ -11,6 +11,7 @@ const { } = primordials; const { + ERR_INVALID_ARG_TYPE, ERR_OUT_OF_RANGE, ERR_STREAM_DESTROYED } = require('internal/errors').codes; @@ -28,6 +29,7 @@ const kIoDone = Symbol('kIoDone'); const kIsPerformingIO = Symbol('kIsPerformingIO'); const kMinPoolSpace = 128; +const kFs = Symbol('kFs'); let pool; // It can happen that we expect to read a large chunk of data, and reserve @@ -76,6 +78,23 @@ function ReadStream(path, options) { options.emitClose = false; } + this[kFs] = options.fs || fs; + + if (typeof this[kFs].open !== 'function') { + throw new ERR_INVALID_ARG_TYPE('options.fs.open', 'function', + this[kFs].open); + } + + if (typeof this[kFs].read !== 'function') { + throw new ERR_INVALID_ARG_TYPE('options.fs.read', 'function', + this[kFs].read); + } + + if (typeof this[kFs].close !== 'function') { + throw new ERR_INVALID_ARG_TYPE('options.fs.close', 'function', + this[kFs].close); + } + Readable.call(this, options); // Path will be ignored when fd is specified, so it can be falsy @@ -136,7 +155,7 @@ function _openReadFs(stream) { return; } - fs.open(stream.path, stream.flags, stream.mode, (er, fd) => { + stream[kFs].open(stream.path, stream.flags, stream.mode, (er, fd) => { if (er) { if (stream.autoClose) { stream.destroy(); @@ -186,42 +205,43 @@ ReadStream.prototype._read = function(n) { // the actual read. this[kIsPerformingIO] = true; - fs.read(this.fd, pool, pool.used, toRead, this.pos, (er, bytesRead) => { - this[kIsPerformingIO] = false; - // Tell ._destroy() that it's safe to close the fd now. - if (this.destroyed) return this.emit(kIoDone, er); - - if (er) { - if (this.autoClose) { - this.destroy(); - } - this.emit('error', er); - } else { - let b = null; - // Now that we know how much data we have actually read, re-wind the - // 'used' field if we can, and otherwise allow the remainder of our - // reservation to be used as a new pool later. - if (start + toRead === thisPool.used && thisPool === pool) { - const newUsed = thisPool.used + bytesRead - toRead; - thisPool.used = roundUpToMultipleOf8(newUsed); + this[kFs].read( + this.fd, pool, pool.used, toRead, this.pos, (er, bytesRead) => { + this[kIsPerformingIO] = false; + // Tell ._destroy() that it's safe to close the fd now. + if (this.destroyed) return this.emit(kIoDone, er); + + if (er) { + if (this.autoClose) { + this.destroy(); + } + this.emit('error', er); } else { - // Round down to the next lowest multiple of 8 to ensure the new pool - // fragment start and end positions are aligned to an 8 byte boundary. - const alignedEnd = (start + toRead) & ~7; - const alignedStart = roundUpToMultipleOf8(start + bytesRead); - if (alignedEnd - alignedStart >= kMinPoolSpace) { - poolFragments.push(thisPool.slice(alignedStart, alignedEnd)); + let b = null; + // Now that we know how much data we have actually read, re-wind the + // 'used' field if we can, and otherwise allow the remainder of our + // reservation to be used as a new pool later. + if (start + toRead === thisPool.used && thisPool === pool) { + const newUsed = thisPool.used + bytesRead - toRead; + thisPool.used = roundUpToMultipleOf8(newUsed); + } else { + // Round down to the next lowest multiple of 8 to ensure the new pool + // fragment start and end positions are aligned to an 8 byte boundary. + const alignedEnd = (start + toRead) & ~7; + const alignedStart = roundUpToMultipleOf8(start + bytesRead); + if (alignedEnd - alignedStart >= kMinPoolSpace) { + poolFragments.push(thisPool.slice(alignedStart, alignedEnd)); + } } - } - if (bytesRead > 0) { - this.bytesRead += bytesRead; - b = thisPool.slice(start, start + bytesRead); - } + if (bytesRead > 0) { + this.bytesRead += bytesRead; + b = thisPool.slice(start, start + bytesRead); + } - this.push(b); - } - }); + this.push(b); + } + }); // Move the pool positions, and internal position for reading. if (this.pos !== undefined) @@ -245,7 +265,7 @@ ReadStream.prototype._destroy = function(err, cb) { }; function closeFsStream(stream, cb, err) { - fs.close(stream.fd, (er) => { + stream[kFs].close(stream.fd, (er) => { er = er || err; cb(er); stream.closed = true; @@ -279,6 +299,40 @@ function WriteStream(path, options) { options.emitClose = false; } + this[kFs] = options.fs || fs; + if (typeof this[kFs].open !== 'function') { + throw new ERR_INVALID_ARG_TYPE('options.fs.open', 'function', + this[kFs].open); + } + + if (!this[kFs].write && !this[kFs].writev) { + throw new ERR_INVALID_ARG_TYPE('options.fs.write', 'function', + this[kFs].write); + } + + if (this[kFs].write && typeof this[kFs].write !== 'function') { + throw new ERR_INVALID_ARG_TYPE('options.fs.write', 'function', + this[kFs].write); + } + + if (this[kFs].writev && typeof this[kFs].writev !== 'function') { + throw new ERR_INVALID_ARG_TYPE('options.fs.writev', 'function', + this[kFs].writev); + } + + if (typeof this[kFs].close !== 'function') { + throw new ERR_INVALID_ARG_TYPE('options.fs.close', 'function', + this[kFs].close); + } + + // It's enough to override either, in which case only one will be used. + if (!this[kFs].write) { + this._write = null; + } + if (!this[kFs].writev) { + this._writev = null; + } + Writable.call(this, options); // Path will be ignored when fd is specified, so it can be falsy @@ -335,7 +389,7 @@ function _openWriteFs(stream) { return; } - fs.open(stream.path, stream.flags, stream.mode, (er, fd) => { + stream[kFs].open(stream.path, stream.flags, stream.mode, (er, fd) => { if (er) { if (stream.autoClose) { stream.destroy(); @@ -361,7 +415,7 @@ WriteStream.prototype._write = function(data, encoding, cb) { if (this.destroyed) return cb(new ERR_STREAM_DESTROYED('write')); this[kIsPerformingIO] = true; - fs.write(this.fd, data, 0, data.length, this.pos, (er, bytes) => { + this[kFs].write(this.fd, data, 0, data.length, this.pos, (er, bytes) => { this[kIsPerformingIO] = false; // Tell ._destroy() that it's safe to close the fd now. if (this.destroyed) { @@ -405,7 +459,7 @@ WriteStream.prototype._writev = function(data, cb) { } this[kIsPerformingIO] = true; - fs.writev(this.fd, chunks, this.pos, (er, bytes) => { + this[kFs].writev(this.fd, chunks, this.pos, (er, bytes) => { this[kIsPerformingIO] = false; // Tell ._destroy() that it's safe to close the fd now. if (this.destroyed) { diff --git a/test/parallel/test-fs-read-stream.js b/test/parallel/test-fs-read-stream.js index e33c6dec4ee264..05c86f724680e6 100644 --- a/test/parallel/test-fs-read-stream.js +++ b/test/parallel/test-fs-read-stream.js @@ -31,11 +31,11 @@ const fixtures = require('../common/fixtures'); const fn = fixtures.path('elipses.txt'); const rangeFile = fixtures.path('x.txt'); -{ +function test1(options) { let paused = false; let bytesRead = 0; - const file = fs.createReadStream(fn); + const file = fs.createReadStream(fn, options); const fileSize = fs.statSync(fn).size; assert.strictEqual(file.bytesRead, 0); @@ -88,6 +88,15 @@ const rangeFile = fixtures.path('x.txt'); }); } +test1({}); +test1({ + fs: { + open: common.mustCall(fs.open), + read: common.mustCallAtLeast(fs.read, 1), + close: common.mustCall(fs.close), + } +}); + { const file = fs.createReadStream(fn, { encoding: 'utf8' }); file.length = 0; diff --git a/test/parallel/test-fs-write-stream-fs.js b/test/parallel/test-fs-write-stream-fs.js new file mode 100644 index 00000000000000..2e15f57c764838 --- /dev/null +++ b/test/parallel/test-fs-write-stream-fs.js @@ -0,0 +1,38 @@ +'use strict'; +const common = require('../common'); +const path = require('path'); +const fs = require('fs'); + +const tmpdir = require('../common/tmpdir'); +tmpdir.refresh(); + +{ + const file = path.join(tmpdir.path, 'write-end-test0.txt'); + const stream = fs.createWriteStream(file, { + fs: { + open: common.mustCall(fs.open), + write: common.mustCallAtLeast(fs.write, 1), + close: common.mustCall(fs.close), + } + }); + stream.end('asd'); + stream.on('close', common.mustCall()); +} + + +{ + const file = path.join(tmpdir.path, 'write-end-test1.txt'); + const stream = fs.createWriteStream(file, { + fs: { + open: common.mustCall(fs.open), + write: fs.write, + writev: common.mustCallAtLeast(fs.writev, 1), + close: common.mustCall(fs.close), + } + }); + stream.write('asd'); + stream.write('asd'); + stream.write('asd'); + stream.end(); + stream.on('close', common.mustCall()); +} From cc8c0b4cdea6617f0fe839ad30023c747c2ef83c Mon Sep 17 00:00:00 2001 From: legendecas Date: Tue, 17 Dec 2019 00:50:21 +0800 Subject: [PATCH 009/180] doc: reference worker threads on signal events PR-URL: https://github.com/nodejs/node/pull/30990 Reviewed-By: Luigi Pinca Reviewed-By: Anna Henningsen Reviewed-By: Rich Trott Reviewed-By: James M Snell --- doc/api/process.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/api/process.md b/doc/api/process.md index 217fbb66bc0f9b..212c171cf88d62 100644 --- a/doc/api/process.md +++ b/doc/api/process.md @@ -429,6 +429,8 @@ Signal events will be emitted when the Node.js process receives a signal. Please refer to signal(7) for a listing of standard POSIX signal names such as `'SIGINT'`, `'SIGHUP'`, etc. +Signals are not available on [`Worker`][] threads. + The signal handler will receive the signal's name (`'SIGINT'`, `'SIGTERM'`, etc.) as the first argument. From a3861147e53993cdee9a2dba2f62499f999c52ff Mon Sep 17 00:00:00 2001 From: Lucas Azzola Date: Tue, 26 Nov 2019 22:30:11 +1100 Subject: [PATCH 010/180] doc: clarify required flag for extensionless esm Fixes: https://github.com/nodejs/node/issues/30655 PR-URL: https://github.com/nodejs/node/pull/30657 Reviewed-By: Yorkie Liu Reviewed-By: Myles Borins --- doc/api/esm.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/api/esm.md b/doc/api/esm.md index 5245cef465e3c7..85f7b2d28dd054 100644 --- a/doc/api/esm.md +++ b/doc/api/esm.md @@ -84,7 +84,8 @@ If the nearest parent `package.json` lacks a `"type"` field, or contains `"type": "commonjs"`, extensionless and `.js` files are treated as CommonJS. If the volume root is reached and no `package.json` is found, Node.js defers to the default, a `package.json` with no `"type"` -field. +field. "Extensionless" refers to file paths which do not contain +an extension as opposed to optionally dropping a file extension in a specifier. `import` statements of `.js` and extensionless files are treated as ES modules if the nearest parent `package.json` contains `"type": "module"`. From e5a41552e649d46faee675aeaa130ca17466da6f Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 18 Dec 2019 15:41:54 +0100 Subject: [PATCH 011/180] src: fix compiler warning in env.cc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes the following warning: ../src/env.cc: In member function ‘void node::Environment::Exit(int)’: ../src/env.cc:946:77: warning: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 4 has type ‘uint64_t {aka long unsigned int}’ [-Wformat=] fprintf(stderr, "(node:%d, thread:%llu) ", uv_os_getpid(), thread_id()); ~~~~~~~~~~~^ PR-URL: https://github.com/nodejs/node/pull/31020 Reviewed-By: Colin Ihrig Reviewed-By: Chengzhong Wu Reviewed-By: Richard Lau Reviewed-By: David Carlier Reviewed-By: James M Snell Reviewed-By: Rich Trott Reviewed-By: Luigi Pinca Reviewed-By: Jiawen Geng --- src/env.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/env.cc b/src/env.cc index f3d71c61c09fce..b505d413d7118e 100644 --- a/src/env.cc +++ b/src/env.cc @@ -946,7 +946,8 @@ void Environment::Exit(int exit_code) { if (is_main_thread()) { fprintf(stderr, "(node:%d) ", uv_os_getpid()); } else { - fprintf(stderr, "(node:%d, thread:%llu) ", uv_os_getpid(), thread_id()); + fprintf(stderr, "(node:%d, thread:%" PRIu64 ") ", + uv_os_getpid(), thread_id()); } fprintf( From 6b65cafacf2344f541956a2eaf58611b2eb106be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Arboleda?= Date: Fri, 6 Dec 2019 18:52:45 -0500 Subject: [PATCH 012/180] src: list used functions on headers PR-URL: https://github.com/nodejs/node/pull/30827 Reviewed-By: Anna Henningsen Reviewed-By: Jiawen Geng Reviewed-By: Minwoo Jung Reviewed-By: Colin Ihrig Reviewed-By: David Carlier Reviewed-By: Trivikram Kamat Reviewed-By: Rich Trott Reviewed-By: Anto Aravinth Reviewed-By: Ruben Bridgewater Reviewed-By: James M Snell --- src/node_platform.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/node_platform.cc b/src/node_platform.cc index 6e3b4abfee7287..5a98b04f535bb0 100644 --- a/src/node_platform.cc +++ b/src/node_platform.cc @@ -3,9 +3,9 @@ #include "env-inl.h" #include "debug_utils.h" -#include -#include -#include +#include // find_if(), find(), move() +#include // llround() +#include // unique_ptr(), shared_ptr(), make_shared() namespace node { From f570de8ea9893ca424621ed22fbf8a2dfe8493e3 Mon Sep 17 00:00:00 2001 From: Gerhard Stoebich <18708370+Flarna@users.noreply.github.com> Date: Thu, 12 Dec 2019 21:08:42 +0100 Subject: [PATCH 013/180] events: allow monitoring error events Installing an error listener has a side effect that emitted errors are considered as handled. This is quite bad for monitoring/logging tools which tend to be interested in errors but don't want to cause side effects like swallow an exception. There are some workarounds in the wild like monkey patching emit or remit the error if monitoring tool detects that it is the only listener but this is error prone and risky. This PR allows to install a listener to monitor errors with the side effect to consume the error. To avoid conflicts with other events it exports a symbol on EventEmitter which owns this special meaning. Refs: https://github.com/open-telemetry/opentelemetry-js/issues/225 PR-URL: https://github.com/nodejs/node/pull/30932 Refs: https://github.com/open-telemetry/opentelemetry-js/issues/225 Reviewed-By: Ruben Bridgewater Reviewed-By: Luigi Pinca Reviewed-By: Rich Trott Reviewed-By: James M Snell --- doc/api/events.md | 25 +++++++++++++++ lib/events.js | 14 ++++++-- .../test-event-emitter-error-monitor.js | 32 +++++++++++++++++++ 3 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 test/parallel/test-event-emitter-error-monitor.js diff --git a/doc/api/events.md b/doc/api/events.md index 434d8de8b57cc7..69f309a73bcd34 100644 --- a/doc/api/events.md +++ b/doc/api/events.md @@ -155,6 +155,18 @@ myEmitter.emit('error', new Error('whoops!')); // Prints: whoops! there was an error ``` +It is possible to monitor `'error'` events without consuming the emitted error +by installing a listener using the symbol `errorMonitor`. + +```js +const myEmitter = new MyEmitter(); +myEmitter.on(EventEmitter.errorMonitor, (err) => { + MyMonitoringTool.log(err); +}); +myEmitter.emit('error', new Error('whoops!')); +// Still throws and crashes Node.js +``` + ## Capture Rejections of Promises > Stability: 1 - captureRejections is experimental. @@ -348,6 +360,19 @@ the event emitter instance, the event’s name and the number of attached listeners, respectively. Its `name` property is set to `'MaxListenersExceededWarning'`. +### EventEmitter.errorMonitor + + +This symbol shall be used to install a listener for only monitoring `'error'` +events. Listeners installed using this symbol are called before the regular +`'error'` listeners are called. + +Installing a listener using this symbol does not change the behavior once an +`'error'` event is emitted, therefore the process will still crash if no +regular `'error'` listener is installed. + ### emitter.addListener(eventName, listener) + +Re-map the Node.js static code to large memory pages at startup. If supported on +the target system, this will cause the Node.js static code to be moved onto 2 +MiB pages instead of 4 KiB pages. + +The following values are valid for `mode`: +* `off`: No mapping will be attempted. This is the default. +* `on`: If supported by the OS, mapping will be attempted. Failure to map will + be ignored and a message will be printed to standard error. +* `silent`: If supported by the OS, mapping will be attempted. Failure to map + will be ignored and will not be reported. + ### `--v8-options` ## Technology Sponsors diff --git a/tools/node_modules/eslint/conf/config-schema.js b/tools/node_modules/eslint/conf/config-schema.js index 83addff8781732..712fc4235ecab2 100644 --- a/tools/node_modules/eslint/conf/config-schema.js +++ b/tools/node_modules/eslint/conf/config-schema.js @@ -6,6 +6,7 @@ "use strict"; const baseConfigProperties = { + $schema: { type: "string" }, env: { type: "object" }, extends: { $ref: "#/definitions/stringOrStrings" }, globals: { type: "object" }, diff --git a/tools/node_modules/eslint/conf/eslint-recommended.js b/tools/node_modules/eslint/conf/eslint-recommended.js index 7cc6e01652ba2a..e915ec449040e9 100644 --- a/tools/node_modules/eslint/conf/eslint-recommended.js +++ b/tools/node_modules/eslint/conf/eslint-recommended.js @@ -62,7 +62,6 @@ module.exports = { "no-useless-catch": "error", "no-useless-escape": "error", "no-with": "error", - "require-atomic-updates": "error", "require-yield": "error", "use-isnan": "error", "valid-typeof": "error" diff --git a/tools/node_modules/eslint/lib/cli-engine/cli-engine.js b/tools/node_modules/eslint/lib/cli-engine/cli-engine.js index 0b1c76bac6864a..22336a91de2909 100644 --- a/tools/node_modules/eslint/lib/cli-engine/cli-engine.js +++ b/tools/node_modules/eslint/lib/cli-engine/cli-engine.js @@ -576,6 +576,7 @@ class CLIEngine { cwd: options.cwd, extensions: options.extensions, globInputPaths: options.globInputPaths, + errorOnUnmatchedPattern: options.errorOnUnmatchedPattern, ignore: options.ignore }); const lintResultCache = diff --git a/tools/node_modules/eslint/lib/cli-engine/config-array-factory.js b/tools/node_modules/eslint/lib/cli-engine/config-array-factory.js index c444031bcb0a57..76c4ccd70212cd 100644 --- a/tools/node_modules/eslint/lib/cli-engine/config-array-factory.js +++ b/tools/node_modules/eslint/lib/cli-engine/config-array-factory.js @@ -62,6 +62,7 @@ const eslintRecommendedPath = path.resolve(__dirname, "../../conf/eslint-recomme const eslintAllPath = path.resolve(__dirname, "../../conf/eslint-all.js"); const configFilenames = [ ".eslintrc.js", + ".eslintrc.cjs", ".eslintrc.yaml", ".eslintrc.yml", ".eslintrc.json", @@ -279,6 +280,7 @@ function configMissingError(configName, importerName) { function loadConfigFile(filePath) { switch (path.extname(filePath)) { case ".js": + case ".cjs": return loadJSConfigFile(filePath); case ".json": diff --git a/tools/node_modules/eslint/lib/cli-engine/file-enumerator.js b/tools/node_modules/eslint/lib/cli-engine/file-enumerator.js index b5a082b71a6bc8..c67e01aef9b1c8 100644 --- a/tools/node_modules/eslint/lib/cli-engine/file-enumerator.js +++ b/tools/node_modules/eslint/lib/cli-engine/file-enumerator.js @@ -190,6 +190,7 @@ class FileEnumerator { configArrayFactory = new CascadingConfigArrayFactory({ cwd }), extensions = [".js"], globInputPaths = true, + errorOnUnmatchedPattern = true, ignore = true } = {}) { internalSlotsMap.set(this, { @@ -208,6 +209,7 @@ class FileEnumerator { "u" ), globInputPaths, + errorOnUnmatchedPattern, ignoreFlag: ignore }); } @@ -226,7 +228,7 @@ class FileEnumerator { * @returns {IterableIterator} The found files. */ *iterateFiles(patternOrPatterns) { - const { globInputPaths } = internalSlotsMap.get(this); + const { globInputPaths, errorOnUnmatchedPattern } = internalSlotsMap.get(this); const patterns = Array.isArray(patternOrPatterns) ? patternOrPatterns : [patternOrPatterns]; @@ -265,14 +267,16 @@ class FileEnumerator { } // Raise an error if any files were not found. - if (!foundRegardlessOfIgnored) { - throw new NoFilesFoundError( - pattern, - !globInputPaths && isGlob(pattern) - ); - } - if (!found) { - throw new AllFilesIgnoredError(pattern); + if (errorOnUnmatchedPattern) { + if (!foundRegardlessOfIgnored) { + throw new NoFilesFoundError( + pattern, + !globInputPaths && isGlob(pattern) + ); + } + if (!found) { + throw new AllFilesIgnoredError(pattern); + } } } diff --git a/tools/node_modules/eslint/lib/cli-engine/lint-result-cache.js b/tools/node_modules/eslint/lib/cli-engine/lint-result-cache.js index 14e19d9e5a1c63..23a142097bab52 100644 --- a/tools/node_modules/eslint/lib/cli-engine/lint-result-cache.js +++ b/tools/node_modules/eslint/lib/cli-engine/lint-result-cache.js @@ -20,6 +20,7 @@ const hash = require("./hash"); //----------------------------------------------------------------------------- const configHashCache = new WeakMap(); +const nodeVersion = process && process.version; /** * Calculates the hash of the config @@ -28,7 +29,7 @@ const configHashCache = new WeakMap(); */ function hashOfConfigFor(config) { if (!configHashCache.has(config)) { - configHashCache.set(config, hash(`${pkg.version}_${stringify(config)}`)); + configHashCache.set(config, hash(`${pkg.version}_${nodeVersion}_${stringify(config)}`)); } return configHashCache.get(config); diff --git a/tools/node_modules/eslint/lib/cli.js b/tools/node_modules/eslint/lib/cli.js index 18a917cf0b0a95..944b4b79353b3d 100644 --- a/tools/node_modules/eslint/lib/cli.js +++ b/tools/node_modules/eslint/lib/cli.js @@ -68,7 +68,8 @@ function translateOptions(cliOptions) { fixTypes: cliOptions.fixType, allowInlineConfig: cliOptions.inlineConfig, reportUnusedDisableDirectives: cliOptions.reportUnusedDisableDirectives, - resolvePluginsRelativeTo: cliOptions.resolvePluginsRelativeTo + resolvePluginsRelativeTo: cliOptions.resolvePluginsRelativeTo, + errorOnUnmatchedPattern: cliOptions.errorOnUnmatchedPattern }; } diff --git a/tools/node_modules/eslint/lib/linter/config-comment-parser.js b/tools/node_modules/eslint/lib/linter/config-comment-parser.js index d0e24c5940e341..35862315d515f8 100644 --- a/tools/node_modules/eslint/lib/linter/config-comment-parser.js +++ b/tools/node_modules/eslint/lib/linter/config-comment-parser.js @@ -90,7 +90,7 @@ module.exports = class ConfigCommentParser { * But we are supporting that. So this is a fallback for that. */ items = {}; - const normalizedString = string.replace(/([a-zA-Z0-9\-/]+):/gu, "\"$1\":").replace(/(\]|[0-9])\s+(?=")/u, "$1,"); + const normalizedString = string.replace(/([-a-zA-Z0-9/]+):/gu, "\"$1\":").replace(/(\]|[0-9])\s+(?=")/u, "$1,"); try { items = JSON.parse(`{${normalizedString}}`); diff --git a/tools/node_modules/eslint/lib/options.js b/tools/node_modules/eslint/lib/options.js index 83bf9afc22c9f1..98dc04b6eb3968 100644 --- a/tools/node_modules/eslint/lib/options.js +++ b/tools/node_modules/eslint/lib/options.js @@ -230,6 +230,12 @@ module.exports = optionator({ default: "false", description: "Output execution environment information" }, + { + option: "error-on-unmatched-pattern", + type: "Boolean", + default: "true", + description: "Prevent errors when pattern is unmatched" + }, { option: "debug", type: "Boolean", diff --git a/tools/node_modules/eslint/lib/rule-tester/rule-tester.js b/tools/node_modules/eslint/lib/rule-tester/rule-tester.js index b4b3b2bec86c78..44e01dadf09b5d 100644 --- a/tools/node_modules/eslint/lib/rule-tester/rule-tester.js +++ b/tools/node_modules/eslint/lib/rule-tester/rule-tester.js @@ -596,8 +596,10 @@ class RuleTester { if (hasOwnProperty(error, "suggestions")) { // Support asserting there are no suggestions - if (!error.suggestions) { - assert.strictEqual(message.suggestions, error.suggestions, `Error should have no suggestions on error with message: "${message.message}"`); + if (!error.suggestions || (Array.isArray(error.suggestions) && error.suggestions.length === 0)) { + if (Array.isArray(message.suggestions) && message.suggestions.length > 0) { + assert.fail(`Error should have no suggestions on error with message: "${message.message}"`); + } } else { assert.strictEqual(Array.isArray(message.suggestions), true, `Error should have an array of suggestions. Instead received "${message.suggestions}" on error with message: "${message.message}"`); assert.strictEqual(message.suggestions.length, error.suggestions.length, `Error should have ${error.suggestions.length} suggestions. Instead found ${message.suggestions.length} suggestions`); diff --git a/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js b/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js index 2510159ee48fa7..c2b77a641f7294 100644 --- a/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js +++ b/tools/node_modules/eslint/lib/rules/array-bracket-spacing.js @@ -84,16 +84,16 @@ module.exports = { * @returns {void} */ function reportNoBeginningSpace(node, token) { + const nextToken = sourceCode.getTokenAfter(token); + context.report({ node, - loc: token.loc.start, + loc: { start: token.loc.end, end: nextToken.loc.start }, messageId: "unexpectedSpaceAfter", data: { tokenValue: token.value }, fix(fixer) { - const nextToken = sourceCode.getTokenAfter(token); - return fixer.removeRange([token.range[1], nextToken.range[0]]); } }); @@ -106,16 +106,16 @@ module.exports = { * @returns {void} */ function reportNoEndingSpace(node, token) { + const previousToken = sourceCode.getTokenBefore(token); + context.report({ node, - loc: token.loc.start, + loc: { start: previousToken.loc.end, end: token.loc.start }, messageId: "unexpectedSpaceBefore", data: { tokenValue: token.value }, fix(fixer) { - const previousToken = sourceCode.getTokenBefore(token); - return fixer.removeRange([previousToken.range[1], token.range[0]]); } }); @@ -130,7 +130,7 @@ module.exports = { function reportRequiredBeginningSpace(node, token) { context.report({ node, - loc: token.loc.start, + loc: token.loc, messageId: "missingSpaceAfter", data: { tokenValue: token.value @@ -150,7 +150,7 @@ module.exports = { function reportRequiredEndingSpace(node, token) { context.report({ node, - loc: token.loc.start, + loc: token.loc, messageId: "missingSpaceBefore", data: { tokenValue: token.value diff --git a/tools/node_modules/eslint/lib/rules/key-spacing.js b/tools/node_modules/eslint/lib/rules/key-spacing.js index 994c35627f7522..6d1b9121c78c5f 100644 --- a/tools/node_modules/eslint/lib/rules/key-spacing.js +++ b/tools/node_modules/eslint/lib/rules/key-spacing.js @@ -42,6 +42,18 @@ function isSingleLine(node) { return (node.loc.end.line === node.loc.start.line); } +/** + * Checks whether the properties on a single line. + * @param {ASTNode[]} properties List of Property AST nodes. + * @returns {boolean} True if all properies is on a single line. + */ +function isSingleLineProperties(properties) { + const [firstProp] = properties, + lastProp = last(properties); + + return firstProp.loc.start.line === lastProp.loc.end.line; +} + /** * Initializes a single option property from the configuration with defaults for undefined values * @param {Object} toOptions Object to be initialized @@ -583,17 +595,6 @@ module.exports = { } } - /** - * Verifies vertical alignment, taking into account groups of properties. - * @param {ASTNode} node ObjectExpression node being evaluated. - * @returns {void} - */ - function verifyAlignment(node) { - createGroups(node).forEach(group => { - verifyGroupAlignment(group.filter(isKeyValueProperty)); - }); - } - /** * Verifies spacing of property conforms to specified options. * @param {ASTNode} node Property node being evaluated. @@ -611,17 +612,35 @@ module.exports = { /** * Verifies spacing of each property in a list. - * @param {ASTNode[]} properties List of Property AST nodes. + * @param {ASTNode[]} properties List of Property AST nodes. + * @param {Object} lineOptions Configured singleLine or multiLine options * @returns {void} */ - function verifyListSpacing(properties) { + function verifyListSpacing(properties, lineOptions) { const length = properties.length; for (let i = 0; i < length; i++) { - verifySpacing(properties[i], singleLineOptions); + verifySpacing(properties[i], lineOptions); } } + /** + * Verifies vertical alignment, taking into account groups of properties. + * @param {ASTNode} node ObjectExpression node being evaluated. + * @returns {void} + */ + function verifyAlignment(node) { + createGroups(node).forEach(group => { + const properties = group.filter(isKeyValueProperty); + + if (properties.length > 0 && isSingleLineProperties(properties)) { + verifyListSpacing(properties, multiLineOptions); + } else { + verifyGroupAlignment(properties); + } + }); + } + //-------------------------------------------------------------------------- // Public API //-------------------------------------------------------------------------- @@ -631,7 +650,7 @@ module.exports = { return { ObjectExpression(node) { if (isSingleLine(node)) { - verifyListSpacing(node.properties.filter(isKeyValueProperty)); + verifyListSpacing(node.properties.filter(isKeyValueProperty), singleLineOptions); } else { verifyAlignment(node); } diff --git a/tools/node_modules/eslint/lib/rules/lines-between-class-members.js b/tools/node_modules/eslint/lib/rules/lines-between-class-members.js index 60332a1b3ca366..97235303699089 100644 --- a/tools/node_modules/eslint/lib/rules/lines-between-class-members.js +++ b/tools/node_modules/eslint/lib/rules/lines-between-class-members.js @@ -54,62 +54,45 @@ module.exports = { const sourceCode = context.getSourceCode(); /** - * Checks if there is padding between two tokens - * @param {Token} first The first token - * @param {Token} second The second token - * @returns {boolean} True if there is at least a line between the tokens + * Return the last token among the consecutive tokens that have no exceed max line difference in between, before the first token in the next member. + * @param {Token} prevLastToken The last token in the previous member node. + * @param {Token} nextFirstToken The first token in the next member node. + * @param {number} maxLine The maximum number of allowed line difference between consecutive tokens. + * @returns {Token} The last token among the consecutive tokens. */ - function isPaddingBetweenTokens(first, second) { - const comments = sourceCode.getCommentsBefore(second); - const len = comments.length; + function findLastConsecutiveTokenAfter(prevLastToken, nextFirstToken, maxLine) { + const after = sourceCode.getTokenAfter(prevLastToken, { includeComments: true }); - // If there is no comments - if (len === 0) { - const linesBetweenFstAndSnd = second.loc.start.line - first.loc.end.line - 1; - - return linesBetweenFstAndSnd >= 1; - } - - - // If there are comments - let sumOfCommentLines = 0; // the numbers of lines of comments - let prevCommentLineNum = -1; // line number of the end of the previous comment - - for (let i = 0; i < len; i++) { - const commentLinesOfThisComment = comments[i].loc.end.line - comments[i].loc.start.line + 1; - - sumOfCommentLines += commentLinesOfThisComment; - - /* - * If this comment and the previous comment are in the same line, - * the count of comment lines is duplicated. So decrement sumOfCommentLines. - */ - if (prevCommentLineNum === comments[i].loc.start.line) { - sumOfCommentLines -= 1; - } - - prevCommentLineNum = comments[i].loc.end.line; + if (after !== nextFirstToken && after.loc.start.line - prevLastToken.loc.end.line <= maxLine) { + return findLastConsecutiveTokenAfter(after, nextFirstToken, maxLine); } + return prevLastToken; + } - /* - * If the first block and the first comment are in the same line, - * the count of comment lines is duplicated. So decrement sumOfCommentLines. - */ - if (first.loc.end.line === comments[0].loc.start.line) { - sumOfCommentLines -= 1; - } + /** + * Return the first token among the consecutive tokens that have no exceed max line difference in between, after the last token in the previous member. + * @param {Token} nextFirstToken The first token in the next member node. + * @param {Token} prevLastToken The last token in the previous member node. + * @param {number} maxLine The maximum number of allowed line difference between consecutive tokens. + * @returns {Token} The first token among the consecutive tokens. + */ + function findFirstConsecutiveTokenBefore(nextFirstToken, prevLastToken, maxLine) { + const before = sourceCode.getTokenBefore(nextFirstToken, { includeComments: true }); - /* - * If the last comment and the second block are in the same line, - * the count of comment lines is duplicated. So decrement sumOfCommentLines. - */ - if (comments[len - 1].loc.end.line === second.loc.start.line) { - sumOfCommentLines -= 1; + if (before !== prevLastToken && nextFirstToken.loc.start.line - before.loc.end.line <= maxLine) { + return findFirstConsecutiveTokenBefore(before, prevLastToken, maxLine); } + return nextFirstToken; + } - const linesBetweenFstAndSnd = second.loc.start.line - first.loc.end.line - 1; - - return linesBetweenFstAndSnd - sumOfCommentLines >= 1; + /** + * Checks if there is a token or comment between two tokens. + * @param {Token} before The token before. + * @param {Token} after The token after. + * @returns {boolean} True if there is a token or comment between two tokens. + */ + function hasTokenOrCommentBetween(before, after) { + return sourceCode.getTokensBetween(before, after, { includeComments: true }).length !== 0; } return { @@ -120,10 +103,13 @@ module.exports = { const curFirst = sourceCode.getFirstToken(body[i]); const curLast = sourceCode.getLastToken(body[i]); const nextFirst = sourceCode.getFirstToken(body[i + 1]); - const isPadded = isPaddingBetweenTokens(curLast, nextFirst); const isMulti = !astUtils.isTokenOnSameLine(curFirst, curLast); const skip = !isMulti && options[1].exceptAfterSingleLine; - + const beforePadding = findLastConsecutiveTokenAfter(curLast, nextFirst, 1); + const afterPadding = findFirstConsecutiveTokenBefore(nextFirst, curLast, 1); + const isPadded = afterPadding.loc.start.line - beforePadding.loc.end.line > 1; + const hasTokenInPadding = hasTokenOrCommentBetween(beforePadding, afterPadding); + const curLineLastToken = findLastConsecutiveTokenAfter(curLast, nextFirst, 0); if ((options[0] === "always" && !skip && !isPadded) || (options[0] === "never" && isPadded)) { @@ -131,9 +117,12 @@ module.exports = { node: body[i + 1], messageId: isPadded ? "never" : "always", fix(fixer) { + if (hasTokenInPadding) { + return null; + } return isPadded - ? fixer.replaceTextRange([curLast.range[1], nextFirst.range[0]], "\n") - : fixer.insertTextAfter(curLast, "\n"); + ? fixer.replaceTextRange([beforePadding.range[1], afterPadding.range[0]], "\n") + : fixer.insertTextAfter(curLineLastToken, "\n"); } }); } diff --git a/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js b/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js index f945cfeffe2b07..41e6be3a289584 100644 --- a/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js +++ b/tools/node_modules/eslint/lib/rules/no-multiple-empty-lines.js @@ -110,7 +110,7 @@ module.exports = { if (lineNumber - lastLineNumber - 1 > maxAllowed) { context.report({ node, - loc: { start: { line: lastLineNumber + 1, column: 0 }, end: { line: lineNumber, column: 0 } }, + loc: { start: { line: lastLineNumber + maxAllowed + 1, column: 0 }, end: { line: lineNumber, column: 0 } }, message, data: { max: maxAllowed, pluralizedLines: maxAllowed === 1 ? "line" : "lines" }, fix(fixer) { diff --git a/tools/node_modules/eslint/lib/rules/no-restricted-imports.js b/tools/node_modules/eslint/lib/rules/no-restricted-imports.js index bed9c2432a58dd..ec0696f99a2de0 100644 --- a/tools/node_modules/eslint/lib/rules/no-restricted-imports.js +++ b/tools/node_modules/eslint/lib/rules/no-restricted-imports.js @@ -72,14 +72,14 @@ module.exports = { arrayOfStringsOrObjects, { type: "array", - items: { + items: [{ type: "object", properties: { paths: arrayOfStringsOrObjects, patterns: arrayOfStrings }, additionalProperties: false - }, + }], additionalItems: false } ] diff --git a/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js b/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js index 5c8f569d7b8a2d..a9c2ee74f2c828 100644 --- a/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js +++ b/tools/node_modules/eslint/lib/rules/no-unsafe-negation.js @@ -54,7 +54,8 @@ module.exports = { description: "disallow negating the left operand of relational operators", category: "Possible Errors", recommended: true, - url: "https://eslint.org/docs/rules/no-unsafe-negation" + url: "https://eslint.org/docs/rules/no-unsafe-negation", + suggestion: true }, schema: [ @@ -69,9 +70,13 @@ module.exports = { additionalProperties: false } ], + fixable: null, + messages: { - unexpected: "Unexpected negating the left operand of '{{operator}}' operator." + unexpected: "Unexpected negating the left operand of '{{operator}}' operator.", + suggestNegatedExpression: "Negate '{{operator}}' expression instead of its left operand. This changes the current behavior.", + suggestParenthesisedNegation: "Wrap negation in '()' to make the intention explicit. This preserves the current behavior." } }, @@ -82,10 +87,11 @@ module.exports = { return { BinaryExpression(node) { - const orderingRelationRuleApplies = enforceForOrderingRelations && isOrderingRelationalOperator(node.operator); + const operator = node.operator; + const orderingRelationRuleApplies = enforceForOrderingRelations && isOrderingRelationalOperator(operator); if ( - (isInOrInstanceOfOperator(node.operator) || orderingRelationRuleApplies) && + (isInOrInstanceOfOperator(operator) || orderingRelationRuleApplies) && isNegation(node.left) && !astUtils.isParenthesised(sourceCode, node.left) ) { @@ -93,7 +99,26 @@ module.exports = { node, loc: node.left.loc, messageId: "unexpected", - data: { operator: node.operator } + data: { operator }, + suggest: [ + { + messageId: "suggestNegatedExpression", + data: { operator }, + fix(fixer) { + const negationToken = sourceCode.getFirstToken(node.left); + const fixRange = [negationToken.range[1], node.range[1]]; + const text = sourceCode.text.slice(fixRange[0], fixRange[1]); + + return fixer.replaceTextRange(fixRange, `(${text})`); + } + }, + { + messageId: "suggestParenthesisedNegation", + fix(fixer) { + return fixer.replaceText(node.left, `(${sourceCode.getText(node.left)})`); + } + } + ] }); } } diff --git a/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js b/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js index 672d9bcaa0c508..c352d88dc07ca2 100644 --- a/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js +++ b/tools/node_modules/eslint/lib/rules/prefer-numeric-literals.js @@ -15,6 +15,12 @@ const astUtils = require("./utils/ast-utils"); // Helpers //------------------------------------------------------------------------------ +const radixMap = new Map([ + [2, { system: "binary", literalPrefix: "0b" }], + [8, { system: "octal", literalPrefix: "0o" }], + [16, { system: "hexadecimal", literalPrefix: "0x" }] +]); + /** * Checks to see if a CallExpression's callee node is `parseInt` or * `Number.parseInt`. @@ -54,49 +60,44 @@ module.exports = { }, schema: [], + + messages: { + useLiteral: "Use {{system}} literals instead of {{functionName}}()." + }, + fixable: "code" }, create(context) { const sourceCode = context.getSourceCode(); - const radixMap = { - 2: "binary", - 8: "octal", - 16: "hexadecimal" - }; - - const prefixMap = { - 2: "0b", - 8: "0o", - 16: "0x" - }; - //---------------------------------------------------------------------- // Public //---------------------------------------------------------------------- return { - CallExpression(node) { - - // doesn't check parseInt() if it doesn't have a radix argument - if (node.arguments.length !== 2) { - return; - } + "CallExpression[arguments.length=2]"(node) { + const [strNode, radixNode] = node.arguments, + str = strNode.value, + radix = radixNode.value; + + if ( + strNode.type === "Literal" && + radixNode.type === "Literal" && + typeof str === "string" && + typeof radix === "number" && + radixMap.has(radix) && + isParseInt(node.callee) + ) { - // only error if the radix is 2, 8, or 16 - const radixName = radixMap[node.arguments[1].value]; + const { system, literalPrefix } = radixMap.get(radix); - if (isParseInt(node.callee) && - radixName && - node.arguments[0].type === "Literal" - ) { context.report({ node, - message: "Use {{radixName}} literals instead of {{functionName}}().", + messageId: "useLiteral", data: { - radixName, + system, functionName: sourceCode.getText(node.callee) }, fix(fixer) { @@ -104,9 +105,9 @@ module.exports = { return null; } - const replacement = `${prefixMap[node.arguments[1].value]}${node.arguments[0].value}`; + const replacement = `${literalPrefix}${str}`; - if (+replacement !== parseInt(node.arguments[0].value, node.arguments[1].value)) { + if (+replacement !== parseInt(str, radix)) { /* * If the newly-produced literal would be invalid, (e.g. 0b1234), diff --git a/tools/node_modules/eslint/lib/rules/require-atomic-updates.js b/tools/node_modules/eslint/lib/rules/require-atomic-updates.js index 3912ad86cb912f..bdd6d81ebc4758 100644 --- a/tools/node_modules/eslint/lib/rules/require-atomic-updates.js +++ b/tools/node_modules/eslint/lib/rules/require-atomic-updates.js @@ -162,7 +162,7 @@ module.exports = { docs: { description: "disallow assignments that can lead to race conditions due to usage of `await` or `yield`", category: "Possible Errors", - recommended: true, + recommended: false, url: "https://eslint.org/docs/rules/require-atomic-updates" }, diff --git a/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/LICENSE b/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/LICENSE index ee27ba4b4412b0..c932223b1e2c2f 100644 --- a/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/LICENSE +++ b/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/LICENSE @@ -1,5 +1,8 @@ This software is released under the MIT license: +Copyright (c) 2017 Evgeny Poberezkin +Copyright (c) 2013 James Halliday + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to diff --git a/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/README.md b/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/README.md index 0f43b4a7e034e4..02cf49ff385b8b 100644 --- a/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/README.md +++ b/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/README.md @@ -114,6 +114,18 @@ The fastest is fast-stable-stringify ``` +## Enterprise support + +fast-json-stable-stringify package is a part of [Tidelift enterprise subscription](https://tidelift.com/subscription/pkg/npm-fast-json-stable-stringify?utm_source=npm-fast-json-stable-stringify&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - it provides a centralised commercial support to open-source software users, in addition to the support provided by software maintainers. + + +## Security contact + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. Please do NOT report security vulnerability via GitHub issues. + + # license [MIT](https://github.com/epoberezkin/fast-json-stable-stringify/blob/master/LICENSE) diff --git a/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/package.json b/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/package.json index 2d16a1ff6dcfc2..46f5c8e221cc45 100644 --- a/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/package.json +++ b/tools/node_modules/eslint/node_modules/fast-json-stable-stringify/package.json @@ -8,18 +8,19 @@ "url": "https://github.com/epoberezkin/fast-json-stable-stringify/issues" }, "bundleDependencies": false, + "dependencies": {}, "deprecated": false, "description": "deterministic `JSON.stringify()` - a faster version of substack's json-stable-strigify without jsonify", "devDependencies": { "benchmark": "^2.1.4", "coveralls": "^3.0.0", - "eslint": "^4.9.0", + "eslint": "^6.7.0", "fast-stable-stringify": "latest", "faster-stable-stringify": "latest", "json-stable-stringify": "latest", - "nyc": "^11.2.1", + "nyc": "^14.1.0", "pre-commit": "^1.2.2", - "tape": "~1.0.4" + "tape": "^4.11.0" }, "homepage": "https://github.com/epoberezkin/fast-json-stable-stringify", "keywords": [ @@ -51,5 +52,6 @@ "test": "npm run eslint && nyc npm run test-spec", "test-spec": "tape test/*.js" }, - "version": "2.0.0" + "types": "index.d.ts", + "version": "2.1.0" } \ No newline at end of file diff --git a/tools/node_modules/eslint/node_modules/inquirer/README.md b/tools/node_modules/eslint/node_modules/inquirer/README.md index fe3326fd7448fb..1c711ff19865e6 100644 --- a/tools/node_modules/eslint/node_modules/inquirer/README.md +++ b/tools/node_modules/eslint/node_modules/inquirer/README.md @@ -2,12 +2,13 @@ # Inquirer.js -[![npm](https://badge.fury.io/js/inquirer.svg)](http://badge.fury.io/js/inquirer) [![tests](https://travis-ci.org/SBoudrias/Inquirer.js.svg?branch=master)](http://travis-ci.org/SBoudrias/Inquirer.js) [![Coverage Status](https://codecov.io/gh/SBoudrias/Inquirer.js/branch/master/graph/badge.svg)](https://codecov.io/gh/SBoudrias/Inquirer.js) [![dependencies](https://david-dm.org/SBoudrias/Inquirer.js.svg?theme=shields.io)](https://david-dm.org/SBoudrias/Inquirer.js) +[![npm](https://badge.fury.io/js/inquirer.svg)](http://badge.fury.io/js/inquirer) +[![tests](https://travis-ci.org/SBoudrias/Inquirer.js.svg?branch=master)](http://travis-ci.org/SBoudrias/Inquirer.js) +[![Coverage Status](https://codecov.io/gh/SBoudrias/Inquirer.js/branch/master/graph/badge.svg)](https://codecov.io/gh/SBoudrias/Inquirer.js) +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FSBoudrias%2FInquirer.js.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FSBoudrias%2FInquirer.js?ref=badge_shield) A collection of common interactive command line user interfaces. -**Version 4.x** only supports Node 6 and over. For Node 4 support please use [version 3.x](https://github.com/SBoudrias/Inquirer.js/tree/v3.3.0). - ## Table of Contents 1. [Documentation](#documentation) diff --git a/tools/node_modules/eslint/node_modules/inquirer/lib/objects/choices.js b/tools/node_modules/eslint/node_modules/inquirer/lib/objects/choices.js index 205ede2e775df9..e3c16d05e483a9 100644 --- a/tools/node_modules/eslint/node_modules/inquirer/lib/objects/choices.js +++ b/tools/node_modules/eslint/node_modules/inquirer/lib/objects/choices.js @@ -110,7 +110,9 @@ module.exports = class Choices { push() { var objs = _.map(arguments, val => new Choice(val)); this.choices.push.apply(this.choices, objs); - this.realChoices = this.choices.filter(Separator.exclude); + this.realChoices = this.choices + .filter(Separator.exclude) + .filter(item => !item.disabled); return this.choices; } }; diff --git a/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/base.js b/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/base.js index 22ce6f43276087..6a7b19d3f72f4f 100644 --- a/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/base.js +++ b/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/base.js @@ -95,7 +95,7 @@ class Prompt { filteredValue => validate(filteredValue, self.answers).then( isValid => ({ isValid: isValid, value: filteredValue }), - err => ({ isValid: err }) + err => ({ isValid: err, value: filteredValue }) ), err => ({ isValid: err }) ) diff --git a/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/input.js b/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/input.js index 2a090ad159c535..2b886efc93cd88 100644 --- a/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/input.js +++ b/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/input.js @@ -90,10 +90,10 @@ class InputPrompt extends Base { this.done(state.value); } - onError(state) { - this.rl.line += state.value; - this.rl.cursor += state.value.length; - this.render(state.isValid); + onError({ value = '', isValid }) { + this.rl.line += value; + this.rl.cursor += value.length; + this.render(isValid); } /** diff --git a/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/rawlist.js b/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/rawlist.js index 3c800f6151bc8e..418114b52fa689 100644 --- a/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/rawlist.js +++ b/tools/node_modules/eslint/node_modules/inquirer/lib/prompts/rawlist.js @@ -64,14 +64,13 @@ class RawListPrompt extends Base { validation.success.forEach(this.onEnd.bind(this)); validation.error.forEach(this.onError.bind(this)); - events.keypress - .pipe(takeUntil(validation.success)) - .forEach(this.onKeypress.bind(this)); events.normalizedUpKey.pipe(takeUntil(events.line)).forEach(this.onUpKey.bind(this)); events.normalizedDownKey .pipe(takeUntil(events.line)) .forEach(this.onDownKey.bind(this)); - + events.keypress + .pipe(takeUntil(validation.success)) + .forEach(this.onKeypress.bind(this)); // Init the prompt this.render(); @@ -96,7 +95,6 @@ class RawListPrompt extends Base { '\n' + this.paginator.paginate(choicesStr, this.selected, this.opt.pageSize); message += '\n Answer: '; } - message += this.rl.line; if (error) { @@ -111,8 +109,10 @@ class RawListPrompt extends Base { */ getCurrentValue(index) { - if (index == null || index === '') { + if (index == null) { index = this.rawDefault; + } else if (index === '') { + index = this.selected; } else { index -= 1; } @@ -148,7 +148,6 @@ class RawListPrompt extends Base { } else { this.selected = undefined; } - this.render(); } @@ -174,11 +173,12 @@ class RawListPrompt extends Base { */ onArrowKey(type) { - var index = this.rl.line.length ? Number(this.rl.line) - 1 : 0; - if (type === 'up') index = index === 0 ? this.opt.choices.length - 1 : index - 1; - else index = index === this.opt.choices.length - 1 ? 0 : index + 1; - this.rl.line = String(index + 1); - this.onKeypress(); + var len = this.opt.choices.realLength; + + if (type === 'up') this.selected = this.selected > 0 ? this.selected - 1 : len - 1; + else this.selected = this.selected < len - 1 ? this.selected + 1 : 0; + + this.rl.line = String(this.selected + 1); } } diff --git a/tools/node_modules/eslint/node_modules/inquirer/package.json b/tools/node_modules/eslint/node_modules/inquirer/package.json index a3efb9cb4b2d35..6f7f9e29204c91 100644 --- a/tools/node_modules/eslint/node_modules/inquirer/package.json +++ b/tools/node_modules/eslint/node_modules/inquirer/package.json @@ -17,7 +17,7 @@ "lodash": "^4.17.15", "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.4.0", + "rxjs": "^6.5.3", "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" @@ -28,10 +28,10 @@ "chai": "^4.2.0", "chalk-pipe": "^2.0.0", "cmdify": "^0.0.4", - "mocha": "^6.2.0", + "mocha": "^6.2.1", "mockery": "^2.1.0", "nyc": "^14.1.1", - "sinon": "^7.4.1" + "sinon": "^7.5.0" }, "engines": { "node": ">=6.0.0" @@ -40,7 +40,7 @@ "lib", "README.md" ], - "gitHead": "be4558e0314afcd3852361929397588744a745d8", + "gitHead": "7ec6ea0d2e55895fada6782fcc76de232c1e4c12", "homepage": "https://github.com/SBoudrias/Inquirer.js#readme", "keywords": [ "command", @@ -63,5 +63,5 @@ "prepublishOnly": "cp ../../README.md .", "test": "nyc mocha test/**/* -r ./test/before" }, - "version": "7.0.0" + "version": "7.0.1" } \ No newline at end of file diff --git a/tools/node_modules/eslint/package.json b/tools/node_modules/eslint/package.json index 0abd303e051b44..73cf4d4ed2f26a 100644 --- a/tools/node_modules/eslint/package.json +++ b/tools/node_modules/eslint/package.json @@ -153,5 +153,5 @@ "test:cli": "mocha", "webpack": "node Makefile.js webpack" }, - "version": "6.7.2" + "version": "6.8.0" } \ No newline at end of file From 07e82db764b886de258cfddf92254bda309117dd Mon Sep 17 00:00:00 2001 From: cjihrig Date: Fri, 20 Dec 2019 12:16:36 -0500 Subject: [PATCH 027/180] test: get lib/wasi.js coverage to 100% MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit covers the last remaining uncovered code in lib/wasi.js. PR-URL: https://github.com/nodejs/node/pull/31039 Reviewed-By: Ruben Bridgewater Reviewed-By: Luigi Pinca Reviewed-By: Rich Trott Reviewed-By: Richard Lau Reviewed-By: Yongsheng Zhang Reviewed-By: Michaël Zasso Reviewed-By: Stephen Belanger --- test/wasi/test-wasi-options-validation.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/wasi/test-wasi-options-validation.js b/test/wasi/test-wasi-options-validation.js index fe23e446b08733..f07046b833d3ee 100644 --- a/test/wasi/test-wasi-options-validation.js +++ b/test/wasi/test-wasi-options-validation.js @@ -20,3 +20,9 @@ assert.throws(() => { new WASI({ env: 'fhqwhgads' }); }, // If preopens is not an Object and not undefined, it should throw. assert.throws(() => { new WASI({ preopens: 'fhqwhgads' }); }, { code: 'ERR_INVALID_ARG_TYPE', message: /\bpreopens\b/ }); + +// If options is provided, but not an object, the constructor should throw. +[null, 'foo', '', 0, NaN, Symbol(), true, false, () => {}].forEach((value) => { + assert.throws(() => { new WASI(value); }, + { code: 'ERR_INVALID_ARG_TYPE' }); +}); From afecc973d5a7f216bdc180b06a7b26e6628f9e73 Mon Sep 17 00:00:00 2001 From: Matteo Collina Date: Thu, 30 May 2019 17:58:55 +0200 Subject: [PATCH 028/180] events: add EventEmitter.on to async iterate over events Fixes: https://github.com/nodejs/node/issues/27847 PR-URL: https://github.com/nodejs/node/pull/27994 Reviewed-By: Benjamin Gruenbaum Reviewed-By: James M Snell Reviewed-By: Gus Caplan Reviewed-By: Anna Henningsen Reviewed-By: Rich Trott --- doc/api/events.md | 35 +++ lib/events.js | 104 ++++++++ test/parallel/test-event-on-async-iterator.js | 223 ++++++++++++++++++ 3 files changed, 362 insertions(+) create mode 100644 test/parallel/test-event-on-async-iterator.js diff --git a/doc/api/events.md b/doc/api/events.md index 69f309a73bcd34..1e2a7660cb901b 100644 --- a/doc/api/events.md +++ b/doc/api/events.md @@ -886,6 +886,41 @@ Value: `Symbol.for('nodejs.rejection')` See how to write a custom [rejection handler][rejection]. +## events.on(emitter, eventName) + + +* `emitter` {EventEmitter} +* `eventName` {string|symbol} The name of the event being listened for +* Returns: {AsyncIterator} that iterates `eventName` events emitted by the `emitter` + +```js +const { on, EventEmitter } = require('events'); + +(async () => { + const ee = new EventEmitter(); + + // Emit later on + process.nextTick(() => { + ee.emit('foo', 'bar'); + ee.emit('foo', 42); + }); + + for await (const event of on(ee, 'foo')) { + // The execution of this inner block is synchronous and it + // processes one event at a time (even with await). Do not use + // if concurrent execution is required. + console.log(event); // prints ['bar'] [42] + } +})(); +``` + +Returns an `AsyncIterator` that iterates `eventName` events. It will throw +if the `EventEmitter` emits `'error'`. It removes all listeners when +exiting the loop. The `value` returned by each iteration is an array +composed of the emitted event arguments. + [WHATWG-EventTarget]: https://dom.spec.whatwg.org/#interface-eventtarget [`--trace-warnings`]: cli.html#cli_trace_warnings [`EventEmitter.defaultMaxListeners`]: #events_eventemitter_defaultmaxlisteners diff --git a/lib/events.js b/lib/events.js index 6f3739c67f2a8f..7889f62d9094f3 100644 --- a/lib/events.js +++ b/lib/events.js @@ -29,12 +29,16 @@ const { ObjectCreate, ObjectDefineProperty, ObjectGetPrototypeOf, + ObjectSetPrototypeOf, ObjectKeys, Promise, + PromiseReject, + PromiseResolve, ReflectApply, ReflectOwnKeys, Symbol, SymbolFor, + SymbolAsyncIterator } = primordials; const kRejection = SymbolFor('nodejs.rejection'); @@ -62,6 +66,7 @@ function EventEmitter(opts) { } module.exports = EventEmitter; module.exports.once = once; +module.exports.on = on; // Backwards-compat with node 0.10.x EventEmitter.EventEmitter = EventEmitter; @@ -657,3 +662,102 @@ function once(emitter, name) { emitter.once(name, eventListener); }); } + +const AsyncIteratorPrototype = ObjectGetPrototypeOf( + ObjectGetPrototypeOf(async function* () {}).prototype); + +function createIterResult(value, done) { + return { value, done }; +} + +function on(emitter, event) { + const unconsumedEvents = []; + const unconsumedPromises = []; + let error = null; + let finished = false; + + const iterator = ObjectSetPrototypeOf({ + next() { + // First, we consume all unread events + const value = unconsumedEvents.shift(); + if (value) { + return PromiseResolve(createIterResult(value, false)); + } + + // Then we error, if an error happened + // This happens one time if at all, because after 'error' + // we stop listening + if (error) { + const p = PromiseReject(error); + // Only the first element errors + error = null; + return p; + } + + // If the iterator is finished, resolve to done + if (finished) { + return PromiseResolve(createIterResult(undefined, true)); + } + + // Wait until an event happens + return new Promise(function(resolve, reject) { + unconsumedPromises.push({ resolve, reject }); + }); + }, + + return() { + emitter.removeListener(event, eventHandler); + emitter.removeListener('error', errorHandler); + finished = true; + + for (const promise of unconsumedPromises) { + promise.resolve(createIterResult(undefined, true)); + } + + return PromiseResolve(createIterResult(undefined, true)); + }, + + throw(err) { + if (!err || !(err instanceof Error)) { + throw new ERR_INVALID_ARG_TYPE('EventEmitter.AsyncIterator', + 'Error', err); + } + error = err; + emitter.removeListener(event, eventHandler); + emitter.removeListener('error', errorHandler); + }, + + [SymbolAsyncIterator]() { + return this; + } + }, AsyncIteratorPrototype); + + emitter.on(event, eventHandler); + emitter.on('error', errorHandler); + + return iterator; + + function eventHandler(...args) { + const promise = unconsumedPromises.shift(); + if (promise) { + promise.resolve(createIterResult(args, false)); + } else { + unconsumedEvents.push(args); + } + } + + function errorHandler(err) { + finished = true; + + const toError = unconsumedPromises.shift(); + + if (toError) { + toError.reject(err); + } else { + // The next time we call next() + error = err; + } + + iterator.return(); + } +} diff --git a/test/parallel/test-event-on-async-iterator.js b/test/parallel/test-event-on-async-iterator.js new file mode 100644 index 00000000000000..ff5d8cdaf2aea0 --- /dev/null +++ b/test/parallel/test-event-on-async-iterator.js @@ -0,0 +1,223 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const { on, EventEmitter } = require('events'); + +async function basic() { + const ee = new EventEmitter(); + process.nextTick(() => { + ee.emit('foo', 'bar'); + // 'bar' is a spurious event, we are testing + // that it does not show up in the iterable + ee.emit('bar', 24); + ee.emit('foo', 42); + }); + + const iterable = on(ee, 'foo'); + + const expected = [['bar'], [42]]; + + for await (const event of iterable) { + const current = expected.shift(); + + assert.deepStrictEqual(current, event); + + if (expected.length === 0) { + break; + } + } + assert.strictEqual(ee.listenerCount('foo'), 0); + assert.strictEqual(ee.listenerCount('error'), 0); +} + +async function error() { + const ee = new EventEmitter(); + const _err = new Error('kaboom'); + process.nextTick(() => { + ee.emit('error', _err); + }); + + const iterable = on(ee, 'foo'); + let looped = false; + let thrown = false; + + try { + // eslint-disable-next-line no-unused-vars + for await (const event of iterable) { + looped = true; + } + } catch (err) { + thrown = true; + assert.strictEqual(err, _err); + } + assert.strictEqual(thrown, true); + assert.strictEqual(looped, false); +} + +async function errorDelayed() { + const ee = new EventEmitter(); + const _err = new Error('kaboom'); + process.nextTick(() => { + ee.emit('foo', 42); + ee.emit('error', _err); + }); + + const iterable = on(ee, 'foo'); + const expected = [[42]]; + let thrown = false; + + try { + for await (const event of iterable) { + const current = expected.shift(); + assert.deepStrictEqual(current, event); + } + } catch (err) { + thrown = true; + assert.strictEqual(err, _err); + } + assert.strictEqual(thrown, true); + assert.strictEqual(ee.listenerCount('foo'), 0); + assert.strictEqual(ee.listenerCount('error'), 0); +} + +async function throwInLoop() { + const ee = new EventEmitter(); + const _err = new Error('kaboom'); + + process.nextTick(() => { + ee.emit('foo', 42); + }); + + try { + for await (const event of on(ee, 'foo')) { + assert.deepStrictEqual(event, [42]); + throw _err; + } + } catch (err) { + assert.strictEqual(err, _err); + } + + assert.strictEqual(ee.listenerCount('foo'), 0); + assert.strictEqual(ee.listenerCount('error'), 0); +} + +async function next() { + const ee = new EventEmitter(); + const iterable = on(ee, 'foo'); + + process.nextTick(function() { + ee.emit('foo', 'bar'); + ee.emit('foo', 42); + iterable.return(); + }); + + const results = await Promise.all([ + iterable.next(), + iterable.next(), + iterable.next() + ]); + + assert.deepStrictEqual(results, [{ + value: ['bar'], + done: false + }, { + value: [42], + done: false + }, { + value: undefined, + done: true + }]); + + assert.deepStrictEqual(await iterable.next(), { + value: undefined, + done: true + }); +} + +async function nextError() { + const ee = new EventEmitter(); + const iterable = on(ee, 'foo'); + const _err = new Error('kaboom'); + process.nextTick(function() { + ee.emit('error', _err); + }); + const results = await Promise.allSettled([ + iterable.next(), + iterable.next(), + iterable.next() + ]); + assert.deepStrictEqual(results, [{ + status: 'rejected', + reason: _err + }, { + status: 'fulfilled', + value: { + value: undefined, + done: true + } + }, { + status: 'fulfilled', + value: { + value: undefined, + done: true + } + }]); + assert.strictEqual(ee.listeners('error').length, 0); +} + +async function iterableThrow() { + const ee = new EventEmitter(); + const iterable = on(ee, 'foo'); + + process.nextTick(() => { + ee.emit('foo', 'bar'); + ee.emit('foo', 42); // lost in the queue + iterable.throw(_err); + }); + + const _err = new Error('kaboom'); + let thrown = false; + + assert.throws(() => { + // No argument + iterable.throw(); + }, { + message: 'The "EventEmitter.AsyncIterator" property must be' + + ' an instance of Error. Received undefined', + name: 'TypeError' + }); + + const expected = [['bar'], [42]]; + + try { + for await (const event of iterable) { + assert.deepStrictEqual(event, expected.shift()); + } + } catch (err) { + thrown = true; + assert.strictEqual(err, _err); + } + assert.strictEqual(thrown, true); + assert.strictEqual(expected.length, 0); + assert.strictEqual(ee.listenerCount('foo'), 0); + assert.strictEqual(ee.listenerCount('error'), 0); +} + +async function run() { + const funcs = [ + basic, + error, + errorDelayed, + throwInLoop, + next, + nextError, + iterableThrow + ]; + + for (const fn of funcs) { + await fn(); + } +} + +run().then(common.mustCall()); From 7e13ae77570bc4f73725dfc88c5c43ac20d97820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Tue, 17 Dec 2019 17:44:07 +0100 Subject: [PATCH 029/180] deps: V8: cherry-pick d3a1a5b6c491 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message: [objects] Fix memory leak in PrototypeUsers::Add PrototypeUsers::Add now iterates the WeakArrayList to find empty slots before growing the array. Not reusing empty slots caused a memory leak. It might also be desirable to shrink the WeakArrayList in the future. Right now it is only compacted when invoking CreateBlob. Also removed unused PrototypeUsers::IsEmptySlot declaration. Bug: v8:10031 Change-Id: I570ec78fca37e8f0c794f1f40846a4daab47c225 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1967317 Reviewed-by: Ulan Degenbaev Reviewed-by: Igor Sheludko Commit-Queue: Dominik Inführ Cr-Commit-Position: refs/heads/master@{#65456} Refs: https://github.com/v8/v8/commit/d3a1a5b6c4916f22e076e3349ed3619bfb014f29 Fixes: https://github.com/nodejs/node/issues/30753 PR-URL: https://github.com/nodejs/node/pull/31005 Reviewed-By: Richard Lau Reviewed-By: Colin Ihrig Reviewed-By: Gus Caplan Reviewed-By: Ben Noordhuis Reviewed-By: Rich Trott --- common.gypi | 2 +- deps/v8/src/objects/objects.cc | 16 ++++++++++++++++ deps/v8/src/objects/prototype-info.h | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/common.gypi b/common.gypi index 210e86eeb260d5..008ac88929f390 100644 --- a/common.gypi +++ b/common.gypi @@ -39,7 +39,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.23', + 'v8_embedder_string': '-node.24', ##### V8 defaults for Node.js ##### diff --git a/deps/v8/src/objects/objects.cc b/deps/v8/src/objects/objects.cc index 227cff8da47a33..723023b707947f 100644 --- a/deps/v8/src/objects/objects.cc +++ b/deps/v8/src/objects/objects.cc @@ -4038,6 +4038,13 @@ Handle PrototypeUsers::Add(Isolate* isolate, // If there are empty slots, use one of them. int empty_slot = Smi::ToInt(empty_slot_index(*array)); + + if (empty_slot == kNoEmptySlotsMarker) { + // GCs might have cleared some references, rescan the array for empty slots. + PrototypeUsers::ScanForEmptySlots(*array); + empty_slot = Smi::ToInt(empty_slot_index(*array)); + } + if (empty_slot != kNoEmptySlotsMarker) { DCHECK_GE(empty_slot, kFirstIndex); CHECK_LT(empty_slot, array->length()); @@ -4060,6 +4067,15 @@ Handle PrototypeUsers::Add(Isolate* isolate, return array; } +// static +void PrototypeUsers::ScanForEmptySlots(WeakArrayList array) { + for (int i = kFirstIndex; i < array.length(); i++) { + if (array.Get(i)->IsCleared()) { + PrototypeUsers::MarkSlotEmpty(array, i); + } + } +} + WeakArrayList PrototypeUsers::Compact(Handle array, Heap* heap, CompactionCallback callback, AllocationType allocation) { diff --git a/deps/v8/src/objects/prototype-info.h b/deps/v8/src/objects/prototype-info.h index 94d86d2e1931c3..6f777eda8936c8 100644 --- a/deps/v8/src/objects/prototype-info.h +++ b/deps/v8/src/objects/prototype-info.h @@ -99,7 +99,7 @@ class V8_EXPORT_PRIVATE PrototypeUsers : public WeakArrayList { static inline Smi empty_slot_index(WeakArrayList array); static inline void set_empty_slot_index(WeakArrayList array, int index); - static void IsSlotEmpty(WeakArrayList array, int index); + static void ScanForEmptySlots(WeakArrayList array); DISALLOW_IMPLICIT_CONSTRUCTORS(PrototypeUsers); }; From 614b2c58f0b39139d54b63b2dcebbadaa41d15fe Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Fri, 6 Dec 2019 01:09:09 +0100 Subject: [PATCH 030/180] lib: further simplify assertions in vm/module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs: https://github.com/nodejs/node/pull/30755 PR-URL: https://github.com/nodejs/node/pull/30815 Reviewed-By: Ruben Bridgewater Reviewed-By: Rich Trott Reviewed-By: Colin Ihrig Reviewed-By: Luigi Pinca Reviewed-By: Michaël Zasso --- lib/internal/vm/module.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/internal/vm/module.js b/lib/internal/vm/module.js index 9e6aa6b6b870ae..2a89165409dec6 100644 --- a/lib/internal/vm/module.js +++ b/lib/internal/vm/module.js @@ -1,6 +1,6 @@ 'use strict'; -const { fail } = require('internal/assert'); +const assert = require('internal/assert'); const { ArrayIsArray, ObjectCreate, @@ -59,11 +59,6 @@ const kContext = Symbol('kContext'); const kPerContextModuleId = Symbol('kPerContextModuleId'); const kLink = Symbol('kLink'); -function failIfDebug() { - if (process.features.debug === false) return; - fail('VM Modules'); -} - class Module { constructor(options) { emitExperimentalWarning('VM Modules'); @@ -119,12 +114,11 @@ class Module { importModuleDynamicallyWrap(options.importModuleDynamically) : undefined, }); - } else if (syntheticEvaluationSteps) { + } else { + assert(syntheticEvaluationSteps); this[kWrap] = new ModuleWrap(identifier, context, syntheticExportNames, syntheticEvaluationSteps); - } else { - failIfDebug(); } wrapToModuleMap.set(this[kWrap], this); @@ -380,7 +374,9 @@ class SyntheticModule extends Module { identifier, }); - this[kLink] = () => this[kWrap].link(() => { failIfDebug(); }); + this[kLink] = () => this[kWrap].link(() => { + assert.fail('link callback should not be called'); + }); } setExport(name, value) { From a27edd833571dbee79b5102834f89c46343727dd Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 18 Dec 2019 15:16:02 +0100 Subject: [PATCH 031/180] src,test: use v8::Global instead of v8::Persistent This is in preparation for a lint rule forbidding usage of `v8::Persistent`. PR-URL: https://github.com/nodejs/node/pull/31018 Reviewed-By: Colin Ihrig Reviewed-By: Richard Lau Reviewed-By: James M Snell Reviewed-By: David Carlier Reviewed-By: Rich Trott Reviewed-By: Gus Caplan Reviewed-By: Joyee Cheung Reviewed-By: Ben Noordhuis Reviewed-By: Stephen Belanger --- src/api/async_resource.cc | 1 - src/node.h | 2 +- test/addons/async-hello-world/binding.cc | 3 +-- test/addons/callback-scope/binding.cc | 32 ++++++++++++------------ 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/api/async_resource.cc b/src/api/async_resource.cc index eef80c85f44f4c..0a2437fe6eda5c 100644 --- a/src/api/async_resource.cc +++ b/src/api/async_resource.cc @@ -24,7 +24,6 @@ AsyncResource::AsyncResource(Isolate* isolate, AsyncResource::~AsyncResource() { EmitAsyncDestroy(env_, async_context_); - resource_.Reset(); } MaybeLocal AsyncResource::MakeCallback(Local callback, diff --git a/src/node.h b/src/node.h index 5f462082f91994..e410068e45dc01 100644 --- a/src/node.h +++ b/src/node.h @@ -881,7 +881,7 @@ class NODE_EXTERN AsyncResource { private: Environment* env_; - v8::Persistent resource_; + v8::Global resource_; async_context async_context_; }; diff --git a/test/addons/async-hello-world/binding.cc b/test/addons/async-hello-world/binding.cc index ff899628c4d56d..2f77aee52ab2d9 100644 --- a/test/addons/async-hello-world/binding.cc +++ b/test/addons/async-hello-world/binding.cc @@ -14,7 +14,7 @@ struct async_req { int input; int output; v8::Isolate* isolate; - v8::Persistent callback; + v8::Global callback; node::async_context context; }; @@ -61,7 +61,6 @@ void AfterAsync(uv_work_t* r) { v8::SealHandleScope seal_handle_scope(isolate); // cleanup node::EmitAsyncDestroy(isolate, req->context); - req->callback.Reset(); delete req; if (try_catch.HasCaught()) { diff --git a/test/addons/callback-scope/binding.cc b/test/addons/callback-scope/binding.cc index 94d5ec91d7f3a2..6bbf5fed35face 100644 --- a/test/addons/callback-scope/binding.cc +++ b/test/addons/callback-scope/binding.cc @@ -4,6 +4,7 @@ #include #include +#include namespace { @@ -31,16 +32,14 @@ void RunInCallbackScope(const v8::FunctionCallbackInfo& args) { args.GetReturnValue().Set(ret.ToLocalChecked()); } -static v8::Persistent persistent; - static void Callback(uv_work_t* req, int ignored) { v8::Isolate* isolate = v8::Isolate::GetCurrent(); v8::HandleScope scope(isolate); node::CallbackScope callback_scope(isolate, v8::Object::New(isolate), node::async_context{0, 0}); - - v8::Local local = - v8::Local::New(isolate, persistent); + std::unique_ptr> persistent { + static_cast*>(req->data) }; + v8::Local local = persistent->Get(isolate); local->Resolve(isolate->GetCurrentContext(), v8::Undefined(isolate)).ToChecked(); delete req; @@ -49,20 +48,21 @@ static void Callback(uv_work_t* req, int ignored) { static void TestResolveAsync(const v8::FunctionCallbackInfo& args) { v8::Isolate* isolate = args.GetIsolate(); - if (persistent.IsEmpty()) { - persistent.Reset(isolate, v8::Promise::Resolver::New( - isolate->GetCurrentContext()).ToLocalChecked()); + v8::Global* persistent = + new v8::Global( + isolate, + v8::Promise::Resolver::New( + isolate->GetCurrentContext()).ToLocalChecked()); - uv_work_t* req = new uv_work_t; + uv_work_t* req = new uv_work_t; + req->data = static_cast(persistent); - uv_queue_work(node::GetCurrentEventLoop(isolate), - req, - [](uv_work_t*) {}, - Callback); - } + uv_queue_work(node::GetCurrentEventLoop(isolate), + req, + [](uv_work_t*) {}, + Callback); - v8::Local local = - v8::Local::New(isolate, persistent); + v8::Local local = persistent->Get(isolate); args.GetReturnValue().Set(local->GetPromise()); } From a7988ab0fa3b018068f2706ae4cfc3a5ab07948c Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 18 Dec 2019 16:47:38 +0100 Subject: [PATCH 032/180] doc: avoid using v8::Persistent in addon docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use `v8::Global` where possible. For examples where it applies, also clean up the code and make the code multi-threading-ready, for those where that isn’t easily possible, add a warning about that. PR-URL: https://github.com/nodejs/node/pull/31018 Reviewed-By: Colin Ihrig Reviewed-By: Richard Lau Reviewed-By: James M Snell Reviewed-By: David Carlier Reviewed-By: Rich Trott Reviewed-By: Gus Caplan Reviewed-By: Joyee Cheung Reviewed-By: Ben Noordhuis Reviewed-By: Stephen Belanger --- doc/api/addons.md | 63 ++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/doc/api/addons.md b/doc/api/addons.md index 8b17d6b417b8e8..3b33b9cffe5094 100644 --- a/doc/api/addons.md +++ b/doc/api/addons.md @@ -157,11 +157,11 @@ The context-aware addon can be structured to avoid global static data by performing the following steps: * defining a class which will hold per-addon-instance data. Such -a class should include a `v8::Persistent` which will hold a weak +a class should include a `v8::Global` which will hold a weak reference to the addon's `exports` object. The callback associated with the weak reference will then destroy the instance of the class. * constructing an instance of this class in the addon initializer such that the -`v8::Persistent` is set to the `exports` object. +`v8::Global` is set to the `exports` object. * storing the instance of the class in a `v8::External`, and * passing the `v8::External` to all methods exposed to JavaScript by passing it to the `v8::FunctionTemplate` constructor which creates the native-backed @@ -188,14 +188,6 @@ class AddonData { exports_.SetWeak(this, DeleteMe, WeakCallbackType::kParameter); } - ~AddonData() { - if (!exports_.IsEmpty()) { - // Reset the reference to avoid leaking data. - exports_.ClearWeak(); - exports_.Reset(); - } - } - // Per-addon data. int call_count; @@ -207,7 +199,7 @@ class AddonData { // Weak handle to the "exports" object. An instance of this class will be // destroyed along with the exports object to which it is weakly bound. - v8::Persistent exports_; + v8::Global exports_; }; static void Method(const v8::FunctionCallbackInfo& info) { @@ -830,7 +822,7 @@ class MyObject : public node::ObjectWrap { static void New(const v8::FunctionCallbackInfo& args); static void PlusOne(const v8::FunctionCallbackInfo& args); - static v8::Persistent constructor; + double value_; }; @@ -858,12 +850,10 @@ using v8::Local; using v8::NewStringType; using v8::Number; using v8::Object; -using v8::Persistent; +using v8::ObjectTemplate; using v8::String; using v8::Value; -Persistent MyObject::constructor; - MyObject::MyObject(double value) : value_(value) { } @@ -872,9 +862,15 @@ MyObject::~MyObject() { void MyObject::Init(Local exports) { Isolate* isolate = exports->GetIsolate(); + Local context = isolate->GetCurrentContext(); + + Local addon_data_tpl = ObjectTemplate::New(isolate); + addon_data_tpl->SetInternalFieldCount(1); // 1 field for the MyObject::New() + Local addon_data = + addon_data_tpl->NewInstance(context).ToLocalChecked(); // Prepare constructor template - Local tpl = FunctionTemplate::New(isolate, New); + Local tpl = FunctionTemplate::New(isolate, New, addon_data); tpl->SetClassName(String::NewFromUtf8( isolate, "MyObject", NewStringType::kNormal).ToLocalChecked()); tpl->InstanceTemplate()->SetInternalFieldCount(1); @@ -882,11 +878,11 @@ void MyObject::Init(Local exports) { // Prototype NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne); - Local context = isolate->GetCurrentContext(); - constructor.Reset(isolate, tpl->GetFunction(context).ToLocalChecked()); + Local constructor = tpl->GetFunction(context).ToLocalChecked(); + addon_data->SetInternalField(0, constructor); exports->Set(context, String::NewFromUtf8( isolate, "MyObject", NewStringType::kNormal).ToLocalChecked(), - tpl->GetFunction(context).ToLocalChecked()).FromJust(); + constructor).FromJust(); } void MyObject::New(const FunctionCallbackInfo& args) { @@ -904,7 +900,8 @@ void MyObject::New(const FunctionCallbackInfo& args) { // Invoked as plain function `MyObject(...)`, turn into construct call. const int argc = 1; Local argv[argc] = { args[0] }; - Local cons = Local::New(isolate, constructor); + Local cons = + args.Data().As()->GetInternalField(0).As(); Local result = cons->NewInstance(context, argc, argv).ToLocalChecked(); args.GetReturnValue().Set(result); @@ -1029,7 +1026,7 @@ class MyObject : public node::ObjectWrap { static void New(const v8::FunctionCallbackInfo& args); static void PlusOne(const v8::FunctionCallbackInfo& args); - static v8::Persistent constructor; + static v8::Global constructor; double value_; }; @@ -1047,20 +1044,23 @@ The implementation in `myobject.cc` is similar to the previous example: namespace demo { +using node::AddEnvironmentCleanupHook; using v8::Context; using v8::Function; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; +using v8::Global; using v8::Isolate; using v8::Local; using v8::NewStringType; using v8::Number; using v8::Object; -using v8::Persistent; using v8::String; using v8::Value; -Persistent MyObject::constructor; +// Warning! This is not thread-safe, this addon cannot be used for worker +// threads. +Global MyObject::constructor; MyObject::MyObject(double value) : value_(value) { } @@ -1080,6 +1080,10 @@ void MyObject::Init(Isolate* isolate) { Local context = isolate->GetCurrentContext(); constructor.Reset(isolate, tpl->GetFunction(context).ToLocalChecked()); + + AddEnvironmentCleanupHook(isolate, [](void*) { + constructor.Reset(); + }, nullptr); } void MyObject::New(const FunctionCallbackInfo& args) { @@ -1246,7 +1250,7 @@ class MyObject : public node::ObjectWrap { ~MyObject(); static void New(const v8::FunctionCallbackInfo& args); - static v8::Persistent constructor; + static v8::Global constructor; double value_; }; @@ -1264,19 +1268,22 @@ The implementation of `myobject.cc` is similar to before: namespace demo { +using node::AddEnvironmentCleanupHook; using v8::Context; using v8::Function; using v8::FunctionCallbackInfo; using v8::FunctionTemplate; +using v8::Global; using v8::Isolate; using v8::Local; using v8::NewStringType; using v8::Object; -using v8::Persistent; using v8::String; using v8::Value; -Persistent MyObject::constructor; +// Warning! This is not thread-safe, this addon cannot be used for worker +// threads. +Global MyObject::constructor; MyObject::MyObject(double value) : value_(value) { } @@ -1293,6 +1300,10 @@ void MyObject::Init(Isolate* isolate) { Local context = isolate->GetCurrentContext(); constructor.Reset(isolate, tpl->GetFunction(context).ToLocalChecked()); + + AddEnvironmentCleanupHook(isolate, [](void*) { + constructor.Reset(); + }, nullptr); } void MyObject::New(const FunctionCallbackInfo& args) { From 28a62c30be3b78ee5b535e02727155fa92df3803 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 18 Dec 2019 15:28:24 +0100 Subject: [PATCH 033/180] tools,src: forbid usage of v8::Persistent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `v8::Persistent` comes with the surprising catch that it requires manual cleanup. `v8::Global` doesn’t, making it easier to use, and additionally provides move semantics. New code should always use `v8::Global`. PR-URL: https://github.com/nodejs/node/pull/31018 Reviewed-By: Colin Ihrig Reviewed-By: Richard Lau Reviewed-By: James M Snell Reviewed-By: David Carlier Reviewed-By: Rich Trott Reviewed-By: Gus Caplan Reviewed-By: Joyee Cheung Reviewed-By: Ben Noordhuis Reviewed-By: Stephen Belanger --- src/node_object_wrap.h | 2 ++ tools/cpplint.py | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/node_object_wrap.h b/src/node_object_wrap.h index 9dce684892a2d8..cb13d84388bcc6 100644 --- a/src/node_object_wrap.h +++ b/src/node_object_wrap.h @@ -65,6 +65,7 @@ class ObjectWrap { } + // NOLINTNEXTLINE(runtime/v8_persistent) inline v8::Persistent& persistent() { return handle_; } @@ -122,6 +123,7 @@ class ObjectWrap { delete wrap; } + // NOLINTNEXTLINE(runtime/v8_persistent) v8::Persistent handle_; }; diff --git a/tools/cpplint.py b/tools/cpplint.py index 40564789549aba..4ea91c0dc04a54 100755 --- a/tools/cpplint.py +++ b/tools/cpplint.py @@ -321,6 +321,7 @@ 'runtime/string', 'runtime/threadsafe_fn', 'runtime/vlog', + 'runtime/v8_persistent', 'whitespace/blank_line', 'whitespace/braces', 'whitespace/comma', @@ -627,6 +628,8 @@ _NULL_TOKEN_PATTERN = re.compile(r'\bNULL\b') +_V8_PERSISTENT_PATTERN = re.compile(r'\bv8::Persistent\b') + _RIGHT_LEANING_POINTER_PATTERN = re.compile(r'[^=|(,\s><);&?:}]' r'(?= 0 or line.find('*/') >= 0: + return + + for match in _V8_PERSISTENT_PATTERN.finditer(line): + error(filename, linenum, 'runtime/v8_persistent', 2, + 'Use v8::Global instead of v8::Persistent') + def CheckLeftLeaningPointer(filename, clean_lines, linenum, error): """Check for left-leaning pointer placement. @@ -4723,6 +4748,7 @@ def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state, CheckCheck(filename, clean_lines, linenum, error) CheckAltTokens(filename, clean_lines, linenum, error) CheckNullTokens(filename, clean_lines, linenum, error) + CheckV8PersistentTokens(filename, clean_lines, linenum, error) CheckLeftLeaningPointer(filename, clean_lines, linenum, error) classinfo = nesting_state.InnermostClass() if classinfo: From 796a9c0f438cf80b7f7c6524c1ce401ae9a4771e Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sat, 21 Dec 2019 19:08:36 -0800 Subject: [PATCH 034/180] doc,vm,test: remove _sandbox_ from vm documentation The vm documentation uses the word _sandbox_ but has a significant disclaimer about how that should not be interpreted to connote security guarantees. Remove the term "sandbox" from documentation. As a result, some code and tests also need to change. PR-URL: https://github.com/nodejs/node/pull/31057 Reviewed-By: Gus Caplan Reviewed-By: Colin Ihrig Reviewed-By: Stephen Belanger Reviewed-By: Ruben Bridgewater --- doc/api/vm.md | 179 +++++++++++++++---------------- lib/vm.js | 61 +++++------ test/parallel/test-vm-context.js | 20 ++-- 3 files changed, 129 insertions(+), 131 deletions(-) diff --git a/doc/api/vm.md b/doc/api/vm.md index 7712ea78abce0c..9e7ca23e44eb82 100644 --- a/doc/api/vm.md +++ b/doc/api/vm.md @@ -6,39 +6,36 @@ -The `vm` module provides APIs for compiling and running code within V8 Virtual +The `vm` module enables compiling and running code within V8 Virtual Machine contexts. **The `vm` module is not a security mechanism. Do -not use it to run untrusted code**. The term "sandbox" is used throughout these -docs simply to refer to a separate context, and does not confer any security -guarantees. +not use it to run untrusted code**. JavaScript code can be compiled and run immediately or compiled, saved, and run later. -A common use case is to run the code in a sandboxed environment. -The sandboxed code uses a different V8 Context, meaning that -it has a different global object than the rest of the code. +A common use case is to run the code in a different V8 Context. This means +invoked code has a different global object than the invoking code. -One can provide the context by ["contextifying"][contextified] a sandbox -object. The sandboxed code treats any property in the sandbox like a -global variable. Any changes to global variables caused by the sandboxed -code are reflected in the sandbox object. +One can provide the context by [_contextifying_][contextified] an +object. The invoked code treats any property in the context like a +global variable. Any changes to global variables caused by the invoked +code are reflected in the context object. ```js const vm = require('vm'); const x = 1; -const sandbox = { x: 2 }; -vm.createContext(sandbox); // Contextify the sandbox. +const context = { x: 2 }; +vm.createContext(context); // Contextify the object. const code = 'x += 40; var y = 17;'; -// `x` and `y` are global variables in the sandboxed environment. -// Initially, x has the value 2 because that is the value of sandbox.x. -vm.runInContext(code, sandbox); +// `x` and `y` are global variables in the context. +// Initially, x has the value 2 because that is the value of context.x. +vm.runInContext(code, context); -console.log(sandbox.x); // 42 -console.log(sandbox.y); // 17 +console.log(context.x); // 42 +console.log(context.y); // 17 console.log(x); // 1; y is not defined. ``` @@ -49,7 +46,7 @@ added: v0.3.1 --> Instances of the `vm.Script` class contain precompiled scripts that can be -executed in specific sandboxes (or "contexts"). +executed in specific contexts. ### Constructor: new vm.Script(code\[, options\]) -* `contextifiedSandbox` {Object} A [contextified][] object as returned by the +* `contextifiedObject` {Object} A [contextified][] object as returned by the `vm.createContext()` method. * `options` {Object} * `displayErrors` {boolean} When `true`, if an [`Error`][] occurs @@ -155,30 +152,30 @@ changes: * Returns: {any} the result of the very last statement executed in the script. Runs the compiled code contained by the `vm.Script` object within the given -`contextifiedSandbox` and returns the result. Running code does not have access +`contextifiedObject` and returns the result. Running code does not have access to local scope. The following example compiles code that increments a global variable, sets the value of another global variable, then execute the code multiple times. -The globals are contained in the `sandbox` object. +The globals are contained in the `context` object. ```js const util = require('util'); const vm = require('vm'); -const sandbox = { +const context = { animal: 'cat', count: 2 }; const script = new vm.Script('count += 1; name = "kitty";'); -const context = vm.createContext(sandbox); +vm.createContext(context); for (let i = 0; i < 10; ++i) { script.runInContext(context); } -console.log(util.inspect(sandbox)); +console.log(util.inspect(context)); // { animal: 'cat', count: 12, name: 'kitty' } ``` @@ -187,7 +184,7 @@ Using the `timeout` or `breakOnSigint` options will result in new event loops and corresponding threads being started, which have a non-zero performance overhead. -### script.runInNewContext(\[sandbox\[, options\]\]) +### script.runInNewContext(\[contextObject\[, options\]\]) -* `sandbox` {Object} An object that will be [contextified][]. If `undefined`, a - new object will be created. +* `contextObject` {Object} An object that will be [contextified][]. If + `undefined`, a new object will be created. * `options` {Object} * `displayErrors` {boolean} When `true`, if an [`Error`][] occurs while compiling the `code`, the line of code causing the error is attached @@ -230,13 +227,13 @@ changes: module will throw a `WebAssembly.CompileError`. **Default:** `true`. * Returns: {any} the result of the very last statement executed in the script. -First contextifies the given `sandbox`, runs the compiled code contained by -the `vm.Script` object within the created sandbox, and returns the result. +First contextifies the given `contextObject`, runs the compiled code contained +by the `vm.Script` object within the created context, and returns the result. Running code does not have access to local scope. The following example compiles code that sets a global variable, then executes the code multiple times in different contexts. The globals are set on and -contained within each individual `sandbox`. +contained within each individual `context`. ```js const util = require('util'); @@ -244,12 +241,12 @@ const vm = require('vm'); const script = new vm.Script('globalVar = "set"'); -const sandboxes = [{}, {}, {}]; -sandboxes.forEach((sandbox) => { - script.runInNewContext(sandbox); +const contexts = [{}, {}, {}]; +contexts.forEach((context) => { + script.runInNewContext(context); }); -console.log(util.inspect(sandboxes)); +console.log(util.inspect(contexts)); // [{ globalVar: 'set' }, { globalVar: 'set' }, { globalVar: 'set' }] ``` @@ -332,7 +329,7 @@ support is planned. ```js const vm = require('vm'); -const contextifiedSandbox = vm.createContext({ secret: 42 }); +const contextifiedObject = vm.createContext({ secret: 42 }); (async () => { // Step 1 @@ -340,7 +337,7 @@ const contextifiedSandbox = vm.createContext({ secret: 42 }); // Create a Module by constructing a new `vm.SourceTextModule` object. This // parses the provided source text, throwing a `SyntaxError` if anything goes // wrong. By default, a Module is created in the top context. But here, we - // specify `contextifiedSandbox` as the context this Module belongs to. + // specify `contextifiedObject` as the context this Module belongs to. // // Here, we attempt to obtain the default export from the module "foo", and // put it into local binding "secret". @@ -348,7 +345,7 @@ const contextifiedSandbox = vm.createContext({ secret: 42 }); const bar = new vm.SourceTextModule(` import s from 'foo'; s; - `, { context: contextifiedSandbox }); + `, { context: contextifiedObject }); // Step 2 // @@ -377,11 +374,11 @@ const contextifiedSandbox = vm.createContext({ secret: 42 }); if (specifier === 'foo') { return new vm.SourceTextModule(` // The "secret" variable refers to the global variable we added to - // "contextifiedSandbox" when creating the context. + // "contextifiedObject" when creating the context. export default secret; `, { context: referencingModule.context }); - // Using `contextifiedSandbox` instead of `referencingModule.context` + // Using `contextifiedObject` instead of `referencingModule.context` // here would work as well. } throw new Error(`Unable to resolve dependency: ${specifier}`); @@ -597,7 +594,7 @@ allow the module to access information outside the specified `context`. Use ```js const vm = require('vm'); -const contextifiedSandbox = vm.createContext({ secret: 42 }); +const contextifiedObject = vm.createContext({ secret: 42 }); (async () => { const module = new vm.SourceTextModule( @@ -607,7 +604,7 @@ const contextifiedSandbox = vm.createContext({ secret: 42 }); // Note: this object is created in the top context. As such, // Object.getPrototypeOf(import.meta.prop) points to the // Object.prototype in the top context rather than that in - // the sandbox. + // the contextified object. meta.prop = {}; } }); @@ -620,7 +617,7 @@ const contextifiedSandbox = vm.createContext({ secret: 42 }); // To fix this problem, replace // meta.prop = {}; // above with - // meta.prop = vm.runInContext('{}', contextifiedSandbox); + // meta.prop = vm.runInContext('{}', contextifiedObject); })(); ``` @@ -720,30 +717,30 @@ added: v10.10.0 source. * `produceCachedData` {boolean} Specifies whether to produce new cache data. **Default:** `false`. - * `parsingContext` {Object} The [contextified][] sandbox in which the said + * `parsingContext` {Object} The [contextified][] object in which the said function should be compiled in. * `contextExtensions` {Object[]} An array containing a collection of context extensions (objects wrapping the current scope) to be applied while compiling. **Default:** `[]`. * Returns: {Function} -Compiles the given code into the provided context/sandbox (if no context is +Compiles the given code into the provided context (if no context is supplied, the current context is used), and returns it wrapped inside a function with the given `params`. -## vm.createContext(\[sandbox\[, options\]\]) +## vm.createContext(\[contextObject\[, options\]\]) -* `sandbox` {Object} +* `contextObject` {Object} * `options` {Object} * `name` {string} Human-readable name of the newly created context. **Default:** `'VM Context i'`, where `i` is an ascending numerical index of @@ -760,12 +757,12 @@ changes: `EvalError`. **Default:** `true`. * `wasm` {boolean} If set to false any attempt to compile a WebAssembly module will throw a `WebAssembly.CompileError`. **Default:** `true`. -* Returns: {Object} contextified sandbox. +* Returns: {Object} contextified object. -If given a `sandbox` object, the `vm.createContext()` method will [prepare -that sandbox][contextified] so that it can be used in calls to +If given a `contextObject`, the `vm.createContext()` method will [prepare +that object][contextified] so that it can be used in calls to [`vm.runInContext()`][] or [`script.runInContext()`][]. Inside such scripts, -the `sandbox` object will be the global object, retaining all of its existing +the `contextObject` will be the global object, retaining all of its existing properties but also having the built-in objects and functions any standard [global object][] has. Outside of scripts run by the vm module, global variables will remain unchanged. @@ -776,40 +773,40 @@ const vm = require('vm'); global.globalVar = 3; -const sandbox = { globalVar: 1 }; -vm.createContext(sandbox); +const context = { globalVar: 1 }; +vm.createContext(context); -vm.runInContext('globalVar *= 2;', sandbox); +vm.runInContext('globalVar *= 2;', context); -console.log(util.inspect(sandbox)); // { globalVar: 2 } +console.log(util.inspect(context)); // { globalVar: 2 } console.log(util.inspect(globalVar)); // 3 ``` -If `sandbox` is omitted (or passed explicitly as `undefined`), a new, empty -[contextified][] sandbox object will be returned. +If `contextObject` is omitted (or passed explicitly as `undefined`), a new, +empty [contextified][] object will be returned. The `vm.createContext()` method is primarily useful for creating a single -sandbox that can be used to run multiple scripts. For instance, if emulating a -web browser, the method can be used to create a single sandbox representing a -window's global object, then run all `