Commit Graph

811 Commits

Author SHA1 Message Date
overlookmotel 8b89309f57 test(napi/parser): fix tests for range, parent, and lazy on TS fixtures (#19884)
`napi/parser`'s tests for raw transfer ranges, parents, and lazy deserialization were incorrect. They were testing parsing the entire TS fixture file, which can contain multiple parts, instead of testing each part individually. Fix that.
2026-03-01 17:40:05 +00:00
camc314 6a6513c6ab perf(linter/plugins): use Oxc tokens in plugins (#19498)
Builds on #19497. Use the tokens generated by Oxc's parser in linter plugins, instead of running TS parser to tokenize source.

This is a sizeable perf gain, and also allows us to remove TS parser from `oxlint`'s bundle (#19531).

Additionally, our parser is more accurate  than TypeScript - we handle HTML comments and space before slash in closing JSX elements (`< /div>`) - so this fixes a few conformance tests.
2026-02-24 11:31:04 +00:00
Boshen 2fa936fd2b docs(README.md): map npm package links to npmx.dev (#19666)
## Summary
- replace npm package links from npmjs.com to https://npmx.dev
- only update documentation files

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-02-24 15:26:21 +08:00
Boshen 7675bc43e7 release(crates): oxc v0.115.0 (#19626)
### 🚀 Features

- e814049 oxc_data_structure/rope: Add `get_offset_from_line_and_column`
(#18133) (Sysix)

### 🐛 Bug Fixes

- 7958b56 linter: Fix syntax error reporting in some output formatters.
(#19590) (connorshea)
- e316694 codegen: Avoid sourcemap panic on `U+2028`/`U+2029` (#19548)
(camc314)
- 933ff72 semantic: Emit correct error code for reserved type name
(#19545) (camc314)

### ⚡ Performance

- b5fa195 codegen: Remove bounds check from `SourcemapBuilder` (#19578)
(overlookmotel)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2026-02-23 10:07:11 +00:00
camc314 08b0218dd6 chore(submodules): update submodule SHAs to latest commits (#19518) 2026-02-18 14:56:36 +00:00
Boshen 704c109d6d release(crates): oxc v0.114.0 (#19429)
### 🚀 Features

- 429d876 semantic: Assign ast node ids during semantic build (#19263)
(Boshen)
- ebb80b3 ast: Add `node_id` field to all AST struct nodes (#18138)
(Boshen)

### 🐛 Bug Fixes

- bfb15a3 semantic: Make multi_index_vec clone panic-safe (#19299)
(Boshen)
- 41c50a5 transformer: Ignore invalid JSX pragma identifiers (#19296)
(Boshen)
- deed3d8 transformer: Remove unnecessary trailing expression in object
rest spread assignment (#19259) (Boshen)
- 5bdaacc transformer: Propagate source spans for sourcemap correctness
(#19258) (Boshen)
- 3e0e5ba isolated-declarations: Align readonly class array initializer
diagnostics with tsc (#19218) (camc314)

### ⚡ Performance

- c169c77 syntax: Optimize `is_identifier_name_patched` (#19386)
(sapphi-red)
- aa1e1a8 allocator: Inline BitSet accessors (#19331) (Boshen)
- 5b90d46 semantic: Improve SoA with multi index vec (#19138) (Boshen)
- 99ce2a6 isolated_declarations: Mark all diagnostic functions as
`#[cold]` (#19279) (camc314)
- dd0220f transformer: Remove TS-only nodes earlier in
`enter_statements` (#19166) (Dunqing)
- e5baf60 isolated-declarations: Replace hash collections with
index-based Vec (#19221) (Dunqing)

### 📚 Documentation

- 569aa61 rust: Add missing rustdocs and remove missing_docs lint attrs
(#19306) (Boshen)
2026-02-16 13:03:46 +00:00
Boshen ebb80b32ff feat(ast): add node_id field to all AST struct nodes (#18138)
## Summary

- Add `pub node_id: NodeId` as the first field in all AST structs (~190 structs across js.rs, ts.rs, jsx.rs, literal.rs)
- Update codegen to special-case `node_id`:
  - `Dummy`: Use `NodeId::DUMMY` instead of `Dummy::dummy(allocator)`
  - `CloneIn`: Use `NodeId::DUMMY` for regular clone, preserve ID for semantic clone
  - `ContentEq`: Skip `node_id` from equality comparisons
  - `ESTree`: Skip `node_id` from serialization
  - `AstBuilder`: Exclude `node_id` from builder parameters, use `NodeId::DUMMY`
- Update pattern matching in minifier and transformer to use `..` for new field
- Update traverse script to include `NodeId` import

This is the foundational step for assigning unique IDs to AST nodes. The `node_id` defaults to `NodeId::DUMMY` (value 0) for uninitialized nodes.

## Test plan

- [x] `cargo build` succeeds
- [x] `cargo test` passes
- [x] `just ast` regenerates code correctly

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-02-12 08:06:28 +00:00
Cameron bcd0f6430f fix(napi): disable mimalloc global allocator on android targets (#19214) 2026-02-10 19:06:06 +08:00
Boshen acdb40ed42 release(crates): oxc v0.113.0 (#19210)
### 💥 BREAKING CHANGES

- 2bf7293 mangler: [**BREAKING**] Enable `top_level` by default for
modules and commonjs (#18278) (sapphi-red)
- 48b0542 span: [**BREAKING**] SourceType::ts should set module to
unambigious (#18873) (Boshen)

### 🚀 Features

- 500d071 minifier: Local traverse ctx and generated minifier traverse
(#19106) (Boshen)
- 142a1be parser: Detect binary files with TS1490 error (#19047)
(Boshen)
- e316857 allocator/bitset: Add `Ones` iterator to `BitSet` (#19027)
(sapphi-red)
- 742ad3f minifier: Default `invalid_import_side_effects` to `false`
(#18916) (sapphi-red)
- 0eff6be parser: Error JSX-like type assertions and generics in
`.mts`/`.cts` (#18910) (Boshen)
- 18320c6 span: Store file extension in `SourceType` (#18893) (Boshen)

### 🐛 Bug Fixes

- a7514e4 isolated-declarations: Preserve const context in literal type
inference (#19178) (camc314)
- 312e756 isolated-declarations: Preserve readonly literal initializers
(#19177) (camc314)
- d0ca8d0 isolated-declarations: Skip parenthesis when inferring type
(#19176) (camc314)
- 110c300 oxc_ecmascript: `+[false]` and `+[true]` should evaluate to
`NaN` (#19174) (copilot-swe-agent)
- f32ea19 semantic: Report redeclaration error for import bindings
conflicting with value declarations (#19068) (Boshen)
- 3aeba7a semantic: Report redeclaration error for `function a() {} var
a` in module mode (#19041) (Boshen)
- 35e32c6 coverage: Match Babel's options.json inheritance for test
fixtures (#19002) (Boshen)
- 463d60d semantic: Skip TS2391 for standalone computed-name class
methods (#19025) (Boshen)
- 56c086b parser: Add modifier ordering validation (TS1029) (#19024)
(Boshen)
- 6067a49 linter/jsdoc: False positive in `check-tag-names` for `@` in
email addresses and npm scopes (#19021) (Boshen)
- b13bb70 semantic/jsdoc: Inline tags like `{@link}` break jsdoc parsing
(#19019) (Boshen)
- e3609e3 regular_expression: Preserve UnicodeEscape CharacterKind in
string literals (#18998) (Boshen)
- 57917ee parser: Parse decorators on rest parameters (#18938) (Boshen)
- 487601b napi: Disable mimalloc on Windows to fix worker_threads crash
(#18923) (Boshen)
- 1f6b193 parser: Validate TypeScript import type options (#18889)
(Boshen)
- 1663184 parser: Allow conditional types in function type parameters
(#18886) (Boshen)
- 5758046 parser: Error on property access after instantiation
expression (#18887) (Boshen)
- 5eb4a94 parser: Handle `<<` as two `<` tokens in type argument
contexts (#18885) (Boshen)

### ⚡ Performance

- ed8c054 oxc_str: Add precomputed hash to Ident for fast HashMap
lookups (#19143) (Boshen)
- d4a0867 transformer_plugins: Switch ReplaceGlobalDefines from Traverse
to VisitMut (#19146) (Boshen)
- 9eb16b3 syntax: Pack ASCII identifier tables into single bitflag table
(#19088) (Boshen)
- e7595d1 mangler: Use BitSet for exported symbols set (#19023)
(sapphi-red)
- 2537924 semantic: Optimize scope resolution with fast paths and
inlining (#19029) (Boshen)
- 69a8d85 mangler: Use BitSet for keep_names symbols set (#19028)
(sapphi-red)
- f78c525 parser: Try hybrid parsing for jsx children and closing
element/fragments (#18789) (camchenry)

Co-authored-by: camc314 <18101008+camc314@users.noreply.github.com>
2026-02-10 09:57:59 +00:00
camc314 00d431d957 chore(oxlint,parser,e2e): explicitly set strict: false in tsconfigs (#19129)
fixes the failures seen in https://github.com/oxc-project/oxc/pull/19128
2026-02-09 09:35:27 +00:00
Boshen 79689ba59b chore(napi/parser): use dot reporter in CI to reduce log output (#18974)
## Summary

- Use `dot` reporter in CI to avoid logging ~58,000 test names from
`parse-raw.test.ts`
- `parse-raw.test.ts` runs test cases via `it.each()` from Test262
(~46k), TypeScript (~11k), and JSX (~40) fixtures

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 18:05:46 +08:00
Boshen 57917eef0f fix(parser): parse decorators on rest parameters (#18938)
## Summary
- Add `decorators` field to `FormalParameterRest` to support decorators on rest parameters in TypeScript
- Parse decorators before checking for rest parameters in formal parameter lists
- Update semantic builder to visit decorators on rest parameters

Fixes parsing of `typescript/tests/cases/compiler/sourceMapValidationDecorators.ts`

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-02-05 09:54:47 +00:00
Boshen 487601baca fix(napi): disable mimalloc on Windows to fix worker_threads crash (#18923)
## Summary

- Disable mimalloc as the global allocator on Windows for all NAPI packages (`oxc-parser`, `oxc-minify`, `oxc-transform`)
- On Windows, packages now use the system allocator instead

Fixes #15518

## Root Cause

mimalloc has known issues with DLL unloading on Windows when the DLL is loaded by the main thread but unloaded by a worker thread ([mimalloc issue #288](https://github.com/microsoft/mimalloc/issues/288)). The cleanup code has `_mi_is_main_thread()` checks that prevent proper memory cleanup when called from a non-main thread, causing `STATUS_ACCESS_VIOLATION` crashes.

## Platforms with mimalloc enabled

| Platform | mimalloc |
|----------|----------|
| macOS | ✅ |
| Linux x86_64 | ✅ |
| Linux aarch64 | ✅ |
| Windows | ❌ (disabled) |
| FreeBSD | ❌ |
| ARM 32-bit | ❌ |
| WASM | ❌ |

🤖 Generated with [Claude Code](https://claude.ai/code)
2026-02-04 07:44:37 +00:00
Boshen 16fbd43f12 chore(submodules): update submodule SHAs to latest commits (#18877) 2026-02-03 16:46:48 +08:00
Boshen 6114a1335e release(crates): oxc v0.112.0 (#18842)
### 💥 BREAKING CHANGES

- 445cb1a oxc_allocator: [**BREAKING**] Remove dangerous `Allocator`
methods (#18715) (overlookmotel)

### 🚀 Features

- 8670b18 parser: Error on ambient class accessor implementations
(#18592) (camc314)

### 🐛 Bug Fixes

- 2e34461 minifier: Prevent expression inlining into block-scoped for-in
declarations (#18651) (copilot-swe-agent)

### 📚 Documentation

- 3d01fa1 transformer: Update links to use Oxc docs (#18722)
(sapphi-red)

Co-authored-by: camc314 <18101008+camc314@users.noreply.github.com>
2026-02-02 09:44:24 +00:00
overlookmotel e39a983ce3 refactor(linter/plugins): store source text in end of buffer (#18714)
Previously we had to store source text at start of buffers sent to JS via raw transfer.

#18376 made changes to how raw transfer deserializer handles strings, in order to support files containing a BOM. Building on that, we're now able to remove the requirement that source text be at start of the buffer entirely.

This PR changes the deserializer used in Oxlint JS plugins to accept source text being anywhere in the buffer, *as long as no other strings are after it*. In practice this just means that the source text must be allocated before anything else, which is easy to satisfy.

Now the source text can be allocated with just the usual safe `allocator.alloc_str(source_text)` method.

This change removes a ton of dodgy workarounds and unsafe code we used previously to get source text at the start of buffer. It makes the code less labyrinthine and far less likely a slip up can inadvertently introduce UB.

Note: In `napi/parser`, source text still *is* at start of the buffer, as that's simpler and more efficient when the source text is written into the buffer on JS side. This change only affects Oxlint.
2026-01-30 00:52:09 +00:00
overlookmotel 3d349ca4d3 refactor(linter/plugins): bump @typescript-eslint/scope-manager dependency (#18632)
Closes #18398.

Bump `@typescript-eslint/scope-manager` to latest. That release contains 2 bug fixes:

* https://github.com/typescript-eslint/typescript-eslint/pull/11982
* https://github.com/typescript-eslint/typescript-eslint/pull/11995

We had workarounds for both bugs, added in:

* #18312
* #18402

This PR bumps dependency to the new version which included the big fixes, and removes both workarounds, as they're no longer required.

Also bumped all other usages of `@typescript-eslint/*` packages, so we use the same versions for everything.
2026-01-27 17:33:44 +00:00
renovate 942663d9f7 chore(deps): update npm packages (#18582)
> ℹ️ **Note**
>
> This PR body was truncated due to platform limits.

This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [@babel/core](https://babel.dev/docs/en/next/babel-core) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-core)) | [`7.28.5` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fcore/7.28.5/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fcore/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fcore/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fcore/7.28.5/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fcore/7.28.5/7.28.6?slim=true) |
| [@babel/plugin-proposal-decorators](https://babel.dev/docs/en/next/babel-plugin-proposal-decorators) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-decorators)) | [`7.28.0` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-proposal-decorators/7.28.0/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-proposal-decorators/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-proposal-decorators/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-proposal-decorators/7.28.0/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-proposal-decorators/7.28.0/7.28.6?slim=true) |
| [@babel/plugin-transform-async-to-generator](https://babel.dev/docs/en/next/babel-plugin-transform-async-to-generator) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-async-to-generator)) | [`7.27.1` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-transform-async-to-generator/7.27.1/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-transform-async-to-generator/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-transform-async-to-generator/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-transform-async-to-generator/7.27.1/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-transform-async-to-generator/7.27.1/7.28.6?slim=true) |
| [@babel/plugin-transform-class-properties](https://babel.dev/docs/en/next/babel-plugin-transform-class-properties) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-class-properties)) | [`7.27.1` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-transform-class-properties/7.27.1/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-transform-class-properties/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-transform-class-properties/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-transform-class-properties/7.27.1/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-transform-class-properties/7.27.1/7.28.6?slim=true) |
| [@babel/plugin-transform-class-static-block](https://babel.dev/docs/en/next/babel-plugin-transform-class-static-block) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-class-static-block)) | [`7.28.3` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-transform-class-static-block/7.28.3/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-transform-class-static-block/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-transform-class-static-block/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-transform-class-static-block/7.28.3/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-transform-class-static-block/7.28.3/7.28.6?slim=true) |
| [@babel/plugin-transform-explicit-resource-management](https://babel.dev/docs/en/next/babel-plugin-transform-explicit-resource-management) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-explicit-resource-management)) | [`7.28.0` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-transform-explicit-resource-management/7.28.0/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-transform-explicit-resource-management/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-transform-explicit-resource-management/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-transform-explicit-resource-management/7.28.0/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-transform-explicit-resource-management/7.28.0/7.28.6?slim=true) |
| [@babel/plugin-transform-exponentiation-operator](https://babel.dev/docs/en/next/babel-plugin-transform-exponentiation-operator) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-exponentiation-operator)) | [`7.28.5` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-transform-exponentiation-operator/7.28.5/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-transform-exponentiation-operator/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-transform-exponentiation-operator/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-transform-exponentiation-operator/7.28.5/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-transform-exponentiation-operator/7.28.5/7.28.6?slim=true) |
| [@babel/plugin-transform-logical-assignment-operators](https://babel.dev/docs/en/next/babel-plugin-transform-logical-assignment-operators) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-logical-assignment-operators)) | [`7.28.5` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-transform-logical-assignment-operators/7.28.5/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-transform-logical-assignment-operators/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-transform-logical-assignment-operators/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-transform-logical-assignment-operators/7.28.5/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-transform-logical-assignment-operators/7.28.5/7.28.6?slim=true) |
| [@babel/plugin-transform-optional-chaining](https://babel.dev/docs/en/next/babel-plugin-transform-optional-chaining) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-optional-chaining)) | [`7.28.5` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-transform-optional-chaining/7.28.5/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-transform-optional-chaining/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-transform-optional-chaining/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-transform-optional-chaining/7.28.5/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-transform-optional-chaining/7.28.5/7.28.6?slim=true) |
| [@babel/plugin-transform-private-methods](https://babel.dev/docs/en/next/babel-plugin-transform-private-methods) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-private-methods)) | [`7.27.1` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-transform-private-methods/7.27.1/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-transform-private-methods/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-transform-private-methods/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-transform-private-methods/7.27.1/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-transform-private-methods/7.27.1/7.28.6?slim=true) |
| [@babel/plugin-transform-private-property-in-object](https://babel.dev/docs/en/next/babel-plugin-transform-private-property-in-object) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-private-property-in-object)) | [`7.27.1` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-transform-private-property-in-object/7.27.1/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-transform-private-property-in-object/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-transform-private-property-in-object/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-transform-private-property-in-object/7.27.1/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-transform-private-property-in-object/7.27.1/7.28.6?slim=true) |
| [@babel/plugin-transform-typescript](https://babel.dev/docs/en/next/babel-plugin-transform-typescript) ([source](https://redirect.github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-typescript)) | [`7.28.5` → `7.28.6`](https://renovatebot.com/diffs/npm/@babel%2fplugin-transform-typescript/7.28.5/7.28.6) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fplugin-transform-typescript/7.28.6?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fplugin-transform-typescript/7.28.6?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fplugin-transform-typescript/7.28.5/7.28.6?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fplugin-transform-typescript/7.28.5/7.28.6?slim=true) |
| [@napi-rs/wasm-runtime](https://napi.rs/) ([source](https://redirect.github.com/napi-rs/napi-rs/tree/HEAD/wasi-runtime)) | [`1.1.0` → `1.1.1`](https://renovatebot.com/diffs/npm/@napi-rs%2fwasm-runtime/1.1.0/1.1.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fwasm-runtime/1.1.1?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fwasm-runtime/1.1.1?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fwasm-runtime/1.1.0/1.1.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fwasm-runtime/1.1.0/1.1.1?slim=true) |
| [@vitest/browser](https://redirect.github.com/vitest-dev/vitest/tree/main/packages/browser#readme) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/browser)) | [`4.0.15` → `4.0.18`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser/4.0.15/4.0.18) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser/4.0.18?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser/4.0.18?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser/4.0.15/4.0.18?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser/4.0.15/4.0.18?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.0.15` → `4.0.18`](https://renovatebot.com/diffs/npm/@vitest%2fbrowser-playwright/4.0.15/4.0.18) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2fbrowser-playwright/4.0.18?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@vitest%2fbrowser-playwright/4.0.18?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@vitest%2fbrowser-playwright/4.0.15/4.0.18?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2fbrowser-playwright/4.0.15/4.0.18?slim=true) |
| [esbuild](https://redirect.github.com/evanw/esbuild) | [`0.27.1` → `0.27.2`](https://renovatebot.com/diffs/npm/esbuild/0.27.1/0.27.2) | ![age](https://developer.mend.io/api/mc/badges/age/npm/esbuild/0.27.2?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/esbuild/0.27.2?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/esbuild/0.27.1/0.27.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/esbuild/0.27.1/0.27.2?slim=true) |
| [eslint](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint)) | [`9.36.0` → `9.39.2`](https://renovatebot.com/diffs/npm/eslint/9.36.0/9.39.2) | ![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/9.39.2?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint/9.39.2?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint/9.36.0/9.39.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/9.36.0/9.39.2?slim=true) |
| [esquery](https://redirect.github.com/estools/esquery) | [`1.6.0` → `1.7.0`](https://renovatebot.com/diffs/npm/esquery/1.6.0/1.7.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/esquery/1.7.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/esquery/1.7.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/esquery/1.6.0/1.7.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/esquery/1.6.0/1.7.0?slim=true) |
| [ovsx](https://open-vsx.org) ([source](https://redirect.github.com/eclipse/openvsx/tree/HEAD/cli)) | [`0.10.7` → `0.10.8`](https://renovatebot.com/diffs/npm/ovsx/0.10.7/0.10.8) | ![age](https://developer.mend.io/api/mc/badges/age/npm/ovsx/0.10.8?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/ovsx/0.10.8?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/ovsx/0.10.7/0.10.8?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/ovsx/0.10.7/0.10.8?slim=true) |
| [playwright](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`1.57.0` → `1.58.0`](https://renovatebot.com/diffs/npm/playwright/1.57.0/1.58.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/playwright/1.58.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/playwright/1.58.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/playwright/1.57.0/1.58.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright/1.57.0/1.58.0?slim=true) |
| [pnpm](https://pnpm.io) ([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm)) | [`10.24.0` → `10.28.1`](https://renovatebot.com/diffs/npm/pnpm/10.24.0/10.28.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/pnpm/10.28.1?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/pnpm/10.28.1?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/pnpm/10.24.0/10.28.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/pnpm/10.24.0/10.28.1?slim=true) |
| [prettier](https://prettier.io) ([source](https://redirect.github.com/prettier/prettier)) | [`3.8.0` → `3.8.1`](https://renovatebot.com/diffs/npm/prettier/3.8.0/3.8.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.8.1?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier/3.8.1?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier/3.8.0/3.8.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.8.0/3.8.1?slim=true) |
| [publint](https://publint.dev) ([source](https://redirect.github.com/publint/publint/tree/HEAD/packages/publint)) | [`0.3.15` → `0.3.17`](https://renovatebot.com/diffs/npm/publint/0.3.15/0.3.17) | ![age](https://developer.mend.io/api/mc/badges/age/npm/publint/0.3.17?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/publint/0.3.17?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/publint/0.3.15/0.3.17?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/publint/0.3.15/0.3.17?slim=true) |
| [tinypool](https://redirect.github.com/tinylibs/tinypool) | [`2.0.0` → `2.1.0`](https://renovatebot.com/diffs/npm/tinypool/2.0.0/2.1.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/tinypool/2.1.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tinypool/2.1.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tinypool/2.0.0/2.1.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tinypool/2.0.0/2.1.0?slim=true) |
| [type-fest](https://redirect.github.com/sindresorhus/type-fest) | [`5.3.0` → `5.4.1`](https://renovatebot.com/diffs/npm/type-fest/5.3.0/5.4.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/type-fest/5.4.1?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/type-fest/5.4.1?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/type-fest/5.3.0/5.4.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/type-fest/5.3.0/5.4.1?slim=true) |
| [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.0.15` → `4.0.18`](https://renovatebot.com/diffs/npm/vitest/4.0.15/4.0.18) | ![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/4.0.18?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/4.0.18?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/4.0.15/4.0.18?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/4.0.15/4.0.18?slim=true) |

---

### Release Notes

<details>
<summary>babel/babel (@&#8203;babel/core)</summary>

### [`v7.28.6`](https://redirect.github.com/babel/babel/compare/v7.28.5...v7.28.6)

[Compare Source](https://redirect.github.com/babel/babel/compare/v7.28.5...v7.28.6)

</details>

<details>
<summary>babel/babel (@&#8203;babel/plugin-proposal-decorators)</summary>

### [`v7.28.6`](https://redirect.github.com/babel/babel/releases/tag/v7.28.6)

[Compare Source](https://redirect.github.com/babel/babel/compare/v7.28.0...v7.28.6)

##### v7.28.6 (2026-01-12)

Thanks [@&#8203;kadhirash](https://redirect.github.com/kadhirash) and [@&#8203;kolvian](https://redirect.github.com/kolvian) for your first PRs!

##### 🐛 Bug Fix

- `babel-cli`, `babel-code-frame`, `babel-core`, `babel-helper-check-duplicate-nodes`, `babel-helper-fixtures`, `babel-helper-plugin-utils`, `babel-node`, `babel-plugin-transform-flow-comments`, `babel-plugin-transform-modules-commonjs`, `babel-plugin-transform-property-mutators`, `babel-preset-env`, `babel-traverse`, `babel-types`
  - [#&#8203;17589](https://redirect.github.com/babel/babel/pull/17589) Improve Unicode handling in code-frame tokenizer ([@&#8203;JLHwung](https://redirect.github.com/JLHwung))
- `babel-plugin-transform-regenerator`
  - [#&#8203;17556](https://redirect.github.com/babel/babel/pull/17556) fix: `transform-regenerator` correctly handles scope ([@&#8203;liuxingbaoyu](https://redirect.github.com/liuxingbaoyu))
- `babel-plugin-transform-react-jsx`
  - [#&#8203;17538](https://redirect.github.com/babel/babel/pull/17538) fix: Keep jsx comments ([@&#8203;liuxingbaoyu](https://redirect.github.com/liuxingbaoyu))

##### :nail\_care: Polish

- `babel-core`, `babel-standalone`
  - [#&#8203;17606](https://redirect.github.com/babel/babel/pull/17606) Polish(standalone): improve message on invalid preset/plugin ([@&#8203;JLHwung](https://redirect.github.com/JLHwung))

##### 🏠 Internal

- `babel-plugin-bugfix-v8-static-class-fields-redefine-readonly`, `babel-plugin-proposal-decorators`, `babel-plugin-proposal-import-attributes-to-assertions`, `babel-plugin-proposal-import-wasm-source`, `babel-plugin-syntax-async-do-expressions`, `babel-plugin-syntax-decorators`, `babel-plugin-syntax-destructuring-private`, `babel-plugin-syntax-do-expressions`, `babel-plugin-syntax-explicit-resource-management`, `babel-plugin-syntax-export-default-from`, `babel-plugin-syntax-flow`, `babel-plugin-syntax-function-bind`, `babel-plugin-syntax-function-sent`, `babel-plugin-syntax-import-assertions`, `babel-plugin-syntax-import-attributes`, `babel-plugin-syntax-import-defer`, `babel-plugin-syntax-import-source`, `babel-plugin-syntax-jsx`, `babel-plugin-syntax-module-blocks`, `babel-plugin-syntax-optional-chaining-assign`, `babel-plugin-syntax-partial-application`, `babel-plugin-syntax-pipeline-operator`, `babel-plugin-syntax-throw-expressions`, `babel-plugin-syntax-typescript`, `babel-plugin-transform-async-generator-functions`, `babel-plugin-transform-async-to-generator`, `babel-plugin-transform-class-properties`, `babel-plugin-transform-class-static-block`, `babel-plugin-transform-dotall-regex`, `babel-plugin-transform-duplicate-named-capturing-groups-regex`, `babel-plugin-transform-explicit-resource-management`, `babel-plugin-transform-exponentiation-operator`, `babel-plugin-transform-json-strings`, `babel-plugin-transform-logical-assignment-operators`, `babel-plugin-transform-nullish-coalescing-operator`, `babel-plugin-transform-numeric-separator`, `babel-plugin-transform-object-rest-spread`, `babel-plugin-transform-optional-catch-binding`, `babel-plugin-transform-optional-chaining`, `babel-plugin-transform-private-methods`, `babel-plugin-transform-private-property-in-object`, `babel-plugin-transform-regexp-modifiers`, `babel-plugin-transform-unicode-property-regex`, `babel-plugin-transform-unicode-sets-regex`
  - [#&#8203;17580](https://redirect.github.com/babel/babel/pull/17580) Allow Babel 8 in compatible Babel 7 plugins ([@&#8203;nicolo-ribaudo](https://redirect.github.com/nicolo-ribaudo))

##### :running\_woman: Performance

- `babel-plugin-transform-react-jsx`
  - [#&#8203;17555](https://redirect.github.com/babel/babel/pull/17555) perf: Use lighter traversal for jsx `__source,__self` ([@&#8203;liuxingbaoyu](https://redirect.github.com/liuxingbaoyu))

##### Committers: 7

- Babel Bot ([@&#8203;babel-bot](https://redirect.github.com/babel-bot))
- Eliot Pontarelli ([@&#8203;kolvian](https://redirect.github.com/kolvian))
- Huáng Jùnliàng ([@&#8203;JLHwung](https://redirect.github.com/JLHwung))
- Kadhirash Sivakumar ([@&#8203;kadhirash](https://redirect.github.com/kadhirash))
- Nicolò Ribaudo ([@&#8203;nicolo-ribaudo](https://redirect.github.com/nicolo-ribaudo))
- [@&#8203;liuxingbaoyu](https://redirect.github.com/liuxingbaoyu)
- coderaiser ([@&#8203;coderaiser](https://redirect.github.com/coderaiser))

</details>

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

### [`v1.1.1`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/wasm-runtime@1.1.0...@napi-rs/wasm-runtime@1.1.1)

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

</details>

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

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

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

#####    🚀 Experimental Features

- **experimental**: Add `onModuleRunner` hook to `worker.init`  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9286](https://redirect.github.com/vitest-dev/vitest/issues/9286) [<samp>(ea837)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ea837de7d)

#####    🐞 Bug Fixes

- Use `meta.url` in `createRequire`  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9441](https://redirect.github.com/vitest-dev/vitest/issues/9441) [<samp>(e0572)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e057281ca)
- **browser**: Hide injected data-testid attributes  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9503](https://redirect.github.com/vitest-dev/vitest/issues/9503) [<samp>(f8989)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f89899cd8)
- **ui**: Process artifact attachments when generating HTML reporter  -  by [@&#8203;macarie](https://redirect.github.com/macarie) in [#&#8203;9472](https://redirect.github.com/vitest-dev/vitest/issues/9472) [<samp>(22543)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/225435647)

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

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

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

#####    🚀 Experimental Features

- Support openTelemetry for browser mode  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9180](https://redirect.github.com/vitest-dev/vitest/issues/9180) [<samp>(1ec3a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1ec3a8b68)
- Support TRACEPARENT and TRACESTATE environment variables for OpenTelemetry context propagation  -  by [@&#8203;Copilot](https://redirect.github.com/Copilot), **hi-ogawa** and [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9295](https://redirect.github.com/vitest-dev/vitest/issues/9295) [<samp>(876cb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/876cb84c2)

#####    🐞 Bug Fixes

- Improve asymmetric matcher diff readability by unwrapping container matchers  -  by [@&#8203;Copilot](https://redirect.github.com/Copilot), **sheremet-va**, **hi-ogawa** and [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9330](https://redirect.github.com/vitest-dev/vitest/issues/9330) [<samp>(b2ec7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b2ec724a8)
- Improve runner error when importing outside of test context  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9335](https://redirect.github.com/vitest-dev/vitest/issues/9335) [<samp>(2dd3d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2dd3dd839)
- Replace crypto.randomUUID to allow insecure environments (fix [#&#8203;9](https://redirect.github.com/vitest-dev/vitest/issues/9)…  -  by [@&#8203;plusgut](https://redirect.github.com/plusgut) in [#&#8203;9339](https://redirect.github.com/vitest-dev/vitest/issues/9339) and [#&#8203;9](https://redirect.github.com/vitest-dev/vitest/issues/9) [<samp>(e6a3f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e6a3f8cc7)
- Handle null options in `addEventHandler` [#&#8203;9371](https://redirect.github.com/vitest-dev/vitest/issues/9371)  -  by [@&#8203;ThibautMarechal](https://redirect.github.com/ThibautMarechal) in [#&#8203;9372](https://redirect.github.com/vitest-dev/vitest/issues/9372) and [#&#8203;9371](https://redirect.github.com/vitest-dev/vitest/issues/9371) [<samp>(40841)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/40841ff00)
- Typo in browser.provider error  -  by [@&#8203;deammer](https://redirect.github.com/deammer) in [#&#8203;9394](https://redirect.github.com/vitest-dev/vitest/issues/9394) [<samp>(4b67f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4b67fc25a)
- **browser**:
  - Fix `process.env` and `import.meta.env` defines in inline project  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9239](https://redirect.github.com/vitest-dev/vitest/issues/9239) [<samp>(b70c9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b70c96121)
  - Fix upload File instance  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9294](https://redirect.github.com/vitest-dev/vitest/issues/9294) [<samp>(b6778)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b67788c69)
  - Fix invalid project token for artifacts assets  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9321](https://redirect.github.com/vitest-dev/vitest/issues/9321) [<samp>(caa7d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/caa7d73d4)
  - Log `ErrorEvent.message` when unhandled `ErrorEvent.error` is null  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9322](https://redirect.github.com/vitest-dev/vitest/issues/9322) [<samp>(5d84e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5d84eeb91)
  - Support `fileParallelism` on an instance  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9328](https://redirect.github.com/vitest-dev/vitest/issues/9328) [<samp>(15006)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/150065459)
- **coverage**:
  - Remove unnecessary `istanbul-lib-source-maps` usage  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [#&#8203;9344](https://redirect.github.com/vitest-dev/vitest/issues/9344) [<samp>(b0940)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b09405375)
  - Apply patch from [istanbuljs/istanbuljs#837](https://redirect.github.com/istanbuljs/istanbuljs/issues/837)  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) and **sapphi-red** in [#&#8203;9413](https://redirect.github.com/vitest-dev/vitest/issues/9413) and [#&#8203;837](https://redirect.github.com/vitest-dev/vitest/issues/837) [<samp>(e05ce)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e05cedbf4)
- **fsModuleCache**:
  - Don't store importers in cache  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9422](https://redirect.github.com/vitest-dev/vitest/issues/9422) [<samp>(75136)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/751364eec)
  - Add importers alongside importedModules  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9423](https://redirect.github.com/vitest-dev/vitest/issues/9423) [<samp>(59f92)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/59f92d403)
- **mocker**:
  - Fix mock transform with class  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9421](https://redirect.github.com/vitest-dev/vitest/issues/9421) [<samp>(d390e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d390eb527)
- **pool**:
  - Validate environment options when reusing the worker  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9349](https://redirect.github.com/vitest-dev/vitest/issues/9349) [<samp>(a8a88)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a8a8836e3)
  - Handle worker start failures gracefully  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [#&#8203;9337](https://redirect.github.com/vitest-dev/vitest/issues/9337) [<samp>(200da)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/200dadb32)
- **reporter**:
  - Report test module if it failed to run  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9272](https://redirect.github.com/vitest-dev/vitest/issues/9272) [<samp>(c7888)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c78882985)
- **runner**:
  - Respect nested test.only within describe.only  -  by [@&#8203;Ujjwaljain16](https://redirect.github.com/Ujjwaljain16) in [#&#8203;9021](https://redirect.github.com/vitest-dev/vitest/issues/9021) and [#&#8203;9213](https://redirect.github.com/vitest-dev/vitest/issues/9213) [<samp>(55d5d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/55d5dad69)
- **typecheck**:
  - Improve error message when tsc outputs help text  -  by [@&#8203;Ujjwaljain16](https://redirect.github.com/Ujjwaljain16) in [#&#8203;9214](https://redirect.github.com/vitest-dev/vitest/issues/9214) [<samp>(7b10a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7b10ab4cd)
- **ui**:
  - Detect gzip by magic numbers instead of Content-Type header in html reporter  -  by [@&#8203;Copilot](https://redirect.github.com/Copilot), **hi-ogawa** and [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9278](https://redirect.github.com/vitest-dev/vitest/issues/9278) [<samp>(dd033)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/dd0331632)
- **webdriverio**:
  - Fall back to WebDriver Classic [#&#8203;9244](https://redirect.github.com/vitest-dev/vitest/issues/9244)  -  by [@&#8203;JustasMonkev](https://redirect.github.com/JustasMonkev) in [#&#8203;9373](https://redirect.github.com/vitest-dev/vitest/issues/9373) and [#&#8203;9244](https://redirect.github.com/vitest-dev/vitest/issues/9244) [<samp>(c23dd)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c23dd11bd)

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

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

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

#####    🐞 Bug Fixes

- Fix browser mode default testTimeout back to 15 seconds  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9167](https://redirect.github.com/vitest-dev/vitest/issues/9167) [<samp>(da0ad)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/da0ade249)
- Avoid crashing on `process.versions` stub  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [#&#8203;9174](https://redirect.github.com/vitest-dev/vitest/issues/9174) [<samp>(78cfb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/78cfbf99a)
- Reject calling suite function inside test  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9198](https://redirect.github.com/vitest-dev/vitest/issues/9198) [<samp>(1a259)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1a259c340)
- Allow inlining fully dynamic import  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9137](https://redirect.github.com/vitest-dev/vitest/issues/9137) [<samp>(56851)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/568513ca6)
- Fix module graph UI on html reporter with headless browser mode  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9219](https://redirect.github.com/vitest-dev/vitest/issues/9219) [<samp>(60642)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/60642b304)
- Log deprecated `test.poolOptions` if it's set  -  by [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in [#&#8203;9226](https://redirect.github.com/vitest-dev/vitest/issues/9226) [<samp>(f7f6a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f7f6aa8ba)
- **browser**:
  - Import `recordArtifact` from the vitest package  -  by [@&#8203;macarie](https://redirect.github.com/macarie) in [#&#8203;9186](https://redirect.github.com/vitest-dev/vitest/issues/9186) [<samp>(01c56)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/01c56454d)
  - Fix `import.meta.env` define  -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9205](https://redirect.github.com/vitest-dev/vitest/issues/9205) [<samp>(01a9a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/01a9a58d9)
  - String formatting bug when including placeholders in console.log  -  by [@&#8203;michael-debs](https://redirect.github.com/michael-debs) and [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa) in [#&#8203;9030](https://redirect.github.com/vitest-dev/vitest/issues/9030) and [#&#8203;9131](https://redirect.github.com/vitest-dev/vitest/issues/9131) [<samp>(84a30)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/84a306210)
- **coverage**:
  - Istanbul untested files source maps are off  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [#&#8203;9208](https://redirect.github.com/vitest-dev/vitest/issues/9208) [<samp>(372e8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/372e86fde)
- **experimental**:
  - Export `setupEnvironment` for custom pools  -  by [@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in [#&#8203;9187](https://redirect.github.com/vitest-dev/vitest/issues/9187) [<samp>(5d26b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5d26b87b0)

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

</details>

<details>
<summary>evanw/esbuild (esbuild)</summary>

### [`v0.27.2`](https://redirect.github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0272)

[Compare Source](https://redirect.github.com/evanw/esbuild/compare/v0.27.1...v0.27.2)

- Allow import path specifiers starting with `#/` ([#&#8203;4361](https://redirect.github.com/evanw/esbuild/pull/4361))

  Previously the specification for `package.json` disallowed import path specifiers starting with `#/`, but this restriction [has recently been relaxed](https://redirect.github.com/nodejs/node/pull/60864) and support for it is being added across the JavaScript ecosystem. One use case is using it for a wildcard pattern such as mapping `#/*` to `./src/*` (previously you had to use another character such as `#_*` instead, which was more confusing). There is some more context in [nodejs/node#49182](https://redirect.github.com/nodejs/node/issues/49182).

  This change was contributed by [@&#8203;hybrist](https://redirect.github.com/hybrist).

- Automatically add the `-webkit-mask` prefix ([#&#8203;4357](https://redirect.github.com/evanw/esbuild/issues/4357), [#&#8203;4358](https://redirect.github.com/evanw/esbuild/issues/4358))

  This release automatically adds the `-webkit-` vendor prefix for the [`mask`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/mask) CSS shorthand property:

  ```css
  /* Original code */
  main {
    mask: url(x.png) center/5rem no-repeat
  }

  /* Old output (with --target=chrome110) */
  main {
    mask: url(x.png) center/5rem no-repeat;
  }

  /* New output (with --target=chrome110) */
  main {
    -webkit-mask: url(x.png) center/5rem no-repeat;
    mask: url(x.png) center/5rem no-repeat;
  }
  ```

  This change was contributed by [@&#8203;BPJEnnova](https://redirect.github.com/BPJEnnova).

- Additional minification of `switch` statements ([#&#8203;4176](https://redirect.github.com/evanw/esbuild/issues/4176), [#&#8203;4359](https://redirect.github.com/evanw/esbuild/issues/4359))

  This release contains additional minification patterns for reducing `switch` statements. Here is an example:

  ```js
  // Original code
  switch (x) {
    case 0:
      foo()
      break
    case 1:
    default:
      bar()
  }

  // Old output (with --minify)
  switch(x){case 0:foo();break;case 1:default:bar()}

  // New output (with --minify)
  x===0?foo():bar();
  ```

- Forbid `using` declarations inside `switch` clauses ([#&#8203;4323](https://redirect.github.com/evanw/esbuild/issues/4323))

  This is a rare change to remove something that was previously possible. The [Explicit Resource Management](https://redirect.github.com/tc39/proposal-explicit-resource-management) proposal introduced `using` declarations. These were previously allowed inside `case` and `default` clauses in `switch` statements. This had well-defined semantics and was already widely implemented (by V8, SpiderMonkey, TypeScript, esbuild, and others). However, it was considered to be too confusing because of how scope works in switch statements, so it has been removed from the specification. This edge case will now be a syntax error. See [tc39/proposal-explicit-resource-management#215](https://redirect.github.com/tc39/proposal-explicit-resource-management/issues/215) and [rbuckton/ecma262#14](https://redirect.github.com/rbuckton/ecma262/pull/14) for details.

  Here is an example of code that is no longer allowed:

  ```js
  switch (mode) {
    case 'read':
      using readLock = db.read()
      return readAll(readLock)

    case 'write':
      using writeLock = db.write()
      return writeAll(writeLock)
  }
  ```

  That code will now have to be modified to look like this instead (note the additional `{` and `}` block statements around each case body):

  ```js
  switch (mode) {
    case 'read': {
      using readLock = db.read()
      return readAll(readLock)
    }
    case 'write': {
      using writeLock = db.write()
      return writeAll(writeLock)
    }
  }
  ```

  This is not being released in one of esbuild's breaking change releases since this feature hasn't been finalized yet, and esbuild always tracks the current state of the specification (so esbuild's previous behavior was arguably incorrect).

</details>

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

### [`v9.39.2`](https://redirect.github.com/eslint/eslint/compare/v9.39.1...9278324aa0023d223874825b0d4b6ac75783096a)

[Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.39.1...v9.39.2)

### [`v9.39.1`](https://redirect.github.com/eslint/eslint/compare/v9.39.0...e2772811a8595d161870835ff04822b25a2cdf45)

[Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.39.0...v9.39.1)

### [`v9.39.0`](https://redirect.github.com/eslint/eslint/compare/v9.38.0...ac3a60dffc29d8d4d5031621bc062e77f891532a)

[Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.38.0...v9.39.0)

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

[Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.37.0...v9.38.0)

#### Features

- [`ce40f74`](https://redirect.github.com/eslint/eslint/commit/ce40f74efd45f66d9fbfc6f78ce622ee72008485) feat: update `complexity` rule to only highlight function header ([#&#8203;20048](https://redirect.github.com/eslint/eslint/issues/20048)) (Atul Nair)
- [`e37e590`](https://redirect.github.com/eslint/eslint/commit/e37e590aae2a7fcca4d3a9adc1379ad466e5c5d1) feat: correct `no-loss-of-precision` false positives with `e` notation ([#&#8203;20187](https://redirect.github.com/eslint/eslint/issues/20187)) (Francesco Trotta)

#### Bug Fixes

- [`50c3dfd`](https://redirect.github.com/eslint/eslint/commit/50c3dfd98065622765a51a8ddb1e70c44fc5a4cb) fix: improve type support for isolated dependencies in pnpm ([#&#8203;20201](https://redirect.github.com/eslint/eslint/issues/20201)) (Francesco Trotta)
- [`a1f06a3`](https://redirect.github.com/eslint/eslint/commit/a1f06a350c4155c4dbf39bf932a38d71d70f1b65) fix: correct SourceCode typings ([#&#8203;20114](https://redirect.github.com/eslint/eslint/issues/20114)) (Pixel998)

#### Documentation

- [`462675a`](https://redirect.github.com/eslint/eslint/commit/462675af8a811f9ca984efaedbdc5b46b13ced7a) docs: improve web accessibility by hiding non-semantic character ([#&#8203;20205](https://redirect.github.com/eslint/eslint/issues/20205)) (루밀LuMir)
- [`c070e65`](https://redirect.github.com/eslint/eslint/commit/c070e65f6bb9e38d06a89ba2b3261781bec3d397) docs: correct formatting in `no-irregular-whitespace` rule documentation ([#&#8203;20203](https://redirect.github.com/eslint/eslint/issues/20203)) (루밀LuMir)
- [`b39e71a`](https://redirect.github.com/eslint/eslint/commit/b39e71a2130ae1ea3fbc19b19f5b951eb625722a) docs: Update README (GitHub Actions Bot)
- [`cd39983`](https://redirect.github.com/eslint/eslint/commit/cd3998314876a4fad6463d9011bc73778ccc1fd9) docs: move `custom-formatters` type descriptions to `nodejs-api` ([#&#8203;20190](https://redirect.github.com/eslint/eslint/issues/20190)) (Percy Ma)

#### Chores

- [`d17c795`](https://redirect.github.com/eslint/eslint/commit/d17c795bf1624e0604998482b98e6bb6bff39045) chore: upgrade [@&#8203;eslint/js](https://redirect.github.com/eslint/js)@&#8203;9.38.0 ([#&#8203;20221](https://redirect.github.com/eslint/eslint/issues/20221)) (Milos Djermanovic)
- [`25d0e33`](https://redirect.github.com/eslint/eslint/commit/25d0e33270e08baed09dbee2cdd56a8e5cd9da0f) chore: package.json update for [@&#8203;eslint/js](https://redirect.github.com/eslint/js) release (Jenkins)
- [`c82b5ef`](https://redirect.github.com/eslint/eslint/commit/c82b5efa1fc91900e029efa23e688fad67fc17fa) refactor: Use types from [@&#8203;eslint/core](https://redirect.github.com/eslint/core) ([#&#8203;20168](https://redirect.github.com/eslint/eslint/issues/20168)) (Nicholas C. Zakas)
- [`ff31609`](https://redirect.github.com/eslint/eslint/commit/ff31609f195654d448954210ba4d31e921d463e8) ci: add Node.js 25 to `ci.yml` ([#&#8203;20220](https://redirect.github.com/eslint/eslint/issues/20220)) (루밀LuMir)
- [`004577e`](https://redirect.github.com/eslint/eslint/commit/004577eda2f2f4b2829e0364f8b41893cebfc859) ci: bump github/codeql-action from 3 to 4 ([#&#8203;20211](https://redirect.github.com/eslint/eslint/issues/20211)) (dependabot\[bot])
- [`eac71fb`](https://redirect.github.com/eslint/eslint/commit/eac71fb77113de7bf199ff20c6ee44cefcb59848) test: remove use of `nodejsScope` option of eslint-scope from tests ([#&#8203;20206](https://redirect.github.com/eslint/eslint/issues/20206)) (Milos Djermanovic)
- [`4168a18`](https://redirect.github.com/eslint/eslint/commit/4168a18b7efd8facbbd71cd44a62942a9f656a30) chore: fix typo in legacy-eslint.js ([#&#8203;20202](https://redirect.github.com/eslint/eslint/issues/20202)) (Sweta Tanwar)
- [`205dbd2`](https://redirect.github.com/eslint/eslint/commit/205dbd2d9272e761574c478e3b0181f7b89ed0f6) chore: fix typos ([#&#8203;20200](https://redirect.github.com/eslint/eslint/issues/20200)) (ntnyq)
- [`dbb200e`](https://redirect.github.com/eslint/eslint/commit/dbb200e3604e63bba23a18d40089ca44604835ed) chore: use team member's username when name is not available in data ([#&#8203;20194](https://redirect.github.com/eslint/eslint/issues/20194)) (Milos Djermanovic)
- [`8962089`](https://redirect.github.com/eslint/eslint/commit/8962089edbd978b43513576387a134036b8e2d36) chore: mark deprecated rules as available until v11.0.0 ([#&#8203;20184](https://redirect.github.com/eslint/eslint/issues/20184)) (Pixel998)

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

[Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.36.0...v9.37.0)

#### Features

- [`39f7fb4`](https://redirect.github.com/eslint/eslint/commit/39f7fb493a6924ff7dc638fd4d6e7b3d8eb95383) feat: `preserve-caught-error` should recognize all static "cause" keys ([#&#8203;20163](https://redirect.github.com/eslint/eslint/issues/20163)) (Pixel998)
- [`f81eabc`](https://redirect.github.com/eslint/eslint/commit/f81eabc5849ece98b8ca054f96b29f038a69bcf8) feat: support TS syntax in `no-restricted-imports` ([#&#8203;19562](https://redirect.github.com/eslint/eslint/issues/19562)) (Nitin Kumar)

#### Bug Fixes

- [`a129cce`](https://redirect.github.com/eslint/eslint/commit/a129cced7a86ea2518eb9be6990fa18af39694ca) fix: correct `no-loss-of-precision` false positives for leading zeros ([#&#8203;20164](https://redirect.github.com/eslint/eslint/issues/20164)) (Francesco Trotta)
- [`09e04fc`](https://redirect.github.com/eslint/eslint/commit/09e04fcc3f4cc963eea7c9c579391de5e231595b) fix: add missing AST token types ([#&#8203;20172](https://redirect.github.com/eslint/eslint/issues/20172)) (Pixel998)
- [`861c6da`](https://redirect.github.com/eslint/eslint/commit/861c6da2bd2796414e6eed782155ec34e2ed6344) fix: correct `ESLint` typings ([#&#8203;20122](https://redirect.github.com/eslint/eslint/issues/20122)) (Pixel998)

#### Documentation

- [`b950359`](https://redirect.github.com/eslint/eslint/commit/b950359c5f39085483c3137a6a160e582ef32007) docs: fix typos across the docs ([#&#8203;20182](https://redirect.github.com/eslint/eslint/issues/20182)) (루밀LuMir)
- [`42498a2`](https://redirect.github.com/eslint/eslint/commit/42498a27981d50750dd15ae8660dbe85c4f4587c) docs: improve ToC accessibility by hiding non-semantic character ([#&#8203;20181](https://redirect.github.com/eslint/eslint/issues/20181)) (Percy Ma)
- [`29ea092`](https://redirect.github.com/eslint/eslint/commit/29ea092b93608756350b1e9c5a4f29c8a49264ab) docs: Update README (GitHub Actions Bot)
- [`5c97a04`](https://redirect.github.com/eslint/eslint/commit/5c97a04578e6280c2395f642c2d8d6bdf30eec18) docs: show `availableUntil` in deprecated rule banner ([#&#8203;20170](https://redirect.github.com/eslint/eslint/issues/20170)) (Pixel998)
- [`90a71bf`](https://redirect.github.com/eslint/eslint/commit/90a71bf5024a86fc232cd2e05f96811e2a18fd0f) docs: update `README` files to add badge and instructions ([#&#8203;20115](https://redirect.github.com/eslint/eslint/issues/20115)) (루밀LuMir)
- [`1603ae1`](https://redirect.github.com/eslint/eslint/commit/1603ae1526d9b6f557c7d5534a4f40f46842edd6) docs: update references from `master` to `main` ([#&#8203;20153](https://redirect.github.com/eslint/eslint/issues/20153)) (루밀LuMir)

#### Chores

- [`afe8a13`](https://redirect.github.com/eslint/eslint/commit/afe8a1346958242031fea66fdfbb239e8bf408b7) chore: update `@eslint/js` dependency to version 9.37.0 ([#&#8203;20183](https://redirect.github.com/eslint/eslint/issues/20183)) (Francesco Trotta)
- [`abee4ca`](https://redirect.github.com/eslint/eslint/commit/abee4ca1fa10da733b1cc4a7d5e765b912a9de82) chore: package.json update for [@&#8203;eslint/js](https://redirect.github.com/eslint/js) release (Jenkins)
- [`fc9381f`](https://redirect.github.com/eslint/eslint/commit/fc9381f6ca57b824e82d118c14631c17bea79d7e) chore: fix typos in comments ([#&#8203;20175](https://redirect.github.com/eslint/eslint/issues/20175)) (overlookmotel)
- [`e1574a2`](https://redirect.github.com/eslint/eslint/commit/e1574a22d38fd7e1891f86f8db0b09053f8963cb) chore: unpin jiti ([#&#8203;20173](https://redirect.github.com/eslint/eslint/issues/20173)) (renovate\[bot])
- [`e1ac05e`](https://redirect.github.com/eslint/eslint/commit/e1ac05e2fae779e738f85bd47dda1cc2b7099346) refactor: mark `ESLint.findConfigFile()` as `async`, add missing docs ([#&#8203;20157](https://redirect.github.com/eslint/eslint/issues/20157)) (Pixel998)
- [`347906d`](https://redirect.github.com/eslint/eslint/commit/347906d627c53bf45d63ba831d2fd2b83fb0a749) chore: update eslint ([#&#8203;20149](https://redirect.github.com/eslint/eslint/issues/20149)) (renovate\[bot])
- [`0cb5897`](https://redirect.github.com/eslint/eslint/commit/0cb5897e24059bacadb8d2e6458184904759fda1) test: remove tmp dir created for circular fixes in multithread mode test ([#&#8203;20146](https://redirect.github.com/eslint/eslint/issues/20146)) (Milos Djermanovic)
- [`bb99566`](https://redirect.github.com/eslint/eslint/commit/bb995665e32b3a958e78006c9fd75744c5604f1b) ci: pin `jiti` to version 2.5.1 ([#&#8203;20151](https://redirect.github.com/eslint/eslint/issues/20151)) (Pixel998)
- [`177f669`](https://redirect.github.com/eslint/eslint/commit/177f669adc0f96d14ae1a71cde7786f327515863) perf: improve worker count calculation for `"auto"` concurrency ([#&#8203;20067](https://redirect.github.com/eslint/eslint/issues/20067)) (Francesco Trotta)
- [`448b57b`](https://redirect.github.com/eslint/eslint/commit/448b57bca3406ee12c4e44e9298fc0c99d3ee10c) chore: Mark deprecated formatting rules as available until v11.0.0 ([#&#8203;20144](https://redirect.github.com/eslint/eslint/issues/20144)) (Milos Djermanovic)

</details>

<details>
<summary>estools/esquery (esquery)</summary>

### [`v1.7.0`](https://redirect.github.com/estools/esquery/compare/v1.6.0...444da2c9b1f973555102b0e3a2c62f5d607dc6fe)

[Compare Source](https://redirect.github.com/estools/esquery/compare/v1.6.0...444da2c9b1f973555102b0e3a2c62f5d607dc6fe)

</details>

<details>
<summary>eclipse/openvsx (ovsx)</summary>

### [`v0.10.8`](https://redirect.github.com/eclipse/openvsx/blob/HEAD/cli/CHANGELOG.md#v0108-Jan-2026)

[Compare Source](https://redirect.github.com/eclipse/openvsx/compare/2000f6441959b4a2bcdfa81b5daa35ae0591ed78...f3382bc2d7a7b9c4ed1e9ed1392bf0656436aee8)

##### Dependencies

- Upgrade `jws` from `3.2.2` to `4.0.1` ([#&#8203;1482](https://redirect.github.com/eclipse/openvsx/pull/1482))
- Upgrade `@vscode/vsce` from `3.2.1` to `3.7.1` ([#&#8203;1482](https://redirect.github.com/eclipse/openvsx/pull/1482))

</details>

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

### [`v1.58.0`](https://redirect.github.com/microsoft/playwright/compare/v1.57.0...961381ec73a9fa2661d92504eab1a6bd6eaffc75)

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

</details>

<details>
<summary>pnpm/pnpm (pnpm)</summary>

### [`v10.28.1`](https://redirect.github.com/pnpm/pnpm/compare/v10.28.0...v10.28.1)

[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v10.28.0...v10.28.1)

### [`v10.28.0`](https://redirect.github.com/pnpm/pnpm/compare/v10.27.0...v10.28.0)

[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v10.27.0...v10.28.0)

### [`v10.27.0`](https://redirect.github.com/pnpm/pnpm/compare/v10.26.2...v10.27.0)

[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v10.26.2...v10.27.0)

### [`v10.26.2`](https://redirect.github.com/pnpm/pnpm/releases/tag/v10.26.2): pnpm 10.26.2

[Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v10.26.1...v10.26.2)

#### Patch Changes

- Improve error message when a package version exists but does not meet the `minimumReleaseAge` constraint. The error now clearly states that the version exists and shows a human-readable time since release (e.g., "released 6 hours ago") [#&#8203;10307](https://redirect.github.com/pnpm/pnpm/issues/10307).

- Fix installation of Git dependencies using annotated tags [#&#8203;10335](https://redirect.github.com/pnpm/pnpm/issues/10335).

  Previously, pnpm would store the annotated tag object's SHA in the lockfile instead of the actual commit SHA. This caused `ERR_PNPM_GIT_CHECKOUT_FAILED` errors because the checked-out commit hash didn't match the stored tag object hash.

- Binaries of runtime engines (Node.js, Deno, Bun) are written to `node_modules/.bin` before lifecycle scripts (install, postinstall, prepare) are executed [#&#8203;10244](https://redirect.github.com/pnpm/pnpm/issues/10244).

- Try to avoid making network calls with preferOffline [#&#8203;10334](https://redirect.github.com/pnpm/pnpm/pull/10334).

#### Platinum Sponsors

<table>
  <tbody>
    <tr>
      <td align="center" valign="middle">
        <a href="https://bit.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank"><img src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a>
      </td>
    </tr>
  </tbody>
</table>

#### Gold Sponsors

<table>
  <tbody>
    <tr>
      <td align="center" valign="middle">
        <a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/discord.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/discord_light.svg" />
            <img src="https://pnpm.io/img/users/discord.svg" width="220" alt="Discord" />
          </picture>
        </a>
      </td>
      <td align="center" valign="middle">
        <a href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/coderabbit.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/coderabbit_light.svg" />
            <img src="https://pnpm.io/img/users/coderabbit.svg" width="220" alt="CodeRabbit" />
          </picture>
        </a>
      </td>
      <td align="center" valign="middle">
        <a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank">
          <picture>
            <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/workleap.svg" />
            <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/workleap_light.svg" />
            <img src="https:/

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 10am on monday" in timezone Asia/Shanghai, 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi45Mi4xIiwidXBkYXRlZEluVmVyIjoiNDIuOTIuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2026-01-27 04:55:04 +00:00
Boshen 9951f16184 release(crates): oxc v0.111.0 (#18572)
### 💥 BREAKING CHANGES

- 22dec6a semantic: [**BREAKING**] Remove
`Scoping::scope_build_child_ids` and all related APIs (#18362) (Dunqing)
- 30a4899 oxc: [**BREAKING**] Remove
`CompilerInterface::semantic_child_scope_ids` (#18361) (Dunqing)
- 777fc40 ast: [**BREAKING**] Add `Ident` type (#18354) (Boshen)
- af0ca46 span: [**BREAKING**] Use `ModuleKind::CommonJS` for
`SourceType::cjs()` (#18276) (sapphi-red)

### 🚀 Features

- 0a02026 semantic: Add TS1499 code to diagnostic (#18557) (camc314)
- 8b4618f parser: Add TS1500 code to diagnostic (#18547) (camc314)
- 866b6b3 parser: Add TS1048 code to diagnostic (#18546) (camc314)
- 1117c44 parser: Add TS1054 code to diagnostic (#18541) (camc314)
- e4fcdde semantic: Add TS1053 code to diagnostic (#18539) (camc314)
- bcbf396 semantic: Add TS1052 code to diagnostic (#18538) (camc314)
- 8155edf semantic: Add TS1049 code to diagnostic (#18535) (camc314)
- 51d3b3f parser: Add TS1502 code to diagnostic (#18534) (camc314)
- 00854e8 semantic: Add TS2337 error code to super call diagnostic
(#18531) (camc314)
- 993fd2b parser: Parse unambiguous await with better error messages
(#18480) (Boshen)
- 8db0e78 linter/plugins: Handle BOMs (#18376) (overlookmotel)
- 6ac09e2 linter/plugins: Support source text not being at start of
buffer (#18375) (overlookmotel)
- 2ef5647 ast: Add escape_raw parameter to template_element builders
(#18121) (Boshen)

### 🐛 Bug Fixes

- 74d0998 semantic: Update error msg for multiple `default` cases in
switch stmt (#18526) (camc314)
- c205b0d ast: Remove `ThisExpression` from `TSModuleReference` (#18489)
(Boshen)
- aed3669 parser: Parse HTML-like comments in unambiguous mode (#18442)
(Boshen)
- c4132fb parser: Validate accessor parameters in interface method
signatures (#18391) (Boshen)
- b0cd74d semantic: Allow `var` and `function` with same name in static
blocks (#18358) (Boshen)
- 6037995 semantic: Allow `new.target` in class field initializers
(#18349) (Boshen)
- 9a15c6a semantic: Do not rely on spans for node comparison in
`Function::bind` (#18296) (overlookmotel)

### ⚡ Performance

- 6b600c4 semantic: Skip parent lookup for function declarations in
`Function::bind` (#18293) (overlookmotel)
- c27ad2d semantic: Move check for function declaration out of
`is_function_part_of_if_statement` (#18292) (overlookmotel)
- 63eb89e semantic: Skip checking redeclarations for function
expressions (#18291) (overlookmotel)
- 7c12743 semantic: Skip checking unresolved exports in CommonJS files
(#18250) (overlookmotel)
- 2349031 allocator: Increase initial chunk size from 512B to 16KB
(#18234) (Boshen)

### 📚 Documentation

- 8ccd853 npm: Update package homepage URLs and add keywords (#18509)
(Boshen)
- 9b3165f napi/parser: Clarify when to use `parseAsync` vs `parseSync`
(#18486) (Boshen)
- 1b59f63 napi/parser: Correct typo in README (#18251) (overlookmotel)
- 00ff75f mangler: Fix `top_level` option in example (#18233)
(overlookmotel)
- 2ddc073 semantic: Fix typo in comment (#18238) (overlookmotel)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2026-01-26 10:49:55 +00:00
Boshen 8ccd853d91 docs(npm): update package homepage URLs and add keywords (#18509)
## Summary

- Update homepage links to point to specific documentation pages (e.g., `https://oxc.rs/docs/guide/usage/linter`)
- Add usage instruction links to napi package READMEs
- Add relevant keywords for better npm discoverability

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-25 07:02:08 +00:00
Boshen c205b0df51 fix(ast): remove ThisExpression from TSModuleReference (#18489)
## Summary

- Removes `ThisExpression` variant from `TSModuleReference` since `import x = this` is invalid TypeScript (error TS1359)
- Adds parser error when `this` is used in import equals declaration
- Updates codegen, transformer, and linter rules to handle the new enum structure

Closes #16841

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-24 15:25:10 +00:00
Boshen 9b3165f524 docs(napi/parser): clarify when to use parseAsync vs parseSync (#18486)
## Summary

- Add detailed JSDoc documentation to `parse` and `parseSync` functions explaining their performance characteristics
- Clarify that `parseSync` is generally preferable since AST deserialization happens on the main thread anyway
- Recommend using worker threads with `parseSync` for parallelizing multiple files

Closes #15361

🤖 Generated with [Claude Code](https://claude.ai/code)
2026-01-24 14:54:52 +00:00
overlookmotel 09a4057f14 refactor(linter/plugins, napi/parser): remove pattern of destructuring globals at top level (#18455)
Pure refactor.

Remove a few remaining instances of the pattern where we destructure global objects at top level e.g. `const { isArray } = Array;`.

In Oxlint, TSDown plugin already performs this optimization. In `napi/parser`, we intend to build the package with TSDown, and we'll apply the same optimization in build process then too.
2026-01-23 14:28:18 +00:00
overlookmotel 1b616ff7a8 chore(deps): bump typescript-eslint packages to latest (#18401)
Bump `@typescript-eslint/scope-manager` and `@typescript-eslint/visitor-keys` dependencies to latest.
2026-01-22 11:39:43 +00:00
overlookmotel 8db0e78ae6 feat(linter/plugins): handle BOMs (#18376)
Closes #12526.

Handle BOM on start of files in the same way that ESLint does - do not include it in the source text on JS side, but `context.sourceCode.hasBOM` evaluates to `true`.

Method:

* Alter `program.source_text` to trim off the BOM before passing AST to JS side.
* Add a `has_bom` flag to `RawTransferMetadata`.
* Add ability to add an offset in the conversion from UTF-8 to UTF-16 spans.

The result is that the file as it's seen on JS side is as if the BOM didn't exist (except for the `hasBOM` flag). Spans are converted accordingly in JS-side AST, and converted back when passing diagnostics back to Rust.
2026-01-22 02:16:54 +00:00
overlookmotel 6ac09e2a9d feat(linter/plugins): support source text not being at start of buffer (#18375)
Previous raw transfer required that the source text start exactly at the start of the buffer. In linter, relax this restriction and handle when source text is stored elsewhere in the buffer.

This is necessary for stripping BOM from source (#18376), as then the source text used on JS side starts 3 bytes after the start of the buffer.
2026-01-22 02:16:53 +00:00
Boshen 7174336d10 refactor(parser): shorten raw transfer deserializer code for non-range variants (#18137)
## Summary

- Use inline assignment pattern (`let x; { x: x = value }`) for `start` and `end` fields instead of declaring them in the preamble
- This allows minifiers to eliminate unused variables when RANGE is false
- Restores original file size for deserializers that don't use range fields

**Before (js.js with RANGE=false):**
```javascript
function deserializeIdentifierName(pos) {
  let start = deserializeU32(pos),
    end = deserializeU32(pos + 4);
  return { type: "Identifier", name: deserializeStr(pos + 8), start, end };
}
```

**After (js.js with RANGE=false):**
```javascript
function deserializeIdentifierName(pos) {
  return { type: "Identifier", name: deserializeStr(pos + 8), start: deserializeU32(pos), end: deserializeU32(pos + 4) };
}
```

Closes #14332

## Test plan

- [x] `just ast` regenerates deserializers correctly
- [x] `pnpm test --filter='@oxc-project/napi-parser'` passes (109 tests)
- [x] `cargo clippy -p oxc_ast_tools` passes

🤖 Generated with [Claude Code](https://claude.ai/code)
2026-01-21 02:55:05 +00:00
overlookmotel 1b59f63488 docs(napi/parser): correct typo in README (#18251)
An extraneous `` ` `` had crept in to a comment. Remove it. Also remove unnecessary full stops from short comments.
2026-01-19 15:33:25 +00:00
Boshen 89de3a146b release(crates): oxc v0.110.0 (#18240)
### 🐛 Bug Fixes

- f1e2dc0 semantic: No error in `check_function_redeclaration` for
CommonJS files (#18231) (overlookmotel)
- 645c3f0 transformer: Use `require` not `import` in CommonJS files
(#18226) (overlookmotel)
- ee9f6a4 mangler: Use `retain` instead of `truncate` to remove empty
frequency slots (#18225) (Dunqing)

### ⚡ Performance

- 52073d9 semantic: Use cheaper test for source type (#18235)
(overlookmotel)

Co-authored-by: overlookmotel <557937+overlookmotel@users.noreply.github.com>
2026-01-19 13:42:45 +00:00
Boshen 7282e9c564 release(crates): oxc v0.109.0 (#18222) 2026-01-19 18:42:47 +08:00
overlookmotel 6e8fa809f5 feat(napi/parser, napi/transform): accept sourceType: "commonjs" (#18197)
#18089 added support in parser for `commonjs` source type.

Extend this support to the NAPI packages - accept `sourceType: 'commonjs'` in options for `oxc-parser` and `oxc-transform`.
2026-01-19 04:39:04 +00:00
overlookmotel 2fbc39e501 test(napi/parser): correct nesting of tests (#18193)
Refactor tests. The tests for `ImportDeclaration` and `ImportExpression` had somehow got nested within the tests for `TemplateExpression`. Move them to a better place.
2026-01-18 21:14:16 +00:00
Boshen 4f45a2845a refactor(ast)!: replace TSMappedType.type_parameter with dedicated key and constraint fields (#18185)
## Summary

- Replace `type_parameter: Box<'a, TSTypeParameter<'a>>` with two dedicated fields:
  - `key: BindingIdentifier<'a>` - the parameter name (e.g., `P` in `[P in keyof T]`)
  - `constraint: TSType<'a>` - the constraint type (e.g., `keyof T`)
- Improves type safety by preventing invalid AST states - `TSTypeParameter` contains `const`, `in`, `out`, and `default` fields that are syntactically invalid in mapped types
- Matches TSESTree structure more closely

Closes #15101

## Test plan

- [x] All parser, codegen, semantic, and linter tests pass
- [x] Conformance tests show no regressions
- [x] Semantic snapshots updated to reflect the new structure

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-18 14:49:37 +00:00
Boshen 08da7bd29a refactor(allocator): clean up obsolete bumpalo references (#18172)
## Summary

Now that bumpalo has been inlined into oxc_allocator (#18168), this PR cleans up comments and documentation that still reference bumpalo as an external dependency.

- Update module docs in `bump.rs` and `bumpalo_alloc.rs` to say "originally derived from" instead of "ported from"
- Remove obsolete comments about bumpalo version pinning in `from_raw_parts.rs`
- Update inline comments in `allocator.rs` from "delegates to bumpalo" to "it's a small function"
- Remove outdated TODO about replacing bumpalo in `tracking.rs`
- Update `ARCHITECTURE.md` and parser docs to reference `oxc_allocator` instead of bumpalo
- Clean up bumpalo references in other crates (`oxc_semantic`, `oxc_data_structures`, `apps/oxlint`, `napi/parser`, `tasks/ast_tools`)

## Test plan

- [x] `cargo check -p oxc_allocator` passes
- [x] `cargo test -p oxc_allocator` passes
- [x] Changes are documentation/comment only - no functional changes

🤖 Generated with [Claude Code](https://claude.ai/code)
2026-01-18 08:47:25 +00:00
Boshen 66b8c022ab feat(parser): implement unambiguous module parsing for JS/TS files (#18124)
## Summary

- Implements speculative/unambiguous parsing for `.js`, `.jsx`, `.ts`, and `.tsx` files
- Instead of assuming module or script upfront, parses with `ModuleKind::Unambiguous` and upgrades to module mode when ESM syntax is detected
- ESM indicators: `import`, `export`, `import.meta` (NOT top-level await alone)
- Defers top-level await errors until module type is resolved
- Vue loader upgrades unambiguous scripts to module mode
- Updates linter tests to use explicit ESM extensions (`.mjs`/`.mts`) where needed

## Test plan

- [x] All parser tests pass
- [x] All linter tests pass
- [x] All semantic tests pass
- [x] Coverage conformance tests updated

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-17 13:40:28 +00:00
Boshen 08dad63678 feat(span): add sourceType: 'commonjs' support (#18089)
## Summary

- Add `ModuleKind::CommonJS` variant to support CommonJS module type in the parser
- Enable top-level `return` statements (CommonJS files are wrapped in a function)
- Enable top-level `new.target` (allowed in CommonJS function wrapper)
- Add proper errors for `import`/`export` statements in CommonJS
- Add proper errors for `import.meta` in CommonJS

The CommonJS source type can be set via:
- `SourceType::with_commonjs(true)` method
- Babel's `sourceType: "commonjs"` option

Closes #16200

## Test plan

- [x] Added test cases in `tasks/coverage/misc/pass/` for valid CommonJS features
- [x] Added test cases in `tasks/coverage/misc/fail/` for invalid CommonJS usage
- [x] Enabled Babel conformance tests for `sourceType: "commonjs"`
- [x] All existing tests pass

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-01-16 16:08:27 +00:00
Boshen 9135b0b2f3 feat(ast)!: move scope from TSEnumDeclaration to TSEnumBody (#18058)
## Summary

- Move `scope_id: Cell<Option<ScopeId>>` from `TSEnumDeclaration` to `TSEnumBody`
- Since `TSEnumBody` was introduced as a dedicated type in PR #10284, the scope logically belongs on the body rather than on the parent declaration node

Closes #10331

## Test plan

- [x] Unit tests pass (`just test`)
- [x] Conformance tests pass (`just conformance`)
- [x] Updated semantic test snapshots reflect scope now on `TSEnumBody`

🤖 Generated with [Claude Code](https://claude.ai/code)
2026-01-16 13:30:08 +00:00
Peter Wagenet 7a0ca9999b fix(linter/plugins): use correct ScriptKind for tokens (#17185)
When parsing tokens for JS plugins, the TypeScript parser was always using `ScriptKind.TSX`, regardless of file extension. This caused TypeScript to incorrectly parse generic arrow functions like `<T>() => {}` in `.ts` files, creating bogus `JsxText` tokens that overlap with comments.

This PR adds an `is_jsx` flag to `RawTransferMetadata`. Rust side sets the flag depending on source type, and JS side uses that information to pass the correct `ScriptKind` for the file to TypeScript parser.

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: overlookmotel <theoverlookmotel@gmail.com>
2026-01-15 19:06:08 +00:00
Boshen 140cb1f405 release(crates): oxc v0.108.0 (#17920)
### 🚀 Features

- 10426af codegen: Print soft space between inline block comments on the
same line (#17799) (camc314)
- 2261e6e semantic: Improve error message to add `#` for private
identifiers (#17779) (Dunqing)

### 🐛 Bug Fixes

- 7422b7e parser/trivia: Correctly mark whether a block comment is on a
newline (#17754) (camc314)
- c32e8d5 codegen: Wrap `TSAsExpression` in parens when used with
in/instanceof operators (#17752) (camc314)
- 5755b2d semantic: Report duplicate private identifier for static and
instance elements (#17591) (camc314)
- 0600df3 isolated_declarations: Only print jsdoc comments (#17748)
(camc314)
- ef7e014 parser: Preserve `@__NO_SIDE_EFFECTS__` annotation with
parenthesized expressions (#17711) (camc314)
- 59a6228 parser: Detect TS1363 error for type-only imports with mixed
default and named/namespace bindings (#17712) (Copilot)

### ⚡ Performance

- 864f1fa semantic: Mark duplicate class element error reporting as cold
(#17746) (camc314)
- 3a452b8 semantic: Use smallvec for storing reference IDs (#17731)
(camchenry)
- d5979dc minifier: Do not allocate when checking to convert `const` to
`let` (#17730) (camchenry)
- 3f4429c parser: Do not re-allocate TS interface heritage (#17692)
(camchenry)

### 📚 Documentation

- 120a27c minifier: Add prettier-ignore for js-in-md part (#17687)
(leaysgur)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
2026-01-12 17:51:21 +08:00
renovate 5ac8a3e98a chore(deps): update dependency oxfmt to ^0.22.0 (#17679)
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/) |
|---|---|---|---|---|---|
| [oxfmt](https://oxc.rs) ([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt)) | [`^0.21.0` → `^0.22.0`](https://renovatebot.com/diffs/npm/oxfmt/0.21.0/0.22.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/oxfmt/0.22.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxfmt/0.22.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxfmt/0.21.0/0.22.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxfmt/0.21.0/0.22.0?slim=true) |

---

### Release Notes

<details>
<summary>oxc-project/oxc (oxfmt)</summary>

### [`v0.22.0`](https://redirect.github.com/oxc-project/oxc/blob/HEAD/npm/oxfmt/CHANGELOG.md#0220---2026-01-05)

[Compare Source](https://redirect.github.com/oxc-project/oxc/compare/oxfmt_v0.21.0...oxfmt_v0.22.0)

##### 💥 BREAKING CHANGES

- [`f7da875`](https://redirect.github.com/oxc-project/oxc/commit/f7da875) oxlint: \[**BREAKING**] Remove oxc\_language\_server binary ([#&#8203;17457](https://redirect.github.com/oxc-project/oxc/issues/17457)) (Boshen)

##### 🚀 Features

- [`8fd4ea9`](https://redirect.github.com/oxc-project/oxc/commit/8fd4ea9) oxfmt: `options.embeddedLanguageFormatting` is now `"auto"` by default ([#&#8203;17649](https://redirect.github.com/oxc-project/oxc/issues/17649)) (leaysgur)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi42OS4xIiwidXBkYXRlZEluVmVyIjoiNDIuNjkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2026-01-06 01:39:42 +00:00
Boshen 811b2a753c release(crates): oxc v0.107.0 (#17661)
### 🚀 Features

- 659c23e linter: Init note field boilerplate  (#17589) (Shrey Sudhir)
- 6870b64 parser: Add TS1363 error code (#17609) (Sysix)
- 23680a3 mangler: Skip mangling only in scopes affected by direct eval (#17612) (camc314)
- a7e1643 parser: Add TS2528 error code to duplicate_default_export diagnostic (#17558) (camc314)

### 🐛 Bug Fixes

- 1044116 ecmascript: Mark `new Symbol` as non side-effect free (#17568) (camc314)
- ab5e4ca isolated-declarations: Strip default values from rest parameter binding patterns (#17602) (camc314)
- 68b2e54 minifier: Prevent incorrect ??= transformation when member base is mutated (#17472) (copilot-swe-agent)

### ⚡ Performance

- 6067143 semantic: Remove hash when checking identifier (#17564) (camchenry)
- a28ab3d semantic: Avoid bounds check when checking string literal (#17545) (camc314)
- 04809d1 semantic: Use SIMD for finding backslashes in `check_string_literal` (#17534) (camchenry)
- 49ad2f0 semantic: Mark all diagnostic functions as `#[cold]` (#17487) (camc314)
- ea82b50 transformer: Mark all diagnostic functions as `#[cold]` (#17486) (camc314)
- d968e51 semantic: Mark `checker::check` as `inline(always)` (#17459) (camc314)
2026-01-05 13:45:22 +00:00
Sysix e8e42ebc9c chore(all): enable tsconfig noUnusedLocals compiler option (#17541)
Unused local variables did not get reported by `@typescript-eslint/no-unused-vars`.
Added `noUnusedLocals` check for every tsconfig, so `pnpm lint` will report them.
Example of failed CI: https://github.com/oxc-project/oxc/actions/runs/20626453016/job/59237769046?pr=17541
2025-12-31 20:31:35 +00:00
renovate 3741b8171c chore(deps): update napi (#17481)
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.5.0` → `3.5.1`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.5.0/3.5.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@napi-rs%2fcli/3.5.1?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@napi-rs%2fcli/3.5.1?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@napi-rs%2fcli/3.5.0/3.5.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@napi-rs%2fcli/3.5.0/3.5.1?slim=true) | pnpm.catalog.default | patch |
| [napi](https://redirect.github.com/napi-rs/napi-rs) | `3.7.1` → `3.8.1` | ![age](https://developer.mend.io/api/mc/badges/age/crate/napi/3.8.1?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi/3.8.1?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi/3.7.1/3.8.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi/3.7.1/3.8.1?slim=true) | workspace.dependencies | minor |
| [napi-derive](https://redirect.github.com/napi-rs/napi-rs) | `3.4.1` → `3.5.0` | ![age](https://developer.mend.io/api/mc/badges/age/crate/napi-derive/3.5.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/crate/napi-derive/3.5.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/crate/napi-derive/3.4.1/3.5.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/crate/napi-derive/3.4.1/3.5.0?slim=true) | workspace.dependencies | minor |

---

### Release Notes

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

### [`v3.5.1`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.5.0...@napi-rs/cli@3.5.1)

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

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi41OS4wIiwidXBkYXRlZEluVmVyIjoiNDIuNjYuMTQiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->
2025-12-31 12:52:40 +00:00
Boshen 9ec93401a3 release(crates): oxc v0.106.0 (#17447) 2025-12-29 17:16:30 +08:00
Boshen a7f385237f build(napi): Align NAPI targets to 20 platforms across all packages (#17203) 2025-12-24 15:36:45 +08:00
renovate 6cf7173c29 chore(deps): update dependency oxfmt to ^0.20.0 (#17263)
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/) |
|---|---|---|---|---|---|
| [oxfmt](https://oxc.rs) ([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt)) | [`^0.19.0` -> `^0.20.0`](https://renovatebot.com/diffs/npm/oxfmt/0.19.0/0.20.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/oxfmt/0.20.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxfmt/0.20.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxfmt/0.19.0/0.20.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxfmt/0.19.0/0.20.0?slim=true) |

---

### Release Notes

<details>
<summary>oxc-project/oxc (oxfmt)</summary>

### [`v0.20.0`](https://redirect.github.com/oxc-project/oxc/blob/HEAD/npm/oxfmt/CHANGELOG.md#0200---2025-12-22)

[Compare Source](https://redirect.github.com/oxc-project/oxc/compare/oxfmt_v0.19.0...oxfmt_v0.20.0)

##### 🚀 Features

- [`97a02d1`](https://redirect.github.com/oxc-project/oxc/commit/97a02d1) oxfmt: Add `insertFinalNewline` option ([#&#8203;17251](https://redirect.github.com/oxc-project/oxc/issues/17251)) (leaysgur)

</details>

---

### Configuration

📅 **Schedule**: 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi41OS4wIiwidXBkYXRlZEluVmVyIjoiNDIuNTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
2025-12-22 12:52:43 +00:00
camc314 3984750c69 refactor(all)!: remove binding pattern wierdness (#15925)
fixes #11489

Note, in quite a few places i changed the span we report on to look something like this, the only reason for this is to reduce the diff in some of the snapshots
```
decl.type_annotation.as_ref().map_or_else(
                        || decl.id.span(),
                        |type_annotation| decl.id.span().merge(type_annotation.span()),
                    ),
```
2025-12-22 10:04:20 +00:00
Boshen 06370495a0 release(crates): oxc v0.105.0 (#17259) 2025-12-22 17:32:08 +08:00
overlookmotel 5aefb84daa perf(linter/plugins): reduce size of walker code (#17176)
By hoisting `let enter;` up out of the the `if` block, minifier is able to convert the `if` statement into a `&&` expression, resulting in tighter minified output.

This optimization is only visible in the bundled output, as that's where we do more aggressive minification.
2025-12-20 13:59:13 +00:00
overlookmotel 19566641dc refactor(linter/plugins, parser/napi): add JSDoc comments to generated code (#17175)
Just add JSDoc comments to some generated code.
2025-12-20 13:59:13 +00:00