Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test_runner: support passing globs #47653

Closed
wants to merge 2 commits into from
Closed

Conversation

MoLow
Copy link
Member

@MoLow MoLow commented Apr 21, 2023

a followup for #47499
this includes a lean implementation of https://github.com/isaacs/node-glob on top of minimatch (added at #47499)

this is marked as semver-major PRs that contain breaking changes and should be released in the next major version. since a couple of edge cases will produce a different list of tests such as file names containing *

@nodejs-github-bot
Copy link
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-bot nodejs-github-bot added lib / src Issues and PRs related to general changes in the lib or src directory. needs-ci PRs that need a full CI run. labels Apr 21, 2023
@MoLow MoLow marked this pull request as draft April 21, 2023 00:07
@MoLow
Copy link
Member Author

MoLow commented Apr 21, 2023

CC @isaacs @nodejs/test_runner

lib/internal/fs/glob.js Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Show resolved Hide resolved
test/parallel/test-runner-cli.js Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
Copy link
Member

@benjamingr benjamingr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like a good start - needs tests and docs. Also probably glob support in test name patterns should be experimental for a while until we gather feedback

@benjamingr
Copy link
Member

@isaacs might have good feedback on this too

lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
@isaacs
Copy link
Contributor

isaacs commented Apr 21, 2023

Took a quick pass over it. I agree this is a good start. Tried to highlight a few issues that will likely be gotchas for Windows users.

This boils down to essentially the same algorithm that node-glob used until the recent rewrite; walk down the pattern adding each possible match to the task queue until it runs out. It's punishingly slow for advanced use cases and large folder trees. I definitely recommend a more advanced approach to caching and folder walking like what node-glob uses before making this available on the user-facing fs.glob. But good enough for this use case, and fewer moving parts.

@GeoffreyBooth
Copy link
Member

This boils down to essentially the same algorithm that node-glob used until the recent rewrite

So . . . why wouldn’t we just import the latest version of node-glob?

@MoLow
Copy link
Member Author

MoLow commented Apr 22, 2023

So . . . why wouldn’t we just import the latest version of node-glob?

node-glob has many dependencies I am not sure we need/want in core, and it supports many options not really needed.
in addition, it also has issues raised on the PR vendoring minimatch - it does not use primordials and it does not use node errors.

I definitely recommend a more advanced approach to caching and folder walking

@isaacs I went over the code and I am not really sure what better caching and folder walking can be done, can you elaborate?

@isaacs
Copy link
Contributor

isaacs commented Apr 23, 2023

node-glob has many dependencies I am not sure we need/want in core, and it supports many options not really needed.
in addition, it also has issues raised on the PR vendoring minimatch - it does not use primordials and it does not use node errors.

If the (ultimate, not present) goal is to expose an fs.glob() functionality that's suitable for general purpose usage, then yes, pulling in node-glob is the way to go. (Fast-glob is another good option, but I think the hazards of diverging from posix shell semantics are probably not worth the increase in performance.)

node-glob is, at its core, path-scurry + minimatch. It uses minipass for streams and iteration, because it's the most performant way to do that, but streams could be swapped out (albeit at the loss of performance and synchronous streaming) with core streams, and iteration could be swapped out (with a significant performance penalty) with plain old JS generators. The dependencies on jackspeak and foreground-child are just for the glob CLI, but that probably shouldn't be included in node core.

The only thing that path-scurry depends on is lru-cache, which is just a very fast cache that prevents it from OOMing if you try to walk a directory with a million files and directories in it. (The child nodes created to reflect fs.readdir results are stored in the cache rather than attached directly to the parent object, which also helps prevent gc pauses from getting abusively long just by virtue of walking a very large object graph.)

@isaacs I went over the code and I am not really sure what better caching and folder walking can be done, can you elaborate?

Sure. In this approach, there's a queue of tasks which are effectively a tuple of {pattern, path}. (pattern is really "minimatch set + index", but same idea.) And then, serially, it walks over the task queue, adding new tasks for all the child entries if there's more pattern to be found there.

This blows up combinatorially in many common patterns. For example, consider: a/**/b/**/*/x.js, so we start with just that in the task queue.

tracing through the algo

Starting at the a folder, evaluating that pattern, we have a **, so we need to evaluate both the patterns **/b/**/*/x.js and b/**/*/x.js (since ** can match against nothing). Say that a has 3 children, a, b, and c. For each of those, we create 2 tasks, one for **/b/**/*/x.js and b/**/*/x.js. So now there's 6 more tasks in the queue, total of 7. Say that each of those have 2 children, so there's a/a/x, a/a/y, a/b/x, a/b/y, a/c/x, and a/c/y. For each of those, we need to test both **/b/**/*/x.js and b/**/*/x.js, so 12 more items in the queue, or 19 unprocessed items just to walk down the first part of a 1-3-2 tree. And we haven't even gotten to the second **. So, even though you're caching stats and readdirs, and not testing the same pattern against the same folder multiple times, it's still blowing up to a lot of unnecessary iterations. And, if a/b/c/x.js matches, you still have to process all the other patterns that could potentially match it.

That this is happening synchronously rather than in parallel, and making extra lstat calls rather than using the Dirents from readdir, makes it worse. Of course, that's maybe fine for this specific use case for the test runner, and easy enough to correct later.

The approach that both fast-glob and node-glob use is, instead of processing a queue of tasks each related to a single pattern and folder, is keep a set of patterns that might be applicable to a given path, and then just do a very efficient folder walk. Node-glob has full support for .. appearing in the pattern, so there are cases where it needs to back up the walk to the parent dir (which does some extra work, potentially processing a path a second time, so it loses some perf in exchange for that bit of correctness).

The caching approach implemented by path-scurry is also significantly more comprehensive and defensive. Within a given path-scurry object, it is nearly impossible to accidentally call lstat or readdir more than once on a given path. (Unless you have over 16*1024 items, in which case fs.readdir may have to be called again, because the cached items will be dropped to prevent OOM.) Path-scurry also caches resolve() calls, which in hot path globbing, will end up soaking up a lot of CPU cycles, since it's common to end up resolving a lot of the same paths over and over again, even if you're clever enough to avoid matching the same pattern against that resolved path.

There's nothing wrong necessarily with just caching each thing in its own standalone object or whatever, but path-scurry evolved from the frustration of juggling all these things and just wanting a simple read-only view of the filesystem which could guarantee that it would only perform the bare minimum of system operations required, and cache everything for the duration of the operation. Once you do take the step of parallelizing the walk, it becomes increasingly challenging to keep it all straight otherwise.

More precise in unrolled pseudocode:

1
path = a
pattern = **/b/**/*/x.js
queue = []
# add non-globstar form to queue
queue = [ {a, b/**/*/x.js} ]
children=[a b c]
queue = [
  {a, b/**/*/x.js}
  {a/a, **/b/**/*/x.js}
  {a/b, **/b/**/*/x.js}
  {a/c, **/b/**/*/x.js}
]
2
# shift queue
path = a
pattern = b/**/*/x.js
queue = [
  {a/a, **/b/**/*/x.js}
  {a/b, **/b/**/*/x.js}
  {a/c, **/b/**/*/x.js}
]
# string type, join and push
queue = [
  {a/a, **/b/**/*/x.js}
  {a/b, **/b/**/*/x.js}
  {a/c, **/b/**/*/x.js}
  {a/b, **/*/x.js}
]
3
# shift queue
path = a/a
pattern = **/b/**/*/x.js
# add non-globstar form to queue
queue = [
  {a/b, **/b/**/*/x.js}
  {a/c, **/b/**/*/x.js}
  {a/b, **/*/x.js}
  {a/a, b/**/*/x.js}
]
children = [x y]
queue = [
  {a/b, **/b/**/*/x.js}
  {a/c, **/b/**/*/x.js}
  {a/b, **/*/x.js}
  {a/a, b/**/*/x.js}
  {a/a/y, **/b/**/*/x.js}
  {a/a/x, **/b/**/*/x.js}
]
4
# shift queue
path = a/b
pattern = **/b/**/*/x.js
queue = [
  {a/c, **/b/**/*/x.js}
  {a/b, **/*/x.js}
  {a/a, b/**/*/x.js}
  {a/a/y, **/b/**/*/x.js}
  {a/a/x, **/b/**/*/x.js}
]
# add non-globstar form to queue
queue = [
  {a/c, **/b/**/*/x.js}
  {a/b, **/*/x.js}
  {a/a, b/**/*/x.js}
  {a/a/y, **/b/**/*/x.js}
  {a/a/x, **/b/**/*/x.js}
  {a/b, b/**/*/x.js}
]
children = [x y]
queue = [
  {a/c, **/b/**/*/x.js}
  {a/b, **/*/x.js}
  {a/a, b/**/*/x.js}
  {a/a/y, **/b/**/*/x.js}
  {a/a/x, **/b/**/*/x.js}
  {a/b, b/**/*/x.js}
  {a/b/y, **/b/**/*/x.js}
  {a/b/x, **/b/**/*/x.js}
]
5
# shift queue
path = a/c
pattern = **/b/**/*/x.js
queue = [
  {a/b, **/*/x.js}
  {a/a, b/**/*/x.js}
  {a/a/y, **/b/**/*/x.js}
  {a/a/x, **/b/**/*/x.js}
  {a/b, b/**/*/x.js}
  {a/b/y, **/b/**/*/x.js}
  {a/b/x, **/b/**/*/x.js}
]
# add non-globstar form to queue
queue = [
  {a/b, **/*/x.js}
  {a/a, b/**/*/x.js}
  {a/a/y, **/b/**/*/x.js}
  {a/a/x, **/b/**/*/x.js}
  {a/b, b/**/*/x.js}
  {a/b/y, **/b/**/*/x.js}
  {a/b/x, **/b/**/*/x.js}
  {a/c, b/**/*/x.js}
]
children = [x y]
queue = [
  {a/b, **/*/x.js}
  {a/a, b/**/*/x.js}
  {a/a/y, **/b/**/*/x.js}
  {a/a/x, **/b/**/*/x.js}
  {a/b, b/**/*/x.js}
  {a/b/y, **/b/**/*/x.js}
  {a/b/x, **/b/**/*/x.js}
  {a/c, b/**/*/x.js}
  {a/c/x, **/b/**/*/x.js}
  {a/c/y, **/b/**/*/x.js}
]
5 done so far, 10 tasks in the queue

So, for small folder trees, yeah, it's fine, because it can't get all that big without child nodes to have to process. But if you wanted to use it for any kind of large or time-sensitive job, the overhead will really start to hurt, because the number of required tests goes up so much faster than the number of items in the tree.

Conversely, by associating all the patterns relevant at a given point in the walk, you only have to visit each path once (barring unavoidable .. patterns), meaning all that path joining and children lookups only have to happen once, and associate all the possibly matching patterns with each child.

1
path = a
patterns = [**/b/**/*/x.js]
# add non-globstar form
patterns = [**/b/**/*/x.js, b/**/*/x.js]
queue = []
children = [a b c]
# filter down to the possibly matching patterns for each
queue = [
  {a/a, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/b, [**/b/**/*/x.js, **/*/x.js, b/**/*/x.js, */x.js]}
  {a/c, [**/b/**/*/x.js, b/**/*/x.js]}
]
2
path = a/a
patterns = [**/b/**/*/x.js, b/**/*/x.js]
queue = [
  {a/b, [**/b/**/*/x.js, **/*/x.js, b/**/*/x.js, */x.js]}
  {a/c, [**/b/**/*/x.js, b/**/*/x.js]}
]
children = [x y]
queue = [
  {a/b, [**/b/**/*/x.js, **/*/x.js, b/**/*/x.js, */x.js]}
  {a/c, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/a/x, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/a/y, [**/b/**/*/x.js, b/**/*/x.js]}
]
3
path = a/b
patterns = [**/b/**/*/x.js, **/*/x.js, b/**/*/x.js, */x.js]
queue = [
  {a/c, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/a/x, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/a/y, [**/b/**/*/x.js, b/**/*/x.js]}
]
children = [x y]
queue = [
  {a/c, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/a/x, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/a/y, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/b/x, [**/b/**/*/x.js, b/**/*/x.js, **/*/x.js, */x.js, x.js]}
  {a/b/y, [**/b/**/*/x.js, b/**/*/x.js, **/*/x.js, */x.js, x.js]}
]
4
path = a/c
patterns = [**/b/**/*/x.js, b/**/*/x.js]
queue = [
  {a/a/x, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/a/y, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/b/x, [**/b/**/*/x.js, b/**/*/x.js, **/*/x.js, */x.js, x.js]}
  {a/b/y, [**/b/**/*/x.js, b/**/*/x.js, **/*/x.js, */x.js, x.js]}
]
children = [x y]
queue = [
  {a/a/x, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/a/y, [**/b/**/*/x.js, b/**/*/x.js]}
  {a/b/x, [**/b/**/*/x.js, b/**/*/x.js, **/*/x.js, */x.js, x.js]}
  {a/b/y, [**/b/**/*/x.js, b/**/*/x.js, **/*/x.js, */x.js, x.js]}
  {a/c/x, [**/b/**/*/x.js, b/**/*/x.js]}

By filtering the pattern set down (and, in the case of globstar, potentially increasing it as well) at each iteration, you prevent the need to (almost) ever process the same path more than once, and it becomes a lot easier to reason about making it parallel.

The thing that node-glob uses to calculate which patterns are needed for each walk step, and the matches that should be recorded for each, is: https://github.com/isaacs/node-glob/blob/main/src/processor.ts

Note that there's also some special rules for when globstar is allowed to follow a symbolic link.

in addition, it also has issues raised on the PR vendoring minimatch - it does not use primordials and it does not use node errors.

I'm actively eager to use node errors when possible, I know @cjihrig is looking into making that more exposed for userland code.

I've got a polyfill for primordials that seems to work, but I haven't gotten around to porting path-scurry to use it. I figure that's the best first test, since path-scurry is almost zero-dep, and has a good suite of benchmarks to see whether the perf impact is too bad. If path-scurry, lru-cache, and minimatch all can be ported to use primordials without too much of a performance impact, then I think porting glob is going to be pretty easy. But that might be a pretty big "if".

@MoLow
Copy link
Member Author

MoLow commented Apr 24, 2023

@isaacs thanks for the detailed response. I will go over it later.
if there is anything I can do to help to get primordials in glob and minimatch LMK.
regarding errors I think that is a smaller issue but @cjihrig has closed the issue requesting to expose internal errors

@MoLow MoLow added the test_runner Issues and PRs related to the test runner subsystem. label Apr 24, 2023
@MoLow MoLow marked this pull request as ready for review May 15, 2023 14:45
@MoLow MoLow linked an issue May 15, 2023 that may be closed by this pull request
@MoLow MoLow marked this pull request as draft May 15, 2023 14:46
lib/internal/test_runner/utils.js Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
lib/internal/fs/glob.js Show resolved Hide resolved
lib/internal/fs/glob.js Outdated Show resolved Hide resolved
@meyfa
Copy link
Contributor

meyfa commented May 16, 2023

This will enable interop with TypeScript, right? i.e.

node --test --loader=ts-node/esm "test/**/*.ts"

Just asking to be sure the requirement on file extensions being .js/.cjs/.mjs is gone after this PR :)

Thanks for all your hard work on the test runner @MoLow !

@hyf0
Copy link

hyf0 commented Aug 25, 2023

I understand this PR is merged. But it seems tests/*.js in node --test tests/*.js is not treated as glob in node@20.5.1.
image
https://github.com/hyf0/starter-libesm/actions/runs/5972391679/job/16202893907?pr=3

In other words, if I want to use this feature, which version should be used?

@benjamingr
Copy link
Member

@hyf0 two things:

  1. Quote your globs so your shell doesn't expand them
  2. Since this change is semver-major (i.e. breaking) on the next available major version of Node.js

RafaelGSS added a commit that referenced this pull request Sep 26, 2023
Notable Changes:

TODO

Semver-Major Commits:

* (SEMVER-MAJOR) bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) do not overwrite _writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) only defer _final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) rename internal NAPI_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
RafaelGSS added a commit that referenced this pull request Oct 9, 2023
Notable Changes:

TODO

Semver-Major Commits:

* (SEMVER-MAJOR) bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) do not overwrite _writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) validate options of `on` and `once` (Deokjin Kim) #46018
* (SEMVER-MAJOR) adjust `position` validation in reading methods (Livia Medeiros) #42835
* (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) only defer _final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) rename internal NAPI_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839
* (SEMVER-MAJOR) throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) disallow array in `run` options (Raz Luvaton) #49935
* (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) use `validateNumber` for `options.minDHSize` (Deokjin Kim) #49973
* (SEMVER-MAJOR) use validateFunction for `options.checkServerIdentity` (Deokjin Kim) #49896
* (SEMVER-MAJOR) runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609
* (SEMVER-MAJOR) freeze `dependencySpecifiers` array (Antoine du Hamel) #49720

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
RafaelGSS added a commit to RafaelGSS/node that referenced this pull request Oct 9, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) nodejs#45684
esm:
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) nodejs#49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) nodejs#49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) nodejs#50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) nodejs#47653
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) nodejs#49830
stream:
  * optimize Writable (Robert Nagy) nodejs#50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) nodejs#47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) nodejs#49950

Semver-Major Commits:

* (SEMVER-MAJOR) bump supported macOS and Xcode versions (Michaël Zasso) nodejs#49164
* (SEMVER-MAJOR) do not overwrite _writableState.defaultEncoding (Tobias Nießen) nodejs#49140
* (SEMVER-MAJOR) update llhttp to 9.1.2 (Paolo Insogna) nodejs#48981
* (SEMVER-MAJOR) validate options of `on` and `once` (Deokjin Kim) nodejs#46018
* (SEMVER-MAJOR) adjust `position` validation in reading methods (Livia Medeiros) nodejs#42835
* (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) nodejs#47653
* (SEMVER-MAJOR) mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) nodejs#47497
* (SEMVER-MAJOR) remove aix directory case for package reader (Yagiz Nizipli) nodejs#48605
* (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) nodejs#47769
* (SEMVER-MAJOR) runtime deprecate punycode (Yagiz Nizipli) nodejs#47202
* (SEMVER-MAJOR) harmonize error code between ESM and CJS (Antoine du Hamel) nodejs#48606
* (SEMVER-MAJOR) do not treat `server.maxConnections=0` as `Infinity` (ignoramous) nodejs#48276
* (SEMVER-MAJOR) only defer _final call when connecting (Jason Zhang) nodejs#47385
* (SEMVER-MAJOR) rename internal NAPI_VERSION definition (Chengzhong Wu) nodejs#48501
* (SEMVER-MAJOR) throw DOMException on cloning non-serializable objects (Chengzhong Wu) nodejs#47839
* (SEMVER-MAJOR) throw DataCloneError on transfering untransferable objects (Chengzhong Wu) nodejs#47604
* (SEMVER-MAJOR) use private properties for strategies (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) use private properties for encoding (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) use private properties for compression (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) disallow array in `run` options (Raz Luvaton) nodejs#49935
* (SEMVER-MAJOR) support passing globs (Moshe Atlow) nodejs#47653
* (SEMVER-MAJOR) use `validateNumber` for `options.minDHSize` (Deokjin Kim) nodejs#49973
* (SEMVER-MAJOR) use validateFunction for `options.checkServerIdentity` (Deokjin Kim) nodejs#49896
* (SEMVER-MAJOR) runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) nodejs#49609
* (SEMVER-MAJOR) freeze `dependencySpecifiers` array (Antoine du Hamel) nodejs#49720

PR-URL: nodejs#49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
RafaelGSS added a commit to RafaelGSS/node that referenced this pull request Oct 9, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) nodejs#45684
esm:
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) nodejs#49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) nodejs#49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) nodejs#50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) nodejs#47653
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) nodejs#49830
stream:
  * optimize Writable (Robert Nagy) nodejs#50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) nodejs#47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) nodejs#49950

Semver-Major Commits:

* (SEMVER-MAJOR) bump supported macOS and Xcode versions (Michaël Zasso) nodejs#49164
* (SEMVER-MAJOR) do not overwrite _writableState.defaultEncoding (Tobias Nießen) nodejs#49140
* (SEMVER-MAJOR) update llhttp to 9.1.2 (Paolo Insogna) nodejs#48981
* (SEMVER-MAJOR) validate options of `on` and `once` (Deokjin Kim) nodejs#46018
* (SEMVER-MAJOR) adjust `position` validation in reading methods (Livia Medeiros) nodejs#42835
* (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) nodejs#47653
* (SEMVER-MAJOR) mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) nodejs#47497
* (SEMVER-MAJOR) remove aix directory case for package reader (Yagiz Nizipli) nodejs#48605
* (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) nodejs#47769
* (SEMVER-MAJOR) runtime deprecate punycode (Yagiz Nizipli) nodejs#47202
* (SEMVER-MAJOR) harmonize error code between ESM and CJS (Antoine du Hamel) nodejs#48606
* (SEMVER-MAJOR) do not treat `server.maxConnections=0` as `Infinity` (ignoramous) nodejs#48276
* (SEMVER-MAJOR) only defer _final call when connecting (Jason Zhang) nodejs#47385
* (SEMVER-MAJOR) rename internal NAPI_VERSION definition (Chengzhong Wu) nodejs#48501
* (SEMVER-MAJOR) throw DOMException on cloning non-serializable objects (Chengzhong Wu) nodejs#47839
* (SEMVER-MAJOR) throw DataCloneError on transfering untransferable objects (Chengzhong Wu) nodejs#47604
* (SEMVER-MAJOR) use private properties for strategies (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) use private properties for encoding (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) use private properties for compression (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) disallow array in `run` options (Raz Luvaton) nodejs#49935
* (SEMVER-MAJOR) support passing globs (Moshe Atlow) nodejs#47653
* (SEMVER-MAJOR) use `validateNumber` for `options.minDHSize` (Deokjin Kim) nodejs#49973
* (SEMVER-MAJOR) use validateFunction for `options.checkServerIdentity` (Deokjin Kim) nodejs#49896
* (SEMVER-MAJOR) runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) nodejs#49609
* (SEMVER-MAJOR) freeze `dependencySpecifiers` array (Antoine du Hamel) nodejs#49720

PR-URL: nodejs#49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
RafaelGSS added a commit that referenced this pull request Oct 10, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) #45684
esm:
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) #49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) #49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) #50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) #49830
stream:
  * optimize Writable (Robert Nagy) #50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950

Semver-Major Commits:

* (SEMVER-MAJOR) bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) do not overwrite _writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) validate options of `on` and `once` (Deokjin Kim) #46018
* (SEMVER-MAJOR) adjust `position` validation in reading methods (Livia Medeiros) #42835
* (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) only defer _final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) rename internal NAPI_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839
* (SEMVER-MAJOR) throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) disallow array in `run` options (Raz Luvaton) #49935
* (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) use `validateNumber` for `options.minDHSize` (Deokjin Kim) #49973
* (SEMVER-MAJOR) use validateFunction for `options.checkServerIdentity` (Deokjin Kim) #49896
* (SEMVER-MAJOR) runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609
* (SEMVER-MAJOR) freeze `dependencySpecifiers` array (Antoine du Hamel) #49720

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
RafaelGSS added a commit that referenced this pull request Oct 10, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) #45684
esm:
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) #49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) #49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) #50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) #49830
stream:
  * optimize Writable (Robert Nagy) #50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950

Semver-Major Commits:

* (SEMVER-MAJOR) reset embedder string to "-node.0" (Michaël Zasso) #49639
* (SEMVER-MAJOR) drop support for Visual Studio 2019 (Michaël Zasso) #49051
* (SEMVER-MAJOR) bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) do not overwrite _writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) bump minimum ICU version to 73 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 8ec2651fbdd8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 89b3702c92b0 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick de9a5de2274f (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick b5b5d6c31bb0 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 93b1a74cbc9b (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 1a3ecc2483b2 (Michaël Zasso) #49639
* (SEMVER-MAJOR) patch V8 to avoid duplicated zlib symbol (Michaël Zasso) #49639
* (SEMVER-MAJOR) remove usage of a C++20 feature from V8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) avoid compilation error with ASan (Michaël Zasso) #49639
* (SEMVER-MAJOR) disable V8 concurrent sparkplug compilation (Michaël Zasso) #49639
* (SEMVER-MAJOR) silence irrelevant V8 warning (Michaël Zasso) #49639
* (SEMVER-MAJOR) always define V8_EXPORT_PRIVATE as no-op (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 to 11.8.172.13 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) validate options of `on` and `once` (Deokjin Kim) #46018
* (SEMVER-MAJOR) adjust `position` validation in reading methods (Livia Medeiros) #42835
* (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) update usage of always on Atomics API (Michaël Zasso) #49639
* (SEMVER-MAJOR) mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) only defer _final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) rename internal NAPI_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) update NODE_MODULE_VERSION to 120 (Michaël Zasso) #49639
* (SEMVER-MAJOR) throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839
* (SEMVER-MAJOR) throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) skip v8-updates/test-linux-perf (Michaël Zasso) #49639
* (SEMVER-MAJOR) skip test-tick-processor-arguments on SmartOS (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt REPL test to V8 changes (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt test-fs-write to V8 internal changes (Michaël Zasso) #49639
* (SEMVER-MAJOR) update flag to disable SharedArrayBuffer (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt debugger tests to V8 11.4 (Philip Pfaffe) #49639
* (SEMVER-MAJOR) disallow array in `run` options (Raz Luvaton) #49935
* (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) use `validateNumber` for `options.minDHSize` (Deokjin Kim) #49973
* (SEMVER-MAJOR) use validateFunction for `options.checkServerIdentity` (Deokjin Kim) #49896
* (SEMVER-MAJOR) add new V8 headers to distribution (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.7 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.6 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.5 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.4 (Michaël Zasso) #49639
* (SEMVER-MAJOR) runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609
* (SEMVER-MAJOR) freeze `dependencySpecifiers` array (Antoine du Hamel) #49720

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
RafaelGSS added a commit that referenced this pull request Oct 10, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) #45684
esm:
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) #49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) #49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) #50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) #49830
stream:
  * optimize Writable (Robert Nagy) #50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950

Semver-Major Commits:

* (SEMVER-MAJOR) reset embedder string to "-node.0" (Michaël Zasso) #49639
* (SEMVER-MAJOR) drop support for Visual Studio 2019 (Michaël Zasso) #49051
* (SEMVER-MAJOR) bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) do not overwrite _writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) bump minimum ICU version to 73 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 8ec2651fbdd8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 89b3702c92b0 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick de9a5de2274f (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick b5b5d6c31bb0 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 93b1a74cbc9b (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 1a3ecc2483b2 (Michaël Zasso) #49639
* (SEMVER-MAJOR) patch V8 to avoid duplicated zlib symbol (Michaël Zasso) #49639
* (SEMVER-MAJOR) remove usage of a C++20 feature from V8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) avoid compilation error with ASan (Michaël Zasso) #49639
* (SEMVER-MAJOR) disable V8 concurrent sparkplug compilation (Michaël Zasso) #49639
* (SEMVER-MAJOR) silence irrelevant V8 warning (Michaël Zasso) #49639
* (SEMVER-MAJOR) always define V8_EXPORT_PRIVATE as no-op (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 to 11.8.172.13 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) validate options of `on` and `once` (Deokjin Kim) #46018
* (SEMVER-MAJOR) adjust `position` validation in reading methods (Livia Medeiros) #42835
* (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) update usage of always on Atomics API (Michaël Zasso) #49639
* (SEMVER-MAJOR) mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) only defer _final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) rename internal NAPI_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) update NODE_MODULE_VERSION to 120 (Michaël Zasso) #49639
* (SEMVER-MAJOR) throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839
* (SEMVER-MAJOR) throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) skip v8-updates/test-linux-perf (Michaël Zasso) #49639
* (SEMVER-MAJOR) skip test-tick-processor-arguments on SmartOS (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt REPL test to V8 changes (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt test-fs-write to V8 internal changes (Michaël Zasso) #49639
* (SEMVER-MAJOR) update flag to disable SharedArrayBuffer (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt debugger tests to V8 11.4 (Philip Pfaffe) #49639
* (SEMVER-MAJOR) disallow array in `run` options (Raz Luvaton) #49935
* (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) use `validateNumber` for `options.minDHSize` (Deokjin Kim) #49973
* (SEMVER-MAJOR) use validateFunction for `options.checkServerIdentity` (Deokjin Kim) #49896
* (SEMVER-MAJOR) add new V8 headers to distribution (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.7 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.6 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.5 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.4 (Michaël Zasso) #49639
* (SEMVER-MAJOR) runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609
* (SEMVER-MAJOR) freeze `dependencySpecifiers` array (Antoine du Hamel) #49720

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
RafaelGSS added a commit that referenced this pull request Oct 15, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) #45684
esm:
  * use import attributes instead of import assertions (Antoine du Hamel) #50140
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) #49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) #49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) #50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
http:
  * (SEMVER-MAJOR) reduce parts in chunked response when corking (Robert Nagy) #50167
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) #49830
stream:
  * optimize Writable (Robert Nagy) #50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950

Semver-Major Commits:

* (SEMVER-MAJOR) reset embedder string to "-node.0" (Michaël Zasso) #49639
* (SEMVER-MAJOR) drop support for Visual Studio 2019 (Michaël Zasso) #49051
* (SEMVER-MAJOR) bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) do not overwrite _writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) bump minimum ICU version to 73 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 8ec2651fbdd8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 89b3702c92b0 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick de9a5de2274f (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick b5b5d6c31bb0 (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 93b1a74cbc9b (Michaël Zasso) #49639
* (SEMVER-MAJOR) V8: cherry-pick 1a3ecc2483b2 (Michaël Zasso) #49639
* (SEMVER-MAJOR) patch V8 to avoid duplicated zlib symbol (Michaël Zasso) #49639
* (SEMVER-MAJOR) remove usage of a C++20 feature from V8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) avoid compilation error with ASan (Michaël Zasso) #49639
* (SEMVER-MAJOR) disable V8 concurrent sparkplug compilation (Michaël Zasso) #49639
* (SEMVER-MAJOR) silence irrelevant V8 warning (Michaël Zasso) #49639
* (SEMVER-MAJOR) always define V8_EXPORT_PRIVATE as no-op (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 to 11.8.172.13 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) validate options of `on` and `once` (Deokjin Kim) #46018
* (SEMVER-MAJOR) adjust `position` validation in reading methods (Livia Medeiros) #42835
* (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) reduce parts in chunked response when corking (Robert Nagy) #50167
* (SEMVER-MAJOR) update usage of always on Atomics API (Michaël Zasso) #49639
* (SEMVER-MAJOR) mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) only defer _final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) rename internal NAPI_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) update NODE_MODULE_VERSION to 120 (Michaël Zasso) #49639
* (SEMVER-MAJOR) throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839
* (SEMVER-MAJOR) throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) skip v8-updates/test-linux-perf (Michaël Zasso) #49639
* (SEMVER-MAJOR) skip test-tick-processor-arguments on SmartOS (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt REPL test to V8 changes (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt test-fs-write to V8 internal changes (Michaël Zasso) #49639
* (SEMVER-MAJOR) update flag to disable SharedArrayBuffer (Michaël Zasso) #49639
* (SEMVER-MAJOR) adapt debugger tests to V8 11.4 (Philip Pfaffe) #49639
* (SEMVER-MAJOR) disallow array in `run` options (Raz Luvaton) #49935
* (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) use `validateNumber` for `options.minDHSize` (Deokjin Kim) #49973
* (SEMVER-MAJOR) use validateFunction for `options.checkServerIdentity` (Deokjin Kim) #49896
* (SEMVER-MAJOR) add new V8 headers to distribution (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.8 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.7 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.6 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.5 (Michaël Zasso) #49639
* (SEMVER-MAJOR) update V8 gypfiles for 11.4 (Michaël Zasso) #49639
* (SEMVER-MAJOR) runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609
* (SEMVER-MAJOR) freeze `dependencySpecifiers` array (Antoine du Hamel) #49720

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
@RafaelGSS
Copy link
Member

It's missing a text for the notable-change requested in: #47653 (comment)

@MoLow
Copy link
Member Author

MoLow commented Oct 16, 2023

@RafaelGSS here is a description:
The node test runner now accepts a glob expression as input for --test. for instance, you can run expressions such as node --test **/*.test.js.

@meyfa
Copy link
Contributor

meyfa commented Oct 16, 2023

The node test runner now accepts a glob expression as input for --test. for instance, you can run expressions such as node --test **/*.test.js.

@MoLow Shouldn't this be quoted, i.e., node --test "**/*.test.js"?

@MoLow
Copy link
Member Author

MoLow commented Oct 16, 2023

I think it can work either way

@targos
Copy link
Member

targos commented Oct 16, 2023

Yes, but if you don't quote it, the pattern is expanded by the shell, which is not related to core glob support (and was already supported before)

RafaelGSS added a commit that referenced this pull request Oct 17, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) #45684
esm:
  * use import attributes instead of import assertions (Antoine du Hamel) #50140
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) #49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) #49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) #50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
http:
  * (SEMVER-MAJOR) reduce parts in chunked response when corking (Robert Nagy) #50167
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) #49830
  * (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
stream:
  * optimize Writable (Robert Nagy) #50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950

Semver-Major Commits:

* (SEMVER-MAJOR) build: drop support for Visual Studio 2019 (Michaël Zasso) #49051
* (SEMVER-MAJOR) build: bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) crypto: do not overwrite \_writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) deps: bump minimum ICU version to 73 (Michaël Zasso) #49639
* (SEMVER-MAJOR) deps: update V8 to 11.8.172.13 (Michaël Zasso) #49639
* (SEMVER-MAJOR) deps: update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) events: validate options of `on` and `once` (Deokjin Kim) #46018
* (SEMVER-MAJOR) fs: adjust `position` validation in reading methods (Livia Medeiros) #42835
* (SEMVER-MAJOR) fs: add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) http: reduce parts in chunked response when corking (Robert Nagy) #50167
* (SEMVER-MAJOR) lib: mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) lib: remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) lib: add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) lib: runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) module: harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) net: do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) net: only defer \_final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) node-api: rename internal NAPI\_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) src: update NODE\_MODULE\_VERSION to 120 (Michaël Zasso) #49639
* (SEMVER-MAJOR) src: throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839
* (SEMVER-MAJOR) src: throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) stream: use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) stream: use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) stream: use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) test\_runner: disallow array in `run` options (Raz Luvaton) #49935
* (SEMVER-MAJOR) test\_runner: support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) tls: use `validateNumber` for `options.minDHSize` (Deokjin Kim) #49973
* (SEMVER-MAJOR) tls: use validateFunction for `options.checkServerIdentity` (Deokjin Kim) #49896
* (SEMVER-MAJOR) util: runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609
* (SEMVER-MAJOR) vm: freeze `dependencySpecifiers` array (Antoine du Hamel) #49720

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
RafaelGSS added a commit that referenced this pull request Oct 17, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) #45684
esm:
  * use import attributes instead of import assertions (Antoine du Hamel) #50140
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) #49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) #49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) #50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) #47653
http:
  * (SEMVER-MAJOR) reduce parts in chunked response when corking (Robert Nagy) #50167
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) #49830
  * (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
stream:
  * optimize Writable (Robert Nagy) #50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) #47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950

Semver-Major Commits:

* (SEMVER-MAJOR) build: drop support for Visual Studio 2019 (Michaël Zasso) #49051
* (SEMVER-MAJOR) build: bump supported macOS and Xcode versions (Michaël Zasso) #49164
* (SEMVER-MAJOR) crypto: do not overwrite \_writableState.defaultEncoding (Tobias Nießen) #49140
* (SEMVER-MAJOR) deps: bump minimum ICU version to 73 (Michaël Zasso) #49639
* (SEMVER-MAJOR) deps: update V8 to 11.8.172.13 (Michaël Zasso) #49639
* (SEMVER-MAJOR) deps: update llhttp to 9.1.2 (Paolo Insogna) #48981
* (SEMVER-MAJOR) events: validate options of `on` and `once` (Deokjin Kim) #46018
* (SEMVER-MAJOR) fs: adjust `position` validation in reading methods (Livia Medeiros) #42835
* (SEMVER-MAJOR) fs: add globSync implementation (Moshe Atlow) #47653
* (SEMVER-MAJOR) http: reduce parts in chunked response when corking (Robert Nagy) #50167
* (SEMVER-MAJOR) lib: mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497
* (SEMVER-MAJOR) lib: remove aix directory case for package reader (Yagiz Nizipli) #48605
* (SEMVER-MAJOR) lib: add `navigator.hardwareConcurrency` (Yagiz Nizipli) #47769
* (SEMVER-MAJOR) lib: runtime deprecate punycode (Yagiz Nizipli) #47202
* (SEMVER-MAJOR) module: harmonize error code between ESM and CJS (Antoine du Hamel) #48606
* (SEMVER-MAJOR) net: do not treat `server.maxConnections=0` as `Infinity` (ignoramous) #48276
* (SEMVER-MAJOR) net: only defer \_final call when connecting (Jason Zhang) #47385
* (SEMVER-MAJOR) node-api: rename internal NAPI\_VERSION definition (Chengzhong Wu) #48501
* (SEMVER-MAJOR) src: update NODE\_MODULE\_VERSION to 120 (Michaël Zasso) #49639
* (SEMVER-MAJOR) src: throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839
* (SEMVER-MAJOR) src: throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604
* (SEMVER-MAJOR) stream: use private properties for strategies (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) stream: use private properties for encoding (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) stream: use private properties for compression (Yagiz Nizipli) #47218
* (SEMVER-MAJOR) test\_runner: disallow array in `run` options (Raz Luvaton) #49935
* (SEMVER-MAJOR) test\_runner: support passing globs (Moshe Atlow) #47653
* (SEMVER-MAJOR) tls: use `validateNumber` for `options.minDHSize` (Deokjin Kim) #49973
* (SEMVER-MAJOR) tls: use validateFunction for `options.checkServerIdentity` (Deokjin Kim) #49896
* (SEMVER-MAJOR) util: runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) #49609
* (SEMVER-MAJOR) vm: freeze `dependencySpecifiers` array (Antoine du Hamel) #49720

PR-URL: #49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
@karlhorky
Copy link
Contributor

Amazing, thanks for this PR @MoLow and everyone else involved!

Does this go anywhere in the direction of getting --watch-path glob support?

alexfernandez pushed a commit to alexfernandez/node that referenced this pull request Nov 1, 2023
Notable Changes:

doc:
  * promote fetch/webstreams from experimental to stable (Steven) nodejs#45684
esm:
  * use import attributes instead of import assertions (Antoine du Hamel) nodejs#50140
  * --experimental-default-type flag to flip module defaults (Geoffrey Booth) nodejs#49869
  * remove `globalPreload` hook (superseded by `initialize`) (Jacob Smith) nodejs#49144
fs:
  * add flush option to writeFile() functions (Colin Ihrig) nodejs#50009
  * (SEMVER-MAJOR) add globSync implementation (Moshe Atlow) nodejs#47653
http:
  * (SEMVER-MAJOR) reduce parts in chunked response when corking (Robert Nagy) nodejs#50167
lib:
  * (SEMVER-MINOR) add WebSocket client (Matthew Aitken) nodejs#49830
  * (SEMVER-MAJOR) add `navigator.hardwareConcurrency` (Yagiz Nizipli) nodejs#47769
stream:
  * optimize Writable (Robert Nagy) nodejs#50012
test_runner:
  * (SEMVER-MAJOR) support passing globs (Moshe Atlow) nodejs#47653
vm:
  * use default HDO when importModuleDynamically is not set (Joyee Cheung) nodejs#49950

Semver-Major Commits:

* (SEMVER-MAJOR) build: drop support for Visual Studio 2019 (Michaël Zasso) nodejs#49051
* (SEMVER-MAJOR) build: bump supported macOS and Xcode versions (Michaël Zasso) nodejs#49164
* (SEMVER-MAJOR) crypto: do not overwrite \_writableState.defaultEncoding (Tobias Nießen) nodejs#49140
* (SEMVER-MAJOR) deps: bump minimum ICU version to 73 (Michaël Zasso) nodejs#49639
* (SEMVER-MAJOR) deps: update V8 to 11.8.172.13 (Michaël Zasso) nodejs#49639
* (SEMVER-MAJOR) deps: update llhttp to 9.1.2 (Paolo Insogna) nodejs#48981
* (SEMVER-MAJOR) events: validate options of `on` and `once` (Deokjin Kim) nodejs#46018
* (SEMVER-MAJOR) fs: adjust `position` validation in reading methods (Livia Medeiros) nodejs#42835
* (SEMVER-MAJOR) fs: add globSync implementation (Moshe Atlow) nodejs#47653
* (SEMVER-MAJOR) http: reduce parts in chunked response when corking (Robert Nagy) nodejs#50167
* (SEMVER-MAJOR) lib: mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) nodejs#47497
* (SEMVER-MAJOR) lib: remove aix directory case for package reader (Yagiz Nizipli) nodejs#48605
* (SEMVER-MAJOR) lib: add `navigator.hardwareConcurrency` (Yagiz Nizipli) nodejs#47769
* (SEMVER-MAJOR) lib: runtime deprecate punycode (Yagiz Nizipli) nodejs#47202
* (SEMVER-MAJOR) module: harmonize error code between ESM and CJS (Antoine du Hamel) nodejs#48606
* (SEMVER-MAJOR) net: do not treat `server.maxConnections=0` as `Infinity` (ignoramous) nodejs#48276
* (SEMVER-MAJOR) net: only defer \_final call when connecting (Jason Zhang) nodejs#47385
* (SEMVER-MAJOR) node-api: rename internal NAPI\_VERSION definition (Chengzhong Wu) nodejs#48501
* (SEMVER-MAJOR) src: update NODE\_MODULE\_VERSION to 120 (Michaël Zasso) nodejs#49639
* (SEMVER-MAJOR) src: throw DOMException on cloning non-serializable objects (Chengzhong Wu) nodejs#47839
* (SEMVER-MAJOR) src: throw DataCloneError on transfering untransferable objects (Chengzhong Wu) nodejs#47604
* (SEMVER-MAJOR) stream: use private properties for strategies (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) stream: use private properties for encoding (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) stream: use private properties for compression (Yagiz Nizipli) nodejs#47218
* (SEMVER-MAJOR) test\_runner: disallow array in `run` options (Raz Luvaton) nodejs#49935
* (SEMVER-MAJOR) test\_runner: support passing globs (Moshe Atlow) nodejs#47653
* (SEMVER-MAJOR) tls: use `validateNumber` for `options.minDHSize` (Deokjin Kim) nodejs#49973
* (SEMVER-MAJOR) tls: use validateFunction for `options.checkServerIdentity` (Deokjin Kim) nodejs#49896
* (SEMVER-MAJOR) util: runtime deprecate `promisify`-ing a function returning a `Promise` (Antoine du Hamel) nodejs#49609
* (SEMVER-MAJOR) vm: freeze `dependencySpecifiers` array (Antoine du Hamel) nodejs#49720

PR-URL: nodejs#49870
Co-authored-by: Michaël Zasso <targos@protonmail.com>
@MrHBS
Copy link

MrHBS commented Nov 2, 2023

Extremely unfortunate this can’t be backported to v20.

@MoLow
Copy link
Member Author

MoLow commented Nov 4, 2023

this is already part of v20

@meyfa
Copy link
Contributor

meyfa commented Nov 4, 2023

this is already part of v20

This only went out with v21 and it's semver-major, so cannot be backported to v20. Am I missing something?

@khaosdoctor
Copy link
Member

this is already part of v20

I'm trying to use this change in V20.8 but it apparently doesn't seem to understand the glob pattern in node --experimental-test-coverage --import tsx --test './src/**/*.test.ts'

It gives me "Could not find ", am I missing something?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
author ready PRs that have at least one approval, no pending requests for changes, and a CI started. commit-queue-rebase Add this label to allow the Commit Queue to land a PR in several commits. lib / src Issues and PRs related to general changes in the lib or src directory. needs-ci PRs that need a full CI run. notable-change PRs with changes that should be highlighted in changelogs. semver-major PRs that contain breaking changes and should be released in the next major version. test_runner Issues and PRs related to the test runner subsystem.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Using node:test with Custom ESM Loaders