build: add --enable-all-experimentals build flag - #1
Open
sujal-naidu-98 wants to merge 1473 commits into
Open
Conversation
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
`QuicStream` exposes `stopSending()` and `resetStream()`, but neither appeared in the QuicStream API reference. Both matter when half-closing a stream, which protocols such as WebTransport rely on. Document the two methods and list them in the "Aborting a stream" summary, which previously covered only `writer.fail()` and `stream.destroy()`. Unlike those, both send the given code as-is rather than deriving a wire code from an error. Fixes: #63680 Signed-off-by: Ji Hoon Kang <ivory.ma9ic@gmail.com> PR-URL: #64888 Reviewed-By: James M Snell <jasnell@gmail.com>
Follow-up to #59891, covering files it missed. Overlapping locations (node_ffi.cc, crypto_util.cc) were already handled by #64760. Refs: #59891 Refs: #64760 Refs: #64912 Signed-off-by: leah-1ee <selee3196@gmail.com> PR-URL: #65039 Refs: #59891 Refs: #64760 Refs: #64912 Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Signed-off-by: Efe Karasakal <hi@efe.dev> PR-URL: #64992 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Signed-off-by: Guilherme Araújo <arauujogui@gmail.com> PR-URL: #65088 Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: René <contact.9a5d6388@renegade334.me.uk> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Signed-off-by: Filip Skokan <panva.ip@gmail.com> PR-URL: #65091 Refs: w3c/webcrypto#555 Refs: WICG/webcrypto-modern-algos#65 Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: James M Snell <jasnell@gmail.com>
Signed-off-by: Tim Perry <pimterry@gmail.com> PR-URL: #64715 Reviewed-By: James M Snell <jasnell@gmail.com>
When OutgoingMessage transitions from pre-socket buffering (Path B) to socket-connected writing (Path A), the backpressure domain changes — subsequent writes go directly to the socket, which enforces its own backpressure via socket.write() return values. The OM should emit drain at this transition point to signal that its buffer is clear and the caller can resume writing under the socket backpressure regime. Previously, _flush() gated drain emission on writableLength === 0 which included socket.writableLength. This conflated two independent backpressure domains: the OM pre-socket buffer and the socket kernel write queue. When the socket had a higher writableHighWaterMark than the OM (e.g. agent-reused socket from a prior request), the socket was never backpressured and never emitted drain, causing a permanent deadlock. Additionally, avoid reusing a pooled socket in http.Agent when its writableHighWaterMark differs from the request highWaterMark, so that the user backpressure threshold is respected for the common case of the built-in Agent. Signed-off-by: Naman Trivedi <trivenay@amazon.com> Fixes: #64680 Refs: #64653 Refs: #62936 PR-URL: #64991 Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Add benchmarks for node:test hooks and test options. The hooks benchmark covers before, after, beforeEach, and afterEach, with a none mode as the baseline. The test options benchmark covers skip and todo behavior. This adds coverage for part of the benchmark/test_runner gaps tracked in the issue. Refs: #55723 Signed-off-by: Luan Muniz <luan@luanmuniz.com.br> PR-URL: #63754 Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
sqlite3_column_text() can return nullptr on failure which was not handled. sqlite3_column_blob() can return nullptr for zero-length BLOBs, which is then passed to memcpy() which is UB. Avoid this by checking for a nullptr. Signed-off-by: ndossche <nora.dossche@ugent.be> PR-URL: #63288 Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Signed-off-by: greenhead <shren0812@gmail.com> PR-URL: #64897 Reviewed-By: Aviv Keller <me@aviv.sh>
Signed-off-by: kyungrae <kyungrae2002@gmail.com> PR-URL: #64834 Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Signed-off-by: bmuenzenmeyer <brian.muenzenmeyer@gmail.com> PR-URL: #64831 Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
The removes the possiblity for a PR to drop from the queue if the CQ job is cancelled (or times out) in the middle of handling a PR. This increases the window for two concurrent CQ jobs to pick up the same PR, but that's an unlikely scenario. Signed-off-by: Antoine du Hamel <duhamelantoine1995@gmail.com> PR-URL: #65101 Refs: #64972 Reviewed-By: René <contact.9a5d6388@renegade334.me.uk> Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Signed-off-by: greenhead <shren0812@gmail.com> PR-URL: #64901 Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Replace manual ArrayIsArray checks that throw ERR_INVALID_ARG_TYPE with the shared validateArray helper. The error code, argument name and expected type are unchanged, so the thrown error stays identical. Signed-off-by: greenhead <shren0812@gmail.com> PR-URL: #64959 Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Filip Skokan <panva.ip@gmail.com> Reviewed-By: Mattias Buelens <mattias@buelens.com>
Check the decoded pathname length before reading the drive letter and colon. This prevents an out-of-bounds read for short URLs such as file:/// and reports ERR_INVALID_FILE_URL_PATH instead. Signed-off-by: Archkon <180910180+Archkon@users.noreply.github.com> PR-URL: #64788 Reviewed-By: Stefan Stojanovic <stefan.stojanovic@janeasystems.com> Reviewed-By: Aviv Keller <me@aviv.sh>
Propagate tokenization errors from ParseNodeOptionsEnvVar through FixupArgsForSEA and abort startup with an invalid command-line status instead of applying partially parsed options. Signed-off-by: Archkon <180910180+Archkon@users.noreply.github.com> PR-URL: #64803 Reviewed-By: James M Snell <jasnell@gmail.com>
Member descriptors are plain object literals that spell out only the members they need, so createDictionaryConverter() reading the optional validator, defaultValue and required members off them resolves through %Object.prototype%. Copy each descriptor once at construction time with every key present. They keep an ordinary prototype because a null-prototype object literal lands in V8 dictionary mode, and dictionaries with no defaults and no required members now skip steps 4.1.5 and 4.1.6. Signed-off-by: Filip Skokan <panva.ip@gmail.com> PR-URL: #65115 Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Aviv Keller <me@aviv.sh>
BufferSource conversion hands over the caller's own object uncopied, so byteLength, byteOffset, buffer and length reads on it run user-replaceable prototype accessors. Internal lookup tables are indexed with computed keys, so a polluted %Object.prototype% key answers a miss. The %Set% constructor iterates its argument through the user-mutable %Array.prototype% iterator. The algorithm registry and the hash name tables are detached from %Object.prototype% after construction rather than declared `__proto__: null`, which V8 places in dictionary mode. Signed-off-by: Filip Skokan <panva.ip@gmail.com> PR-URL: #65115 Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Aviv Keller <me@aviv.sh>
Use a case-insensitive suffix comparison for ComSpec so uppercase and mixed-case CMD.EXE paths use the correct /c invocation. Signed-off-by: Archkon <180910180+Archkon@users.noreply.github.com> PR-URL: #64907 Reviewed-By: Aviv Keller <me@aviv.sh>
Ensure the on-demand parser reaches the end of the document after reading the root object. Reject concatenated JSON values with TRAILING_CONTENT Signed-off-by: Archkon <180910180+Archkon@users.noreply.github.com> PR-URL: #64774 Reviewed-By: Aviv Keller <me@aviv.sh>
Construct the asset lookup string_view with the explicit Utf8Value length so embedded NUL bytes do not truncate keys. Signed-off-by: Archkon <180910180+Archkon@users.noreply.github.com> PR-URL: #64773 Reviewed-By: Aviv Keller <me@aviv.sh>
Reserve exec argv storage before inserting configured and CLI-expanded arguments so vector reallocation cannot invalidate pointers in argv. Signed-off-by: Archkon <180910180+Archkon@users.noreply.github.com> PR-URL: #64755 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Aviv Keller <me@aviv.sh>
Signed-off-by: Antoine du Hamel <duhamelantoine1995@gmail.com> PR-URL: #65169 Reviewed-By: Filip Skokan <panva.ip@gmail.com> Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
A default OpenSSL configuration file that exists but cannot be read is fatal at startup: CONF_MFLAGS_IGNORE_MISSING_FILE only covers ENOENT and ENOTDIR, so a container that mounts /etc/ssl inaccessible to the user Node.js runs as cannot start at all. OpenSSL skips config loading entirely when OPENSSL_CONF is set to an empty value, which gets past this, but that was undocumented. Say so, including that no configuration is applied, FIPS setup included. Refs: #62230 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: Orgad Shaneh <orgad.shaneh@audiocodes.com> PR-URL: #64949 Fixes: #62230 Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Signed-off-by: Mert Can Altin <mertgold60@gmail.com> PR-URL: #62248 Reviewed-By: Daniel Lemire <daniel@lemire.me> Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
This feature has not been actively used in the wild and has always only been best-effort on systems that support it. The build changes it needs breaks WSL1 compatibility and the relocation mechanism won't work with newer V8 that remaps builtins using mremap(MREMAP_DONTUNMAP). This patch effectively removes this feature by turning the flags into no-ops. A warning will be printed if `--use-largepages=on` is used. Signed-off-by: Joyee Cheung <joyeec9h3@gmail.com> PR-URL: #65389 Fixes: #63735 Fixes: #64408 Refs: https://chromium-review.googlesource.com/c/v8/v8/+/7985687 Reviewed-By: Filip Skokan <panva.ip@gmail.com> Reviewed-By: Richard Lau <richard.lau@ibm.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Signed-off-by: John Kleinschmidt <jkleinsc@electronjs.org> PR-URL: #65405 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Richard Lau <richard.lau@ibm.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com> Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Passing a directory to `node --test` (e.g. `node --test tests`) matched the directory itself as a glob pattern and then tried to run it as a test file, failing with MODULE_NOT_FOUND. Before glob patterns were supported, a directory argument was searched for test files within it. Expand a pattern that resolves to a directory into a search for the default test files inside it. Despite the report framing this as Windows-only, it reproduces on every platform: it is a plain regression from when directory arguments stopped being searched. Fixes: #64555 Signed-off-by: Paul Bouchon <mail@bitpshr.net> PR-URL: #64637 Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
When `mock.module()` targets a package whose `exports` field maps `import` and `require` to different files, the ESM resolver and the CJS resolver disagree on the resolved path. Only the ESM path was registered in `mockMap`, so `require()` of the mocked specifier bypassed the mock and loaded the real CJS module. Resolve the specifier through `Module._resolveFilename` from the caller's directory in addition to the existing ESM resolution. When the two paths differ, register the CJS path as a second key in `mockMap` and invalidate `Module._cache[cjsPath]`, restoring it on `restore()`. Single-resolution packages keep their existing behavior. Fixes: #58231 Signed-off-by: Maruthan G <maruthang4@gmail.com> PR-URL: #62943 Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Jacob Smith <jacob@frende.me>
A portable compile cache is meant to be reused wherever the same module layout is found, which includes being generated once (at build time, say) and shipped read-only with an application for whoever runs it. On platforms with uids the cache subdirectory is suffixed with the uid of the user who created it, so such a cache is only ever found by that one user. Omit the suffix in portable mode: a user who cannot write to the directory still reads it, and a failed write is only a cache miss. Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com> PR-URL: #65293 Reviewed-By: James M Snell <jasnell@gmail.com>
c4b755e tracks the statements currently being stepped and rejects reentry into them, but the guard is established inside the execution helpers, after the entry point has already reset the statement and bound its parameters. Binding reads properties off the supplied object, so a named-parameter getter runs JavaScript in that window. Reentering the same statement there resets it a second time and, for iterate(), hands out a second iterator; both iterators record the same reset generation, so neither is invalidated and they interleave rows from one virtual machine. Establish the guard at the four StatementSync entry points instead, before the reset, so it spans binding as well as stepping. The existing guards inside the helpers are left in place; the stepping set is a stack, so the nested acquisition is balanced. Signed-off-by: Trevor Burnham <trevorburnham@gmail.com> Assisted-by: claude:opus-5 PR-URL: #65294 Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
When using run() programatically with isolation="none", testNamePatterns, testSkipPattersn, and only were ignored. This combination of options only worked when set via CLI flags, because parseCommandLine() is still used to seed globalOptions. Fixes: #57399 Signed-off-by: Sylvester Keil <sylvester@keil.or.at> PR-URL: #62269 Reviewed-By: Ethan Arrowood <ethan@arrowood.dev> Reviewed-By: Chemi Atlow <chemi@atlow.co.il> Reviewed-By: Pietro Marchini <pietro.marchini94@gmail.com>
The fix and approach are from #64491 by Shivay-98; this reopens it to get it landed, since the original stalled awaiting requested changes. `Socket.prototype._unrefTimer` and `Socket.prototype._destroy` both walk the `_parent` chain with a strict `!== null` check. During connection teardown a socket's `_parent` can be left `undefined` (for example a TLS socket layered over another stream), so the loop steps onto `undefined` and reads a property off it, throwing a TypeError: Cannot read properties of undefined (reading 'Symbol(timeout)') from an uncaught I/O callback and crashing the process. Using a nullish (`!= null`) check terminates the walk on both `null` and `undefined`. [petter@hightouch.io: apply the same fix to the identical loop in `_destroy`, which the original regression test already exercised via `destroy()`; add direct unit coverage for both paths.] Fixes: #64490 Refs: #64491 Signed-off-by: Petter Häggholm <petter@hightouch.io> PR-URL: #64644 Fixes: #64490 Refs: #64491 Reviewed-By: Tim Perry <pimterry@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Ethan Arrowood <ethan@arrowood.dev> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
The test verified ipv6Only by connecting to the IPv4 side of an ephemeral port and expecting ECONNREFUSED, but it never reserved that IPv4 port. Under parallel execution another test could occupy it, making the connection succeed instead of being refused. Run the test sequentially with a fixed common.PORT so it no longer competes with other tests for the same port, matching the fix already applied to the sibling cluster variants. Fixes: #64172 Signed-off-by: sangwook <rewq5991@gmail.com> PR-URL: #64173 Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Replace the unavailable GYP website with the GYP documentation preserved in the Chromium source repository. Signed-off-by: HoonDongKang <d159123@naver.com> PR-URL: #65413 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Document long type names as canonical and use them in examples. Group alternative spellings separately in the documentation and internal type maps while retaining support for every existing alias. Signed-off-by: Kamat, Trivikram <16024985+trivikr@users.noreply.github.com> Assisted-by: codex:gpt-5.6-sol PR-URL: #65417 Reviewed-By: Paolo Insogna <paolo@cowtech.it> Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: René <contact.9a5d6388@renegade334.me.uk>
BoringSSL implements OPENSSL_zalloc and BN_secure_new and provides compatible secure heap status stubs. Use the common code paths. Remove ClientHello helpers left unused by the early callback migration and require the fixed ML-KEM private-key import error. Signed-off-by: Filip Skokan <panva.ip@gmail.com> PR-URL: #65423 Reviewed-By: Tim Perry <pimterry@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Use BoringSSL's current RSA and DH validation results instead of maintaining backend-specific prechecks and collapsing key errors. Report negotiated TLS groups and the documented zero security level through BoringSSL's compatibility APIs. Signed-off-by: Filip Skokan <panva.ip@gmail.com> PR-URL: #65423 Reviewed-By: Tim Perry <pimterry@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Commit Queue failure comments hid the actionable reason inside the collapsed landing transcript. Surface the reason and retry instructions before the full output. Add specific guidance for a missing multi-commit policy and explicit reasons for push and squash-merge failures. Signed-off-by: Filip Skokan <panva.ip@gmail.com> PR-URL: #65433 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Contexts that are not deserialized from the built-in snapshot -- worker threads, and the main context of embedders that create their own isolate or of `node --no-node-snapshot` -- compile (with the code cache at best) every builtin the bootstrap touches, so each eagerly required builtin is startup time (~0.15-0.4 ms apiece). A number of them are only required eagerly so that they end up in the snapshot, or for features the bootstrap path never uses. Load lazily what those paths do not need: - is_main_thread.js: preload util, url, the ESM loader (translators, resolver, module_job/map, source maps, node:module, vm modules, mime, data_url, the TypeScript stripper), internal/blob and internal/dns/utils only while building a snapshot; they load on first use otherwise. - fs: internal/blob (+ internal/encoding and its tables) is only used by fs.openAsBlob(). - internal/url: internal/data_url (+ internal/mime) is only used by the Buffer-returning file URL helpers. - internal/process/execution, the CommonJS loader, esm/translators and esm/load: the TypeScript stripper and data: URL helpers are only needed for TypeScript sources / data: URLs. - pre_execution: internal/dns/utils (+ internal/net) is only needed up front to validate an explicit --dns-result-order or to register the resolver's snapshot serializer; the default order becomes the variable's initializer. - internal/worker: event_loop_utilization and error_serdes are only needed once a sub-worker's ELU is read or it reports an error. - worker_threads: `locks` is defined lazily, like util's lazy exports. Main-thread startup with the snapshot is unchanged (the same modules are preloaded into it; the bootstrap-modules test lists are adjusted). A bare worker compiles 95 -> 83 builtins (cold start -5%); without the snapshot an empty CommonJS entry point compiles 76 -> 59 builtins and an empty ES module entry point 76 -> 69. Signed-off-by: Shelley Vohr <shelley.vohr@gmail.com> PR-URL: #65329 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Aviv Keller <me@aviv.sh>
Set compiler flags to match the minimum supported Power and z architectures. Signed-off-by: Richard Lau <richard.lau@ibm.com> PR-URL: #65439 Refs: #61005 Refs: https://chromium-review.googlesource.com/c/v8/v8/+/7239348 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
The only benchmark covers creating selected and non-selected tests when running with --test-only. The mock timers benchmark covers enabling timer mocks, setTimeout, setInterval, setImmediate, scheduler.wait, AbortSignal.timeout, mocked Date.now(), setTime(), and runAll(). Refs: #55723 Signed-off-by: Luan Muniz <luan@luanmuniz.com.br> PR-URL: #64097 Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Signed-off-by: GetThatCookie <NimmenKeks@gmx.de> PR-URL: #64988 Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Tim Perry <pimterry@gmail.com> Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Signed-off-by: Nashit-h <nashit@bugqore.com> PR-URL: #64512 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: René <contact.9a5d6388@renegade334.me.uk>
Every promise-based fs operation eagerly allocated two AliasedBuffers (a stats array and a statfs array) at request creation, although only stat-family resolutions ever read the first and only statfs() reads the second. Each allocation is an ArrayBuffer, a TypedArray and a strong v8::Global. The callback path has no equivalent cost since it resolves through a shared global array. Construct the arrays lazily in ResolveStat()/ResolveStatFs() instead. Once created the lifetime is unchanged, so deferred continuations still read from request-owned memory. Improves fs/promises throughput under concurrency: writeFile +53%, stat +26%, readFile +22% at 64 in-flight operations on tmpfs, with callback paths unchanged. Signed-off-by: Sam Attard <sattard@anthropic.com> PR-URL: #63886 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
When `fs.cp`/`fs.cpSync` is called with both `verbatimSymlinks: true` and a `filter` function, directory symlinks were incorrectly created as file symlinks on Windows. Without a `filter`, cp takes the C++ fast path (`cpSyncCopyDir`) which uses `std::filesystem::copy_symlink()` and preserves the symlink type automatically. With a `filter`, the JS fallback calls `symlinkSync`/ `symlink` without a `type` argument. On Windows, that causes the type to be auto-detected by stat-ing the resolved target at the destination, but during a recursive copy the target directory may not exist yet at the destination (e.g. `linked/` is copied before `packages/` in alphabetical order). The stat fails and `type` falls back to `'file'`, producing a file symlink in place of a directory symlink. Detect the symlink type from the source (which always exists) via `internalModuleStat(src)` and pass it explicitly to the `symlinkSync`/ `symlink` call sites. `onLink` already computed `srcIsDir` for subdirectory validation; hoist that computation above the early-return paths and thread the derived `symlinkType` through `copyLink` as well. Both the sync (`cp-sync.js`) and async (`cp.js`) implementations are fixed. Add two regression tests that copy a tree containing a relative directory symlink with `verbatimSymlinks: true` and a `filter` function, then assert the destination link still resolves as a directory. Fixes: #62653 Signed-off-by: shulaoda <165626830+shulaoda@users.noreply.github.com> PR-URL: #62654 Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com> Reviewed-By: Stefan Stojanovic <stefan.stojanovic@janeasystems.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Parse query strings with indexOf instead of a per-character state machine, skip ToString when values are already strings, cache toString() until the list mutates, and join serialized pairs. Signed-off-by: Yagiz Nizipli <yagiz@nizipli.com> Assisted-by: Cursor PR-URL: #65363 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day> Reviewed-By: Aviv Keller <me@aviv.sh>
When using the dot reporter with coverage enabled, coverage threshold failures and coverage reports were not printed, only an exit code was returned. This made it impossible to know why the test run failed. This change adds handling for test:diagnostic and test:coverage events to the dot reporter, matching the behavior of the spec reporter. Fixes: #60884 Signed-off-by: mag123c <diehreo@gmail.com> PR-URL: #61423 Reviewed-By: Chemi Atlow <chemi@atlow.co.il> Reviewed-By: Xuguang Mei <meixuguang@gmail.com> Reviewed-By: Aviv Keller <me@aviv.sh>
The MIME regex used for data: URLs could backtrack super-linearly on a malformed URL lacking a ',' separator. Make the optional parameter group anchored on ';' so it cannot overlap with the media-type group. Adds a benchmark (esm/get-data-protocol-format) parameterized over path length, so a backtracking regression shows up as an ops/sec cliff instead of a wall-clock assertion in a test, per review. Fixes: #61904 Signed-off-by: skdas20 <skdas5405@gmail.com> PR-URL: #61951 Reviewed-By: Aviv Keller <me@aviv.sh> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Add WHATWG Headers unit tests and a fetch/headers benchmark so Node can track the API after the implementation change lands in undici. Refs: nodejs/undici#5699 Signed-off-by: Yagiz Nizipli <yagiz@nizipli.com> PR-URL: #65365 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR-URL: nodejs#62755
Reviewed-By: Anna Henningsen anna@addaleax.net
Reviewed-By: Matteo Collina matteo.collina@gmail.com