Repository navigation
feat: print PHP 8.4 property hooks (and abstract/final/private(set) properties) - #2516
Conversation
php-parser 3.7 parses property hooks into `property.hooks` (kind
`propertyhook`), but the printer never printed them, so formatting a
hooked property silently dropped the hooks and left a plain property
behind (exit code 0). A comment inside a hook made it fail with
"Comment was not printed" instead.
Print hooks following PER-CS 4.9:
- the opening brace stays on the property line, one hook per line,
a single blank line between hooks is preserved;
- `get => expr;` breaks like an assignment, `get { ... }` keeps the
brace on the hook line, `get;` / `set;` declarations (interfaces,
abstract classes) stay on one line: `public string $x { get; set; }`;
- `final`, `&get`, `set(Type $value)` and attributes on hooks;
- hooks on promoted constructor parameters.
A hooked property statement ends with its closing brace, so it no
longer gets a trailing semicolon.
Property statements also lost `abstract`, `final` and the asymmetric
set visibility (`public private(set)`), which the parser exposes as
`isAbstract`, `isFinal` and `visibilitySet`; print those too.
Guard `handleFunctionParameter` against a missing preceding node,
which a comment right after `set(` reaches.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Thanks for this, @mreiden! I tested this branch on top of
One case still loses code: asymmetric visibility on a promoted constructor parameter. becomes php-parser 3.7.0 has the set visibility in |
`public private(set) int $x` as a promoted constructor parameter lost its `private(set)`: the parser exposes the set visibility as `parameter.flagsSet` (same 1/2/4 mapping as `flags`), but the printer only looked at `flags`. `private(set) int $x` on its own (no explicit get visibility) is printed as written. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Thanks for testing it so thoroughly, @elnebuloso — good catch. Fixed in 313e41e: the |
|
Released in |
> [!NOTE]
> This PR body was truncated due to platform limits.
This PR contains the following updates:
| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) | Type |
Update |
|---|---|---|---|---|---|
|
[@prettier/plugin-php](https://redirect.github.com/prettier/prettier-php)
| [`^0.25.0` →
`^0.26.0`](https://renovatebot.com/diffs/npm/@prettier%2fplugin-php/0.25.0/0.26.0)
|

|

| dependencies | minor |
|
[@shufo/prettier-plugin-blade](https://redirect.github.com/shufo/prettier-plugin-blade)
| [`^1.16.2` →
`^1.16.3`](https://renovatebot.com/diffs/npm/@shufo%2fprettier-plugin-blade/1.16.2/1.16.3)
|

|

| dependencies | patch |
|
[@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`^24.19.1` →
`^24.19.2`](https://renovatebot.com/diffs/npm/@types%2fnode/24.19.1/24.19.2)
|

|

| devDependencies | patch |
| [execa](https://redirect.github.com/sindresorhus/execa) | [`^10.1.0` →
`^10.2.0`](https://renovatebot.com/diffs/npm/execa/10.1.0/10.2.0) |

|

| devDependencies | minor |
| [node](https://nodejs.org)
([source](https://redirect.github.com/nodejs/node)) | `24.21.0` →
`24.22.1` |

|

| | minor |
| [node](https://redirect.github.com/actions/node-versions) | `24.21.0`
→ `24.22.1` |

|

| uses-with | minor |
| [pnpm](https://pnpm.io)
([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm/npm/pnpm))
| [`11.28.5` →
`11.28.7`](https://renovatebot.com/diffs/npm/pnpm/11.28.5/11.28.7) |

|

| packageManager | patch |
| [prettier](https://prettier.io)
([source](https://redirect.github.com/prettier/prettier)) | [`^3.9.9` →
`^3.9.10`](https://renovatebot.com/diffs/npm/prettier/3.9.9/3.9.10) |

|

| devDependencies | patch |
| [remeda](https://remedajs.com/)
([source](https://redirect.github.com/remeda/remeda)) | [`^2.51.0` →
`^2.53.0`](https://renovatebot.com/diffs/npm/remeda/2.51.0/2.53.0) |

|

| dependencies | minor |
| [vitest](https://vitest.dev)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest))
| [`^4.1.11` →
`^4.1.12`](https://renovatebot.com/diffs/npm/vitest/4.1.11/4.1.12) |

|

| devDependencies | patch |
---
### Release Notes
<details>
<summary>prettier/prettier-php (@​prettier/plugin-php)</summary>
###
[`v0.26.0`](https://redirect.github.com/prettier/plugin-php/releases/tag/v0.26.0)
[Compare
Source](https://redirect.github.com/prettier/prettier-php/compare/v0.25.0...v0.26.0)
#### Features
- feat: print PHP 8.4 property hooks (and abstract/final/private(set)
properties) by [@​mreiden](https://redirect.github.com/mreiden) in
[prettier/plugin-php#2516](https://redirect.github.com/prettier/plugin-php/pull/2516)
- feat: lay out long attributes as PER-CS 12.3 describes by
[@​mreiden](https://redirect.github.com/mreiden) in
[prettier/plugin-php#2518](https://redirect.github.com/prettier/plugin-php/pull/2518)
#### Fixes
- Update php-parser, fix unary snapshot tests, and make multiple fixes
for attribute formatting. by
[@​acharron-hl](https://redirect.github.com/acharron-hl) in
[prettier/plugin-php#2502](https://redirect.github.com/prettier/plugin-php/pull/2502)
- fix: keep parens around nested ternary in ?: by
[@​Dextheking1](https://redirect.github.com/Dextheking1) in
[prettier/plugin-php#2519](https://redirect.github.com/prettier/plugin-php/pull/2519)
- fix: keep $ on nested variables in "${...}" interpolation by
[@​Dextheking1](https://redirect.github.com/Dextheking1) in
[prettier/plugin-php#2520](https://redirect.github.com/prettier/plugin-php/pull/2520)
- fix: comments inside the body of an attributed function crash or move
by [@​mreiden](https://redirect.github.com/mreiden) in
[prettier/plugin-php#2517](https://redirect.github.com/prettier/plugin-php/pull/2517)
- fix: print PHP 8.5 clone with (clone($obj, \[...])) by
[@​mreiden](https://redirect.github.com/mreiden) in
[prettier/plugin-php#2531](https://redirect.github.com/prettier/plugin-php/pull/2531)
**Full Changelog**:
<https://github.com/prettier/plugin-php/compare/v0.25.0...v0.26.0>
</details>
<details>
<summary>shufo/prettier-plugin-blade
(@​shufo/prettier-plugin-blade)</summary>
###
[`v1.16.3`](https://redirect.github.com/shufo/prettier-plugin-blade/blob/HEAD/CHANGELOG.md#1163-2026-10-20)
[Compare
Source](https://redirect.github.com/shufo/prettier-plugin-blade/compare/v1.16.2...v1.16.3)
##### Fixes
- **deps:** update dependency prettier to v3.9.10
([916779e](https://redirect.github.com/shufo/prettier-plugin-blade/commit/916779ea1a85d5c4cce3b1fda6b5c768b8c38f7d))
##### Miscellaneous
- 🤖 bump blade-formatter to 1.44.5
([a158396](https://redirect.github.com/shufo/prettier-plugin-blade/commit/a15839640718b7463a3ce3442159997afc4d48d3))
- 🤖 bump blade-formatter to 1.44.6
([13bd662](https://redirect.github.com/shufo/prettier-plugin-blade/commit/13bd662e62d1f68b5e46edabddea9eb5f3e8f2ef))
- 🤖 migrate from yarn to npm
([3b275d3](https://redirect.github.com/shufo/prettier-plugin-blade/commit/3b275d3327e89d9644d18200c44a4f90aa13ace8))
- **deps:** update actions/cache action to v6
([002da7d](https://redirect.github.com/shufo/prettier-plugin-blade/commit/002da7d60a12a744c37312a4fa51851fac57d089))
- **deps:** update actions/checkout action to v7
([164207d](https://redirect.github.com/shufo/prettier-plugin-blade/commit/164207d7eaa51085c494fd8e1aa54581c7518206))
- **deps:** update actions/setup-node action to v7
([381e128](https://redirect.github.com/shufo/prettier-plugin-blade/commit/381e12812798b0d154bad050d5c541115d232d09))
- **deps:** update dependency vitest to v4.1.11 \[security]
([04dcd1a](https://redirect.github.com/shufo/prettier-plugin-blade/commit/04dcd1abcba9b742fae5d423221585e61121918f))
</details>
<details>
<summary>sindresorhus/execa (execa)</summary>
###
[`v10.2.0`](https://redirect.github.com/sindresorhus/execa/releases/tag/v10.2.0)
[Compare
Source](https://redirect.github.com/sindresorhus/execa/compare/v10.1.1...v10.2.0)
##### Behavior changes
These are bug fixes, but they might affect code that relied on the
previous incorrect behavior.
- Exceeding [`maxBuffer`](docs/api.md#optionsmaxbuffer) now terminates
the subprocess with [`killSignal`](docs/api.md#optionskillsignal),
instead of leaving it running and the promise pending
[`f6de9be`](https://redirect.github.com/sindresorhus/execa/commit/f6de9be)
- `maxBuffer: 0` now limits the output of synchronous methods, like
asynchronous methods
[`224dd20`](https://redirect.github.com/sindresorhus/execa/commit/224dd20)
- Options of `$` set to `undefined` now use `$`'s defaults, such as
inheriting `stdin`
[`f61a6e9`](https://redirect.github.com/sindresorhus/execa/commit/f61a6e9)
##### Fixes
- Fix invalid file descriptor objects, such as closed file handles,
crashing the current process instead of throwing
[`d0a5968`](https://redirect.github.com/sindresorhus/execa/commit/d0a5968)
- Fix synchronous transforms: errors being hidden, filtered output being
returned on failure, mixed text and byte chunks being reordered, and
`final()` being skipped without input
[`0ba2b6e`](https://redirect.github.com/sindresorhus/execa/commit/0ba2b6e)
[`ed80079`](https://redirect.github.com/sindresorhus/execa/commit/ed80079)
[`9c54833`](https://redirect.github.com/sindresorhus/execa/commit/9c54833)
- Fix `result.all` changing objects when only `stdout` or `stderr` is
buffered
[`8629132`](https://redirect.github.com/sindresorhus/execa/commit/8629132)
- Fix writing objects to a web `WritableStream`
[`5ea2900`](https://redirect.github.com/sindresorhus/execa/commit/5ea2900)
- Fix an invalid `subprocess.duplex()` option making later stream
conversions hang
[`5e4345b`](https://redirect.github.com/sindresorhus/execa/commit/5e4345b)
- Fix `execaNode()` not running its file when the current process uses
`--print`
[`e747872`](https://redirect.github.com/sindresorhus/execa/commit/e747872)
##### Types
- Fix result and subprocess types when the options are a union,
including IPC
[`f5772f3`](https://redirect.github.com/sindresorhus/execa/commit/f5772f3)
[`355d917`](https://redirect.github.com/sindresorhus/execa/commit/355d917)
[`cb8aaf6`](https://redirect.github.com/sindresorhus/execa/commit/cb8aaf6)
- Fix result types when options bound with `execa(options)` are
overridden or reset with `undefined`
[`708fed7`](https://redirect.github.com/sindresorhus/execa/commit/708fed7)
- Fix `subprocess.stdin` types with the `input` and `inputFile` options
[`236c831`](https://redirect.github.com/sindresorhus/execa/commit/236c831)
- Fix chunk types of `subprocess.iterable()` with object-mode transforms
[`a2912e5`](https://redirect.github.com/sindresorhus/execa/commit/a2912e5)
- Fix fd-specific option types, and `execaNode()` types with `node:
undefined`
[`80b01e9`](https://redirect.github.com/sindresorhus/execa/commit/80b01e9)
[`523cf9b`](https://redirect.github.com/sindresorhus/execa/commit/523cf9b)
***
###
[`v10.1.1`](https://redirect.github.com/sindresorhus/execa/releases/tag/v10.1.1)
[Compare
Source](https://redirect.github.com/sindresorhus/execa/compare/v10.1.0...v10.1.1)
- Fix `execaNode()` and the `node` option missing IPC in their types
[`2633abb`](https://redirect.github.com/sindresorhus/execa/commit/2633abb)
- Fix `escapedCommand` and `verbose` quoting arguments when using the
`shell` option
[`b2c3a54`](https://redirect.github.com/sindresorhus/execa/commit/b2c3a54)
- Fix wrong-typed options and arguments being silently ignored or
coerced
[`b57d643`](https://redirect.github.com/sindresorhus/execa/commit/b57d643)
- Fix the `verbose` option printing colors when `stderr` is not a
terminal
[`a2eda67`](https://redirect.github.com/sindresorhus/execa/commit/a2eda67)
- Fix `stdin` iterables and input transforms edge cases
[`6925cc3`](https://redirect.github.com/sindresorhus/execa/commit/6925cc3)
- Fix IPC edge cases
[`5f80cde`](https://redirect.github.com/sindresorhus/execa/commit/5f80cde)
- Fix `.pipe()` and stream conversion edge cases
[`d3ec10d`](https://redirect.github.com/sindresorhus/execa/commit/d3ec10d)
- Fix template strings, `parseCommandString()` and `execaNode()` edge
cases
[`fb92da1`](https://redirect.github.com/sindresorhus/execa/commit/fb92da1)
- Fix invalid `timeout` and `forceKillAfterDelay` values
[`d9a5689`](https://redirect.github.com/sindresorhus/execa/commit/d9a5689)
- Fix errors, early errors and `result.all` edge cases
[`c4262ff`](https://redirect.github.com/sindresorhus/execa/commit/c4262ff)
***
</details>
<details>
<summary>nodejs/node (node)</summary>
###
[`v24.22.1`](https://redirect.github.com/nodejs/node/releases/tag/v24.22.1):
2026-10-21, Version 24.22.1 'Krypton' (LTS), @​aduh95
[Compare
Source](https://redirect.github.com/nodejs/node/compare/v24.22.0...v24.22.1)
This is a security release.
##### Notable Changes
- (CVE-2026-105481) http: ensure agent data guard works without I/O
(James M Snell)
- (CVE-2026-105482) dns: validate resolve inputs for null bytes (James M
Snell)
- (CVE-2026-105483) tls: fix ip normalization regression (James M Snell)
- (CVE-2026-106069) tls: reject non-canonical IP addresses (Matteo
Collina)
- (CVE-2026-106073) permission: check permission model in realpathSync
(RafaelGSS)
- (CVE-2026-106074) crypto: reset random caches across snapshots (Filip
Skokan)
- (CVE-2026-111497) src: expose
`BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH` (Antoine du Hamel)
- (CVE-2026-111497) deps: brotli: cherry-pick
[`0ed4268`](https://redirect.github.com/nodejs/node/commit/0ed4268a4401abcb44720963)
(Evgenii Kliuchnikov)
- crypto: update root certificates to NSS 3.131.1 (Antoine du Hamel)
- deps: update c-ares to 1.34.9 (Node.js GitHub Bot)
- deps: update timezone to 2026e (Node.js GitHub Bot)
- deps: upgrade openssl sources to openssl-3.5.9 (Node.js GitHub Bot)
- deps: update undici to 7.30.1 (Node.js GitHub Bot)
##### Commits
-
\[[`2a73ee5a89`](https://redirect.github.com/nodejs/node/commit/2a73ee5a89)]
- **crypto**: update root certificates to NSS 3.131.1 (Antoine du Hamel)
[#​66877](https://redirect.github.com/nodejs/node/pull/66877)
-
\[[`4d6990b33c`](https://redirect.github.com/nodejs/node/commit/4d6990b33c)]
- **crypto**: reset random caches across snapshots (Filip Skokan)
[nodejs-private/node-private#987](https://redirect.github.com/nodejs-private/node-private/pull/987)
-
\[[`4b3c9bbf9f`](https://redirect.github.com/nodejs/node/commit/4b3c9bbf9f)]
- **crypto**: harden X.509 conversion and formatting (Filip Skokan)
[nodejs-private/node-private#1007](https://redirect.github.com/nodejs-private/node-private/pull/1007)
-
\[[`9243b105b6`](https://redirect.github.com/nodejs/node/commit/9243b105b6)]
- **crypto**: update root certificates to NSS 3.129 (Node.js GitHub Bot)
[#​66496](https://redirect.github.com/nodejs/node/pull/66496)
-
\[[`1e39cd53c7`](https://redirect.github.com/nodejs/node/commit/1e39cd53c7)]
- **deps**: update c-ares to 1.34.9 (Node.js GitHub Bot)
[#​66868](https://redirect.github.com/nodejs/node/pull/66868)
-
\[[`49dff6f57a`](https://redirect.github.com/nodejs/node/commit/49dff6f57a)]
- **deps**: brotli: cherry-pick
[`0ed4268`](https://redirect.github.com/nodejs/node/commit/0ed4268a4401abcb44720963)
(Evgenii Kliuchnikov)
[nodejs-private/node-private#1002](https://redirect.github.com/nodejs-private/node-private/pull/1002)
-
\[[`fca511adc5`](https://redirect.github.com/nodejs/node/commit/fca511adc5)]
- **deps**: V8: backport
[`93cd21e`](https://redirect.github.com/nodejs/node/commit/93cd21e8254b)
(Joyee Cheung)
[nodejs-private/node-private#1008](https://redirect.github.com/nodejs-private/node-private/pull/1008)
-
\[[`18711c7567`](https://redirect.github.com/nodejs/node/commit/18711c7567)]
- **deps**: update timezone to 2026e (Node.js GitHub Bot)
[#​66419](https://redirect.github.com/nodejs/node/pull/66419)
-
\[[`fa77cfb1ad`](https://redirect.github.com/nodejs/node/commit/fa77cfb1ad)]
- **deps**: update timezone to 2026d (Node.js GitHub Bot)
[#​66333](https://redirect.github.com/nodejs/node/pull/66333)
-
\[[`b84f9f186b`](https://redirect.github.com/nodejs/node/commit/b84f9f186b)]
- **deps**: update archs files for openssl-3.5.9 (Node.js GitHub Bot)
[#​66396](https://redirect.github.com/nodejs/node/pull/66396)
-
\[[`ff0664c3ba`](https://redirect.github.com/nodejs/node/commit/ff0664c3ba)]
- **deps**: upgrade openssl sources to openssl-3.5.9 (Node.js GitHub
Bot) [#​66396](https://redirect.github.com/nodejs/node/pull/66396)
-
\[[`1d4c89ef87`](https://redirect.github.com/nodejs/node/commit/1d4c89ef87)]
- **deps**: update undici to 7.30.1 (Node.js GitHub Bot)
[#​66764](https://redirect.github.com/nodejs/node/pull/66764)
-
\[[`843a1627dc`](https://redirect.github.com/nodejs/node/commit/843a1627dc)]
- **dns**: validate resolve inputs for null bytes (James M Snell)
[nodejs-private/node-private#984](https://redirect.github.com/nodejs-private/node-private/pull/984)
-
\[[`96c3ccb1fc`](https://redirect.github.com/nodejs/node/commit/96c3ccb1fc)]
- **http**: ensure agent data guard works without I/O (James M Snell)
[nodejs-private/node-private#983](https://redirect.github.com/nodejs-private/node-private/pull/983)
-
\[[`8dc18a6218`](https://redirect.github.com/nodejs/node/commit/8dc18a6218)]
- **permission**: check permission model in realpathSync (RafaelGSS)
[nodejs-private/node-private#973](https://redirect.github.com/nodejs-private/node-private/pull/973)
-
\[[`b5f41529df`](https://redirect.github.com/nodejs/node/commit/b5f41529df)]
- **src**: expose `BROTLI_DECODER_ERROR_FORMAT_BLOCK_SWITCH` (Antoine du
Hamel)
[nodejs-private/node-private#1002](https://redirect.github.com/nodejs-private/node-private/pull/1002)
-
\[[`01acf0ee74`](https://redirect.github.com/nodejs/node/commit/01acf0ee74)]
- **tls**: reject chains containing blocked public keys (Ulises Gascón)
[#​66871](https://redirect.github.com/nodejs/node/pull/66871)
-
\[[`935918e342`](https://redirect.github.com/nodejs/node/commit/935918e342)]
- **tls**: reject non-canonical IP addresses (Matteo Collina)
[nodejs-private/node-private#982](https://redirect.github.com/nodejs-private/node-private/pull/982)
-
\[[`de49c913f2`](https://redirect.github.com/nodejs/node/commit/de49c913f2)]
- **tls**: fix ip normalization regression (James M Snell)
[nodejs-private/node-private#985](https://redirect.github.com/nodejs-private/node-private/pull/985)
-
\[[`9dc4bb57f0`](https://redirect.github.com/nodejs/node/commit/9dc4bb57f0)]
- **tools**: retry Gatekeeper check and stapling after notarization
(Ryan Aslett)
[#​66855](https://redirect.github.com/nodejs/node/pull/66855)
###
[`v24.22.0`](https://redirect.github.com/nodejs/node/releases/tag/v24.22.0):
2026-10-14, Version 24.22.0 'Krypton' (LTS), @​richardlau prepared
by @​aduh95
[Compare
Source](https://redirect.github.com/nodejs/node/compare/v24.21.0...v24.22.0)
##### Notable Changes
-
\[[`ddbf974b47`](https://redirect.github.com/nodejs/node/commit/ddbf974b47)]
- **(SEMVER-MINOR)** **crypto**: add `crypto.parsePKCS12()` (Brian
Muenzenmeyer)
[#​65627](https://redirect.github.com/nodejs/node/pull/65627)
-
\[[`c162c68ff0`](https://redirect.github.com/nodejs/node/commit/c162c68ff0)]
- **(SEMVER-MINOR)** **crypto**: add a generic MAC API (Filip Skokan)
[#​65553](https://redirect.github.com/nodejs/node/pull/65553)
-
\[[`a4ab3d84d7`](https://redirect.github.com/nodejs/node/commit/a4ab3d84d7)]
- **(SEMVER-MINOR)** **crypto**: discover ciphers from OpenSSL providers
(Filip Skokan)
[#​65484](https://redirect.github.com/nodejs/node/pull/65484)
-
\[[`c2f1e829ea`](https://redirect.github.com/nodejs/node/commit/c2f1e829ea)]
- **(SEMVER-MINOR)** **crypto**: discover hashes from OpenSSL providers
(Filip Skokan)
[#​65484](https://redirect.github.com/nodejs/node/pull/65484)
-
\[[`51aad5a80d`](https://redirect.github.com/nodejs/node/commit/51aad5a80d)]
- **(SEMVER-MINOR)** **crypto**: enable SIV and GCM-SIV modes in
Cipher/Decipher APIs (Filip Skokan)
[#​63411](https://redirect.github.com/nodejs/node/pull/63411)
-
\[[`d11c65d2f2`](https://redirect.github.com/nodejs/node/commit/d11c65d2f2)]
- **doc**: add araujogui to collaborators (Guilherme Araújo)
[#​66090](https://redirect.github.com/nodejs/node/pull/66090)
-
\[[`acc1578179`](https://redirect.github.com/nodejs/node/commit/acc1578179)]
- **doc**: deprecate `Server.prototype._listen2` in `node:net` (Antoine
du Hamel)
[#​65593](https://redirect.github.com/nodejs/node/pull/65593)
-
\[[`a7f8de6362`](https://redirect.github.com/nodejs/node/commit/a7f8de6362)]
- **(SEMVER-MINOR)** **net**: support sending `net.BoundSocket` to
threads and child processes (Guy Bedford)
[#​64725](https://redirect.github.com/nodejs/node/pull/64725)
-
\[[`60c3eb61bd`](https://redirect.github.com/nodejs/node/commit/60c3eb61bd)]
- **(SEMVER-MINOR)** **perf_hooks**: implement `SlidingWindowHistogram`
(James M Snell)
[#​65825](https://redirect.github.com/nodejs/node/pull/65825)
-
\[[`6b3e6f9d5c`](https://redirect.github.com/nodejs/node/commit/6b3e6f9d5c)]
- **(SEMVER-MINOR)** **perf_hooks**: implement qrde analysis support in
Histogram (James M Snell)
[#​65806](https://redirect.github.com/nodejs/node/pull/65806)
-
\[[`75456a3512`](https://redirect.github.com/nodejs/node/commit/75456a3512)]
- **(SEMVER-MINOR)** **perf_hooks**: implement Histogram `meanCI` API
(James M Snell)
[#​65606](https://redirect.github.com/nodejs/node/pull/65606)
-
\[[`72d1b40c56`](https://redirect.github.com/nodejs/node/commit/72d1b40c56)]
- **(SEMVER-MINOR)** **perf_hooks**: add CBOR export/import for
histogram exchange (James M Snell)
[#​65434](https://redirect.github.com/nodejs/node/pull/65434)
-
\[[`41161dda87`](https://redirect.github.com/nodejs/node/commit/41161dda87)]
- **(SEMVER-MINOR)** **sqlite**: add `StatementSync.prototype.close()`
(Guilherme Araújo)
[#​64232](https://redirect.github.com/nodejs/node/pull/64232)
-
\[[`adbc757d70`](https://redirect.github.com/nodejs/node/commit/adbc757d70)]
- **(SEMVER-MINOR)** **sqlite**: add
`StatementSync.prototype[Symbol.dispose]()` (Guilherme Araújo)
[#​64232](https://redirect.github.com/nodejs/node/pull/64232)
-
\[[`241339f072`](https://redirect.github.com/nodejs/node/commit/241339f072)]
- **(SEMVER-MINOR)** **src,lib**: add `util.markPromiseAsHandled` (James
M Snell)
[#​65805](https://redirect.github.com/nodejs/node/pull/65805)
-
\[[`63b0974d9e`](https://redirect.github.com/nodejs/node/commit/63b0974d9e)]
- **(SEMVER-MINOR)** **util**: implement `util.throttle` (James M Snell)
[#​65899](https://redirect.github.com/nodejs/node/pull/65899)
-
\[[`a3bbb5a26f`](https://redirect.github.com/nodejs/node/commit/a3bbb5a26f)]
- **(SEMVER-MINOR)** **util**: implement `debounce` (James M Snell)
[#​65899](https://redirect.github.com/nodejs/node/pull/65899)
##### Commits
-
\[[`e6832b2cb1`](https://redirect.github.com/nodejs/node/commit/e6832b2cb1)]
- **assert**: fix TypeError on deepStrictEqual with null Map key or Set
member (Sergey Sannikov)
[#​64449](https://redirect.github.com/nodejs/node/pull/64449)
-
\[[`a079177d9f`](https://redirect.github.com/nodejs/node/commit/a079177d9f)]
- **benchmark**: add --csv option to compare.js with --analyze (James M
Snell)
[#​65922](https://redirect.github.com/nodejs/node/pull/65922)
-
\[[`10b1a0f70f`](https://redirect.github.com/nodejs/node/commit/10b1a0f70f)]
- **benchmark**: fix max-regressions detection in compare.js (James M
Snell)
[#​65587](https://redirect.github.com/nodejs/node/pull/65587)
-
\[[`e0c7ba8ad5`](https://redirect.github.com/nodejs/node/commit/e0c7ba8ad5)]
- **benchmark**: add --analyze option to benchmark/scatter.js (James M
Snell)
[#​65594](https://redirect.github.com/nodejs/node/pull/65594)
-
\[[`21fed10bb0`](https://redirect.github.com/nodejs/node/commit/21fed10bb0)]
- **benchmark**: add crypto class benchmarks (Filip Skokan)
[#​65518](https://redirect.github.com/nodejs/node/pull/65518)
-
\[[`fa912242b7`](https://redirect.github.com/nodejs/node/commit/fa912242b7)]
- **buffer**: fix unaligned UTF-16LE decoding (Matteo Collina)
[#​65905](https://redirect.github.com/nodejs/node/pull/65905)
-
\[[`a6bd0c1413`](https://redirect.github.com/nodejs/node/commit/a6bd0c1413)]
- **build**: suppress OpenSSL asm warnings with clang (Richard Lau)
[#​66023](https://redirect.github.com/nodejs/node/pull/66023)
-
\[[`94e12139ee`](https://redirect.github.com/nodejs/node/commit/94e12139ee)]
- **build**: derive V8_LOGGING_LEVEL from dcheck_always_on (Joyee
Cheung)
[#​65744](https://redirect.github.com/nodejs/node/pull/65744)
-
\[[`7a2f322943`](https://redirect.github.com/nodejs/node/commit/7a2f322943)]
- **build**: fix quiet default for make builds (Shelley Vohr)
[#​65826](https://redirect.github.com/nodejs/node/pull/65826)
-
\[[`c280d650b0`](https://redirect.github.com/nodejs/node/commit/c280d650b0)]
- **build**: allow linking shared dependencies in the GN build (Shelley
Vohr)
[#​65797](https://redirect.github.com/nodejs/node/pull/65797)
-
\[[`4b23a4472c`](https://redirect.github.com/nodejs/node/commit/4b23a4472c)]
- **build**: enable the V8 sandbox in shared-cage builds (Shelley Vohr)
[#​62237](https://redirect.github.com/nodejs/node/pull/62237)
-
\[[`676e15c003`](https://redirect.github.com/nodejs/node/commit/676e15c003)]
- **build**: define V8_CONTIGUOUS_COMPRESSED_RO_SPACE for shared cage
(Shelley Vohr)
[#​65464](https://redirect.github.com/nodejs/node/pull/65464)
-
\[[`f784058482`](https://redirect.github.com/nodejs/node/commit/f784058482)]
- **build**: remove obsolete configure flags (Chengzhong Wu)
[#​65456](https://redirect.github.com/nodejs/node/pull/65456)
-
\[[`f63f37d243`](https://redirect.github.com/nodejs/node/commit/f63f37d243)]
- **build**: activate correct default flags for riscv64 (Stewart X
Addison)
[#​65708](https://redirect.github.com/nodejs/node/pull/65708)
-
\[[`da46ac075d`](https://redirect.github.com/nodejs/node/commit/da46ac075d)]
- **build**: derive NODE_ARCH from target_cpu in the GN build (Shelley
Vohr)
[#​65491](https://redirect.github.com/nodejs/node/pull/65491)
-
\[[`249e9a16dd`](https://redirect.github.com/nodejs/node/commit/249e9a16dd)]
- **build,src**: gate jspi flag on V8_ENABLE_WEBASSEMBLY (Piotr Kubaj)
[#​66082](https://redirect.github.com/nodejs/node/pull/66082)
-
\[[`146f00f64b`](https://redirect.github.com/nodejs/node/commit/146f00f64b)]
- **child_process**: clear timeout timer on spawn-time error too
(kishore280)
[#​65506](https://redirect.github.com/nodejs/node/pull/65506)
-
\[[`13987f4418`](https://redirect.github.com/nodejs/node/commit/13987f4418)]
- **crypto**: remove redundent `std::move` call (Antoine du Hamel)
[#​66111](https://redirect.github.com/nodejs/node/pull/66111)
-
\[[`ef957ac85f`](https://redirect.github.com/nodejs/node/commit/ef957ac85f)]
- **crypto**: skip private RSA parameters in key details (Filip Skokan)
[#​66108](https://redirect.github.com/nodejs/node/pull/66108)
-
\[[`8feccc5e22`](https://redirect.github.com/nodejs/node/commit/8feccc5e22)]
- **crypto**: use provider EC group names (Filip Skokan)
[#​66108](https://redirect.github.com/nodejs/node/pull/66108)
-
\[[`764e0d1120`](https://redirect.github.com/nodejs/node/commit/764e0d1120)]
- **crypto**: fetch ciphers for private-key encoding (Filip Skokan)
[#​66108](https://redirect.github.com/nodejs/node/pull/66108)
-
\[[`50ffed1979`](https://redirect.github.com/nodejs/node/commit/50ffed1979)]
- **crypto**: decode
[PKCS#1](https://redirect.github.com/PKCS/node/issues/1) keys through
providers (Filip Skokan)
[#​66108](https://redirect.github.com/nodejs/node/pull/66108)
-
\[[`56c16b2fd6`](https://redirect.github.com/nodejs/node/commit/56c16b2fd6)]
- **crypto**: derive keys through EVP_KDF (Filip Skokan)
[#​66108](https://redirect.github.com/nodejs/node/pull/66108)
-
\[[`a4effe6809`](https://redirect.github.com/nodejs/node/commit/a4effe6809)]
- **crypto**: use names for asymmetric key algorithms (Filip Skokan)
[#​65966](https://redirect.github.com/nodejs/node/pull/65966)
-
\[[`ddbf974b47`](https://redirect.github.com/nodejs/node/commit/ddbf974b47)]
- **(SEMVER-MINOR)** **crypto**: add crypto.parsePKCS12() (Brian
Muenzenmeyer)
[#​65627](https://redirect.github.com/nodejs/node/pull/65627)
-
\[[`8e631aa48f`](https://redirect.github.com/nodejs/node/commit/8e631aa48f)]
- **crypto**: add Hybrid KEMs to Web Cryptography (Filip Skokan)
[#​65759](https://redirect.github.com/nodejs/node/pull/65759)
-
\[[`5c51129e16`](https://redirect.github.com/nodejs/node/commit/5c51129e16)]
- **crypto**: optimize private EC JWK import (Filip Skokan)
[#​65908](https://redirect.github.com/nodejs/node/pull/65908)
-
\[[`c2ec40c2d7`](https://redirect.github.com/nodejs/node/commit/c2ec40c2d7)]
- **crypto**: disable non-FIPS WebCrypto paths in FIPS mode (Filip
Skokan)
[#​65172](https://redirect.github.com/nodejs/node/pull/65172)
-
\[[`e198aa0f79`](https://redirect.github.com/nodejs/node/commit/e198aa0f79)]
- **crypto**: read RSA-PSS restrictions from provider (Filip Skokan)
[#​66108](https://redirect.github.com/nodejs/node/pull/66108)
-
\[[`253784f0e9`](https://redirect.github.com/nodejs/node/commit/253784f0e9)]
- **crypto**: optimize and benchmark key preparation (Filip Skokan)
[#​65892](https://redirect.github.com/nodejs/node/pull/65892)
-
\[[`80a6ad509b`](https://redirect.github.com/nodejs/node/commit/80a6ad509b)]
- **crypto**: avoid EC reconstruction for signature sizing (Filip
Skokan)
[#​65908](https://redirect.github.com/nodejs/node/pull/65908)
-
\[[`5b592b772c`](https://redirect.github.com/nodejs/node/commit/5b592b772c)]
- **crypto**: avoid EC raw export reconstruction (Filip Skokan)
[#​65908](https://redirect.github.com/nodejs/node/pull/65908)
-
\[[`ee956ae3bf`](https://redirect.github.com/nodejs/node/commit/ee956ae3bf)]
- **crypto**: export EC JWK coordinates directly (Filip Skokan)
[#​65908](https://redirect.github.com/nodejs/node/pull/65908)
-
\[[`684008be58`](https://redirect.github.com/nodejs/node/commit/684008be58)]
- **crypto**: read EC curve metadata directly (Filip Skokan)
[#​65908](https://redirect.github.com/nodejs/node/pull/65908)
-
\[[`f4665f1c41`](https://redirect.github.com/nodejs/node/commit/f4665f1c41)]
- **crypto**: validate the limit of PBKDF2 iterations (Filip Skokan)
[#​65704](https://redirect.github.com/nodejs/node/pull/65704)
-
\[[`624abbecd7`](https://redirect.github.com/nodejs/node/commit/624abbecd7)]
- **crypto**: use primordials in HKDF info validation (Filip Skokan)
[#​65704](https://redirect.github.com/nodejs/node/pull/65704)
-
\[[`e4d916f175`](https://redirect.github.com/nodejs/node/commit/e4d916f175)]
- **crypto**: add mgf1Hash for RSA-OAEP (Adam Mcgrath)
[#​65073](https://redirect.github.com/nodejs/node/pull/65073)
-
\[[`db8a9162a8`](https://redirect.github.com/nodejs/node/commit/db8a9162a8)]
- **crypto**: fix multi-prime RSA JWKs (Filip Skokan)
[#​65649](https://redirect.github.com/nodejs/node/pull/65649)
-
\[[`022ac83504`](https://redirect.github.com/nodejs/node/commit/022ac83504)]
- **crypto**: cache valid ECDH key pairs (Filip Skokan)
[#​65615](https://redirect.github.com/nodejs/node/pull/65615)
-
\[[`c61953ebcc`](https://redirect.github.com/nodejs/node/commit/c61953ebcc)]
- **crypto**: add strict mode to --force-fips (Filip Skokan)
[#​65645](https://redirect.github.com/nodejs/node/pull/65645)
-
\[[`db6ea132a5`](https://redirect.github.com/nodejs/node/commit/db6ea132a5)]
- **crypto**: add FIPS indicator diagnostics channel (Filip Skokan)
[#​65645](https://redirect.github.com/nodejs/node/pull/65645)
-
\[[`c162c68ff0`](https://redirect.github.com/nodejs/node/commit/c162c68ff0)]
- **(SEMVER-MINOR)** **crypto**: add a generic MAC API (Filip Skokan)
[#​65553](https://redirect.github.com/nodejs/node/pull/65553)
-
\[[`2b62aafd20`](https://redirect.github.com/nodejs/node/commit/2b62aafd20)]
- **crypto**: validate JWK usages before key_ops (Filip Skokan)
[#​65550](https://redirect.github.com/nodejs/node/pull/65550)
-
\[[`ec7819db69`](https://redirect.github.com/nodejs/node/commit/ec7819db69)]
- **crypto**: fix RSA-PSS oversized salt handling (Filip Skokan)
[#​65550](https://redirect.github.com/nodejs/node/pull/65550)
-
\[[`a4ab3d84d7`](https://redirect.github.com/nodejs/node/commit/a4ab3d84d7)]
- **(SEMVER-MINOR)** **crypto**: discover ciphers from OpenSSL providers
(Filip Skokan)
[#​65484](https://redirect.github.com/nodejs/node/pull/65484)
-
\[[`c2f1e829ea`](https://redirect.github.com/nodejs/node/commit/c2f1e829ea)]
- **(SEMVER-MINOR)** **crypto**: discover hashes from OpenSSL providers
(Filip Skokan)
[#​65484](https://redirect.github.com/nodejs/node/pull/65484)
-
\[[`51aad5a80d`](https://redirect.github.com/nodejs/node/commit/51aad5a80d)]
- **(SEMVER-MINOR)** **crypto**: enable SIV and GCM-SIV modes in
Cipher/Decipher APIs (Filip Skokan)
[#​63411](https://redirect.github.com/nodejs/node/pull/63411)
-
\[[`5a46a9acbb`](https://redirect.github.com/nodejs/node/commit/5a46a9acbb)]
- **crypto**: improve SubtleCrypto.supports() accuracy (Filip Skokan)
[#​65222](https://redirect.github.com/nodejs/node/pull/65222)
-
\[[`191ebfb26c`](https://redirect.github.com/nodejs/node/commit/191ebfb26c)]
- **crypto**: fix public PKCS8 export error (한국)
[#​65609](https://redirect.github.com/nodejs/node/pull/65609)
-
\[[`b6d7ed372b`](https://redirect.github.com/nodejs/node/commit/b6d7ed372b)]
- **crypto**: fix private SPKI export error (Filip Skokan)
[#​65550](https://redirect.github.com/nodejs/node/pull/65550)
-
\[[`79509c25a4`](https://redirect.github.com/nodejs/node/commit/79509c25a4)]
- **crypto**: correct CCM decryption FIPS error message (kyungrae)
[#​65450](https://redirect.github.com/nodejs/node/pull/65450)
-
\[[`9adc87bc16`](https://redirect.github.com/nodejs/node/commit/9adc87bc16)]
- **crypto**: harden X509Certificate state (Filip Skokan)
[#​65518](https://redirect.github.com/nodejs/node/pull/65518)
-
\[[`c63aa331b4`](https://redirect.github.com/nodejs/node/commit/c63aa331b4)]
- **crypto**: optimize key slot caching (Filip Skokan)
[#​65518](https://redirect.github.com/nodejs/node/pull/65518)
-
\[[`87daea43a7`](https://redirect.github.com/nodejs/node/commit/87daea43a7)]
- **crypto**: add null checks for OPENSSL_INIT_new() (Nora Dossche)
[#​63457](https://redirect.github.com/nodejs/node/pull/63457)
-
\[[`98ca5e9358`](https://redirect.github.com/nodejs/node/commit/98ca5e9358)]
- **crypto**: prevent Hmac.digest() from returning uninitialized memory
(Matteo Collina)
[#​65112](https://redirect.github.com/nodejs/node/pull/65112)
-
\[[`0c090a28cd`](https://redirect.github.com/nodejs/node/commit/0c090a28cd)]
- **crypto**: avoid throwing CryptoKey brand checks (Filip Skokan)
[#​65503](https://redirect.github.com/nodejs/node/pull/65503)
-
\[[`a13cc3f723`](https://redirect.github.com/nodejs/node/commit/a13cc3f723)]
- **crypto**: avoid throwing KeyObject brand checks (Filip Skokan)
[#​65503](https://redirect.github.com/nodejs/node/pull/65503)
-
\[[`b8db0045ef`](https://redirect.github.com/nodejs/node/commit/b8db0045ef)]
- **deps**: V8: cherry-pick
[`ea9c016`](https://redirect.github.com/nodejs/node/commit/ea9c016f26ad)
(Gundepalli Sravani)
[#​66570](https://redirect.github.com/nodejs/node/pull/66570)
-
\[[`ba09b53487`](https://redirect.github.com/nodejs/node/commit/ba09b53487)]
- **deps**: V8: backport
[`c355350`](https://redirect.github.com/nodejs/node/commit/c3553509f460)
(Jakob Linke)
[#​66089](https://redirect.github.com/nodejs/node/pull/66089)
-
\[[`9ce8ef405b`](https://redirect.github.com/nodejs/node/commit/9ce8ef405b)]
- **deps**: V8: backport
[`8901c79`](https://redirect.github.com/nodejs/node/commit/8901c793e439)
(Toon Verwaest)
[#​66089](https://redirect.github.com/nodejs/node/pull/66089)
-
\[[`fb0d0ca289`](https://redirect.github.com/nodejs/node/commit/fb0d0ca289)]
- **deps**: V8: backport
[`0b94a9f`](https://redirect.github.com/nodejs/node/commit/0b94a9fd23ba)
(Ruan Gustavo)
[#​65753](https://redirect.github.com/nodejs/node/pull/65753)
-
\[[`2faca508c0`](https://redirect.github.com/nodejs/node/commit/2faca508c0)]
- **deps**: update googletest to
[`8eff9e3`](https://redirect.github.com/nodejs/node/commit/8eff9e336692fc95961e096564f1044c600b881d)
(Node.js GitHub Bot)
[#​66009](https://redirect.github.com/nodejs/node/pull/66009)
-
\[[`4396c9bffe`](https://redirect.github.com/nodejs/node/commit/4396c9bffe)]
- **deps**: update googletest to
[`283c175`](https://redirect.github.com/nodejs/node/commit/283c17563fe7a1111cd7f581aa5d541e8baeff2f)
(Node.js GitHub Bot)
[#​65833](https://redirect.github.com/nodejs/node/pull/65833)
-
\[[`8a5b12570c`](https://redirect.github.com/nodejs/node/commit/8a5b12570c)]
- **deps**: update simdjson to 4.6.11 (Node.js GitHub Bot)
[#​65834](https://redirect.github.com/nodejs/node/pull/65834)
-
\[[`c47feb09e8`](https://redirect.github.com/nodejs/node/commit/c47feb09e8)]
- **deps**: update zlib to 1.3.2.1-motley-285e94b (Node.js GitHub Bot)
[#​65835](https://redirect.github.com/nodejs/node/pull/65835)
-
\[[`9f0d905286`](https://redirect.github.com/nodejs/node/commit/9f0d905286)]
- **deps**: upgrade npm to 11.19.1 (npm team)
[#​65573](https://redirect.github.com/nodejs/node/pull/65573)
-
\[[`373cd332d8`](https://redirect.github.com/nodejs/node/commit/373cd332d8)]
- **deps**: update googletest to
[`36ba75f`](https://redirect.github.com/nodejs/node/commit/36ba75f0ad5383a9759f17f3f72fd4661c72cb6d)
(Node.js GitHub Bot)
[#​65654](https://redirect.github.com/nodejs/node/pull/65654)
-
\[[`aeed6132a7`](https://redirect.github.com/nodejs/node/commit/aeed6132a7)]
- **deps**: update simdjson to 4.6.9 (Node.js GitHub Bot)
[#​65655](https://redirect.github.com/nodejs/node/pull/65655)
-
\[[`2583571342`](https://redirect.github.com/nodejs/node/commit/2583571342)]
- **deps**: update zlib to 1.3.2.1-motley-5eb4d7e (Node.js GitHub Bot)
[#​65494](https://redirect.github.com/nodejs/node/pull/65494)
-
\[[`d11c65d2f2`](https://redirect.github.com/nodejs/node/commit/d11c65d2f2)]
- **doc**: add araujogui to collaborators (Guilherme Araújo)
[#​66090](https://redirect.github.com/nodejs/node/pull/66090)
-
\[[`0a4a8d602a`](https://redirect.github.com/nodejs/node/commit/0a4a8d602a)]
- **doc**: fix duplicate 'the' typo in `node_platform.cc` (Muhammad
Al-Muzahid)
[#​66058](https://redirect.github.com/nodejs/node/pull/66058)
-
\[[`b6538138ef`](https://redirect.github.com/nodejs/node/commit/b6538138ef)]
- **doc**: clarify sub-1000ms behavior in socket.setKeepAlive (Haram
Jeong)
[#​65869](https://redirect.github.com/nodejs/node/pull/65869)
-
\[[`d319fa7de4`](https://redirect.github.com/nodejs/node/commit/d319fa7de4)]
- **doc**: remove obsolete mentioning of cl.exe on windows (Chengzhong
Wu) [#​66038](https://redirect.github.com/nodejs/node/pull/66038)
-
\[[`67cb305b59`](https://redirect.github.com/nodejs/node/commit/67cb305b59)]
- **doc**: note that default signal handling resets the signal mask
(Shelley Vohr)
[#​65877](https://redirect.github.com/nodejs/node/pull/65877)
-
\[[`160d44e025`](https://redirect.github.com/nodejs/node/commit/160d44e025)]
- **doc**: clarify QUIC async write backpressure (John Finnerty)
[#​65947](https://redirect.github.com/nodejs/node/pull/65947)
-
\[[`ffd47a7ee5`](https://redirect.github.com/nodejs/node/commit/ffd47a7ee5)]
- **doc**: clarify permission model scope for output paths (Rafael
Gonzaga)
[#​66004](https://redirect.github.com/nodejs/node/pull/66004)
-
\[[`2e1772a8ab`](https://redirect.github.com/nodejs/node/commit/2e1772a8ab)]
- **doc**: fill in missing zstd docs (James M Snell)
[#​65867](https://redirect.github.com/nodejs/node/pull/65867)
-
\[[`9f88c6f8dc`](https://redirect.github.com/nodejs/node/commit/9f88c6f8dc)]
- **doc**: add inoway46 as triager (Yuya Inoue)
[#​65565](https://redirect.github.com/nodejs/node/pull/65565)
-
\[[`c2620d01f3`](https://redirect.github.com/nodejs/node/commit/c2620d01f3)]
- **doc**: document windowsHide for child_process.fork (Christopher
Buss)
[#​65887](https://redirect.github.com/nodejs/node/pull/65887)
-
\[[`6076111e1a`](https://redirect.github.com/nodejs/node/commit/6076111e1a)]
- **doc**: qualify directory read ordering for native fs (Trivikram
Kamat)
[#​65868](https://redirect.github.com/nodejs/node/pull/65868)
-
\[[`7bf048a336`](https://redirect.github.com/nodejs/node/commit/7bf048a336)]
- **doc**: add DOMException section to errors API reference (Avocado)
[#​65206](https://redirect.github.com/nodejs/node/pull/65206)
-
\[[`414b6bfa62`](https://redirect.github.com/nodejs/node/commit/414b6bfa62)]
- **doc**: expand revert commit collaborator instructions (Mike
McCready)
[#​65848](https://redirect.github.com/nodejs/node/pull/65848)
-
\[[`c8ac91692c`](https://redirect.github.com/nodejs/node/commit/c8ac91692c)]
- **doc**: note that FreeEnvironment() runs a shared event loop (Shelley
Vohr)
[#​65691](https://redirect.github.com/nodejs/node/pull/65691)
-
\[[`cc47cc0983`](https://redirect.github.com/nodejs/node/commit/cc47cc0983)]
- **doc**: clarify security triage dispositions and permission
boundaries (Rafael Gonzaga)
[#​65436](https://redirect.github.com/nodejs/node/pull/65436)
-
\[[`8b79a71e78`](https://redirect.github.com/nodejs/node/commit/8b79a71e78)]
- **doc**: fix default limit of maxHeadersCount (Aryn H)
[#​65472](https://redirect.github.com/nodejs/node/pull/65472)
-
\[[`56b1252a54`](https://redirect.github.com/nodejs/node/commit/56b1252a54)]
- **doc**: fix return types for sync methods (Chiang Fong Lee)
[#​58575](https://redirect.github.com/nodejs/node/pull/58575)
-
\[[`da0d32a333`](https://redirect.github.com/nodejs/node/commit/da0d32a333)]
- **doc**: document REPL DEP0185 throws and uncaught-exception behavior
(Adrián Estrada)
[#​64993](https://redirect.github.com/nodejs/node/pull/64993)
-
\[[`f8ab3619b6`](https://redirect.github.com/nodejs/node/commit/f8ab3619b6)]
- **doc**: document close() error when in a sqlite callback (Trivikram
Kamat)
[#​65090](https://redirect.github.com/nodejs/node/pull/65090)
-
\[[`131f1db302`](https://redirect.github.com/nodejs/node/commit/131f1db302)]
- **doc**: clarify return type of `fs.mkdtemp*` (Antoine du Hamel)
[#​65743](https://redirect.github.com/nodejs/node/pull/65743)
-
\[[`7755e98183`](https://redirect.github.com/nodejs/node/commit/7755e98183)]
- **doc**: update `changelog-maker` instructions for releasing (Juan
José)
[#​65707](https://redirect.github.com/nodejs/node/pull/65707)
-
\[[`f982a53433`](https://redirect.github.com/nodejs/node/commit/f982a53433)]
- **doc**: add stability status to `crypto.setEngine` (Antoine du Hamel)
[#​65746](https://redirect.github.com/nodejs/node/pull/65746)
-
\[[`17be003f7c`](https://redirect.github.com/nodejs/node/commit/17be003f7c)]
- **doc**: remove outdated TLS authorized warning (Tim Perry)
[#​65597](https://redirect.github.com/nodejs/node/pull/65597)
-
\[[`424002232d`](https://redirect.github.com/nodejs/node/commit/424002232d)]
- **doc**: fix stale TOC in maintaining-dependencies (greenhead)
[#​65523](https://redirect.github.com/nodejs/node/pull/65523)
-
\[[`dddb9b57a5`](https://redirect.github.com/nodejs/node/commit/dddb9b57a5)]
- **doc**: refactor the AI guidelines (Joyee Cheung)
[#​65269](https://redirect.github.com/nodejs/node/pull/65269)
-
\[[`397b58e113`](https://redirect.github.com/nodejs/node/commit/397b58e113)]
- **doc**: fix triggerAsyncId() comment in async_hooks example
(soreavis)
[#​64583](https://redirect.github.com/nodejs/node/pull/64583)
-
\[[`338ec94d83`](https://redirect.github.com/nodejs/node/commit/338ec94d83)]
- **doc**: fix fsPromises.watch overflow value (Matt Radbourne)
[#​64605](https://redirect.github.com/nodejs/node/pull/64605)
-
\[[`f18be21b14`](https://redirect.github.com/nodejs/node/commit/f18be21b14)]
- **doc**: clarify stream direction in options.stdio note (Avocado)
[#​65236](https://redirect.github.com/nodejs/node/pull/65236)
-
\[[`f07c6acd8b`](https://redirect.github.com/nodejs/node/commit/f07c6acd8b)]
- **doc**: clarify signal listener behavior (Som Samantray)
[#​65243](https://redirect.github.com/nodejs/node/pull/65243)
-
\[[`8bc17b0c7a`](https://redirect.github.com/nodejs/node/commit/8bc17b0c7a)]
- **doc**: add test reporter event lifecycle diagram (sangwook)
[#​63780](https://redirect.github.com/nodejs/node/pull/63780)
-
\[[`452e7477d4`](https://redirect.github.com/nodejs/node/commit/452e7477d4)]
- **doc**: discourage AbortSignal cleanup for long-lived resources (Efe
Karasakal)
[#​64342](https://redirect.github.com/nodejs/node/pull/64342)
-
\[[`acc1578179`](https://redirect.github.com/nodejs/node/commit/acc1578179)]
- **doc**: deprecate `Server.prototype._listen2` in `node:net` (Antoine
du Hamel)
[#​65593](https://redirect.github.com/nodejs/node/pull/65593)
-
\[[`e7ed4361d6`](https://redirect.github.com/nodejs/node/commit/e7ed4361d6)]
- **doc,test**: account for OpenSSL 4.1 behaviours (Filip Skokan)
[#​65956](https://redirect.github.com/nodejs/node/pull/65956)
-
\[[`c65fafeab4`](https://redirect.github.com/nodejs/node/commit/c65fafeab4)]
- **errors**: validate constructor name (Christian Aurich)
[#​65607](https://redirect.github.com/nodejs/node/pull/65607)
-
\[[`f6b47938b7`](https://redirect.github.com/nodejs/node/commit/f6b47938b7)]
- **events**: fix weak listener retention overwrite (Aryan)
[#​64024](https://redirect.github.com/nodejs/node/pull/64024)
-
\[[`a27db42c3e`](https://redirect.github.com/nodejs/node/commit/a27db42c3e)]
- **fs**: coerce FileHandle.read length like fs.read (Xia Chao)
[#​65521](https://redirect.github.com/nodejs/node/pull/65521)
-
\[[`f3019b522a`](https://redirect.github.com/nodejs/node/commit/f3019b522a)]
- **fs**: throw on existing dir in cpSync with errorOnExist (Daijiro
Wachi)
[#​64124](https://redirect.github.com/nodejs/node/pull/64124)
-
\[[`cd1011458f`](https://redirect.github.com/nodejs/node/commit/cd1011458f)]
- **fs**: support removing read-only files in rmSync on Windows (Sparsh
:)) [#​64453](https://redirect.github.com/nodejs/node/pull/64453)
-
\[[`d659dd8cd8`](https://redirect.github.com/nodejs/node/commit/d659dd8cd8)]
- **fs**: give directories created by cpSync the source directory's mode
(Shelley Vohr)
[#​65488](https://redirect.github.com/nodejs/node/pull/65488)
-
\[[`1dfb047293`](https://redirect.github.com/nodejs/node/commit/1dfb047293)]
- **fs**: handle recursive watch setup races (Filip Skokan)
[#​65699](https://redirect.github.com/nodejs/node/pull/65699)
-
\[[`bc431c8413`](https://redirect.github.com/nodejs/node/commit/bc431c8413)]
- **fs**: apply nocase to literal glob exclude patterns (Yusuke Hayashi)
[#​64817](https://redirect.github.com/nodejs/node/pull/64817)
-
\[[`dd5662e641`](https://redirect.github.com/nodejs/node/commit/dd5662e641)]
- **fs**: do not descend into symlinks for \*\* unless following
symlinks (RafaelGSS)
[#​65435](https://redirect.github.com/nodejs/node/pull/65435)
-
\[[`ac4cf54292`](https://redirect.github.com/nodejs/node/commit/ac4cf54292)]
- **fs**: watch directories, not files, in recursive fs.watch fallback
(Shelley Vohr)
[#​65486](https://redirect.github.com/nodejs/node/pull/65486)
-
\[[`7804bfbd71`](https://redirect.github.com/nodejs/node/commit/7804bfbd71)]
- **fs**: preserve directory timestamps in cp (Abhinandan Kumar)
[#​65540](https://redirect.github.com/nodejs/node/pull/65540)
-
\[[`ba5ca5a1a5`](https://redirect.github.com/nodejs/node/commit/ba5ca5a1a5)]
- **fs**: fix recursive watch error handling (Filip Skokan)
[#​65635](https://redirect.github.com/nodejs/node/pull/65635)
-
\[[`b71c4c0551`](https://redirect.github.com/nodejs/node/commit/b71c4c0551)]
- **fs**: fix rmSync error messages for non-ASCII paths (Yeaseen)
[#​61233](https://redirect.github.com/nodejs/node/pull/61233)
-
\[[`53b4700892`](https://redirect.github.com/nodejs/node/commit/53b4700892)]
- **http**: don't destroy socket after request completes (Barath Raj)
[#​65952](https://redirect.github.com/nodejs/node/pull/65952)
-
\[[`96d4c23f17`](https://redirect.github.com/nodejs/node/commit/96d4c23f17)]
- **http**: fast-forward teardown of unread messages (Matteo Collina)
[#​65732](https://redirect.github.com/nodejs/node/pull/65732)
-
\[[`742b4bf5a6`](https://redirect.github.com/nodejs/node/commit/742b4bf5a6)]
- **http**: coalesce chunked writes during auto-corking (GetThatCookie)
[#​64987](https://redirect.github.com/nodejs/node/pull/64987)
-
\[[`8921108175`](https://redirect.github.com/nodejs/node/commit/8921108175)]
- **http2**: settle pending write callbacks on destroy (Matteo Collina)
[#​66016](https://redirect.github.com/nodejs/node/pull/66016)
-
\[[`9a2f77a3fc`](https://redirect.github.com/nodejs/node/commit/9a2f77a3fc)]
- **http2**: fix onread assert when destroying session from stream
handler (Sankalp Thakur)
[#​65116](https://redirect.github.com/nodejs/node/pull/65116)
-
\[[`99e41eb43a`](https://redirect.github.com/nodejs/node/commit/99e41eb43a)]
- **http2**: error for incomplete reads on RST, auto-drain, deprecate
aborted (Tim Perry)
[#​63249](https://redirect.github.com/nodejs/node/pull/63249)
-
\[[`d520b9601c`](https://redirect.github.com/nodejs/node/commit/d520b9601c)]
- **http2**: fix write deadlock exposed by larger window sizes (Tim
Perry)
[#​65440](https://redirect.github.com/nodejs/node/pull/65440)
-
\[[`86b2497aae`](https://redirect.github.com/nodejs/node/commit/86b2497aae)]
- **http2**: fix async context loss when trailers carry END_STREAM
(Orgad Shaneh)
[#​63814](https://redirect.github.com/nodejs/node/pull/63814)
-
\[[`536ccc7daf`](https://redirect.github.com/nodejs/node/commit/536ccc7daf)]
- **https**: limit proxy CONNECT response headers (Matteo Collina)
[#​64545](https://redirect.github.com/nodejs/node/pull/64545)
-
\[[`fe6147832b`](https://redirect.github.com/nodejs/node/commit/fe6147832b)]
- **inspector**: fix abort when two Environments own the inspector
(Shelley Vohr)
[#​65877](https://redirect.github.com/nodejs/node/pull/65877)
-
\[[`843a27782a`](https://redirect.github.com/nodejs/node/commit/843a27782a)]
- **inspector**: fix crash when the IsolateData has no platform (Shelley
Vohr)
[#​65818](https://redirect.github.com/nodejs/node/pull/65818)
-
\[[`3f0b6d3308`](https://redirect.github.com/nodejs/node/commit/3f0b6d3308)]
- **lib**: avoid repeat internal receiver checks (Filip Skokan)
[#​65910](https://redirect.github.com/nodejs/node/pull/65910)
-
\[[`0039479b4a`](https://redirect.github.com/nodejs/node/commit/0039479b4a)]
- **lib**: fix shared buffer growability validation (Filip Skokan)
[#​65845](https://redirect.github.com/nodejs/node/pull/65845)
-
\[[`e7907130ae`](https://redirect.github.com/nodejs/node/commit/e7907130ae)]
- **lib**: use Web IDL interface brand checks (Filip Skokan)
[#​65846](https://redirect.github.com/nodejs/node/pull/65846)
-
\[[`7ae085552b`](https://redirect.github.com/nodejs/node/commit/7ae085552b)]
- **lib**: fix AbortSignal.any() abort propagation (Yuya Inoue)
[#​66014](https://redirect.github.com/nodejs/node/pull/66014)
-
\[[`01032f4fdc`](https://redirect.github.com/nodejs/node/commit/01032f4fdc)]
- **lib**: fix for FileHandle.readableWebStream (Patrick Dähne)
[#​58842](https://redirect.github.com/nodejs/node/pull/58842)
-
\[[`60a9a28206`](https://redirect.github.com/nodejs/node/commit/60a9a28206)]
- **lib**: avoid unsafe array iteration in cli table (Donghoon Kang)
[#​65838](https://redirect.github.com/nodejs/node/pull/65838)
-
\[[`230a7fcef0`](https://redirect.github.com/nodejs/node/commit/230a7fcef0)]
- **lib**: optimize internal Web IDL dictionaries (Filip Skokan)
[#​65857](https://redirect.github.com/nodejs/node/pull/65857)
-
\[[`7cc02b14ec`](https://redirect.github.com/nodejs/node/commit/7cc02b14ec)]
- **lib**: validate sequence iterator objects (Filip Skokan)
[#​65844](https://redirect.github.com/nodejs/node/pull/65844)
-
\[[`c2bb3aeccc`](https://redirect.github.com/nodejs/node/commit/c2bb3aeccc)]
- **lib**: defer source map payload decoding until first use (Shelley
Vohr)
[#​65490](https://redirect.github.com/nodejs/node/pull/65490)
-
\[[`c4b390cf17`](https://redirect.github.com/nodejs/node/commit/c4b390cf17)]
- **lib**: optimize async context frame activation (Tim Perry)
[#​65519](https://redirect.github.com/nodejs/node/pull/65519)
-
\[[`3e4fc50a4f`](https://redirect.github.com/nodejs/node/commit/3e4fc50a4f)]
- **lib**: use validateArray for array arguments (JunHwan Choi)
[#​65344](https://redirect.github.com/nodejs/node/pull/65344)
-
\[[`b351ac9cd4`](https://redirect.github.com/nodejs/node/commit/b351ac9cd4)]
- **meta**: bump step-security/harden-runner from 2.21.0 to 2.21.1
(dependabot\[bot])
[#​66044](https://redirect.github.com/nodejs/node/pull/66044)
-
\[[`693e890fec`](https://redirect.github.com/nodejs/node/commit/693e890fec)]
- **meta**: bump github/codeql-action/upload-sarif from 4.37.9 to 4.38.0
(dependabot\[bot])
[#​66046](https://redirect.github.com/nodejs/node/pull/66046)
-
\[[`9c2abc13c2`](https://redirect.github.com/nodejs/node/commit/9c2abc13c2)]
- **meta**: bump github/codeql-action/init from 4.37.9 to 4.38.0
(dependabot\[bot])
[#​66048](https://redirect.github.com/nodejs/node/pull/66048)
-
\[[`b3c5c2b91d`](https://redirect.github.com/nodejs/node/commit/b3c5c2b91d)]
- **meta**: bump github/codeql-action/analyze from 4.37.9 to 4.38.0
(dependabot\[bot])
[#​66049](https://redirect.github.com/nodejs/node/pull/66049)
-
\[[`2428b13b02`](https://redirect.github.com/nodejs/node/commit/2428b13b02)]
- **meta**: bump github/codeql-action/autobuild from 4.37.9 to 4.38.0
(dependabot\[bot])
[#​66050](https://redirect.github.com/nodejs/node/pull/66050)
-
\[[`eff5d15041`](https://redirect.github.com/nodejs/node/commit/eff5d15041)]
- **meta**: add joyeecheung as v8 currency strategic initiative champion
(Joyee Cheung)
[#​65965](https://redirect.github.com/nodejs/node/pull/65965)
-
\[[`aa549fed0d`](https://redirect.github.com/nodejs/node/commit/aa549fed0d)]
- **meta**: expand on collaborator restoration process (Chengzhong Wu)
[#​65962](https://redirect.github.com/nodejs/node/pull/65962)
-
\[[`593b40eb2b`](https://redirect.github.com/nodejs/node/commit/593b40eb2b)]
- **meta**: add web-standards as webidl owners (Filip Skokan)
[#​65856](https://redirect.github.com/nodejs/node/pull/65856)
-
\[[`e711d3fef3`](https://redirect.github.com/nodejs/node/commit/e711d3fef3)]
- **meta**: bump actions/checkout from 7.0.0 to 7.0.1 (dependabot\[bot])
[#​65718](https://redirect.github.com/nodejs/node/pull/65718)
-
\[[`0fc8a38f5b`](https://redirect.github.com/nodejs/node/commit/0fc8a38f5b)]
- **meta**: cleanup targos emeritus changes (Antoine du Hamel)
[#​65738](https://redirect.github.com/nodejs/node/pull/65738)
-
\[[`2ca2fd566d`](https://redirect.github.com/nodejs/node/commit/2ca2fd566d)]
- **meta**: bump github/codeql-action/init from 4.37.3 to 4.37.9
(dependabot\[bot])
[#​65714](https://redirect.github.com/nodejs/node/pull/65714)
-
\[[`325709818e`](https://redirect.github.com/nodejs/node/commit/325709818e)]
- **meta**: bump github/codeql-action/autobuild from 4.37.3 to 4.37.9
(dependabot\[bot])
[#​65717](https://redirect.github.com/nodejs/node/pull/65717)
-
\[[`8481d22f72`](https://redirect.github.com/nodejs/node/commit/8481d22f72)]
- **meta**: bump actions/setup-node from 6.4.0 to 7.0.0
(dependabot\[bot])
[#​65720](https://redirect.github.com/nodejs/node/pull/65720)
-
\[[`cd2bd5d9fd`](https://redirect.github.com/nodejs/node/commit/cd2bd5d9fd)]
- **meta**: bump step-security/harden-runner from 2.20.0 to 2.21.0
(dependabot\[bot])
[#​65721](https://redirect.github.com/nodejs/node/pull/65721)
-
\[[`fdec747105`](https://redirect.github.com/nodejs/node/commit/fdec747105)]
- **meta**: bump github/codeql-action/upload-sarif from 4.37.3 to 4.37.9
(dependabot\[bot])
[#​65722](https://redirect.github.com/nodejs/node/pull/65722)
-
\[[`34c2fca088`](https://redirect.github.com/nodejs/node/commit/34c2fca088)]
- **meta**: bump github/codeql-action/analyze from 4.37.3 to 4.37.9
(dependabot\[bot])
[#​65723](https://redirect.github.com/nodejs/node/pull/65723)
-
\[[`46d4549938`](https://redirect.github.com/nodejs/node/commit/46d4549938)]
- **meta**: document collaborator automation (Filip Skokan)
[#​65671](https://redirect.github.com/nodejs/node/pull/65671)
- \[[`a7f8de6362`](https://redirect.github.com/nodejs/node/commit/
> [!IMPORTANT]
> ✂ PR body was truncated to here.
</details>
---
### Configuration
📅 **Schedule**: (in timezone Asia/Shanghai)
- Branch creation
- "after 2am and before 3am"
- Automerge
- "schedule:daily"
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/u3u/prettier-config).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNzEuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE3MS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Problem
php-parser 3.7 (glayzzle/php-parser#1142) parses PHP 8.4 property hooks into
property.hooks, butprinter.mjsnever prints them. Formattingexits 0 and writes back
public ?int $agencyId;— the hooks are silently deleted. A comment anywhere inside the hooks turns that intoError: Comment "..." was not printedinstead, which is the only thing that stopped us from losing code.The same class of bug affects property modifiers the parser already exposes on
propertystatement:abstract,finaland the asymmetric set visibility (public private(set) static string $webUrl;) were all dropped on format.Fix
printPropertyHooks()used bypropertyand byparameter(hooks on promoted constructor properties), and apropertyhookcase printing[#[attr] ][final ][&]get|set[(param)]followed by;,=> expr;(viaprintAssignmentRight, so long expressions break like assignments) or{ ... }.public string $name { get; set; }.lineShouldEndWithSemicolon(): a hooked property statement ends with}, not};(a parse error inside a class body).propertystatementprintsabstract,finalandvisibilitySet(public private(set)).handleFunctionParameter()guards against a missing preceding node, reachable with a comment right afterset(.No parser change is needed:
php-parser@^3.7.0is already the dependency. Supersedes #2458, which needed a fork of the parser at the time; this builds on the same idea and additionally covers hook attributes, promoted-parameter hooks, the one-line form and the property modifiers.Tests
tests/property-hooks/covers interface and abstract declarations,=>and block bodies,final,&get,set(Type $v), attributes on hooks, comments between/after hooks, empty bodies, promoted constructor parameters, long expressions, and the property modifiers. Verified withAST_COMPARE=1; output re-formats idempotently and passesphp -l.🤖 Generated with Claude Code