Skip to content

fix(resolver): fallback to disk loading if exports is missing - #10978

Merged
ematipico merged 1 commit into
mainfrom
fix/module-resolver-on-disk
Jul 18, 2026
Merged

ematipico merged 1 commit into
mainfrom
fix/module-resolver-on-disk

Conversation

@ematipico

Copy link
Copy Markdown
Member

Summary

Closes #10870

Our resolver now correctly imports packages that omit their exports field. This matches the Node.js.

PR written with a coding agent.

The PR also hardens the resolution of modules by providing better semantics via an enum.

Test Plan

Added new tests

Docs

N/A

@changeset-bot

changeset-bot Bot commented Jul 17, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 1f243bd

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 13 packages
Name Type
@biomejs/biome Patch
@biomejs/cli-win32-x64 Patch
@biomejs/cli-win32-arm64 Patch
@biomejs/cli-darwin-x64 Patch
@biomejs/cli-darwin-arm64 Patch
@biomejs/cli-linux-x64 Patch
@biomejs/cli-linux-arm64 Patch
@biomejs/cli-linux-x64-musl Patch
@biomejs/cli-linux-arm64-musl Patch
@biomejs/wasm-web Patch
@biomejs/wasm-bundler Patch
@biomejs/wasm-nodejs Patch
@biomejs/backend-jsonrpc Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@ematipico
ematipico requested review from a team July 17, 2026 18:18
@github-actions

Copy link
Copy Markdown
Contributor

✅ Organic activity

No automation signals detected in the analyzed events.

View full analysis →

This is an automated analysis by AgentScan

@github-actions github-actions Bot added A-Project Area: project A-Linter Area: linter L-JavaScript Language: JavaScript and super languages A-Resolver Area: resolver labels Jul 17, 2026
@coderabbitai

coderabbitai Bot commented Jul 17, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Updates package self-resolution so packages without an exports field resolve through normal dependency lookup. JavaScript export lookup now distinguishes found, definitively missing, and unresolved re-export targets. Consumers use these outcomes for unresolved-import diagnostics and go-to-definition resolution. Module-graph, resolver, and lint fixtures cover self-references, aliases, namespaces, and unknown re-export targets. A patch changeset records the noUnresolvedImports fix.

Possibly related PRs

  • biomejs/biome#9904: Updates the shared export lookup path and related namespace-resolution tests.

Suggested reviewers: dyc3

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title matches the resolver fallback fix and stays clear and concise.
Description check ✅ Passed The description is on-topic and summarises the resolver and lint fix accurately.
Linked Issues check ✅ Passed The changes address #10870 by avoiding false positives for valid type-only imports while preserving unresolved-import detection.
Out of Scope Changes check ✅ Passed No clear out-of-scope changes stand out; the enum, resolver, lint, and tests all support the same fix.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/module-resolver-on-disk

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
crates/biome_module_graph/src/db/queries.rs (1)

1855-1862: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Preserve Unknown for default re-exports.

ImportSymbol::Default does not set saw_unresolved_target when resolution fails. Thus export { default as foo } from "not-installed" returns Missing, and the analyser can report the false positive this PR addresses. Treat this path—and resolved paths absent from ModuleDb—as Unknown, with a regression test.

Suggested shape
 ImportSymbol::Default => {
-    if let Ok(path) = reexport.import.resolved_path.as_deref()
-        && seen_paths.insert(path.to_path_buf())
-        && let Some(module) = db.module_for_path(path)
-    {
-        stack.push(SymbolFromModuleInfo::new(db, symbol.name(db), module));
+    match reexport.import.resolved_path.as_deref() {
+        Ok(path) if seen_paths.insert(path.to_path_buf()) => {
+            if let Some(module) = db.module_for_path(path) {
+                stack.push(SymbolFromModuleInfo::new(db, symbol.name(db), module));
+            } else {
+                saw_unresolved_target = true;
+            }
+        }
+        Ok(_) => {}
+        Err(_) => saw_unresolved_target = true,
     }
 }

Also applies to: 1882-1886

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_module_graph/src/db/queries.rs` around lines 1855 - 1862, Update
the ImportSymbol::Default handling in the relevant symbol-resolution paths to
mark the result as Unknown when resolved_path is absent, resolution fails, or
the resolved path is missing from ModuleDb, instead of allowing Missing.
Preserve the existing stack traversal for successfully resolved modules, and add
a regression test covering an uninstalled default re-export.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@crates/biome_module_graph/src/db/queries.rs`:
- Around line 1855-1862: Update the ImportSymbol::Default handling in the
relevant symbol-resolution paths to mark the result as Unknown when
resolved_path is absent, resolution fails, or the resolved path is missing from
ModuleDb, instead of allowing Missing. Preserve the existing stack traversal for
successfully resolved modules, and add a regression test covering an uninstalled
default re-export.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 34bc9a2e-d9c6-4013-ace2-2004f670dcb5

📥 Commits

Reviewing files that changed from the base of the PR and between a2589f9 and caab967.

⛔ Files ignored due to path filters (9)
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/node_modules/next/package.json is excluded by !**/node_modules/** and included by **
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/node_modules/next/server.d.ts is excluded by !**/node_modules/** and included by **
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/node_modules/next/server.d.ts.snap is excluded by !**/node_modules/**, !**/*.snap and included by **
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/unknown-reexport-barrel.js.snap is excluded by !**/*.snap and included by **
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/validSelfReferencingPackage.ts.snap is excluded by !**/*.snap and included by **
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/validUnknownReexportTarget.js.snap is excluded by !**/*.snap and included by **
  • crates/biome_resolver/tests/fixtures/resolver_cases_5/node_modules/next/dist/request.d.ts is excluded by !**/dist/**, !**/node_modules/** and included by **
  • crates/biome_resolver/tests/fixtures/resolver_cases_5/node_modules/next/dist/request.js is excluded by !**/dist/**, !**/node_modules/** and included by **
  • crates/biome_resolver/tests/fixtures/resolver_cases_5/node_modules/next/package.json is excluded by !**/node_modules/** and included by **
📒 Files selected for processing (13)
  • .changeset/fix-self-reference-resolution-without-exports.md
  • crates/biome_js_analyze/src/lint/correctness/no_unresolved_imports.rs
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/.gitignore
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/unknown-reexport-barrel.js
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/validSelfReferencingPackage.ts
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/validUnknownReexportTarget.js
  • crates/biome_module_graph/src/db/queries.rs
  • crates/biome_module_graph/src/js_module_info.rs
  • crates/biome_module_graph/src/lib.rs
  • crates/biome_module_graph/tests/spec_tests.rs
  • crates/biome_resolver/src/lib.rs
  • crates/biome_resolver/tests/spec_tests.rs
  • crates/biome_service/src/file_handlers/javascript/go_to.rs

@codspeed

codspeed Bot commented Jul 17, 2026 •

Copy link
Copy Markdown

Merging this PR will improve performance by 8.82%

⚡ 1 improved benchmark
✅ 75 untouched benchmarks
⏩ 192 skipped benchmarks1

Performance Changes

Benchmark BASE HEAD Efficiency
⚡ bench_index_d_ts_salsa_memoized[react/index.d.ts] 90.5 µs 83.2 µs +8.82%

Tip

Curious why this is faster? Comment @codspeedbot explain why this is faster on this PR, or directly use the CodSpeed MCP with your agent.


Comparing fix/module-resolver-on-disk (1f243bd) with main (7df46f5)

Open in CodSpeed

Footnotes

  1. 192 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩

@ematipico
ematipico force-pushed the fix/module-resolver-on-disk branch from caab967 to 1f243bd Compare July 18, 2026 09:45

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/biome_module_graph/src/db/queries.rs`:
- Around line 1807-1811: Update the ImportSymbol::Default handling around
resolved_path and module_for_path so both resolution errors and None results set
saw_unresolved_target before continuing. Preserve Unknown for uninspectable
re-exports, including missing packages, instead of classifying them as Missing
and triggering a false noUnresolvedImports report.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 9ea1c39c-214b-47dc-99f0-e0f138045faa

📥 Commits

Reviewing files that changed from the base of the PR and between caab967 and 1f243bd.

⛔ Files ignored due to path filters (5)
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/unknown-reexport-barrel.js.snap is excluded by !**/*.snap and included by **
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/validUnknownReexportTarget.js.snap is excluded by !**/*.snap and included by **
  • crates/biome_resolver/tests/fixtures/resolver_cases_5/node_modules/next/dist/request.d.ts is excluded by !**/dist/**, !**/node_modules/** and included by **
  • crates/biome_resolver/tests/fixtures/resolver_cases_5/node_modules/next/dist/request.js is excluded by !**/dist/**, !**/node_modules/** and included by **
  • crates/biome_resolver/tests/fixtures/resolver_cases_5/node_modules/next/package.json is excluded by !**/node_modules/** and included by **
📒 Files selected for processing (12)
  • .changeset/fix-self-reference-resolution-without-exports.md
  • crates/biome_js_analyze/src/lint/correctness/no_unresolved_imports.rs
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/.gitignore
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/unknown-reexport-barrel.js
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/validUnknownReexportTarget.js
  • crates/biome_module_graph/src/db/queries.rs
  • crates/biome_module_graph/src/js_module_info.rs
  • crates/biome_module_graph/src/lib.rs
  • crates/biome_module_graph/tests/spec_tests.rs
  • crates/biome_resolver/src/lib.rs
  • crates/biome_resolver/tests/spec_tests.rs
  • crates/biome_service/src/file_handlers/javascript/go_to.rs
🚧 Files skipped from review as they are similar to previous changes (11)
  • .changeset/fix-self-reference-resolution-without-exports.md
  • crates/biome_module_graph/src/lib.rs
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/.gitignore
  • crates/biome_module_graph/src/js_module_info.rs
  • crates/biome_js_analyze/src/lint/correctness/no_unresolved_imports.rs
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/unknown-reexport-barrel.js
  • crates/biome_resolver/tests/spec_tests.rs
  • crates/biome_service/src/file_handlers/javascript/go_to.rs
  • crates/biome_js_analyze/tests/specs/correctness/noUnresolvedImports/validUnknownReexportTarget.js
  • crates/biome_resolver/src/lib.rs
  • crates/biome_module_graph/tests/spec_tests.rs

Comment on lines +1807 to +1811
Ok(_) => break,
Err(_) => {
saw_unresolved_target = true;
break;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Preserve Unknown whenever a re-export cannot be inspected.

The ImportSymbol::Default branch still drops Err from resolved_path, so export { default } from "missing-package" becomes Missing. The same happens when a path resolves but module_for_path(path) returns None. Neither case proves the export is absent; mark saw_unresolved_target so noUnresolvedImports does not report a false positive.

Also applies to: 1826-1834

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_module_graph/src/db/queries.rs` around lines 1807 - 1811, Update
the ImportSymbol::Default handling around resolved_path and module_for_path so
both resolution errors and None results set saw_unresolved_target before
continuing. Preserve Unknown for uninspectable re-exports, including missing
packages, instead of classifying them as Missing and triggering a false
noUnresolvedImports report.

@ematipico
ematipico merged commit 8ebafe1 into main Jul 18, 2026
31 checks passed
@ematipico
ematipico deleted the fix/module-resolver-on-disk branch July 18, 2026 10:14
@github-actions github-actions Bot mentioned this pull request Jul 18, 2026
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Client that referenced this pull request Jul 28, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@biomejs/biome](https://biomejs.dev) ([source](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome)) | imports | patch | [`2.5.4` -> `2.5.5`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.4/2.5.5) |

---

### Release Notes

<details>
<summary>biomejs/biome (@&#8203;biomejs/biome)</summary>

### [`v2.5.5`](https://github.com/biomejs/biome/blob/HEAD/packages/@&#8203;biomejs/biome/CHANGELOG.md#255)

[Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.4...@biomejs/biome@2.5.5)

##### Patch Changes

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`useExhaustiveSwitchCases`](https://biomejs.dev/linter/rules/use-exhaustive-switch-cases/) for unions of bigint literals. The rule now reports missing bigint cases and compares bigint literals by value, including binary, octal, hexadecimal, and separator-containing spellings. For example, this switch now reports the missing `2n` case:

  ```ts
  declare const value: 1n | 2n;
  switch (value) {
    case 1n:
      break;
  }
  ```

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed false positives in [`noBaseToString`](https://biomejs.dev/linter/rules/no-base-to-string/) and [`useNullishCoalescing`](https://biomejs.dev/linter/rules/use-nullish-coalescing/) when member, stringification, or nullish inference cannot complete. These rules now suppress diagnostics instead of reporting from partial type information. For example, neither expression is reported when a recursive type cannot be fully resolved:

  ```ts
  type Recursive = Recursive;
  declare const value: Recursive;

  String(value);
  value || "fallback";
  ```

- [#&#8203;10977](biomejs/biome#10977) [`0bf7486`](biomejs/biome@0bf7486) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10922](biomejs/biome#10922): the action [`useSortedAttributes`](https://biomejs.dev/assist/actions/use-sorted-attributes/) no longer triggers for HTML instructions.

- [#&#8203;10957](biomejs/biome#10957) [`cf263c4`](biomejs/biome@cf263c4) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/) failing to detect `Object.fromEntries`, `Object.defineProperty`, and `Reflect.defineProperty` calls with comments between their tokens.

- [#&#8203;10983](biomejs/biome#10983) [`edc0ed7`](biomejs/biome@edc0ed7) Thanks [@&#8203;ayaangazali](https://github.com/ayaangazali)! - Fixed [#&#8203;10980](biomejs/biome#10980): [`useAriaPropsSupportedByRole`](https://biomejs.dev/linter/rules/use-aria-props-supported-by-role/) no longer reports false positives when the attribute that determines an element's implicit ARIA role is written as a shorthand attribute, such as `<a {href} aria-label="...">` in Astro and Svelte files.

  Shorthand attributes are now taken into account when computing the implicit role, so the anchor above correctly resolves to the `link` role instead of `generic`.

- [#&#8203;10889](biomejs/biome#10889) [`89526e3`](biomejs/biome@89526e3) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatter casing for syntax-owned names while preserving author-defined names, including scoped keyframes and container scroll-state queries.

  ```diff
  - A:HOVER { COLOR: INITIAL; }
  + A:hover { color: initial; }
  - @&#8203;KEYFRAMES :GLOBAL KeepFrames { FROM { COLOR: RED; } }
  + @&#8203;keyframes :GLOBAL KeepFrames { from { color: RED; } }
  - @&#8203;CONTAINER scroll-state((SCROLLED: TOP) AND (STUCK)) { A:HOVER { COLOR: RED; } }
  + @&#8203;container scroll-state((SCROLLED: TOP) AND (STUCK)) { A:hover { color: RED; } }
  ```

- [#&#8203;10964](biomejs/biome#10964) [`794ccd0`](biomejs/biome@794ccd0) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting for comments between declaration values and `!important`.

  ```diff
  -a { color: /* before */ /* after */ red !important; }
  +a { color: /* before */ red /* after */ !important; }
  ```

- [#&#8203;10993](biomejs/biome#10993) [`b7a9694`](biomejs/biome@b7a9694) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed the CSS formatter to preserve comments on the correct side of selector combinators and before declaration blocks.

  ```diff
  -.before > /* comment */ .after {}
  +.before /* comment */ > .after {}
  ```

  It now also keeps selectors with escaped newlines in attribute values inline when they fit.

  ```diff
  -div
  -  span[foo="bar\
  +div span[foo="bar\
   value"] {}
  ```

- [#&#8203;10978](biomejs/biome#10978) [`8ebafe1`](biomejs/biome@8ebafe1) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10870](biomejs/biome#10870): [`noUnresolvedImports`](https://biomejs.dev/linter/rules/no-unresolved-imports/) no longer reports false positives such as `import type { NextRequest } from "next/server"`.

- [#&#8203;10901](biomejs/biome#10901) [`68c10e6`](biomejs/biome@68c10e6) Thanks [@&#8203;Socialpranker](https://github.com/Socialpranker)! - Fixed [#&#8203;10622](biomejs/biome#10622): the HTML/Vue parser no longer panics on the argument-less `v-bind` shorthand (`:="props"`).

  This syntax is valid Vue and equivalent to `v-bind="props"`, so the parser now accepts it (along with the longhand `v-bind:="props"`) instead of crashing while building a diagnostic for a missing argument.

- [#&#8203;10936](biomejs/biome#10936) [`7df46f5`](biomejs/biome@7df46f5) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved generic tuple inference for [`useIncludes`](https://biomejs.dev/linter/rules/use-includes/). The rule now recognizes specialised tuple element types returned through generic aliases.

- [#&#8203;10941](biomejs/biome#10941) [`f787725`](biomejs/biome@f787725) Thanks [@&#8203;siketyan](https://github.com/siketyan)! - Fixed [`#10855`](biomejs/biome#10855): Biome now supports parsing and formatting CSS custom media queries declared with [`@custom-media`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@&#8203;custom-media).

- [#&#8203;10969](biomejs/biome#10969) [`72d309b`](biomejs/biome@72d309b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where Biome logs became too verbose, dumping information not relevant to user's operations.

- [`e62f6b6`](biomejs/biome@e62f6b6) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10963](biomejs/biome#10963): Biome no longer panics when a type-aware rule such as [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) checks a call to a function with multiple call signatures imported from another module.

- [#&#8203;10931](biomejs/biome#10931) [`899c60d`](biomejs/biome@899c60d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed `check --write` command. Now the command reports code frame of the formatted code, if the formatter is enabled.

- [#&#8203;10904](biomejs/biome#10904) [`ceee4f4`](biomejs/biome@ceee4f4) Thanks [@&#8203;qzwxsaedc](https://github.com/qzwxsaedc)! - Fixed [#&#8203;10892](biomejs/biome#10892): [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) no longer reports a false positive when checking a member of a discriminated union that is accessed through a default type-only namespace import. The following code is no longer flagged:

  ```ts
  import type Types from "./types";

  declare function parse(): Types.Result<string>;
  const result = parse();
  if (!result.success) {
  }
  ```

- [#&#8203;10962](biomejs/biome#10962) [`f0a67f2`](biomejs/biome@f0a67f2) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Biome no longer removes embedded styles and scripts in HTML files.

- [#&#8203;11000](biomejs/biome#11000) [`5039a1e`](biomejs/biome@5039a1e) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed a bug where closing one editor stopped a shared Biome daemon used by other editors. LSP proxy processes now exit when either the editor or daemon disconnects.

- [#&#8203;10957](biomejs/biome#10957) [`cf263c4`](biomejs/biome@cf263c4) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of the [`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/) lint rule by about 50%.

- [#&#8203;10992](biomejs/biome#10992) [`4bf9b21`](biomejs/biome@4bf9b21) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/): The rule now reports Promise-returning callbacks where a synchronous callback is expected when calls use tuple spreads or tuple rest parameters, including generic and deeply nested tuples, and when constructor signatures come from interface or object types. Recursive or excessively nested tuple spreads use a conservative fallback so analysis terminates.

  For example, the following callback is now reported.

  ```ts
  declare function consume(...args: [number, () => void]): void;
  const prefix: [number] = [1];

  consume(...prefix, async () => {});
  ```

- [#&#8203;10915](biomejs/biome#10915) [`b3b12b3`](biomejs/biome@b3b12b3) Thanks [@&#8203;Functionhx](https://github.com/Functionhx)! - Added the rule [`noNegationInEqualityCheck`](https://biomejs.dev/linter/rules/no-negation-in-equality-check/). The rule flags negated expressions on the left side of strict equality checks like `!foo === bar` — due to operator precedence this evaluates as `(!foo) === bar` which is almost always a mistake for `foo !== bar`.

  The rule provides an unsafe fix that flips the operator.

  ```js
  // Invalid
  !foo === bar;
  !foo !== bar;

  // Valid
  foo !== bar;
  foo === bar;
  ```

- [#&#8203;10970](biomejs/biome#10970) [`bd1038b`](biomejs/biome@bd1038b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved overload selection for [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/). Biome now handles overloaded calls, overloaded constructors, rest parameters, union arguments, and generic constraints without selecting an incompatible signature. For example, `noMisusedPromises` now reports the async callback passed to the synchronous overload:

  ```ts
  declare function consume(kind: "async", callback: () => Promise<void>): void;
  declare function consume(kind: "sync", callback: () => void): void;
  consume("sync", async () => {});
  ```

- [#&#8203;10933](biomejs/biome#10933) [`48a4abb`](biomejs/biome@48a4abb) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/) to recognize bigint zero indexes.

- [#&#8203;10931](biomejs/biome#10931) [`899c60d`](biomejs/biome@899c60d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an orchestration issue that could lead to deadlocks when type-aware rules are enabled.

- [#&#8203;10969](biomejs/biome#10969) [`72d309b`](biomejs/biome@72d309b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Hardened the Biome Language Server by improving its synchronisation logic.

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed false positives in [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) and [`useAwaitThenable`](https://biomejs.dev/linter/rules/use-await-thenable/) when Promise or thenable inference cannot complete. These rules now suppress diagnostics instead of treating incomplete type information as a definite result. For example, `useAwaitThenable` no longer reports `await value` when the value's thenability is unknown:

  ```ts
  declare const value: unknown;

  async function consume() {
    await value;
  }
  ```

</details>

---

### Configuration

📅 **Schedule**: (UTC)

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

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **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 has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzIuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI3Mi40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Client/pulls/14
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Server that referenced this pull request Jul 28, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@biomejs/biome](https://biomejs.dev) ([source](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome)) | imports | patch | [`2.5.4` -> `2.5.5`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.4/2.5.5) |

---

### Release Notes

<details>
<summary>biomejs/biome (@&#8203;biomejs/biome)</summary>

### [`v2.5.5`](https://github.com/biomejs/biome/blob/HEAD/packages/@&#8203;biomejs/biome/CHANGELOG.md#255)

[Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.4...@biomejs/biome@2.5.5)

##### Patch Changes

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`useExhaustiveSwitchCases`](https://biomejs.dev/linter/rules/use-exhaustive-switch-cases/) for unions of bigint literals. The rule now reports missing bigint cases and compares bigint literals by value, including binary, octal, hexadecimal, and separator-containing spellings. For example, this switch now reports the missing `2n` case:

  ```ts
  declare const value: 1n | 2n;
  switch (value) {
    case 1n:
      break;
  }
  ```

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed false positives in [`noBaseToString`](https://biomejs.dev/linter/rules/no-base-to-string/) and [`useNullishCoalescing`](https://biomejs.dev/linter/rules/use-nullish-coalescing/) when member, stringification, or nullish inference cannot complete. These rules now suppress diagnostics instead of reporting from partial type information. For example, neither expression is reported when a recursive type cannot be fully resolved:

  ```ts
  type Recursive = Recursive;
  declare const value: Recursive;

  String(value);
  value || "fallback";
  ```

- [#&#8203;10977](biomejs/biome#10977) [`0bf7486`](biomejs/biome@0bf7486) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10922](biomejs/biome#10922): the action [`useSortedAttributes`](https://biomejs.dev/assist/actions/use-sorted-attributes/) no longer triggers for HTML instructions.

- [#&#8203;10957](biomejs/biome#10957) [`cf263c4`](biomejs/biome@cf263c4) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/) failing to detect `Object.fromEntries`, `Object.defineProperty`, and `Reflect.defineProperty` calls with comments between their tokens.

- [#&#8203;10983](biomejs/biome#10983) [`edc0ed7`](biomejs/biome@edc0ed7) Thanks [@&#8203;ayaangazali](https://github.com/ayaangazali)! - Fixed [#&#8203;10980](biomejs/biome#10980): [`useAriaPropsSupportedByRole`](https://biomejs.dev/linter/rules/use-aria-props-supported-by-role/) no longer reports false positives when the attribute that determines an element's implicit ARIA role is written as a shorthand attribute, such as `<a {href} aria-label="...">` in Astro and Svelte files.

  Shorthand attributes are now taken into account when computing the implicit role, so the anchor above correctly resolves to the `link` role instead of `generic`.

- [#&#8203;10889](biomejs/biome#10889) [`89526e3`](biomejs/biome@89526e3) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatter casing for syntax-owned names while preserving author-defined names, including scoped keyframes and container scroll-state queries.

  ```diff
  - A:HOVER { COLOR: INITIAL; }
  + A:hover { color: initial; }
  - @&#8203;KEYFRAMES :GLOBAL KeepFrames { FROM { COLOR: RED; } }
  + @&#8203;keyframes :GLOBAL KeepFrames { from { color: RED; } }
  - @&#8203;CONTAINER scroll-state((SCROLLED: TOP) AND (STUCK)) { A:HOVER { COLOR: RED; } }
  + @&#8203;container scroll-state((SCROLLED: TOP) AND (STUCK)) { A:hover { color: RED; } }
  ```

- [#&#8203;10964](biomejs/biome#10964) [`794ccd0`](biomejs/biome@794ccd0) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting for comments between declaration values and `!important`.

  ```diff
  -a { color: /* before */ /* after */ red !important; }
  +a { color: /* before */ red /* after */ !important; }
  ```

- [#&#8203;10993](biomejs/biome#10993) [`b7a9694`](biomejs/biome@b7a9694) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed the CSS formatter to preserve comments on the correct side of selector combinators and before declaration blocks.

  ```diff
  -.before > /* comment */ .after {}
  +.before /* comment */ > .after {}
  ```

  It now also keeps selectors with escaped newlines in attribute values inline when they fit.

  ```diff
  -div
  -  span[foo="bar\
  +div span[foo="bar\
   value"] {}
  ```

- [#&#8203;10978](biomejs/biome#10978) [`8ebafe1`](biomejs/biome@8ebafe1) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10870](biomejs/biome#10870): [`noUnresolvedImports`](https://biomejs.dev/linter/rules/no-unresolved-imports/) no longer reports false positives such as `import type { NextRequest } from "next/server"`.

- [#&#8203;10901](biomejs/biome#10901) [`68c10e6`](biomejs/biome@68c10e6) Thanks [@&#8203;Socialpranker](https://github.com/Socialpranker)! - Fixed [#&#8203;10622](biomejs/biome#10622): the HTML/Vue parser no longer panics on the argument-less `v-bind` shorthand (`:="props"`).

  This syntax is valid Vue and equivalent to `v-bind="props"`, so the parser now accepts it (along with the longhand `v-bind:="props"`) instead of crashing while building a diagnostic for a missing argument.

- [#&#8203;10936](biomejs/biome#10936) [`7df46f5`](biomejs/biome@7df46f5) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved generic tuple inference for [`useIncludes`](https://biomejs.dev/linter/rules/use-includes/). The rule now recognizes specialised tuple element types returned through generic aliases.

- [#&#8203;10941](biomejs/biome#10941) [`f787725`](biomejs/biome@f787725) Thanks [@&#8203;siketyan](https://github.com/siketyan)! - Fixed [`#10855`](biomejs/biome#10855): Biome now supports parsing and formatting CSS custom media queries declared with [`@custom-media`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@&#8203;custom-media).

- [#&#8203;10969](biomejs/biome#10969) [`72d309b`](biomejs/biome@72d309b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where Biome logs became too verbose, dumping information not relevant to user's operations.

- [`e62f6b6`](biomejs/biome@e62f6b6) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10963](biomejs/biome#10963): Biome no longer panics when a type-aware rule such as [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) checks a call to a function with multiple call signatures imported from another module.

- [#&#8203;10931](biomejs/biome#10931) [`899c60d`](biomejs/biome@899c60d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed `check --write` command. Now the command reports code frame of the formatted code, if the formatter is enabled.

- [#&#8203;10904](biomejs/biome#10904) [`ceee4f4`](biomejs/biome@ceee4f4) Thanks [@&#8203;qzwxsaedc](https://github.com/qzwxsaedc)! - Fixed [#&#8203;10892](biomejs/biome#10892): [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) no longer reports a false positive when checking a member of a discriminated union that is accessed through a default type-only namespace import. The following code is no longer flagged:

  ```ts
  import type Types from "./types";

  declare function parse(): Types.Result<string>;
  const result = parse();
  if (!result.success) {
  }
  ```

- [#&#8203;10962](biomejs/biome#10962) [`f0a67f2`](biomejs/biome@f0a67f2) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Biome no longer removes embedded styles and scripts in HTML files.

- [#&#8203;11000](biomejs/biome#11000) [`5039a1e`](biomejs/biome@5039a1e) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed a bug where closing one editor stopped a shared Biome daemon used by other editors. LSP proxy processes now exit when either the editor or daemon disconnects.

- [#&#8203;10957](biomejs/biome#10957) [`cf263c4`](biomejs/biome@cf263c4) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of the [`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/) lint rule by about 50%.

- [#&#8203;10992](biomejs/biome#10992) [`4bf9b21`](biomejs/biome@4bf9b21) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/): The rule now reports Promise-returning callbacks where a synchronous callback is expected when calls use tuple spreads or tuple rest parameters, including generic and deeply nested tuples, and when constructor signatures come from interface or object types. Recursive or excessively nested tuple spreads use a conservative fallback so analysis terminates.

  For example, the following callback is now reported.

  ```ts
  declare function consume(...args: [number, () => void]): void;
  const prefix: [number] = [1];

  consume(...prefix, async () => {});
  ```

- [#&#8203;10915](biomejs/biome#10915) [`b3b12b3`](biomejs/biome@b3b12b3) Thanks [@&#8203;Functionhx](https://github.com/Functionhx)! - Added the rule [`noNegationInEqualityCheck`](https://biomejs.dev/linter/rules/no-negation-in-equality-check/). The rule flags negated expressions on the left side of strict equality checks like `!foo === bar` — due to operator precedence this evaluates as `(!foo) === bar` which is almost always a mistake for `foo !== bar`.

  The rule provides an unsafe fix that flips the operator.

  ```js
  // Invalid
  !foo === bar;
  !foo !== bar;

  // Valid
  foo !== bar;
  foo === bar;
  ```

- [#&#8203;10970](biomejs/biome#10970) [`bd1038b`](biomejs/biome@bd1038b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved overload selection for [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/). Biome now handles overloaded calls, overloaded constructors, rest parameters, union arguments, and generic constraints without selecting an incompatible signature. For example, `noMisusedPromises` now reports the async callback passed to the synchronous overload:

  ```ts
  declare function consume(kind: "async", callback: () => Promise<void>): void;
  declare function consume(kind: "sync", callback: () => void): void;
  consume("sync", async () => {});
  ```

- [#&#8203;10933](biomejs/biome#10933) [`48a4abb`](biomejs/biome@48a4abb) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/) to recognize bigint zero indexes.

- [#&#8203;10931](biomejs/biome#10931) [`899c60d`](biomejs/biome@899c60d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an orchestration issue that could lead to deadlocks when type-aware rules are enabled.

- [#&#8203;10969](biomejs/biome#10969) [`72d309b`](biomejs/biome@72d309b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Hardened the Biome Language Server by improving its synchronisation logic.

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed false positives in [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) and [`useAwaitThenable`](https://biomejs.dev/linter/rules/use-await-thenable/) when Promise or thenable inference cannot complete. These rules now suppress diagnostics instead of treating incomplete type information as a definite result. For example, `useAwaitThenable` no longer reports `await value` when the value's thenability is unknown:

  ```ts
  declare const value: unknown;

  async function consume() {
    await value;
  }
  ```

</details>

---

### Configuration

📅 **Schedule**: (UTC)

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

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **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 has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzIuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI3Mi40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Server/pulls/31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Linter Area: linter A-Project Area: project A-Resolver Area: resolver L-JavaScript Language: JavaScript and super languages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

💅 noUnresolvedImports falsely flags some normal imports

2 participants