node-linux-arm64 21.4.0 → 21.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +256 -0
- package/LICENSE +236 -2
- package/bin/node +0 -0
- package/include/node/common.gypi +1 -1
- package/include/node/config.gypi +1 -2
- package/include/node/js_native_api.h +26 -20
- package/include/node/js_native_api_types.h +39 -0
- package/include/node/node.h +32 -2
- package/include/node/node_api.h +16 -16
- package/include/node/node_version.h +1 -1
- package/include/node/uv/version.h +1 -1
- package/include/node/uv.h +12 -0
- package/include/node/v8-profiler.h +10 -0
- package/include/node/zlib.h +8 -8
- package/package.json +1 -1
- package/share/man/man1/node.1 +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
</tr>
|
|
9
9
|
<tr>
|
|
10
10
|
<td>
|
|
11
|
+
<a href="#21.6.0">21.6.0</a><br/>
|
|
12
|
+
<a href="#21.5.0">21.5.0</a><br/>
|
|
11
13
|
<a href="#21.4.0">21.4.0</a><br/>
|
|
12
14
|
<a href="#21.3.0">21.3.0</a><br/>
|
|
13
15
|
<a href="#21.2.0">21.2.0</a><br/>
|
|
@@ -40,6 +42,260 @@
|
|
|
40
42
|
* [io.js](CHANGELOG_IOJS.md)
|
|
41
43
|
* [Archive](CHANGELOG_ARCHIVE.md)
|
|
42
44
|
|
|
45
|
+
<a id="21.6.0"></a>
|
|
46
|
+
|
|
47
|
+
## 2024-01-15, Version 21.6.0 (Current), @RafaelGSS
|
|
48
|
+
|
|
49
|
+
### New connection attempt events
|
|
50
|
+
|
|
51
|
+
Three new events were added in the `net.createConnection` flow:
|
|
52
|
+
|
|
53
|
+
* `connectionAttempt`: Emitted when a new connection attempt is established. In case of Happy Eyeballs, this might emitted multiple times.
|
|
54
|
+
* `connectionAttemptFailed`: Emitted when a connection attempt failed. In case of Happy Eyeballs, this might emitted multiple times.
|
|
55
|
+
* `connectionAttemptTimeout`: Emitted when a connection attempt timed out. In case of Happy Eyeballs, this will not be emitted for the last attempt. This is not emitted at all if Happy Eyeballs is not used.
|
|
56
|
+
|
|
57
|
+
Additionally, a previous bug has been fixed where a new connection attempt could have been started after a previous one failed and after the connection was destroyed by the user.
|
|
58
|
+
This led to a failed assertion.
|
|
59
|
+
|
|
60
|
+
Contributed by Paolo Insogna in [#51045](https://github.com/nodejs/node/pull/51045).
|
|
61
|
+
|
|
62
|
+
### Changes to the Permission Model
|
|
63
|
+
|
|
64
|
+
Node.js 21.6.0 comes with several fixes for the experimental permission model and two new semver-minor commits.
|
|
65
|
+
We're adding a new flag `--allow-addons` to enable addon usage when using the Permission Model.
|
|
66
|
+
|
|
67
|
+
```console
|
|
68
|
+
$ node --experimental-permission --allow-addons
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Contributed by Rafael Gonzaga in [#51183](https://github.com/nodejs/node/pull/51183)
|
|
72
|
+
|
|
73
|
+
And relative paths are now supported through the `--allow-fs-*` flags.
|
|
74
|
+
Therefore, with this release one can use:
|
|
75
|
+
|
|
76
|
+
```console
|
|
77
|
+
$ node --experimental-permission --allow-fs-read=./index.js
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
To give only read access to the entrypoint of the application.
|
|
81
|
+
|
|
82
|
+
Contributed by Rafael Gonzaga and Carlos Espa in [#50758](https://github.com/nodejs/node/pull/50758)
|
|
83
|
+
|
|
84
|
+
### Support configurable snapshot through `--build-snapshot-config` flag
|
|
85
|
+
|
|
86
|
+
We are adding a new flag `--build-snapshot-config` to configure snapshots through a custom JSON configuration file.
|
|
87
|
+
|
|
88
|
+
```console
|
|
89
|
+
$ node --build-snapshot-config=/path/to/myconfig.json
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
When using this flag, additional script files provided on the command line will
|
|
93
|
+
not be executed and instead be interpreted as regular command line arguments.
|
|
94
|
+
|
|
95
|
+
These changes were contributed by Joyee Cheung and Anna Henningsen in [#50453](https://github.com/nodejs/node/pull/50453)
|
|
96
|
+
|
|
97
|
+
### Other Notable Changes
|
|
98
|
+
|
|
99
|
+
* \[[`c31ed51373`](https://github.com/nodejs/node/commit/c31ed51373)] - **(SEMVER-MINOR)** **timers**: export timers.promises (Marco Ippolito) [#51246](https://github.com/nodejs/node/pull/51246)
|
|
100
|
+
|
|
101
|
+
### Commits
|
|
102
|
+
|
|
103
|
+
* \[[`13a1241b83`](https://github.com/nodejs/node/commit/13a1241b83)] - **assert,crypto**: make KeyObject and CryptoKey testable for equality (Filip Skokan) [#50897](https://github.com/nodejs/node/pull/50897)
|
|
104
|
+
* \[[`4dcc5114aa`](https://github.com/nodejs/node/commit/4dcc5114aa)] - **benchmark**: remove dependency on unshipped tools (Adam Majer) [#51146](https://github.com/nodejs/node/pull/51146)
|
|
105
|
+
* \[[`2eb41f86b3`](https://github.com/nodejs/node/commit/2eb41f86b3)] - **build**: fix for VScode "Reopen in Container" (Serg Kryvonos) [#51271](https://github.com/nodejs/node/pull/51271)
|
|
106
|
+
* \[[`e03ac83c19`](https://github.com/nodejs/node/commit/e03ac83c19)] - **build**: fix arm64 cross-compilation (Michaël Zasso) [#51256](https://github.com/nodejs/node/pull/51256)
|
|
107
|
+
* \[[`cd61fce34e`](https://github.com/nodejs/node/commit/cd61fce34e)] - **build**: add `-flax-vector-conversions` to V8 build (Michaël Zasso) [#51257](https://github.com/nodejs/node/pull/51257)
|
|
108
|
+
* \[[`e5017a522e`](https://github.com/nodejs/node/commit/e5017a522e)] - **crypto**: update CryptoKey symbol properties (Filip Skokan) [#50897](https://github.com/nodejs/node/pull/50897)
|
|
109
|
+
* \[[`c0d2e8be11`](https://github.com/nodejs/node/commit/c0d2e8be11)] - **deps**: update corepack to 0.24.0 (Node.js GitHub Bot) [#51318](https://github.com/nodejs/node/pull/51318)
|
|
110
|
+
* \[[`24a9a72492`](https://github.com/nodejs/node/commit/24a9a72492)] - **deps**: update acorn to 8.11.3 (Node.js GitHub Bot) [#51317](https://github.com/nodejs/node/pull/51317)
|
|
111
|
+
* \[[`e53cbb22c2`](https://github.com/nodejs/node/commit/e53cbb22c2)] - **deps**: update ngtcp2 and nghttp3 (James M Snell) [#51291](https://github.com/nodejs/node/pull/51291)
|
|
112
|
+
* \[[`f00f1204f1`](https://github.com/nodejs/node/commit/f00f1204f1)] - **deps**: update brotli to 1.1.0 (Node.js GitHub Bot) [#50804](https://github.com/nodejs/node/pull/50804)
|
|
113
|
+
* \[[`a41dca0c51`](https://github.com/nodejs/node/commit/a41dca0c51)] - **deps**: update zlib to 1.3.0.1-motley-40e35a7 (Node.js GitHub Bot) [#51274](https://github.com/nodejs/node/pull/51274)
|
|
114
|
+
* \[[`efa12a89c6`](https://github.com/nodejs/node/commit/efa12a89c6)] - **deps**: update simdutf to 4.0.8 (Node.js GitHub Bot) [#51000](https://github.com/nodejs/node/pull/51000)
|
|
115
|
+
* \[[`25eba3d20b`](https://github.com/nodejs/node/commit/25eba3d20b)] - **deps**: V8: cherry-pick de611e69ad51 (Keyhan Vakil) [#51200](https://github.com/nodejs/node/pull/51200)
|
|
116
|
+
* \[[`a07d6e23e4`](https://github.com/nodejs/node/commit/a07d6e23e4)] - **deps**: update simdjson to 3.6.3 (Node.js GitHub Bot) [#51104](https://github.com/nodejs/node/pull/51104)
|
|
117
|
+
* \[[`6d1bfcb2dd`](https://github.com/nodejs/node/commit/6d1bfcb2dd)] - **deps**: update googletest to 530d5c8 (Node.js GitHub Bot) [#51191](https://github.com/nodejs/node/pull/51191)
|
|
118
|
+
* \[[`75e5615c43`](https://github.com/nodejs/node/commit/75e5615c43)] - **deps**: update acorn-walk to 8.3.1 (Node.js GitHub Bot) [#50457](https://github.com/nodejs/node/pull/50457)
|
|
119
|
+
* \[[`3ecc7dcc00`](https://github.com/nodejs/node/commit/3ecc7dcc00)] - **deps**: update acorn-walk to 8.3.0 (Node.js GitHub Bot) [#50457](https://github.com/nodejs/node/pull/50457)
|
|
120
|
+
* \[[`e2f8d741c8`](https://github.com/nodejs/node/commit/e2f8d741c8)] - **deps**: update zlib to 1.3.0.1-motley-dd5fc13 (Node.js GitHub Bot) [#51105](https://github.com/nodejs/node/pull/51105)
|
|
121
|
+
* \[[`4a5d3bda72`](https://github.com/nodejs/node/commit/4a5d3bda72)] - **doc**: the GN files should use Node's license (Cheng Zhao) [#50694](https://github.com/nodejs/node/pull/50694)
|
|
122
|
+
* \[[`84127514ba`](https://github.com/nodejs/node/commit/84127514ba)] - **doc**: improve localWindowSize event descriptions (Davy Landman) [#51071](https://github.com/nodejs/node/pull/51071)
|
|
123
|
+
* \[[`8ee882a49c`](https://github.com/nodejs/node/commit/8ee882a49c)] - **doc**: mark `--jitless` as experimental (Antoine du Hamel) [#51247](https://github.com/nodejs/node/pull/51247)
|
|
124
|
+
* \[[`876743ece1`](https://github.com/nodejs/node/commit/876743ece1)] - **doc**: run license-builder (github-actions\[bot]) [#51199](https://github.com/nodejs/node/pull/51199)
|
|
125
|
+
* \[[`ec6fcff009`](https://github.com/nodejs/node/commit/ec6fcff009)] - **doc**: fix limitations and known issues in pm (Rafael Gonzaga) [#51184](https://github.com/nodejs/node/pull/51184)
|
|
126
|
+
* \[[`c13a5c0373`](https://github.com/nodejs/node/commit/c13a5c0373)] - **doc**: mention node:wasi in the Threat Model (Rafael Gonzaga) [#51211](https://github.com/nodejs/node/pull/51211)
|
|
127
|
+
* \[[`4b19e62444`](https://github.com/nodejs/node/commit/4b19e62444)] - **doc**: remove ambiguous 'considered' (Rich Trott) [#51207](https://github.com/nodejs/node/pull/51207)
|
|
128
|
+
* \[[`5453abd6ad`](https://github.com/nodejs/node/commit/5453abd6ad)] - **doc**: set exit code in custom test runner example (Matteo Collina) [#51056](https://github.com/nodejs/node/pull/51056)
|
|
129
|
+
* \[[`f9d4e07faf`](https://github.com/nodejs/node/commit/f9d4e07faf)] - **doc**: remove version from `maintaining-dependencies.md` (Antoine du Hamel) [#51195](https://github.com/nodejs/node/pull/51195)
|
|
130
|
+
* \[[`df8927a073`](https://github.com/nodejs/node/commit/df8927a073)] - **doc**: mention native addons are restricted in pm (Rafael Gonzaga) [#51185](https://github.com/nodejs/node/pull/51185)
|
|
131
|
+
* \[[`e636d83914`](https://github.com/nodejs/node/commit/e636d83914)] - **doc**: correct note on behavior of stats.isDirectory (Nick Reilingh) [#50946](https://github.com/nodejs/node/pull/50946)
|
|
132
|
+
* \[[`1c71435c2a`](https://github.com/nodejs/node/commit/1c71435c2a)] - **doc**: fix `TestsStream` parent class (Jungku Lee) [#51181](https://github.com/nodejs/node/pull/51181)
|
|
133
|
+
* \[[`2c227b0d64`](https://github.com/nodejs/node/commit/2c227b0d64)] - **doc**: fix simdjson wrong link (Marco Ippolito) [#51177](https://github.com/nodejs/node/pull/51177)
|
|
134
|
+
* \[[`efa13e1943`](https://github.com/nodejs/node/commit/efa13e1943)] - **(SEMVER-MINOR)** **doc**: add documentation for --build-snapshot-config (Anna Henningsen) [#50453](https://github.com/nodejs/node/pull/50453)
|
|
135
|
+
* \[[`941aedc6fc`](https://github.com/nodejs/node/commit/941aedc6fc)] - **errors**: fix stacktrace of SystemError (uzlopak) [#49956](https://github.com/nodejs/node/pull/49956)
|
|
136
|
+
* \[[`47548d9e61`](https://github.com/nodejs/node/commit/47548d9e61)] - **esm**: fix hint on invalid module specifier (Antoine du Hamel) [#51223](https://github.com/nodejs/node/pull/51223)
|
|
137
|
+
* \[[`091098f40a`](https://github.com/nodejs/node/commit/091098f40a)] - **fs**: fix fs.promises.realpath for long paths on Windows (翠 / green) [#51032](https://github.com/nodejs/node/pull/51032)
|
|
138
|
+
* \[[`e5a8fa01aa`](https://github.com/nodejs/node/commit/e5a8fa01aa)] - **fs**: make offset, position & length args in fh.read() optional (Pulkit Gupta) [#51087](https://github.com/nodejs/node/pull/51087)
|
|
139
|
+
* \[[`c87e5d51cc`](https://github.com/nodejs/node/commit/c87e5d51cc)] - **fs**: add missing jsdoc parameters to `readSync` (Yagiz Nizipli) [#51225](https://github.com/nodejs/node/pull/51225)
|
|
140
|
+
* \[[`e24249cf37`](https://github.com/nodejs/node/commit/e24249cf37)] - **fs**: remove `internalModuleReadJSON` binding (Yagiz Nizipli) [#51224](https://github.com/nodejs/node/pull/51224)
|
|
141
|
+
* \[[`7421467812`](https://github.com/nodejs/node/commit/7421467812)] - **fs**: improve mkdtemp performance for buffer prefix (Yagiz Nizipli) [#51078](https://github.com/nodejs/node/pull/51078)
|
|
142
|
+
* \[[`5b229d775f`](https://github.com/nodejs/node/commit/5b229d775f)] - **fs**: validate fd synchronously on c++ (Yagiz Nizipli) [#51027](https://github.com/nodejs/node/pull/51027)
|
|
143
|
+
* \[[`c7a135962d`](https://github.com/nodejs/node/commit/c7a135962d)] - **http**: remove misleading warning (Luigi Pinca) [#51204](https://github.com/nodejs/node/pull/51204)
|
|
144
|
+
* \[[`a325746ff4`](https://github.com/nodejs/node/commit/a325746ff4)] - **http**: do not override user-provided options object (KuthorX) [#33633](https://github.com/nodejs/node/pull/33633)
|
|
145
|
+
* \[[`89eee7763f`](https://github.com/nodejs/node/commit/89eee7763f)] - **http2**: addtl http/2 settings (Marten Richter) [#49025](https://github.com/nodejs/node/pull/49025)
|
|
146
|
+
* \[[`624142947f`](https://github.com/nodejs/node/commit/624142947f)] - **lib**: fix use of `--frozen-intrinsics` with `--jitless` (Antoine du Hamel) [#51248](https://github.com/nodejs/node/pull/51248)
|
|
147
|
+
* \[[`8f845eb001`](https://github.com/nodejs/node/commit/8f845eb001)] - **lib**: move function declaration outside of loop (Sanjaiyan Parthipan) [#51242](https://github.com/nodejs/node/pull/51242)
|
|
148
|
+
* \[[`ed7305e49b`](https://github.com/nodejs/node/commit/ed7305e49b)] - **lib**: reduce overhead of `SafePromiseAllSettledReturnVoid` calls (Antoine du Hamel) [#51243](https://github.com/nodejs/node/pull/51243)
|
|
149
|
+
* \[[`291265ce27`](https://github.com/nodejs/node/commit/291265ce27)] - **lib**: expose default prepareStackTrace (Chengzhong Wu) [#50827](https://github.com/nodejs/node/pull/50827)
|
|
150
|
+
* \[[`8ff6bc45ca`](https://github.com/nodejs/node/commit/8ff6bc45ca)] - **lib,permission**: handle buffer on fs.symlink (Rafael Gonzaga) [#51212](https://github.com/nodejs/node/pull/51212)
|
|
151
|
+
* \[[`416b4f8063`](https://github.com/nodejs/node/commit/416b4f8063)] - **(SEMVER-MINOR)** **lib,src,permission**: port path.resolve to C++ (Rafael Gonzaga) [#50758](https://github.com/nodejs/node/pull/50758)
|
|
152
|
+
* \[[`6648a5c576`](https://github.com/nodejs/node/commit/6648a5c576)] - **meta**: notify tsc on changes in SECURITY.md (Rafael Gonzaga) [#51259](https://github.com/nodejs/node/pull/51259)
|
|
153
|
+
* \[[`83a99ccedd`](https://github.com/nodejs/node/commit/83a99ccedd)] - **meta**: update artifact actions to v4 (Michaël Zasso) [#51219](https://github.com/nodejs/node/pull/51219)
|
|
154
|
+
* \[[`b621ada69a`](https://github.com/nodejs/node/commit/b621ada69a)] - **module**: move the CJS exports cache to internal/modules/cjs/loader (Joyee Cheung) [#51157](https://github.com/nodejs/node/pull/51157)
|
|
155
|
+
* \[[`e4be5b60f0`](https://github.com/nodejs/node/commit/e4be5b60f0)] - **(SEMVER-MINOR)** **net**: add connection attempt events (Paolo Insogna) [#51045](https://github.com/nodejs/node/pull/51045)
|
|
156
|
+
* \[[`3a492056e2`](https://github.com/nodejs/node/commit/3a492056e2)] - **node-api**: type tag external values without v8::Private (Chengzhong Wu) [#51149](https://github.com/nodejs/node/pull/51149)
|
|
157
|
+
* \[[`b2135ae7dc`](https://github.com/nodejs/node/commit/b2135ae7dc)] - **node-api**: segregate nogc APIs from rest via type system (Gabriel Schulhof) [#50060](https://github.com/nodejs/node/pull/50060)
|
|
158
|
+
* \[[`8f4325dcd5`](https://github.com/nodejs/node/commit/8f4325dcd5)] - **permission**: fix wildcard when children > 1 (Rafael Gonzaga) [#51209](https://github.com/nodejs/node/pull/51209)
|
|
159
|
+
* \[[`7ecf99404e`](https://github.com/nodejs/node/commit/7ecf99404e)] - **quic**: update quic impl to use latest ngtcp2/nghttp3 (James M Snell) [#51291](https://github.com/nodejs/node/pull/51291)
|
|
160
|
+
* \[[`5b32e21f3b`](https://github.com/nodejs/node/commit/5b32e21f3b)] - **quic**: add quic internalBinding, refine Endpoint, add types (James M Snell) [#51112](https://github.com/nodejs/node/pull/51112)
|
|
161
|
+
* \[[`3310095bea`](https://github.com/nodejs/node/commit/3310095bea)] - **repl**: fix prepareStackTrace frames array order (Chengzhong Wu) [#50827](https://github.com/nodejs/node/pull/50827)
|
|
162
|
+
* \[[`a0ff00b526`](https://github.com/nodejs/node/commit/a0ff00b526)] - **src**: avoid draining platform tasks at FreeEnvironment (Chengzhong Wu) [#51290](https://github.com/nodejs/node/pull/51290)
|
|
163
|
+
* \[[`115e0585cd`](https://github.com/nodejs/node/commit/115e0585cd)] - **src**: add fast api for Histogram (James M Snell) [#51296](https://github.com/nodejs/node/pull/51296)
|
|
164
|
+
* \[[`29b81576c6`](https://github.com/nodejs/node/commit/29b81576c6)] - **src**: refactor `GetCreationContext` calls (Yagiz Nizipli) [#51287](https://github.com/nodejs/node/pull/51287)
|
|
165
|
+
* \[[`54dd978400`](https://github.com/nodejs/node/commit/54dd978400)] - **src**: enter isolate before destructing IsolateData (Ben Noordhuis) [#51138](https://github.com/nodejs/node/pull/51138)
|
|
166
|
+
* \[[`864ecb0dfa`](https://github.com/nodejs/node/commit/864ecb0dfa)] - **src**: do not treat all paths ending with node\_modules as such (Michaël Zasso) [#51269](https://github.com/nodejs/node/pull/51269)
|
|
167
|
+
* \[[`df31c8114c`](https://github.com/nodejs/node/commit/df31c8114c)] - **src**: eliminate duplicate code in histogram.cc (James M Snell) [#51263](https://github.com/nodejs/node/pull/51263)
|
|
168
|
+
* \[[`17c73e6d0c`](https://github.com/nodejs/node/commit/17c73e6d0c)] - **src**: fix unix abstract socket path for trace event (theanarkh) [#50858](https://github.com/nodejs/node/pull/50858)
|
|
169
|
+
* \[[`96d64edc94`](https://github.com/nodejs/node/commit/96d64edc94)] - **src**: use BignumPointer and use BN\_clear\_free (James M Snell) [#50454](https://github.com/nodejs/node/pull/50454)
|
|
170
|
+
* \[[`8a2dd93a14`](https://github.com/nodejs/node/commit/8a2dd93a14)] - **src**: implement FastByteLengthUtf8 with simdutf::utf8\_length\_from\_latin1 (Daniel Lemire) [#50840](https://github.com/nodejs/node/pull/50840)
|
|
171
|
+
* \[[`e54ddf898f`](https://github.com/nodejs/node/commit/e54ddf898f)] - **(SEMVER-MINOR)** **src**: support configurable snapshot (Joyee Cheung) [#50453](https://github.com/nodejs/node/pull/50453)
|
|
172
|
+
* \[[`a69c7d7bc3`](https://github.com/nodejs/node/commit/a69c7d7bc3)] - **(SEMVER-MINOR)** **src,permission**: add --allow-addon flag (Rafael Gonzaga) [#51183](https://github.com/nodejs/node/pull/51183)
|
|
173
|
+
* \[[`e7925e66fc`](https://github.com/nodejs/node/commit/e7925e66fc)] - **src,stream**: improve WriteString (ywave620) [#51155](https://github.com/nodejs/node/pull/51155)
|
|
174
|
+
* \[[`82de6603af`](https://github.com/nodejs/node/commit/82de6603af)] - **stream**: fix code style (Mattias Buelens) [#51168](https://github.com/nodejs/node/pull/51168)
|
|
175
|
+
* \[[`e443953656`](https://github.com/nodejs/node/commit/e443953656)] - **stream**: fix cloned webstreams not being unref'd (James M Snell) [#51255](https://github.com/nodejs/node/pull/51255)
|
|
176
|
+
* \[[`757a84c9ea`](https://github.com/nodejs/node/commit/757a84c9ea)] - **test**: fix flaky conditions for ppc64 SEA tests (Richard Lau) [#51422](https://github.com/nodejs/node/pull/51422)
|
|
177
|
+
* \[[`85ee2f7255`](https://github.com/nodejs/node/commit/85ee2f7255)] - **test**: replace forEach() with for...of (Alexander Jones) [#50608](https://github.com/nodejs/node/pull/50608)
|
|
178
|
+
* \[[`549e4b4142`](https://github.com/nodejs/node/commit/549e4b4142)] - **test**: replace forEach with for...of (Ospite Privilegiato) [#50787](https://github.com/nodejs/node/pull/50787)
|
|
179
|
+
* \[[`ef44f9bef2`](https://github.com/nodejs/node/commit/ef44f9bef2)] - **test**: replace foreach with for of (lucacapocci94-dev) [#50790](https://github.com/nodejs/node/pull/50790)
|
|
180
|
+
* \[[`652af45485`](https://github.com/nodejs/node/commit/652af45485)] - **test**: replace forEach() with for...of (Jia) [#50610](https://github.com/nodejs/node/pull/50610)
|
|
181
|
+
* \[[`684dd9db2f`](https://github.com/nodejs/node/commit/684dd9db2f)] - **test**: fix inconsistency write size in `test-fs-readfile-tostring-fail` (Jungku Lee) [#51141](https://github.com/nodejs/node/pull/51141)
|
|
182
|
+
* \[[`aaf710f535`](https://github.com/nodejs/node/commit/aaf710f535)] - **test**: replace forEach test-http-server-multiheaders2 (Marco Mac) [#50794](https://github.com/nodejs/node/pull/50794)
|
|
183
|
+
* \[[`57c64550cc`](https://github.com/nodejs/node/commit/57c64550cc)] - **test**: replace forEach with for-of in test-webcrypto-export-import-ec (Chiara Ricciardi) [#51249](https://github.com/nodejs/node/pull/51249)
|
|
184
|
+
* \[[`88e865181b`](https://github.com/nodejs/node/commit/88e865181b)] - **test**: move to for of loop in test-http-hostname-typechecking.js (Luca Del Puppo) [#50782](https://github.com/nodejs/node/pull/50782)
|
|
185
|
+
* \[[`3db376f67a`](https://github.com/nodejs/node/commit/3db376f67a)] - **test**: skip test-watch-mode-inspect on arm (Michael Dawson) [#51210](https://github.com/nodejs/node/pull/51210)
|
|
186
|
+
* \[[`38232d1c52`](https://github.com/nodejs/node/commit/38232d1c52)] - **test**: replace forEach with for of in file test-trace-events-net.js (Ianna83) [#50789](https://github.com/nodejs/node/pull/50789)
|
|
187
|
+
* \[[`f1cb58355a`](https://github.com/nodejs/node/commit/f1cb58355a)] - **test**: replace forEach() with for...of in test/parallel/test-util-log.js (Edoardo Dusi) [#50783](https://github.com/nodejs/node/pull/50783)
|
|
188
|
+
* \[[`9bfd84c117`](https://github.com/nodejs/node/commit/9bfd84c117)] - **test**: replace forEach with for of in test-trace-events-api.js (Andrea Pavone) [#50784](https://github.com/nodejs/node/pull/50784)
|
|
189
|
+
* \[[`7e9834915a`](https://github.com/nodejs/node/commit/7e9834915a)] - **test**: replace forEach with for-of in test-v8-serders.js (Mattia Iannone) [#50791](https://github.com/nodejs/node/pull/50791)
|
|
190
|
+
* \[[`b6f232e841`](https://github.com/nodejs/node/commit/b6f232e841)] - **test**: add URL tests to fs-read in pm (Rafael Gonzaga) [#51213](https://github.com/nodejs/node/pull/51213)
|
|
191
|
+
* \[[`8a2178c5f5`](https://github.com/nodejs/node/commit/8a2178c5f5)] - **test**: use tmpdir.refresh() in test-esm-loader-resolve-type.mjs (Luigi Pinca) [#51206](https://github.com/nodejs/node/pull/51206)
|
|
192
|
+
* \[[`7e9a0b192a`](https://github.com/nodejs/node/commit/7e9a0b192a)] - **test**: use tmpdir.refresh() in test-esm-json.mjs (Luigi Pinca) [#51205](https://github.com/nodejs/node/pull/51205)
|
|
193
|
+
* \[[`d7c2572fe0`](https://github.com/nodejs/node/commit/d7c2572fe0)] - **test**: fix flakiness in worker\*.test-free-called (Jithil P Ponnan) [#51013](https://github.com/nodejs/node/pull/51013)
|
|
194
|
+
* \[[`979cebc955`](https://github.com/nodejs/node/commit/979cebc955)] - **test\_runner**: fixed test object is incorrectly passed to setup() (Pulkit Gupta) [#50982](https://github.com/nodejs/node/pull/50982)
|
|
195
|
+
* \[[`63db82abe6`](https://github.com/nodejs/node/commit/63db82abe6)] - **test\_runner**: fixed to run after hook if before throws an error (Pulkit Gupta) [#51062](https://github.com/nodejs/node/pull/51062)
|
|
196
|
+
* \[[`c31ed51373`](https://github.com/nodejs/node/commit/c31ed51373)] - **(SEMVER-MINOR)** **timers**: export timers.promises (Marco Ippolito) [#51246](https://github.com/nodejs/node/pull/51246)
|
|
197
|
+
* \[[`fc10f889eb`](https://github.com/nodejs/node/commit/fc10f889eb)] - **tools**: update lint-md-dependencies to rollup\@4.9.2 (Node.js GitHub Bot) [#51320](https://github.com/nodejs/node/pull/51320)
|
|
198
|
+
* \[[`d5a5f12d15`](https://github.com/nodejs/node/commit/d5a5f12d15)] - **tools**: fix dep\_updaters dir updates (Michaël Zasso) [#51294](https://github.com/nodejs/node/pull/51294)
|
|
199
|
+
* \[[`bdcb5ed510`](https://github.com/nodejs/node/commit/bdcb5ed510)] - **tools**: update inspector\_protocol to c488ba2 (cola119) [#51293](https://github.com/nodejs/node/pull/51293)
|
|
200
|
+
* \[[`69a46add77`](https://github.com/nodejs/node/commit/69a46add77)] - **tools**: update inspector\_protocol to 9b4a4aa (cola119) [#51293](https://github.com/nodejs/node/pull/51293)
|
|
201
|
+
* \[[`e325f49d19`](https://github.com/nodejs/node/commit/e325f49d19)] - **tools**: update inspector\_protocol to 2f51e05 (cola119) [#51293](https://github.com/nodejs/node/pull/51293)
|
|
202
|
+
* \[[`60d804851b`](https://github.com/nodejs/node/commit/60d804851b)] - **tools**: update inspector\_protocol to d7b099b (cola119) [#51293](https://github.com/nodejs/node/pull/51293)
|
|
203
|
+
* \[[`d18168489f`](https://github.com/nodejs/node/commit/d18168489f)] - **tools**: update inspector\_protocol to 912eb68 (cola119) [#51293](https://github.com/nodejs/node/pull/51293)
|
|
204
|
+
* \[[`ef4f46fc39`](https://github.com/nodejs/node/commit/ef4f46fc39)] - **tools**: update inspector\_protocol to 547c5b8 (cola119) [#51293](https://github.com/nodejs/node/pull/51293)
|
|
205
|
+
* \[[`c3126fc016`](https://github.com/nodejs/node/commit/c3126fc016)] - **tools**: update inspector\_protocol to ca525fc (cola119) [#51293](https://github.com/nodejs/node/pull/51293)
|
|
206
|
+
* \[[`917d887dde`](https://github.com/nodejs/node/commit/917d887dde)] - **tools**: update lint-md-dependencies to rollup\@4.9.1 (Node.js GitHub Bot) [#51276](https://github.com/nodejs/node/pull/51276)
|
|
207
|
+
* \[[`37594918e0`](https://github.com/nodejs/node/commit/37594918e0)] - **tools**: check timezone current version (Marco Ippolito) [#51178](https://github.com/nodejs/node/pull/51178)
|
|
208
|
+
* \[[`d0d2faf899`](https://github.com/nodejs/node/commit/d0d2faf899)] - **tools**: update lint-md-dependencies to rollup\@4.9.0 (Node.js GitHub Bot) [#51193](https://github.com/nodejs/node/pull/51193)
|
|
209
|
+
* \[[`c96ef6533c`](https://github.com/nodejs/node/commit/c96ef6533c)] - **tools**: update eslint to 8.56.0 (Node.js GitHub Bot) [#51194](https://github.com/nodejs/node/pull/51194)
|
|
210
|
+
* \[[`f4f781d493`](https://github.com/nodejs/node/commit/f4f781d493)] - **util**: pass invalidSubtypeIndex instead of trimmedSubtype to error (Gaurish Sethia) [#51264](https://github.com/nodejs/node/pull/51264)
|
|
211
|
+
* \[[`867b484429`](https://github.com/nodejs/node/commit/867b484429)] - **watch**: clarify that the fileName parameter can be null (Luigi Pinca) [#51305](https://github.com/nodejs/node/pull/51305)
|
|
212
|
+
* \[[`56e8969b65`](https://github.com/nodejs/node/commit/56e8969b65)] - **watch**: fix null `fileName` on windows systems (vnc5) [#49891](https://github.com/nodejs/node/pull/49891)
|
|
213
|
+
* \[[`3f4fd6efbb`](https://github.com/nodejs/node/commit/3f4fd6efbb)] - **watch**: fix infinite loop when passing --watch=true flag (Pulkit Gupta) [#51160](https://github.com/nodejs/node/pull/51160)
|
|
214
|
+
|
|
215
|
+
<a id="21.5.0"></a>
|
|
216
|
+
|
|
217
|
+
## 2023-12-19, Version 21.5.0 (Current), @RafaelGSS
|
|
218
|
+
|
|
219
|
+
### Notable Changes
|
|
220
|
+
|
|
221
|
+
* \[[`0dd53da722`](https://github.com/nodejs/node/commit/0dd53da722)] - **(SEMVER-MINOR)** **deps**: add simdjson (Yagiz Nizipli) [#50322](https://github.com/nodejs/node/pull/50322)
|
|
222
|
+
* \[[`9f54987fbc`](https://github.com/nodejs/node/commit/9f54987fbc)] - **module**: merge config with `package_json_reader` (Yagiz Nizipli) [#50322](https://github.com/nodejs/node/pull/50322)
|
|
223
|
+
* \[[`45e4f82912`](https://github.com/nodejs/node/commit/45e4f82912)] - **src**: move package resolver to c++ (Yagiz Nizipli) [#50322](https://github.com/nodejs/node/pull/50322)
|
|
224
|
+
|
|
225
|
+
#### Deprecations
|
|
226
|
+
|
|
227
|
+
* \[[`26ed4ad01f`](https://github.com/nodejs/node/commit/26ed4ad01f)] - **doc**: deprecate hash constructor (Marco Ippolito) [#51077](https://github.com/nodejs/node/pull/51077)
|
|
228
|
+
* \[[`58ca66a1a7`](https://github.com/nodejs/node/commit/58ca66a1a7)] - **doc**: deprecate `dirent.path` (Antoine du Hamel) [#51020](https://github.com/nodejs/node/pull/51020)
|
|
229
|
+
|
|
230
|
+
### Commits
|
|
231
|
+
|
|
232
|
+
* \[[`1bbdbdfbeb`](https://github.com/nodejs/node/commit/1bbdbdfbeb)] - **benchmark**: update iterations in benchmark/perf\_hooks (Lei Shi) [#50869](https://github.com/nodejs/node/pull/50869)
|
|
233
|
+
* \[[`087fb0908e`](https://github.com/nodejs/node/commit/087fb0908e)] - **benchmark**: update iterations in benchmark/crypto/aes-gcm-throughput.js (Lei Shi) [#50929](https://github.com/nodejs/node/pull/50929)
|
|
234
|
+
* \[[`53b16c71fb`](https://github.com/nodejs/node/commit/53b16c71fb)] - **benchmark**: update iteration and size in benchmark/crypto/randomBytes.js (Lei Shi) [#50868](https://github.com/nodejs/node/pull/50868)
|
|
235
|
+
* \[[`38fd0ca753`](https://github.com/nodejs/node/commit/38fd0ca753)] - **benchmark**: add undici websocket benchmark (Chenyu Yang) [#50586](https://github.com/nodejs/node/pull/50586)
|
|
236
|
+
* \[[`b148c43244`](https://github.com/nodejs/node/commit/b148c43244)] - **benchmark**: add create-hash benchmark (Joyee Cheung) [#51026](https://github.com/nodejs/node/pull/51026)
|
|
237
|
+
* \[[`fdd8c18f96`](https://github.com/nodejs/node/commit/fdd8c18f96)] - **benchmark**: update interations and len in benchmark/util/text-decoder.js (Lei Shi) [#50938](https://github.com/nodejs/node/pull/50938)
|
|
238
|
+
* \[[`a9972057ac`](https://github.com/nodejs/node/commit/a9972057ac)] - **benchmark**: update iterations of benchmark/util/type-check.js (Lei Shi) [#50937](https://github.com/nodejs/node/pull/50937)
|
|
239
|
+
* \[[`b80bb1329b`](https://github.com/nodejs/node/commit/b80bb1329b)] - **benchmark**: update iterations in benchmark/util/normalize-encoding.js (Lei Shi) [#50934](https://github.com/nodejs/node/pull/50934)
|
|
240
|
+
* \[[`dbee03d646`](https://github.com/nodejs/node/commit/dbee03d646)] - **benchmark**: update iterations in benchmark/util/inspect-array.js (Lei Shi) [#50933](https://github.com/nodejs/node/pull/50933)
|
|
241
|
+
* \[[`f2d83a3a84`](https://github.com/nodejs/node/commit/f2d83a3a84)] - **benchmark**: update iterations in benchmark/util/format.js (Lei Shi) [#50932](https://github.com/nodejs/node/pull/50932)
|
|
242
|
+
* \[[`2581fce553`](https://github.com/nodejs/node/commit/2581fce553)] - **bootstrap**: improve snapshot unsupported builtin warnings (Joyee Cheung) [#50944](https://github.com/nodejs/node/pull/50944)
|
|
243
|
+
* \[[`735bad3694`](https://github.com/nodejs/node/commit/735bad3694)] - **build**: fix warnings from uv for gn build (Cheng Zhao) [#51069](https://github.com/nodejs/node/pull/51069)
|
|
244
|
+
* \[[`8da9d969f9`](https://github.com/nodejs/node/commit/8da9d969f9)] - **deps**: V8: cherry-pick 0fd478bcdabd (Joyee Cheung) [#50572](https://github.com/nodejs/node/pull/50572)
|
|
245
|
+
* \[[`429fbb37c1`](https://github.com/nodejs/node/commit/429fbb37c1)] - **deps**: update simdjson to v3.6.2 (Yagiz Nizipli) [#50986](https://github.com/nodejs/node/pull/50986)
|
|
246
|
+
* \[[`9950103253`](https://github.com/nodejs/node/commit/9950103253)] - **deps**: update zlib to 1.3-22124f5 (Node.js GitHub Bot) [#50910](https://github.com/nodejs/node/pull/50910)
|
|
247
|
+
* \[[`0b61823e8b`](https://github.com/nodejs/node/commit/0b61823e8b)] - **deps**: update undici to 5.28.2 (Node.js GitHub Bot) [#51024](https://github.com/nodejs/node/pull/51024)
|
|
248
|
+
* \[[`95d8a273cc`](https://github.com/nodejs/node/commit/95d8a273cc)] - **deps**: cherry-pick bfbe4e38d7 from libuv upstream (Abdirahim Musse) [#50650](https://github.com/nodejs/node/pull/50650)
|
|
249
|
+
* \[[`06038a489e`](https://github.com/nodejs/node/commit/06038a489e)] - **deps**: update libuv to 1.47.0 (Node.js GitHub Bot) [#50650](https://github.com/nodejs/node/pull/50650)
|
|
250
|
+
* \[[`0dd53da722`](https://github.com/nodejs/node/commit/0dd53da722)] - **(SEMVER-MINOR)** **deps**: add simdjson (Yagiz Nizipli) [#50322](https://github.com/nodejs/node/pull/50322)
|
|
251
|
+
* \[[`04eaa5cdd7`](https://github.com/nodejs/node/commit/04eaa5cdd7)] - **doc**: run license-builder (github-actions\[bot]) [#51111](https://github.com/nodejs/node/pull/51111)
|
|
252
|
+
* \[[`26ed4ad01f`](https://github.com/nodejs/node/commit/26ed4ad01f)] - **doc**: deprecate hash constructor (Marco Ippolito) [#51077](https://github.com/nodejs/node/pull/51077)
|
|
253
|
+
* \[[`637ffce4c4`](https://github.com/nodejs/node/commit/637ffce4c4)] - **doc**: add note regarding `--experimental-detect-module` (Shubherthi Mitra) [#51089](https://github.com/nodejs/node/pull/51089)
|
|
254
|
+
* \[[`838179b096`](https://github.com/nodejs/node/commit/838179b096)] - **doc**: correct tracingChannel.traceCallback() (Gerhard Stöbich) [#51068](https://github.com/nodejs/node/pull/51068)
|
|
255
|
+
* \[[`539bee4f0a`](https://github.com/nodejs/node/commit/539bee4f0a)] - **doc**: use length argument in pbkdf2Key (Tobias Nießen) [#51066](https://github.com/nodejs/node/pull/51066)
|
|
256
|
+
* \[[`c45a9a3187`](https://github.com/nodejs/node/commit/c45a9a3187)] - **doc**: add deprecation notice to `dirent.path` (Antoine du Hamel) [#51059](https://github.com/nodejs/node/pull/51059)
|
|
257
|
+
* \[[`58ca66a1a7`](https://github.com/nodejs/node/commit/58ca66a1a7)] - **doc**: deprecate `dirent.path` (Antoine du Hamel) [#51020](https://github.com/nodejs/node/pull/51020)
|
|
258
|
+
* \[[`c2b6edf9ab`](https://github.com/nodejs/node/commit/c2b6edf9ab)] - **esm**: fix hook name in error message (Bruce MacNaughton) [#50466](https://github.com/nodejs/node/pull/50466)
|
|
259
|
+
* \[[`35e8f26f07`](https://github.com/nodejs/node/commit/35e8f26f07)] - **fs**: throw fchownSync error from c++ (Yagiz Nizipli) [#51075](https://github.com/nodejs/node/pull/51075)
|
|
260
|
+
* \[[`c3c8237089`](https://github.com/nodejs/node/commit/c3c8237089)] - **fs**: update params in jsdoc for createReadStream and createWriteStream (Jungku Lee) [#51063](https://github.com/nodejs/node/pull/51063)
|
|
261
|
+
* \[[`3f7f3ce8c9`](https://github.com/nodejs/node/commit/3f7f3ce8c9)] - **fs**: improve error performance of readvSync (IlyasShabi) [#50100](https://github.com/nodejs/node/pull/50100)
|
|
262
|
+
* \[[`7f95926f17`](https://github.com/nodejs/node/commit/7f95926f17)] - **http**: handle multi-value content-disposition header (Arsalan Ahmad) [#50977](https://github.com/nodejs/node/pull/50977)
|
|
263
|
+
* \[[`7a8a2d5632`](https://github.com/nodejs/node/commit/7a8a2d5632)] - **lib**: don't parse windows drive letters as schemes (华) [#50580](https://github.com/nodejs/node/pull/50580)
|
|
264
|
+
* \[[`aa2be4bb76`](https://github.com/nodejs/node/commit/aa2be4bb76)] - **module**: load source maps in `commonjs` translator (Hiroki Osame) [#51033](https://github.com/nodejs/node/pull/51033)
|
|
265
|
+
* \[[`c0e5e74876`](https://github.com/nodejs/node/commit/c0e5e74876)] - **module**: document `parentURL` in register options (Hiroki Osame) [#51039](https://github.com/nodejs/node/pull/51039)
|
|
266
|
+
* \[[`4eedf5e694`](https://github.com/nodejs/node/commit/4eedf5e694)] - **module**: fix recently introduced coverity warning (Michael Dawson) [#50843](https://github.com/nodejs/node/pull/50843)
|
|
267
|
+
* \[[`9f54987fbc`](https://github.com/nodejs/node/commit/9f54987fbc)] - **module**: merge config with `package_json_reader` (Yagiz Nizipli) [#50322](https://github.com/nodejs/node/pull/50322)
|
|
268
|
+
* \[[`5f95dca638`](https://github.com/nodejs/node/commit/5f95dca638)] - **node-api**: introduce experimental feature flags (Gabriel Schulhof) [#50991](https://github.com/nodejs/node/pull/50991)
|
|
269
|
+
* \[[`3fb7fc909e`](https://github.com/nodejs/node/commit/3fb7fc909e)] - **quic**: further implementation details (James M Snell) [#48244](https://github.com/nodejs/node/pull/48244)
|
|
270
|
+
* \[[`fa25e069fc`](https://github.com/nodejs/node/commit/fa25e069fc)] - **src**: implement countObjectsWithPrototype (Joyee Cheung) [#50572](https://github.com/nodejs/node/pull/50572)
|
|
271
|
+
* \[[`abe90527e4`](https://github.com/nodejs/node/commit/abe90527e4)] - **src**: register udp\_wrap external references (Joyee Cheung) [#50943](https://github.com/nodejs/node/pull/50943)
|
|
272
|
+
* \[[`84e2f51d14`](https://github.com/nodejs/node/commit/84e2f51d14)] - **src**: register spawn\_sync external references (Joyee Cheung) [#50943](https://github.com/nodejs/node/pull/50943)
|
|
273
|
+
* \[[`2cfee53d7b`](https://github.com/nodejs/node/commit/2cfee53d7b)] - **src**: register process\_wrap external references (Joyee Cheung) [#50943](https://github.com/nodejs/node/pull/50943)
|
|
274
|
+
* \[[`9b7f79a8bd`](https://github.com/nodejs/node/commit/9b7f79a8bd)] - **src**: fix double free reported by coverity (Michael Dawson) [#51046](https://github.com/nodejs/node/pull/51046)
|
|
275
|
+
* \[[`fc5503246e`](https://github.com/nodejs/node/commit/fc5503246e)] - **src**: remove unused headers in `node_file.cc` (Jungku Lee) [#50927](https://github.com/nodejs/node/pull/50927)
|
|
276
|
+
* \[[`c3abdc58af`](https://github.com/nodejs/node/commit/c3abdc58af)] - **src**: implement --trace-promises (Joyee Cheung) [#50899](https://github.com/nodejs/node/pull/50899)
|
|
277
|
+
* \[[`f90fc83e97`](https://github.com/nodejs/node/commit/f90fc83e97)] - **src**: fix dynamically linked zlib version (Richard Lau) [#51007](https://github.com/nodejs/node/pull/51007)
|
|
278
|
+
* \[[`9bf144379f`](https://github.com/nodejs/node/commit/9bf144379f)] - **src**: omit bool values of package.json main field (Yagiz Nizipli) [#50965](https://github.com/nodejs/node/pull/50965)
|
|
279
|
+
* \[[`45e4f82912`](https://github.com/nodejs/node/commit/45e4f82912)] - **src**: move package resolver to c++ (Yagiz Nizipli) [#50322](https://github.com/nodejs/node/pull/50322)
|
|
280
|
+
* \[[`71acd36778`](https://github.com/nodejs/node/commit/71acd36778)] - **stream**: implement TransformStream cleanup using "transformer.cancel" (Debadree Chatterjee) [#50126](https://github.com/nodejs/node/pull/50126)
|
|
281
|
+
* \[[`5112306064`](https://github.com/nodejs/node/commit/5112306064)] - **stream**: fix fd is null when calling clearBuffer (kylo5aby) [#50994](https://github.com/nodejs/node/pull/50994)
|
|
282
|
+
* \[[`ed070755ec`](https://github.com/nodejs/node/commit/ed070755ec)] - **test**: deflake test-diagnostics-channel-memory-leak (Joyee Cheung) [#50572](https://github.com/nodejs/node/pull/50572)
|
|
283
|
+
* \[[`aee01ff1b4`](https://github.com/nodejs/node/commit/aee01ff1b4)] - **test**: test syncrhnous methods of child\_process in snapshot (Joyee Cheung) [#50943](https://github.com/nodejs/node/pull/50943)
|
|
284
|
+
* \[[`cc949869a3`](https://github.com/nodejs/node/commit/cc949869a3)] - **test**: handle relative https redirect (Richard Lau) [#51121](https://github.com/nodejs/node/pull/51121)
|
|
285
|
+
* \[[`048349ed4c`](https://github.com/nodejs/node/commit/048349ed4c)] - **test**: fix test runner colored output test (Moshe Atlow) [#51064](https://github.com/nodejs/node/pull/51064)
|
|
286
|
+
* \[[`7f5291d783`](https://github.com/nodejs/node/commit/7f5291d783)] - **test**: resolve path of embedtest binary correctly (Cheng Zhao) [#50276](https://github.com/nodejs/node/pull/50276)
|
|
287
|
+
* \[[`4ddd0daf5f`](https://github.com/nodejs/node/commit/4ddd0daf5f)] - **test**: escape cwd in regexp (Jérémy Lal) [#50980](https://github.com/nodejs/node/pull/50980)
|
|
288
|
+
* \[[`3ccd5faabb`](https://github.com/nodejs/node/commit/3ccd5faabb)] - **test\_runner**: format coverage report for tap reporter (Pulkit Gupta) [#51119](https://github.com/nodejs/node/pull/51119)
|
|
289
|
+
* \[[`d5c9adf3df`](https://github.com/nodejs/node/commit/d5c9adf3df)] - **test\_runner**: fix infinite loop when files are undefined in test runner (Pulkit Gupta) [#51047](https://github.com/nodejs/node/pull/51047)
|
|
290
|
+
* \[[`328a41701c`](https://github.com/nodejs/node/commit/328a41701c)] - **tools**: update lint-md-dependencies to rollup\@4.7.0 (Node.js GitHub Bot) [#51106](https://github.com/nodejs/node/pull/51106)
|
|
291
|
+
* \[[`297cb6f5c2`](https://github.com/nodejs/node/commit/297cb6f5c2)] - **tools**: update doc to highlight.js\@11.9.0 unified\@11.0.4 (Node.js GitHub Bot) [#50459](https://github.com/nodejs/node/pull/50459)
|
|
292
|
+
* \[[`4705023343`](https://github.com/nodejs/node/commit/4705023343)] - **tools**: fix simdjson updater (Yagiz Nizipli) [#50986](https://github.com/nodejs/node/pull/50986)
|
|
293
|
+
* \[[`c9841583db`](https://github.com/nodejs/node/commit/c9841583db)] - **tools**: update eslint to 8.55.0 (Node.js GitHub Bot) [#51025](https://github.com/nodejs/node/pull/51025)
|
|
294
|
+
* \[[`2b4671125e`](https://github.com/nodejs/node/commit/2b4671125e)] - **tools**: update lint-md-dependencies to rollup\@4.6.1 (Node.js GitHub Bot) [#51022](https://github.com/nodejs/node/pull/51022)
|
|
295
|
+
* \[[`cd891b37f6`](https://github.com/nodejs/node/commit/cd891b37f6)] - **util**: improve performance of function areSimilarFloatArrays (Liu Jia) [#51040](https://github.com/nodejs/node/pull/51040)
|
|
296
|
+
* \[[`e178a43509`](https://github.com/nodejs/node/commit/e178a43509)] - **vm**: use v8::DeserializeInternalFieldsCallback explicitly (Joyee Cheung) [#50984](https://github.com/nodejs/node/pull/50984)
|
|
297
|
+
* \[[`fd028e146f`](https://github.com/nodejs/node/commit/fd028e146f)] - **win,tools**: upgrade Windows signing to smctl (Stefan Stojanovic) [#50956](https://github.com/nodejs/node/pull/50956)
|
|
298
|
+
|
|
43
299
|
<a id="21.4.0"></a>
|
|
44
300
|
|
|
45
301
|
## 2023-12-05, Version 21.4.0 (Current), @targos
|
package/LICENSE
CHANGED
|
@@ -1285,9 +1285,9 @@ The externally maintained libraries used by Node.js are:
|
|
|
1285
1285
|
- zlib, located at deps/zlib, is licensed as follows:
|
|
1286
1286
|
"""
|
|
1287
1287
|
zlib.h -- interface of the 'zlib' general purpose compression library
|
|
1288
|
-
version 1.
|
|
1288
|
+
version 1.3.0.1, August xxth, 2023
|
|
1289
1289
|
|
|
1290
|
-
Copyright (C) 1995-
|
|
1290
|
+
Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler
|
|
1291
1291
|
|
|
1292
1292
|
This software is provided 'as-is', without any express or implied
|
|
1293
1293
|
warranty. In no event will the authors be held liable for any damages
|
|
@@ -1309,6 +1309,211 @@ The externally maintained libraries used by Node.js are:
|
|
|
1309
1309
|
jloup@gzip.org madler@alumni.caltech.edu
|
|
1310
1310
|
"""
|
|
1311
1311
|
|
|
1312
|
+
- simdjson, located at deps/simdjson, is licensed as follows:
|
|
1313
|
+
"""
|
|
1314
|
+
Apache License
|
|
1315
|
+
Version 2.0, January 2004
|
|
1316
|
+
http://www.apache.org/licenses/
|
|
1317
|
+
|
|
1318
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
1319
|
+
|
|
1320
|
+
1. Definitions.
|
|
1321
|
+
|
|
1322
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
1323
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
1324
|
+
|
|
1325
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
1326
|
+
the copyright owner that is granting the License.
|
|
1327
|
+
|
|
1328
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
1329
|
+
other entities that control, are controlled by, or are under common
|
|
1330
|
+
control with that entity. For the purposes of this definition,
|
|
1331
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
1332
|
+
direction or management of such entity, whether by contract or
|
|
1333
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
1334
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
1335
|
+
|
|
1336
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
1337
|
+
exercising permissions granted by this License.
|
|
1338
|
+
|
|
1339
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
1340
|
+
including but not limited to software source code, documentation
|
|
1341
|
+
source, and configuration files.
|
|
1342
|
+
|
|
1343
|
+
"Object" form shall mean any form resulting from mechanical
|
|
1344
|
+
transformation or translation of a Source form, including but
|
|
1345
|
+
not limited to compiled object code, generated documentation,
|
|
1346
|
+
and conversions to other media types.
|
|
1347
|
+
|
|
1348
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
1349
|
+
Object form, made available under the License, as indicated by a
|
|
1350
|
+
copyright notice that is included in or attached to the work
|
|
1351
|
+
(an example is provided in the Appendix below).
|
|
1352
|
+
|
|
1353
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
1354
|
+
form, that is based on (or derived from) the Work and for which the
|
|
1355
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
1356
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
1357
|
+
of this License, Derivative Works shall not include works that remain
|
|
1358
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
1359
|
+
the Work and Derivative Works thereof.
|
|
1360
|
+
|
|
1361
|
+
"Contribution" shall mean any work of authorship, including
|
|
1362
|
+
the original version of the Work and any modifications or additions
|
|
1363
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
1364
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
1365
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
1366
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
1367
|
+
means any form of electronic, verbal, or written communication sent
|
|
1368
|
+
to the Licensor or its representatives, including but not limited to
|
|
1369
|
+
communication on electronic mailing lists, source code control systems,
|
|
1370
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
1371
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
1372
|
+
excluding communication that is conspicuously marked or otherwise
|
|
1373
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
1374
|
+
|
|
1375
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
1376
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
1377
|
+
subsequently incorporated within the Work.
|
|
1378
|
+
|
|
1379
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
1380
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
1381
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
1382
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
1383
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
1384
|
+
Work and such Derivative Works in Source or Object form.
|
|
1385
|
+
|
|
1386
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
1387
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
1388
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
1389
|
+
(except as stated in this section) patent license to make, have made,
|
|
1390
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
1391
|
+
where such license applies only to those patent claims licensable
|
|
1392
|
+
by such Contributor that are necessarily infringed by their
|
|
1393
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
1394
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
1395
|
+
institute patent litigation against any entity (including a
|
|
1396
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
1397
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
1398
|
+
or contributory patent infringement, then any patent licenses
|
|
1399
|
+
granted to You under this License for that Work shall terminate
|
|
1400
|
+
as of the date such litigation is filed.
|
|
1401
|
+
|
|
1402
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
1403
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
1404
|
+
modifications, and in Source or Object form, provided that You
|
|
1405
|
+
meet the following conditions:
|
|
1406
|
+
|
|
1407
|
+
(a) You must give any other recipients of the Work or
|
|
1408
|
+
Derivative Works a copy of this License; and
|
|
1409
|
+
|
|
1410
|
+
(b) You must cause any modified files to carry prominent notices
|
|
1411
|
+
stating that You changed the files; and
|
|
1412
|
+
|
|
1413
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
1414
|
+
that You distribute, all copyright, patent, trademark, and
|
|
1415
|
+
attribution notices from the Source form of the Work,
|
|
1416
|
+
excluding those notices that do not pertain to any part of
|
|
1417
|
+
the Derivative Works; and
|
|
1418
|
+
|
|
1419
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
1420
|
+
distribution, then any Derivative Works that You distribute must
|
|
1421
|
+
include a readable copy of the attribution notices contained
|
|
1422
|
+
within such NOTICE file, excluding those notices that do not
|
|
1423
|
+
pertain to any part of the Derivative Works, in at least one
|
|
1424
|
+
of the following places: within a NOTICE text file distributed
|
|
1425
|
+
as part of the Derivative Works; within the Source form or
|
|
1426
|
+
documentation, if provided along with the Derivative Works; or,
|
|
1427
|
+
within a display generated by the Derivative Works, if and
|
|
1428
|
+
wherever such third-party notices normally appear. The contents
|
|
1429
|
+
of the NOTICE file are for informational purposes only and
|
|
1430
|
+
do not modify the License. You may add Your own attribution
|
|
1431
|
+
notices within Derivative Works that You distribute, alongside
|
|
1432
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
1433
|
+
that such additional attribution notices cannot be construed
|
|
1434
|
+
as modifying the License.
|
|
1435
|
+
|
|
1436
|
+
You may add Your own copyright statement to Your modifications and
|
|
1437
|
+
may provide additional or different license terms and conditions
|
|
1438
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
1439
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
1440
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
1441
|
+
the conditions stated in this License.
|
|
1442
|
+
|
|
1443
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
1444
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
1445
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
1446
|
+
this License, without any additional terms or conditions.
|
|
1447
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
1448
|
+
the terms of any separate license agreement you may have executed
|
|
1449
|
+
with Licensor regarding such Contributions.
|
|
1450
|
+
|
|
1451
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
1452
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
1453
|
+
except as required for reasonable and customary use in describing the
|
|
1454
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
1455
|
+
|
|
1456
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
1457
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
1458
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
1459
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
1460
|
+
implied, including, without limitation, any warranties or conditions
|
|
1461
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
1462
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
1463
|
+
appropriateness of using or redistributing the Work and assume any
|
|
1464
|
+
risks associated with Your exercise of permissions under this License.
|
|
1465
|
+
|
|
1466
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
1467
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
1468
|
+
unless required by applicable law (such as deliberate and grossly
|
|
1469
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
1470
|
+
liable to You for damages, including any direct, indirect, special,
|
|
1471
|
+
incidental, or consequential damages of any character arising as a
|
|
1472
|
+
result of this License or out of the use or inability to use the
|
|
1473
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
1474
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
1475
|
+
other commercial damages or losses), even if such Contributor
|
|
1476
|
+
has been advised of the possibility of such damages.
|
|
1477
|
+
|
|
1478
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
1479
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
1480
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
1481
|
+
or other liability obligations and/or rights consistent with this
|
|
1482
|
+
License. However, in accepting such obligations, You may act only
|
|
1483
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
1484
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
1485
|
+
defend, and hold each Contributor harmless for any liability
|
|
1486
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
1487
|
+
of your accepting any such warranty or additional liability.
|
|
1488
|
+
|
|
1489
|
+
END OF TERMS AND CONDITIONS
|
|
1490
|
+
|
|
1491
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
1492
|
+
|
|
1493
|
+
To apply the Apache License to your work, attach the following
|
|
1494
|
+
boilerplate notice, with the fields enclosed by brackets "{}"
|
|
1495
|
+
replaced with your own identifying information. (Don't include
|
|
1496
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
1497
|
+
comment syntax for the file format. We also recommend that a
|
|
1498
|
+
file or class name and description of purpose be included on the
|
|
1499
|
+
same "printed page" as the copyright notice for easier
|
|
1500
|
+
identification within third-party archives.
|
|
1501
|
+
|
|
1502
|
+
Copyright 2018-2023 The simdjson authors
|
|
1503
|
+
|
|
1504
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
1505
|
+
you may not use this file except in compliance with the License.
|
|
1506
|
+
You may obtain a copy of the License at
|
|
1507
|
+
|
|
1508
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
1509
|
+
|
|
1510
|
+
Unless required by applicable law or agreed to in writing, software
|
|
1511
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
1512
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
1513
|
+
See the License for the specific language governing permissions and
|
|
1514
|
+
limitations under the License.
|
|
1515
|
+
"""
|
|
1516
|
+
|
|
1312
1517
|
- simdutf, located at deps/simdutf, is licensed as follows:
|
|
1313
1518
|
"""
|
|
1314
1519
|
Copyright 2021 The simdutf authors
|
|
@@ -1767,6 +1972,35 @@ The externally maintained libraries used by Node.js are:
|
|
|
1767
1972
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
1768
1973
|
"""
|
|
1769
1974
|
|
|
1975
|
+
- gypi_to_gn.py, located at tools/gypi_to_gn.py, is licensed as follows:
|
|
1976
|
+
"""
|
|
1977
|
+
Redistribution and use in source and binary forms, with or without
|
|
1978
|
+
modification, are permitted provided that the following conditions are
|
|
1979
|
+
met:
|
|
1980
|
+
|
|
1981
|
+
* Redistributions of source code must retain the above copyright
|
|
1982
|
+
notice, this list of conditions and the following disclaimer.
|
|
1983
|
+
* Redistributions in binary form must reproduce the above
|
|
1984
|
+
copyright notice, this list of conditions and the following disclaimer
|
|
1985
|
+
in the documentation and/or other materials provided with the
|
|
1986
|
+
distribution.
|
|
1987
|
+
* Neither the name of Google LLC nor the names of its
|
|
1988
|
+
contributors may be used to endorse or promote products derived from
|
|
1989
|
+
this software without specific prior written permission.
|
|
1990
|
+
|
|
1991
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
1992
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
1993
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
1994
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
1995
|
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
1996
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
1997
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
1998
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
1999
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
2000
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
2001
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
2002
|
+
"""
|
|
2003
|
+
|
|
1770
2004
|
- ESLint, located at tools/node_modules/eslint, is licensed as follows:
|
|
1771
2005
|
"""
|
|
1772
2006
|
Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
|
package/bin/node
CHANGED
|
Binary file
|
package/include/node/common.gypi
CHANGED
package/include/node/config.gypi
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Do not edit. Generated by the configure script.
|
|
2
|
-
{ 'target_defaults': {'cflags': [
|
|
2
|
+
{ 'target_defaults': {'cflags': [], 'default_configuration': 'Release', 'defines': ['NODE_OPENSSL_CONF_NAME=nodejs_conf', 'NODE_OPENSSL_HAS_QUIC', 'ICU_NO_USER_DATA_OVERRIDE'], 'include_dirs': [], 'libraries': []},
|
|
3
3
|
'variables': { 'arm_fpu': 'neon',
|
|
4
4
|
'asan': 0,
|
|
5
5
|
'coverage': 'false',
|
|
@@ -183,7 +183,6 @@
|
|
|
183
183
|
'lib/internal/modules/esm/loader.js',
|
|
184
184
|
'lib/internal/modules/esm/module_job.js',
|
|
185
185
|
'lib/internal/modules/esm/module_map.js',
|
|
186
|
-
'lib/internal/modules/esm/package_config.js',
|
|
187
186
|
'lib/internal/modules/esm/resolve.js',
|
|
188
187
|
'lib/internal/modules/esm/shared_constants.js',
|
|
189
188
|
'lib/internal/modules/esm/translators.js',
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
|
|
50
50
|
EXTERN_C_START
|
|
51
51
|
|
|
52
|
-
NAPI_EXTERN napi_status NAPI_CDECL
|
|
53
|
-
|
|
52
|
+
NAPI_EXTERN napi_status NAPI_CDECL napi_get_last_error_info(
|
|
53
|
+
node_api_nogc_env env, const napi_extended_error_info** result);
|
|
54
54
|
|
|
55
55
|
// Getters for defined singletons
|
|
56
56
|
NAPI_EXTERN napi_status NAPI_CDECL napi_get_undefined(napi_env env,
|
|
@@ -93,11 +93,12 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_create_string_utf16(napi_env env,
|
|
|
93
93
|
size_t length,
|
|
94
94
|
napi_value* result);
|
|
95
95
|
#ifdef NAPI_EXPERIMENTAL
|
|
96
|
+
#define NODE_API_EXPERIMENTAL_HAS_EXTERNAL_STRINGS
|
|
96
97
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
97
98
|
node_api_create_external_string_latin1(napi_env env,
|
|
98
99
|
char* str,
|
|
99
100
|
size_t length,
|
|
100
|
-
|
|
101
|
+
node_api_nogc_finalize finalize_callback,
|
|
101
102
|
void* finalize_hint,
|
|
102
103
|
napi_value* result,
|
|
103
104
|
bool* copied);
|
|
@@ -105,7 +106,7 @@ NAPI_EXTERN napi_status NAPI_CDECL
|
|
|
105
106
|
node_api_create_external_string_utf16(napi_env env,
|
|
106
107
|
char16_t* str,
|
|
107
108
|
size_t length,
|
|
108
|
-
|
|
109
|
+
node_api_nogc_finalize finalize_callback,
|
|
109
110
|
void* finalize_hint,
|
|
110
111
|
napi_value* result,
|
|
111
112
|
bool* copied);
|
|
@@ -289,7 +290,7 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_instanceof(napi_env env,
|
|
|
289
290
|
|
|
290
291
|
// Gets all callback info in a single call. (Ugly, but faster.)
|
|
291
292
|
NAPI_EXTERN napi_status NAPI_CDECL napi_get_cb_info(
|
|
292
|
-
napi_env env, // [in]
|
|
293
|
+
napi_env env, // [in] Node-API environment handle
|
|
293
294
|
napi_callback_info cbinfo, // [in] Opaque callback-info handle
|
|
294
295
|
size_t* argc, // [in-out] Specifies the size of the provided argv array
|
|
295
296
|
// and receives the actual count of args.
|
|
@@ -313,7 +314,7 @@ napi_define_class(napi_env env,
|
|
|
313
314
|
NAPI_EXTERN napi_status NAPI_CDECL napi_wrap(napi_env env,
|
|
314
315
|
napi_value js_object,
|
|
315
316
|
void* native_object,
|
|
316
|
-
|
|
317
|
+
node_api_nogc_finalize finalize_cb,
|
|
317
318
|
void* finalize_hint,
|
|
318
319
|
napi_ref* result);
|
|
319
320
|
NAPI_EXTERN napi_status NAPI_CDECL napi_unwrap(napi_env env,
|
|
@@ -325,7 +326,7 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_remove_wrap(napi_env env,
|
|
|
325
326
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
326
327
|
napi_create_external(napi_env env,
|
|
327
328
|
void* data,
|
|
328
|
-
|
|
329
|
+
node_api_nogc_finalize finalize_cb,
|
|
329
330
|
void* finalize_hint,
|
|
330
331
|
napi_value* result);
|
|
331
332
|
NAPI_EXTERN napi_status NAPI_CDECL napi_get_value_external(napi_env env,
|
|
@@ -424,7 +425,7 @@ NAPI_EXTERN napi_status NAPI_CDECL
|
|
|
424
425
|
napi_create_external_arraybuffer(napi_env env,
|
|
425
426
|
void* external_data,
|
|
426
427
|
size_t byte_length,
|
|
427
|
-
|
|
428
|
+
node_api_nogc_finalize finalize_cb,
|
|
428
429
|
void* finalize_hint,
|
|
429
430
|
napi_value* result);
|
|
430
431
|
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
@@ -466,7 +467,7 @@ napi_get_dataview_info(napi_env env,
|
|
|
466
467
|
size_t* byte_offset);
|
|
467
468
|
|
|
468
469
|
// version management
|
|
469
|
-
NAPI_EXTERN napi_status NAPI_CDECL napi_get_version(
|
|
470
|
+
NAPI_EXTERN napi_status NAPI_CDECL napi_get_version(node_api_nogc_env env,
|
|
470
471
|
uint32_t* result);
|
|
471
472
|
|
|
472
473
|
// Promises
|
|
@@ -490,7 +491,7 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_run_script(napi_env env,
|
|
|
490
491
|
|
|
491
492
|
// Memory management
|
|
492
493
|
NAPI_EXTERN napi_status NAPI_CDECL napi_adjust_external_memory(
|
|
493
|
-
|
|
494
|
+
node_api_nogc_env env, int64_t change_in_bytes, int64_t* adjusted_value);
|
|
494
495
|
|
|
495
496
|
#if NAPI_VERSION >= 5
|
|
496
497
|
|
|
@@ -508,19 +509,21 @@ NAPI_EXTERN napi_status NAPI_CDECL napi_get_date_value(napi_env env,
|
|
|
508
509
|
double* result);
|
|
509
510
|
|
|
510
511
|
// Add finalizer for pointer
|
|
511
|
-
NAPI_EXTERN napi_status NAPI_CDECL
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
512
|
+
NAPI_EXTERN napi_status NAPI_CDECL
|
|
513
|
+
napi_add_finalizer(napi_env env,
|
|
514
|
+
napi_value js_object,
|
|
515
|
+
void* finalize_data,
|
|
516
|
+
node_api_nogc_finalize finalize_cb,
|
|
517
|
+
void* finalize_hint,
|
|
518
|
+
napi_ref* result);
|
|
517
519
|
|
|
518
520
|
#endif // NAPI_VERSION >= 5
|
|
519
521
|
|
|
520
522
|
#ifdef NAPI_EXPERIMENTAL
|
|
523
|
+
#define NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER
|
|
521
524
|
|
|
522
525
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
523
|
-
node_api_post_finalizer(
|
|
526
|
+
node_api_post_finalizer(node_api_nogc_env env,
|
|
524
527
|
napi_finalize finalize_cb,
|
|
525
528
|
void* finalize_data,
|
|
526
529
|
void* finalize_hint);
|
|
@@ -564,10 +567,13 @@ napi_get_all_property_names(napi_env env,
|
|
|
564
567
|
napi_value* result);
|
|
565
568
|
|
|
566
569
|
// Instance data
|
|
567
|
-
NAPI_EXTERN napi_status NAPI_CDECL
|
|
568
|
-
|
|
570
|
+
NAPI_EXTERN napi_status NAPI_CDECL
|
|
571
|
+
napi_set_instance_data(node_api_nogc_env env,
|
|
572
|
+
void* data,
|
|
573
|
+
napi_finalize finalize_cb,
|
|
574
|
+
void* finalize_hint);
|
|
569
575
|
|
|
570
|
-
NAPI_EXTERN napi_status NAPI_CDECL napi_get_instance_data(
|
|
576
|
+
NAPI_EXTERN napi_status NAPI_CDECL napi_get_instance_data(node_api_nogc_env env,
|
|
571
577
|
void** data);
|
|
572
578
|
#endif // NAPI_VERSION >= 6
|
|
573
579
|
|
|
@@ -22,6 +22,35 @@ typedef uint16_t char16_t;
|
|
|
22
22
|
// JSVM API types are all opaque pointers for ABI stability
|
|
23
23
|
// typedef undefined structs instead of void* for compile time type safety
|
|
24
24
|
typedef struct napi_env__* napi_env;
|
|
25
|
+
|
|
26
|
+
// We need to mark APIs which can be called during garbage collection (GC),
|
|
27
|
+
// meaning that they do not affect the state of the JS engine, and can
|
|
28
|
+
// therefore be called synchronously from a finalizer that itself runs
|
|
29
|
+
// synchronously during GC. Such APIs can receive either a `napi_env` or a
|
|
30
|
+
// `node_api_nogc_env` as their first parameter, because we should be able to
|
|
31
|
+
// also call them during normal, non-garbage-collecting operations, whereas
|
|
32
|
+
// APIs that affect the state of the JS engine can only receive a `napi_env` as
|
|
33
|
+
// their first parameter, because we must not call them during GC. In lieu of
|
|
34
|
+
// inheritance, we use the properties of the const qualifier to accomplish
|
|
35
|
+
// this, because both a const and a non-const value can be passed to an API
|
|
36
|
+
// expecting a const value, but only a non-const value can be passed to an API
|
|
37
|
+
// expecting a non-const value.
|
|
38
|
+
//
|
|
39
|
+
// In conjunction with appropriate CFLAGS to warn us if we're passing a const
|
|
40
|
+
// (nogc) environment into an API that expects a non-const environment, and the
|
|
41
|
+
// definition of nogc finalizer function pointer types below, which receive a
|
|
42
|
+
// nogc environment as their first parameter, and can thus only call nogc APIs
|
|
43
|
+
// (unless the user explicitly casts the environment), we achieve the ability
|
|
44
|
+
// to ensure at compile time that we do not call APIs that affect the state of
|
|
45
|
+
// the JS engine from a synchronous (nogc) finalizer.
|
|
46
|
+
#if !defined(NAPI_EXPERIMENTAL) || \
|
|
47
|
+
(defined(NAPI_EXPERIMENTAL) && \
|
|
48
|
+
defined(NODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT))
|
|
49
|
+
typedef struct napi_env__* node_api_nogc_env;
|
|
50
|
+
#else
|
|
51
|
+
typedef const struct napi_env__* node_api_nogc_env;
|
|
52
|
+
#endif
|
|
53
|
+
|
|
25
54
|
typedef struct napi_value__* napi_value;
|
|
26
55
|
typedef struct napi_ref__* napi_ref;
|
|
27
56
|
typedef struct napi_handle_scope__* napi_handle_scope;
|
|
@@ -116,6 +145,16 @@ typedef void(NAPI_CDECL* napi_finalize)(napi_env env,
|
|
|
116
145
|
void* finalize_data,
|
|
117
146
|
void* finalize_hint);
|
|
118
147
|
|
|
148
|
+
#if !defined(NAPI_EXPERIMENTAL) || \
|
|
149
|
+
(defined(NAPI_EXPERIMENTAL) && \
|
|
150
|
+
defined(NODE_API_EXPERIMENTAL_NOGC_ENV_OPT_OUT))
|
|
151
|
+
typedef napi_finalize node_api_nogc_finalize;
|
|
152
|
+
#else
|
|
153
|
+
typedef void(NAPI_CDECL* node_api_nogc_finalize)(node_api_nogc_env env,
|
|
154
|
+
void* finalize_data,
|
|
155
|
+
void* finalize_hint);
|
|
156
|
+
#endif
|
|
157
|
+
|
|
119
158
|
typedef struct {
|
|
120
159
|
// One of utf8name or name should be NULL.
|
|
121
160
|
const char* utf8name;
|
package/include/node/node.h
CHANGED
|
@@ -80,6 +80,7 @@
|
|
|
80
80
|
|
|
81
81
|
#include <functional>
|
|
82
82
|
#include <memory>
|
|
83
|
+
#include <optional>
|
|
83
84
|
#include <ostream>
|
|
84
85
|
|
|
85
86
|
// We cannot use __POSIX__ in this header because that's only defined when
|
|
@@ -659,6 +660,33 @@ enum Flags : uint64_t {
|
|
|
659
660
|
};
|
|
660
661
|
} // namespace EnvironmentFlags
|
|
661
662
|
|
|
663
|
+
enum class SnapshotFlags : uint32_t {
|
|
664
|
+
kDefault = 0,
|
|
665
|
+
// Whether code cache should be generated as part of the snapshot.
|
|
666
|
+
// Code cache reduces the time spent on compiling functions included
|
|
667
|
+
// in the snapshot at the expense of a bigger snapshot size and
|
|
668
|
+
// potentially breaking portability of the snapshot.
|
|
669
|
+
kWithoutCodeCache = 1 << 0,
|
|
670
|
+
};
|
|
671
|
+
|
|
672
|
+
struct SnapshotConfig {
|
|
673
|
+
SnapshotFlags flags = SnapshotFlags::kDefault;
|
|
674
|
+
|
|
675
|
+
// When builder_script_path is std::nullopt, the snapshot is generated as a
|
|
676
|
+
// built-in snapshot instead of a custom one, and it's expected that the
|
|
677
|
+
// built-in snapshot only contains states that reproduce in every run of the
|
|
678
|
+
// application. The event loop won't be run when generating a built-in
|
|
679
|
+
// snapshot, so asynchronous operations should be avoided.
|
|
680
|
+
//
|
|
681
|
+
// When builder_script_path is an std::string, it should match args[1]
|
|
682
|
+
// passed to CreateForSnapshotting(). The embedder is also expected to use
|
|
683
|
+
// LoadEnvironment() to run a script matching this path. In that case the
|
|
684
|
+
// snapshot is generated as a custom snapshot and the event loop is run, so
|
|
685
|
+
// the snapshot builder can execute asynchronous operations as long as they
|
|
686
|
+
// are run to completion when the snapshot is taken.
|
|
687
|
+
std::optional<std::string> builder_script_path;
|
|
688
|
+
};
|
|
689
|
+
|
|
662
690
|
struct InspectorParentHandle {
|
|
663
691
|
virtual ~InspectorParentHandle() = default;
|
|
664
692
|
};
|
|
@@ -870,7 +898,8 @@ class NODE_EXTERN CommonEnvironmentSetup {
|
|
|
870
898
|
MultiIsolatePlatform* platform,
|
|
871
899
|
std::vector<std::string>* errors,
|
|
872
900
|
const std::vector<std::string>& args = {},
|
|
873
|
-
const std::vector<std::string>& exec_args = {}
|
|
901
|
+
const std::vector<std::string>& exec_args = {},
|
|
902
|
+
const SnapshotConfig& snapshot_config = {});
|
|
874
903
|
EmbedderSnapshotData::Pointer CreateSnapshot();
|
|
875
904
|
|
|
876
905
|
struct uv_loop_s* event_loop() const;
|
|
@@ -905,7 +934,8 @@ class NODE_EXTERN CommonEnvironmentSetup {
|
|
|
905
934
|
std::vector<std::string>*,
|
|
906
935
|
const EmbedderSnapshotData*,
|
|
907
936
|
uint32_t flags,
|
|
908
|
-
std::function<Environment*(const CommonEnvironmentSetup*)
|
|
937
|
+
std::function<Environment*(const CommonEnvironmentSetup*)>,
|
|
938
|
+
const SnapshotConfig* config = nullptr);
|
|
909
939
|
};
|
|
910
940
|
|
|
911
941
|
// Implementation for CommonEnvironmentSetup::Create
|
package/include/node/node_api.h
CHANGED
|
@@ -131,7 +131,7 @@ NAPI_EXTERN napi_status NAPI_CDECL
|
|
|
131
131
|
napi_create_external_buffer(napi_env env,
|
|
132
132
|
size_t length,
|
|
133
133
|
void* data,
|
|
134
|
-
|
|
134
|
+
node_api_nogc_finalize finalize_cb,
|
|
135
135
|
void* finalize_hint,
|
|
136
136
|
napi_value* result);
|
|
137
137
|
#endif // NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED
|
|
@@ -159,20 +159,20 @@ napi_create_async_work(napi_env env,
|
|
|
159
159
|
napi_async_work* result);
|
|
160
160
|
NAPI_EXTERN napi_status NAPI_CDECL napi_delete_async_work(napi_env env,
|
|
161
161
|
napi_async_work work);
|
|
162
|
-
NAPI_EXTERN napi_status NAPI_CDECL napi_queue_async_work(
|
|
162
|
+
NAPI_EXTERN napi_status NAPI_CDECL napi_queue_async_work(node_api_nogc_env env,
|
|
163
163
|
napi_async_work work);
|
|
164
|
-
NAPI_EXTERN napi_status NAPI_CDECL napi_cancel_async_work(
|
|
164
|
+
NAPI_EXTERN napi_status NAPI_CDECL napi_cancel_async_work(node_api_nogc_env env,
|
|
165
165
|
napi_async_work work);
|
|
166
166
|
|
|
167
167
|
// version management
|
|
168
168
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
169
|
-
napi_get_node_version(
|
|
169
|
+
napi_get_node_version(node_api_nogc_env env, const napi_node_version** version);
|
|
170
170
|
|
|
171
171
|
#if NAPI_VERSION >= 2
|
|
172
172
|
|
|
173
173
|
// Return the current libuv event loop for a given environment
|
|
174
174
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
175
|
-
napi_get_uv_event_loop(
|
|
175
|
+
napi_get_uv_event_loop(node_api_nogc_env env, struct uv_loop_s** loop);
|
|
176
176
|
|
|
177
177
|
#endif // NAPI_VERSION >= 2
|
|
178
178
|
|
|
@@ -181,11 +181,11 @@ napi_get_uv_event_loop(napi_env env, struct uv_loop_s** loop);
|
|
|
181
181
|
NAPI_EXTERN napi_status NAPI_CDECL napi_fatal_exception(napi_env env,
|
|
182
182
|
napi_value err);
|
|
183
183
|
|
|
184
|
-
NAPI_EXTERN napi_status NAPI_CDECL
|
|
185
|
-
|
|
184
|
+
NAPI_EXTERN napi_status NAPI_CDECL napi_add_env_cleanup_hook(
|
|
185
|
+
node_api_nogc_env env, napi_cleanup_hook fun, void* arg);
|
|
186
186
|
|
|
187
|
-
NAPI_EXTERN napi_status NAPI_CDECL
|
|
188
|
-
|
|
187
|
+
NAPI_EXTERN napi_status NAPI_CDECL napi_remove_env_cleanup_hook(
|
|
188
|
+
node_api_nogc_env env, napi_cleanup_hook fun, void* arg);
|
|
189
189
|
|
|
190
190
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
191
191
|
napi_open_callback_scope(napi_env env,
|
|
@@ -209,7 +209,7 @@ napi_create_threadsafe_function(napi_env env,
|
|
|
209
209
|
size_t max_queue_size,
|
|
210
210
|
size_t initial_thread_count,
|
|
211
211
|
void* thread_finalize_data,
|
|
212
|
-
|
|
212
|
+
node_api_nogc_finalize thread_finalize_cb,
|
|
213
213
|
void* context,
|
|
214
214
|
napi_threadsafe_function_call_js call_js_cb,
|
|
215
215
|
napi_threadsafe_function* result);
|
|
@@ -228,18 +228,18 @@ napi_acquire_threadsafe_function(napi_threadsafe_function func);
|
|
|
228
228
|
NAPI_EXTERN napi_status NAPI_CDECL napi_release_threadsafe_function(
|
|
229
229
|
napi_threadsafe_function func, napi_threadsafe_function_release_mode mode);
|
|
230
230
|
|
|
231
|
-
NAPI_EXTERN napi_status NAPI_CDECL
|
|
232
|
-
|
|
231
|
+
NAPI_EXTERN napi_status NAPI_CDECL napi_unref_threadsafe_function(
|
|
232
|
+
node_api_nogc_env env, napi_threadsafe_function func);
|
|
233
233
|
|
|
234
|
-
NAPI_EXTERN napi_status NAPI_CDECL
|
|
235
|
-
|
|
234
|
+
NAPI_EXTERN napi_status NAPI_CDECL napi_ref_threadsafe_function(
|
|
235
|
+
node_api_nogc_env env, napi_threadsafe_function func);
|
|
236
236
|
|
|
237
237
|
#endif // NAPI_VERSION >= 4
|
|
238
238
|
|
|
239
239
|
#if NAPI_VERSION >= 8
|
|
240
240
|
|
|
241
241
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
242
|
-
napi_add_async_cleanup_hook(
|
|
242
|
+
napi_add_async_cleanup_hook(node_api_nogc_env env,
|
|
243
243
|
napi_async_cleanup_hook hook,
|
|
244
244
|
void* arg,
|
|
245
245
|
napi_async_cleanup_hook_handle* remove_handle);
|
|
@@ -252,7 +252,7 @@ napi_remove_async_cleanup_hook(napi_async_cleanup_hook_handle remove_handle);
|
|
|
252
252
|
#if NAPI_VERSION >= 9
|
|
253
253
|
|
|
254
254
|
NAPI_EXTERN napi_status NAPI_CDECL
|
|
255
|
-
node_api_get_module_file_name(
|
|
255
|
+
node_api_get_module_file_name(node_api_nogc_env env, const char** result);
|
|
256
256
|
|
|
257
257
|
#endif // NAPI_VERSION >= 9
|
|
258
258
|
|
package/include/node/uv.h
CHANGED
|
@@ -1885,6 +1885,18 @@ struct uv_loop_s {
|
|
|
1885
1885
|
UV_EXTERN void* uv_loop_get_data(const uv_loop_t*);
|
|
1886
1886
|
UV_EXTERN void uv_loop_set_data(uv_loop_t*, void* data);
|
|
1887
1887
|
|
|
1888
|
+
/* String utilities needed internally for dealing with Windows. */
|
|
1889
|
+
size_t uv_utf16_length_as_wtf8(const uint16_t* utf16,
|
|
1890
|
+
ssize_t utf16_len);
|
|
1891
|
+
int uv_utf16_to_wtf8(const uint16_t* utf16,
|
|
1892
|
+
ssize_t utf16_len,
|
|
1893
|
+
char** wtf8_ptr,
|
|
1894
|
+
size_t* wtf8_len_ptr);
|
|
1895
|
+
ssize_t uv_wtf8_length_as_utf16(const char* wtf8);
|
|
1896
|
+
void uv_wtf8_to_utf16(const char* wtf8,
|
|
1897
|
+
uint16_t* utf16,
|
|
1898
|
+
size_t utf16_len);
|
|
1899
|
+
|
|
1888
1900
|
/* Don't export the private CPP symbols. */
|
|
1889
1901
|
#undef UV_HANDLE_TYPE_PRIVATE
|
|
1890
1902
|
#undef UV_REQ_TYPE_PRIVATE
|
|
@@ -921,12 +921,22 @@ class V8_EXPORT EmbedderGraph {
|
|
|
921
921
|
virtual ~EmbedderGraph() = default;
|
|
922
922
|
};
|
|
923
923
|
|
|
924
|
+
class QueryObjectPredicate {
|
|
925
|
+
public:
|
|
926
|
+
virtual ~QueryObjectPredicate() = default;
|
|
927
|
+
virtual bool Filter(v8::Local<v8::Object> object) = 0;
|
|
928
|
+
};
|
|
929
|
+
|
|
924
930
|
/**
|
|
925
931
|
* Interface for controlling heap profiling. Instance of the
|
|
926
932
|
* profiler can be retrieved using v8::Isolate::GetHeapProfiler.
|
|
927
933
|
*/
|
|
928
934
|
class V8_EXPORT HeapProfiler {
|
|
929
935
|
public:
|
|
936
|
+
void QueryObjects(v8::Local<v8::Context> context,
|
|
937
|
+
QueryObjectPredicate* predicate,
|
|
938
|
+
std::vector<v8::Global<v8::Object>>* objects);
|
|
939
|
+
|
|
930
940
|
enum SamplingFlags {
|
|
931
941
|
kSamplingNoFlags = 0,
|
|
932
942
|
kSamplingForceGC = 1 << 0,
|
package/include/node/zlib.h
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
|
2
|
-
version 1.
|
|
2
|
+
version 1.3.0.1, August xxth, 2023
|
|
3
3
|
|
|
4
|
-
Copyright (C) 1995-
|
|
4
|
+
Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler
|
|
5
5
|
|
|
6
6
|
This software is provided 'as-is', without any express or implied
|
|
7
7
|
warranty. In no event will the authors be held liable for any damages
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
extern "C" {
|
|
38
38
|
#endif
|
|
39
39
|
|
|
40
|
-
#define ZLIB_VERSION "1.
|
|
41
|
-
#define ZLIB_VERNUM
|
|
40
|
+
#define ZLIB_VERSION "1.3.0.1-motley"
|
|
41
|
+
#define ZLIB_VERNUM 0x1301
|
|
42
42
|
#define ZLIB_VER_MAJOR 1
|
|
43
|
-
#define ZLIB_VER_MINOR
|
|
44
|
-
#define ZLIB_VER_REVISION
|
|
43
|
+
#define ZLIB_VER_MINOR 3
|
|
44
|
+
#define ZLIB_VER_REVISION 0
|
|
45
45
|
#define ZLIB_VER_SUBREVISION 1
|
|
46
46
|
|
|
47
47
|
/*
|
|
@@ -320,8 +320,8 @@ ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush);
|
|
|
320
320
|
with the same value of the flush parameter and more output space (updated
|
|
321
321
|
avail_out), until the flush is complete (deflate returns with non-zero
|
|
322
322
|
avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
|
|
323
|
-
avail_out is greater than six
|
|
324
|
-
avail_out == 0
|
|
323
|
+
avail_out is greater than six when the flush marker begins, in order to avoid
|
|
324
|
+
repeated flush markers upon calling deflate() again when avail_out == 0.
|
|
325
325
|
|
|
326
326
|
If the parameter flush is set to Z_FINISH, pending input is processed,
|
|
327
327
|
pending output is flushed and deflate returns with Z_STREAM_END if there was
|
package/package.json
CHANGED
package/share/man/man1/node.1
CHANGED
|
@@ -82,6 +82,9 @@ Allow file system read access when using the permission model.
|
|
|
82
82
|
.It Fl -allow-fs-write
|
|
83
83
|
Allow file system write access when using the permission model.
|
|
84
84
|
.
|
|
85
|
+
.It Fl -allow-addons
|
|
86
|
+
Allow using native addons when using the permission model.
|
|
87
|
+
.
|
|
85
88
|
.It Fl -allow-child-process
|
|
86
89
|
Allow spawning process when using the permission model.
|
|
87
90
|
.
|