GeezerVison is showing github.com — v18.20.0 proposal by richardlau · Pull Request #52165 · nodejs/node
Conversation
richardlau
commented
Mar 20, 2024
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
2024-03-26, Version 18.20.0 'Hydrogen' (LTS), @richardlau
Notable Changes
Added support for import attributes
Support has been added for import attributes, to replace the old import
assertions syntax. This will aid migration by making the new syntax available
across all currently supported Node.js release lines.
This adds the with keyword which should be used in place of the previous
assert keyword, which will be removed in a future semver-major Node.js
release.
For example,
import "foo" assert { ... }
should be replaced with
import "foo" with { ... }
For more details, see
Contributed by Nicolò Ribaudo in #51136
and Antoine du Hamel in #50140.
Doc deprecation for dirent.path
Please use newly added dirent.parentPath instead.
Contributed by Antoine du Hamel in #50976
and #51020.
Experimental node-api feature flags
Introduces an experimental feature to segregate finalizers that affect GC state.
A new type called node_api_nogc_env has been introduced as the const version
of napi_env and node_api_nogc_finalize as a variant of napi_finalize that
accepts a node_api_nogc_env as its first argument.
This feature can be turned off by defining
NODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT.
Contributed by Gabriel Schulhof in #50060.
Root certificates updated to NSS 3.98
Certificates added:
- Telekom Security TLS ECC Root 2020
- Telekom Security TLS RSA Root 2023
Certificates removed:
- Security Communication Root CA
Updated dependencies
- ada updated to 2.7.6.
- base64 updated to 0.5.2.
- c-ares updated to 1.27.0.
- corepack updated to 0.25.2.
- ICU updated to 74.2. Includes CLDR 44.1 and Unicode 15.1.
- npm updated to 10.5.0. Fixes a regression in signals not being passed onto child processes.
- simdutf8 updated to 4.0.8.
- Timezone updated to 2024a.
- zlib updated to 1.3.0.1-motley-40e35a7.
vm: fix V8 compilation cache support for vm.Script
Previously repeated compilation of the same source code using vm.Script
stopped hitting the V8 compilation cache after v16.x when support for
importModuleDynamically was added to vm.Script, resulting in a performance
regression that blocked users (in particular Jest users) from upgrading from
v16.x.
The recent fixes allow the compilation cache to be hit again
for vm.Script when --experimental-vm-modules is not used even in the
presence of the importModuleDynamically option, so that users affected by the
performance regression can now upgrade. Ongoing work is also being done to
enable compilation cache support for vm.CompileFunction.
Contributed by Joyee Cheung in #49950
and #50137.
Commits
- [
4b960c3a4a] - build: fix incorrect g++ warning message (Richard Lau) #51695
- [
8fdea67694] - crypto: update root certificates to NSS 3.98 (Node.js GitHub Bot) #51794
- [
812b126dd9] - deps: V8: cherry-pick d90d4533b053 (Michaël Zasso) #50077
- [
9ab8c3db87] - deps: update c-ares to 1.27.0 (Node.js GitHub Bot) #51846
- [
c688680387] - deps: update c-ares to 1.26.0 (Node.js GitHub Bot) #51582
- [
9498ac8a47] - deps: compile c-ares with C11 support (Michaël Zasso) #51410
- [
8fb743642f] - deps: update c-ares to 1.25.0 (Node.js GitHub Bot) #51385
- [
7bea2d7c12] - deps: update zlib to 1.3.0.1-motley-40e35a7 (Node.js GitHub Bot) #51274
- [
57a38c8f75] - deps: update zlib to 1.3.0.1-motley-dd5fc13 (Node.js GitHub Bot) #51105
- [
b0ca084a6b] - deps: update zlib to 1.3-22124f5 (Node.js GitHub Bot) #50910
- [
4b43823f37] - deps: update zlib to 1.2.13.1-motley-5daffc7 (Node.js GitHub Bot) #50803
- [
f0da591812] - deps: update zlib to 1.2.13.1-motley-dfc48fc (Node.js GitHub Bot) #50456
- [
16d28a883a] - deps: update base64 to 0.5.2 (Node.js GitHub Bot) #51455
- [
13a9e81cb6] - deps: update base64 to 0.5.1 (Node.js GitHub Bot) #50629
- [
b4502d3ac5] - deps: update simdutf to 4.0.8 (Node.js GitHub Bot) #51000
- [
183cf8a74a] - deps: update simdutf to 4.0.4 (Node.js GitHub Bot) #50772
- [
11ba8593ea] - deps: update ada to 2.7.6 (Node.js GitHub Bot) #51542
- [
73a946d55c] - deps: update ada to 2.7.5 (Node.js GitHub Bot) #51542
- [
cc434c1a39] - deps: update ada to 2.7.4 (Node.js GitHub Bot) #50815
- [
3a3808a6ae] - deps: upgrade npm to 10.5.0 (npm team) #51913
- [
c8876d765c] - deps: upgrade npm to 10.3.0 (npm team) #51431
- [
5aec3af460] - deps: update corepack to 0.25.2 (Node.js GitHub Bot) #51810
- [
a593985326] - deps: update corepack to 0.24.1 (Node.js GitHub Bot) #51459
- [
d1a9237bf5] - deps: update corepack to 0.24.0 (Node.js GitHub Bot) #51318
- [
adac0c7a63] - deps: update corepack to 0.23.0 (Node.js GitHub Bot) #50563
- [
4a6f83e32a] - deps: escape Python strings correctly (Michaël Zasso) #50695
- [
c13969e52a] - deps: V8: cherry-pick ea996ad04a68 (Nicolò Ribaudo) #51136
- [
6fbf0ba5c3] - deps: V8: cherry-pick a0fd3209dda8 (Nicolò Ribaudo) #51136
- [
68fd7516e1] - deps: update timezone to 2024a (Michaël Zasso) #51723
- [
f9b229ebe1] - deps: update icu to 74.2 (Michaël Zasso) #51723
- [
90c73d2eb4] - deps: update timezone to 2023d (Node.js GitHub Bot) #51461
- [
2a2bf57028] - deps: update icu to 74.1 (Node.js GitHub Bot) #50515
- [
425e011e52] - deps: add v8::Object::SetInternalFieldForNodeCore() (Joyee Cheung) #49874
- [
58c70344a2] - deps: V8: cherry-pick 705e374124ae (Joyee Cheung) #51004
- [
b0e88899e1] - deps: V8: cherry-pick 1fada6b36f8d (Joyee Cheung) #51004
- [
d87a810b81] - deps: V8: cherry-pick 3dd9576ce336 (Joyee Cheung) #51004
- [
6d50966876] - deps: V8: cherry-pick 94e8282325a1 (Joyee Cheung) #51004
- [
fafbacdfec] - deps: V8: cherry-pick 9a98f96b6d68 (Joyee Cheung) #51004
- [
d4a530ed8d] - deps: V8: cherry-pick 7f5daed62d47 (Joyee Cheung) #51004
- [
1ce901b164] - deps: V8: cherry-pick c400af48b5ef (Joyee Cheung) #51004
- [
f232064f35] - doc: fix historical experimental fetch flag (Kenrick) #51506
- [
194ff6a40f] - (SEMVER-MINOR) doc: add deprecation notice to dirent.path (Antoine du Hamel) #50976
- [
0f09267dc6] - (SEMVER-MINOR) doc: deprecate dirent.path (Antoine du Hamel) #50976
- [
8bfb8f5b2f] - doc,crypto: further clarify RSA_PKCS1_PADDING support (Tobias Nießen) #51799
- [
c7baf7b274] - doc,crypto: add changelog and note about disabled RSA_PKCS1_PADDING (Filip Skokan) #51782
- [
a193be3dc2] - esm: use import attributes instead of import assertions (Antoine du Hamel) #50140
- [
26e8f7793e] - (SEMVER-MINOR) fs: introduce dirent.parentPath (Antoine du Hamel) #50976
- [
5b5e5192f7] - lib: fix compileFunction throws range error for negative numbers (Jithil P Ponnan) #49855
- [
7552de6806] - module: fix the leak in SourceTextModule and ContextifySript (Joyee Cheung) #48510
- [
2e05cf1c60] - module: fix leak of vm.SyntheticModule (Joyee Cheung) #48510
- [
a86a2e14a3] - module: use symbol in WeakMap to manage host defined options (Joyee Cheung) #48510
- [
32906ddcac] - node-api: segregate nogc APIs from rest via type system (Gabriel Schulhof) #50060
- [
1aa71c26ff] - node-api: factor out common code into macros (Gabriel Schulhof) #50664
- [
3d0b233f52] - node-api: introduce experimental feature flags (Gabriel Schulhof) #50991
- [
96514a8b9f] - src: iterate on import attributes array correctly (Michaël Zasso) #50703
- [
2c2892bf88] - src: set ModuleWrap internal fields only once (Joyee Cheung) #49391
- [
ff334cb774] - src: cast v8::Object::GetInternalField() return value to v8::Value (Joyee Cheung) #48943
- [
95d7a75084] - test: fix dns test case failures after c-ares update to 1.21.0+ (Brad House) #50743
- [
cd613e5167] - test: handle relative https redirect (Richard Lau) #51121
- [
40f10eafcf] - test: fix internet/test-inspector-help-page (Richard Lau) #51693
- [
5e426511b1] - test: deflake test-vm-contextified-script-leak (Joyee Cheung) #49710
- [
0b156c6d28] - test: use checkIfCollectable in vm leak tests (Joyee Cheung) #49671
- [
1586c11b3c] - test: add checkIfCollectable to test/common/gc.js (Joyee Cheung) #49671
- [
902d8b3d4b] - test: fix flaky http-chunk-extensions-limit test (Ethan Arrowood) #51943
- [
1743d2bdc1] - test: test surrogate pair filenames on windows (Mert Can Altın) #51800
- [
1c1a7ec22d] - test: increase platform timeout zlib-brotli-16gb (Rafael Gonzaga) #51792
- [
931d02fe3e] - test, v8: fix wrong import attributes test (Nicolò Ribaudo) #52184
- [
d9ea6c1f8d] - tls: fix order of setting cipher before setting cert and key (Kumar Rishav) #50186
- [
3184befa2e] - tools: fix update-icu.sh (Michaël Zasso) #51723
- [
06646e11be] - (SEMVER-MINOR) vm: use import attributes instead of import assertions (Antoine du Hamel) #50141
- [
fe66e9d06e] - vm: reject in importModuleDynamically without --experimental-vm-modules (Joyee Cheung) #50137
- [
052e095c6b] - vm: use internal versions of compileFunction and Script (Joyee Cheung) #50137
- [
9f7899ed0a] - vm: unify host-defined option generation in vm.compileFunction (Joyee Cheung) #50137
- [
6291c107d0] - vm: use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950
cc @nodejs/lts / @nodejs/releasers
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
kumarrishav and aramissennyeydd reacted with hooray emoji
There is no need to initialize the internal fields to undefined
and then initialize them to something else in the caller. Simply
pass the internal fields into the constructor to initialize
them just once.
PR-URL: #49391
Backport-PR-URL: #51004
Reviewed-By: Darshan Sen <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Stephen Belanger <[email protected]>
Reviewed-By: Chengzhong Wu <[email protected]>
Previously when managing the importModuleDynamically callback of
vm.compileFunction(), we use an ID number as the host defined option
and maintain a per-Environment ID -> CompiledFnEntry map to retain
the top-level referrer function returned by vm.compileFunction() in
order to pass it back to the callback, but it would leak because with
how we used v8::Persistent to maintain this reference, V8 would not
be able to understand the cycle and would just think that the
CompiledFnEntry was supposed to live forever. We made an attempt
to make that reference known to V8 by making the CompiledFnEntry weak
and using a private symbol to make CompiledFnEntry strongly
references the top-level referrer function in
#46785, but that turned out to be
unsound, because the there's no guarantee that the top-level function
must be alive while import() can still be initiated from that
function, since V8 could discard the top-level function and only keep
inner functions alive, so relying on the top-level function to keep
the CompiledFnEntry alive could result in use-after-free which caused
a revert of that fix.
With this patch we use a symbol in the host defined options instead of
a number, because with the stage-3 symbol-as-weakmap-keys proposal
we could directly use that symbol to keep the referrer alive using a
WeakMap. As a bonus this also keeps the other kinds of referrers
alive as long as import() can still be initiated from that
Script/Module, so this also fixes the long-standing crash caused by
vm.Script being GC'ed too early when its importModuleDynamically
callback still needs it.
PR-URL: #48510
Backport-PR-URL: #51004
Refs: #44211
Refs: #42080
Refs: #47096
Refs: #43205
Refs: #38695
Reviewed-By: Antoine du Hamel <[email protected]>
Reviewed-By: Benjamin Gruenbaum <[email protected]>
Reviewed-By: Stephen Belanger <[email protected]>
Previously we maintain a strong persistent reference to the
ModuleWrap to retrieve the ID-to-ModuleWrap mapping from
the HostImportModuleDynamicallyCallback using the number ID
stored in the host-defined options. As a result the ModuleWrap
would be kept alive until the Environment is shut down, which
would be a leak for user code. With the new symbol-based
host-defined option we can just get the ModuleWrap from the
JS-land WeakMap so there's now no need to maintain this
strong reference. This would at least fix the leak for
vm.SyntheticModule. vm.SourceTextModule is still leaking
due to the strong persistent reference to the v8::Module.
PR-URL: #48510
Backport-PR-URL: #51004
Refs: #44211
Refs: #42080
Refs: #47096
Refs: #43205
Refs: #38695
Reviewed-By: Antoine du Hamel <[email protected]>
Reviewed-By: Benjamin Gruenbaum <[email protected]>
Reviewed-By: Stephen Belanger <[email protected]>
Previously we simply create a lot of the target objects and check
if the process crash due to OOM. Due to how we use emphemeron GC
to handle memory management, which is inefficient but necessary
for correctness, the tests can produce false positives as
the GC isn't efficient enough to catch up with a very fast
heap growth.
This patch uses a new checkIfCollectable() utility to terminate the
test early once we detect that any of the target object can actually
be garbage collected. This should lower the chance of false positives.
As a drive-by this also allows us to use setImmediate() to grow the
heap even faster to make the tests run faster.
PR-URL: #49671
Backport-PR-URL: #51004
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Benjamin Gruenbaum <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Michaël Zasso <[email protected]>
Instead of using the public versions of the vm APIs internally,
use the internal versions so that we can skip unnecessary
argument validation.
The public versions would need special care to the generation
of host-defined options to hit the isolate compilation cache
when imporModuleDynamically isn't used, while internally it's
almost always used, so this allows us to handle the host-defined
options separately.
PR-URL: #50137
Backport-PR-URL: #51004
Refs: #35375
Reviewed-By: Geoffrey Booth <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Chengzhong Wu <[email protected]>
Reviewed-By: Antoine du Hamel <[email protected]>
Users cannot access any API that can be used to return a module or
module namespace in this callback without --experimental-vm-modules
anyway, so this would eventually lead to a rejection. This patch
rejects in this case with our own error message and use a constant
host-defined option for the rejection, so that scripts with the
same source can still be compiled using the compilation cache
if no `import()` is actually called in the script.
PR-URL: #50137
Backport-PR-URL: #51004
Refs: #35375
Reviewed-By: Geoffrey Booth <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Chengzhong Wu <[email protected]>
Reviewed-By: Antoine du Hamel <[email protected]>
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
dy-dx
commented
Mar 23, 2024
•
edited
Loading
Uh oh!
There was an error while loading. Please reload this page.
|
Could I request for cb85073 to be backported into this release? (as well as the next v20 release)
It fixes an issue introduced in nodejs 18.16, that is affecting users of the unzipper package.
(Apologies if this is the wrong channel for this kind of request)
|
richardlau reacted with thumbs up emoji
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Notable changes:
Added support for import attributes:
Support has been added for import attributes, to replace the old import
assertions syntax. This will aid migration by making the new syntax
available across all currently supported Node.js release lines.
For more details, see
* [#50134](#50134)
* [#51622](#51622)
Doc deprecation for `dirent.path`:
Please use newly added `dirent.parentPath` instead.
Experimental node-api feature flags
Introduces an experimental feature to segregate finalizers that affect GC state.
A new type called `node_api_nogc_env` has been introduced as the const version
of `napi_env` and `node_api_nogc_finalize` as a variant of `napi_finalize` that
accepts a `node_api_nogc_env` as its first argument.
This feature can be turned off by defining
`NODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT`.
Root certificates updated to NSS 3.98:
Certificates added:
* Telekom Security TLS ECC Root 2020
* Telekom Security TLS RSA Root 2023
Certificates removed:
* Security Communication Root CA
Updated dependencies:
* ada updated to 2.7.6.
* base64 updated to 0.5.2.
* c-ares updated to 1.27.0.
* corepack updated to 0.25.2.
* ICU updated to 74.2. Includes CLDR 44.1 and Unicode 15.1.
* npm updated to 10.5.0. Fixes a regression in signals not being passed onto child processes.
* simdutf8 updated to 4.0.8.
* Timezone updated to 2024a.
* zlib updated to 1.3.0.1-motley-40e35a7.
vm: fix V8 compilation cache support for vm.Script:
Previously repeated compilation of the same source code using `vm.Script`
stopped hitting the V8 compilation cache after v16.x when support for
`importModuleDynamically` was added to `vm.Script`, resulting in a performance
regression that blocked users (in particular Jest users) from upgrading from
v16.x.
The recent fixes allow the compilation cache to be hit again
for `vm.Script` when `--experimental-vm-modules` is not used even in the
presence of the `importModuleDynamically` option, so that users affected by the
performance regression can now upgrade. Ongoing work is also being done to
enable compilation cache support for `vm.CompileFunction`.
PR-URL: #52165
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
|
CI: https://ci.nodejs.org/job/node-test-pull-request/57928/
V8 CI: https://ci.nodejs.org/job/node-test-commit-v8-linux/5872/
CITGM 18.19.1: https://ci.nodejs.org/job/citgm-smoker/3406/
CITGM 18.20.0-proposal: https://ci.nodejs.org/job/citgm-smoker/3405/
$ ncu-ci citgm 3406 3405
--------------------------------------------------------------------------------
[1/1] Running CITGM: 3406
--------------------------------------------------------------------------------
✔ Summary data downloaded
✔ Results data downloaded
✔ Summary data downloaded
✔ Results data downloaded
----------------------------------- Summary ------------------------------------
Result FAILURE
URL https://ci.nodejs.org/job/citgm-smoker/3406/
Source https://api.github.com/repos/nodejs/node/git/refs/tags/v18.19.1
Commit [6610cc42ff50] 2024-02-14, Version 18.19.1 'Hydrogen' (LTS)
Date 2024-02-13 18:26:36 -0300
Author Rafael Gonzaga <[email protected]>
----------------------------------- Summary ------------------------------------
Result FAILURE
URL https://ci.nodejs.org/job/citgm-smoker/3405/
Source https://api.github.com/repos/nodejs/node/git/refs/heads/v18.20.0-proposal
Commit [f75dc4193e3f] 2024-03-26, Version 18.20.0 'Hydrogen' (LTS)
Date 2024-03-23 18:56:11 +0000
Author Richard Lau <[email protected]>
----------------------------------- Results ------------------------------------
FAILURE: 5 failures in 3405 not present in 3406
┌────────────────────────┬──────────────────┬───────────────────────┐
│ (index) │ 0 │ 1 │
├────────────────────────┼──────────────────┼───────────────────────┤
│ alpine-last-latest-x64 │ 'clinic-v13.0.0' │ │
│ rhel8-ppc64le │ │ │
│ rhel8-s390x │ │ │
│ aix72-ppc64 │ │ │
│ debian12-x64 │ │ │
│ osx11 │ │ │
│ alpine-latest-x64 │ 'clinic-v13.0.0' │ 'multer-v1.4.5-lts.1' │
│ ubuntu2204-64 │ 'clinic-v13.0.0' │ 'jest-v29.7.0' │
└────────────────────────┴──────────────────┴───────────────────────┘
Release build for f75dc41: https://ci-release.nodejs.org/job/iojs+release/10060/
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
richardlau
added a commit
that referenced
this pull request
Mar 26, 2024
Notable changes:
Added support for import attributes:
Support has been added for import attributes, to replace the old import
assertions syntax. This will aid migration by making the new syntax
available across all currently supported Node.js release lines.
For more details, see
* [#50134](#50134)
* [#51622](#51622)
Doc deprecation for `dirent.path`:
Please use newly added `dirent.parentPath` instead.
Experimental node-api feature flags
Introduces an experimental feature to segregate finalizers that affect GC state.
A new type called `node_api_nogc_env` has been introduced as the const version
of `napi_env` and `node_api_nogc_finalize` as a variant of `napi_finalize` that
accepts a `node_api_nogc_env` as its first argument.
This feature can be turned off by defining
`NODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT`.
Root certificates updated to NSS 3.98:
Certificates added:
* Telekom Security TLS ECC Root 2020
* Telekom Security TLS RSA Root 2023
Certificates removed:
* Security Communication Root CA
Updated dependencies:
* ada updated to 2.7.6.
* base64 updated to 0.5.2.
* c-ares updated to 1.27.0.
* corepack updated to 0.25.2.
* ICU updated to 74.2. Includes CLDR 44.1 and Unicode 15.1.
* npm updated to 10.5.0. Fixes a regression in signals not being passed onto child processes.
* simdutf8 updated to 4.0.8.
* Timezone updated to 2024a.
* zlib updated to 1.3.0.1-motley-40e35a7.
vm: fix V8 compilation cache support for vm.Script:
Previously repeated compilation of the same source code using `vm.Script`
stopped hitting the V8 compilation cache after v16.x when support for
`importModuleDynamically` was added to `vm.Script`, resulting in a performance
regression that blocked users (in particular Jest users) from upgrading from
v16.x.
The recent fixes allow the compilation cache to be hit again
for `vm.Script` when `--experimental-vm-modules` is not used even in the
presence of the `importModuleDynamically` option, so that users affected by the
performance regression can now upgrade. Ongoing work is also being done to
enable compilation cache support for `vm.CompileFunction`.
PR-URL: #52165
|
Was it intentional to include the following PR (clearly described as being for Node v20) in v18.20.0?
#49874
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
|
Yes it was explicitly backported in #51004
|
tcobbs-bentley reacted with thumbs up emoji
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Assignees
No one assigned
Labels
release
Issues and PRs related to Node.js releases.
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
|