Node v22.10.0 (Current)

Antoine du Hamel

2024-10-16, Version 22.10.0 (Current), @aduh95

Notable Changes

New "module-sync" exports condition

This release introduces a "module-sync" exports condition that's enabled when require(esm) is enabled, so packages can supply a synchronous ES module to the Node.js module loader, no matter if it's being required or imported. This is similar to the "module" condition that bundlers have been using to support require(esm) in Node.js, and allows dual-package authors to opt into ESM-first only on newer versions of Node.js that supports require(esm) to avoid the dual-package hazard.

{
  "type": "module",
  "exports": {
    "node": {
      // On new version of Node.js, both require() and import get
      // the ESM version
      "module-sync": "./index.js",
      // On older version of Node.js, where "module-sync" and require(esm) are
      // not supported, use the CJS version to avoid dual-package hazard.
      // When package authors think it's time to drop support for older versions of
      // Node.js, they can remove the exports conditions and just use "main": "index.js".
      "default": "./dist/index.cjs"
    },
    // On any other environment, use the ESM version.
    "default": "./index.js"
  }
}

Or if the package is only meant to be run on Node.js and wants to fallback to CJS on older versions that don't have require(esm):

{
  "type": "module",
  "exports": {
    // On new version of Node.js, both require() and import get the ESM version
    "module-sync": "./index.js",
    // On older version of Node.js, where "module-sync" and require(esm) are
    // not supported, use the CJS version to avoid dual-package hazard.
    // When package authors think it's time to drop support for older versions of
    // Node.js, they can remove the exports conditions and just use "main": "index.js".
    "default": "./dist/index.cjs"
  }
}

For package authors: this only serves as a feature-detection mechanism for packages that wish to support both CJS and ESM users during the period when some active Node.js LTS versions support require(esm) while some older ones don't. When all active Node.js LTS lines support require(esm), packages can simplify their distributions by bumping the major version, dropping their CJS exports, and removing the module-sync exports condition (with only main or default targetting the ESM exports). If the package needs to support both bundlers and being run unbundled on Node.js during the transition period, use both module-sync and module and point them to the same ESM file. If the package already doesn't want to support older versions of Node.js that doesn't support require(esm), don't use this export condition.

For bundlers/tools: they should avoid implementing this stop-gap condition. Most existing bundlers implement the de-facto bundler standard module exports condition, and that should be enough to support users who want to bundle ESM from CJS consumers. Users who want both bundlers and Node.js to recognize the ESM exports can use both module/module-sync conditions during the transition period, and can drop module-sync+module when they no longer need to support older versions of Node.js. If tools do want to support this condition, it's recommended to make the resolution rules in the graph pointed by this condition match the Node.js native ESM rules to avoid divergence.

We ended up implementing a condition with a different name instead of reusing "module", because existing code in the ecosystem using the "module" condition sometimes also expect the module resolution for these ESM files to work in CJS style, which is supported by bundlers, but the native Node.js loader has intentionally made ESM resolution different from CJS resolution (e.g. forbidding import './noext' or import './directory'), so it would be breaking to implement a "module" condition without implementing the forbidden ESM resolution rules. For now, this just implements a new condition as semver-minor so it can be backported to older LTS.

Contributed by Joyee Cheung in #54648.

node --run is now stable

This CLI flag runs a specified command from a package.json's "scripts" object.

For the following package.json:

{
  "scripts": {
    "test": "node --test-reporter junit --test ./test"
  }
}

You can run node --run test and that would start the test suite.

Contributed by Yagiz Nizipli in #53763.

Other notable changes

  • [f0b441230a] - (SEMVER-MINOR) crypto: add KeyObject.prototype.toCryptoKey (Filip Skokan) #55262
  • [349d2ed07b] - (SEMVER-MINOR) crypto: add Date fields for validTo and validFrom (Andrew Moon) #54159
  • [bebc95ed58] - doc: add abmusse to collaborators (Abdirahim Musse) #55086
  • [914db60159] - (SEMVER-MINOR) http2: expose nghttp2_option_set_stream_reset_rate_limit as an option (Maël Nison) #54875
  • [f7c3b03759] - (SEMVER-MINOR) lib: propagate aborted state to dependent signals before firing events (jazelly) #54826
  • [32261fc98a] - (SEMVER-MINOR) module: support loading entrypoint as url (RedYetiDev) #54933
  • [06957ff355] - (SEMVER-MINOR) module: implement flushCompileCache() (Joyee Cheung) #54971
  • [2dcf70c347] - (SEMVER-MINOR) module: throw when invalid argument is passed to enableCompileCache() (Joyee Cheung) #54971
  • [f9b19d7c44] - (SEMVER-MINOR) module: write compile cache to temporary file and then rename it (Joyee Cheung) #54971
  • [e95163b170] - (SEMVER-MINOR) process: add process.features.require_module (Joyee Cheung) #55241
  • [4050f68e5d] - (SEMVER-MINOR) process: add process.features.typescript (Aviv Keller) #54295
  • [86f7cb802d] - (SEMVER-MINOR) test_runner: support custom arguments in run() (Aviv Keller) #55126
  • [b62f2f8259] - (SEMVER-MINOR) test_runner: add 'test:summary' event (Colin Ihrig) #54851
  • [d7c708aec5] - (SEMVER-MINOR) test_runner: add support for coverage via run() (Chemi Atlow) #53937
  • [5fda4a1498] - (SEMVER-MINOR) worker: add markAsUncloneable api (Jason Zhang) #55234

Commits

  • [e3619510c8] - assert: show the diff when deep comparing data with a custom message (Giovanni) #54759
  • [39c7a9e70c] - benchmark: adjust config for deepEqual object (Rafael Gonzaga) #55254
  • [263526d5d0] - benchmark: rewrite detect-esm-syntax benchmark (Joyee Cheung) #55238
  • [cd0795fb00] - benchmark: add no-warnings to process.has bench (Rafael Gonzaga) #55159
  • [4352d9cc31] - benchmark: create benchmark for typescript (Marco Ippolito) #54904
  • [452bc9b48d] - benchmark: add webstorage benchmark (jakecastelli) #55040
  • [d4d5ba3a9b] - benchmark: include ascii to fs/readfile (Rafael Gonzaga) #54988
  • [23b628db65] - benchmark: add dotenv benchmark (Aviv Keller) #54278
  • [b1ebb0d8ca] - buffer: coerce extrema to int in blob.slice (Antoine du Hamel) #55141
  • [3a6e72483f] - buffer: extract Blob's .arrayBuffer() & webidl changes (Matthew Aitken) #53372
  • [d109f1c4ff] - buffer: use simdutf convert_latin1_to_utf8_safe (Robert Nagy) #54798
  • [77f8a3f9c2] - build: fix notify-on-review-wanted action (Rafael Gonzaga) #55304
  • [0d93b1ed0c] - build: fix not valid json in coverage (jakecastelli) #55179
  • [f89664d890] - build: include .nycrc in coverage workflows (Wuli Zuo) #55210
  • [d7a9df6417] - build: notify via slack when review-wanted (Rafael Gonzaga) #55102
  • [68822cc861] - build: add more information to Makefile help (Aviv Keller) #53381
  • [f3ca9c669b] - build: update ruff and add lint-py-fix (Aviv Keller) #54410
  • [d99ae548d7] - build: remove -v flag to reduce noise (iwuliz) #55025
  • [d3dfbe7ff9] - build: display free disk space after build in the test-macOS workflow (iwuliz) #55025
  • [3077f6a5b7] - build: support up to python 3.13 in android-configure (Aviv Keller) #54529
  • [a929c71281] - build: add the option to generate compile_commands.json in vcbuild.bat (Segev Finer) #52279
  • [a81f368b99] - build: fix eslint makefile target (Aviv Keller) #54999
  • [c8b7a645ae] - Revert "build: upgrade clang-format to v18" (Chengzhong Wu) #54994
  • [7861ca5dc3] - build: print Running XYZ linter... for py and yml (Aviv Keller) #54386
  • [aaea3944e5] - build,win: add winget config to set up env (Hüseyin Açacak) #54729
  • [30d47220bb] - build,win: float VS 17.11 compilation patch (Stefan Stojanovic) #54970
  • [048a1ab350] - cli: ensure --run has proper pwd (Yagiz Nizipli) #54949
  • [a97841ee10] - cli: fix spacing for port range error (Aviv Keller) #54495
  • [1dcc5eedff] - Revert "console: colorize console error and warn" (Aviv Keller) #54677
  • [f0b441230a] - (SEMVER-MINOR) crypto: add KeyObject.prototype.toCryptoKey (Filip Skokan) #55262
  • [d3f8c35320] - crypto: ensure invalid SubtleCrypto JWK data import results in DataError (Filip Skokan) #55041
  • [349d2ed07b] - (SEMVER-MINOR) crypto: add Date fields for validTo and validFrom (Andrew Moon) #54159
  • [34ca36a397] - deps: update undici to 6.20.0 (Node.js GitHub Bot) #55329
  • [f703652e84] - deps: upgrade npm to 10.9.0 (npm team) #55255
  • [b533a51856] - deps: V8: backport 0d5d6e71bbb0 (Yagiz Nizipli) #55115
  • [2f65b3fd07] - deps: V8: partially cherry-pick 8953e49478 (Ben Noordhuis) #55274
  • [bb9f77d53a] - deps: update archs files for openssl-3.0.15+quic1 (Node.js GitHub Bot) #55184
  • [63d51c82fe] - deps: upgrade openssl sources to quictls/openssl-3.0.15+quic1 (Node.js GitHub Bot) #55184
  • [29e6484f3c] - deps: update archs files for openssl-3.0.14+quic1 (Node.js GitHub Bot) #54336
  • [283927ec88] - deps: upgrade openssl sources to quictls/openssl-3.0.14+quic1 (Node.js GitHub Bot) #54336
  • [b0636a1e88] - deps: update timezone to 2024b (Node.js GitHub Bot) #55056
  • [173464d76f] - deps: update acorn-walk to 8.3.4 (Node.js GitHub Bot) #54950
  • [0d4536543b] - deps: update corepack to 0.29.4 (Node.js GitHub Bot) #54845
  • [1de5512383] - deps: V8: cherry-pick 217457d0a560 (Michaël Zasso) #54883
  • [1921d7a37c] - doc: add release key for aduh95 (Antoine du Hamel) #55349
  • [d8e42be1b2] - doc: move ERR_INVALID_PERFORMANCE_MARK to legacy errors (Antoine du Hamel) #55247
  • [5ea8aa183c] - doc: fix Markdown linter (Antoine du Hamel) #55344
  • [873588888d] - Revert "doc: update test context.assert" (Antoine du Hamel) #55344
  • [707e7cc702] - doc: add pmarchini to collaborators (Pietro Marchini) #55331
  • [b03272b9a1] - doc: fix events.once() example using AbortSignal (Ivo Janssen) #55144
  • [85b765953d] - doc: add onboarding details for ambassador program (Marco Ippolito) #55284
  • [5d41b8a8b0] - doc: update require(ESM) history and stability status (Antoine du Hamel) #55199
  • [195df659e9] - doc: move ERR_NAPI_TSFN_START/STOP_IDLE_LOOP to legacy errors (Antoine du Hamel) #55248
  • [8eae0d3f3c] - doc: fix initial default value of autoSelectFamily (Ihor Rohovets) #55245
  • [297cb0da5a] - doc: tweak onboarding instructions (Michael Dawson) #55212
  • [7ddbfe8c2b] - doc: update test context.assert (Pietro Marchini) #55186
  • [8a57550d20] - doc: fix unordered error anchors (Antoine du Hamel) #55242
  • [286ea4ed3d] - doc: mention addons to experimental permission (Rafael Gonzaga) #55166
  • [7c9ceabf38] - doc: use correct dash in stability status (Antoine du Hamel) #55200
  • [781ffd8ba1] - doc: fix link in test/README.md (Livia Medeiros) #55165
  • [61b9ed3bf2] - doc: add esm examples to node:net (Alfredo González) #55134
  • [bb3499038d] - doc: remove outdated https import reference (Edigleysson Silva (Edy)) #55111
  • [6cc49518c7] - doc: move the YAML changes element (sendoru) #55112
  • [b12b4a23e4] - doc: remove random horizontal separators in process.md (Antoine du Hamel) #55149
  • [7186ede388] - doc: put --env-file-if-exists=config right under --env-file=config (Edigleysson Silva (Edy)) #55131
  • [8ad0dfff10] - doc: fix the require resolve algorithm in modules.md (chirsz) #55117
  • [fd40f0873f] - doc: update style guide (Aviv Keller) #53223
  • [12c9d9780f] - doc: add missing : to run()'s globPatterns (Aviv Keller) #55135
  • [73b05cfb04] - doc: correct cleanup option in stream.(promises.)finished (René) #55043
  • [bebc95ed58] - doc: add abmusse to collaborators (Abdirahim Musse) #55086
  • [a97c80c6ae] - doc: add note about --expose-internals (Aviv Keller) #52861
  • [89aeae63bd] - doc: remove parseREPLKeyword from REPL documentation (Aviv Keller) #54749
  • [b3e0490b8b] - doc: add missing EventSource docs to globals (Matthew Aitken) #55022
  • [516c775fa5] - doc: cover --experimental-test-module-mocks flag (Jonathan Sharpe) #55021
  • [4244f1a269] - doc: add more details for localStorage and sessionStorage (Batuhan Tomo) #53881
  • [39a728c2e3] - doc: change backporting guide with updated info (Aviv Keller) #53746
  • [3a5fe95ad7] - doc: add missing definitions to internal-api.md (Aviv Keller) #53303
  • [f2d74a26a3] - doc: fix history of process.features (Antoine du Hamel) #54982
  • [29866ca438] - doc: fix typo callsite.lineNumber (Rafael Gonzaga) #54969
  • [c1d73abd29] - doc: update documentation for externalizing deps (Michael Dawson) #54792
  • [eca9668231] - doc: add documentation for process.features (Marco Ippolito) #54897
  • [0fb446e207] - esm: do not interpret "main" as a URL (Antoine du Hamel) #55003
  • [be2fe4b249] - events: allow null/undefined eventInitDict (Matthew Aitken) #54643
  • [cb47e169a0] - events: return currentTarget when dispatching (Matthew Aitken) #54642
  • [dbfae3fe14] - fs: acknowledge signal option in filehandle.createReadStream() (Livia Medeiros) #55148
  • [1c94725c07] - fs: check subdir correctly in cpSync (Jason Zhang) #55033
  • [79ffefab2a] - fs: convert to u8 string for filesystem path (Jason Zhang) #54653
  • [914db60159] - (SEMVER-MINOR) http2: expose nghttp2_option_set_stream_reset_rate_limit as an option (Maël Nison) #54875
  • [08b5e6c794] - lib: fix module print timing when specifier includes " (Antoine du Hamel) #55150
  • [bf7d7aef4b] - lib: fix typos (Nathan Baulch) #55065
  • [d803355d92] - lib: prefer optional chaining (Aviv Keller) #55045
  • [d4873bcd6d] - lib: remove lib/internal/idna.js (Yagiz Nizipli) #55050
  • [f7c3b03759] - (SEMVER-MINOR) lib: propagate aborted state to dependent signals before firing events (jazelly) #54826
  • [397ae418db] - lib: the REPL should survive deletion of Array.prototype methods (Jordan Harband) #31457
  • [566179c9ec] - lib, tools: remove duplicate requires (Aviv Keller) #54987
  • [c9a1bbbef2] - meta: move one or more collaborators to emeritus (Node.js GitHub Bot) #55300
  • [d7b73bbd1d] - meta: bump mozilla-actions/sccache-action from 0.0.5 to 0.0.6 (dependabot[bot]) #55225
  • [0f4269faa9] - meta: bump actions/checkout from 4.1.7 to 4.2.0 (dependabot[bot]) #55224
  • [33be1990d8] - meta: bump actions/setup-node from 4.0.3 to 4.0.4 (dependabot[bot]) #55223
  • [f5b4ae5bf8] - meta: bump peter-evans/create-pull-request from 7.0.1 to 7.0.5 (dependabot[bot]) #55219
  • [1985d9016e] - meta: add mailmap entry for abmusse (Abdirahim Musse) #55182
  • [93b215d5e6] - meta: add more information about nightly releases (Aviv Keller) #55084
  • [aeae5973c3] - meta: add linux to OS labels in collaborator guide (Aviv Keller) #54986
  • [4fb2c3baa8] - meta: remove never-used workflow trigger (Aviv Keller) #54983
  • [e1f36d0da8] - meta: remove unneeded ignore rules from ruff (Aviv Keller) #54360
  • [ce0d0c1ec8] - meta: remove build-windows.yml (Aviv Keller) #54662
  • [ca67c97f33] - meta: add links to alternative issue trackers (Aviv Keller) #54401
  • [6fcac73738] - module: wrap swc error in ERR_INVALID_TYPESCRIPT_SYNTAX (Marco Ippolito) #55316
  • [0412ac8bf3] - module: add internal type def for flushCompileCache (Jacob Smith) #55226
  • [32261fc98a] - (SEMVER-MINOR) module: support loading entrypoint as url (RedYetiDev) #54933
  • [111261e245] - (SEMVER-MINOR) module: implement the "module-sync" exports condition (Joyee Cheung) #54648
  • [b6fc9adf5b] - module: remove duplicated import (Aviv Keller) #54942
  • [06957ff355] - (SEMVER-MINOR) module: implement flushCompileCache() (Joyee Cheung) #54971
  • [2dcf70c347] - (SEMVER-MINOR) module: throw when invalid argument is passed to enableCompileCache() (Joyee Cheung) #54971
  • [f9b19d7c44] - (SEMVER-MINOR) module: write compile cache to temporary file and then rename it (Joyee Cheung) #54971
  • [1d169764db] - module: report unfinished TLA in ambiguous modules (Antoine du Hamel) #54980
  • [c89c93496d] - module: refator ESM loader for adding future synchronous hooks (Joyee Cheung) #54769
  • [108cef22e6] - module: remove bogus assertion in CJS entrypoint handling with --import (Joyee Cheung) #54592
  • [67ecb10c78] - module: fix discrepancy between .ts and .js (Marco Ippolito) #54461
  • [3300d5990f] - os: use const with early return for path (Trivikram Kamat) #54959
  • [90cce6ec7c] - path: remove repetitive conditional operator in posix.resolve (Wiyeong Seo) #54835
  • [cbfc980f89] - perf_hooks: add missing type argument to getEntriesByName (Luke Taher) #54767
  • [e95163b170] - (SEMVER-MINOR) process: add process.features.require_module (Joyee Cheung) #55241
  • [0655d3a384] - process: fix process.features.typescript when Amaro is unavailable (Antoine du Hamel) #55323
  • [4050f68e5d] - (SEMVER-MINOR) process: add process.features.typescript (Aviv Keller) #54295
  • [75073c50ae] - quic: start adding in the internal quic js api (James M Snell) #53256
  • [538b1eb5b0] - repl: catch \v and \r in new-line detection (Aviv Keller) #54512
  • [57a9d3f15e] - sqlite: disable DQS misfeature by default (Tobias Nießen) #55297
  • [c126543374] - sqlite: make sourceSQL and expandedSQL string-valued properties (Tobias Nießen) #54721
  • [67f5f46c56] - sqlite: enable foreign key constraints by default (Tobias Nießen) #54777
  • [09999491bf] - src: handle errors correctly in webstorage (Michaël Zasso) #54544
  • [295c17c4ea] - src: make minor tweaks to quic c++ for c++20 (James M Snell) #53256
  • [b1d47d06f9] - src: apply getCallSite optimization (RafaelGSS) #55174
  • [d6bcc44829] - src: modernize likely/unlikely hints (Yagiz Nizipli) #55155
  • [1af5ad61ca] - src: fixup Error.stackTraceLimit during snapshot building (Joyee Cheung) #55121
  • [b229083235] - src: parse --stack-trace-limit and use it in --trace-* flags (Joyee Cheung) #55121
  • [942ad54e08] - src: move more key handling to ncrypto (James M Snell) #55108
  • [0bb5584288] - src: add receiver to fast api callback methods (Carlos Espa) #54408
  • [706e9611f0] - src: fix typos (Nathan Baulch) #55064
  • [a96d5d1bcc] - src: move more stuff over to use Maybe<void> (James M Snell) #54831
  • [ee0a98b5a2] - src: decode native error messages as UTF-8 (Joyee Cheung) #55024
  • [1fc8edecf8] - src: update clang-tidy and focus on modernization (Yagiz Nizipli) #53757
  • [3a1485a1a3] - src: move evp stuff to ncrypto (James M Snell) #54911
  • [9ae80e1e4d] - src: revert filesystem::path changes (Yagiz Nizipli) #55015
  • [465d05018a] - src: mark node --run as stable (Yagiz Nizipli) #53763
  • [ef546c872c] - src: cleanup per env handles directly without a list (Chengzhong Wu) #54993
  • [0876f78411] - src: add unistd.h import if node posix credentials is defined (Jonas) #54528
  • [284db53866] - src: remove duplicate code setting AF_INET (He Yang) #54939
  • [f332c4c4fc] - src: use Maybe<void> where bool isn't needed (Michaël Zasso) #54575
  • [c7ed2ff920] - stream: handle undefined chunks correctly in decode stream (devstone) #55153
  • [a9675a0cbc] - stream: treat null asyncIterator as undefined (Jason Zhang) #55119
  • [bf69ae1406] - stream: set stream prototype to closest transferable superclass (Jason Zhang) #55067
  • [3273707a3a] - test: fix tests when Amaro is unavailable (Richard Lau) #55320
  • [ff3cc3b2ab] - test: use more informative errors in test-runner-cli (Antoine du Hamel) #55321
  • [17d2f9de6d] - test: make test-loaders-workers-spawned less flaky (Antoine du Hamel) #55172
  • [1b1104e69b] - test: add resource to internal module stat test (RafaelGSS) #55157
  • [b36f8c2146] - test: update multiple assert tests to use node:test (James M Snell) #54585
  • [1b30f7fdd6] - test: move coverage source map tests to new file (Aviv Keller) #55123
  • [ce67e7b5b3] - test: adding more tests for strip-types (Kevin Toshihiro Uehara) #54929
  • [a57c8ba3ef] - test: update wpt test for encoding (devstone) #55151
  • [65fbe94d45] - test: add escapePOSIXShell util (Antoine du Hamel) #55125
  • [cc8838252e] - test: remove unnecessary await in test-watch-mode (Wuli) #55142
  • [9aeba48bf0] - test: fix typos (Nathan Baulch) #55063
  • [0999b5e493] - test: remove duplicated test descriptions (Christos Koutsiaris) #54140
  • [e99d4a4cb8] - test: deflake test/pummel/test-timers.js (jakecastelli) #55098
  • [fb8470afd7] - test: deflake test-http-remove-header-stays-removed (Luigi Pinca) #55004
  • [e879c5edf2] - test: fix test-tls-junk-closes-server (Michael Dawson) #55089
  • [b885f0583c] - test: fix more tests that fail when path contains a space (Antoine du Hamel) #55088
  • [85f1187942] - test: fix assertSnapshot when path contains a quote (Antoine du Hamel) #55087
  • [fdae57f1e1] - test: fix some tests when path contains % (Antoine du Hamel) #55082
  • [36c9ea8912] - Revert "test: mark test-fs-watch-non-recursive flaky on Windows" (Luigi Pinca) #55079
  • [80da5993cc] - test: remove interval and give more time to unsync (Pietro Marchini) #55006
  • [93c23e74b3] - test: deflake test-inspector-strip-types (Luigi Pinca) #55058
  • [43bbca2c08] - test: make test-runner-assert more robust (Aviv Keller) #55036
  • [268f1ec08f] - test: update tls test to support OpenSSL32 (Michael Dawson) #55030
  • [a50dd21423] - test: do not assume process.execPath contains no spaces (Antoine du Hamel) #55028
  • [c56e324cb8] - test: fix test-vm-context-dont-contextify when path contains a space (Antoine du Hamel) #55026
  • [6d42e44264] - test: adjust tls-set-ciphers for OpenSSL32 (Michael Dawson) #55016
  • [22e601a76c] - test: add util.stripVTControlCharacters test (RedYetiDev) #54865
  • [a6796696d7] - test: improve coverage for timer promises schedular (Aviv Keller) #53370
  • [9506f77b3e] - test: remove getCallSite from common (RedYetiDev) #54947
  • [20d3a806ea] - test: remove unused common utilities (RedYetiDev) #54825
  • [341b6d9b94] - test: deflake test-http-header-overflow (Luigi Pinca) #54978
  • [1e53c10853] - test: fix soucre to source (Aviv Keller) #55038
  • [6843ca7e0d] - test: add asserts to validate test assumptions (Michael Dawson) #54997
  • [98ff615c5e] - test: add runner watch mode isolation tests (Pietro Marchini) #54888
  • [327a8f7b59] - test: fix invalid wasm test (Aviv Keller) #54935
  • [5b012f544c] - test: move test-http-max-sockets to parallel (Luigi Pinca) #54977
  • [22b413910e] - test: remove test-http-max-sockets flaky designation (Luigi Pinca) #54976
  • [62b8640550] - test: refactor test-whatwg-webstreams-encoding to be shorter (David Dong) #54569
  • [1f11d68173] - test: adjust key sizes to support OpenSSL32 (Michael Dawson) #54972
  • [90a87ca8f7] - test: update test to support OpenSSL32 (Michael Dawson) #54968
  • [9b7834536a] - test: update DOM events web platform tests (Matthew Aitken) #54642
  • [1c001550a2] - test,crypto: update WebCryptoAPI WPT (Filip Skokan) #55029
  • [800f7c44ed] - test_runner: throw on invalid source map (Aviv Keller) #55055
  • [0f7e3f017f] - test_runner: assert entry is a valid object (Edigleysson Silva (Edy)) #55231
  • [c308862d2e] - test_runner: avoid spread operator on arrays (Antoine du Hamel) #55143
  • [12401972b7] - test_runner: support typescript files in default glob (Aviv Keller) #55081
  • [19cfa3140f] - test_runner: close and flush destinations on forced exit (Colin Ihrig) #55099
  • [86f7cb802d] - (SEMVER-MINOR) test_runner: support custom arguments in run() (Aviv Keller) #55126
  • [7eaeba499a] - test_runner: fix mocking modules with quote in their URL (Antoine du Hamel) #55083
  • [8818c6c88a] - test_runner: report error on missing sourcemap source (Aviv Keller) #55037
  • [b62f2f8259] - (SEMVER-MINOR) test_runner: add 'test:summary' event (Colin Ihrig) #54851
  • [449dad0db0] - test_runner: use test: symbol on second print of parent test (RedYetiDev) #54956
  • [4b962a78c7] - test_runner: replace ansi clear with ansi reset (Pietro Marchini) #55013
  • [d7c708aec5] - (SEMVER-MINOR) test_runner: add support for coverage via run() (Chemi Atlow) #53937
  • [93c6c90219] - test_runner: support typescript module mocking (Marco Ippolito) #54878
  • [1daec9a63f] - test_runner: avoid coverage report partial file names (Pietro Marchini) #54379
  • [d51e5a8667] - tools: enforce errors to not be documented in legacy section (Aviv Keller) #55218
  • [6a7d201b80] - tools: update gyp-next to 0.18.2 (Node.js GitHub Bot) #55160
  • [c988e7e2e5] - tools: bump the eslint group in /tools/eslint with 4 updates (dependabot[bot]) #55227
  • [7982d3d4ed] - tools: only check teams on the default branch (Antoine du Hamel) #55124
  • [60a35eddb0] - tools: make choco install script more readable (Aviv Keller) #54002
  • [b7b1fa6dd3] - tools: bump Rollup from 4.18.1 to 4.22.4 for lint-md (dependabot[bot]) #55093
  • [3304bf387f] - tools: unlock versions of irrelevant DB deps (Michaël Zasso) #55042
  • [65c376a819] - tools: remove redudant code from eslint require rule (Aviv Keller) #54892
  • [295f684b69] - tools: update error message for ICU in license-builder (Aviv Keller) #54742
  • [ce4b6e403d] - tools: refactor js2c.cc to use c++20 (Yagiz Nizipli) #54849
  • [31f0ef6ea3] - tools: bump the eslint group in /tools/eslint with 7 updates (dependabot[bot]) #54821
  • [676d0a09a0] - tools: update github_reporter to 1.7.1 (Node.js GitHub Bot) #54951
  • [0f01f38aea] - tty: fix links for terminal colors (Aviv Keller) #54596
  • [d264639f5f] - util: update ansi regex (Aviv Keller) #54865
  • [ea7aaf37bf] - v8: out of bounds copy (Robert Nagy) #55261
  • [fa695facf5] - watch: preserve output when gracefully restarted (Théo LUDWIG) #54323
  • [5fda4a1498] - (SEMVER-MINOR) worker: add markAsUncloneable api (Jason Zhang) #55234
  • [d65334c454] - worker: throw InvalidStateError in postMessage after close (devstone) #55206
  • [fc90d7c63a] - worker: handle --input-type more consistently (Antoine du Hamel) #54979
  • [a9fa2da870] - zlib: throw brotli initialization error from c++ (Yagiz Nizipli) #54698
  • [9abd1c7288] - zlib: remove prototype primordials usage (Yagiz Nizipli) #54695

Windows 32-bit Installer: https://nodejs.org/dist/v22.10.0/node-v22.10.0-x86.msi
Windows 64-bit Installer: https://nodejs.org/dist/v22.10.0/node-v22.10.0-x64.msi
Windows ARM 64-bit Installer: https://nodejs.org/dist/v22.10.0/node-v22.10.0-arm64.msi
Windows 32-bit Binary: https://nodejs.org/dist/v22.10.0/win-x86/node.exe
Windows 64-bit Binary: https://nodejs.org/dist/v22.10.0/win-x64/node.exe
Windows ARM 64-bit Binary: https://nodejs.org/dist/v22.10.0/win-arm64/node.exe
macOS 64-bit Installer: https://nodejs.org/dist/v22.10.0/node-v22.10.0.pkg
macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v22.10.0/node-v22.10.0-darwin-arm64.tar.gz
macOS Intel 64-bit Binary: https://nodejs.org/dist/v22.10.0/node-v22.10.0-darwin-x64.tar.gz
Linux 64-bit Binary: https://nodejs.org/dist/v22.10.0/node-v22.10.0-linux-x64.tar.xz
Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v22.10.0/node-v22.10.0-linux-ppc64le.tar.xz
Linux s390x 64-bit Binary: https://nodejs.org/dist/v22.10.0/node-v22.10.0-linux-s390x.tar.xz
AIX 64-bit Binary: https://nodejs.org/dist/v22.10.0/node-v22.10.0-aix-ppc64.tar.gz
ARMv7 32-bit Binary: https://nodejs.org/dist/v22.10.0/node-v22.10.0-linux-armv7l.tar.xz
ARMv8 64-bit Binary: https://nodejs.org/dist/v22.10.0/node-v22.10.0-linux-arm64.tar.xz
Source Code: https://nodejs.org/dist/v22.10.0/node-v22.10.0.tar.gz
Other release files: https://nodejs.org/dist/v22.10.0/
Documentation: https://nodejs.org/docs/v22.10.0/api/

SHASUMS

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

9fe24a08564eca8ce7e6ea3dfa58bc91ec5512f194e6871a388254c3ebe4f0a4  node-v22.10.0-aix-ppc64.tar.gz
fa56d6db05ce3909025d75fac8cf32a054c4a74291b4748fae544d4ff935c25e  node-v22.10.0-arm64.msi
75e5b78d59187ca936e67f0b88a6db913f4ab8bb83a27a1d0a34f98089cb4f77  node-v22.10.0-darwin-arm64.tar.gz
1e075186b54bac99434c5a41f5bf526e9729c8010dc05cb0da426fb0d5b97170  node-v22.10.0-darwin-arm64.tar.xz
f8d4a064d3edd49900187e301424a7d7d30f75b60f618811d2aad80b665b42d5  node-v22.10.0-darwin-x64.tar.gz
a50a35778fd57ddd90eb1ecbf56ea3a640d932c7d31a0bc2bb164df34f889156  node-v22.10.0-darwin-x64.tar.xz
8e82810f179f82016f75e6259a6d53b26674268cb074c544780ec3819157d1d0  node-v22.10.0-headers.tar.gz
f588b2f9fade83d56cd9965d52ae91b32de0f35393c8e889a52870746940b3b6  node-v22.10.0-headers.tar.xz
17abee3dfe6ffcda95cab08bb5f43de7f88d04e9607c517e701c6e623358dc7c  node-v22.10.0-linux-arm64.tar.gz
53f51efe5bf4cd6b7745e910d9a33216b6be5a89b107226862f4a6f27aab84fd  node-v22.10.0-linux-arm64.tar.xz
cd0bd2cd4098db1dde29314a60287661484e18df708ac94532e5a34f99eb6fd4  node-v22.10.0-linux-armv7l.tar.gz
cea813eba9b5d43911414c9df03119c47e53c3f303c42bd5f2960aedfcf7df10  node-v22.10.0-linux-armv7l.tar.xz
52fb8ae36061e64d39499be50a1193fc1f10fa667b4211b651576db65b5558da  node-v22.10.0-linux-ppc64le.tar.gz
7a83a0f9a674fe0c4b0405d4ba704bafe339fc520873b9260d752436bf1f268e  node-v22.10.0-linux-ppc64le.tar.xz
6e976e9278f66e654f208fdca1bae80f49705f51ab4c47ef1acb5bd59b16e640  node-v22.10.0-linux-s390x.tar.gz
caad0bef82f163be6c8d19a6d79bb7a443b3676266fa67bb0325cbc61a1df136  node-v22.10.0-linux-s390x.tar.xz
674fef1891cc9927b5dc2b0ee2399b77f6621e6b3157f563a9e9491ad3db107b  node-v22.10.0-linux-x64.tar.gz
406791658a8bce3bc21fab786f45877adad391ea20badc87e1d65c7478b75062  node-v22.10.0-linux-x64.tar.xz
afc49ad90023d7809e7ed0d6b86167e476c21e6482c202e71b49a369302bcedf  node-v22.10.0-win-arm64.7z
2a9ffdc69df610821b5fb8b7e19cb0c627a2576c0af5b327ba2cdf9149db4f96  node-v22.10.0-win-arm64.zip
c5105910002a7cf89eaacc27fb85cb2f8551c0f7797ac52118f2398210d6135e  node-v22.10.0-win-x64.7z
d68dce8f7a73305a496e719485ca6647387d9410cb7eb5933b5d9b4afc5593bd  node-v22.10.0-win-x64.zip
b0149ff0fa094cc765c2e373b1010776bab18a2eac6a7d3800e0599f11da1aa3  node-v22.10.0-win-x86.7z
dff73b6fd3545addabafd453b61ca5d50d2454d05d53a6094bcc428a0aa22de3  node-v22.10.0-win-x86.zip
9d8fad0dc2da2c57e6fdf38fc85a23dc5ebcd5c414d8dd2948b3c45bd2398895  node-v22.10.0-x64.msi
daca38d494c4d6d023ea0cc4d5f7974173256b80a5e485bf7fcaace62c36df85  node-v22.10.0-x86.msi
af7ec12e66beae77b8f4090e7560d53f953ace17af0c6fc658a8453221de2f85  node-v22.10.0.pkg
42e4ab4ce34383488185cef6f06f8d1267bf91ebc5c6596fc3786efb0f8b5aaa  node-v22.10.0.tar.gz
3180710d3130ad9df01466abf010e408d41b374be54301d1480d10eca73558e0  node-v22.10.0.tar.xz
d4f4462472ae44f6b804d729bc6e09fbecdb95994be8af35584297b637cd8af1  win-arm64/node.exe
ad65afe5b192644fec9d599c77f0e38a8421d0d7ad2389679882a288c8df444b  win-arm64/node.lib
5cb82d77cebf4c82acb9123827d1ada295dce4907bd9f75966f989e112e9f7a2  win-arm64/node_pdb.7z
b551a239370533dcb1f595d35b9540cb906a926387d373f4e0dde8de424267a0  win-arm64/node_pdb.zip
741a6d3a636ccb3290fc3141e3604913d89e430e0c1bd098734cc3380a7c6b3b  win-x64/node.exe
3581a06b68c4584d146372113eaa8c4d102127222e5041195ba38f185eef419c  win-x64/node.lib
40e2dbf9fb9c66f579d348e2ecd30a4ffadc3b00f9895107f915b82323cd1096  win-x64/node_pdb.7z
1c478d40aadaeb0ad173ba01983a3bb6909777d1b35497b8e4f508acea02a26b  win-x64/node_pdb.zip
ca29a0d009d4e39ebca9bc84a859f30ccddeb31f31573d2d62be579d7c3daef0  win-x86/node.exe
45399070d1d247cf223d12e80d3e638635af24d2f7a4714bc8e38a6a918f162a  win-x86/node.lib
a35f8ad5b3ebfe652ffba108e3220115088d4a755af0305bdd6ece0295e4c07d  win-x86/node_pdb.7z
e985894dd6ae194ef302f831a10268aa33412db046b670a121603184dbacbb04  win-x86/node_pdb.zip
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEwNYkhDnx1WBKr/tAIdkA/9sjN1YFAmcQQKEACgkQIdkA/9sj
N1YldRAAjB69PJc6s3OvgDHn6gr98Dap8WGQBjOt6Mb2/qR1C/9TcJRueN73+Fpc
9jW66o3QmHEjci1Ii0JDuvL7iObAMMQlJyctcsGVSyW+Pq5j9MEuEbAQVJ5/uzrS
innKmPNnMtVcr/1IspCR1I/Q71nupDU+amrR2TUcabCdHryKI8HAWJ+PRjsUChAy
22QvopbjG97NA3cWffUUuEYlMw/jgNdOQEIcxC1/xMd1ofL9rQVMqXeQAMKa+BBm
gZN1sLJGU88K+QPEkfZ1G3yQUmYyBxMcL5OH0KM/EngKu1siocj/m5OgCIW2OT14
qedHd5/uxjKUJAR9DT/g5EBgXrZvz4J8Rv5ewPi9E8O/Ce3oS/Y0v3WvPvIaQCcO
MCvIAD7FQu0Eqn2ODKKBZepoqOneZCt7IKa+Pvt/qly2cKxD7aJfWsvilxUFu69x
hTnMK7HRTKk8BgfzpMlRENvSuRqVnlvny/8A+WgELX/9JT0DgF8n1TJ0mkVbJwRG
aSneG0MEcGHqG2ALJ6A5l13SoBTerRnjlwGuobyMfxCg66AP04k/ZR24m0db9d9R
RYQpgTtyee99a1yr92pzzwUcSgS9J0YPMMfsVCpO2lyyQ1Es8tN69Atf+Hby35Vz
HPg/0beMGvnM++UDik2hHKDqNs1Li6SXNVozxJy0qWPug3GNYEA=
=n1uK
-----END PGP SIGNATURE-----