Skip to content

test: broaden client-nav benchmark coverage#7010

Merged
Sheraff merged 2 commits intomainfrom
opencode/kind-comet
Mar 22, 2026
Merged

test: broaden client-nav benchmark coverage#7010
Sheraff merged 2 commits intomainfrom
opencode/kind-comet

Conversation

@Sheraff
Copy link
Copy Markdown
Contributor

@Sheraff Sheraff commented Mar 22, 2026

Summary

  • expand the client-nav benchmark route tree across React, Solid, and Vue to cover fast-path item routes plus richer search and context routes
  • vary Link inputs and benchmark steps so each 10-navigation loop exercises more location-building, active matching, and route option code paths
  • update the benchmark setups to mix link clicks with object-based imperative navigations and add MouseEvent to the shared jsdom benchmark environment

Testing

  • CI=1 NX_DAEMON=false pnpm test:eslint
  • CI=1 NX_DAEMON=false pnpm test:unit
  • CI=1 NX_DAEMON=false pnpm test:types
  • CI=1 NX_DAEMON=false pnpm nx run @benchmarks/client-nav:test:perf:react --outputStyle=stream --skipRemoteCache
  • CI=1 NX_DAEMON=false pnpm nx run @benchmarks/client-nav:test:perf:solid --outputStyle=stream --skipRemoteCache
  • CI=1 NX_DAEMON=false pnpm nx run @benchmarks/client-nav:test:perf:vue --outputStyle=stream --skipRemoteCache
  • CI=1 NX_DAEMON=false pnpm nx run @benchmarks/client-nav:test:flame:react --outputStyle=stream --skipRemoteCache

Summary by CodeRabbit

  • Tests

    • Benchmarks refactored to deterministic, step-based navigation with mixed programmatic navigation and synthetic clicks; added link discovery/wait helpers.
  • New Features

    • Expanded routing with item, search, details and context routes; improved navigation panel with grouped links and search-preserving navigation.
    • Added input normalization for search params (page, filter).
  • Chores

    • Reduced benchmark iteration workload and added a global MouseEvent binding for test environments.
  • Chores

    • Updated loader-deps type/return shape (public API signature change).

Exercise fast and rich client-navigation paths across React, Solid, and Vue so performance regressions surface across more router code paths.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 22, 2026

📝 Walkthrough

Walkthrough

Added a JSDOM MouseEvent global, reduced perf-loop iterations, replaced single /$id routing with a multi-route tree (/items/$id, /search, /ctx/$id) across React/Solid/Vue, added normalization helpers and subscriber-style perf readers, switched navigation to deterministic step sequences with synthetic clicks, added link discovery helpers, and updated a Vue router type to return a Vue.Ref.

Changes

Cohort / File(s) Summary
Global JSDOM
benchmarks/client-nav/jsdom.ts
Expose globalThis.MouseEvent from the JSDOM window.
Link discovery helpers
benchmarks/client-nav/setup-helpers.ts
Add getRequiredLink and waitForRequiredLink to locate/cache anchors by data-testid with retry via animation frames.
React benchmark
benchmarks/client-nav/react/app.tsx, benchmarks/client-nav/react/setup.ts
Reduced perf iterations (100→40); replace /$id with route tree (/items/$id, /search, /ctx/$id); add normalizePage/normalizeFilter; move to subscriber-style perf components; convert navigation to deterministic steps mixing router.navigate and synthetic anchor clicks; cache required links; initial entry now /items/0.
Solid benchmark
benchmarks/client-nav/solid/app.tsx, benchmarks/client-nav/solid/setup.ts
Parallel React changes: loop reduction, route-tree with parse/stringify and nested details, search validation/middleware, loaders and route context, subscriber PerfValue components, deterministic steps with cached anchor clicks, rename disposeunmount.
Vue benchmark
benchmarks/client-nav/vue/app.tsx, benchmarks/client-nav/vue/setup.ts
Same pattern as React/Solid: iterations reduced, new route tree, normalization utilities, loaderDeps/loader usage for search seed/checksum, subscriber components, grouped LinkPanel, deterministic steps with pre-warmed cached anchors and synthetic clicks; initial entry /items/0.
Router types & tests
packages/vue-router/src/useLoaderDeps.tsx, packages/vue-router/tests/routeApi.test-d.tsx
Change useLoaderDeps to return Vue.Ref<UseLoaderDepsResult<...>>; update corresponding test type assertion to Vue.Ref<{ dep: number }>.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 I hopped through routes from id to tree,

items, search, and context follow me.
Links pre-warmed, clicks set in line,
perf loops trimmed to keep things fine.
A rabbit's cheer for benchmarks refined! 🚀

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'test: broaden client-nav benchmark coverage' directly and accurately describes the main objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch opencode/kind-comet

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

@nx-cloud
Copy link
Copy Markdown
Contributor

nx-cloud bot commented Mar 22, 2026

View your CI Pipeline Execution ↗ for commit 31001ee

Command Status Duration Result
nx affected --targets=test:eslint,test:unit,tes... ✅ Succeeded 7m 38s View ↗
nx run-many --target=build --exclude=examples/*... ✅ Succeeded 27s View ↗

☁️ Nx Cloud last updated this comment at 2026-03-22 11:52:14 UTC

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 22, 2026

🚀 Changeset Version Preview

No changeset entries found. Merging this PR will not cause a version bump for any packages.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 22, 2026

Bundle Size Benchmarks

  • Commit: 67d9e69d72ef
  • Measured at: 2026-03-22T11:45:33.750Z
  • Baseline source: history:c9e18555f3a5
  • Dashboard: bundle-size history
Scenario Current (gzip) Delta vs baseline Raw Brotli Trend
react-router.minimal 88.15 KiB 0 B (0.00%) 278.36 KiB 76.56 KiB ▁▁▁▁██████▅
react-router.full 91.31 KiB 0 B (0.00%) 289.09 KiB 79.22 KiB ▁▁▁▁██████▅
solid-router.minimal 35.80 KiB 0 B (0.00%) 108.26 KiB 32.08 KiB ████▃▃▃▃▃▃▁
solid-router.full 40.15 KiB 0 B (0.00%) 121.40 KiB 35.93 KiB ████▃▃▃▃▃▃▁
vue-router.minimal 53.78 KiB 0 B (0.00%) 154.49 KiB 48.23 KiB ▁▁▁▁██████▆
vue-router.full 58.55 KiB 0 B (0.00%) 169.64 KiB 52.31 KiB ▁▁▁▁██████▆
react-start.minimal 102.44 KiB 0 B (0.00%) 326.12 KiB 88.61 KiB ▁▁▁▁██████▄
react-start.full 105.86 KiB 0 B (0.00%) 336.43 KiB 91.48 KiB ▁▁▁▁██████▅
solid-start.minimal 49.87 KiB 0 B (0.00%) 154.45 KiB 43.93 KiB ████▃▃▃▃▃▃▁
solid-start.full 55.26 KiB 0 B (0.00%) 170.28 KiB 48.53 KiB ████▄▄▄▄▄▄▁

Trend sparkline is historical gzip bytes ending with this PR measurement; lower is better.

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new bot commented Mar 22, 2026

More templates

@tanstack/arktype-adapter

npm i https://pkg.pr.new/@tanstack/arktype-adapter@7010

@tanstack/eslint-plugin-router

npm i https://pkg.pr.new/@tanstack/eslint-plugin-router@7010

@tanstack/history

npm i https://pkg.pr.new/@tanstack/history@7010

@tanstack/nitro-v2-vite-plugin

npm i https://pkg.pr.new/@tanstack/nitro-v2-vite-plugin@7010

@tanstack/react-router

npm i https://pkg.pr.new/@tanstack/react-router@7010

@tanstack/react-router-devtools

npm i https://pkg.pr.new/@tanstack/react-router-devtools@7010

@tanstack/react-router-ssr-query

npm i https://pkg.pr.new/@tanstack/react-router-ssr-query@7010

@tanstack/react-start

npm i https://pkg.pr.new/@tanstack/react-start@7010

@tanstack/react-start-client

npm i https://pkg.pr.new/@tanstack/react-start-client@7010

@tanstack/react-start-server

npm i https://pkg.pr.new/@tanstack/react-start-server@7010

@tanstack/router-cli

npm i https://pkg.pr.new/@tanstack/router-cli@7010

@tanstack/router-core

npm i https://pkg.pr.new/@tanstack/router-core@7010

@tanstack/router-devtools

npm i https://pkg.pr.new/@tanstack/router-devtools@7010

@tanstack/router-devtools-core

npm i https://pkg.pr.new/@tanstack/router-devtools-core@7010

@tanstack/router-generator

npm i https://pkg.pr.new/@tanstack/router-generator@7010

@tanstack/router-plugin

npm i https://pkg.pr.new/@tanstack/router-plugin@7010

@tanstack/router-ssr-query-core

npm i https://pkg.pr.new/@tanstack/router-ssr-query-core@7010

@tanstack/router-utils

npm i https://pkg.pr.new/@tanstack/router-utils@7010

@tanstack/router-vite-plugin

npm i https://pkg.pr.new/@tanstack/router-vite-plugin@7010

@tanstack/solid-router

npm i https://pkg.pr.new/@tanstack/solid-router@7010

@tanstack/solid-router-devtools

npm i https://pkg.pr.new/@tanstack/solid-router-devtools@7010

@tanstack/solid-router-ssr-query

npm i https://pkg.pr.new/@tanstack/solid-router-ssr-query@7010

@tanstack/solid-start

npm i https://pkg.pr.new/@tanstack/solid-start@7010

@tanstack/solid-start-client

npm i https://pkg.pr.new/@tanstack/solid-start-client@7010

@tanstack/solid-start-server

npm i https://pkg.pr.new/@tanstack/solid-start-server@7010

@tanstack/start-client-core

npm i https://pkg.pr.new/@tanstack/start-client-core@7010

@tanstack/start-fn-stubs

npm i https://pkg.pr.new/@tanstack/start-fn-stubs@7010

@tanstack/start-plugin-core

npm i https://pkg.pr.new/@tanstack/start-plugin-core@7010

@tanstack/start-server-core

npm i https://pkg.pr.new/@tanstack/start-server-core@7010

@tanstack/start-static-server-functions

npm i https://pkg.pr.new/@tanstack/start-static-server-functions@7010

@tanstack/start-storage-context

npm i https://pkg.pr.new/@tanstack/start-storage-context@7010

@tanstack/valibot-adapter

npm i https://pkg.pr.new/@tanstack/valibot-adapter@7010

@tanstack/virtual-file-routes

npm i https://pkg.pr.new/@tanstack/virtual-file-routes@7010

@tanstack/vue-router

npm i https://pkg.pr.new/@tanstack/vue-router@7010

@tanstack/vue-router-devtools

npm i https://pkg.pr.new/@tanstack/vue-router-devtools@7010

@tanstack/vue-router-ssr-query

npm i https://pkg.pr.new/@tanstack/vue-router-ssr-query@7010

@tanstack/vue-start

npm i https://pkg.pr.new/@tanstack/vue-start@7010

@tanstack/vue-start-client

npm i https://pkg.pr.new/@tanstack/vue-start-client@7010

@tanstack/vue-start-server

npm i https://pkg.pr.new/@tanstack/vue-start-server@7010

@tanstack/zod-adapter

npm i https://pkg.pr.new/@tanstack/zod-adapter@7010

commit: 31001ee

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
benchmarks/client-nav/react/setup.ts (1)

7-49: Consider extracting shared helpers to reduce cross-framework duplication.

The getRequiredLink and waitForRequiredLink functions are copied verbatim across react/setup.ts, solid/setup.ts, and vue/setup.ts. These are framework-agnostic DOM utilities that could be extracted to a shared module like benchmarks/client-nav/helpers.ts.

♻️ Proposed shared module

Create benchmarks/client-nav/helpers.ts:

export function getRequiredLink(
  container: ParentNode,
  testId: string,
  cache?: Map<string, HTMLAnchorElement>,
): HTMLAnchorElement {
  const cachedLink = cache?.get(testId)
  if (cachedLink) {
    return cachedLink
  }

  const link = container.querySelector<HTMLAnchorElement>(
    `[data-testid="${testId}"]`,
  )
  if (!link) {
    throw new Error(`Unable to find benchmark link: ${testId}`)
  }

  cache?.set(testId, link)
  return link
}

export async function waitForRequiredLink(
  container: ParentNode,
  testId: string,
  cache?: Map<string, HTMLAnchorElement>,
): Promise<HTMLAnchorElement> {
  for (let attempt = 0; attempt < 10; attempt++) {
    const link = container.querySelector<HTMLAnchorElement>(
      `[data-testid="${testId}"]`,
    )

    if (link) {
      cache?.set(testId, link)
      return link
    }

    await new Promise<void>((resolve) => {
      requestAnimationFrame(() => resolve())
    })
  }

  return getRequiredLink(container, testId, cache)
}

Based on learnings: "Separate framework-agnostic core logic from React/Solid bindings".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@benchmarks/client-nav/react/setup.ts` around lines 7 - 49, Extract the
duplicated DOM utilities getRequiredLink and waitForRequiredLink into a new
shared module (e.g., benchmarks/client-nav/helpers.ts) that exports both
functions with the same signatures and return types, then replace the local
copies in react/setup.ts (and similarly in solid/setup.ts and vue/setup.ts) with
imports from that module; ensure the new helpers export types for ParentNode and
HTMLAnchorElement usage and update any references to cache or call sites to use
the imported getRequiredLink and waitForRequiredLink functions.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@benchmarks/client-nav/vue/app.tsx`:
- Around line 185-197: The declared return type for useLoaderDeps is incorrect:
update its signature so it returns a Vue.Ref wrapping UseLoaderDepsResult (i.e.,
Vue.Ref<UseLoaderDepsResult<TRouter, TFrom, TSelected>>) because the
implementation calls useMatch() and returns a ref; change the type definition
for useLoaderDeps to match useSearch's pattern, removing the need for the local
workaround (the cast to Vue.Ref<number>) and ensure UseLoaderDepsResult,
useLoaderDeps, useMatch and useSearch are referenced in the updated type
signature.

---

Nitpick comments:
In `@benchmarks/client-nav/react/setup.ts`:
- Around line 7-49: Extract the duplicated DOM utilities getRequiredLink and
waitForRequiredLink into a new shared module (e.g.,
benchmarks/client-nav/helpers.ts) that exports both functions with the same
signatures and return types, then replace the local copies in react/setup.ts
(and similarly in solid/setup.ts and vue/setup.ts) with imports from that
module; ensure the new helpers export types for ParentNode and HTMLAnchorElement
usage and update any references to cache or call sites to use the imported
getRequiredLink and waitForRequiredLink functions.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 2317288d-f196-4022-bd1b-18f7c87fa3e3

📥 Commits

Reviewing files that changed from the base of the PR and between 67d9e69 and 83cbdb7.

📒 Files selected for processing (7)
  • benchmarks/client-nav/jsdom.ts
  • benchmarks/client-nav/react/app.tsx
  • benchmarks/client-nav/react/setup.ts
  • benchmarks/client-nav/solid/app.tsx
  • benchmarks/client-nav/solid/setup.ts
  • benchmarks/client-nav/vue/app.tsx
  • benchmarks/client-nav/vue/setup.ts

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 83cbdb7eae

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Mar 22, 2026

Merging this PR will degrade performance by 35.47%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

❌ 3 (👁 3) regressed benchmarks
✅ 3 untouched benchmarks

Performance Changes

Benchmark BASE HEAD Efficiency
👁 client-side navigation loop (solid) 82.6 ms 116.3 ms -28.94%
👁 client-side navigation loop (react) 45.6 ms 61.3 ms -25.63%
👁 client-side navigation loop (vue) 58.6 ms 90.9 ms -35.47%

Comparing opencode/kind-comet (31001ee) with main (c9e1855)

Open in CodSpeed

Keep benchmark navigations steady-state across frameworks and align Vue loader deps typing with the ref-based runtime API.
@Sheraff
Copy link
Copy Markdown
Contributor Author

Sheraff commented Mar 22, 2026

Addressed the review feedback in commit 31001ee:

  • extracted the shared benchmark DOM link helpers into benchmarks/client-nav/setup-helpers.ts
  • made the exercised benchmark navigations steady-state by using replace across the React, Solid, and Vue benchmark steps
  • removed the Solid-only hidden DOM subscriber update and switched it to a render-phase reactive effect
  • fixed Vue useLoaderDeps to return a Ref in the public type surface and updated the route API type test plus benchmark usage accordingly

Re-ran:

  • CI=1 NX_DAEMON=false pnpm test:eslint
  • CI=1 NX_DAEMON=false pnpm test:unit
  • CI=1 NX_DAEMON=false pnpm test:types
  • CI=1 NX_DAEMON=false pnpm nx run @benchmarks/client-nav:test:perf:react --outputStyle=stream --skipRemoteCache
  • CI=1 NX_DAEMON=false pnpm nx run @benchmarks/client-nav:test:perf:solid --outputStyle=stream --skipRemoteCache
  • CI=1 NX_DAEMON=false pnpm nx run @benchmarks/client-nav:test:perf:vue --outputStyle=stream --skipRemoteCache

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@benchmarks/client-nav/react/setup.ts`:
- Around line 1-3: The import order violates ESLint: move the value imports
(getRequiredLink, waitForRequiredLink) before the type-only imports;
specifically, place the import of getRequiredLink and waitForRequiredLink ahead
of the type imports for NavigateOptions and App so the file imports read with
value imports first and type imports (NavigateOptions, App) afterward.

In `@benchmarks/client-nav/solid/setup.ts`:
- Around line 1-3: Reorder the imports so runtime/value imports come before
type-only imports: move the import of getRequiredLink and waitForRequiredLink
(from ../setup-helpers) above the type imports for NavigateOptions and App;
ensure the final order is value imports first (getRequiredLink,
waitForRequiredLink) followed by type imports (import type { NavigateOptions }
from '@tanstack/router-core' and import type * as App from './app').

In `@benchmarks/client-nav/vue/setup.ts`:
- Around line 1-3: Reorder the import statements so value imports come before
type-only imports: move the import of getRequiredLink and waitForRequiredLink
from '../setup-helpers' to be above the type imports (NavigateOptions and App)
so that value imports precede type imports; update the import order in the
module containing the getRequiredLink/waitForRequiredLink usage to satisfy
ESLint's import-order rule.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5f69168d-7f1d-46c5-903a-01c849498f14

📥 Commits

Reviewing files that changed from the base of the PR and between 83cbdb7 and 31001ee.

📒 Files selected for processing (9)
  • benchmarks/client-nav/react/app.tsx
  • benchmarks/client-nav/react/setup.ts
  • benchmarks/client-nav/setup-helpers.ts
  • benchmarks/client-nav/solid/app.tsx
  • benchmarks/client-nav/solid/setup.ts
  • benchmarks/client-nav/vue/app.tsx
  • benchmarks/client-nav/vue/setup.ts
  • packages/vue-router/src/useLoaderDeps.tsx
  • packages/vue-router/tests/routeApi.test-d.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • benchmarks/client-nav/vue/app.tsx

Comment on lines 1 to +3
import type { NavigateOptions } from '@tanstack/router-core'
import type * as App from './app'
import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
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.

⚠️ Potential issue | 🟡 Minor

Fix import order: value imports before type imports.

ESLint reports that ../setup-helpers should be imported before type-only imports.

Proposed fix
+import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
 import type { NavigateOptions } from '@tanstack/router-core'
 import type * as App from './app'
-import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import type { NavigateOptions } from '@tanstack/router-core'
import type * as App from './app'
import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
import type { NavigateOptions } from '@tanstack/router-core'
import type * as App from './app'
🧰 Tools
🪛 ESLint

[error] 3-3: ../setup-helpers import should occur before type import of @tanstack/router-core

(import/order)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@benchmarks/client-nav/react/setup.ts` around lines 1 - 3, The import order
violates ESLint: move the value imports (getRequiredLink, waitForRequiredLink)
before the type-only imports; specifically, place the import of getRequiredLink
and waitForRequiredLink ahead of the type imports for NavigateOptions and App so
the file imports read with value imports first and type imports
(NavigateOptions, App) afterward.

Comment on lines 1 to +3
import type { NavigateOptions } from '@tanstack/router-core'
import type * as App from './app'
import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
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.

⚠️ Potential issue | 🟡 Minor

Fix import order: value imports before type imports.

ESLint reports that ../setup-helpers should be imported before type-only imports.

Proposed fix
+import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
 import type { NavigateOptions } from '@tanstack/router-core'
 import type * as App from './app'
-import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import type { NavigateOptions } from '@tanstack/router-core'
import type * as App from './app'
import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
import type { NavigateOptions } from '@tanstack/router-core'
import type * as App from './app'
🧰 Tools
🪛 ESLint

[error] 3-3: ../setup-helpers import should occur before type import of @tanstack/router-core

(import/order)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@benchmarks/client-nav/solid/setup.ts` around lines 1 - 3, Reorder the imports
so runtime/value imports come before type-only imports: move the import of
getRequiredLink and waitForRequiredLink (from ../setup-helpers) above the type
imports for NavigateOptions and App; ensure the final order is value imports
first (getRequiredLink, waitForRequiredLink) followed by type imports (import
type { NavigateOptions } from '@tanstack/router-core' and import type * as App
from './app').

Comment on lines 1 to +3
import type { NavigateOptions } from '@tanstack/router-core'
import type * as App from './app'
import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
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.

⚠️ Potential issue | 🟡 Minor

Fix import order: value imports before type imports.

ESLint reports that ../setup-helpers should be imported before type-only imports.

Proposed fix
+import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
 import type { NavigateOptions } from '@tanstack/router-core'
 import type * as App from './app'
-import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import type { NavigateOptions } from '@tanstack/router-core'
import type * as App from './app'
import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
import { getRequiredLink, waitForRequiredLink } from '../setup-helpers'
import type { NavigateOptions } from '@tanstack/router-core'
import type * as App from './app'
🧰 Tools
🪛 ESLint

[error] 3-3: ../setup-helpers import should occur before type import of @tanstack/router-core

(import/order)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@benchmarks/client-nav/vue/setup.ts` around lines 1 - 3, Reorder the import
statements so value imports come before type-only imports: move the import of
getRequiredLink and waitForRequiredLink from '../setup-helpers' to be above the
type imports (NavigateOptions and App) so that value imports precede type
imports; update the import order in the module containing the
getRequiredLink/waitForRequiredLink usage to satisfy ESLint's import-order rule.

@Sheraff Sheraff merged commit b9f9ea1 into main Mar 22, 2026
17 checks passed
@Sheraff Sheraff deleted the opencode/kind-comet branch March 22, 2026 12:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant