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

module: eliminate performance cost of ESM syntax detection for CommonJS entry points #52093

Merged
merged 16 commits into from
Mar 20, 2024

Conversation

GeoffreyBooth
Copy link
Member

@GeoffreyBooth GeoffreyBooth commented Mar 15, 2024

This PR eliminates the performance penalty incurred by --experimental-detect-module for the common use case of CommonJS entry points:

hyperfine --warmup 10 --runs 30 \
  './node ./test/fixtures/snapshot/typescript.js' \
  './node --experimental-detect-module ./test/fixtures/snapshot/typescript.js'

Benchmark 1: ./node ./test/fixtures/snapshot/typescript.js
  Time (mean ± σ):     135.0 ms ±   3.3 ms    [User: 117.5 ms, System: 13.9 ms]
  Range (min … max):   129.0 ms … 143.5 ms    30 runs

Benchmark 2: ./node --experimental-detect-module ./test/fixtures/snapshot/typescript.js
  Time (mean ± σ):     135.3 ms ±   2.8 ms    [User: 117.3 ms, System: 13.9 ms]
  Range (min … max):   130.0 ms … 143.1 ms    30 runs

Summary
  ./node ./test/fixtures/snapshot/typescript.js ran
    1.00 ± 0.03 times faster than ./node --experimental-detect-module ./test/fixtures/snapshot/typescript.js

It does this by changing the startup flow for “ambiguous” entry points (where there’s no explicit file extension or package.json "type" field). On current main, there’s an initial file load and CommonJS parse to determine whether or not the such ambiguous entry points should be handled by the CommonJS or the ESM loader; and then the chosen loader reloads and reparses the entry point. In this PR, ambiguous files are always sent into the CommonJS loader, and only if it throws an error do we check if we should retry the entry point as ESM via the ESM loader. Because nothing “extra” happens for the common case of CommonJS entry points that parse successfully as CommonJS, there is no performance penalty for incurred for CommonJS entry points by having --experimental-detect-module enabled by default.

I haven’t gone further to investigate if additional optimizations are possible within the ESM loader; there probably are. But this was significant enough that I thought it could probably land on its own.

Additional benchmarks
./node benchmark/compare.js --new ./out/Release/node --old ./node-main --filter startup misc | Rscript benchmark/compare.R
[00:22:32|% 100| 2/2 files | 60/60 runs | 4/4 configs]: Done
                                                                                           confidence improvement accuracy (*)   (**)  (***)
misc/startup-cli-version.js count=30 cli='deps/corepack/dist/corepack.js'                                 0.80 %       ±1.15% ±1.53% ±1.99%
misc/startup-cli-version.js count=30 cli='deps/npm/bin/npm-cli.js'                                        0.72 %       ±1.17% ±1.56% ±2.03%
misc/startup-cli-version.js count=30 cli='deps/npm/bin/npx-cli.js'                                        0.60 %       ±1.32% ±1.76% ±2.29%
misc/startup-cli-version.js count=30 cli='tools/node_modules/eslint/bin/eslint.js'                       -0.24 %       ±1.50% ±1.99% ±2.60%
misc/startup-core.js count=30 mode='process' script='benchmark/fixtures/require-builtins'                 0.40 %       ±1.15% ±1.53% ±2.00%
misc/startup-core.js count=30 mode='process' script='test/fixtures/semicolon'                             0.84 %       ±1.14% ±1.52% ±1.97%
misc/startup-core.js count=30 mode='worker' script='benchmark/fixtures/require-builtins'                  1.55 %       ±2.40% ±3.19% ±4.15%
misc/startup-core.js count=30 mode='worker' script='test/fixtures/semicolon'                             -0.23 %       ±2.56% ±3.40% ±4.43%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 8 comparisons, you can thus
expect the following amount of false-positive results:
  0.40 false positives, when considering a   5% risk acceptance (*, **, ***),
  0.08 false positives, when considering a   1% risk acceptance (**, ***),
  0.01 false positives, when considering a 0.1% risk acceptance (***)

@nodejs/loaders @nodejs/performance

@GeoffreyBooth GeoffreyBooth added module Issues and PRs related to the module subsystem. performance Issues and PRs related to the performance of Node.js. esm Issues and PRs related to the ECMAScript Modules implementation. labels Mar 15, 2024
@nodejs-github-bot
Copy link
Collaborator

Review requested:

  • @nodejs/loaders

@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. 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 Mar 15, 2024
Copy link
Member

@mcollina mcollina left a comment

Choose a reason for hiding this comment

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

lgtm

Can we flip the flag in v22?

Copy link
Member

@joyeecheung joyeecheung left a comment

Choose a reason for hiding this comment

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

Definitely prefer this falling back from CJS loader behavior than the “check syntax first then choose the loader” approach before 👍 I think this approach was what I suggested at that time, not sure why it ended up the way it was. Though it would still be nicer if we could handle it via V8 caching but that can be a follow up.

@joyeecheung
Copy link
Member

Can you add the typescript.js bundle into the startup-core or startup-cli-version benchmark and run it in the benchmark CI?

@joyeecheung
Copy link
Member

joyeecheung commented Mar 15, 2024

Can we flip the flag in v22?

I think we should only flip the flag if we print a warning when the fallback is used (at least when it happens in non-entrypoints, or when the entry point is small enough). Users should mark the ESM explicitly wherever possible and be aware of the performance cost of the fallback. You probably don’t want thousands of your implicit .js ESMs to all get parsed as CJS first before falling back to ESM silently and wonder why your module loading is so slow…(and that could’ve been avoided if you just add a type filed to your package.json)

@mcollina
Copy link
Member

Agreed on the warning. It would be great to ship it given it only simplifies dx.

@GeoffreyBooth GeoffreyBooth force-pushed the optimize-cjs-detection branch from 278b15f to 5f7526c Compare March 15, 2024 17:43
@GeoffreyBooth
Copy link
Member Author

GeoffreyBooth commented Mar 15, 2024

Regarding the warning, I think we definitely want to avoid warning for two scenarios:

  • An extensionless file outside of any package.json scope, like /usr/local/bin/foo
  • Any files within node_modules

The user can’t add explicitness for the former without breaking their desired UX, and the user can’t fix the latter without patching dependencies.

The case I’m unsure on is node entry.js where there’s no package.json file (but there is an extension). The user could change the .js to .mjs or .cjs, but I’m not sure we want to push them to do so; they may have great reasons for needing to use .js (their editor, other tools, etc.). But if there’s no package.json present, it’s probably a single-file script or other very small script/app, where the performance overhead of detection is unlikely to be noticeable.

How about we warn only on ambiguous entry points where there is a package.json present? That probably covers most usage of detection, and if the user already has a package.json there shouldn’t be a reason that they can’t add a type field to it (whether that field’s value is module or commonjs).

@GeoffreyBooth GeoffreyBooth force-pushed the optimize-cjs-detection branch from 5f7526c to f4cd945 Compare March 15, 2024 18:48
@joyeecheung
Copy link
Member

joyeecheung commented Mar 16, 2024

the user can’t fix the latter without patching dependencies.

Isn't that already the case? Right now this would not work anyway (it errors), why should we allow it without a warning? It seems to be encouraging package authors to publish their .js code without a type field in package.json. Right now what we have requires them to put "type": "module" field in package.json, I see no reason why we should lure them into stopping that...

I agree we can do that for extension less files. Though I'd still prefer we have something better for indicating ESM for them (e.g. magical comments or directives - the use of magical comments isn't new anyway, e.g. for source maps or V8 compilation hints).

@GeoffreyBooth
Copy link
Member Author

I discovered that the warning was being printed incorrectly, because I was calling the error flow even when we were retrying as ESM. I fixed it so that the error flow is only used when we’re actually going to throw the CommonJS error, because we’re not retrying as ESM. So now the warning behavior is unchanged from before, which I think is fine for this PR. If we want to discuss warnings further that can be a separate PR.

@nodejs-github-bot
Copy link
Collaborator

@GeoffreyBooth GeoffreyBooth force-pushed the optimize-cjs-detection branch from 0fd062c to 737e831 Compare March 16, 2024 04:53
@GeoffreyBooth
Copy link
Member Author

Can you add the typescript.js bundle into the startup-core or startup-cli-version benchmark and run it in the benchmark CI?

Done for startup-core: https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-benchmarks/1495/console

The fixture isn’t the full TypeScript CLI. I don’t think there’s a way to get it to print the TypeScript version, so I didn’t add it to the startup-cli-version one.

@nodejs-github-bot
Copy link
Collaborator

@GeoffreyBooth GeoffreyBooth added the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Mar 17, 2024
@GeoffreyBooth
Copy link
Member Author

There were some failing tests until I moved the try/catch inside the check for --experimental-detect-module; so with that change, this PR should be ready to land, unless @joyeecheung you had any other notes (or I haven’t resolved any of your notes)?

The few tests that fail when the flag is enabled by default seem mostly to do with error output, because per this PR with the flag we’re catching and rethrowing the attempt to run the entry point. I think I might have a solution for the error output, though it’ll take some work to get working with source maps; or it might not be necessary at all if we unflag this at the same time as #51977.

@nodejs-github-bot
Copy link
Collaborator

rdw-msft pushed a commit to rdw-msft/node that referenced this pull request Mar 26, 2024
PR-URL: nodejs#52093
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
@marco-ippolito marco-ippolito added the backport-requested-v20.x PRs awaiting manual backport to the v20.x-staging branch. label May 21, 2024
@marco-ippolito
Copy link
Member

Can you create a manual backport for v20? It doesnt land cleanly

@targos targos added dont-land-on-v20.x PRs that should not land on the v20.x-staging branch and should not be released in v20.x. and removed backport-requested-v20.x PRs awaiting manual backport to the v20.x-staging branch. labels Sep 21, 2024
@joyeecheung
Copy link
Member

After #56590 this should now land cleanly.

joyeecheung pushed a commit to joyeecheung/node that referenced this pull request Jan 22, 2025
PR-URL: nodejs#52093
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
@aduh95 aduh95 removed the dont-land-on-v20.x PRs that should not land on the v20.x-staging branch and should not be released in v20.x. label Jan 23, 2025
joyeecheung pushed a commit to joyeecheung/node that referenced this pull request Jan 23, 2025
PR-URL: nodejs#52093
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
joyeecheung pushed a commit to joyeecheung/node that referenced this pull request Jan 23, 2025
PR-URL: nodejs#52093
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
joyeecheung pushed a commit to joyeecheung/node that referenced this pull request Jan 31, 2025
PR-URL: nodejs#52093
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
joyeecheung pushed a commit to joyeecheung/node that referenced this pull request Jan 31, 2025
PR-URL: nodejs#52093
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
joyeecheung pushed a commit to joyeecheung/node that referenced this pull request Feb 5, 2025
PR-URL: nodejs#52093
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
joyeecheung pushed a commit to joyeecheung/node that referenced this pull request Feb 5, 2025
PR-URL: nodejs#52093
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
@joyeecheung joyeecheung added the backport-open-v20.x Indicate that the PR has an open backport label Feb 6, 2025
@joyeecheung
Copy link
Member

Backport in #56927

joyeecheung pushed a commit to joyeecheung/node that referenced this pull request Feb 6, 2025
PR-URL: nodejs#52093
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
joyeecheung pushed a commit to joyeecheung/node that referenced this pull request Feb 10, 2025
PR-URL: nodejs#52093
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
marco-ippolito pushed a commit that referenced this pull request Feb 11, 2025
PR-URL: #52093
Backport-PR-URL: #56927
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Jacob Smith <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
Refs: #52697
mwalbeck pushed a commit to mwalbeck/docker-cyberchef that referenced this pull request Mar 22, 2025
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [node](https://github.com/nodejs/node) | stage | minor | `20.18.3-bullseye` -> `20.19.0-bullseye` |

---

### Release Notes

<details>
<summary>nodejs/node (node)</summary>

### [`v20.19.0`](https://github.com/nodejs/node/releases/tag/v20.19.0): 2025-03-13, Version 20.19.0 &#x27;Iron&#x27; (LTS), @&#8203;marco-ippolito

[Compare Source](nodejs/node@v20.18.3...v20.19.0)

##### Notable Changes

##### require(esm) is now enabled by default

Support for loading native ES modules using require() had been available on v20.x under the command line flag --experimental-require-module, and available by default on v22.x and v23.x. In this release, it is now no longer behind a flag on v20.x.

This feature has been tested on v23.x and v22.x, and we are looking for user feedback from v20.x to make more final tweaks before fully stabilizing it.
It now no longer emits a warning unless `--trace-require-module` is explicitly used.
If there happens to be any regressions caused by this feature, users can report it to the Node.js issue tracker. Meanwhile this feature can also be disabled using `--no-experimental-require-module` as a workaround.

With this feature enabled, Node.js will no longer throw `ERR_REQUIRE_ESM` if `require()` is used to load a ES module. It can, however, throw `ERR_REQUIRE_ASYNC_MODULE` if the ES module being loaded or its dependencies contain top-level `await`. When the ES module is loaded successfully by `require()`, the returned object will either be a ES module namespace object similar to what's returned by `import()`, or what gets exported as `"module.exports"` in the ES module.

Users can check `process.features.require_module` to see whether `require(esm)` is enabled in the current Node.js instance. For packages, the `"module-sync"` exports condition can be used as a way to detect `require(esm)` support in the current Node.js instance and allow both `require()` and `import` to load the same native ES module. See [the documentation](https://nodejs.org/docs/latest/api/modules.html#loading-ecmascript-modules-using-require) for more details about this feature.

Contributed by Joyee Cheung in [#&#8203;55085](nodejs/node#55085)

##### Module syntax detection is now enabled by default

Module syntax detection (the `--experimental-detect-module` flag) is now
enabled by default. Use `--no-experimental-detect-module` to disable it if
needed.

Syntax detection attempts to run ambiguous files as CommonJS, and if the module
fails to parse as CommonJS due to ES module syntax, Node.js tries again and runs
the file as an ES module.
Ambiguous files are those with a `.js` or no extension, where the nearest parent
`package.json` has no `"type"` field (either `"type": "module"` or
`"type": "commonjs"`).
Syntax detection should have no performance impact on CommonJS modules, but it
incurs a slight performance penalty for ES modules; add `"type": "module"` to
the nearest parent `package.json` file to eliminate the performance cost.
A use case unlocked by this feature is the ability to use ES module syntax in
extensionless scripts with no nearby `package.json`.

Thanks to Geoffrey Booth for making this work on [#&#8203;53619](nodejs/node#53619).

##### Other Notable Changes

-   \[[`285bb4ee14`](nodejs/node@285bb4ee14)] - **crypto**: update root certificates to NSS 3.107 (Node.js GitHub Bot) [#&#8203;56566](nodejs/node#56566)
-   \[[`73b5c16684`](nodejs/node@73b5c16684)] - **(SEMVER-MINOR)** **worker**: add postMessageToThread (Paolo Insogna) [#&#8203;53682](nodejs/node#53682)
-   \[[`de313b2336`](nodejs/node@de313b2336)] - **(SEMVER-MINOR)** **module**: only emit require(esm) warning under --trace-require-module (Joyee Cheung) [#&#8203;56194](nodejs/node#56194)
-   \[[`4fba01911d`](nodejs/node@4fba01911d)] - **(SEMVER-MINOR)** **process**: add process.features.require_module (Joyee Cheung) [#&#8203;55241](nodejs/node#55241)
-   \[[`df8a045afe`](nodejs/node@df8a045afe)] - **(SEMVER-MINOR)** **module**: implement the "module-sync" exports condition (Joyee Cheung) [#&#8203;54648](nodejs/node#54648)
-   \[[`f9dc1eaef5`](nodejs/node@f9dc1eaef5)] - **(SEMVER-MINOR)** **module**: add \__esModule to require()'d ESM (Joyee Cheung) [#&#8203;52166](nodejs/node#52166)

<details>
<summary>
Commits
</summary>

-   \[[`d84be843e3`](nodejs/node@d84be843e3)] - **benchmark**: add validateStream to styleText bench (Rafael Gonzaga) [#&#8203;56556](nodejs/node#56556)
-   \[[`d8eaf5b9b8`](nodejs/node@d8eaf5b9b8)] - **build**: fix compatibility with V8's `depot_tools` (Richard Lau) [#&#8203;57330](nodejs/node#57330)
-   \[[`1ee4bf9690`](nodejs/node@1ee4bf9690)] - **build**: test macos-13 on GitHub actions (Michaël Zasso) [#&#8203;56307](nodejs/node#56307)
-   \[[`1cc8d69882`](nodejs/node@1cc8d69882)] - **build**: build v8 with -fvisibility=hidden on macOS (Joyee Cheung) [#&#8203;56275](nodejs/node#56275)
-   \[[`52f1f7e22b`](nodejs/node@52f1f7e22b)] - **child_process**: fix parsing messages with splitted length field (Maksim Gorkov) [#&#8203;56106](nodejs/node#56106)
-   \[[`5ef3c3c996`](nodejs/node@5ef3c3c996)] - **crypto**: add missing return value check (Michael Dawson) [#&#8203;56615](nodejs/node#56615)
-   \[[`285bb4ee14`](nodejs/node@285bb4ee14)] - **crypto**: update root certificates to NSS 3.107 (Node.js GitHub Bot) [#&#8203;56566](nodejs/node#56566)
-   \[[`46ceb9dc1c`](nodejs/node@46ceb9dc1c)] - **deps**: update timezone to 2025a (Node.js GitHub Bot) [#&#8203;56876](nodejs/node#56876)
-   \[[`d4ca38fe8e`](nodejs/node@d4ca38fe8e)] - **deps**: macro ENODATA is deprecated in libc++ (Cheng) [#&#8203;56698](nodejs/node#56698)
-   \[[`15214e6508`](nodejs/node@15214e6508)] - **deps**: update simdutf to 6.0.3 (Node.js GitHub Bot) [#&#8203;56567](nodejs/node#56567)
-   \[[`1e44f5d84b`](nodejs/node@1e44f5d84b)] - **deps**: update simdutf to 5.7.2 (Node.js GitHub Bot) [#&#8203;56388](nodejs/node#56388)
-   \[[`b92ff7be38`](nodejs/node@b92ff7be38)] - **deps**: update googletest to [`7d76a23`](nodejs/node@7d76a23) (Node.js GitHub Bot) [#&#8203;56387](nodejs/node#56387)
-   \[[`e1b71a81a9`](nodejs/node@e1b71a81a9)] - **deps**: update googletest to [`e54519b`](nodejs/node@e54519b) (Node.js GitHub Bot) [#&#8203;56370](nodejs/node#56370)
-   \[[`c0d45e7f38`](nodejs/node@c0d45e7f38)] - **deps**: update simdutf to 5.7.0 (Node.js GitHub Bot) [#&#8203;56332](nodejs/node#56332)
-   \[[`d69107f5a8`](nodejs/node@d69107f5a8)] - **deps**: update icu to 76.1 (Node.js GitHub Bot) [#&#8203;55551](nodejs/node#55551)
-   \[[`5c9a397699`](nodejs/node@5c9a397699)] - **deps**: V8: backport [`9ab4059`](nodejs/node@9ab40592f697) (Lu Yahan) [#&#8203;56781](nodejs/node#56781)
-   \[[`8342233f6d`](nodejs/node@8342233f6d)] - **deps**: update corepack to 0.31.0 (Node.js GitHub Bot) [#&#8203;56795](nodejs/node#56795)
-   \[[`561493d35e`](nodejs/node@561493d35e)] - **deps,src**: simplify base64 encoding (Daniel Lemire) [#&#8203;52714](nodejs/node#52714)
-   \[[`6207b2936c`](nodejs/node@6207b2936c)] - **doc**: move anatoli to emeritus (Michael Dawson) [#&#8203;56592](nodejs/node#56592)
-   \[[`b0ab483400`](nodejs/node@b0ab483400)] - **doc**: fix styles of the expandable TOC (Antoine du Hamel) [#&#8203;56755](nodejs/node#56755)
-   \[[`53e4dc2a82`](nodejs/node@53e4dc2a82)] - **doc**: add "Skip to content" button (Antoine du Hamel) [#&#8203;56750](nodejs/node#56750)
-   \[[`33ee4645c3`](nodejs/node@33ee4645c3)] - **doc**: improve accessibility of expandable lists (Antoine du Hamel) [#&#8203;56749](nodejs/node#56749)
-   \[[`b514438418`](nodejs/node@b514438418)] - **doc**: add note regarding commit message trailers (Dario Piotrowicz) [#&#8203;56736](nodejs/node#56736)
-   \[[`627f2997e3`](nodejs/node@627f2997e3)] - **doc**: fix typo in example code for util.styleText (Robin Mehner) [#&#8203;56720](nodejs/node#56720)
-   \[[`68548dcb48`](nodejs/node@68548dcb48)] - **doc**: fix inconsistencies in `WeakSet` and `WeakMap` comparison details (Shreyans Pathak) [#&#8203;56683](nodejs/node#56683)
-   \[[`337cfb2549`](nodejs/node@337cfb2549)] - **doc**: add RafaelGSS as latest sec release stewards (Rafael Gonzaga) [#&#8203;56682](nodejs/node#56682)
-   \[[`e890c86d7b`](nodejs/node@e890c86d7b)] - **doc**: clarify cjs/esm diff in `queueMicrotask()` vs `process.nextTick()` (Dario Piotrowicz) [#&#8203;56659](nodejs/node#56659)
-   \[[`978263923f`](nodejs/node@978263923f)] - **doc**: `WeakSet` and `WeakMap` comparison details (Shreyans Pathak) [#&#8203;56648](nodejs/node#56648)
-   \[[`aba280ccd8`](nodejs/node@aba280ccd8)] - **doc**: mention prepare --security (Rafael Gonzaga) [#&#8203;56617](nodejs/node#56617)
-   \[[`0a009a527b`](nodejs/node@0a009a527b)] - **doc**: tweak info on reposts in ambassador program (Michael Dawson) [#&#8203;56589](nodejs/node#56589)
-   \[[`d2f09e2ab3`](nodejs/node@d2f09e2ab3)] - **doc**: add type stripping to ambassadors program (Marco Ippolito) [#&#8203;56598](nodejs/node#56598)
-   \[[`b0b77d7fbe`](nodejs/node@b0b77d7fbe)] - **doc**: improve internal documentation on built-in snapshot (Joyee Cheung) [#&#8203;56505](nodejs/node#56505)
-   \[[`4b3e7fee94`](nodejs/node@4b3e7fee94)] - **doc**: document CLI way to open the nodejs/bluesky PR (Antoine du Hamel) [#&#8203;56506](nodejs/node#56506)
-   \[[`03878b0384`](nodejs/node@03878b0384)] - **doc**: update gcc-version for ubuntu-lts (Kunal Kumar) [#&#8203;56553](nodejs/node#56553)
-   \[[`acbbd7c1a6`](nodejs/node@acbbd7c1a6)] - **doc**: fix parentheses in options (Tobias Nießen) [#&#8203;56563](nodejs/node#56563)
-   \[[`3fe80c30b8`](nodejs/node@3fe80c30b8)] - **doc**: include CVE to EOL lines as sec release process (Rafael Gonzaga) [#&#8203;56520](nodejs/node#56520)
-   \[[`ff8af58046`](nodejs/node@ff8af58046)] - **doc**: add esm examples to node:trace_events (Alfredo González) [#&#8203;56514](nodejs/node#56514)
-   \[[`27b9cfd135`](nodejs/node@27b9cfd135)] - **doc**: add message for Ambassadors to promote (Michael Dawson) [#&#8203;56235](nodejs/node#56235)
-   \[[`020c939da1`](nodejs/node@020c939da1)] - **doc**: allow request for TSC reviews via the GitHub UI (Antoine du Hamel) [#&#8203;56493](nodejs/node#56493)
-   \[[`1ef9c9a354`](nodejs/node@1ef9c9a354)] - **doc**: add example for piping ReadableStream (Gabriel Schulhof) [#&#8203;56415](nodejs/node#56415)
-   \[[`e675c3a7fc`](nodejs/node@e675c3a7fc)] - **doc**: expand description of `parseArg`'s `default` (Kevin Gibbons) [#&#8203;54431](nodejs/node#54431)
-   \[[`bc756da876`](nodejs/node@bc756da876)] - **doc**: use `<ul>` instead of `<ol>` in `SECURITY.md` (Antoine du Hamel) [#&#8203;56346](nodejs/node#56346)
-   \[[`ad59c82a49`](nodejs/node@ad59c82a49)] - **doc**: clarify that WASM is trusted (Matteo Collina) [#&#8203;56345](nodejs/node#56345)
-   \[[`8e76cc69e5`](nodejs/node@8e76cc69e5)] - **doc**: move dual package shipping docs to separate repo (Joyee Cheung) [#&#8203;55444](nodejs/node#55444)
-   \[[`9fda8e29cd`](nodejs/node@9fda8e29cd)] - **doc**: mark `--env-file-if-exists` flag as experimental (Juan José) [#&#8203;56893](nodejs/node#56893)
-   \[[`9e975f1a7d`](nodejs/node@9e975f1a7d)] - **doc**: fix link and history of `SourceMap` sections (Antoine du Hamel) [#&#8203;57098](nodejs/node#57098)
-   \[[`64ce95b8fc`](nodejs/node@64ce95b8fc)] - **doc**: update `require(ESM)` history and stability status (Antoine du Hamel) [#&#8203;55199](nodejs/node#55199)
-   \[[`697a39248b`](nodejs/node@697a39248b)] - **doc**: fix history of `process.features` (Antoine du Hamel) [#&#8203;54897](nodejs/node#54897)
-   \[[`7c38e503a3`](nodejs/node@7c38e503a3)] - **doc**: add documentation for process.features (Marco Ippolito) [#&#8203;54897](nodejs/node#54897)
-   \[[`c85b386a39`](nodejs/node@c85b386a39)] - **esm**: fix jsdoc type refs to `ModuleJobBase` in esm/loader (Jacob Smith) [#&#8203;56499](nodejs/node#56499)
-   \[[`4813a6a66c`](nodejs/node@4813a6a66c)] - **esm**: throw `ERR_REQUIRE_ESM` instead of `ERR_INTERNAL_ASSERTION` (Antoine du Hamel) [#&#8203;54868](nodejs/node#54868)
-   \[[`0d327c8e47`](nodejs/node@0d327c8e47)] - **esm**: refactor `get_format` (Antoine du Hamel) [#&#8203;53872](nodejs/node#53872)
-   \[[`e87db6c9bc`](nodejs/node@e87db6c9bc)] - **events**: add hasEventListener util for validate (Sunghoon) [#&#8203;55230](nodejs/node#55230)
-   \[[`674b932f33`](nodejs/node@674b932f33)] - **http**: don't emit error after destroy (Robert Nagy) [#&#8203;55457](nodejs/node#55457)
-   \[[`4c24ef8f71`](nodejs/node@4c24ef8f71)] - **http2**: omit server name when HTTP2 host is IP address (islandryu) [#&#8203;56530](nodejs/node#56530)
-   \[[`533afe8124`](nodejs/node@533afe8124)] - **lib**: reduce amount of caught URL errors (Yagiz Nizipli) [#&#8203;52658](nodejs/node#52658)
-   \[[`34221a1d6e`](nodejs/node@34221a1d6e)] - **lib**: allow CJS source map cache to be reclaimed (Chengzhong Wu) [#&#8203;51711](nodejs/node#51711)
-   \[[`f13589f1f9`](nodejs/node@f13589f1f9)] - **lib,src**: iterate module requests of a module wrap in JS (Chengzhong Wu) [#&#8203;52058](nodejs/node#52058)
-   \[[`6afee9ea43`](nodejs/node@6afee9ea43)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#&#8203;56580](nodejs/node#56580)
-   \[[`85bb738739`](nodejs/node@85bb738739)] - **meta**: add codeowners of security release document (Rafael Gonzaga) [#&#8203;56521](nodejs/node#56521)
-   \[[`48f9ca0992`](nodejs/node@48f9ca0992)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#&#8203;56342](nodejs/node#56342)
-   \[[`4d724121b4`](nodejs/node@4d724121b4)] - **meta**: move MoLow to TSC regular member (Moshe Atlow) [#&#8203;56276](nodejs/node#56276)
-   \[[`5e2dab7868`](nodejs/node@5e2dab7868)] - **module**: fix bad `require.resolve` with option paths for `.` and `..` (Dario Piotrowicz) [#&#8203;56735](nodejs/node#56735)
-   \[[`f507c05060`](nodejs/node@f507c05060)] - **module**: simplify --inspect-brk handling (Joyee Cheung) [#&#8203;55679](nodejs/node#55679)
-   \[[`ed2d373e5a`](nodejs/node@ed2d373e5a)] - **module**: disable require(esm) for policy and network import (Joyee Cheung) [#&#8203;56927](nodejs/node#56927)
-   \[[`de313b2336`](nodejs/node@de313b2336)] - **(SEMVER-MINOR)** **module**: only emit require(esm) warning under --trace-require-module (Joyee Cheung) [#&#8203;56194](nodejs/node#56194)
-   \[[`3d89e6b6fa`](nodejs/node@3d89e6b6fa)] - **module**: mark evaluation rejection in require(esm) as handled (Joyee Cheung) [#&#8203;56122](nodejs/node#56122)
-   \[[`e01dd4bd4f`](nodejs/node@e01dd4bd4f)] - **module**: do not warn when require(esm) comes from node_modules (Joyee Cheung) [#&#8203;55960](nodejs/node#55960)
-   \[[`011e6e0032`](nodejs/node@011e6e0032)] - **module**: fix error thrown from require(esm) hitting TLA repeatedly (Joyee Cheung) [#&#8203;55520](nodejs/node#55520)
-   \[[`fdf50289c6`](nodejs/node@fdf50289c6)] - **module**: trim off internal stack frames for require(esm) warnings (Joyee Cheung) [#&#8203;55496](nodejs/node#55496)
-   \[[`8d33f78ca5`](nodejs/node@8d33f78ca5)] - **module**: allow ESM that failed to be required to be re-imported (Joyee Cheung) [#&#8203;55502](nodejs/node#55502)
-   \[[`8192dd6cf3`](nodejs/node@8192dd6cf3)] - **module**: include module information in require(esm) warning (Joyee Cheung) [#&#8203;55397](nodejs/node#55397)
-   \[[`1db210a0ec`](nodejs/node@1db210a0ec)] - **module**: check --experimental-require-module separately from detection (Joyee Cheung) [#&#8203;55250](nodejs/node#55250)
-   \[[`cf8701c866`](nodejs/node@cf8701c866)] - **module**: use kNodeModulesRE to detect node_modules (Joyee Cheung) [#&#8203;55243](nodejs/node#55243)
-   \[[`dc66632261`](nodejs/node@dc66632261)] - **module**: support 'module.exports' interop export in require(esm) (Guy Bedford) [#&#8203;54563](nodejs/node#54563)
-   \[[`1ac1dda9a4`](nodejs/node@1ac1dda9a4)] - **(SEMVER-MINOR)** **module**: unflag --experimental-require-module (Joyee Cheung) [#&#8203;55085](nodejs/node#55085)
-   \[[`683c93f45f`](nodejs/node@683c93f45f)] - **module**: refator ESM loader for adding future synchronous hooks (Joyee Cheung) [#&#8203;54769](nodejs/node#54769)
-   \[[`df8a045afe`](nodejs/node@df8a045afe)] - **(SEMVER-MINOR)** **module**: implement the "module-sync" exports condition (Joyee Cheung) [#&#8203;54648](nodejs/node#54648)
-   \[[`249d82b686`](nodejs/node@249d82b686)] - **module**: report unfinished TLA in ambiguous modules (Antoine du Hamel) [#&#8203;54980](nodejs/node#54980)
-   \[[`1925d729f9`](nodejs/node@1925d729f9)] - **module**: remove bogus assertion in CJS entrypoint handling with --import (Joyee Cheung) [#&#8203;54592](nodejs/node#54592)
-   \[[`d1331fccb2`](nodejs/node@d1331fccb2)] - **module**: do not warn for typeless package.json when there isn't one (Joyee Cheung) [#&#8203;54045](nodejs/node#54045)
-   \[[`9916458b44`](nodejs/node@9916458b44)] - **(SEMVER-MINOR)** **module**: unflag detect-module (Geoffrey Booth) [#&#8203;53619](nodejs/node#53619)
-   \[[`f9dc1eaef5`](nodejs/node@f9dc1eaef5)] - **(SEMVER-MINOR)** **module**: add \__esModule to require()'d ESM (Joyee Cheung) [#&#8203;52166](nodejs/node#52166)
-   \[[`b86f575504`](nodejs/node@b86f575504)] - **module**: do not set CJS variables for Worker eval (Antoine du Hamel) [#&#8203;53050](nodejs/node#53050)
-   \[[`30ed93db12`](nodejs/node@30ed93db12)] - **module**: cache synchronous module jobs before linking (Joyee Cheung) [#&#8203;52868](nodejs/node#52868)
-   \[[`a03faf289d`](nodejs/node@a03faf289d)] - **module**: support ESM detection in the CJS loader (Joyee Cheung) [#&#8203;52047](nodejs/node#52047)
-   \[[`b07ad39bda`](nodejs/node@b07ad39bda)] - **module**: detect ESM syntax by trying to recompile as SourceTextModule (Joyee Cheung) [#&#8203;52413](nodejs/node#52413)
-   \[[`132a5c190f`](nodejs/node@132a5c190f)] - **module**: eliminate performance cost of detection for cjs entry (Geoffrey Booth) [#&#8203;52093](nodejs/node#52093)
-   \[[`55a57a189f`](nodejs/node@55a57a189f)] - **node-api**: remove deprecated attribute from napi_module_register (Vladimir Morozov) [#&#8203;56162](nodejs/node#56162)
-   \[[`4fba01911d`](nodejs/node@4fba01911d)] - **(SEMVER-MINOR)** **process**: add process.features.require_module (Joyee Cheung) [#&#8203;55241](nodejs/node#55241)
-   \[[`c0fad18ac0`](nodejs/node@c0fad18ac0)] - **src**: add nullptr handling from X509\_STORE_new() (Burkov Egor) [#&#8203;56700](nodejs/node#56700)
-   \[[`5b88d48cbb`](nodejs/node@5b88d48cbb)] - **src**: add default value for RSACipherConfig mode field (Burkov Egor) [#&#8203;56701](nodejs/node#56701)
-   \[[`e3b69e57a6`](nodejs/node@e3b69e57a6)] - **src**: fix build with GCC 15 (tjuhaszrh) [#&#8203;56740](nodejs/node#56740)
-   \[[`a7c1d8c0e8`](nodejs/node@a7c1d8c0e8)] - **src**: initialize FSReqWrapSync in path that uses it (Michaël Zasso) [#&#8203;56613](nodejs/node#56613)
-   \[[`c06ac66356`](nodejs/node@c06ac66356)] - **src**: fix undefined script name in error source (Chengzhong Wu) [#&#8203;56502](nodejs/node#56502)
-   \[[`500f3ccc66`](nodejs/node@500f3ccc66)] - **src**: lock the thread properly in snapshot builder (Joyee Cheung) [#&#8203;56327](nodejs/node#56327)
-   \[[`cf25a5edeb`](nodejs/node@cf25a5edeb)] - **src**: drain platform tasks before creating startup snapshot (Chengzhong Wu) [#&#8203;56403](nodejs/node#56403)
-   \[[`8af1b53bb8`](nodejs/node@8af1b53bb8)] - **src**: safely remove the last line from dotenv (Shima Ryuhei) [#&#8203;55982](nodejs/node#55982)
-   \[[`bb57e909aa`](nodejs/node@bb57e909aa)] - **src**: remove `base64` from `process.versions` (Richard Lau) [#&#8203;53442](nodejs/node#53442)
-   \[[`b8c89a693e`](nodejs/node@b8c89a693e)] - **src**: add `--env-file-if-exists` flag (Bosco Domingo) [#&#8203;53060](nodejs/node#53060)
-   \[[`9097de073a`](nodejs/node@9097de073a)] - **src**: don't match after `--` in `Dotenv::GetPathFromArgs` (Aviv Keller) [#&#8203;54237](nodejs/node#54237)
-   \[[`ececd225b6`](nodejs/node@ececd225b6)] - **src**: implement IsInsideNodeModules() in C++ (Joyee Cheung) [#&#8203;55286](nodejs/node#55286)
-   \[[`18593b7d3e`](nodejs/node@18593b7d3e)] - **src**: refactor embedded entrypoint loading (Joyee Cheung) [#&#8203;53573](nodejs/node#53573)
-   \[[`d7aefc0524`](nodejs/node@d7aefc0524)] - **stream**: fix typo in ReadableStreamBYOBReader.readIntoRequests (Mattias Buelens) [#&#8203;56560](nodejs/node#56560)
-   \[[`fe5f7bcd47`](nodejs/node@fe5f7bcd47)] - **stream**: validate undefined sizeAlgorithm in WritableStream (Jason Zhang) [#&#8203;56067](nodejs/node#56067)
-   \[[`12744c1fd4`](nodejs/node@12744c1fd4)] - **test**: reduce number of written chunks (Luigi Pinca) [#&#8203;56757](nodejs/node#56757)
-   \[[`e121d7d62c`](nodejs/node@e121d7d62c)] - **test**: fix invalid common.mustSucceed() usage (Luigi Pinca) [#&#8203;56756](nodejs/node#56756)
-   \[[`11b82de7ed`](nodejs/node@11b82de7ed)] - **test**: use strict mode in global setters test (Rich Trott) [#&#8203;56742](nodejs/node#56742)
-   \[[`f9d6e35c5e`](nodejs/node@f9d6e35c5e)] - **test**: cleanup and simplify test-crypto-aes-wrap (James M Snell) [#&#8203;56748](nodejs/node#56748)
-   \[[`792ce98699`](nodejs/node@792ce98699)] - **test**: do not use common.isMainThread (Luigi Pinca) [#&#8203;56768](nodejs/node#56768)
-   \[[`4f0cf475e0`](nodejs/node@4f0cf475e0)] - **test**: add test that uses multibyte for path and resolves modules (yamachu) [#&#8203;56696](nodejs/node#56696)
-   \[[`3bc8d273c2`](nodejs/node@3bc8d273c2)] - **test**: add missing test for env file (Jonas) [#&#8203;56642](nodejs/node#56642)
-   \[[`ad39367712`](nodejs/node@ad39367712)] - **test**: enforce strict mode in test-zlib-const (Rich Trott) [#&#8203;56689](nodejs/node#56689)
-   \[[`ca79914137`](nodejs/node@ca79914137)] - **test**: test-stream-compose.js doesn't need internals (Meghan Denny) [#&#8203;56619](nodejs/node#56619)
-   \[[`08bde67101`](nodejs/node@08bde67101)] - **test**: add maxCount and gcOptions to gcUntil() (Joyee Cheung) [#&#8203;56522](nodejs/node#56522)
-   \[[`40a0f6f6e3`](nodejs/node@40a0f6f6e3)] - **test**: mark test-worker-prof as flaky on smartos (Joyee Cheung) [#&#8203;56583](nodejs/node#56583)
-   \[[`d17bf2f62a`](nodejs/node@d17bf2f62a)] - **test**: update test-child-process-bad-stdio to use node:test (Colin Ihrig) [#&#8203;56562](nodejs/node#56562)
-   \[[`5660b99b43`](nodejs/node@5660b99b43)] - **test**: disable openssl 3.4.0 incompatible tests (Jelle van der Waa) [#&#8203;56160](nodejs/node#56160)
-   \[[`861c99f351`](nodejs/node@861c99f351)] - **test**: make test-crypto-hash compatible with OpenSSL > 3.4.0 (Jelle van der Waa) [#&#8203;56160](nodejs/node#56160)
-   \[[`597a39b5f9`](nodejs/node@597a39b5f9)] - **test**: update error code in tls-psk-circuit for for OpenSSL 3.4 (sebastianas) [#&#8203;56420](nodejs/node#56420)
-   \[[`721e9e1217`](nodejs/node@721e9e1217)] - **test**: add initial test426 coverage (Chengzhong Wu) [#&#8203;56436](nodejs/node#56436)
-   \[[`cfe5380c44`](nodejs/node@cfe5380c44)] - **test**: update test-set-http-max-http-headers to use node:test (Colin Ihrig) [#&#8203;56439](nodejs/node#56439)
-   \[[`51ff71a87a`](nodejs/node@51ff71a87a)] - **test**: update test-child-process-windows-hide to use node:test (Colin Ihrig) [#&#8203;56437](nodejs/node#56437)
-   \[[`d6aca0cd89`](nodejs/node@d6aca0cd89)] - **test**: increase spin for eventloop test on s390 (Michael Dawson) [#&#8203;56228](nodejs/node#56228)
-   \[[`82461af6ec`](nodejs/node@82461af6ec)] - **test**: migrate message eval tests from Python to JS (Yiyun Lei) [#&#8203;50482](nodejs/node#50482)
-   \[[`5083bbb2bb`](nodejs/node@5083bbb2bb)] - **test**: remove async-hooks/test-writewrap flaky designation (Luigi Pinca) [#&#8203;56048](nodejs/node#56048)
-   \[[`b4b26e973d`](nodejs/node@b4b26e973d)] - **test**: deflake test-esm-loader-hooks-inspect-brk (Luigi Pinca) [#&#8203;56050](nodejs/node#56050)
-   \[[`182be26b8a`](nodejs/node@182be26b8a)] - **test**: update WPT for url to [`67880a4`](nodejs/node@67880a4) (Node.js GitHub Bot) [#&#8203;55999](nodejs/node#55999)
-   \[[`e67a84902f`](nodejs/node@e67a84902f)] - **test_runner**: remove unused errors (Pietro Marchini) [#&#8203;56607](nodejs/node#56607)
-   \[[`4274c6a015`](nodejs/node@4274c6a015)] - **test_runner**: run single test file benchmark (Pietro Marchini) [#&#8203;56479](nodejs/node#56479)
-   \[[`e57004458b`](nodejs/node@e57004458b)] - **tools**: update doc to new version (Node.js GitHub Bot) [#&#8203;56259](nodejs/node#56259)
-   \[[`e039f2b571`](nodejs/node@e039f2b571)] - **tools**: do not throw on missing `create-release-proposal.sh` (Antoine du Hamel) [#&#8203;56704](nodejs/node#56704)
-   \[[`9a1e314498`](nodejs/node@9a1e314498)] - **tools**: fix tools-deps-update (Daniel Lemire) [#&#8203;56684](nodejs/node#56684)
-   \[[`d6469b5287`](nodejs/node@d6469b5287)] - **tools**: do not throw on missing `create-release-proposal.sh` (Antoine du Hamel) [#&#8203;56695](nodejs/node#56695)
-   \[[`e162476fdc`](nodejs/node@e162476fdc)] - **tools**: fix permissions in `lint-release-proposal` workflow (Antoine du Hamel) [#&#8203;56614](nodejs/node#56614)
-   \[[`914b4675c8`](nodejs/node@914b4675c8)] - **tools**: edit `create-release-proposal` workflow (Antoine du Hamel) [#&#8203;56540](nodejs/node#56540)
-   \[[`4ff9aa7235`](nodejs/node@4ff9aa7235)] - **tools**: validate commit list as part of `lint-release-commit` (Antoine du Hamel) [#&#8203;56291](nodejs/node#56291)
-   \[[`589d0ae8ea`](nodejs/node@589d0ae8ea)] - **tools**: fix loong64 build failed (Xiao-Tao) [#&#8203;56466](nodejs/node#56466)
-   \[[`bc8c39bff8`](nodejs/node@bc8c39bff8)] - **tools**: disable unneeded rule ignoring in Python linting (Rich Trott) [#&#8203;56429](nodejs/node#56429)
-   \[[`3b130002bb`](nodejs/node@3b130002bb)] - **tools**: add release line label when opening release proposal (Antoine du Hamel) [#&#8203;56317](nodejs/node#56317)
-   \[[`73b5c16684`](nodejs/node@73b5c16684)] - **(SEMVER-MINOR)** **worker**: add postMessageToThread (Paolo Insogna) [#&#8203;53682](nodejs/node#53682)

</details>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOTEuNCIsInVwZGF0ZWRJblZlciI6IjM5LjIwNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.walbeck.it/mwalbeck/docker-cyberchef/pulls/375
Co-authored-by: renovate-bot <[email protected]>
Co-committed-by: renovate-bot <[email protected]>
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. backport-open-v20.x Indicate that the PR has an open backport c++ Issues and PRs that require attention from people who are familiar with C++. commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. esm Issues and PRs related to the ECMAScript Modules implementation. lib / src Issues and PRs related to general changes in the lib or src directory. module Issues and PRs related to the module subsystem. needs-ci PRs that need a full CI run. performance Issues and PRs related to the performance of Node.js.
Projects
None yet
Development

Successfully merging this pull request may close these issues.