Commit Graph

811 Commits

Author SHA1 Message Date
camc314 4b121ab396 test(napi/parser): run async tests sequentially (#23820)
A little breakdown of what was going on:

 - the failing test case was testing that raw transfer vs non raw transfer was the same. This was parsing checker.ts (a 3.2mb file)
 - this test was running concurrently (via vitest's describe.concurrently) with a memory exhaustion test that was running parse with raw transfer 10,000x concurrently
 - as a result of these concurrent tests, it resulted in a large number of JS objects being created (and hence needing to be GC-ed)
 - since CI is not deterministic, it caused a flakiness roughly 2% of the time
 - this can clearly be seen from the attached flamegraph - the  readFile  call (reading checker.ts from the disk) was sometimes taking up to 3 seconds to read the file from the disk

This seems to be fixed by no longer using describe.concurrent, as it reduces the amount of concurrent work and reduces the chance of the timeout.

<img width="4096" height="1724" alt="image" src="https://github.com/user-attachments/assets/0fd5bc59-8d28-4453-adda-bf33834aafa8" />
2026-06-26 13:49:48 +00:00
camc314 c9517f75aa refactor(napi/parser): add some missing TS type annotations (#23817) 2026-06-26 10:08:36 +00:00
overlookmotel 5201522945 refactor(allocator): Vec construction methods take &GetAllocator (#23755)
Part of #23043.

`Vec::new_in`, `Vec::with_capacity_in`, `Vec::from_array_in` etc previously took an `&'a Allocator`. Instead make them take an `&A where A: GetAllocator<'a>`.

This makes them more flexible - you can pass a reference to any type which implements `GetAllocator` e.g. `ParserImpl`, `TraverseCtx` etc.

```rust
// Before (`ctx` here is `&mut TraverseCtx`)
let vec = ArenaVec::new_in(ctx.ast.allocator);
// After
let vec = ArenaVec::new_in(ctx);
```

The main motivation is to make them workable replacements for what are currently methods on `AstBuilder`, but will be removed in the new `AstBuilder`:

```rust
// Before (`ctx` here is `&mut TraverseCtx`)
let vec = ctx.ast.vec();
// After
let vec = ArenaVec::new_in(ctx);
// Instead of
let vec = ArenaVec::new_in(ctx.ast.allocator);
```

This is still longer code than the original, which is not ideal, but it's as short as can make them.

The main downside of this change is that when calling these methods with an `&Allocator`, you have to double reference:

```rust
let allocator: &'a Allocator = get_allocator_somehow();
// Passing `&&Allocator`
let vec = ArenaVec::new_in(&allocator);
```

This has no perf impact - these methods are inlined, and compiler collapses the double-reference like it wasn't there, but it's just ugly. Unfortunately, there's no way to implement `GetAllocator` so it'll accept both `&Allocator` and `&mut TraverseCtx`, and the latter is the much more common use case.
2026-06-24 12:13:15 +00:00
overlookmotel d1f18cda21 refactor(all): import arena Box and Vec as ArenaBox / ArenaVec (#23747)
Pure refactor.

Use `ArenaBox` and `ArenaVec` everywhere for the arena-allocated types from `oxc_allocator`, instead of plain `Box` and `Vec`.

This disambiguates when `Vec` is `oxc_allocator::Vec` and when it's `std::vec::Vec`, making code clearer to follow.

Previously it was easy to confuse the two, and such confusion led to UB in `Traverse` (fixed in #23745).

Ditto other arena types - `ArenaHashMap`, `ArenaHashSet`, `ArenaStringBuilder`.

The only exceptions are:

1. Inside `oxc_allocator` crate itself.
2. AST type definitions.
3. Generated code (migrated separately in #23749).
2026-06-24 01:21:41 +00:00
overlookmotel 8c6481bbf9 refactor(allocator): export ArenaBox and ArenaVec aliases (#23746)
Pure refactor.

It's a common pattern in repo to import `Vec` and `Box` etc from `oxc_allocator` and alias them to `ArenaBox` / `ArenaVec`.

```rust
use oxc_allocator::{Box as ArenaBox, Vec as ArenaVec};
```

Make this pattern less verbose by re-exporting `Box` and `Vec` as these aliases from `oxc_allocator`.

Ditto other arena types: `ArenaHashMap`, `ArenaHashSet`, `ArenaStringBuilder`.

Use those aliases in all other crates to shorten code.

```rust
use oxc_allocator::{ArenaBox, ArenaVec};
```
2026-06-24 01:21:40 +00:00
renovate[bot] 3cdd18f557 chore(deps): update npm packages (#23690)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Adoption](https://docs.renovatebot.com/merge-confidence/) |
[Passing](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [@codspeed/vitest-plugin](https://codspeed.io)
([source](https://redirect.github.com/CodSpeedHQ/codspeed-node)) |
[`5.5.0` →
`5.6.0`](https://renovatebot.com/diffs/npm/@codspeed%2fvitest-plugin/5.5.0/5.6.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@codspeed%2fvitest-plugin/5.6.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@codspeed%2fvitest-plugin/5.6.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@codspeed%2fvitest-plugin/5.5.0/5.6.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@codspeed%2fvitest-plugin/5.5.0/5.6.0?slim=true)
|
|
[@typescript-eslint/parser](https://typescript-eslint.io/packages/parser)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser))
| [`8.61.0` →
`8.61.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.61.0/8.61.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.61.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/8.61.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/8.61.0/8.61.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.61.0/8.61.1?slim=true)
|
|
[@typescript-eslint/scope-manager](https://typescript-eslint.io/packages/scope-manager)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/scope-manager))
| [`8.61.0` →
`8.61.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fscope-manager/8.61.0/8.61.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fscope-manager/8.61.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fscope-manager/8.61.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fscope-manager/8.61.0/8.61.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fscope-manager/8.61.0/8.61.1?slim=true)
|
| [@typescript-eslint/visitor-keys](https://typescript-eslint.io)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys))
| [`8.61.0` →
`8.61.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fvisitor-keys/8.61.0/8.61.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fvisitor-keys/8.61.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fvisitor-keys/8.61.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fvisitor-keys/8.61.0/8.61.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fvisitor-keys/8.61.0/8.61.1?slim=true)
|
| [@vitest/browser](https://vitest.dev/guide/browser/)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser))
| [`4.1.8` →
`4.1.9`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/4.1.8/4.1.9)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/4.1.9?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/4.1.9?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/4.1.8/4.1.9?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/4.1.8/4.1.9?slim=true)
|
|
[@vitest/browser-playwright](https://vitest.dev/config/browser/playwright)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser-playwright))
| [`4.1.8` →
`4.1.9`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser-playwright/4.1.8/4.1.9)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser-playwright/4.1.9?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser-playwright/4.1.9?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser-playwright/4.1.8/4.1.9?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser-playwright/4.1.8/4.1.9?slim=true)
|
| [eslint](https://eslint.org)
([source](https://redirect.github.com/eslint/eslint)) | [`10.4.1` →
`10.5.0`](https://renovatebot.com/diffs/npm/eslint/10.4.1/10.5.0) |
![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/10.5.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint/10.5.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint/10.4.1/10.5.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/10.4.1/10.5.0?slim=true)
|
| [playwright](https://playwright.dev)
([source](https://redirect.github.com/microsoft/playwright)) | [`1.60.0`
→ `1.61.0`](https://renovatebot.com/diffs/npm/playwright/1.60.0/1.61.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/playwright/1.61.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/playwright/1.61.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/playwright/1.60.0/1.61.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright/1.60.0/1.61.0?slim=true)
|
|
[serialize-javascript](https://redirect.github.com/yahoo/serialize-javascript)
| [`7.0.5` →
`7.0.6`](https://renovatebot.com/diffs/npm/serialize-javascript/7.0.5/7.0.6)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/serialize-javascript/7.0.6?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/serialize-javascript/7.0.6?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/serialize-javascript/7.0.5/7.0.6?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/serialize-javascript/7.0.5/7.0.6?slim=true)
|
| [vitest](https://vitest.dev)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest))
| [`4.1.8` →
`4.1.9`](https://renovatebot.com/diffs/npm/vitest/4.1.8/4.1.9) |
![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/4.1.9?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/4.1.9?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/4.1.8/4.1.9?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/4.1.8/4.1.9?slim=true)
|

---

### Release Notes

<details>
<summary>CodSpeedHQ/codspeed-node
(@&#8203;codspeed/vitest-plugin)</summary>

###
[`v5.6.0`](https://redirect.github.com/CodSpeedHQ/codspeed-node/releases/tag/v5.6.0)

[Compare
Source](https://redirect.github.com/CodSpeedHQ/codspeed-node/compare/v5.5.0...v5.6.0)

#### What's Changed

- feat: add MacOS support by
[@&#8203;not-matthias](https://redirect.github.com/not-matthias) in
[#&#8203;81](https://redirect.github.com/CodSpeedHQ/codspeed-node/pull/81)

**Full Changelog**:
<https://github.com/CodSpeedHQ/codspeed-node/compare/v5.5.0...v5.6.0>

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/parser)</summary>

###
[`v8.61.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8611-2026-06-15)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.61.0...v8.61.1)

This was a version bump only for parser to align it with other projects,
there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.1)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/scope-manager)</summary>

###
[`v8.61.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/scope-manager/CHANGELOG.md#8611-2026-06-15)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.61.0...v8.61.1)

This was a version bump only for scope-manager to align it with other
projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.1)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/visitor-keys)</summary>

###
[`v8.61.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/visitor-keys/CHANGELOG.md#8611-2026-06-15)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.61.0...v8.61.1)

This was a version bump only for visitor-keys to align it with other
projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.1)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

###
[`v4.1.9`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.9)

[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9)

##### 🐞 Bug Fixes

- Fix `importOriginal` with optimizer and query import \[backport to v4]
- by **Hiroshi Ogawa**, **David Harris**, **Codex**and **Vladimir** in
[#&#8203;10546](https://redirect.github.com/vitest-dev/vitest/issues/10546)
[<samp>(a5180)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a5180190c)
- **browser**:
- Wait for orchestrator readiness before resolving browser sessions
\[backport to v4] - by **Vladimir** and **Séamus O'Connor** in
[#&#8203;10555](https://redirect.github.com/vitest-dev/vitest/issues/10555)
[<samp>(7fb29)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7fb29651a)
- Wait for iframe tester readiness before preparing \[backport to v4] -
by **Vladimir** and **Séamus O'Connor** in
[#&#8203;10497](https://redirect.github.com/vitest-dev/vitest/issues/10497)
and
[#&#8203;10556](https://redirect.github.com/vitest-dev/vitest/issues/10556)
[<samp>(fbc62)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fbc626c40)
- **mocker**:
- Hoist vi.mock() for vite-plus/test imports \[backport to v4] - by
**Hiroshi Ogawa**, **LongYinan**, **Claude Opus 4.8** and **Vladimir**
in
[#&#8203;10548](https://redirect.github.com/vitest-dev/vitest/issues/10548)
[<samp>(2c955)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2c9559c02)
- **pool**:
- Prevent test run hang on worker crash \[backport to v4] - by **Ari
Perkkiö** and **Jattioui Ismail** in
[#&#8203;10543](https://redirect.github.com/vitest-dev/vitest/issues/10543)
and
[#&#8203;10564](https://redirect.github.com/vitest-dev/vitest/issues/10564)
[<samp>(934b0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/934b0f587)

##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9)

</details>

<details>
<summary>eslint/eslint (eslint)</summary>

###
[`v10.5.0`](https://redirect.github.com/eslint/eslint/releases/tag/v10.5.0)

[Compare
Source](https://redirect.github.com/eslint/eslint/compare/v10.4.1...v10.5.0)

#### Features

-
[`5ca8c52`](https://redirect.github.com/eslint/eslint/commit/5ca8c5278edea1fd84d3ba83d8ea3f52fb3831ad)
feat: correct stack tracking in max-nested-callbacks
([#&#8203;20973](https://redirect.github.com/eslint/eslint/issues/20973))
(Pixel998)
-
[`b565783`](https://redirect.github.com/eslint/eslint/commit/b5657837604fa5e8cf1278074782025cadd34b6c)
feat: report no-with violations at the with keyword
([#&#8203;20971](https://redirect.github.com/eslint/eslint/issues/20971))
(Pixel998)
-
[`2ce032f`](https://redirect.github.com/eslint/eslint/commit/2ce032fbc72a1a80c024c084a4f382fb6dece684)
feat: report max-lines-per-function violations at function head
([#&#8203;20966](https://redirect.github.com/eslint/eslint/issues/20966))
(Pixel998)
-
[`732cb3e`](https://redirect.github.com/eslint/eslint/commit/732cb3e09d5b8b809b5f461d118a5d9fdcd6427f)
feat: report max-nested-callbacks violations at function head
([#&#8203;20967](https://redirect.github.com/eslint/eslint/issues/20967))
(Pixel998)
-
[`f9c138a`](https://redirect.github.com/eslint/eslint/commit/f9c138a0ba7d8e37aed39aef4a3ff1cae8c669f7)
feat: report max-depth violations on keywords
([#&#8203;20943](https://redirect.github.com/eslint/eslint/issues/20943))
(Pixel998)
-
[`bdb496c`](https://redirect.github.com/eslint/eslint/commit/bdb496cc0d54b6d0a023aef9abd5f040ccff2101)
feat: correct max-depth handling for else-if chains
([#&#8203;20944](https://redirect.github.com/eslint/eslint/issues/20944))
(Pixel998)
-
[`c296873`](https://redirect.github.com/eslint/eslint/commit/c29687354a7f96093f57f7d73eecb866ad5e2953)
feat: update error loc in `max-statements` to function header
([#&#8203;20907](https://redirect.github.com/eslint/eslint/issues/20907))
(Taejin Kim)

#### Documentation

-
[`8ae1b5b`](https://redirect.github.com/eslint/eslint/commit/8ae1b5b856dc031cd6c701d89a4df7da4772cd56)
docs: Update README (GitHub Actions Bot)
-
[`ca7eb90`](https://redirect.github.com/eslint/eslint/commit/ca7eb90127dcad917188bb1342623f02a272e781)
docs: update Node.js prerequisites to include ICU support
([#&#8203;20962](https://redirect.github.com/eslint/eslint/issues/20962))
(Francesco Trotta)
-
[`f99b47a`](https://redirect.github.com/eslint/eslint/commit/f99b47a6799be25321552402a49303bb06a43fe4)
docs: Update README (GitHub Actions Bot)
-
[`acf03d4`](https://redirect.github.com/eslint/eslint/commit/acf03d4eed31d259c7dc62af5b9640629784f7cc)
docs: clarify precedence of parserOptions over languageOptions
([#&#8203;20926](https://redirect.github.com/eslint/eslint/issues/20926))
(sethamus)

#### Chores

-
[`b18bf58`](https://redirect.github.com/eslint/eslint/commit/b18bf58c5ac748415ffffdff2d96980fbd6a57e8)
chore: update ecosystem plugins
([#&#8203;20959](https://redirect.github.com/eslint/eslint/issues/20959))
(ESLint Bot)
-
[`c2d1444`](https://redirect.github.com/eslint/eslint/commit/c2d1444df77cb42e5a0b89ab70496879d180a54d)
refactor: replace areAllSegmentsUnreachable with !isAnySegmentReachable
([#&#8203;20951](https://redirect.github.com/eslint/eslint/issues/20951))
(Taejin Kim)
-
[`243b8c5`](https://redirect.github.com/eslint/eslint/commit/243b8c56014bbbe63771185b0731d8dd4d1316e9)
chore: enhance config-rule to support oneOf, anyOf, and nested schemas
([#&#8203;20788](https://redirect.github.com/eslint/eslint/issues/20788))
(kuldeep kumar)
-
[`217b2a9`](https://redirect.github.com/eslint/eslint/commit/217b2a91f46137c5ffd693965e71306c4c15ea6b)
test: add unit tests for ParserService
([#&#8203;20949](https://redirect.github.com/eslint/eslint/issues/20949))
(Taejin Kim)
-
[`72003e7`](https://redirect.github.com/eslint/eslint/commit/72003e781d76bd4ee0d98a6601730d0b829070f9)
test: add location information to error messages in `max-statements`
([#&#8203;20945](https://redirect.github.com/eslint/eslint/issues/20945))
(lumir)
-
[`7797c26`](https://redirect.github.com/eslint/eslint/commit/7797c266977b0bc4971aa79721813d480de72cd1)
refactor: deduplicate isAnySegmentReachable across rules
([#&#8203;20890](https://redirect.github.com/eslint/eslint/issues/20890))
(Taejin Kim)
-
[`67c46fa`](https://redirect.github.com/eslint/eslint/commit/67c46fa6e4f34e88cc6bc82f8a0dcc917c65d257)
chore: update ecosystem plugins
([#&#8203;20938](https://redirect.github.com/eslint/eslint/issues/20938))
(ESLint Bot)
-
[`95d8c7a`](https://redirect.github.com/eslint/eslint/commit/95d8c7a99f991abd8ab618d0ee2cbd4f58effc29)
chore: update dependency
[@&#8203;eslint/json](https://redirect.github.com/eslint/json) to v2
([#&#8203;20934](https://redirect.github.com/eslint/eslint/issues/20934))
(renovate\[bot])
-
[`cf9e496`](https://redirect.github.com/eslint/eslint/commit/cf9e496205142cd4971b9f98aed85866d1010b9c)
chore: update
[@&#8203;arethetypeswrong/cli](https://redirect.github.com/arethetypeswrong/cli)
to 0.18.3
([#&#8203;20933](https://redirect.github.com/eslint/eslint/issues/20933))
(Pixel998)
-
[`fb6d396`](https://redirect.github.com/eslint/eslint/commit/fb6d3960cacc51fc12383fa5ded2382adbf90c1c)
test: run type tests with TypeScript 7
([#&#8203;20868](https://redirect.github.com/eslint/eslint/issues/20868))
(sethamus)

</details>

<details>
<summary>microsoft/playwright (playwright)</summary>

###
[`v1.61.0`](https://redirect.github.com/microsoft/playwright/releases/tag/v1.61.0)

[Compare
Source](https://redirect.github.com/microsoft/playwright/compare/v1.60.0...v1.61.0)

##### 🔑 WebAuthn passkeys

New [Credentials](https://playwright.dev/docs/api/class-credentials)
virtual authenticator, available via
[browserContext.credentials](https://playwright.dev/docs/api/class-browsercontext#browser-context-credentials),
lets tests register passkeys and answer `navigator.credentials.create()`
/ `navigator.credentials.get()` ceremonies in the page — no real
hardware key required, works in all browsers:

```js
const context = await browser.newContext();

// Seed a passkey your backend provisioned for a test user.
await context.credentials.create('example.com', {
  id: credentialId,
  userHandle,
  privateKey,
  publicKey,
});
await context.credentials.install();

const page = await context.newPage();
await page.goto('https://example.com/login');
// The page's navigator.credentials.get() is answered with the seeded passkey.
```

You can also let the app register a passkey once in a setup test, read
it back with
[credentials.get()](https://playwright.dev/docs/api/class-credentials#credentials-get),
and seed it into later tests — see
[Credentials](https://playwright.dev/docs/api/class-credentials) for
details.

##### 🗃️ Web Storage

New [WebStorage](https://playwright.dev/docs/api/class-webstorage) API,
available via
[page.localStorage](https://playwright.dev/docs/api/class-page#page-local-storage)
and
[page.sessionStorage](https://playwright.dev/docs/api/class-page#page-session-storage),
reads and writes the page's storage for the current origin:

```js
await page.localStorage.setItem('token', 'abc');
const token = await page.localStorage.getItem('token');
const items = await page.sessionStorage.items();
```

##### New APIs

##### Network

-
[apiResponse.securityDetails()](https://playwright.dev/docs/api/class-apiresponse#api-response-security-details)
and
[apiResponse.serverAddr()](https://playwright.dev/docs/api/class-apiresponse#api-response-server-addr)
mirror the browser-side
[response.securityDetails()](https://playwright.dev/docs/api/class-response#response-security-details)
and
[response.serverAddr()](https://playwright.dev/docs/api/class-response#response-server-addr).

##### Browser and Screencast

- New option `artifactsDir` in
[browserType.connectOverCDP()](https://playwright.dev/docs/api/class-browsertype#browser-type-connect-over-cdp)
controls where artifacts such as traces and downloads are stored when
attached to an existing browser.
- New option `cursor` in
[screencast.showActions()](https://playwright.dev/docs/api/class-screencast#screencast-show-actions)
controls the cursor decoration rendered for pointer actions.
- The `onFrame` callback in
[screencast.start()](https://playwright.dev/docs/api/class-screencast#screencast-start)
now receives a `timestamp` of when the frame was presented by the
browser.

##### Test runner

- The
[testOptions.video](https://playwright.dev/docs/api/class-testoptions#test-options-video)
option now supports the same set of modes as `trace`: new
`'on-all-retries'`, `'retain-on-first-failure'` and
`'retain-on-failure-and-retries'` values. See the [video modes
table](https://playwright.dev/docs/test-use-options#video-modes) for
which runs are recorded and kept in each mode.
- Supported `expect.soft.poll(...)`.
- New
[fullConfig.argv](https://playwright.dev/docs/api/class-fullconfig#full-config-argv)
— a snapshot of `process.argv` from the runner process, handy for
reading custom arguments passed after the `--` separator.
- New
[fullConfig.failOnFlakyTests](https://playwright.dev/docs/api/class-fullconfig#full-config-fail-on-flaky-tests)
mirrors the config option, so reporters can explain why a flaky run
failed.
-
[testInfo.errors](https://playwright.dev/docs/api/class-testinfo#test-info-errors)
now lists each sub-error of an `AggregateError` as a separate entry.
- New `-G` command line shorthand for `--grep-invert`.

##### 🛠️ Other improvements

- Playwright now supports Ubuntu 26.04.
- HAR and trace recordings now include WebSocket requests.

##### Browser Versions

- Chromium 149.0.7827.55
- Mozilla Firefox 151.0
- WebKit 26.5

This version was also tested against the following stable channels:

- Google Chrome 149
- Microsoft Edge 149

</details>

<details>
<summary>yahoo/serialize-javascript (serialize-javascript)</summary>

###
[`v7.0.6`](https://redirect.github.com/yahoo/serialize-javascript/releases/tag/v7.0.6)

[Compare
Source](https://redirect.github.com/yahoo/serialize-javascript/compare/v7.0.5...v7.0.6)

##### What's Changed

- build(deps-dev): bump lodash from 4.17.23 to 4.18.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;215](https://redirect.github.com/yahoo/serialize-javascript/pull/215)
- fix: reject spoofed URL objects with non-string toString() result by
[@&#8203;redonkulus](https://redirect.github.com/redonkulus) in
[#&#8203;217](https://redirect.github.com/yahoo/serialize-javascript/pull/217)
- release: v7.0.6 by
[@&#8203;okuryu](https://redirect.github.com/okuryu) in
[#&#8203;221](https://redirect.github.com/yahoo/serialize-javascript/pull/221)

**Full Changelog**:
<https://github.com/yahoo/serialize-javascript/compare/v7.0.5...v7.0.6>

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - "before 10am on monday"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, 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/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMzEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIzNS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-06-23 12:36:01 +01:00
oxc-guard[bot] 6d56d57535 release(crates): oxc v0.137.0 (#23591)
### 💥 BREAKING CHANGES

- 7a76cd3 estree: [**BREAKING**] Make whether to include TS fields a
runtime option (#23574) (overlookmotel)
- e7b6b68 estree: [**BREAKING**] `ESTree` config use methods not consts
(#23573) (overlookmotel)

### 🚀 Features

- 556cc6d data_structures: Add `CodeBuffer::as_str` method (#23571)
(overlookmotel)
- 38c4b06 parser: Add friendly error for adjacent JSX elements (#23378)
(sapphi-red)
- 53509a8 minifier: Treeshake pure typed arrays and Set/Map array
literals (#23469) (Dunqing)
- 09762d9 minifier: Inline const value for read-only vars (#22593)
(Dunqing)

### 🐛 Bug Fixes

- 20375f9 react_compiler: Keep imports referenced only by a computed key
(#23586) (Boshen)
- 31bfd9b minifier: Keep Object introspection calls on a possible Proxy
(#23483) (Dunqing)
- 837a395 parser: Treat a line comment after ':' as leading, not
trailing (#23515) (Dunqing)
- e409fe0 minifier: Keep `new Map`/`WeakSet`/`WeakMap` with a string
argument (#23470) (Dunqing)
- ae02b4e ci/parser: Use `minimal` for vitest reporter (#23457)
(camc314)

### ⚡ Performance

- cf24329 mangler: Compile slot sort once instead of per CAPACITY
(#23577) (Boshen)
- 4058a6a parser: Reduce code bloat from verify_modifiers
monomorphization (#23576) (Boshen)
- 053b0c1 estree: Remove pointless `mem::take` (#23572) (overlookmotel)
- dfb52b6 transformer: Pre-size statement vecs in TS enum & namespace
lowering (#23516) (Yunfei He)
- 970e09a minifier: Compute template-literal inline checks in a single
pass (#23467) (Yunfei He)
- 3170c0e semantic,mangler,minifier: Fix `Semantic::stats` node count
and reuse stats in mangler builds (#23352) (Boshen)
- d1fa6e0 minifier: Evaluate ternary branches once in
minimize_conditional_expression (#23479) (Yunfei He)
- 3fa8051 transformer: Pre-size JSX props vec to attribute count
(#23466) (Yunfei He)
- 488b382 react_compiler: Borrow binding names in prefilter instead of
allocating (#23471) (Yunfei He)
- bcb3894 minifier: Incremental scoping refresh, delete
LiveUsageCollector (#23197) (Dunqing)

### 📚 Documentation

- f68641e data_structures: Improve docs on safety contract (#23575)
(overlookmotel)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2026-06-18 17:31:57 +08:00
overlookmotel 7a76cd3dc3 feat(estree)!: make whether to include TS fields a runtime option (#23574)
Previously, whether to serialize AST to ESTree JSON with/without TS fields was a compile-time option - via 2 different configs `CompactTSSerializer` and `CompactJSSerializer` (and their pretty-printing and with-fixes counterparts).

Turn this into a runtime option instead -

This make serialization a little slower (more branches in either mode, and dead code in JS-only mode) but reduces the size of `oxc-parser` binary as only one `ESTreeSerializer` is generated, instead of 2 (JS-only, and with-TS).
2026-06-17 23:22:37 +00:00
Dunqing 53509a85df feat(minifier): treeshake pure typed arrays and Set/Map array literals (#23469)
## Summary

Mark side-effect-free `new` constructions pure so they are dropped when unused (and annotated for downstream tree-shaking):

- **TypedArrays** with a non-negative numeric-literal length (`new Int8Array(8)`, `new Uint8Array(1024)`). The buffer allocation runs no user code; a valid length is pure and a too-large length only throws a maximum-length `RangeError`, which the minifier is allowed to drop (see `docs/ASSUMPTIONS.md`). `new Int8Array(-1)` (negative-length `RangeError`), `new Int8Array(0n)` (BigInt `TypeError`), object, and non-literal arguments are kept.
- **`new Set([...])` / `new Map([[..], ..])`** with array-literal arguments; element side effects are preserved when the construction is dropped. `WeakSet`/`WeakMap` are excluded (their keys must be objects, so `new WeakSet([1])` throws), and `Map` entries must be array literals (`new Map([1])` throws).

This matches esbuild's per-constructor handling — the only other minifier that keeps every throwing form; Rollup, Terser (`unsafe`), and SWC drop some of these incorrectly. Cross-verified against the ES spec, esbuild, Terser, Rollup, and SWC.

Minified-size impact: react.development.js −0.04 kB; size-neutral elsewhere (real code uses dynamic buffer lengths, not numeric literals).
2026-06-16 07:46:28 +00:00
camc314 ae02b4e7a0 fix(ci/parser): use minimal for vitest reporter (#23457)
The large output from the dot reporter (caused by `RUN_LAZY_TESTS`, `RUN_RAW_TESTS`, `RUN_RAW_RANGE_TESTS` and `RUN_RAW_TOKENS_TESTS`) sometimes causes CI to fail.

This PR switches to the [`minimal` reporter ](https://vitest.dev/guide/reporters.html#minimal-reporter) which should only log on failed test cases.
2026-06-15 14:25:29 +00:00
oxc-guard[bot] 827248a7fb release(crates): oxc v0.136.0 (#23443)
### 💥 BREAKING CHANGES

- 7a24911 codegen: [**BREAKING**] Borrow sourcemaps from codegen
(#23422) (Boshen)
- bb0ed44 transformer: [**BREAKING**] Disable styled-components
transpileTemplateLiterals by default (#23171) (Boshen)

### 🚀 Features

- 1490a0a linter/react: Implement react-compiler rule (#23202) (Boshen)
- 6c0bdf0 transformer/react-refresh: Support `module.property.useHook()`
(#23190) (Dunqing)
- 47991bd semantic: Report TS1228 for invalid type predicates (#23174)
(camc314)
- 1d3af58 parser: Add TS2398 parameter property diagnostic (#23216)
(camc314)
- 44313da semantic: Add `scope_is_descendant_of` api (#22313) (camc314)
- e5050c0 parser: Improve diagnostic for rest initializer (#23205)
(camc314)
- ec266bb transformer: Run React Compiler as a feature-gated transform
pass (#23201) (Boshen)
- e7374fe parser: Report error for `const` modifier on interface type
parameter (#23173) (camc314)
- a7c1c9b parser: Report ambient definite variable assertions (#23165)
(camc314)
- d169fcd parser: Report invalid class definite assertions (#23164)
(camc314)
- 00244d8 parser: Report definite property initializer errors (#23160)
(camc314)

### 🐛 Bug Fixes

- 52d0c31 transformer: Replace ambient dot defines (#23231) (camc314)
- 2c28748 transformer/class: Parent generated constructors to class
scope (#23222) (camc314)
- 8edd234 parser: Report accessor definite assertion on token (#23203)
(camc314)
- de38a3f react_compiler: Keep imports referenced only by a local
re-export (#23176) (Boshen)
- f5721c2 codegen: Preserve parentheses around `intrinsic` type
reference (#23156) (Boshen)
- e89f81d parser: Don't emit TS1477 for parenthesized instantiation
expression (#23147) (Boshen)
- 8a04149 parser: Reject module-referencing imports/exports in a
namespace body (#22829) (Boshen)

### ⚡ Performance

- 2783295 parser: Table-driven operator precedence lookup (#23346)
(Boshen)
- 231d5de parser: Single-match member expression dispatch (#23347)
(Boshen)
- e89729b codegen: Accept one-shot wrap closures (#23265) (camc314)
- a6c11fa parser: Force-inline read_non_decimal to fold per-digit number
dispatch (#23157) (Boshen)
- d74964c parser: Store class definite assertion offset (#23170)
(camc314)
- f0fda4d parser: Shrink-wrap cold diagnostic tails out of hot frames
(#23159) (Boshen)
- a082180 parser: Store definite assertion offset (#23167) (camc314)
- 534f9c6 oxc: Conditionally rebuild semantic in compiler pipeline
(#23153) (Boshen)
- b435c6a parser: Skip checkpoint for `infer T extends U` constraint in
disallow context (#23128) (Boshen)
- 7464dce parser: Peek instead of checkpoint/rewind for `export default`
modifier (#23124) (Boshen)
- 80a9a32 parser: Fast-path single-keyword TS declarations (#23083)
(Boshen)
- da1a6c6 diagnostics: Migrate to allocation-optimized oxc-miette
(#23094) (Boshen)
- b7b08ce parser: Peek once for the static modifier disambiguation
(#23079) (Boshen)
- e7e07a3 parser: Fold unary dispatch into a single match (#23076)
(Boshen)

### 📚 Documentation

- d241add semantic: Add `AGENTS.md` test guidance for agents (#23441)
(camc314)
- 026f1ae parser: Add `AGENTS.md` test guidance for agents (#23440)
(camc314)
- 09755ac transformer: Add `AGENTS.md` test guidance for agents (#23439)
(camc314)
- e6bdfd4 lexer: Correct reference link for `byte_handlers!` (#23313)
(Dunqing)
- 65b6d7a allocator: Fix memory leaks in `Arena` examples (#23257)
(overlookmotel)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2026-06-15 20:05:34 +08:00
renovate[bot] e745892d4c chore(deps): update napi (#23394)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Adoption](https://docs.renovatebot.com/merge-confidence/) |
[Passing](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) | Type |
Update |
|---|---|---|---|---|---|---|---|
| [@napi-rs/cli](https://napi.rs/)
([source](https://redirect.github.com/napi-rs/napi-rs)) | [`3.7.1` →
`3.7.2`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.7.1/3.7.2) |
![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.7.2?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.7.2?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.7.1/3.7.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.7.1/3.7.2?slim=true)
| pnpm.catalog.default | patch |
| [napi](https://crates.io/crates/napi) | `3.9.1` → `3.9.2` |
![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.9.2?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.9.2?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.9.1/3.9.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.9.1/3.9.2?slim=true)
| workspace.dependencies | patch |

---

### Release Notes

<details>
<summary>napi-rs/napi-rs (@&#8203;napi-rs/cli)</summary>

###
[`v3.7.2`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.7.1...@napi-rs/cli@3.7.2)

[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.7.1...@napi-rs/cli@3.7.2)

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **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/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMTkuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIxOS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-06-14 14:10:12 +01:00
Boshen 777f02ae10 refactor(diagnostics)!: return a Diagnostics type instead of Vec<OxcDiagnostic> (#23217)
## Summary

Introduces `oxc_diagnostics::Diagnostics` — a `Vec<OxcDiagnostic>` newtype that knows the difference between errors and warnings — and makes it the standard diagnostics return value across oxc.

- **New type**: `Diagnostics` with `has_errors()`, `has_warnings()`, `errors()`, `warnings()`, plus `Vec`-like ergonomics (Deref, `IntoIterator`, `Extend`, `From`/`Into<Vec>`) so most call sites are unchanged.
- **Return types**: `ParserReturn`, `SemanticBuilderReturn`, `IsolatedDeclarationsReturn`, the React Compiler `TransformResult`/`LintResult`, and `TransformerReturn` now expose `diagnostics: Diagnostics` instead of `errors: Vec<OxcDiagnostic>` (the React Compiler's separate `errors`/`warnings` are merged into one severity-tagged list).
- **Behaviour**: a React Compiler **error** now stops the transform (no output), while **warnings** flow through and the transform continues. `compile()` aborts codegen only when `diagnostics.has_errors()` — warnings alone no longer abort (previously any diagnostic did).

## Breaking change

Consumers reading `*.errors` on these return values must read `*.diagnostics`. React Compiler consumers that read `.errors`/`.warnings` separately should use `diagnostics.has_errors()` / `diagnostics.errors()` / `diagnostics.warnings()`.

Parser/semantic/isolated-declarations fatality is otherwise unchanged. Builds on the React Compiler transform feature (#23201).

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-10 14:46:52 +00:00
Boshen da1a6c6e2a perf(diagnostics): migrate to allocation-optimized oxc-miette (#23094)
## Summary

Adopts the allocation-optimized oxc-miette diagnostic APIs (oxc-miette v3):

- `OxcDiagnostic` stores labels in `miette::Labels` (1–2 inline, no `Vec`); **drops the `smallvec` dependency**.
- `Diagnostic::labels`/`related` return owned inline containers; `code`/`help`/`note`/`url` return `Cow<str>`; `SourceCode::read_span` returns the concrete `MietteSpanContents` — all consumer call sites updated (linter `fixer`/`lib`/`runtime`/`tsgolint`, `oxc_napi`, napi/parser, oxlint LSP, coverage).
- `usize → u32` span conversions for the u32 `SourceSpan`.

## Allocation impact (parser benchmark)

`just allocs` — **~33% fewer sys allocations, no change in reallocations**:

| File | Sys allocs (before → after) | Sys reallocs |
|------|---|---|
| checker.ts | 5303 → 3543 | 10 (unchanged) |
| antd.js | 5392 → 3720 | 221 (unchanged) |
| App.tsx | 632 → 444 | 13 (unchanged) |
| pdf.mjs | 518 → 356 | 67 (unchanged) |
| binder.ts | 281 → 169 | 0 (unchanged) |

(The inline `Labels` removes the per-diagnostic `Vec`; an earlier `Box<str>` realloc regression was fixed in oxc-miette before this snapshot was taken.)
2026-06-08 16:00:57 +00:00
oxc-guard[bot] e9b8fd595c release(crates): oxc v0.135.0 (#23117)
### 💥 BREAKING CHANGES

- ee4dc73 ast: [**BREAKING**] Add `#[non_exhaustive]` to AST nodes
(#23046) (overlookmotel)
- 4c35362 ast: [**BREAKING**] Add
`AstBuilder::template_element_escape_raw` and
`template_element_escape_raw_with_lone_surrogates` methods (#23047)
(overlookmotel)

### 🚀 Features

- b846ab2 react_compiler: Integrate the Rust port of the React Compiler
(#22942) (Boshen)
- 5b8dd68 parser: Report TS1255 for invalid class definite assertions
(#22917) (camc314)
- 85efabf semantic: Make building the class table optional, off by
default (#22862) (Boshen)

### 🐛 Bug Fixes

- 556acdc codegen: Parenthesize TS-cast assignment targets (#23112)
(Boshen)
- 37169ff codegen: Don't emit space between postfix `--` and `>` when
minifying (#23036) (Boshen)
- a4b1bf7 codegen: Drop redundant whitespace in minified TypeScript
output (#23038) (Boshen)
- cf53285 parser: Report reserved type-declaration names in the parser
(#23035) (Boshen)
- 4e44969 ast: Fix UB in `escape_template_element_raw` (#23052)
(overlookmotel)
- c543154 parser: Report comma operator in JSX expression in the parser
(#23030) (Boshen)
- 325c94f codegen: Tighten conditional-type and constructor-type
whitespace when minifying (#23033) (Boshen)
- 95dd3a2 parser: Report `import type` alias to a non-external reference
in the parser (#23032) (Boshen)
- 90180b8 codegen: Drop space after `:` in function return type when
minifying (#23028) (Boshen)
- 6da876e parser: Report `abstract` private class field in the parser
(#23029) (Boshen)
- 28467ce codegen: Don't emit space before a postfix update operand when
minifying (#23027) (Boshen)
- cb29926 codegen: Drop redundant space after `export default` when
minifying (#23024) (Boshen)
- 62965ae codegen: Drop redundant space after `else` when minifying
(#23025) (Boshen)
- 989230a parser: Report compound assignment to non-simple target in the
parser (#23022) (Boshen)
- 06f367c parser: Report `super.#field` private access in the parser
(#23014) (Boshen)
- 184edef codegen: Print space before `const`/`declare` enum modifier
(#23013) (Boshen)
- 4d722e0 parser: Report duplicate switch `default` clause in the parser
(#23012) (Boshen)
- 597ed85 codegen: Parenthesize `let`/`async` for-of head target
(#23008) (Boshen)
- 8b631bf codegen: Remove stray space before mapped type value colon
(#23010) (Boshen)
- c08407e codegen: Don't over-parenthesize `in` inside an arrow in a
for-init (#23009) (Boshen)
- 600cd6f codegen: Parenthesize lower-precedence
`TSInstantiationExpression` operand (#23007) (Boshen)
- 187e1a5 codegen: Don't leak space after comment-only JSX expression
container (#23006) (Boshen)
- 294c473 codegen: Don't over-parenthesize `TSTypeAssertion` operand
(#23004) (Boshen)
- 786d96f codegen: Give `TSTypeAssertion` unary precedence (#23002)
(Boshen)
- 1295882 parser: Report `new.target` and `import.meta` syntax errors in
the parser (#23003) (Boshen)
- d727b6b codegen: Parenthesize `await` expression as base of `**`
(#23001) (Boshen)
- 67dfa08 codegen: Keep parentheses around `new` callees containing a
call (#22997) (Boshen)
- 17e7cf3 parser: Disallow unerasable `as`/`satisfies` assertions
(#22986) (Boshen)
- beb46d3 parser: Commit to module goal on decorated exports (#22941)
(Boshen)
- 49e63f7 isolated-declarations: Require annotations for satisfies
initializers (#22898) (camc314)
- 8c93601 isolated-declarations: Allow unknown enum initializer in
non-const enum (#22900) (camc314)

### ⚡ Performance

- 7d89909 parser: Peek instead of lookahead for yield disambiguation
(#23071) (Boshen)
- bf872f0 parser: Skip arrow lookahead for a parenthesized literal
(#23070) (Boshen)
- d19fc54 parser: Guard type-argument speculation behind an angle-token
check (#23069) (Boshen)
- 8eb5507 parser: Skip redundant member-rest re-scan on call entry
(#23068) (Boshen)
- 883dfc1 parser: Skip parse_call_expression_rest when no call follows
(#23063) (Boshen)
- b171153 parser: Peek before the await-using lookahead (#23059)
(Boshen)
- 56f21bd parser: Use peek_token for the TS `asserts` type predicate
(#23058) (Boshen)
- 68805ac parser: Use peek_token instead of checkpoint/rewind for
single-token decisions (#23056) (Boshen)
- 1f9d8eb ast: `AstBuilder::template_element_escape_raw` avoid
allocation if no escape required (#23053) (overlookmotel)
- 502b04d semantic: Move cold function redeclaration handling into
`#[cold]` function (#22973) (overlookmotel)

### 📚 Documentation

- 275d318 napi/minifier: Point `target` to oxc docs (#23102) (camc314)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2026-06-08 22:17:46 +08:00
renovate[bot] cdc0ac4aef chore(deps): update npm packages (#23087)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Adoption](https://docs.renovatebot.com/merge-confidence/) |
[Passing](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
|
[@arethetypeswrong/core](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io)
([source](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io/tree/HEAD/packages/core))
| [`0.18.2` →
`0.18.3`](https://renovatebot.com/diffs/npm/@arethetypeswrong%2fcore/0.18.2/0.18.3)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@arethetypeswrong%2fcore/0.18.3?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@arethetypeswrong%2fcore/0.18.3?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@arethetypeswrong%2fcore/0.18.2/0.18.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@arethetypeswrong%2fcore/0.18.2/0.18.3?slim=true)
|
| [@codspeed/vitest-plugin](https://codspeed.io)
([source](https://redirect.github.com/CodSpeedHQ/codspeed-node)) |
[`5.4.0` →
`5.5.0`](https://renovatebot.com/diffs/npm/@codspeed%2fvitest-plugin/5.4.0/5.5.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@codspeed%2fvitest-plugin/5.5.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@codspeed%2fvitest-plugin/5.5.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@codspeed%2fvitest-plugin/5.4.0/5.5.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@codspeed%2fvitest-plugin/5.4.0/5.5.0?slim=true)
|
|
[@typescript-eslint/parser](https://typescript-eslint.io/packages/parser)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser))
| [`8.60.0` →
`8.60.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.60.0/8.60.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.60.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/8.60.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/8.60.0/8.60.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.60.0/8.60.1?slim=true)
|
|
[@typescript-eslint/scope-manager](https://typescript-eslint.io/packages/scope-manager)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/scope-manager))
| [`8.60.0` →
`8.60.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fscope-manager/8.60.0/8.60.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fscope-manager/8.60.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fscope-manager/8.60.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fscope-manager/8.60.0/8.60.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fscope-manager/8.60.0/8.60.1?slim=true)
|
| [@typescript-eslint/visitor-keys](https://typescript-eslint.io)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys))
| [`8.60.0` →
`8.60.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fvisitor-keys/8.60.0/8.60.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fvisitor-keys/8.60.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fvisitor-keys/8.60.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fvisitor-keys/8.60.0/8.60.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fvisitor-keys/8.60.0/8.60.1?slim=true)
|
| [@vitest/browser](https://vitest.dev/guide/browser/)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser))
| [`4.1.7` →
`4.1.8`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/4.1.7/4.1.8)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/4.1.8?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/4.1.8?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/4.1.7/4.1.8?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/4.1.7/4.1.8?slim=true)
|
|
[@vitest/browser-playwright](https://vitest.dev/config/browser/playwright)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser-playwright))
| [`4.1.7` →
`4.1.8`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser-playwright/4.1.7/4.1.8)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser-playwright/4.1.8?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser-playwright/4.1.8?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser-playwright/4.1.7/4.1.8?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser-playwright/4.1.7/4.1.8?slim=true)
|
| [degit](https://redirect.github.com/Rich-Harris/degit) | [`3.3.2` →
`3.4.1`](https://renovatebot.com/diffs/npm/degit/3.3.2/3.4.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/degit/3.4.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/degit/3.4.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/degit/3.3.2/3.4.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/degit/3.3.2/3.4.1?slim=true)
|
| [eslint](https://eslint.org)
([source](https://redirect.github.com/eslint/eslint)) | [`10.4.0` →
`10.4.1`](https://renovatebot.com/diffs/npm/eslint/10.4.0/10.4.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/10.4.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint/10.4.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint/10.4.0/10.4.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/10.4.0/10.4.1?slim=true)
|
|
[prettier-plugin-svelte](https://redirect.github.com/sveltejs/prettier-plugin-svelte)
| [`4.0.1` →
`4.1.0`](https://renovatebot.com/diffs/npm/prettier-plugin-svelte/4.0.1/4.1.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/prettier-plugin-svelte/4.1.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier-plugin-svelte/4.1.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier-plugin-svelte/4.0.1/4.1.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier-plugin-svelte/4.0.1/4.1.0?slim=true)
|
| [svelte](https://svelte.dev)
([source](https://redirect.github.com/sveltejs/svelte/tree/HEAD/packages/svelte))
| [`5.55.10` →
`5.56.1`](https://renovatebot.com/diffs/npm/svelte/5.55.10/5.56.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/svelte/5.56.1?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/svelte/5.56.1?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/svelte/5.55.10/5.56.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/svelte/5.55.10/5.56.1?slim=true)
|
| [tsx](https://tsx.hirok.io)
([source](https://redirect.github.com/privatenumber/tsx)) | [`4.22.3` →
`4.22.4`](https://renovatebot.com/diffs/npm/tsx/4.22.3/4.22.4) |
![age](https://developer.mend.io/api/mc/badges/age/npm/tsx/4.22.4?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tsx/4.22.4?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tsx/4.22.3/4.22.4?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tsx/4.22.3/4.22.4?slim=true)
|
| [type-fest](https://redirect.github.com/sindresorhus/type-fest) |
[`5.6.0` →
`5.7.0`](https://renovatebot.com/diffs/npm/type-fest/5.6.0/5.7.0) |
![age](https://developer.mend.io/api/mc/badges/age/npm/type-fest/5.7.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/type-fest/5.7.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/type-fest/5.6.0/5.7.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/type-fest/5.6.0/5.7.0?slim=true)
|
| [vitest](https://vitest.dev)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest))
| [`4.1.7` →
`4.1.8`](https://renovatebot.com/diffs/npm/vitest/4.1.7/4.1.8) |
![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/4.1.8?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/4.1.8?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/4.1.7/4.1.8?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/4.1.7/4.1.8?slim=true)
|
|
[vscode-languageserver-protocol](https://redirect.github.com/Microsoft/vscode-languageserver-node)
([source](https://redirect.github.com/Microsoft/vscode-languageserver-node/tree/HEAD/protocol))
| [`3.17.5` →
`3.18.0`](https://renovatebot.com/diffs/npm/vscode-languageserver-protocol/3.17.5/3.18.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/vscode-languageserver-protocol/3.18.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vscode-languageserver-protocol/3.18.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vscode-languageserver-protocol/3.17.5/3.18.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vscode-languageserver-protocol/3.17.5/3.18.0?slim=true)
|

---

### Release Notes

<details>
<summary>arethetypeswrong/arethetypeswrong.github.io
(@&#8203;arethetypeswrong/core)</summary>

###
[`v0.18.3`](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io/blob/HEAD/packages/core/CHANGELOG.md#0183)

##### Patch Changes

-
[`14e61d5`](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io/commit/14e61d5):
Update [@&#8203;types/node](https://redirect.github.com/types/node), use
[@&#8203;typescript/native-preview](https://redirect.github.com/typescript/native-preview)
for local build/check
-
[`25031aa`](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io/commit/25031aa):
- Fix "Cannot read properties of undefined (reading 'filename')" caused
by fflate 0.8.3
([#&#8203;258](https://redirect.github.com/arethetypeswrong/arethetypeswrong.github.io/issues/258))
  - Bump fflate to ^0.8.3

</details>

<details>
<summary>CodSpeedHQ/codspeed-node
(@&#8203;codspeed/vitest-plugin)</summary>

###
[`v5.5.0`](https://redirect.github.com/CodSpeedHQ/codspeed-node/releases/tag/v5.5.0)

[Compare
Source](https://redirect.github.com/CodSpeedHQ/codspeed-node/compare/v5.4.0...v5.5.0)

### Highlights

We are introducing `@codspeed/playwright`, for walltime benchmarking and
profiling of end to end browser applications through playwright.

Here's an example usage, but head to the
[docs](https://codspeed.io/docs/benchmarks/nodejs/playwright) for more
information

```typescript
import { bench, type Page } from "@&#8203;codspeed/playwright-plugin";
import electronExecutable from "electron";
import path from "node:path";
import { fileURLToPath } from "node:url";

const __dirname = path.dirname(fileURLToPath(import.meta.url));
const appRoot = path.resolve(__dirname, "..");

async function waitUntilSettled(page: Page): Promise<void> {
  await page.waitForFunction(() => {
    const main = document.getElementById("main");
    return !!main && !main.classList.contains("loading");
  });
}

await bench(
  "inbox-search-archive-threads",
  async ({ page }) => {
    await page.fill("#search", "update");
    await waitUntilSettled(page);

    await page.click("#select-visible-btn");
    await page.click("#archive-btn");
    await waitUntilSettled(page);

    await page.click('#sidebar nav button[data-view="threads"]');
    await waitUntilSettled(page);
  },
  {
    target: {
      kind: "electron",
      appPath: path.join(appRoot, "out/main/index.js"),
      cwd: appRoot,
    },
    beforeRound: async ({ page }) => {
      page.setDefaultTimeout(180_000);
      await page.waitForSelector("#main");
      await waitUntilSettled(page);
    },
  },
);
```

Note: this plugin is only compatible with the walltime instrument.

#### What's Changed

- Add playwright profiling package by
[@&#8203;GuillaumeLagrange](https://redirect.github.com/GuillaumeLagrange)
in
[#&#8203;80](https://redirect.github.com/CodSpeedHQ/codspeed-node/pull/80)

**Full Changelog**:
<https://github.com/CodSpeedHQ/codspeed-node/compare/v5.4.0...v5.5.0>

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/parser)</summary>

###
[`v8.60.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8601-2026-06-01)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.60.0...v8.60.1)

This was a version bump only for parser to align it with other projects,
there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.1)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/scope-manager)</summary>

###
[`v8.60.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/scope-manager/CHANGELOG.md#8601-2026-06-01)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.60.0...v8.60.1)

This was a version bump only for scope-manager to align it with other
projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.1)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/visitor-keys)</summary>

###
[`v8.60.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/visitor-keys/CHANGELOG.md#8601-2026-06-01)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.60.0...v8.60.1)

This was a version bump only for visitor-keys to align it with other
projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.60.1)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

###
[`v4.1.8`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.8)

[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8)

#####    🐞 Bug Fixes

- **browser**:
- Disable client `cdp` API when `allowWrite/allowExec: false` \[backport
to v4]  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa)
and **Codex** in
[#&#8203;10450](https://redirect.github.com/vitest-dev/vitest/issues/10450)
[<samp>(e4067)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e4067b3b1)
- Remove orphaned Playwright route when same module is mocked via
multiple ids \[backport to v4]  -  by
[@&#8203;toxik](https://redirect.github.com/toxik) and
[@&#8203;Zelys-DFKH](https://redirect.github.com/Zelys-DFKH) in
[#&#8203;10474](https://redirect.github.com/vitest-dev/vitest/issues/10474)
[<samp>(675b4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/675b4343f)

#####     [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8)

</details>

<details>
<summary>Rich-Harris/degit (degit)</summary>

###
[`v3.4.1`](https://redirect.github.com/Rich-Harris/degit/compare/v3.4.0...v3.4.1)

[Compare
Source](https://redirect.github.com/Rich-Harris/degit/compare/v3.4.0...v3.4.1)

###
[`v3.4.0`](https://redirect.github.com/Rich-Harris/degit/compare/v3.3.2...v3.4.0)

[Compare
Source](https://redirect.github.com/Rich-Harris/degit/compare/v3.3.2...v3.4.0)

</details>

<details>
<summary>eslint/eslint (eslint)</summary>

###
[`v10.4.1`](https://redirect.github.com/eslint/eslint/releases/tag/v10.4.1)

[Compare
Source](https://redirect.github.com/eslint/eslint/compare/v10.4.0...v10.4.1)

#### Bug Fixes

-
[`e557467`](https://redirect.github.com/eslint/eslint/commit/e557467db7496220eebcbe2ac5ea6d38c12bb1ec)
fix: update `@eslint/plugin-kit` version to 0.7.2
([#&#8203;20930](https://redirect.github.com/eslint/eslint/issues/20930))
(Francesco Trotta)
-
[`d4ce898`](https://redirect.github.com/eslint/eslint/commit/d4ce898796ca22c3b96aa70d3014cb85f4bac1cd)
fix: propagate failures from delegated commands
([#&#8203;20917](https://redirect.github.com/eslint/eslint/issues/20917))
(Minh Vu)
-
[`f4f3507`](https://redirect.github.com/eslint/eslint/commit/f4f3507460bc016b5be979c05d2969793f570cbf)
fix: prefer-arrow-callback invalid autofix with newline after `async`
([#&#8203;20916](https://redirect.github.com/eslint/eslint/issues/20916))
(kuldeep kumar)
-
[`c5bc78b`](https://redirect.github.com/eslint/eslint/commit/c5bc78b37e08b9054a11f0cc2d81808bb24acb85)
fix: false positive for reference in `finally` block
([#&#8203;20655](https://redirect.github.com/eslint/eslint/issues/20655))
(Tanuj Kanti)
-
[`27538c0`](https://redirect.github.com/eslint/eslint/commit/27538c01f5df4e9306f6f4ba867b2dd6307fae59)
fix: add missing CodePath and CodePathSegment types
([#&#8203;20853](https://redirect.github.com/eslint/eslint/issues/20853))
(Pixel998)

#### Documentation

-
[`61b0add`](https://redirect.github.com/eslint/eslint/commit/61b0add61ffc52665562be7bb96f526690a78b30)
docs: remove deprecated rule from related rules of `max-params`
([#&#8203;20921](https://redirect.github.com/eslint/eslint/issues/20921))
(Tanuj Kanti)
-
[`305d5b9`](https://redirect.github.com/eslint/eslint/commit/305d5b91aeac24d36fde42f75625a8f183d4ce43)
docs: remove deprecated rules from related rules section
([#&#8203;20911](https://redirect.github.com/eslint/eslint/issues/20911))
(Tanuj Kanti)
-
[`49b0202`](https://redirect.github.com/eslint/eslint/commit/49b0202d01918b8061720d586dffd7c68047090c)
docs: fix `display: none` of ad
([#&#8203;20901](https://redirect.github.com/eslint/eslint/issues/20901))
(Tanuj Kanti)
-
[`9067f94`](https://redirect.github.com/eslint/eslint/commit/9067f9492ec998afc5b4f057a477ecf6ebd45e44)
docs: switch build to Node.js 24
([#&#8203;20893](https://redirect.github.com/eslint/eslint/issues/20893))
(Milos Djermanovic)
-
[`c91b041`](https://redirect.github.com/eslint/eslint/commit/c91b0417e3420c76807ce1fa2aea76e2de87ab86)
docs: Update README (GitHub Actions Bot)
-
[`e349265`](https://redirect.github.com/eslint/eslint/commit/e349265cb37f3ebc837e178e48a725bb782bd870)
docs: clarify semver strings in rule deprecation objects
([#&#8203;20885](https://redirect.github.com/eslint/eslint/issues/20885))
(Milos Djermanovic)

#### Chores

-
[`b0e466b`](https://redirect.github.com/eslint/eslint/commit/b0e466b6ab47bfc7de43d8de0c315d8ee83aa584)
test: add `data` property to invalid tests cases for rules
([#&#8203;20924](https://redirect.github.com/eslint/eslint/issues/20924))
(Tanuj Kanti)
-
[`f78838b`](https://redirect.github.com/eslint/eslint/commit/f78838bc4c86d487e1bcc7cede260c4467721c46)
test: add CodePath type coverage
([#&#8203;20904](https://redirect.github.com/eslint/eslint/issues/20904))
(Pixel998)
-
[`1daa4bd`](https://redirect.github.com/eslint/eslint/commit/1daa4bd734b79a62e317d0394394a6b38cff49f9)
chore: update `eslint-plugin-eslint-comments` test data to latest commit
([#&#8203;20922](https://redirect.github.com/eslint/eslint/issues/20922))
(Francesco Trotta)
-
[`002942c`](https://redirect.github.com/eslint/eslint/commit/002942ce988ea28b78e0a2f3b074081e638b552c)
ci: declare contents:read on update-readme workflow
([#&#8203;20919](https://redirect.github.com/eslint/eslint/issues/20919))
(Arpit Jain)
-
[`64bca24`](https://redirect.github.com/eslint/eslint/commit/64bca24e7bed35bc3c864fc625cb2d89eca87d5b)
chore: update ecosystem plugins
([#&#8203;20912](https://redirect.github.com/eslint/eslint/issues/20912))
(ESLint Bot)
-
[`6d7c832`](https://redirect.github.com/eslint/eslint/commit/6d7c832950d5e92499d88e504080661f888f8f56)
chore: ignore fflate updates in renovate
([#&#8203;20908](https://redirect.github.com/eslint/eslint/issues/20908))
(Pixel998)
-
[`b2c8638`](https://redirect.github.com/eslint/eslint/commit/b2c86382164d87c6203b78d52068cd6a2a6ffe30)
ci: bump pnpm/action-setup from 6.0.7 to 6.0.8
([#&#8203;20889](https://redirect.github.com/eslint/eslint/issues/20889))
(dependabot\[bot])
-
[`a9b8d7f`](https://redirect.github.com/eslint/eslint/commit/a9b8d7f74c50211701cfc49710fa541fd91b2aa5)
chore: increase maxBuffer for ecosystem tests
([#&#8203;20881](https://redirect.github.com/eslint/eslint/issues/20881))
(sethamus)
-
[`b702ead`](https://redirect.github.com/eslint/eslint/commit/b702ead5e1ed7cb9f28238a454797662efb37396)
chore: update ecosystem update PR settings
([#&#8203;20884](https://redirect.github.com/eslint/eslint/issues/20884))
(Pixel998)
-
[`507f60e`](https://redirect.github.com/eslint/eslint/commit/507f60e9a78c9a902bc8759f066ae17a1ea6cd81)
chore: update ecosystem plugins
([#&#8203;20882](https://redirect.github.com/eslint/eslint/issues/20882))
(ESLint Bot)
-
[`92f5c5b`](https://redirect.github.com/eslint/eslint/commit/92f5c5bb6bf3a5d167c8ee53a430833410295c6d)
test: add unit test for message-count
([#&#8203;20878](https://redirect.github.com/eslint/eslint/issues/20878))
(kuldeep kumar)
-
[`df32108`](https://redirect.github.com/eslint/eslint/commit/df321080af5758b1fa25e4b9a40e26135642dd6e)
chore: add
[@&#8203;eslint/markdown](https://redirect.github.com/eslint/markdown)
and typescript-eslint ecosystem tests
([#&#8203;20837](https://redirect.github.com/eslint/eslint/issues/20837))
(sethamus)
-
[`327f91d`](https://redirect.github.com/eslint/eslint/commit/327f91d36aa49f2a50ded931d841a16374fd875f)
chore: use includeIgnoreFile internally
([#&#8203;20876](https://redirect.github.com/eslint/eslint/issues/20876))
(Kirk Waiblinger)
-
[`f0dc4bd`](https://redirect.github.com/eslint/eslint/commit/f0dc4bd893fb3a9f44e4ddc3ad7063ffb0beacd3)
chore: pin fflate\@&#8203;0.8.2
([#&#8203;20877](https://redirect.github.com/eslint/eslint/issues/20877))
(Milos Djermanovic)
-
[`0f4bd25`](https://redirect.github.com/eslint/eslint/commit/0f4bd257a67a082b756de746d9e0c4842ab764ca)
ci: run Discord alert for ecosystem test failures
([#&#8203;20873](https://redirect.github.com/eslint/eslint/issues/20873))
(Copilot)

</details>

<details>
<summary>sveltejs/prettier-plugin-svelte
(prettier-plugin-svelte)</summary>

###
[`v4.1.0`](https://redirect.github.com/sveltejs/prettier-plugin-svelte/blob/HEAD/CHANGELOG.md#410)

[Compare
Source](https://redirect.github.com/sveltejs/prettier-plugin-svelte/compare/prettier-plugin-svelte@4.0.1...prettier-plugin-svelte@4.1.0)

##### Minor Changes

- feat: support Svelte 5 declaration tags
([#&#8203;533](https://redirect.github.com/sveltejs/prettier-plugin-svelte/pull/533))

</details>

<details>
<summary>sveltejs/svelte (svelte)</summary>

###
[`v5.56.1`](https://redirect.github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5561)

[Compare
Source](https://redirect.github.com/sveltejs/svelte/compare/svelte@5.56.0...svelte@5.56.1)

##### Patch Changes

- fix: error at compile time on duplicate snippet/declaration tag
definitions
([#&#8203;18351](https://redirect.github.com/sveltejs/svelte/pull/18351))

- fix: parse declaration tag contents more robustly
([#&#8203;18353](https://redirect.github.com/sveltejs/svelte/pull/18353))

- fix: correctly transform references to earlier declarators in a
declaration tag (e.g. `{let a = $state(0), b = $derived(a * 2)}`)
([#&#8203;18348](https://redirect.github.com/sveltejs/svelte/pull/18348))

- fix: avoid spurious `state_referenced_locally` warnings for `$derived`
declarations in declaration tags
([#&#8203;18348](https://redirect.github.com/sveltejs/svelte/pull/18348))

- fix: tolerate whitespace before `let`/`const` in declaration tags
([#&#8203;18348](https://redirect.github.com/sveltejs/svelte/pull/18348))

- fix: prevent infinite loop when a tag's expression ends with a
trailing `/` at the end of the input
([#&#8203;18350](https://redirect.github.com/sveltejs/svelte/pull/18350))

- fix: more robust parsing of declaration tags with regards to `type`
([#&#8203;18330](https://redirect.github.com/sveltejs/svelte/pull/18330))

- fix: preserve newlines in spread input values when the `type`
attribute is applied after `value`
([#&#8203;18345](https://redirect.github.com/sveltejs/svelte/pull/18345))

- fix: update `SvelteURLSearchParams` when setting duplicate keys to the
same joined value
([#&#8203;18336](https://redirect.github.com/sveltejs/svelte/pull/18336))

- fix: check references for blockers on server, too
([#&#8203;18352](https://redirect.github.com/sveltejs/svelte/pull/18352))

###
[`v5.56.0`](https://redirect.github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5560)

[Compare
Source](https://redirect.github.com/sveltejs/svelte/compare/svelte@5.55.10...svelte@5.56.0)

##### Minor Changes

- feat: allow declarations in the template
([#&#8203;18282](https://redirect.github.com/sveltejs/svelte/pull/18282))

##### Patch Changes

- perf: use `createElement` instead of `createElementNS` for HTML
elements
([#&#8203;18262](https://redirect.github.com/sveltejs/svelte/pull/18262))

- perf: store `current_sources` as a `Set` for O(1) membership checks
([#&#8203;18278](https://redirect.github.com/sveltejs/svelte/pull/18278))

- perf: deduplicate identical hoisted templates within a component
([#&#8203;18320](https://redirect.github.com/sveltejs/svelte/pull/18320))

- perf: hoist `rest_props` exclude list as a module-scope `Set`
([#&#8203;18252](https://redirect.github.com/sveltejs/svelte/pull/18252))

</details>

<details>
<summary>privatenumber/tsx (tsx)</summary>

###
[`v4.22.4`](https://redirect.github.com/privatenumber/tsx/releases/tag/v4.22.4)

[Compare
Source](https://redirect.github.com/privatenumber/tsx/compare/v4.22.3...v4.22.4)

##### Bug Fixes

- resolve CommonJS directory requires inside dependencies
([#&#8203;803](https://redirect.github.com/privatenumber/tsx/issues/803))
([1ce8463](https://redirect.github.com/privatenumber/tsx/commit/1ce846335b7c445a3328c7d27f06424949356d97))

***

This release is also available on:

- [npm package (@&#8203;latest
dist-tag)](https://www.npmjs.com/package/tsx/v/4.22.4)

</details>

<details>
<summary>sindresorhus/type-fest (type-fest)</summary>

###
[`v5.7.0`](https://redirect.github.com/sindresorhus/type-fest/releases/tag/v5.7.0)

[Compare
Source](https://redirect.github.com/sindresorhus/type-fest/compare/v5.6.0...v5.7.0)

##### New types

-
[`RemoveSuffix`](https://redirect.github.com/sindresorhus/type-fest/blob/main/source/remove-suffix.d.ts)
([#&#8203;1439](https://redirect.github.com/sindresorhus/type-fest/issues/1439))
[`d685b77`](https://redirect.github.com/sindresorhus/type-fest/commit/d685b77)
-
[`UnwrapRequired`](https://redirect.github.com/sindresorhus/type-fest/blob/main/source/unwrap-required.d.ts)
([#&#8203;1410](https://redirect.github.com/sindresorhus/type-fest/issues/1410))
[`3bfee8e`](https://redirect.github.com/sindresorhus/type-fest/commit/3bfee8e)

##### Improvements

- `ExtendsStrict`: Add `distributiveUnions`, `strictNever` & `strictAny`
options
([#&#8203;1408](https://redirect.github.com/sindresorhus/type-fest/issues/1408))
[`9ea810b`](https://redirect.github.com/sindresorhus/type-fest/commit/9ea810b)
- `TupleOf`: Improve implementation
([#&#8203;1441](https://redirect.github.com/sindresorhus/type-fest/issues/1441))
[`391e1bb`](https://redirect.github.com/sindresorhus/type-fest/commit/391e1bb)

##### Fixes

- `RemovePrefix`: Fix: Remove incorrect optimization and always fallback
to `string` for non-literal prefixes
([#&#8203;1438](https://redirect.github.com/sindresorhus/type-fest/issues/1438))
[`9f35398`](https://redirect.github.com/sindresorhus/type-fest/commit/9f35398)
- `DelimiterCase`: Fix behavior with non-single character delimiters
([#&#8203;1424](https://redirect.github.com/sindresorhus/type-fest/issues/1424))
[`9b36590`](https://redirect.github.com/sindresorhus/type-fest/commit/9b36590)
- `RemovePrefix`: Fix `any` prefix behavior in non-strict mode
([#&#8203;1423](https://redirect.github.com/sindresorhus/type-fest/issues/1423))
[`c49cb75`](https://redirect.github.com/sindresorhus/type-fest/commit/c49cb75)
- `DelimiterCase`: Fix behavior with union delimiters
([#&#8203;1422](https://redirect.github.com/sindresorhus/type-fest/issues/1422))
[`96172c0`](https://redirect.github.com/sindresorhus/type-fest/commit/96172c0)
- `ApplyDefaultOptions`: Fix behavior with generic instantiations &
`any` values
([#&#8203;1411](https://redirect.github.com/sindresorhus/type-fest/issues/1411))
[`c46020d`](https://redirect.github.com/sindresorhus/type-fest/commit/c46020d)
- `ApplyDefaultOptions`: Fix behavior with explicit `undefined`
([#&#8203;1407](https://redirect.github.com/sindresorhus/type-fest/issues/1407))
[`60bfd3f`](https://redirect.github.com/sindresorhus/type-fest/commit/60bfd3f)

***

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - "before 10am on monday"
- Automerge
  - At any time (no schedule defined)

🚦 **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/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjIwOS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-06-07 17:44:09 +01:00
Boshen 324c8ae137 refactor(semantic): add SemanticBuilder::new_compiler / new_linter presets (#23019)
## Summary

Adds two named constructor presets to `SemanticBuilder` that bake in the options each use case needs, so the configuration lives in one place instead of being repeated at call sites:

- **`SemanticBuilder::new_compiler()`** — compiler pipeline. Enables syntax-error checking; leaves linter-only analyses (control flow graph, class table) off.
- **`SemanticBuilder::new_linter()`** — linter. Enables syntax-error checking, the control flow graph, and the class table.

The presets are applied at the real pipeline entry points:
- `new_linter()` → the linter service build.
- `new_compiler()` → `oxc::Compiler`, and the napi parser/transform bindings.

Everywhere else keeps `SemanticBuilder::new()` and turns on only the features it needs (mangler, minifier, formatter, transformer plugins, examples, tests, ...). Individual options can still be overridden after a preset (e.g. the linter service overrides `check_syntax_error` with its runtime flag).

Behavior is preserved at every migrated site. Node-store access is intentionally untouched in this PR.

## Verified

- Builds across the affected crates + napi; clippy clean; `oxc_linter` tests pass; full `cargo coverage` with no snapshot changes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-06-06 15:44:18 +00:00
oxc-guard[bot] 6c30f81eca release(crates): oxc v0.134.0 (#22882)
### 🚀 Features

- 9c71f2e ast, codegen, formatter: Add `WithClauseKeyword::as_str`
helper and use it (#22791) (camc314)

### 🐛 Bug Fixes

- cf5769c parser: Reject TypeScript declarations in single-statement
context (#22827) (Boshen)
- c360fb6 parser: Reject generators in ambient contexts and overload
signatures (TS1221/TS1222) (#22848) (Boshen)
- cc60d8d parser: Reject invalid index signature parameter types
(TS1268/TS1337) (#22852) (Boshen)
- 3d13e29 parser: Reject `declare` in an already-ambient context
(TS1038) (#22850) (Boshen)
- 5152854 parser: Reject statements in ambient contexts (TS1036)
(#22849) (Boshen)
- 4f9afc5 parser: Reject `export as namespace` inside a namespace body
(TS1316) (#22846) (Boshen)
- 2eafea6 parser: Reject function implementations in ambient contexts
(TS1183) (#22845) (Boshen)
- c645615 parser: Reject incompatible class member modifiers (#22843)
(Boshen)
- 276b78b parser: Reject module-referencing imports/exports in a
namespace body (#22836) (Boshen)
- 842ed1c parser: Parse `class implements` with `implements` as the
class name (#22801) (Boshen)

### ⚡ Performance

- 7e3a567 parser: Reuse cached token kind in delimited-list loops
(#22841) (Boshen)
- 9e741c2 parser: Use peek_token instead of lookahead on the modifier
path (#22842) (Boshen)
- 9e496a7 semantic: Defer declare lookup for empty accessors (#22810)
(camc314)
2026-06-01 17:27:01 +01:00
Dunqing 188b9e6b43 chore(bench): swap cal.com.tsx for excalidraw App.tsx everywhere (#22895)
## Summary

Follow-up to #22590. That PR replaced the synthetic `cal.com.tsx` fixture — a concatenation of Next.js pages that declares top-level names 70–113× and emits thousands of redeclaration diagnostics, inflating semantic `sys_allocs` — with excalidraw's real, single-file `App.tsx`. But it only touched `TestFiles::complicated()` (used by `track_memory_allocations`).

This applies the same swap to every remaining benchmark that still used `cal.com.tsx`, and unifies **all** excalidraw `App.tsx` references on one pin (`f6d85bc8`):

| File | Change |
| --- | --- |
| `tasks/common/src/test_file.rs` | `minimal()` (feeds every `tasks/benchmark` criterion bench): `cal.com.tsx` → `App.tsx@f6d85bc8`. `formatter()` re-pinned `@v0.18.0` → `@f6d85bc8` |
| `napi/parser/bench.bench.js` | parser benchmark fixture → `App.tsx@f6d85bc8` |
| `napi/parser/test/parse-raw.test.ts` | bench-fixture list + size comment → `App.tsx@f6d85bc8` |
| `tasks/benchmark/benches/semantic.rs` | rewrote the now-false "`cal.com.tsx` has many errors" comment |
| `crates/oxc_ast/src/serialize/mod.rs` | removed the stale `cal.com.tsx` row from the capacity-ratio doc table |

## Why a single pin

`get_source_text` caches downloads by the last URL segment only (`App.tsx`). With two different pins live, a single `cargo bench` run would download both into the same `target/App.tsx` and silently bench whichever landed first. Re-pinning `formatter()` to `f6d85bc8` removes that collision — and the pre-existing latent one between `cargo bench` (`@v0.18.0`) and `cargo allocs` (`@f6d85bc8`).

## Notes

No committed snapshots change: these fixtures feed only timing benches and a `programRaw.toEqual(programStandard)` self-consistency test; the snapshotted `complicated()` / `minifier()` sets are untouched.

---

This PR was prepared with AI assistance; I reviewed, tested, and verified the changes.
2026-06-01 16:21:32 +00:00
renovate[bot] b7568d54d7 chore(deps): update dependency @napi-rs/cli to v3.7.0 (#22771)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Adoption](https://docs.renovatebot.com/merge-confidence/) |
[Passing](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [@napi-rs/cli](https://napi.rs/)
([source](https://redirect.github.com/napi-rs/napi-rs)) | [`3.6.2` →
`3.7.0`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.6.2/3.7.0) |
![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.7.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.7.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.6.2/3.7.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.6.2/3.7.0?slim=true)
|

---

### Release Notes

<details>
<summary>napi-rs/napi-rs (@&#8203;napi-rs/cli)</summary>

###
[`v3.7.0`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.6.2...@napi-rs/cli@3.7.0)

[Compare
Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.6.2...@napi-rs/cli@3.7.0)

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- 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/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTQuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE5NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-05-28 10:06:39 +01:00
oxc-guard[bot] 83328b65ce release(crates): oxc v0.133.0 (#22734)
### 🚀 Features

- e857b0c napi/minify: Expose legalComments option and result (#20370)
(Boshen)
- 661132d parser: More friendly error messages for rest assignment
target and rest binding element (#22719) (sapphi-red)
- ee659b6 transformer/legacy-decorator: Add `strictNullChecks` option
for nullable-union design:type (#22266) (Kyle Cannon)

### 🐛 Bug Fixes

- e1d064e transformer/class-properties: Reparent lifted private method
helpers (#22716) (Cameron)
- 4ac0fca minifier: Preserve `0 && (module.exports = { ... })`
cjs-module-lexer hint (#22729) (Dunqing)
- 40ff611 minifier: Mark peephole loop changed when dropping
dead-after-throw statement (#22722) (Dunqing)
- 2f7b210 codegen: Emit pife-arrow/function leading comments inside the
wrap (#22720) (Dunqing)
- e184f74 parser: Improve invalid `import` property access diagnostic
(#22693) (camc314)
- 7baed9c transformer/private-method: Clear inherited strict flags
(#22508) (camc314)
- a9ad27e parser: Keep annotation comments leading without preceding
newline (#22711) (Dunqing)
- 9ea4d64 minifier: Re-evaluate pure/no-side-effects flags after
peephole inlining (#22595) (Dunqing)
- 07afbb6 minifier: Drop empty-body IIFE wrapper when called with
arguments (#22589) (Dunqing)
- fa7c463 semantic: Correct TS enum member symbol spans (#22689)
(camc314)
- 26b9396 semantic: Resolve parameter decorators outside parameter scope
(#22623) (camc314)
- b284045 parser: Switch to module goal eagerly on `export` (#22684)
(Boshen)
- dfa931d semantic: Propagate unresolved auto-increment enum value
instead of defaulting to 0 (#22646) (Dunqing)
- 69a6ba6 transformer/legacy-decorator: Emit Array for ReadonlyArray<T>
in decorator metadata (#22265) (Kyle Cannon)
- e421ef0 transformer/legacy-decorator: Return runtime binding for
design:type (#22640) (Dunqing)
- d61e1d7 codegen: Preserve verbatim text of pure/no-side-effects
comments (#22525) (Dunqing)
- 702b14e minifier: Preserve IIFE structure in DCE-only mode (#22547)
(Dunqing)
- 917da24 parser: Apply PURE comment through member-access chains
(#22566) (Dunqing)
- a069b1c codegen: Preserve quotes for cjs-module-lexer equality strings
(#22551) (Dunqing)

### ⚡ Performance

- 2f623b0 semantic: Skip unresolved checks for re-exports (#22660)
(camc314)
- 0d9553d semantic: Early-exit `check_object_expression` for objects
with <2 properties (#22668) (Dunqing)
- d721ad9 semantic: Use direct grandparent lookup for TS type parameters
(#22658) (camc314)
- 0aff288 semantic: Reorder numeric literal strict mode checks (#22657)
(camc314)
- 4d5ddb1 semantic: Reorder binding identifier checks (#22656) (camc314)
- e32acd8 semantic: Reorder identifier ambient binding check (#22653)
(camc314)
- 09fe178 semantic: Reorder ident reference strict mode check (#22652)
(camc314)
- 4b6add2 semantic: Avoid duplicate ident clone for bindings (#22663)
(camc314)
- 82f9662 parser: Check identifier kind before context flag (#22662)
(camc314)
- d7cd951 parser: Fast path identifier parsing and inline operator
helpers (#22650) (Boshen)
- 7b84314 semantic: Use direct byte access for numeric leading-zero
check (#22642) (camc314)
- 0345a31 semantic: Pre-size class elements hash map (#22618) (camc314)
- 04d3065 minifier: Drop per-call buffers in try_fold_concat (#22596)
(Dunqing)
- 4f289f1 semantic: Resolve_references_for_current_scope without a temp
Vec (#22599) (Dunqing)
- e862c15 semantic: Avoid heap alloc for var hoist scope ids (#22603)
(Dunqing)
- 8ff8674 semantic: Early return if `excess` is `0` in
`Stats::increase_by` (#22616) (camc314)
- 7a4120e semantic: Pre-reserve unresolved_references using
Stats::references (#22580) (Dunqing)

Co-authored-by: Dunqing <29533304+Dunqing@users.noreply.github.com>
2026-05-26 14:28:43 +08:00
renovate aa3de22643 chore(deps): update npm packages (#22699)
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.59.3` → `8.59.4`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.59.3/8.59.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.59.4?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/8.59.4?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/8.59.3/8.59.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.59.3/8.59.4?slim=true) |
| [@typescript-eslint/scope-manager](https://typescript-eslint.io/packages/scope-manager) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/scope-manager)) | [`8.59.3` → `8.59.4`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fscope-manager/8.59.3/8.59.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fscope-manager/8.59.4?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fscope-manager/8.59.4?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fscope-manager/8.59.3/8.59.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fscope-manager/8.59.3/8.59.4?slim=true) |
| [@typescript-eslint/visitor-keys](https://typescript-eslint.io) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys)) | [`8.59.3` → `8.59.4`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fvisitor-keys/8.59.3/8.59.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fvisitor-keys/8.59.4?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fvisitor-keys/8.59.4?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fvisitor-keys/8.59.3/8.59.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fvisitor-keys/8.59.3/8.59.4?slim=true) |
| [@vitest/browser](https://vitest.dev/guide/browser/) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser)) | [`4.1.6` → `4.1.7`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/4.1.6/4.1.7) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/4.1.7?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/4.1.7?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/4.1.6/4.1.7?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/4.1.6/4.1.7?slim=true) |
| [@vitest/browser-playwright](https://vitest.dev/config/browser/playwright) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser-playwright)) | [`4.1.6` → `4.1.7`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser-playwright/4.1.6/4.1.7) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser-playwright/4.1.7?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser-playwright/4.1.7?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser-playwright/4.1.6/4.1.7?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser-playwright/4.1.6/4.1.7?slim=true) |
| [eslint](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint)) | [`10.3.0` → `10.4.0`](https://renovatebot.com/diffs/npm/eslint/10.3.0/10.4.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/10.4.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint/10.4.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint/10.3.0/10.4.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/10.3.0/10.4.0?slim=true) |
| [svelte](https://svelte.dev) ([source](https://redirect.github.com/sveltejs/svelte/tree/HEAD/packages/svelte)) | [`5.55.7` → `5.55.9`](https://renovatebot.com/diffs/npm/svelte/5.55.7/5.55.9) | ![age](https://developer.mend.io/api/mc/badges/age/npm/svelte/5.55.9?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/svelte/5.55.9?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/svelte/5.55.7/5.55.9?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/svelte/5.55.7/5.55.9?slim=true) |
| [tsx](https://tsx.hirok.io) ([source](https://redirect.github.com/privatenumber/tsx)) | [`4.22.0` → `4.22.3`](https://renovatebot.com/diffs/npm/tsx/4.22.0/4.22.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/tsx/4.22.3?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tsx/4.22.3?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tsx/4.22.0/4.22.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tsx/4.22.0/4.22.3?slim=true) |
| [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.1.6` → `4.1.7`](https://renovatebot.com/diffs/npm/vitest/4.1.6/4.1.7) | ![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/4.1.7?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/4.1.7?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/4.1.6/4.1.7?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/4.1.6/4.1.7?slim=true) |

---

### Release Notes

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/parser)</summary>

### [`v8.59.4`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8594-2026-05-18)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.59.3...v8.59.4)

This was a version bump only for parser to align it with other projects, there were no code changes.

See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.4) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/scope-manager)</summary>

### [`v8.59.4`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/scope-manager/CHANGELOG.md#8594-2026-05-18)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.59.3...v8.59.4)

This was a version bump only for scope-manager to align it with other projects, there were no code changes.

See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.4) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/visitor-keys)</summary>

### [`v8.59.4`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/visitor-keys/CHANGELOG.md#8594-2026-05-18)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.59.3...v8.59.4)

This was a version bump only for visitor-keys to align it with other projects, there were no code changes.

See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.4) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

### [`v4.1.7`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.7)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7)

#####    🐞 Bug Fixes

- **runner**: Limit concurrency per task branch in addition to per leaf callbacks (backport)  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;10384](https://redirect.github.com/vitest-dev/vitest/issues/10384) [<samp>(4f0f2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4f0f2a1ee)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7)

</details>

<details>
<summary>eslint/eslint (eslint)</summary>

### [`v10.4.0`](https://redirect.github.com/eslint/eslint/compare/v10.3.0...452c4010c07dc2e36fe6ec6a8c48298878e86887)

[Compare Source](https://redirect.github.com/eslint/eslint/compare/v10.3.0...v10.4.0)

</details>

<details>
<summary>sveltejs/svelte (svelte)</summary>

### [`v5.55.9`](https://redirect.github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5559)

[Compare Source](https://redirect.github.com/sveltejs/svelte/compare/svelte@5.55.8...svelte@5.55.9)

##### Patch Changes

- fix: don't unset batch when calling `{#await ...}` promise ([#&#8203;18243](https://redirect.github.com/sveltejs/svelte/pull/18243))

- fix: promise-ify `{#await await ...}` expressions on the server and correctly hydrate them on the client ([#&#8203;18243](https://redirect.github.com/sveltejs/svelte/pull/18243))

- fix: deduplicate dependencies that are added outside the init/update cycle ([#&#8203;18243](https://redirect.github.com/sveltejs/svelte/pull/18243))

- fix: avoid false-positive batch invariant error ([#&#8203;18246](https://redirect.github.com/sveltejs/svelte/pull/18246))

- fix: inline primitive constants in attribute values during SSR ([#&#8203;18232](https://redirect.github.com/sveltejs/svelte/pull/18232))

### [`v5.55.8`](https://redirect.github.com/sveltejs/svelte/blob/HEAD/packages/svelte/CHANGELOG.md#5558)

[Compare Source](https://redirect.github.com/sveltejs/svelte/compare/svelte@5.55.7...svelte@5.55.8)

##### Patch Changes

- fix(print): handle `svelte:body` and fix keyframe percentage double-printing ([#&#8203;18234](https://redirect.github.com/sveltejs/svelte/pull/18234))

- fix: execute uninitialized derived even if it's destroyed ([#&#8203;18228](https://redirect.github.com/sveltejs/svelte/pull/18228))

- fix: use named symbols everywhere ([#&#8203;18238](https://redirect.github.com/sveltejs/svelte/pull/18238))

- fix: don't run teardown effects when deriveds are unfreezed ([#&#8203;18227](https://redirect.github.com/sveltejs/svelte/pull/18227))

- fix: unset context synchronously in `run` ([#&#8203;18236](https://redirect.github.com/sveltejs/svelte/pull/18236))

</details>

<details>
<summary>privatenumber/tsx (tsx)</summary>

### [`v4.22.3`](https://redirect.github.com/privatenumber/tsx/compare/v4.22.2...dce02fc3b8b64a58d24560714902b16f89332f1f)

[Compare Source](https://redirect.github.com/privatenumber/tsx/compare/v4.22.2...v4.22.3)

### [`v4.22.2`](https://redirect.github.com/privatenumber/tsx/compare/v4.22.1...v4.22.2)

[Compare Source](https://redirect.github.com/privatenumber/tsx/compare/v4.22.1...v4.22.2)

### [`v4.22.1`](https://redirect.github.com/privatenumber/tsx/compare/v4.22.0...6979f28810829dc79ec9baf406e162a18b65ab4b)

[Compare Source](https://redirect.github.com/privatenumber/tsx/compare/v4.22.0...v4.22.1)

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - "before 10am on monday"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, 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/oxc-project/oxc).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xOTQuMCIsInVwZGF0ZWRJblZlciI6IjQzLjE5NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2026-05-25 10:22:30 +00:00
oxc-guard[bot] 63b129182d release(crates): oxc v0.132.0 (#22527)
### 🐛 Bug Fixes

- 0f26de6 ecmascript: Resolve identifier value type via tracked
constants (#22234) (Alexander Lichter)
- c27a8cf minifier: Normalize `{ x: x }` shorthand so adjacent-if merge
is idempotent (#22401) (Dunqing)
- e431a0e parser: Break extends clause loop on fatal error (#22517)
(Boshen)
- e9ec7c6 minifier: Fold optional chains by base nullishness (#22236)
(Alexander Lichter)
- e6090e7 transformer: Keep enum IIFE when a non-inlinable value
reference remains (#22501) (Dunqing)
- 931b7d6 transformer: Inline const enum members through type-cast
wrappers (#22500) (Dunqing)
- b9615b2 codegen: Preserve string quotes in require() calls during
minification (#22475) (zennnnnnn11)
- c73c159 transformer/async-to-generator: Reparent parameter initializer
scopes (#22507) (camc314)
- ecfd3ca transformer/async-to-generator: Move only parameter bindings
(#22503) (camc314)
- 3ce3431 transformer/explicit-resource-managment: Preserve shadowed
for-head block (#22451) (camc314)

### ⚡ Performance

- ce92c6c semantic: `#[inline]` `Scoping::get_binding` (#22414)
(Dunqing)
- 98be95c regular_expression: Track regex flags via bitflags (#22427)
(Boshen)
- dbbc059 jsdoc: Skip should_attach_jsdoc when no remaining comments
(#22409) (Boshen)
- 217d7d8 minifier: Index `SymbolValues` by `SymbolId` (#22441)
(Dunqing)
- d782b78 minifier: Use BitSet for LiveUsageCollector live references
(#22425) (Boshen)
2026-05-18 12:09:14 +01:00
renovate 03b7ac5b55 chore(deps): update npm packages (#22504)
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.59.2` → `8.59.3`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.59.2/8.59.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.59.3?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/8.59.3?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/8.59.2/8.59.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.59.2/8.59.3?slim=true) |
| [@typescript-eslint/scope-manager](https://typescript-eslint.io/packages/scope-manager) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/scope-manager)) | [`8.59.2` → `8.59.3`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fscope-manager/8.59.2/8.59.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fscope-manager/8.59.3?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fscope-manager/8.59.3?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fscope-manager/8.59.2/8.59.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fscope-manager/8.59.2/8.59.3?slim=true) |
| [@typescript-eslint/visitor-keys](https://typescript-eslint.io) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys)) | [`8.59.2` → `8.59.3`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fvisitor-keys/8.59.2/8.59.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fvisitor-keys/8.59.3?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fvisitor-keys/8.59.3?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fvisitor-keys/8.59.2/8.59.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fvisitor-keys/8.59.2/8.59.3?slim=true) |
| [@vitest/browser](https://vitest.dev/guide/browser/) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser)) | [`4.1.5` → `4.1.6`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/4.1.5/4.1.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/4.1.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/4.1.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/4.1.5/4.1.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/4.1.5/4.1.6?slim=true) |
| [@vitest/browser-playwright](https://vitest.dev/config/browser/playwright) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser-playwright)) | [`4.1.5` → `4.1.6`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser-playwright/4.1.5/4.1.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser-playwright/4.1.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser-playwright/4.1.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser-playwright/4.1.5/4.1.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser-playwright/4.1.5/4.1.6?slim=true) |
| [playwright](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`1.59.1` → `1.60.0`](https://renovatebot.com/diffs/npm/playwright/1.59.1/1.60.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/playwright/1.60.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/playwright/1.60.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/playwright/1.59.1/1.60.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright/1.59.1/1.60.0?slim=true) |
| [publint](https://publint.dev) ([source](https://redirect.github.com/publint/publint/tree/HEAD/packages/publint)) | [`0.3.19` → `0.3.21`](https://renovatebot.com/diffs/npm/publint/0.3.19/0.3.21) | ![age](https://developer.mend.io/api/mc/badges/age/npm/publint/0.3.21?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/publint/0.3.21?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/publint/0.3.19/0.3.21?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/publint/0.3.19/0.3.21?slim=true) |
| [tsx](https://tsx.hirok.io) ([source](https://redirect.github.com/privatenumber/tsx)) | [`4.21.0` → `4.22.0`](https://renovatebot.com/diffs/npm/tsx/4.21.0/4.22.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/tsx/4.22.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tsx/4.22.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tsx/4.21.0/4.22.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tsx/4.21.0/4.22.0?slim=true) |
| [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.1.5` → `4.1.6`](https://renovatebot.com/diffs/npm/vitest/4.1.5/4.1.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/4.1.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/4.1.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/4.1.5/4.1.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/4.1.5/4.1.6?slim=true) |

---

### Release Notes

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/parser)</summary>

### [`v8.59.3`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8593-2026-05-11)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.59.2...v8.59.3)

This was a version bump only for parser to align it with other projects, there were no code changes.

See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.3) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/scope-manager)</summary>

### [`v8.59.3`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/scope-manager/CHANGELOG.md#8593-2026-05-11)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.59.2...v8.59.3)

This was a version bump only for scope-manager to align it with other projects, there were no code changes.

See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.3) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/visitor-keys)</summary>

### [`v8.59.3`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/visitor-keys/CHANGELOG.md#8593-2026-05-11)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.59.2...v8.59.3)

This was a version bump only for visitor-keys to align it with other projects, there were no code changes.

See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.3) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

### [`v4.1.6`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.6)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6)

#####    🐞 Bug Fixes

- **browser**: Provide project reference in `ToMatchScreenshotResolvePath`  -  by [@&#8203;macarie](https://redirect.github.com/macarie) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;10138](https://redirect.github.com/vitest-dev/vitest/issues/10138) [<samp>(31882)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/31882607c)
- Global `sequence.concurrent: true` with top-level `test(..., { concurrent: false })` + depreacte `sequential` test API and options  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa), **Codex** and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;10196](https://redirect.github.com/vitest-dev/vitest/issues/10196) [<samp>(2847d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2847dfa2a)
- **browser**: Simplify orchestrator otel carrier  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;10285](https://redirect.github.com/vitest-dev/vitest/issues/10285) [<samp>(18af9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/18af98cee)

#####    🏎 Performance

- Stringify diff objects only once  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;10276](https://redirect.github.com/vitest-dev/vitest/issues/10276) [<samp>(9f7b1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9f7b1528c)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6)

</details>

<details>
<summary>microsoft/playwright (playwright)</summary>

### [`v1.60.0`](https://redirect.github.com/microsoft/playwright/releases/tag/v1.60.0)

[Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.59.1...v1.60.0)

#### 🌐 HAR recording on Tracing

[tracing.startHar()](https://playwright.dev/docs/api/class-tracing#tracing-start-har) / [tracing.stopHar()](https://playwright.dev/docs/api/class-tracing#tracing-stop-har) expose HAR recording as a first-class tracing API, with the same `content`, `mode` and `urlFilter` options as `recordHar`. The returned [Disposable](https://playwright.dev/docs/api/class-disposable) makes it easy to scope a recording with `await using`:

```js
await using har = await context.tracing.startHar('trace.har');
const page = await context.newPage();
await page.goto('https://playwright.dev');
// HAR is finalized when `har` goes out of scope.
```

#### 🪝 Drop API

New [locator.drop()](https://playwright.dev/docs/api/class-locator#locator-drop) simulates an external drag-and-drop of files or clipboard-like data onto an element. Playwright dispatches `dragenter`, `dragover`, and `drop` with a synthetic \[DataTransfer] in the page context — works cross-browser and is great for testing upload zones:

```js
await page.locator('#dropzone').drop({
  files: { name: 'note.txt', mimeType: 'text/plain', buffer: Buffer.from('hello') },
});

await page.locator('#dropzone').drop({
  data: {
    'text/plain': 'hello world',
    'text/uri-list': 'https://example.com',
  },
});
```

#### 🎯 Aria snapshots

- [expect(page).toMatchAriaSnapshot()](https://playwright.dev/docs/api/class-pageassertions#page-assertions-to-match-aria-snapshot) now works on a [Page](https://playwright.dev/docs/api/class-page), in addition to a [Locator](https://playwright.dev/docs/api/class-locator) — equivalent to asserting against `page.locator('body')`.
- New `boxes` option on [locator.ariaSnapshot()](https://playwright.dev/docs/api/class-locator#locator-aria-snapshot) / [page.ariaSnapshot()](https://playwright.dev/docs/api/class-page#page-aria-snapshot) appends each element's bounding box as `[box=x,y,width,height]`, useful for AI consumption.

#### 🛑 test.abort()

New [test.abort()](https://playwright.dev/docs/api/class-test#test-abort) aborts the currently running test from a fixture, hook, or route handler with an optional message. Use it when you have detected an unrecoverable misuse and want to fail the test right away:

```js
test('does not publish to the shared page', async ({ page }) => {
  await page.route('**/publish', route => {
    test.abort('Tests must not publish to the shared page. Use the `clone` option.');
    return route.abort();
  });
  // ...
});
```

#### New APIs

##### Browser, Context and Page

- Event [browser.on('context')](https://playwright.dev/docs/api/class-browser#browser-event-context) — fired when a new context is created on the browser.
- [BrowserContext](https://playwright.dev/docs/api/class-browsercontext) now mirrors lifecycle events from its pages: [browserContext.on('download')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-download), [browserContext.on('frameattached')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-frame-attached), [browserContext.on('framedetached')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-frame-detached), [browserContext.on('framenavigated')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-frame-navigated), [browserContext.on('pageclose')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-page-close), [browserContext.on('pageload')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-page-load).

##### Locators and Assertions

- New option `description` in [page.getByRole()](https://playwright.dev/docs/api/class-page#page-get-by-role) / [locator.getByRole()](https://playwright.dev/docs/api/class-locator#locator-get-by-role) / [frame.getByRole()](https://playwright.dev/docs/api/class-frame#frame-get-by-role) / [frameLocator.getByRole()](https://playwright.dev/docs/api/class-framelocator#frame-locator-get-by-role) for matching the [accessible description](https://www.w3.org/TR/wai-aria-1.2/#dfn-accessible-description).
- New option `pseudo` in [expect(locator).toHaveCSS()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-css) reads computed styles from `::before` or `::after`.
- New option `style` in [locator.highlight()](https://playwright.dev/docs/api/class-locator#locator-highlight) applies extra inline CSS to the highlight overlay, plus new [page.hideHighlight()](https://playwright.dev/docs/api/class-page#page-hide-highlight) to clear all highlights.

##### Network

- [webSocketRoute.protocols()](https://playwright.dev/docs/api/class-websocketroute#web-socket-route-protocols) returns the WebSocket subprotocols requested by the page.
- New option `noDefaults` in [browserType.connectOverCDP()](https://playwright.dev/docs/api/class-browsertype#browser-type-connect-over-cdp) disables Playwright's default overrides on the default context (download behavior, focus emulation, media emulation), so attaching to a user's daily-driver browser doesn't disturb its state.

##### Errors and Reporting

- New [webError.location()](https://playwright.dev/docs/api/class-weberror#web-error-location) mirrors [consoleMessage.location()](https://playwright.dev/docs/api/class-consolemessage#console-message-location).
- [consoleMessage.location()](https://playwright.dev/docs/api/class-consolemessage#console-message-location) now exposes `line` / `column` properties (`lineNumber` / `columnNumber` are deprecated).
- New [testInfoError.errorContext](https://playwright.dev/docs/api/class-testinfoerror#test-info-error-error-context) surfaces additional diagnostic context, such as the aria snapshot of the receiver at the time of an `expect(...)` matcher failure.
- [reporter.onError()](https://playwright.dev/docs/api/class-reporter#reporter-on-error) now receives a `workerInfo` argument with details about the worker for fixture teardown errors.

##### Test runner

- New `{testFileBaseName}` token in [testProject.snapshotPathTemplate](https://playwright.dev/docs/api/class-testproject#test-project-snapshot-path-template) — file name without extension.
- Test runner now errors when a config tries to override a non-option fixture, and rejects `workers: 0` or negative values.

#### 🛠️ Other improvements

- HTML reporter:
  - `npx playwright show-report` accepts `.zip` files directly — no need to unzip first.
  - Steps that contain attachments inside nested children show an indicator on the parent step.
  - The `repeatEachIndex` is shown in the test header when non-zero.
- Trace Viewer adds a pretty-print toggle for JSON / form request and response bodies in the network details panel.

#### Breaking Changes ⚠️

- Removed long-deprecated APIs:
  - `Locator.ariaRef()` — use the standard [locator.ariaSnapshot()](https://playwright.dev/docs/api/class-locator#locator-aria-snapshot) pipeline.
  - `handle` option on `BrowserContext.exposeBinding` and `Page.exposeBinding`.
  - `logger` option on `BrowserType.connect` and `BrowserType.connectOverCDP` — use [tracing](https://playwright.dev/docs/trace-viewer) instead.
  - Context options `videosPath` / `videoSize` — use `recordVideo` instead.

#### Browser Versions

- Chromium 148.0.7778.96
- Mozilla Firefox 150.0.2
- WebKit 26.4

This version was also tested against the following stable channels:

- Google Chrome 147
- Microsoft Edge 147

</details>

<details>
<summary>publint/publint (publint)</summary>

### [`v0.3.21`](https://redirect.github.com/publint/publint/blob/HEAD/packages/publint/CHANGELOG.md#0321)

[Compare Source](https://redirect.github.com/publint/publint/compare/publint@0.3.20...publint@0.3.21)

##### Patch Changes

- Suggest adding `"sideEffects": false` when bundler-oriented package fields or conditions are detected and the field is missing. ([#&#8203;228](https://redirect.github.com/publint/publint/pull/228))

### [`v0.3.20`](https://redirect.github.com/publint/publint/blob/HEAD/packages/publint/CHANGELOG.md#0320)

[Compare Source](https://redirect.github.com/publint/publint/compare/publint@0.3.19...publint@0.3.20)

##### Patch Changes

- Suggest adding `engines.node` when it is missing from detected Node.js packages ([#&#8203;226](https://redirect.github.com/publint/publint/pull/226))

- Loosen "breaking change" wording in lint messages ([`7bb3f4f`](https://redirect.github.com/publint/publint/commit/7bb3f4fd03415d0c860dda0c252d7029144b9f94))

</details>

<details>
<summary>privatenumber/tsx (tsx)</summary>

### [`v4.22.0`](https://redirect.github.com/privatenumber/tsx/compare/v4.21.1...b29f6ee4d6872fdef474eb0a89c6d4e982478a77)

[Compare Source](https://redirect.github.com/privatenumber/tsx/compare/v4.21.1...v4.22.0)

### [`v4.21.1`](https://redirect.github.com/privatenumber/tsx/releases/tag/v4.21.1)

[Compare Source](https://redirect.github.com/privatenumber/tsx/compare/v4.21.0...v4.21.1)

##### Bug Fixes

- support Node 20.11/21.2 import.meta paths ([acf3d8f](https://redirect.github.com/privatenumber/tsx/commit/acf3d8ffee39fcb4655956fc052b78666aacbc3d))
- support Node.js 24.15.0 ([c1d2d45](https://redirect.github.com/privatenumber/tsx/commit/c1d2d45432eba7c6ff0785a43b0aeae85b5a3391))
- support Node.js 26.1.0 and 25.9.0 ([1d7e528](https://redirect.github.com/privatenumber/tsx/commit/1d7e528762a7e4f801175fd7d7d6082b00df3e5c))

***

This release is also available on:

- [npm package (@&#8203;latest dist-tag)](https://www.npmjs.com/package/tsx/v/4.21.1)

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - "before 10am on monday"
- Automerge
  - At any time (no schedule defined)

🚦 **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/oxc-project/oxc).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNzkuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE3OS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2026-05-17 17:36:19 +00:00
oxc-guard[bot] 564ebbf46f release(crates): oxc v0.131.0 (#22459)
### 🚀 Features

- bc91a17 codegen: Expose `Codegen::with_source_type` method (#22432)
(camc314)

### 🐛 Bug Fixes

- 5ac7e79 minifier: Drop unused-var-init pure IIFEs and preserve
annotation for downstream (#22349) (Dunqing)
- 4ab57eb allocator: Fixed-size allocators use `VirtualAlloc` on Windows
(#22124) (overlookmotel)
- 66d77eb allocator: Fix segfault on Linux MUSL with fixed-size
allocators (#22388) (overlookmotel)
- b8fbc1f transformer/object-rest-spread: Correct scope id when moving
bindings (#22419) (camc314)
- 18edc2c codegen: Keep `Object.defineProperty` property name as plain
string in minify (#22400) (Dunqing)
- dda33de transformer/explicit-resource-management: Align lexical
binding scopes (#22320) (camc314)
- 8e79de8 transformer: Preserve for-await statement bodies (#22361)
(camc314)
- 0cba210 transformer/class: Replace `new.target` in static blocks
(#22360) (camc314)
- 67ab1c9 transformer/es2018/for-await: Hoist for-await generated
bindings (#22355) (camc314)
- c3ceb4a transformer/object-rest-spread: Use hoisted scope for `for-of`
temp refs (#22347) (camc314)

### ⚡ Performance

- 73a9043 allocator/bitset: Avoid temp heap `String` allocation (#22403)
(camc314)
- 8b2f4f9 transformer/object-rest-spread: Collect `Vec<SymbolId` over
`Vec<BindingIdentifier>` (#22418) (camc314)
- 83679ea parser: Split TriviaBuilder::handle_token hot/cold paths
(#22415) (Boshen)
- 2c7d781 codegen: Inline identifier-name accessors (#22411) (Boshen)
- 618bc76 diagnostics: Inline `OxcDiagnosticInner` to avoid heap
allocation (#22406) (Boshen)
- 0b4e158 parser: Reserve cap `2` for sequence expressions vec (#22374)
(camc314)
- 5f3bdd0 codegen: Add `#[inline]` to `code`, `code_len` (#22373)
(camc314)

Co-authored-by: overlookmotel <557937+overlookmotel@users.noreply.github.com>
2026-05-15 15:38:24 +01:00
overlookmotel e3b0d54556 refactor(napi/parser, linter/plugins): improve safety of raw transfer interface (#22424)
Add a check that the input passed to raw transfer parser implementations is valid - both in `napi/parser` and in the raw transfer implementation used in Oxlint's `RuleTester`.

Check that `source_start` and `source_len` which are passed from JS side are within bounds of the active region of the `Arena`. This check is not strictly necessary - it's part of the safety contract, and is enforced on JS side - but it's critical as the setup of the `Arena` on Rust side depends on the accuracy of these values. If they were wrong, it could lead to reading/writing out of bounds. The check is cheap, so it seems worthwhile - safety trumps the tiny perf impact here.

The 3rd invariant of these functions is that the bytes in the buffer between `source_start` and `source_start + source_len` represent a valid UTF-8 string. Here a full runtime check isn't appropriate, as it would involve scanning and validating the whole source text string (expensive). But _do_ enable the full check in debug builds (used by raw transfer parser tests, and Oxlint conformance tests).
2026-05-14 22:26:41 +00:00
overlookmotel c2c8f806f9 refactor(napi/parser): raw transfer store source text at end of buffer (#22392)
Oxlint's raw transfer implementation stores the source text at end of the buffer. Prior to this PR `napi/parser` stored source text at the start of the buffer.

Bring `napi/parser` into line with Oxlint, by also storing source text at end of the buffer.

Making all versions of raw transfer that we use align with each other removes complication (all versions now have the same implementation of `deserializeStr`) and also removes some fragile code where it'd be easy to accidentally trigger UB (see the updated comments in `arena/fixed_size/windows.rs` and `arena/alloc_impl.rs`).

Unfortunately, storing source at end of buffer is slightly less efficient than storing it at the start. We'll switch all implementations to storing source at start of buffer when we move to storing all strings (source text and all other strings) together in a single contiguous block. But in meantime, this slight inefficiency is outweighed by the gain in safety.
2026-05-14 22:26:41 +00:00
oxc-guard[bot] 650417ffd0 release(crates): oxc v0.130.0 (#22316)
### 🚀 Features

- 66c9b01 transformer/typescript: Debug_assert that `enum_eval` ran in
semantic (#22252) (Dunqing)
- ffe6475 minifier: Fold `Array` constructor with safe spreads (#22215)
(camc314)

### 🐛 Bug Fixes

- d3d0b18 traverse: Handle `ChainElement::TSNonNullExpression` in
`GatherNodeParts` (#22247) (leaysgur)
- 4e880de transformer/object-rest-spread: Declare temp vars for computed
keys (#22284) (camc314)
- a7c3e22 semantic: Clear member write target for computed keys (#22302)
(camc314)
- 6a8852d codegen: Emit newline after legal-comment orphan flush
(#22304) (Dunqing)
- 5da9fda transformer/explicit-resource-management: Preserve class names
(#22306) (Dunqing)
- b5d970f transformer/explicit-resource-management: Preserve class names
(#22290) (camc314)
- bc54fd4 minifier: Keep function / class names if direct eval is
present in the scope (#22241) (sapphi-red)
- 7a810c0 minifier: Refresh direct eval flags after DCE (#21787)
(Dunqing)
- dd88726 transformer/legacy-decorator: Preserve accessor type
annotation for emitDecoratorMetadata (#21966) (Dunqing)
- 29a3cd7 codegen: Swap mapping/indent order for top-level decls
(#22206) (Dunqing)
- 73b4f40 minifier: Preserve catch binding with direct eval (#22221)
(camc314)
- 0e13d17 minifier: Preserve optional chain base side effects (#22219)
(camc314)
- 0c7c01c transformer/typescript: Inline optional-chain enum member
access (#21834) (Dunqing)
- a6aff7e codegen: Emit block/array/object end mapping at close char
(#22200) (Dunqing)
- a099b03 codegen: Emit call end mapping at `)` position, not past it
(#22199) (Dunqing)
- 5753774 minifier: Cap if-return ternary collapse for firefox (#21841)
(Gurupungav Narayanan)
- 2493bdd codegen: Correct sourcemap end mappings for closing delimiters
(#22001) (Mark Dalgleish)
- 3b385e2 minifier: Bail optimizing `Array` with unknown arg count
(#22188) (camc314)
- 9fa2122 parser: Parse array computed class keys (#22159) (camc314)

### 📚 Documentation

- a4a6892 napi/parser: Correct code comment (#22278) (overlookmotel)
- 9305373 oxc: Update README (#22178) (camc314)

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-05-11 16:02:22 +01:00
overlookmotel a4a6892f2c docs(napi/parser): correct code comment (#22278)
Just fix a small inaccuracy in a comment.
2026-05-09 19:35:22 +00:00
camc314 24946bea55 refactor(napi/parser): use rolldown for browser bundle (#22231) 2026-05-07 17:03:57 +00:00
oxc-guard[bot] ec00055e64 release(crates): oxc v0.129.0 (#22108)
### 💥 BREAKING CHANGES

- 0ffbe0d allocator: [**BREAKING**] Remove `Allocator::end_ptr` method
(#21871) (overlookmotel)

### 🚀 Features

- 9593ec8 transformer/jsx: Add jsxDEV source metadata for fragments
(#21932) (Ido Rosenthal)

### 🐛 Bug Fixes

- 429deac napi/parser: Export `visitorKeys` from `wasm` entrypoint
(#21996) (NullVoxPopuli)
- e852911 codegen: Preserve legal comments orphaned by upstream passes
(#21575) (Dunqing)
- e3399ec transformer/class-properties: Preserve RHS in
logical-assignment to static private field (#21950) (Dunqing)
- c59c199 transformer/typescript: Emit class fields for parameter
properties (#21831) (Dunqing)
- aaabde4 parser: Attach legal comments to following token (#21670)
(Dunqing)

### ⚡ Performance

- 0bf0cb9 allocator: Per-platform `Arena::new_fixed_size`
implementations (#22088) (overlookmotel)

### 📚 Documentation

- 62ec410 allocator: Correct doc comment for `Allocator::from_raw_parts`
(#22093) (overlookmotel)
- 3e152c6 allocator: Correct typos in comments (#22092) (overlookmotel)
- e220855 allocator: Correct doc comment for `Allocator::set_cursor_ptr`
(#21866) (overlookmotel)

---------

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-05-05 09:59:50 +01:00
NullVoxPopuli 429deac502 fix(napi/parser): export visitorKeys from wasm entrypoint (#21996)
Fixes #21995 

Unblocks
- https://github.com/sxzz/ast-explorer/pull/263

Why?
- getting the actual list of visitorKeys provides an optimization for
tools like zimmerframe, which will `walk` over only the things specified
in the visitorKeys list -- helping prevent accidental recursive
visiting, which can happen when a tree adds parent referencs

Co-authored-by: Cameron <cameron.clark@hey.com>
2026-05-01 09:50:42 +01:00
overlookmotel aedc1b8db5 refactor(linter/plugins, napi/parser): document pointer arithmetic (#21872)
Refactor. Document some quite unintuitive pointer arithmetic, and avoid casting pointers to integers with `as usize`.
2026-04-30 01:27:31 +00:00
overlookmotel 245f813cc1 refactor(napi/parser): avoid converting between NonNull and raw pointers (#21870)
Refactor. Simplify raw transfer code in `napi/parser`, by consistently using `NonNull` pointers, rather than converting back and forth between `NonNull` and `*mut` pointers.
2026-04-30 01:27:30 +00:00
overlookmotel 99eef72e2d refactor(allocator, linter/plugins, napi/parser): store raw transfer metadata within Arena chunk (#21869)
Large change to how raw transfer stores metadata about the allocations it uses.

Previously the two metadata structures `RawTransferMetadata` and `FixedSizeAllocator` after the chunk's `ChunkFooter`.

This had a few problems:

1. It was confusing and unwieldy - a recipe for bugs.
2. `ChunkFooter`'s memory was exposed on JS side - a bit unsafe as altering bytes in this region could easily trigger UB.
3. It entwined `Arena` (which is just the thing that allocates) with the details of exactly _what_ raw transfer allocates.
4. Imposed annoying alignment requirements, because `ChunkFooter` must be aligned on 16, and so anything after it must ensure it doesn't break that invariant.

Old layout:

```
                                                        WHOLE BLOCK - aligned on 4 GiB
<-----------------------------------------------------> Allocated block (`BLOCK_SIZE` bytes)

                                                        ALLOCATOR
<----------------------------------------->             `Allocator` chunk (`CHUNK_SIZE` bytes)
                                     <---->             `ChunkFooter` (aligned on 16)
<----------------------------------->                   `Allocator` chunk data storage (for AST)
                                                        (`ACTIVE_SIZE` bytes)

                                                        METADATA
                                           <---->       `RawTransferMetadata`
                                                 <----> `FixedSizeAllocatorMetadata`

                                                        BUFFER SENT TO JS
<----------------------------------------------->       Buffer sent to JS (`BUFFER_SIZE` bytes)
```

This PR moves `RawTransferMetadata` and `FixedSizeAllocatorMetadata` into the chunk itself. New layout:

```
                                                        WHOLE BLOCK - size 2 GiB - 16, aligned on 4 GiB
<-----------------------------------------------------> Allocated block (`BLOCK_SIZE` bytes)

                                                        ARENA
<-----------------------------------------------------> Chunk (fills whole block)
<-------------------------------------->                Allocatable region for AST (`ACTIVE_SIZE` bytes)
                                        <--->           `RawTransferMetadata`
                                             <--->      `FixedSizeAllocatorMetadata`
                                                  <---> `ChunkFooter` (aligned on 16, last in block)

                                                        BUFFER SENT TO JS
<------------------------------------------->           Buffer sent to JS (`BUFFER_SIZE` bytes)
```

`FixedSizeAllocatorMetadata` and `ChunkFooter` are no longer in the region which is shared with JS side. As far as `Arena` is concerned, they're now just some data (like any other data) which is allocated in the arena.

Also:

- Introduce more consistency to the naming of constants which specify the size and position of these various data structures in the arena.
- Add more const assertions to ensure everything is laid out and aligned as it should be.
2026-04-30 01:27:30 +00:00
overlookmotel b86197d455 refactor(allocator): fixed size allocators store backing allocation pointer in ChunkFooter (#21868)
Previously, fixed size allocators stored the pointer to the start of `Allocator`'s backing memory in `FixedSizeAllocatorMetadata`. Instead, store this pointer in `ChunkFooter`, in the field introduced in #21865.
2026-04-27 23:31:37 +00:00
oxc-guard[bot] 9951013ece release(crates): oxc v0.128.0 (#21837)
### 💥 BREAKING CHANGES

- 502e804 ast: [**BREAKING**] Reduce size of `TSTypePredicateName`
(#21711) (overlookmotel)
- 5651539 ast: [**BREAKING**] Reduce size of `JSXExpression` (#21710)
(overlookmotel)
- c44e280 ast: [**BREAKING**] Reduce size of `ArrayExpressionElement`
(#21709) (overlookmotel)
- c5b3deb syntax: [**BREAKING**] Remove `CommentNodeId` (#21679)
(overlookmotel)

### 🚀 Features

- b738a39 allocator: Add `Allocator::cursor_ptr` method (#21773)
(overlookmotel)
- 678767e ast: Generate node_id accessors for AST enum wrappers (#21653)
(camc314)
- f091d77 minifier: Inline constant spread elements into arrays (#21095)
(Armano)

### 🐛 Bug Fixes

- 0d608c2 minifier: Preserve raw CR in template literals (#21645)
(Dunqing)
- a889ea9 minifier: Track pure functions in DCE mode (#21722) (Dunqing)
- 674dfac allocator: `Arena` retry allocation when chunk size approaches
maximum (#21777) (overlookmotel)
- f130cc0 allocator: Fix arithmetic overflow in
`Arena::new_chunk_memory_details` (#21745) (overlookmotel)
- b9bf239 allocator: Fix UB in `Arena::grow_zeroed` (#21739)
(overlookmotel)
- d2b9389 allocator: Clippy warning when building without `testing`
feature (#21681) (camc314)
- 503dc86 codegen: Map sourcemaps from visible output starts (#21662)
(Dunqing)
- c92bd3b transformer: Use SPAN for synthesized helper calls to prevent
comment misattribution (#21578) (Dunqing)
- 0d80441 codegen: Add mapping before printing `#` for private ident
(#21619) (camc314)

### ⚡ Performance

- 9fa362e napi/parser: Do not generate tokens except in tests (#21811)
(overlookmotel)
- 0044392 allocator: Reduce branches when allocating new chunk (#21776)
(overlookmotel)
- 7896bd0 allocator: `Allocator::used_bytes` do not use chunk iterator
(#21771) (overlookmotel)
- a5c562f allocator: Remove check in `Arena::new_chunk_memory_details`
(#21750) (overlookmotel)
- 35bbe1f allocator: `Arena` use unchecked size round up where
guaranteed no overflow (#21743) (overlookmotel)
- ffe229b allocator: Remove unnecessary check from
`Arena::try_alloc_layout_slow_impl` (#21732) (overlookmotel)
- 72fece5 allocator: Use `NonNull::offset_from_unsigned` in
`Arena::chunk_capacity` (#21731) (overlookmotel)
- cab32ae ast: Add `#[inline(always)]` to `node_id` methods on enums
with all variants unboxed (#21707) (overlookmotel)
- b179688 parser: Allocate `TriviaBuilder` comments in the arena
(#21512) (Boshen)
- 2290f31 lexer: Fix perf of `Token::set_*` methods on Rust 1.95.0
(#21659) (overlookmotel)
- 1b58029 allocator: Move code into cold path in `Arena::alloc_layout`
(#21622) (overlookmotel)
- 3cf7cef allocator: Reduce instructions on allocation hot path (#21510)
(overlookmotel)

### 📚 Documentation

- ce65070 data_structures: Document why `as_ref` and `as_mut` on
`NonNullConst` and `NonNullMut` take `self` (#21800) (overlookmotel)
- 93b7dbd allocator: Improve doc comments for `ChunkFooter` (#21733)
(overlookmotel)
- 295db8d transformer: Fix comment (#21717) (overlookmotel)
- 5c93af8 ast: Add comments explaining `#[inline(always)]` to `node_id`
methods on enums (#21706) (overlookmotel)
- e4cea25 transform: Use the `node:` namespace in the example (#19998)
(루밀LuMir)

### 🛡️ Security

- d8076c9 deps: Update rolldown (#21639) (renovate)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2026-04-27 12:32:32 +01:00
renovate[bot] 15ded1326b chore(deps): update npm packages (#21791)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Adoption](https://docs.renovatebot.com/merge-confidence/) |
[Passing](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
|
[@typescript-eslint/parser](https://typescript-eslint.io/packages/parser)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser))
| [`8.58.2` →
`8.59.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.58.2/8.59.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.59.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/8.59.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/8.58.2/8.59.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.58.2/8.59.0?slim=true)
|
|
[@typescript-eslint/scope-manager](https://typescript-eslint.io/packages/scope-manager)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/scope-manager))
| [`8.58.2` →
`8.59.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fscope-manager/8.58.2/8.59.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fscope-manager/8.59.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fscope-manager/8.59.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fscope-manager/8.58.2/8.59.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fscope-manager/8.58.2/8.59.0?slim=true)
|
| [@typescript-eslint/visitor-keys](https://typescript-eslint.io)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys))
| [`8.58.2` →
`8.59.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fvisitor-keys/8.58.2/8.59.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fvisitor-keys/8.59.0?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fvisitor-keys/8.59.0?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fvisitor-keys/8.58.2/8.59.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fvisitor-keys/8.58.2/8.59.0?slim=true)
|
| [@vitest/browser](https://vitest.dev/guide/browser/)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser))
| [`4.1.4` →
`4.1.5`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/4.1.4/4.1.5)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/4.1.5?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/4.1.5?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/4.1.4/4.1.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/4.1.4/4.1.5?slim=true)
|
|
[@vitest/browser-playwright](https://vitest.dev/config/browser/playwright)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser-playwright))
| [`4.1.4` →
`4.1.5`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser-playwright/4.1.4/4.1.5)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser-playwright/4.1.5?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser-playwright/4.1.5?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser-playwright/4.1.4/4.1.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser-playwright/4.1.4/4.1.5?slim=true)
|
| [vitest](https://vitest.dev)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest))
| [`4.1.4` →
`4.1.5`](https://renovatebot.com/diffs/npm/vitest/4.1.4/4.1.5) |
![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/4.1.5?slim=true)
|
![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/4.1.5?slim=true)
|
![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/4.1.4/4.1.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/4.1.4/4.1.5?slim=true)
|

---

### Release Notes

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/parser)</summary>

###
[`v8.59.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8590-2026-04-20)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.58.2...v8.59.0)

This was a version bump only for parser to align it with other projects,
there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.0)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/scope-manager)</summary>

###
[`v8.59.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/scope-manager/CHANGELOG.md#8590-2026-04-20)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.58.2...v8.59.0)

This was a version bump only for scope-manager to align it with other
projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.0)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/visitor-keys)</summary>

###
[`v8.59.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/visitor-keys/CHANGELOG.md#8590-2026-04-20)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.58.2...v8.59.0)

This was a version bump only for visitor-keys to align it with other
projects, there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.59.0)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

###
[`v4.1.5`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.5)

[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.4...v4.1.5)

#####    🚀 Experimental Features

- **coverage**: Istanbul to support `instrumenter` option  -  by
[@&#8203;BartWaardenburg](https://redirect.github.com/BartWaardenburg)
and [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#&#8203;10119](https://redirect.github.com/vitest-dev/vitest/issues/10119)
[<samp>(0e0ff)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0e0ff41c7)

#####    🐞 Bug Fixes

- \--project negation excludes browser instances  -  by
[@&#8203;felamaslen](https://redirect.github.com/felamaslen) in
[#&#8203;10131](https://redirect.github.com/vitest-dev/vitest/issues/10131)
[<samp>(9423d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9423dc084)
- Project color label on html reporter  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#&#8203;10142](https://redirect.github.com/vitest-dev/vitest/issues/10142)
[<samp>(596f7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/596f73986)
- Fix `vi.defineHelper` called as object method  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#&#8203;10163](https://redirect.github.com/vitest-dev/vitest/issues/10163)
[<samp>(122c2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/122c25b5b)
- Alias `agent` reporter to `minimal`  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;10157](https://redirect.github.com/vitest-dev/vitest/issues/10157)
[<samp>(663b9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/663b99fe3)
- Respect diff config options in soft assertions  -  by
[@&#8203;Copilot](https://redirect.github.com/Copilot), **sheremet-va**
and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;8696](https://redirect.github.com/vitest-dev/vitest/issues/8696)
[<samp>(9787d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9787dedad)
- Respect diff config options in soft assertions "  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;8696](https://redirect.github.com/vitest-dev/vitest/issues/8696)
[<samp>(7dc6d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7dc6d54fd)
- **ast-collect**: Recognize \_*vi\_import* prefix in static test
discovery  -  by
[@&#8203;Yejneshwar](https://redirect.github.com/Yejneshwar) in
[#&#8203;10129](https://redirect.github.com/vitest-dev/vitest/issues/10129)
[<samp>(32546)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/325463ab2)
- **coverage**: Descriptive error message when reports directory is
removed during test run  -  by
[@&#8203;DaveT1991](https://redirect.github.com/DaveT1991) and
[@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#&#8203;10117](https://redirect.github.com/vitest-dev/vitest/issues/10117)
[<samp>(14133)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1413382e1)
- **snapshot**: Increase default snapshot max output length  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Codex**
in
[#&#8203;10150](https://redirect.github.com/vitest-dev/vitest/issues/10150)
[<samp>(21e66)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/21e66ff63)
- **ui**: Fix jsx/tsx syntax highlight  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#&#8203;10152](https://redirect.github.com/vitest-dev/vitest/issues/10152)
[<samp>(f1b1f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f1b1f6c7b)
- **web-worker**: Support MessagePort objects referenced inside
postMessage data  -  by
[@&#8203;whitphx](https://redirect.github.com/whitphx) and **Claude Opus
4.6 (1M context)** in
[#&#8203;9927](https://redirect.github.com/vitest-dev/vitest/issues/9927)
and
[#&#8203;10124](https://redirect.github.com/vitest-dev/vitest/issues/10124)
[<samp>(7ad7d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7ad7d39af)
- **api**: Make test-specification options writable  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;10154](https://redirect.github.com/vitest-dev/vitest/issues/10154)
[<samp>(6abd5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6abd557b7)

#####     [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.4...v4.1.5)

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - "before 10am on monday"
- Automerge
  - At any time (no schedule defined)

🚦 **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/oxc-project/oxc).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNDEuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE0MS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Cameron Clark <cameron.clark@hey.com>
2026-04-27 10:25:10 +01:00
overlookmotel 9fa362eac7 perf(napi/parser): do not generate tokens except in tests (#21811)
#19885 added support for tokens in `oxc-parser`, but only via raw transfer and behind an undocumented `experimentalTokens` option. It's currently only used in tests for the purpose of conformance testing.

This slowed down `oxc-parser` a little (very little as the difference in execution time on Rust side is dwarfed by the cost of JSON transfer).

The worse effect is that it caused a large binary size increase in Rolldown (https://github.com/rolldown/rolldown/issues/9166) because Rolldown re-exports `napi/parser`'s Rust code, which meant that Rolldown now contains 2 versions of Oxc's parser with different `ParserConfig`s, leading to the entire parser being compiled and included in the binary twice.

Fix this by introducing a Cargo feature `tokens` on `napi/parser` crate. Only when `tokens` feature is enabled is a `ParserConfig` which generates tokens used. When disabled (the default), the default `ParserConfig` which does not produce tokens is used.

Enable the `tokens` feature only in tests.
2026-04-27 02:10:22 +00:00
overlookmotel a7521cb122 refactor(linter/plugins, napi/plugins): use constant for arena alignment from Allocator (#21797)
Refactor.

Don't hard-code the minimum alignment of `Arena` chunks in `apps/oxlint` and `napi/parser`. Get the value from a property on `Allocator`. This will avoid this code getting out of sync if the value changes in future.

Also rename the vars `BUMP_ALIGN` to `ARENA_ALIGN`, as the arena type is now called `Arena` not `Bump`, and update some comments which were out of date.
2026-04-26 21:45:46 +00:00
overlookmotel 502e804ffa perf(ast)!: reduce size of TSTypePredicateName (#21711)
#21653 revealed that `TSTypePredicateName` has an unboxed variant `This`.

Before the introduction of `NodeId` fields, this was fine as `TSThisType` contained only a `Span` (8 bytes). But with `NodeId` field added, it's 16 bytes, which makes `TSTypePredicateName` larger too - 24 bytes.

Box `TSThisType` in this variant, bringing `TSTypePredicateName` back down to 16 bytes.

This also has the side-effect of making `TSTypePredicateName`'s `node_id`, `span`, and `span_mut` methods branchless.
2026-04-24 13:03:50 +00:00
overlookmotel 5651539aba perf(ast)!: reduce size of JSXExpression (#21710)
#21653 revealed that `JSXExpression` has an unboxed variant `EmptyExpression`.

Before the introduction of `NodeId` fields, this was fine as `JSXEmptyExpression` contained only a `Span` (8 bytes). But with `NodeId` field added, it's 16 bytes, which makes `JSXExpression` larger too - 24 bytes.

Box `JSXEmptyExpression` in this variant, bringing `JSXExpression` back down to 16 bytes.

This also has the side-effect of making `JSXExpression`'s `node_id`, `span`, and `span_mut` methods branchless.
2026-04-24 13:03:50 +00:00
overlookmotel c44e28068e perf(ast)!: reduce size of ArrayExpressionElement (#21709)
#21653 revealed that `ArrayExpressionElement` has an unboxed variant `Elision`.

Before the introduction of `NodeId` fields, this was fine as `Elison` contained only a `Span` (8 bytes). But with `NodeId` field added, it's 16 bytes, which makes `ArrayExpressionElement` larger too - 24 bytes.

Box `Elison` in this variant, bringing `ArrayExpressionElement` back down to 16 bytes.

This also has the side-effect of making `ArrayExpressionElement`'s `node_id`, `span`, and `span_mut` methods branchless.
2026-04-24 13:03:50 +00:00
renovate d8076c9780 chore(deps): update rolldown (#21639)
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [rolldown](https://rolldown.rs/) ([source](https://redirect.github.com/rolldown/rolldown/tree/HEAD/packages/rolldown)) | [`1.0.0-rc.16` → `1.0.0-rc.17`](https://renovatebot.com/diffs/npm/rolldown/1.0.0-rc.16/1.0.0-rc.17) | ![age](https://developer.mend.io/api/mc/badges/age/npm/rolldown/1.0.0-rc.17?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/rolldown/1.0.0-rc.17?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/rolldown/1.0.0-rc.16/1.0.0-rc.17?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/rolldown/1.0.0-rc.16/1.0.0-rc.17?slim=true) |
| [tsdown](http://tsdown.dev/) ([source](https://redirect.github.com/rolldown/tsdown)) | [`0.21.9` → `0.21.10`](https://renovatebot.com/diffs/npm/tsdown/0.21.9/0.21.10) | ![age](https://developer.mend.io/api/mc/badges/age/npm/tsdown/0.21.10?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tsdown/0.21.10?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tsdown/0.21.9/0.21.10?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tsdown/0.21.9/0.21.10?slim=true) |

---

### Release Notes

<details>
<summary>rolldown/rolldown (rolldown)</summary>

### [`v1.0.0-rc.17`](https://redirect.github.com/rolldown/rolldown/blob/HEAD/CHANGELOG.md#100-rc17---2026-04-22)

[Compare Source](https://redirect.github.com/rolldown/rolldown/compare/v1.0.0-rc.16...v1.0.0-rc.17)

##### 🐛 Bug Fixes

- link: error on missing export between TS modules ([#&#8203;9197](https://redirect.github.com/rolldown/rolldown/issues/9197)) by [@&#8203;IWANABETHATGUY](https://redirect.github.com/IWANABETHATGUY)
- rolldown\_plugin\_vite\_import\_glob: import path should not be affected by absolute base option ([#&#8203;9145](https://redirect.github.com/rolldown/rolldown/issues/9145)) by [@&#8203;kermanx](https://redirect.github.com/kermanx)
- `this.resolve()` returns null for bare relative paths without importer ([#&#8203;9142](https://redirect.github.com/rolldown/rolldown/issues/9142)) by [@&#8203;Copilot](https://redirect.github.com/Copilot)
- collect destructured bindings in HMR module exports ([#&#8203;9146](https://redirect.github.com/rolldown/rolldown/issues/9146)) by [@&#8203;h-a-n-a](https://redirect.github.com/h-a-n-a)
- esbuild-tests: handle 0.28.0 test cases ([#&#8203;9149](https://redirect.github.com/rolldown/rolldown/issues/9149)) by [@&#8203;sapphi-red](https://redirect.github.com/sapphi-red)
- plugin/copy-module: honor external resolutions from other plugins ([#&#8203;9139](https://redirect.github.com/rolldown/rolldown/issues/9139)) by [@&#8203;TheAlexLichter](https://redirect.github.com/TheAlexLichter)
- allow undefined in sourcesContent type ([#&#8203;9136](https://redirect.github.com/rolldown/rolldown/issues/9136)) by [@&#8203;jurijzahn8019](https://redirect.github.com/jurijzahn8019)
- reduce false positives in chunk optimizer circular dependency detection ([#&#8203;9049](https://redirect.github.com/rolldown/rolldown/issues/9049)) by [@&#8203;AlonMiz](https://redirect.github.com/AlonMiz)

##### 🚜 Refactor

- chunk-optimizer: extract runtime-module placement into rehome\_runtime\_module ([#&#8203;9163](https://redirect.github.com/rolldown/rolldown/issues/9163)) by [@&#8203;IWANABETHATGUY](https://redirect.github.com/IWANABETHATGUY)

##### 📚 Documentation

- add design doc for sort\_modules execution ordering ([#&#8203;9169](https://redirect.github.com/rolldown/rolldown/issues/9169)) by [@&#8203;IWANABETHATGUY](https://redirect.github.com/IWANABETHATGUY)
- add document for `RenderedModule` ([#&#8203;9147](https://redirect.github.com/rolldown/rolldown/issues/9147)) by [@&#8203;sapphi-red](https://redirect.github.com/sapphi-red)

##### ⚡ Performance

- rolldown\_plugin\_vite\_import\_glob: skip self-import earlier using raw path comparison ([#&#8203;9193](https://redirect.github.com/rolldown/rolldown/issues/9193)) by [@&#8203;shulaoda](https://redirect.github.com/shulaoda)

##### 🧪 Testing

- lazy: add `playground/lazy-compilation` ([#&#8203;7974](https://redirect.github.com/rolldown/rolldown/issues/7974)) by [@&#8203;hyf0](https://redirect.github.com/hyf0)

##### ⚙️ Miscellaneous Tasks

- use app token for release PR ([#&#8203;9198](https://redirect.github.com/rolldown/rolldown/issues/9198)) by [@&#8203;Boshen](https://redirect.github.com/Boshen)
- upgrade oxc to 0.127.0 ([#&#8203;9194](https://redirect.github.com/rolldown/rolldown/issues/9194)) by [@&#8203;Dunqing](https://redirect.github.com/Dunqing)
- use oxc security action ([#&#8203;9196](https://redirect.github.com/rolldown/rolldown/issues/9196)) by [@&#8203;Boshen](https://redirect.github.com/Boshen)
- esbuild-tests: remove some tests from ignored list as enum inline is now supported ([#&#8203;9184](https://redirect.github.com/rolldown/rolldown/issues/9184)) by [@&#8203;sapphi-red](https://redirect.github.com/sapphi-red)
- deps: update dependency vite-plus to v0.1.19 ([#&#8203;9183](https://redirect.github.com/rolldown/rolldown/issues/9183)) by [@&#8203;renovate](https://redirect.github.com/renovate)\[bot]
- use vp instead of pnpm in check-wasi-binding-deps ([#&#8203;9182](https://redirect.github.com/rolldown/rolldown/issues/9182)) by [@&#8203;shulaoda](https://redirect.github.com/shulaoda)
- verify wasm32-wasi binding deps match [@&#8203;rolldown/browser](https://redirect.github.com/rolldown/browser) before publish ([#&#8203;9162](https://redirect.github.com/rolldown/rolldown/issues/9162)) by [@&#8203;shulaoda](https://redirect.github.com/shulaoda)
- deps: update esbuild for tests to 0.28.0 ([#&#8203;9172](https://redirect.github.com/rolldown/rolldown/issues/9172)) by [@&#8203;sapphi-red](https://redirect.github.com/sapphi-red)
- deps: update rollup submodule for tests to v4.60.2 ([#&#8203;9173](https://redirect.github.com/rolldown/rolldown/issues/9173)) by [@&#8203;sapphi-red](https://redirect.github.com/sapphi-red)
- deps: update test262 submodule for tests ([#&#8203;9174](https://redirect.github.com/rolldown/rolldown/issues/9174)) by [@&#8203;sapphi-red](https://redirect.github.com/sapphi-red)
- sort\_modules: fix stale async-entry sort key comment ([#&#8203;9170](https://redirect.github.com/rolldown/rolldown/issues/9170)) by [@&#8203;IWANABETHATGUY](https://redirect.github.com/IWANABETHATGUY)
- deps: update npm packages ([#&#8203;9157](https://redirect.github.com/rolldown/rolldown/issues/9157)) by [@&#8203;renovate](https://redirect.github.com/renovate)\[bot]
- deps: update dependency diff to v9 ([#&#8203;9158](https://redirect.github.com/rolldown/rolldown/issues/9158)) by [@&#8203;renovate](https://redirect.github.com/renovate)\[bot]
- deps: update rust crates ([#&#8203;9156](https://redirect.github.com/rolldown/rolldown/issues/9156)) by [@&#8203;renovate](https://redirect.github.com/renovate)\[bot]
- run Windows CI on PRs labeled with `ci: windows` ([#&#8203;9153](https://redirect.github.com/rolldown/rolldown/issues/9153)) by [@&#8203;hyf0](https://redirect.github.com/hyf0)
- update-test-dependencies: run setup-rust before file changes ([#&#8203;9151](https://redirect.github.com/rolldown/rolldown/issues/9151)) by [@&#8203;sapphi-red](https://redirect.github.com/sapphi-red)
- deps: update dependency rust to v1.95.0 ([#&#8203;9140](https://redirect.github.com/rolldown/rolldown/issues/9140)) by [@&#8203;renovate](https://redirect.github.com/renovate)\[bot]

##### ❤️ New Contributors

- [@&#8203;jurijzahn8019](https://redirect.github.com/jurijzahn8019) made their first contribution in [#&#8203;9136](https://redirect.github.com/rolldown/rolldown/pull/9136)
- [@&#8203;AlonMiz](https://redirect.github.com/AlonMiz) made their first contribution in [#&#8203;9049](https://redirect.github.com/rolldown/rolldown/pull/9049)

</details>

<details>
<summary>rolldown/tsdown (tsdown)</summary>

### [`v0.21.10`](https://redirect.github.com/rolldown/tsdown/releases/tag/v0.21.10)

[Compare Source](https://redirect.github.com/rolldown/tsdown/compare/v0.21.9...v0.21.10)

#####    🚀 Features

- Upgrade rolldown  -  by [@&#8203;sxzz](https://redirect.github.com/sxzz) [<samp>(8a449)</samp>](https://redirect.github.com/rolldown/tsdown/commit/8a4498d)

#####     [View changes on GitHub](https://redirect.github.com/rolldown/tsdown/compare/v0.21.9...v0.21.10)

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **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/oxc-project/oxc).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjEzOS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2026-04-23 10:20:58 +00:00
oxc-guard[bot] 161d6b5583 release(crates): oxc v0.127.0 (#21572)
### 🐛 Bug Fixes

- 48967e8 isolated_declarations: Drop required type check for private
parameter properties on private constructors (#21515) (Dunqing)
- 91e5bde transformer/typescript: Preserve computed-key static block
when class has an empty constructor (#21562) (Dunqing)
- 50e9d26 mangler: Assign correct slot to shadowed function-expression
names (#21535) (Dunqing)
- 065ce47 isolated_declarations: Collect types from private accessors
for paired inference (#21516) (Dunqing)
- 00fc136 codegen: Preserve coverage comments before object properties
(#21312) (bab)
- d676e0c minifier: Mark LHS of `??=` as read when converting from `==
null &&` (#21546) (Gunnlaugur Thor Briem)

### ⚡ Performance

- e45efc5 parser: Reduce `try_parse` usage in favour of `lookahead`
(#21532) (Boshen)
- ddb1bf8 parser: Avoid redundant `IdentifierReference` clone in
shorthand property (#21511) (Boshen)
- be2b392 allocator: Store pointers directly in `Arena` (#21483)
(overlookmotel)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
Co-authored-by: Cameron <cameron.clark@hey.com>
2026-04-20 20:29:50 +01:00
bab 00fc13620d fix(codegen): preserve coverage comments before object properties (#21312)
Closes #21302

---------

Co-authored-by: Dunqing <dengqing0821@gmail.com>
2026-04-20 12:51:01 +08:00
Boshen 836fe9d51c release(crates): oxc v0.126.0 (#21471)
### 💥 BREAKING CHANGES

- 24fb7eb allocator: [**BREAKING**] Rename `Box` and `Vec` methods
(#21395) (overlookmotel)

### 🚀 Features

- ce5072d parser: Support `turbopack` magic comments (#20803) (Kane
Wang)
- f5deb55 napi/transform: Expose `optimizeConstEnums` and
`optimizeEnums` options (#21388) (Dunqing)
- 24b03de data_structures: Introduce `NonNullConst` and `NonNullMut`
pointer types (#21425) (overlookmotel)

### 🐛 Bug Fixes

- d7a359a ecmascript: Treat update expressions as unconditionally
side-effectful (#21456) (Dunqing)
- 56af2f4 transformer/async-to-generator: Correct scope of inferred
named FE in async-to-generator (#21458) (Dunqing)
- b3ed467 minifier: Avoid illegal `var;` when folding unused arguments
copy loop (#21421) (fazba)
- b0e8f13 minifier: Preserve `var` inside `catch` with same-named
parameter (#21366) (Dunqing)
- 4fb73a7 transformer/typescript: Preserve execution order for accessor
with `useDefineForClassFields: false` (#21369) (Dunqing)

### ⚡ Performance

- da3cc16 parser: Refactor out `LexerContext` (#21275) (Ulrich Stark)

### 📚 Documentation

- c5b19bb allocator: Reformat comments in `Arena` (#21448)
(overlookmotel)
- 091e88e lexer: Update doc comment about perf benefit of reading
through references (#21423) (overlookmotel)
- 922cbee allocator: Remove references to "bump" from comments (#21397)
(overlookmotel)

Co-authored-by: Dunqing <29533304+Dunqing@users.noreply.github.com>
2026-04-16 09:38:51 +08:00
Boshen fb6b1b053f release(crates): oxc v0.125.0 (#21374)
### 💥 BREAKING CHANGES

- 36cdc31 str: [**BREAKING**] Remove identity `FromIn` impl for `Ident`
(#21251) (overlookmotel)
- 382958a span: [**BREAKING**] Remove re-exports of string types from
`oxc_span` crate (#21246) (overlookmotel)
- c4aedfa str: [**BREAKING**] Add `static_ident!` macro (#21245)
(overlookmotel)

### 🚀 Features

- e7e1aea transformer/typescript: Add `optimize_enums` option for
regular enum inlining (#20539) (Dunqing)
- 679f57f transformer/typescript: Implement const enum inlining and
declaration removal (#20508) (Dunqing)
- 6dd061c semantic: Extend `MemberWriteTarget` to cover all property
modification patterns (#21205) (Dunqing)
- f134e24 minifier: Support `property_write_side_effects` option to drop
unused property assignments (#20773) (Dunqing)
- 75663c0 semantic: Add enum member value evaluation for const enum
support (#20602) (Dunqing)
- 3cfe8ed semantic: Add `MemberWriteTarget` flag to `ReferenceFlags`
(#20772) (Dunqing)

### 🐛 Bug Fixes

- af1a586 transformer/class-properties: Use correct property name when
converting parameter properties (#21268) (Amal Jossy)
- b43250a allocator: Move allocation tracking into `Bump` (#21342)
(overlookmotel)
- 36f505f allocator: `StringBuilder` use `Allocator::alloc_layout`
(#21340) (overlookmotel)
- 7a08a6f allocator: Fix allocation counting in
`Allocator::alloc_concat_strs_array` (#21336) (overlookmotel)
- 2338e28 ecmascript: Treat `this` as potentially having side effects
(#21297) (sapphi-red)
- bd8bd39 allocator: Remove unsafe hacks from `from_raw_parts` methods
(#21283) (overlookmotel)
- 8f4c340 allocator: Remove dangerous pointer const to mut cast (#21279)
(overlookmotel)
- aa9259f parser: Add missing error code for optional param diagnostic
(#21258) (camc314)
- 04b3c2f str: Fix unsound casting const pointers to mut pointers
(#21242) (overlookmotel)
- ceadf6c str: Make `Ident::from_raw` an unsafe function (#21241)
(overlookmotel)
- eab13b3 transformer/decorators: Avoid accessor storage name collisions
(#21106) (Dunqing)
- 07e8a30 transformer/react-refresh: Handle parenthesized variable
initializers (#21047) (camc314)

### ⚡ Performance

- c3ca6f6 allocator: `StringBuilder::from_strs_array_in` check for 0
length earlier (#21338) (overlookmotel)
- c2422bb allocator: `Allocator::alloc_concat_strs_array` check for 0
length earlier (#21337) (overlookmotel)
- 04b0fdc allocator: Mark `Allocator::alloc_layout` as
`#[inline(always)]` (#21335) (overlookmotel)
- 17aee9e allocator: Use `offset_from_unsigned` in
`ChunkFooter::as_raw_parts` (#21280) (overlookmotel)
- 61adedd minifier: Fix O(n²) perf on very many var decls (#21062)
(Gunnlaugur Thor Briem)
- addcd02 napi/parser, linter/plugins: Raw transfer deserializer for
`Vec`s use shift instead of multiply where possible (#21142)
(overlookmotel)
- 3068ded napi/parser, linter/plugins: Shift before add when calculating
positions in raw transfer deserializer (#21141) (overlookmotel)
- eb400b8 napi/parser, linter/plugins: Remove `uint32` buffer view
(#21140) (overlookmotel)
- 2675085 napi/parser: Lazy deserialization use only `Int32Array`
(#21139) (overlookmotel)
- 5b35a53 napi/parser: Deserializing tokens use only `int32` array
(#21138) (overlookmotel)
- f163d10 parser: Tokens raw deserialization use `Int32Array` (#21137)
(overlookmotel)
- 7a86613 linter/plugins: Use `Int32Array`s for tokens and comments
buffers (#21136) (overlookmotel)
- 8c51121 napi/parser, linter/plugins: Raw transfer deserialize `Span`
fields as `i32`s (#21135) (overlookmotel)
- bc1bcdd napi/parser, linter/plugins: Inline trivial raw transfer field
deserializers into node object definitions (#21134) (overlookmotel)
- c0278ab napi/parser, linter/plugins: Use `Int32Array` in raw transfer
deserializer (#21132) (overlookmotel)
- 43482c7 linter/plugins: Use `>>` not `>>>` in binary search loops
(#21129) (overlookmotel)

### 📚 Documentation

- f5e1845 allocator: Upgrade headers in doc comments for `Bump` (#21263)
(overlookmotel)
- 2870174 allocator: Upper case `SAFETY` in comments (#21253)
(overlookmotel)
- 01bc269 str: Reformat `Ident` doc comments (#21240) (overlookmotel)
- dd47359 allocator: Add doc comments for panics and errors (#21230)
(overlookmotel)
2026-04-13 11:25:53 +01:00
renovate 9d617b8fc7 chore(deps): update npm packages (#21345)
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [@napi-rs/wasm-runtime](https://napi.rs/) ([source](https://redirect.github.com/napi-rs/napi-rs/tree/HEAD/wasm-runtime)) | [`1.1.2` → `1.1.3`](https://renovatebot.com/diffs/npm/@napi-rs%2fwasm-runtime/1.1.2/1.1.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fwasm-runtime/1.1.3?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fwasm-runtime/1.1.3?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fwasm-runtime/1.1.2/1.1.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fwasm-runtime/1.1.2/1.1.3?slim=true) |
| [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.58.0` → `8.58.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.58.0/8.58.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.58.1?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/8.58.1?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/8.58.0/8.58.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.58.0/8.58.1?slim=true) |
| [@typescript-eslint/scope-manager](https://typescript-eslint.io/packages/scope-manager) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/scope-manager)) | [`8.58.0` → `8.58.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fscope-manager/8.58.0/8.58.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fscope-manager/8.58.1?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fscope-manager/8.58.1?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fscope-manager/8.58.0/8.58.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fscope-manager/8.58.0/8.58.1?slim=true) |
| [@typescript-eslint/visitor-keys](https://typescript-eslint.io) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/visitor-keys)) | [`8.58.0` → `8.58.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fvisitor-keys/8.58.0/8.58.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fvisitor-keys/8.58.1?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fvisitor-keys/8.58.1?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fvisitor-keys/8.58.0/8.58.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fvisitor-keys/8.58.0/8.58.1?slim=true) |
| [@vitest/browser](https://vitest.dev/guide/browser/) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser)) | [`4.1.2` → `4.1.4`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/4.1.2/4.1.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/4.1.4?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/4.1.4?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/4.1.2/4.1.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/4.1.2/4.1.4?slim=true) |
| [@vitest/browser-playwright](https://vitest.dev/config/browser/playwright) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser-playwright)) | [`4.1.2` → `4.1.4`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser-playwright/4.1.2/4.1.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser-playwright/4.1.4?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser-playwright/4.1.4?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser-playwright/4.1.2/4.1.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser-playwright/4.1.2/4.1.4?slim=true) |
| [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.1.2` → `4.1.4`](https://renovatebot.com/diffs/npm/vitest/4.1.2/4.1.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/4.1.4?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/4.1.4?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/4.1.2/4.1.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/4.1.2/4.1.4?slim=true) |

---

### Release Notes

<details>
<summary>napi-rs/napi-rs (@&#8203;napi-rs/wasm-runtime)</summary>

### [`v1.1.3`](https://redirect.github.com/napi-rs/napi-rs/blob/HEAD/wasm-runtime/CHANGELOG.md#113-2026-04-08)

[Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/wasm-runtime@1.1.2...@napi-rs/wasm-runtime@1.1.3)

**Note:** Version bump only for package [@&#8203;napi-rs/wasm-runtime](https://redirect.github.com/napi-rs/wasm-runtime)

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/parser)</summary>

### [`v8.58.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8581-2026-04-08)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.58.0...v8.58.1)

This was a version bump only for parser to align it with other projects, there were no code changes.

See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.58.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/scope-manager)</summary>

### [`v8.58.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/scope-manager/CHANGELOG.md#8581-2026-04-08)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.58.0...v8.58.1)

This was a version bump only for scope-manager to align it with other projects, there were no code changes.

See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.58.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/visitor-keys)</summary>

### [`v8.58.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/visitor-keys/CHANGELOG.md#8581-2026-04-08)

[Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.58.0...v8.58.1)

This was a version bump only for visitor-keys to align it with other projects, there were no code changes.

See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.58.1) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>vitest-dev/vitest (@&#8203;vitest/browser)</summary>

### [`v4.1.4`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.4)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4)

#####    🚀 Experimental Features

- **coverage**:
  - Default to text reporter `skipFull` if agent detected  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;10018](https://redirect.github.com/vitest-dev/vitest/issues/10018) [<samp>(53757)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/53757804c)
- **experimental**:
  - Expose `assertion` as a public field  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;10095](https://redirect.github.com/vitest-dev/vitest/issues/10095) [<samp>(a120e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a120e3ab8)
  - Support aria snapshot  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa), **Claude Opus 4.6 (1M context)**, [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio), **Codex** and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9668](https://redirect.github.com/vitest-dev/vitest/issues/9668) [<samp>(d4fbb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d4fbb5cc9)
- **reporter**:
  - Add filterMeta option to json reporter  -  by [@&#8203;nami8824](https://redirect.github.com/nami8824) and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;10078](https://redirect.github.com/vitest-dev/vitest/issues/10078) [<samp>(b77de)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b77de968e)

#####    🐞 Bug Fixes

- Use "black" foreground for labeled terminal message to ensure contrast  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;10076](https://redirect.github.com/vitest-dev/vitest/issues/10076) [<samp>(203f0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/203f07af7)
- Make `expect(..., message)` consistent as error message prefix  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Codex** in [#&#8203;10068](https://redirect.github.com/vitest-dev/vitest/issues/10068) [<samp>(a1b5f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a1b5f0f4f)
- Do not hoist imports whose names match class properties .  -  by [@&#8203;SunsetFi](https://redirect.github.com/SunsetFi) in [#&#8203;10093](https://redirect.github.com/vitest-dev/vitest/issues/10093) and [#&#8203;10094](https://redirect.github.com/vitest-dev/vitest/issues/10094) [<samp>(0fc4b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0fc4b47e0)
- **browser**: Spread user server options into browser Vite server in project  -  by [@&#8203;GoldStrikeArch](https://redirect.github.com/GoldStrikeArch) in [#&#8203;10049](https://redirect.github.com/vitest-dev/vitest/issues/10049) [<samp>(65c9d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/65c9d55eb)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4)

### [`v4.1.3`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.3)

[Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3)

#####    🚀 Experimental Features

- Add `experimental.preParse` flag  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;10070](https://redirect.github.com/vitest-dev/vitest/issues/10070) [<samp>(78273)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7827363bd)
- Support `browser.locators.exact` option  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;10013](https://redirect.github.com/vitest-dev/vitest/issues/10013) [<samp>(48799)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/487990a19)
- Add `TestAttachment.bodyEncoding`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9969](https://redirect.github.com/vitest-dev/vitest/issues/9969) [<samp>(89ca0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/89ca0e254)
- Support custom snapshot matcher  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa), **Claude Sonnet 4.6** and **Codex** in [#&#8203;9973](https://redirect.github.com/vitest-dev/vitest/issues/9973) [<samp>(59b0e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/59b0e6411)

#####    🐞 Bug Fixes

- Advance fake timers with `expect.poll` interval  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#&#8203;10022](https://redirect.github.com/vitest-dev/vitest/issues/10022) [<samp>(3f5bf)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3f5bfa365)
- Add `@vitest/coverage-v8` and `@vitest/coverage-istanbul` as optional dependency  -  by [@&#8203;alan-agius4](https://redirect.github.com/alan-agius4) in [#&#8203;10025](https://redirect.github.com/vitest-dev/vitest/issues/10025) [<samp>(146d4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/146d4f0a0)
- Fix `defineHelper` for webkit async stack trace + update playwright 1.59.0  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;10036](https://redirect.github.com/vitest-dev/vitest/issues/10036) [<samp>(5a5fa)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5a5fa49fe)
- Fix suite hook throwing errors for unused auto test-scoped fixture  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#&#8203;10035](https://redirect.github.com/vitest-dev/vitest/issues/10035) [<samp>(39865)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/398657e8d)
- **expect**:
  - Remove `JestExtendError.context` from verbose error reporting  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9983](https://redirect.github.com/vitest-dev/vitest/issues/9983) [<samp>(66751)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/66751c9e8)
  - Don't leak "runner" types  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;10004](https://redirect.github.com/vitest-dev/vitest/issues/10004) [<samp>(ec204)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ec2045543)
- **snapshot**:
  - Fix flagging obsolete snapshots for snapshot properties mismatch  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#&#8203;9986](https://redirect.github.com/vitest-dev/vitest/issues/9986) [<samp>(6b869)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6b869156b)
  - Export custom snapshot matcher helper from `vitest`  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Codex** in [#&#8203;10042](https://redirect.github.com/vitest-dev/vitest/issues/10042) [<samp>(691d3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/691d341fd)
- **ui**:
  - Don't leak vite types  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;10005](https://redirect.github.com/vitest-dev/vitest/issues/10005) [<samp>(fdff1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fdff1bf9a)
- **vm**:
  - Fix external module resolve error with deps optimizer query  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#&#8203;10024](https://redirect.github.com/vitest-dev/vitest/issues/10024) [<samp>(9dbf4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9dbf47786)

#####     [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3)

</details>

---

### Configuration

📅 **Schedule**: (in timezone Asia/Shanghai)

- Branch creation
  - "before 10am on monday"
- Automerge
  - At any time (no schedule defined)

🚦 **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/oxc-project/oxc).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMTAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjExMC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2026-04-12 20:05:31 +00:00
overlookmotel 382958afa8 feat(span)!: remove re-exports of string types from oxc_span crate (#21246)
For historical reasons, `oxc_span` crate was re-exporting string types which now live in `oxc_str` crate.

Remove these re-exports, and import these types directly from `oxc_str`.

Main motivation is just that it makes sense, but it should also have a minor positive effect on compile times - `oxc_span` and `oxc_str` crates can now be compiled in parallel.
2026-04-09 12:06:21 +00:00