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

v20.17.0 proposal #54447

Merged
merged 176 commits into from
Aug 21, 2024
Merged

v20.17.0 proposal #54447

merged 176 commits into from
Aug 21, 2024

Conversation

marco-ippolito
Copy link
Member

@marco-ippolito marco-ippolito commented Aug 19, 2024

2024-08-21, Version 20.17.0 'Iron' (LTS), @marco-ippolito

module: support require()ing synchronous ESM graphs

This release adds require() support for synchronous ESM graphs under
the flag --experimental-require-module.

If --experimental-require-module is enabled, and the ECMAScript
module being loaded by require() meets the following requirements:

  • Explicitly marked as an ES module with a "type": "module" field in the closest package.json or a .mjs extension.
  • Fully synchronous (contains no top-level await).

require() will load the requested module as an ES Module, and return
the module name space object. In this case it is similar to dynamic
import() but is run synchronously and returns the name space object
directly.

Contributed by Joyee Cheung in #51977

path: add matchesGlob method

Glob patterns can now be tested against individual paths via the path.matchesGlob(path, pattern) method.

Contributed by Aviv Keller in #52881

stream: expose DuplexPair API

The function duplexPair returns an array with two items,
each being a Duplex stream connected to the other side:

const [ sideA, sideB ] = duplexPair();

Whatever is written to one stream is made readable on the other. It provides
behavior analogous to a network connection, where the data written by the client
becomes readable by the server, and vice-versa.

Contributed by Austin Wright in #34111

Other Notable Changes

  • [8e64c02b19] - (SEMVER-MINOR) http: add diagnostics channel http.client.request.error (Kohei Ueno) #54054
  • [ae30674991] - meta: add jake to collaborators (jakecastelli) #54004
  • [4a3ecbfc9b] - (SEMVER-MINOR) stream: implement min option for ReadableStreamBYOBReader.read (Mattias Buelens) #50888

Commits

  • [b3a2726cbc] - assert: use isError instead of instanceof in innerOk (Pietro Marchini) #53980
  • [c7e4c3daf4] - benchmark: add cpSync benchmark (Yagiz Nizipli) #53612
  • [a52de8c5ff] - bootstrap: print --help message using console.log (Jacob Hummer) #51463
  • [61b90e7c5e] - build: update gcovr to 7.2 and codecov config (Benjamin E. Coe) #54019
  • [a9c04eaa27] - build: ensure v8_pointer_compression_sandbox is enabled on 64bit (Shelley Vohr) #53884
  • [342a663d7a] - build: trigger coverage ci when updating codecov (Yagiz Nizipli) #53929
  • [5727b4d129] - build: update codecov coverage build count (Yagiz Nizipli) #53929
  • [977af25870] - build: disable test-asan workflow (Michaël Zasso) #53844
  • [04798fb104] - build: fix build warning of c-ares under GN build (Cheng) #53750
  • [5ec5e78574] - build: fix mac build error of c-ares under GN (Cheng) #53687
  • [3d8721f0a4] - build: add version-specific library path for AIX (Richard Lau) #53585
  • [ffb0bd344d] - build, tools: drop leading / from r2dir (Richard Lau) #53951
  • [a2d74f4c31] - build,tools: simplify upload of shasum signatures (Michaël Zasso) #53892
  • [993bb3b6e7] - child_process: fix incomplete prototype pollution hardening (Liran Tal) #53781
  • [137a2e5766] - cli: document --inspect port 0 behavior (Aviv Keller) #53782
  • [820e6e1737] - cli: update node.1 to reflect Atom's sunset (Aviv Keller) #53734
  • [fa0e8d7b3b] - crypto: avoid std::function (Tobias Nießen) #53683
  • [460240c368] - crypto: make deriveBits length parameter optional and nullable (Filip Skokan) #53601
  • [ceb1d5e00a] - crypto: avoid taking ownership of OpenSSL objects (Tobias Nießen) #53460
  • [44268c27eb] - deps: update corepack to 0.29.3 (Node.js GitHub Bot) #54072
  • [496975ece0] - deps: update c-ares to v1.32.3 (Node.js GitHub Bot) #54020
  • [5eea419349] - deps: update c-ares to v1.32.2 (Node.js GitHub Bot) #53865
  • [8c8e3688c5] - deps: update googletest to 4b21f1a (Node.js GitHub Bot) #53842
  • [78f6b34c77] - deps: update minimatch to 10.0.1 (Node.js GitHub Bot) #53841
  • [398f7acca3] - deps: update corepack to 0.29.2 (Node.js GitHub Bot) #53838
  • [fa8f99d90b] - deps: update simdutf to 5.3.0 (Node.js GitHub Bot) #53837
  • [a19b28336b] - deps: update ada to 2.9.0 (Node.js GitHub Bot) #53748
  • [2f66c7e707] - deps: upgrade npm to 10.8.2 (npm team) #53799
  • [2a2620e7c0] - deps: update googletest to 34ad51b (Node.js GitHub Bot) #53157
  • [c01ce60ce7] - deps: update googletest to 305e5a2 (Node.js GitHub Bot) #53157
  • [832328ea01] - deps: update c-ares to v1.32.1 (Node.js GitHub Bot) #53753
  • [878e9a4ae7] - deps: update minimatch to 9.0.5 (Node.js GitHub Bot) #53646
  • [4647e6b5c5] - deps: update c-ares to v1.32.0 (Node.js GitHub Bot) #53722
  • [30310bf887] - doc: move numCPUs require to top of file in cluster CJS example (Alfredo González) #53932
  • [36170eddca] - doc: update security-release process to automated one (Rafael Gonzaga) #53877
  • [55f5e76ba7] - doc: fix typo in technical-priorities.md (YoonSoo_Shin) #54094
  • [1c0ccc0ca8] - doc: fix typo in diagnostic tooling support tiers document (Taejin Kim) #54058
  • [6a5120ff0f] - doc: move GeoffreyBooth to TSC regular member (Geoffrey Booth) #54047
  • [ead05aad2a] - doc: fix typo in recognizing-contributors (Marco Ippolito) #53990
  • [25e59aebac] - doc: update boxstarter README (Aviv Keller) #53785
  • [a3183fb927] - doc: add info about prefix-only modules to module.builtinModules (Grigory) #53954
  • [89599e025f] - doc: remove scroll-behavior: smooth; (Cloyd Lau) #53942
  • [139c62e40c] - doc: move --test-coverage-{ex,in}clude to proper location (Colin Ihrig) #53926
  • [233aba90ea] - doc: update api_assets README for new files (Aviv Keller) #53676
  • [44a1cbe98a] - doc: add MattiasBuelens to collaborators (Mattias Buelens) #53895
  • [f5280ddbc5] - doc: fix casing of GitHub handle for two collaborators (Antoine du Hamel) #53857
  • [9224e3eef1] - doc: update release-post nodejs.org script (Rafael Gonzaga) #53762
  • [f87eed8de4] - doc: move MylesBorins to emeritus (Myles Borins) #53760
  • [32ac80ae8d] - doc: add Rafael to the last security release (Rafael Gonzaga) #53769
  • [e71aa7e98b] - doc: use mock.callCount() in examples (Sébastien Règne) #53754
  • [f64db24312] - doc: clarify authenticity of plaintexts in update (Tobias Nießen) #53784
  • [51e736ac83] - doc: add option to have support me link (Michael Dawson) #53312
  • [9804731d0f] - doc: update scroll-padding-top to 4rem (Cloyd Lau) #53662
  • [229f7f8b8a] - doc: mention v8.setFlagsFromString to pm (Rafael Gonzaga) #53731
  • [98d59aa929] - doc: remove the last <pre> tag (Claudio W) #53741
  • [60ee41df08] - doc: exclude voting and regular TSC from spotlight (Michael Dawson) #53694
  • [c3536cfa99] - doc: fix releases guide for recent Git versions (Michaël Zasso) #53709
  • [3b632e1871] - doc: require node:process in assert doc examples (Alfredo González) #53702
  • [754090c110] - doc: add additional explanation to the wildcard section in permissions (jakecastelli) #53664
  • [4346de7267] - doc: mark NODE_MODULE_VERSION for Node.js 22.0.0 (Michaël Zasso) #53650
  • [758178bd72] - doc: include node.module_timer on available categories (Vinicius Lourenço) #53638
  • [e0d213df2b] - doc: fix module customization hook examples (Elliot Goodrich) #53637
  • [43ac5a2441] - doc: fix doc for correct usage with plan & TestContext (Emil Tayeb) #53615
  • [5076f0d292] - doc: remove some news issues that are no longer (Michael Dawson) #53608
  • [c997dbef34] - doc: add issue for news from ambassadors (Michael Dawson) #53607
  • [16d55f1d25] - doc: add esm example for os (Leonardo Peixoto) #53604
  • [156fc536f2] - doc: clarify usage of coverage reporters (Eliphaz Bouye) #53523
  • [f8f247bc99] - doc: document addition testing options (Aviv Keller) #53569
  • [73860aca56] - doc: clarify that fs.exists() may return false for existing symlink (Tobias Nießen) #53566
  • [59c5c5c73e] - doc: note http.closeAllConnections excludes upgraded sockets (Rob Hogan) #53560
  • [1cd3c8eb27] - doc: fix typo (EhsanKhaki) #53397
  • [3c5e593e2a] - doc, meta: add PTAL to glossary (Aviv Keller) #53770
  • [f336e61257] - doc, test: tracing channel hasSubscribers getter (Thomas Hunter II) #52908
  • [4187b81439] - doc, typings: events.once accepts symbol event type (René) #53542
  • [3cdf94d403] - doc,tty: add documentation for ReadStream and WriteStream (jakecastelli) #53567
  • [5d03f6fab7] - esm: move hooks test with others (Geoffrey Booth) #53558
  • [490f15a99b] - fs: ensure consistency for mkdtemp in both fs and fs/promises (YieldRay) #53776
  • [8e64c02b19] - (SEMVER-MINOR) http: add diagnostics channel http.client.request.error (Kohei Ueno) #54054
  • [0d70c79ebf] - lib: optimize copyError with ObjectAssign in primordials (HEESEUNG) #53999
  • [a4ff2ac0f0] - lib: improve cluster/primary code (Ehsan Khakifirooz) #53756
  • [c667fbd988] - lib: improve error message when index not found on cjs (Vinicius Lourenço) #53859
  • [51ba566171] - lib: decorate async stack trace in source maps (Chengzhong Wu) #53860
  • [d012dd3d29] - lib: remove path.resolve from permissions.js (Rafael Gonzaga) #53729
  • [1e9ff50446] - lib: add toJSON to PerformanceMeasure (theanarkh) #53603
  • [3a2d8bffa5] - lib: convert WeakMaps in cjs loader with private symbol properties (Chengzhong Wu) #52095
  • [e326342bd7] - meta: add sqlite to js subsystems (Alex Yang) #53911
  • [bfabfb4d17] - meta: move tsc member to emeritus (Michael Dawson) #54029
  • [ae30674991] - meta: add jake to collaborators (jakecastelli) #54004
  • [6ca0cfc602] - meta: remove license for hljs (Aviv Keller) #53970
  • [e6ba121e83] - meta: make more bug-report information required (Aviv Keller) #53718
  • [1864cddd0c] - meta: store actions secrets in environment (Aviv Keller) #53930
  • [c0b24e5071] - meta: move anonrig to tsc voting members (Yagiz Nizipli) #53888
  • [e60b089f7f] - meta: remove redudant logging from dep updaters (Aviv Keller) #53783
  • [bff6995ec3] - meta: change email address of anonrig (Yagiz Nizipli) #53829
  • [c2bb46020a] - meta: add node_sqlite.c to PR label config (Aviv Keller) #53797
  • [b8d2bbc6d6] - meta: move one or more collaborators to emeritus (Node.js GitHub Bot) #53758
  • [0ad4b7c1f7] - meta: use HTML entities in commit-queue comment (Aviv Keller) #53744
  • [aa0c5c25d1] - meta: move regular TSC member to emeritus (Michael Dawson) #53693
  • [a5f5b4550b] - meta: bump codecov/codecov-action from 4.4.1 to 4.5.0 (dependabot[bot]) #53675
  • [f84e215c90] - meta: bump mozilla-actions/sccache-action from 0.0.4 to 0.0.5 (dependabot[bot]) #53674
  • [d5a9c249d3] - meta: bump github/codeql-action from 3.25.7 to 3.25.11 (dependabot[bot]) #53673
  • [39d6c780c8] - meta: bump actions/checkout from 4.1.6 to 4.1.7 (dependabot[bot]) #53672
  • [bb6fe38a34] - meta: bump peter-evans/create-pull-request from 6.0.5 to 6.1.0 (dependabot[bot]) #53671
  • [5dcdfb5e6b] - meta: bump step-security/harden-runner from 2.8.0 to 2.8.1 (dependabot[bot]) #53670
  • [44d901a1c9] - meta: move member from TSC regular to emeriti (Michael Dawson) #53599
  • [0c91186afa] - meta: warnings bypass deprecation cycle (Benjamin Gruenbaum) #53513
  • [bcd08bef60] - meta: prevent constant references to issues in versioning (Aviv Keller) #53564
  • [7625dc4927] - module: fix submodules loaded by require() and import() (Joyee Cheung) #52487
  • [6c4f4772e3] - module: tidy code and comments (Jacob Smith) #52437
  • [51b88faeac] - module: disallow CJS <-> ESM edges in a cycle from require(esm) (Joyee Cheung) #52264
  • [4dae68ced4] - module: centralize SourceTextModule compilation for builtin loader (Joyee Cheung) #52291
  • [cad46afc07] - (SEMVER-MINOR) module: support require()ing synchronous ESM graphs (Joyee Cheung) #51977
  • [ac58c829a1] - node-api: add property keys benchmark (Chengzhong Wu) #54012
  • [e6a4104bd1] - node-api: rename nogc to basic (Gabriel Schulhof) #53830
  • [57b8b8e18e] - (SEMVER-MINOR) path: add matchesGlob method (Aviv Keller) #52881
  • [bf6aa53299] - process: unify experimental warning messages (Aviv Keller) #53704
  • [2a3ae16e62] - src: expose LookupAndCompile with parameters (Shelley Vohr) #53886
  • [0109f9c961] - src: simplify AESCipherTraits::AdditionalConfig (Tobias Nießen) #53890
  • [6bafe8a457] - src: fix -Wshadow warning (Shelley Vohr) #53885
  • [4c36d6c47a] - src: fix slice of slice of file-backed Blob (Josh Lee) #53972
  • [848c2d59fb] - src: cache invariant code motion (Rafael Gonzaga) #53879
  • [acaf5dd1cd] - src: avoid strcmp in ImportJWKAsymmetricKey (Tobias Nießen) #53813
  • [b71250aaf9] - src: replace ToLocalChecked uses with ToLocal in node-file (James M Snell) #53869
  • [aff9a5339a] - src: fix env-file flag to ignore spaces before quotes (Mohit Malhotra) #53786
  • [e352a4ef27] - src: update outdated references to spec sections (Tobias Nießen) #53832
  • [1a4da22a60] - src: use Maybe<void> in ManagedEVPPKey (Tobias Nießen) #53811
  • [0c24b91bd2] - src: fix error handling in ExportJWKAsymmetricKey (Tobias Nießen) #53767
  • [81cd84c716] - src: use Maybe<void> in node::crypto::error (Tobias Nießen) #53766
  • [8135f3616d] - src: fix typo in node.h (Daeyeon Jeong) #53759
  • [e6d735a997] - src: document the Node.js context embedder data (Joyee Cheung) #53611
  • [584beaa2ed] - src: zero-initialize data that are copied into the snapshot (Joyee Cheung) #53563
  • [ef5dabd8c6] - src: fix Worker termination when '--inspect-brk' is passed (Daeyeon Jeong) #53724
  • [62f4f6f48e] - src: remove ArrayBufferAllocator::Reallocate override (Shu-yu Guo) #52910
  • [a6dd8643fa] - src: reduce unnecessary serialization of CLI options in C++ (Joyee Cheung) #52451
  • [31fdb881cf] - src,lib: expose getCategoryEnabledBuffer to use on node.http (Vinicius Lourenço) #53602
  • [2eea8502e1] - src,test: further cleanup references to osx (Daniel Bayley) #53820
  • [7c21bb99a5] - (SEMVER-MINOR) stream: expose DuplexPair API (Austin Wright) #34111
  • [56299f7309] - stream: improve inspector ergonomics (Benjamin Gruenbaum) #53800
  • [9b82b15230] - stream: update ongoing promise in async iterator return() method (Mattias Buelens) #52657
  • [4a3ecbfc9b] - (SEMVER-MINOR) stream: implement min option for ReadableStreamBYOBReader.read (Mattias Buelens) #50888
  • [bd996bf694] - test: do not swallow uncaughtException errors in exit code tests (Meghan Denny) #54039
  • [77761af077] - test: move shared module to test/common (Rich Trott) #54042
  • [bec88ce138] - test: skip sea tests with more accurate available disk space estimation (Chengzhong Wu) #53996
  • [9a98ad47cd] - test: remove unnecessary console log (KAYYY) #53812
  • [364d09cf0a] - test: add comments and rename test for timer robustness (Rich Trott) #54008
  • [5c5093dc0a] - test: add test for one arg timers to increase coverage (Carlos Espa) #54007
  • [43ede1ae0b] - test: mark 'test/parallel/test-sqlite.js' as flaky (Colin Ihrig) #54031
  • [0ad783cb42] - test: mark test-pipe-file-to-http as flaky (jakecastelli) #53751
  • [f2b4fd3544] - test: compare paths on Windows without considering case (Early Riser) #53993
  • [2e69e5f4d2] - test: skip sea tests in large debug builds (Chengzhong Wu) #53918
  • [56c26fe6e5] - test: skip --title check on IBM i (Abdirahim Musse) #53952
  • [6d0b8ded00] - test: reduce flakiness of test-assert-esm-cjs-message-verify (Antoine du Hamel) #53967
  • [edb75aebd7] - test: use PYTHON executable from env in assertSnapshot (Antoine du Hamel) #53938
  • [be94e470a6] - test: deflake test-blob-file-backed (Luigi Pinca) #53920
  • [c2b0dcd165] - test: un-set inspector-async-hook-setup-at-inspect-brk as flaky (Abdirahim Musse) #53692
  • [6dc18981ac] - test: use python3 instead of python in pummel test (Mathis Wiehl) #53057
  • [662bf524e1] - test: do not assume cwd in snapshot tests (Antoine du Hamel) #53146
  • [a07526702a] - test: fix OpenSSL version checks (Richard Lau) #53503
  • [2b70018d11] - test: refactor, add assertion to http-request-end (jakecastelli) #53411
  • [c0262c1561] - test_runner: switched to internal readline interface (Emil Tayeb) #54000
  • [fb7342246c] - test_runner: do not throw on mocked clearTimeout() (Aksinya Bykova) #54005
  • [367f9e77f3] - test_runner: cleanup global event listeners after run (Eddie Abbondanzio) #53878
  • [206c668ee7] - test_runner: remove plan option from run() (Colin Ihrig) #53834
  • [8660d481e5] - tls: add setKeyCert() to tls.Socket (Brian White) #53636
  • [9c5beabd83] - tools: fix SLACK_TITLE in invalid commit workflow (Antoine du Hamel) #53912
  • [4dedf2aead] - tools: update lint-md-dependencies (Node.js GitHub Bot) #53840
  • [642d5c5d30] - tools: use v8_features.json to populate config.gypi (Cheng) #53749
  • [031206544d] - tools: update lint-md-dependencies to unified@11.0.5 (Node.js GitHub Bot) #53555
  • [8404421ea6] - tools: replace reference to NodeMainInstance with SnapshotBuilder (codediverdev) #53544
  • [2d8490fed5] - typings: add fs_dir types (Yagiz Nizipli) #53631
  • [325eae0b3f] - url: fix typo (KAYYY) #53827
  • [7fc45f5e3f] - url: reduce unnecessary string copies (Yagiz Nizipli) #53628
  • [1d961facf1] - url: add missing documentation for URL.parse() (Yagiz Nizipli) #53733
  • [ce877c6d0f] - util: fix crashing when emitting new Buffer() deprecation warning WASM crashes on Node v22.2.0 if it reaches the new Buffer() deprecation warning #53075 (Aras Abbasi) #53089
  • [d6d04279ca] - worker: allow copied NODE_OPTIONS in the env setting (Joyee Cheung) #53596

joyeecheung and others added 8 commits August 8, 2024 15:02
This patch adds `require()` support for synchronous ESM graphs under
the flag `--experimental-require-module`

This is based on the the following design aspect of ESM:

- The resolution can be synchronous (up to the host)
- The evaluation of a synchronous graph (without top-level await) is
  also synchronous, and, by the time the module graph is instantiated
  (before evaluation starts), this is is already known.

If `--experimental-require-module` is enabled, and the ECMAScript
module being loaded by `require()` meets the following requirements:

- Explicitly marked as an ES module with a `"type": "module"` field in
  the closest package.json or a `.mjs` extension.
- Fully synchronous (contains no top-level `await`).

`require()` will load the requested module as an ES Module, and return
the module name space object. In this case it is similar to dynamic
`import()` but is run synchronously and returns the name space object
directly.

```mjs
// point.mjs
export function distance(a, b) {
  return (b.x - a.x) ** 2 + (b.y - a.y) ** 2;
}
class Point {
  constructor(x, y) { this.x = x; this.y = y; }
}
export default Point;
```

```cjs
const required = require('./point.mjs');
// [Module: null prototype] {
//   default: [class Point],
//   distance: [Function: distance]
// }
console.log(required);

(async () => {
  const imported = await import('./point.mjs');
  console.log(imported === required);  // true
})();
```

If the module being `require()`'d contains top-level `await`, or the
module graph it `import`s contains top-level `await`,
[`ERR_REQUIRE_ASYNC_MODULE`][] will be thrown. In this case, users
should load the asynchronous module using `import()`.

If `--experimental-print-required-tla` is enabled, instead of throwing
`ERR_REQUIRE_ASYNC_MODULE` before evaluation, Node.js will evaluate the
module, try to locate the top-level awaits, and print their location to
help users fix them.

PR-URL: #51977
Backport-PR-URL: #53500
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Guy Bedford <guybedford@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
This refactors the code that compiles SourceTextModule for the
built-in ESM loader to use a common routine so that it's easier
to customize cache handling for the ESM loader. In addition
this introduces a common symbol for import.meta and import()
so that we don't need to create additional closures as handlers,
since we can get all the information we need from the V8 callback
already. This should reduce the memory footprint of ESM as well.

PR-URL: #52291
Backport-PR-URL: #53500
Refs: #47472
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
This patch disallows CJS <-> ESM edges when they come from
require(esm) requested in ESM evalaution.

Drive-by: don't reuse the cache for imported CJS modules to stash
source code of required ESM because the former is also used for
cycle detection.

PR-URL: #52264
Backport-PR-URL: #53500
Fixes: #52145
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
Reviewed-By: Guy Bedford <guybedford@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Symbol properties are typically more GC-efficient than using WeakMaps,
since WeakMap requires ephemeron GC. `module[kModuleExportNames]`
would be easier to read than `importedCJSCache.get(module).exportNames`
as well.

PR-URL: #52095
Backport-PR-URL: #53500
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
PR-URL: #52437
Backport-PR-URL: #53500
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Feng Yu <F3n67u@outlook.com>
Previously there is an edge case where submodules loaded by require()
may not be loaded by import() again from different intermediate
edges in the graph. This patch fixes that, added tests, and added
debug logs.

Drive-by: make loader a private field so it doesn't show up in logs.
PR-URL: #52487
Backport-PR-URL: #53500
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
PR-URL: #50888
Backport-PR-URL: #54044
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Debadree Chatterjee <debadree333@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
PR-URL: #52657
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Debadree Chatterjee <debadree333@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
@nodejs-github-bot
Copy link
Collaborator

Review requested:

  • @nodejs/actions
  • @nodejs/security-wg
  • @nodejs/tsc
  • @nodejs/v8-update

@nodejs-github-bot nodejs-github-bot added meta Issues and PRs related to the general management of the project. v20.x v20.x Issues that can be reproduced on v20.x or PRs targeting the v20.x-staging branch. labels Aug 19, 2024
marco-ippolito added a commit that referenced this pull request Aug 19, 2024
Notable changes:

benchmark:
  * add require-esm benchmark (Joyee Cheung) #52166
http:
  * (SEMVER-MINOR) add diagnostics channel `http.client.request.error` (Kohei Ueno) #54054
meta:
  * add jake to collaborators (jakecastelli) #54004
module:
  * (SEMVER-MINOR) support require()ing synchronous ESM graphs (Joyee Cheung) #51977
path:
  * (SEMVER-MINOR) add `matchesGlob` method (Aviv Keller) #52881
stream:
  * (SEMVER-MINOR) expose DuplexPair API (Austin Wright) #34111
  * (SEMVER-MINOR) implement `min` option for `ReadableStreamBYOBReader.read` (Mattias Buelens) #50888

PR-URL: #54447
marco-ippolito added a commit that referenced this pull request Aug 19, 2024
Notable changes:

http:
  * (SEMVER-MINOR) add diagnostics channel `http.client.request.error` (Kohei Ueno) #54054
meta:
  * add jake to collaborators (jakecastelli) #54004
module:
  * (SEMVER-MINOR) support require()ing synchronous ESM graphs (Joyee Cheung) #51977
path:
  * (SEMVER-MINOR) add `matchesGlob` method (Aviv Keller) #52881
stream:
  * (SEMVER-MINOR) expose DuplexPair API (Austin Wright) #34111
  * (SEMVER-MINOR) implement `min` option for `ReadableStreamBYOBReader.read` (Mattias Buelens) #50888

PR-URL: #54447
joyeecheung and others added 15 commits August 19, 2024 10:32
In this patch we split the serialization routine into two different
routines: `getCLIOptionsValues()` for only serializing the key-value
pairs and `getCLIOptionsInfo()` for getting additional information such
as help text etc. The former is used a lot more frequently than the
latter, which is only used for generating `--help` and building
`process.allowedNodeEnvironmentFlags`.

`getCLIOptionsValues()` also adds `--no-` entries for boolean options so
there is no need to special case in the JS land.
This patch also refactors the option serialization routines to
use v8::Object constructor that takes key-value pairs in one go
to avoid calling Map::Set or Object::Set repeatedly which can go
up to a patched prototype.

PR-URL: #52451
Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
PR-URL: #51463
Fixes: #51448
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
PR-URL: #53397
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com>
It's being deprecated and removed in V8.

PR-URL: #52910
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
PR-URL: #52881
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
It is often unnecessary to obtain (shared) ownership of OpenSSL objects
in this code, and it generally is more costly to do so as opposed to
just obtaining a pointer to the respective OpenSSL object. Therefore,
this patch replaces various OpenSSL function calls that take ownership
with ones that do not.

Refs: #53436
PR-URL: #53460
Reviewed-By: Daniel Lemire <daniel@lemire.me>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Co-authored-by: Gabriel Bota <gabriel.bota@dynatrace.com>
PR-URL: #53558
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
PR-URL: #53560
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Paolo Insogna <paolo@cowtech.it>
PR-URL: #53564
Reviewed-By: Jithil P Ponnan <jithil@outlook.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Given that this API is problematic in any case, we should be precise
about its (perhaps surprising) behavior.

PR-URL: #53566
Reviewed-By: Jithil P Ponnan <jithil@outlook.com>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com>
PR-URL: #53569
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
PR-URL: #53523
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
PR-URL: #53411
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
As per the original pull request that introduced the OpenSSL version
check in `parallel/test-crypto-dh`:

```
Error message change is test-only and uses the right error message for
versions >=3.0.12 in 3.0.x and >= 3.1.4 in 3.1.x series.
```

Fix the check so that:
- The older message is expected for OpenSSL 3.1.0.
- The newer message is expected for OpenSSL from 3.1.4 (e.g. 3.2.x).

Refs: #50395
PR-URL: #53503
Refs: #53382
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Allow for emitting new warnings without going through a deprecation
cycle.

Co-authored-by: Antoine du Hamel <duhamelantoine1995@gmail.com>
PR-URL: #53513
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
@marco-ippolito marco-ippolito added needs-ci PRs that need a full CI run. request-ci Add this label to start a Jenkins CI on a PR. labels Aug 19, 2024
@github-actions github-actions bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Aug 19, 2024
@nodejs-github-bot

This comment was marked as outdated.

Copy link

codecov bot commented Aug 19, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 88.75%. Comparing base (a71037e) to head (efbec04).
Report is 1812 commits behind head on v20.x.

Additional details and impacted files
@@            Coverage Diff             @@
##            v20.x   #54447      +/-   ##
==========================================
- Coverage   89.00%   88.75%   -0.26%     
==========================================
  Files         614      621       +7     
  Lines      161947   175224   +13277     
  Branches    33721    33918     +197     
==========================================
+ Hits       144145   155512   +11367     
- Misses      11249    13239    +1990     
+ Partials     6553     6473      -80     

see 447 files with indirect coverage changes

@marco-ippolito marco-ippolito added the request-ci Add this label to start a Jenkins CI on a PR. label Aug 19, 2024
@github-actions github-actions bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Aug 19, 2024
@nodejs-github-bot

This comment was marked as outdated.

@marco-ippolito
Copy link
Member Author

@nodejs/build can you have a look pls

14:11:56 efbec04208a3c8588d4e7f076c47d29dddf47976
14:11:56 [git-rebase@2] $ /bin/bash -ex /tmp/jenkins8429583307168237960.sh
14:11:56 + git checkout -B jenkins-node-test-commit-windows-fanned-efbec04208a3c8588d4e7f076c47d29dddf47976
14:11:56 Switched to and reset branch 'jenkins-node-test-commit-windows-fanned-efbec04208a3c8588d4e7f076c47d29dddf47976'
14:11:57 + grep -q '^67.158.54.159' /home/iojs/.ssh/known_hosts
14:11:57 + git push binary_tmp@67.158.54.159:binary_tmp.git +jenkins-node-test-commit-windows-fanned-efbec04208a3c8588d4e7f076c47d29dddf47976
14:12:01 remote: fatal: bad object refs/heads/jenkins-node-test-commit-windows-fanned-4481c1b28e19b92c8f4907e1c85beb92295b0e25-bin-win-vs2019-x86        
14:12:03 fatal: bad object refs/heads/jenkins-node-test-commit-windows-fanned-4481c1b28e19b92c8f4907e1c85beb92295b0e25-bin-win-vs2019-x86
14:12:03 To 67.158.54.159:binary_tmp.git
14:12:03  ! [remote rejected]         jenkins-node-test-commit-windows-fanned-efbec04208a3c8588d4e7f076c47d29dddf47976 -> jenkins-node-test-commit-windows-fanned-efbec04208a3c8588d4e7f076c47d29dddf47976 (missing necessary objects)
14:12:03 error: failed to push some refs to '67.158.54.159:binary_tmp.git'
14:12:03 Build step 'Execute shell' marked build as failure
14:12:03 $ ssh-agent -k
14:12:03 unset SSH_AUTH_SOCK;
14:12:03 unset SSH_AGENT_PID;
14:12:03 echo Agent pid 218066 killed;
14:12:03 [ssh-agent] Stopped.
14:12:03 Run condition [Always] enabling perform for step [[Execute shell]]
14:12:03 [git-rebase@2] $ /bin/sh -xe /tmp/jenkins15561271283809623851.sh
14:12:03 + [ -e .git/index.lock ]
14:12:04 + du -s .git
14:12:04 + cut -f1
14:12:04 + [ 2073422 -gt 5000000 ]
14:12:04 Collecting metadata...
14:12:04 Metadata collection done.
14:12:04 Notifying upstream projects of job completion
14:12:04 Finished: FAILURE

@marco-ippolito marco-ippolito added the request-ci Add this label to start a Jenkins CI on a PR. label Aug 20, 2024
@github-actions github-actions bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Aug 20, 2024
@nodejs-github-bot

This comment was marked as outdated.

@mcollina
Copy link
Member

It would be good to include undici v6.19.7 or v6.19.8 as they massively improve memory consumption for Next.js and React and fix a regression.

@openpef
Copy link

openpef commented Aug 20, 2024

Hi,
I don't see the integration of Openssl 3.0.14+quic: #54336
This version include several CVEs fixes, based on quictls/openssl#162
So it could be good to not having it for Node v22.x only #54452

@marco-ippolito
Copy link
Member Author

Hi, I don't see the integration of Openssl 3.0.14+quic: #54336 This version include several CVEs fixes, based on quictls/openssl#162 So it could be good to not having it for Node v22.x only #54452

It has not been released yet on v22 so it needs to wait at least 2 weeks before going into an LTS release line.

@marco-ippolito marco-ippolito added the request-ci Add this label to start a Jenkins CI on a PR. label Aug 20, 2024
@github-actions github-actions bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Aug 20, 2024
@nodejs-github-bot

This comment was marked as outdated.

@nodejs-github-bot
Copy link
Collaborator

nodejs-github-bot commented Aug 20, 2024

@marco-ippolito marco-ippolito merged commit efbec04 into v20.x Aug 21, 2024
95 of 113 checks passed
@marco-ippolito marco-ippolito deleted the v20.17.0-proposal branch August 21, 2024 16:07
marco-ippolito added a commit that referenced this pull request Aug 21, 2024
marco-ippolito added a commit that referenced this pull request Aug 21, 2024
Notable changes:

http:
  * (SEMVER-MINOR) add diagnostics channel `http.client.request.error` (Kohei Ueno) #54054
meta:
  * add jake to collaborators (jakecastelli) #54004
module:
  * (SEMVER-MINOR) support require()ing synchronous ESM graphs (Joyee Cheung) #51977
path:
  * (SEMVER-MINOR) add `matchesGlob` method (Aviv Keller) #52881
stream:
  * (SEMVER-MINOR) expose DuplexPair API (Austin Wright) #34111
  * (SEMVER-MINOR) implement `min` option for `ReadableStreamBYOBReader.read` (Mattias Buelens) #50888

PR-URL: #54447
marco-ippolito added a commit to nodejs/nodejs.org that referenced this pull request Aug 21, 2024
marco-ippolito added a commit to nodejs/nodejs.org that referenced this pull request Aug 21, 2024
github-merge-queue bot pushed a commit to nodejs/nodejs.org that referenced this pull request Aug 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needs-ci PRs that need a full CI run. release Issues and PRs related to Node.js releases. v20.x v20.x Issues that can be reproduced on v20.x or PRs targeting the v20.x-staging branch.
Projects
None yet
Development

Successfully merging this pull request may close these issues.