Repository: TanStack/router
Pull request #2607 (2024-10-21 11:11:48)

docs(start): update the getting-started guide's template
## Adjusts tutorial code to 
- remove non-null assertion from client entry, throw if element cannot be found
- add namespace to fs import
- add type attribute to button

just some thoughts that my linter had ;) 


Patch:
diff --git a/docs/framework/react/guide/search-params.md b/docs/framework/react/guide/search-params.md
index 34f56c975..62c29af6e 100644
--- a/docs/framework/react/guide/search-params.md
+++ b/docs/framework/react/guide/search-params.md
@@ -199,7 +199,7 @@ It might be surprising that when you try to navigate to this route, `search` is
 
 For validation libraries we recommend using adapters which infer the correct `input` and `output` types.
 
-### Zod Adapter
+### Zod
 
 An adapter is provided for [Zod](https://zod.dev/) which will pipe through the correct `input` type and `output` type
 
@@ -269,12 +269,14 @@ export const Route = createFileRoute('/shop/products/')({
 
 This provides flexibility in which type you want to infer for navigation and which types you want to infer for reading search params.
 
-### Valibot Adapter
+### Valibot
 
-When using [Valibot](https://valibot.dev/) we recommend using the adapter. This ensures the correct `input` and `output` types are used for navigation and reading search params
+> [!WARNING]
+> Router expects the valibot 1.0 package to be installed.
+
+When using [Valibot](https://valibot.dev/) an adapter is not needed to ensure the correct `input` and `output` types are used for navigation and reading search params. This is because `valibot` implements [Standard Schema](https://github.com/standard-schema/standard-schema)
 
 ```tsx
-import { valibotSearchValidator } from '@tanstack/router-valibot-adapter'
 import { createFileRoute } from '@tanstack/react-router'
 import * as v from 'valibot'
 
@@ -288,21 +290,20 @@ const productSearchSchema = v.object({
 })
 
 export const Route = createFileRoute('/shop/products/')({
-  validateSearch: valibotSearchValidator(productSearchSchema),
+  validateSearch: productSearchSchema,
 })
 ```
 
-### Arktype Adapter
+### Arktype
 
 > [!WARNING]
-> This adapter expects the arktype 2.0-beta package to be installed.
+> Router expects the arktype 2.0-rc package to be installed.
 
-When using [ArkType](https://arktype.io/) we recommend using the adapter. This ensures the correct `input` and `output` types are used for navigation and reading search params
+When using [ArkType](https://arktype.io/) an adapter is not needed to ensure the correct `input` and `output` types are used for navigation and reading search params. This is because [ArkType](https://arktype.io/) implements [Standard Schema](https://github.com/standard-schema/standard-schema)
 
 ```tsx
 import { arkTypeSearchValidator } from '@tanstack/router-arktype-adapter'
 import { createFileRoute } from '@tanstack/react-router'
-import * as v from 'valibot'
 import { type } from 'arktype'
 
 const productSearchSchema = type({
@@ -312,7 +313,7 @@ const productSearchSchema = type({
 })
 
 export const Route = createFileRoute('/shop/products/')({
-  validateSearch: arkTypeSearchValidator(productSearchSchema),
+  validateSearch: productSearchSchema,
 })
 ```
 
diff --git a/docs/framework/react/start/getting-started.md b/docs/framework/react/start/getting-started.md
index d900e5ce5..acc1c5fd4 100644
--- a/docs/framework/react/start/getting-started.md
+++ b/docs/framework/react/start/getting-started.md
@@ -179,7 +179,12 @@ import { createRouter } from './router'
 
 const router = createRouter()
 
-hydrateRoot(document.getElementById('root')!, <StartClient router={router} />)
+const root = document.getElementById('root')
+if (!root) {
+  throw new Error('Root element not found')
+}
+
+hydrateRoot(root, <StartClient router={router} />)
 ```
 
 This enables us to kick off client-side routing once the user's initial server request has fulfilled.
@@ -241,7 +246,7 @@ Now that we have the basic templating setup, we can write our first route. This
 
 ```tsx
 // app/routes/index.tsx
-import * as fs from 'fs'
+import * as fs from 'node:fs'
 import { createFileRoute, useRouter } from '@tanstack/react-router'
 import { createServerFn } from '@tanstack/start'
 
@@ -273,6 +278,7 @@ function Home() {
 
   return (
     <button
+      type="button"
       onClick={() => {
         updateCount(1).then(() => {
           router.invalidate()
diff --git a/examples/react/authenticated-routes/package.json b/examples/react/authenticated-routes/package.json
index 3756d6df1..80a5ee606 100644
--- a/examples/react/authenticated-routes/package.json
+++ b/examples/react/authenticated-routes/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-default-search-params/package.json b/examples/react/basic-default-search-params/package.json
index 232aa6542..b1aee0277 100644
--- a/examples/react/basic-default-search-params/package.json
+++ b/examples/react/basic-default-search-params/package.json
@@ -10,8 +10,8 @@
   },
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "redaxios": "^0.5.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-file-based-codesplitting/package.json b/examples/react/basic-file-based-codesplitting/package.json
index 7efe54a2f..478a2485b 100644
--- a/examples/react/basic-file-based-codesplitting/package.json
+++ b/examples/react/basic-file-based-codesplitting/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-file-based/package.json b/examples/react/basic-file-based/package.json
index 356c4a8d6..1f09f385b 100644
--- a/examples/react/basic-file-based/package.json
+++ b/examples/react/basic-file-based/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-react-query-file-based/package.json b/examples/react/basic-react-query-file-based/package.json
index 44616a729..7866e16a5 100644
--- a/examples/react/basic-react-query-file-based/package.json
+++ b/examples/react/basic-react-query-file-based/package.json
@@ -11,8 +11,8 @@
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
     "@tanstack/react-query-devtools": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-react-query/package.json b/examples/react/basic-react-query/package.json
index afe3f395a..f14203693 100644
--- a/examples/react/basic-react-query/package.json
+++ b/examples/react/basic-react-query/package.json
@@ -11,8 +11,8 @@
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
     "@tanstack/react-query-devtools": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1"
diff --git a/examples/react/basic-ssr-file-based/package.json b/examples/react/basic-ssr-file-based/package.json
index fd588e838..604c1fc5a 100644
--- a/examples/react/basic-ssr-file-based/package.json
+++ b/examples/react/basic-ssr-file-based/package.json
@@ -11,10 +11,10 @@
     "debug": "node --inspect-brk server"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/start": "^1.75.0",
     "get-port": "^7.1.0",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-ssr-streaming-file-based/package.json b/examples/react/basic-ssr-streaming-file-based/package.json
index ab2bfc776..2f67f01ce 100644
--- a/examples/react/basic-ssr-streaming-file-based/package.json
+++ b/examples/react/basic-ssr-streaming-file-based/package.json
@@ -11,10 +11,10 @@
     "debug": "node --inspect-brk server"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/start": "^1.75.0",
     "get-port": "^7.1.0",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/basic-virtual-file-based/package.json b/examples/react/basic-virtual-file-based/package.json
index 4666ce301..389596992 100644
--- a/examples/react/basic-virtual-file-based/package.json
+++ b/examples/react/basic-virtual-file-based/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "@tanstack/virtual-file-routes": "^1.64.0",
     "react": "^18.2.0",
diff --git a/examples/react/basic-virtual-inside-file-based/package.json b/examples/react/basic-virtual-inside-file-based/package.json
index 31eb7908e..f3eb47c95 100644
--- a/examples/react/basic-virtual-inside-file-based/package.json
+++ b/examples/react/basic-virtual-inside-file-based/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "@tanstack/virtual-file-routes": "^1.64.0",
     "react": "^18.2.0",
diff --git a/examples/react/basic/package.json b/examples/react/basic/package.json
index 4dd5ded87..ededcd636 100644
--- a/examples/react/basic/package.json
+++ b/examples/react/basic/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
     "redaxios": "^0.5.1"
diff --git a/examples/react/deferred-data/package.json b/examples/react/deferred-data/package.json
index 3cdbd495f..1c116b5d5 100644
--- a/examples/react/deferred-data/package.json
+++ b/examples/react/deferred-data/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "redaxios": "^0.5.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/kitchen-sink-file-based/package.json b/examples/react/kitchen-sink-file-based/package.json
index 6c1c859c9..c1ac052b5 100644
--- a/examples/react/kitchen-sink-file-based/package.json
+++ b/examples/react/kitchen-sink-file-based/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "immer": "^10.1.1",
     "react": "^18.2.0",
diff --git a/examples/react/kitchen-sink-react-query-file-based/package.json b/examples/react/kitchen-sink-react-query-file-based/package.json
index 631390b45..8f3202c4a 100644
--- a/examples/react/kitchen-sink-react-query-file-based/package.json
+++ b/examples/react/kitchen-sink-react-query-file-based/package.json
@@ -11,8 +11,8 @@
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
     "@tanstack/react-query-devtools": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "immer": "^10.1.1",
     "react": "^18.2.0",
diff --git a/examples/react/kitchen-sink-react-query/package.json b/examples/react/kitchen-sink-react-query/package.json
index 1627e511c..b22b20fd5 100644
--- a/examples/react/kitchen-sink-react-query/package.json
+++ b/examples/react/kitchen-sink-react-query/package.json
@@ -11,8 +11,8 @@
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
     "@tanstack/react-query-devtools": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "redaxios": "^0.5.1",
     "immer": "^10.1.1",
     "react": "^18.2.0",
diff --git a/examples/react/kitchen-sink/package.json b/examples/react/kitchen-sink/package.json
index 4ce556926..46caf5052 100644
--- a/examples/react/kitchen-sink/package.json
+++ b/examples/react/kitchen-sink/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "redaxios": "^0.5.1",
     "immer": "^10.1.1",
     "react": "^18.2.0",
diff --git a/examples/react/large-file-based/package.json b/examples/react/large-file-based/package.json
index 40834d4d2..36b2efc2c 100644
--- a/examples/react/large-file-based/package.json
+++ b/examples/react/large-file-based/package.json
@@ -12,8 +12,8 @@
   },
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/location-masking/package.json b/examples/react/location-masking/package.json
index 4df600ce1..66b4a3db1 100644
--- a/examples/react/location-masking/package.json
+++ b/examples/react/location-masking/package.json
@@ -11,8 +11,8 @@
   "dependencies": {
     "@radix-ui/react-dialog": "^1.1.2",
     "@tanstack/react-query": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "redaxios": "^0.5.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0"
diff --git a/examples/react/navigation-blocking/package.json b/examples/react/navigation-blocking/package.json
index 53e44b27b..bd62cc40d 100644
--- a/examples/react/navigation-blocking/package.json
+++ b/examples/react/navigation-blocking/package.json
@@ -10,8 +10,8 @@
   },
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "redaxios": "^0.5.1",
     "react": "^18.2.0",
     "react-dom": "^18.2.0"
diff --git a/examples/react/quickstart-file-based/package.json b/examples/react/quickstart-file-based/package.json
index 2ac5f3808..3760d77e7 100644
--- a/examples/react/quickstart-file-based/package.json
+++ b/examples/react/quickstart-file-based/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/quickstart-rspack-file-based/package.json b/examples/react/quickstart-rspack-file-based/package.json
index f23227c5c..efca859d9 100644
--- a/examples/react/quickstart-rspack-file-based/package.json
+++ b/examples/react/quickstart-rspack-file-based/package.json
@@ -8,8 +8,8 @@
     "preview": "rsbuild preview"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "react": "^18.3.1",
     "react-dom": "^18.3.1"
   },
diff --git a/examples/react/quickstart-webpack-file-based/package.json b/examples/react/quickstart-webpack-file-based/package.json
index e4bdb47da..ba01d95a2 100644
--- a/examples/react/quickstart-webpack-file-based/package.json
+++ b/examples/react/quickstart-webpack-file-based/package.json
@@ -7,8 +7,8 @@
     "build": "webpack build && tsc --noEmit"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "react": "^18.3.1",
     "react-dom": "^18.3.1"
   },
diff --git a/examples/react/quickstart/package.json b/examples/react/quickstart/package.json
index 8155534da..91f23810d 100644
--- a/examples/react/quickstart/package.json
+++ b/examples/react/quickstart/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "react": "^18.2.0",
     "react-dom": "^18.2.0"
   },
diff --git a/examples/react/router-monorepo-react-query/.stackblitzrc b/examples/react/router-monorepo-react-query/.stackblitzrc
new file mode 100644
index 000000000..5cedc82a8
--- /dev/null
+++ b/examples/react/router-monorepo-react-query/.stackblitzrc
@@ -0,0 +1,3 @@
+{
+  "startCommand": "cp pnpm-workspace.yaml.example pnpm-workspace.yaml && pnpm install && pnpm dev"
+}
diff --git a/examples/react/router-monorepo-react-query/package.json b/examples/react/router-monorepo-react-query/package.json
index d56e9071f..b8dbd17a0 100644
--- a/examples/react/router-monorepo-react-query/package.json
+++ b/examples/react/router-monorepo-react-query/package.json
@@ -7,14 +7,13 @@
     "post-feature": "pnpm --filter @router-mono-react-query/post-feature",
     "router": "pnpm --filter @router-mono-react-query/router",
     "app": "pnpm --filter @router-mono-react-query/app",
-    "dev": "node ./setup-stackblitz.mjs && pnpm dev-run",
-    "dev-run": "pnpm post-query build && pnpm router build && pnpm post-feature build && pnpm app dev"
+    "dev": "pnpm post-query build && pnpm router build && pnpm post-feature build && pnpm app dev"
   },
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
     "@tanstack/react-query-devtools": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/router-monorepo-react-query/packages/app/package.json b/examples/react/router-monorepo-react-query/packages/app/package.json
index 2faa550cf..4581df50c 100644
--- a/examples/react/router-monorepo-react-query/packages/app/package.json
+++ b/examples/react/router-monorepo-react-query/packages/app/package.json
@@ -19,7 +19,7 @@
     "@types/react": "^18.2.47",
     "@types/react-dom": "^18.2.18",
     "@vitejs/plugin-react": "^4.3.3",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/router-devtools": "^1.75.0",
     "typescript": "5.6.2",
     "vite": "^5.4.9",
     "vite-plugin-dts": "^4.2.4"
diff --git a/examples/react/router-monorepo-react-query/packages/router/package.json b/examples/react/router-monorepo-react-query/packages/router/package.json
index df486dc1b..232fffff3 100644
--- a/examples/react/router-monorepo-react-query/packages/router/package.json
+++ b/examples/react/router-monorepo-react-query/packages/router/package.json
@@ -9,7 +9,7 @@
   "types": "./dist/index.d.ts",
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "@router-mono-react-query/post-query": "workspace:*",
     "redaxios": "^0.5.1",
diff --git a/examples/react/router-monorepo-react-query/pnpm-workspace.yaml.example b/examples/react/router-monorepo-react-query/pnpm-workspace.yaml.example
new file mode 100644
index 000000000..4340350e1
--- /dev/null
+++ b/examples/react/router-monorepo-react-query/pnpm-workspace.yaml.example
@@ -0,0 +1,2 @@
+packages:
+  - 'packages/*'
\ No newline at end of file
diff --git a/examples/react/router-monorepo-react-query/setup-stackblitz.mjs b/examples/react/router-monorepo-react-query/setup-stackblitz.mjs
deleted file mode 100644
index 3865578f8..000000000
--- a/examples/react/router-monorepo-react-query/setup-stackblitz.mjs
+++ /dev/null
@@ -1,25 +0,0 @@
-import { writeFileSync } from 'fs'
-import { execSync } from 'child_process'
-import { fileURLToPath } from 'url'
-import path from 'path'
-
-const __filename = fileURLToPath(import.meta.url)
-const __dirname = path.dirname(__filename)
-
-function isRunningOnStackBlitz() {
-  // Given stackblitz is running only on a folder and not the mono, this should detect if we are running on stackblitz
-  return !__dirname.includes('router/examples')
-}
-
-if (isRunningOnStackBlitz()) {
-  // Create the pnpm-workspace.yaml file, since we only need it for StackBlitz
-  const pnpmWorkspaceContent = `packages:
-  - 'packages/*'`
-
-  writeFileSync('./pnpm-workspace.yaml', pnpmWorkspaceContent, {
-    encoding: 'utf-8',
-  })
-
-  // Then re-run pnpm install
-  execSync('pnpm install', { stdio: 'inherit' })
-}
diff --git a/examples/react/router-monorepo-simple/.stackblitzrc b/examples/react/router-monorepo-simple/.stackblitzrc
new file mode 100644
index 000000000..5cedc82a8
--- /dev/null
+++ b/examples/react/router-monorepo-simple/.stackblitzrc
@@ -0,0 +1,3 @@
+{
+  "startCommand": "cp pnpm-workspace.yaml.example pnpm-workspace.yaml && pnpm install && pnpm dev"
+}
diff --git a/examples/react/router-monorepo-simple/package.json b/examples/react/router-monorepo-simple/package.json
index 694b8a682..e6d221723 100644
--- a/examples/react/router-monorepo-simple/package.json
+++ b/examples/react/router-monorepo-simple/package.json
@@ -5,12 +5,11 @@
     "post-feature": "pnpm --filter @router-mono-simple/post-feature",
     "router": "pnpm --filter @router-mono-simple/router",
     "app": "pnpm --filter @router-mono-simple/app",
-    "dev": "node ./setup-stackblitz.mjs && pnpm dev-run",
-    "dev-run": "pnpm router build && pnpm post-feature build && pnpm app dev"
+    "dev": "pnpm router build && pnpm post-feature build && pnpm app dev"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
diff --git a/examples/react/router-monorepo-simple/packages/app/package.json b/examples/react/router-monorepo-simple/packages/app/package.json
index 763c98d7a..c1020ced3 100644
--- a/examples/react/router-monorepo-simple/packages/app/package.json
+++ b/examples/react/router-monorepo-simple/packages/app/package.json
@@ -18,7 +18,7 @@
     "@types/react": "^18.2.47",
     "@types/react-dom": "^18.2.18",
     "@vitejs/plugin-react": "^4.3.3",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/router-devtools": "^1.75.0",
     "typescript": "5.6.2",
     "vite": "^5.4.9",
     "vite-plugin-dts": "^4.2.4"
diff --git a/examples/react/router-monorepo-simple/packages/router/package.json b/examples/react/router-monorepo-simple/packages/router/package.json
index 13304c221..e395b36c1 100644
--- a/examples/react/router-monorepo-simple/packages/router/package.json
+++ b/examples/react/router-monorepo-simple/packages/router/package.json
@@ -8,7 +8,7 @@
   "main": "./dist/index.js",
   "types": "./dist/index.d.ts",
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "redaxios": "^0.5.1",
     "zod": "^3.23.8",
diff --git a/examples/react/router-monorepo-simple/pnpm-workspace.yaml.example b/examples/react/router-monorepo-simple/pnpm-workspace.yaml.example
new file mode 100644
index 000000000..4340350e1
--- /dev/null
+++ b/examples/react/router-monorepo-simple/pnpm-workspace.yaml.example
@@ -0,0 +1,2 @@
+packages:
+  - 'packages/*'
\ No newline at end of file
diff --git a/examples/react/router-monorepo-simple/setup-stackblitz.mjs b/examples/react/router-monorepo-simple/setup-stackblitz.mjs
deleted file mode 100644
index 3865578f8..000000000
--- a/examples/react/router-monorepo-simple/setup-stackblitz.mjs
+++ /dev/null
@@ -1,25 +0,0 @@
-import { writeFileSync } from 'fs'
-import { execSync } from 'child_process'
-import { fileURLToPath } from 'url'
-import path from 'path'
-
-const __filename = fileURLToPath(import.meta.url)
-const __dirname = path.dirname(__filename)
-
-function isRunningOnStackBlitz() {
-  // Given stackblitz is running only on a folder and not the mono, this should detect if we are running on stackblitz
-  return !__dirname.includes('router/examples')
-}
-
-if (isRunningOnStackBlitz()) {
-  // Create the pnpm-workspace.yaml file, since we only need it for StackBlitz
-  const pnpmWorkspaceContent = `packages:
-  - 'packages/*'`
-
-  writeFileSync('./pnpm-workspace.yaml', pnpmWorkspaceContent, {
-    encoding: 'utf-8',
-  })
-
-  // Then re-run pnpm install
-  execSync('pnpm install', { stdio: 'inherit' })
-}
diff --git a/examples/react/scroll-restoration/package.json b/examples/react/scroll-restoration/package.json
index abf993982..6c8275772 100644
--- a/examples/react/scroll-restoration/package.json
+++ b/examples/react/scroll-restoration/package.json
@@ -9,9 +9,9 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
     "@tanstack/react-virtual": "^3.10.8",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/router-devtools": "^1.75.0",
     "react": "^18.2.0",
     "react-dom": "^18.2.0"
   },
diff --git a/examples/react/search-validator-adapters/package.json b/examples/react/search-validator-adapters/package.json
index 230bb8509..3b7334a2e 100644
--- a/examples/react/search-validator-adapters/package.json
+++ b/examples/react/search-validator-adapters/package.json
@@ -6,16 +6,17 @@
     "dev": "vite --port=3001",
     "build": "vite build && tsc --noEmit",
     "serve": "vite preview",
-    "start": "vite"
+    "start": "vite",
+    "test:unit": "vitest"
   },
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-arktype-adapter": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-arktype-adapter": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
-    "@tanstack/router-valibot-adapter": "^1.74.4",
-    "@tanstack/router-zod-adapter": "^1.74.4",
+    "@tanstack/router-valibot-adapter": "^1.75.0",
+    "@tanstack/router-zod-adapter": "^1.75.0",
     "arktype": "^2.0.0-rc.17",
     "react": "^18.2.0",
     "react-dom": "^18.2.0",
@@ -26,6 +27,8 @@
     "@types/react": "^18.2.47",
     "@types/react-dom": "^18.2.18",
     "@vitejs/plugin-react": "^4.3.3",
-    "vite": "^5.4.9"
+    "vite": "^5.4.9",
+    "@testing-library/jest-dom": "^6.5.0",
+    "@testing-library/react": "^16.0.1"
   }
 }
diff --git a/examples/react/search-validator-adapters/src/main.tsx b/examples/react/search-validator-adapters/src/main.tsx
index 07637f2b1..a56a060d3 100644
--- a/examples/react/search-validator-adapters/src/main.tsx
+++ b/examples/react/search-validator-adapters/src/main.tsx
@@ -4,9 +4,9 @@ import { RouterProvider, createRouter } from '@tanstack/react-router'
 import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
 import { routeTree } from './routeTree.gen'
 
-const queryClient = new QueryClient()
+export const queryClient = new QueryClient()
 
-const router = createRouter({
+export const router = createRouter({
   routeTree,
   context: {
     queryClient,
@@ -19,7 +19,7 @@ declare module '@tanstack/react-router' {
   }
 }
 
-function App() {
+export function App() {
   return <RouterProvider router={router} />
 }
 
diff --git a/examples/react/search-validator-adapters/src/routes/users/arktype.index.tsx b/examples/react/search-validator-adapters/src/routes/users/arktype.index.tsx
index 970b4f89a..c0bf3ce99 100644
--- a/examples/react/search-validator-adapters/src/routes/users/arktype.index.tsx
+++ b/examples/react/search-validator-adapters/src/routes/users/arktype.index.tsx
@@ -1,6 +1,6 @@
 import * as React from 'react'
 import { createFileRoute, useNavigate } from '@tanstack/react-router'
-import { arkTypeSearchValidator } from '@tanstack/router-arktype-adapter'
+
 import { type } from 'arktype'
 import { Header } from '../../components/Header'
 import { Users, usersQueryOptions } from '../../components/Users'
@@ -9,7 +9,7 @@ import { Search } from '../../components/Search'
 
 const ArkType = () => {
   const search = Route.useSearch({
-    select: (search) => search.search ?? '',
+    select: (search) => search.search,
   })
   const navigate = useNavigate({ from: Route.fullPath })
 
@@ -29,16 +29,16 @@ const ArkType = () => {
   )
 }
 
+const search = type({
+  search: 'string = ""',
+})
+
 export const Route = createFileRoute('/users/arktype/')({
-  validateSearch: arkTypeSearchValidator(
-    type({
-      'search?': 'string',
-    }),
-  ),
+  validateSearch: search,
   loaderDeps: (opt) => ({ search: opt.search }),
   loader: (opt) => {
     opt.context.queryClient.ensureQueryData(
-      usersQueryOptions(opt.deps.search.search ?? ''),
+      usersQueryOptions(opt.deps.search.search),
     )
   },
   component: ArkType,
diff --git a/examples/react/search-validator-adapters/src/routes/users/valibot.index.tsx b/examples/react/search-validator-adapters/src/routes/users/valibot.index.tsx
index 849e10c22..33ff6623f 100644
--- a/examples/react/search-validator-adapters/src/routes/users/valibot.index.tsx
+++ b/examples/react/search-validator-adapters/src/routes/users/valibot.index.tsx
@@ -1,6 +1,5 @@
 import * as React from 'react'
 import { createFileRoute, useNavigate } from '@tanstack/react-router'
-import { valibotSearchValidator } from '@tanstack/router-valibot-adapter'
 import * as v from 'valibot'
 import { Header } from '../../components/Header'
 import { Users, usersQueryOptions } from '../../components/Users'
@@ -8,9 +7,7 @@ import { Content } from '../../components/Content'
 import { Search } from '../../components/Search'
 
 const Valibot = () => {
-  const search = Route.useSearch({
-    select: (search) => search.search ?? '',
-  })
+  const search = Route.useSearch()
   const navigate = useNavigate({ from: Route.fullPath })
 
   return (
@@ -18,11 +15,11 @@ const Valibot = () => {
       <Header title="Valibot" />
       <Content>
         <Search
-          search={search}
+          search={search.search}
           onChange={(search) => navigate({ search: { search }, replace: true })}
         />
         <React.Suspense>
-          <Users search={search} />
+          <Users search={search.search} />
         </React.Suspense>
       </Content>
     </>
@@ -30,15 +27,13 @@ const Valibot = () => {
 }
 
 export const Route = createFileRoute('/users/valibot/')({
-  validateSearch: valibotSearchValidator(
-    v.object({
-      search: v.fallback(v.optional(v.string()), undefined),
-    }),
-  ),
+  validateSearch: v.object({
+    search: v.fallback(v.optional(v.string(), ''), ''),
+  }),
   loaderDeps: (opt) => ({ search: opt.search }),
   loader: (opt) => {
     opt.context.queryClient.ensureQueryData(
-      usersQueryOptions(opt.deps.search.search ?? ''),
+      usersQueryOptions(opt.deps.search.search),
     )
   },
   component: Valibot,
diff --git a/examples/react/search-validator-adapters/vite.config.js b/examples/react/search-validator-adapters/vite.config.js
deleted file mode 100644
index 9cb8cad86..000000000
--- a/examples/react/search-validator-adapters/vite.config.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { defineConfig } from 'vite'
-import react from '@vitejs/plugin-react'
-import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
-
-// https://vitejs.dev/config/
-export default defineConfig({
-  plugins: [TanStackRouterVite(), react()],
-})
diff --git a/examples/react/search-validator-adapters/vite.config.ts b/examples/react/search-validator-adapters/vite.config.ts
new file mode 100644
index 000000000..1caf4b848
--- /dev/null
+++ b/examples/react/search-validator-adapters/vite.config.ts
@@ -0,0 +1,15 @@
+import { defineConfig } from 'vitest/config'
+import react from '@vitejs/plugin-react'
+import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
+import packageJson from './package.json'
+
+export default defineConfig({
+  test: {
+    name: packageJson.name,
+    dir: './tests',
+    watch: false,
+    environment: 'jsdom',
+    typecheck: { enabled: true },
+  },
+  plugins: [TanStackRouterVite(), react()],
+})
diff --git a/examples/react/start-basic-auth/package.json b/examples/react/start-basic-auth/package.json
index b12aec74f..96dd05ece 100644
--- a/examples/react/start-basic-auth/package.json
+++ b/examples/react/start-basic-auth/package.json
@@ -11,9 +11,9 @@
   },
   "dependencies": {
     "@prisma/client": "5.21.1",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
+    "@tanstack/start": "^1.75.0",
     "dotenv": "^16.4.5",
     "prisma": "^5.21.1",
     "react": "^18.3.1",
diff --git a/examples/react/start-basic-react-query/package.json b/examples/react/start-basic-react-query/package.json
index 6e098c8ec..2a070520f 100644
--- a/examples/react/start-basic-react-query/package.json
+++ b/examples/react/start-basic-react-query/package.json
@@ -11,10 +11,10 @@
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
     "@tanstack/react-query-devtools": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/react-router-with-query": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/react-router-with-query": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
+    "@tanstack/start": "^1.75.0",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
     "redaxios": "^0.5.1",
diff --git a/examples/react/start-basic-rsc/package.json b/examples/react/start-basic-rsc/package.json
index ce88e5494..20548d600 100644
--- a/examples/react/start-basic-rsc/package.json
+++ b/examples/react/start-basic-rsc/package.json
@@ -10,9 +10,9 @@
   },
   "dependencies": {
     "@babel/plugin-syntax-typescript": "^7.25.7",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
+    "@tanstack/start": "^1.75.0",
     "redaxios": "^0.5.1",
     "tailwind-merge": "^2.5.4",
     "vinxi": "0.4.3"
diff --git a/examples/react/start-basic/package.json b/examples/react/start-basic/package.json
index 2c79800f4..4de201202 100644
--- a/examples/react/start-basic/package.json
+++ b/examples/react/start-basic/package.json
@@ -9,9 +9,9 @@
     "start": "vinxi start"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
+    "@tanstack/start": "^1.75.0",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
     "redaxios": "^0.5.1",
diff --git a/examples/react/start-clerk-basic/package.json b/examples/react/start-clerk-basic/package.json
index 08ac97b75..943a0d534 100644
--- a/examples/react/start-clerk-basic/package.json
+++ b/examples/react/start-clerk-basic/package.json
@@ -10,9 +10,9 @@
   },
   "dependencies": {
     "@clerk/tanstack-start": "0.4.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
+    "@tanstack/start": "^1.75.0",
     "dotenv": "^16.4.5",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
diff --git a/examples/react/start-convex-trellaux/.env.local.example b/examples/react/start-convex-trellaux/.env.local.example
new file mode 100644
index 000000000..315dd107e
--- /dev/null
+++ b/examples/react/start-convex-trellaux/.env.local.example
@@ -0,0 +1,3 @@
+# This is a shared default backend you can't modify the code for.
+# In order to create your own backend, run `npx convex dev`.
+VITE_CONVEX_URL=https://laudable-anaconda-558.convex.cloud
diff --git a/examples/react/start-convex-trellaux/.stackblitzrc b/examples/react/start-convex-trellaux/.stackblitzrc
new file mode 100644
index 000000000..2f76846e6
--- /dev/null
+++ b/examples/react/start-convex-trellaux/.stackblitzrc
@@ -0,0 +1,3 @@
+{
+  "startCommand": "cp .env.local.example .env.local && npx vinxi dev"
+}
diff --git a/examples/react/start-convex-trellaux/app/routeTree.gen.ts b/examples/react/start-convex-trellaux/app/routeTree.gen.ts
index 61956de61..05b9df826 100644
--- a/examples/react/start-convex-trellaux/app/routeTree.gen.ts
+++ b/examples/react/start-convex-trellaux/app/routeTree.gen.ts
@@ -17,13 +17,11 @@ import { Route as BoardsBoardIdImport } from './routes/boards.$boardId'
 // Create/Update Routes
 
 const IndexRoute = IndexImport.update({
-  id: '/',
   path: '/',
   getParentRoute: () => rootRoute,
 } as any)
 
 const BoardsBoardIdRoute = BoardsBoardIdImport.update({
-  id: '/boards/$boardId',
   path: '/boards/$boardId',
   getParentRoute: () => rootRoute,
 } as any)
diff --git a/examples/react/start-convex-trellaux/convex/_generated/api.d.ts b/examples/react/start-convex-trellaux/convex/_generated/api.d.ts
index 33b400c93..b565b5276 100644
--- a/examples/react/start-convex-trellaux/convex/_generated/api.d.ts
+++ b/examples/react/start-convex-trellaux/convex/_generated/api.d.ts
@@ -16,6 +16,7 @@ import type {
   FunctionReference,
 } from 'convex/server'
 import type * as board from '../board.js'
+import type * as crons from '../crons.js'
 
 /**
  * A utility for referencing Convex functions in your app's API.
@@ -27,6 +28,7 @@ import type * as board from '../board.js'
  */
 declare const fullApi: ApiFromModules<{
   board: typeof board
+  crons: typeof crons
 }>
 export declare const api: FilterApi<
   typeof fullApi,
diff --git a/examples/react/start-convex-trellaux/convex/board.ts b/examples/react/start-convex-trellaux/convex/board.ts
index 48217eb13..91fce9a1e 100644
--- a/examples/react/start-convex-trellaux/convex/board.ts
+++ b/examples/react/start-convex-trellaux/convex/board.ts
@@ -27,6 +27,19 @@ export const seed = internalMutation(async (ctx) => {
   })
 })
 
+// Clear all boards (do this on a regular cadence for public examples)
+export const clear = internalMutation(async (ctx) => {
+  const allBoards = await ctx.db.query('boards').collect()
+  for (const board of allBoards) {
+    await ctx.db.delete(board._id)
+  }
+  await ctx.db.insert('boards', {
+    id: '1',
+    name: 'First board',
+    color: '#e0e0e0',
+  })
+})
+
 function withoutSystemFields<T extends { _creationTime: number; _id: Id<any> }>(
   doc: T,
 ) {
diff --git a/examples/react/start-convex-trellaux/convex/crons.ts b/examples/react/start-convex-trellaux/convex/crons.ts
new file mode 100644
index 000000000..a11889d5b
--- /dev/null
+++ b/examples/react/start-convex-trellaux/convex/crons.ts
@@ -0,0 +1,8 @@
+import { cronJobs } from 'convex/server'
+import { internal } from './_generated/api'
+
+const crons = cronJobs()
+
+crons.cron('clear messages table', '0,20,40 * * * *', internal.board.clear)
+
+export default crons
diff --git a/examples/react/start-convex-trellaux/package.json b/examples/react/start-convex-trellaux/package.json
index 78547eb32..4d83ed949 100644
--- a/examples/react/start-convex-trellaux/package.json
+++ b/examples/react/start-convex-trellaux/package.json
@@ -13,10 +13,10 @@
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
     "@tanstack/react-query-devtools": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/react-router-with-query": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/react-router-with-query": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
+    "@tanstack/start": "^1.75.0",
     "@convex-dev/react-query": "0.0.0-alpha.5",
     "concurrently": "^8.2.2",
     "convex": "^1.16.6",
diff --git a/examples/react/start-counter/package.json b/examples/react/start-counter/package.json
index 2e05103cc..33fed5418 100644
--- a/examples/react/start-counter/package.json
+++ b/examples/react/start-counter/package.json
@@ -9,8 +9,8 @@
     "start": "vinxi start"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/start": "^1.75.0",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
     "vinxi": "0.4.3"
diff --git a/examples/react/start-supabase-basic/package.json b/examples/react/start-supabase-basic/package.json
index 6a0a5e3c5..9141d89ac 100644
--- a/examples/react/start-supabase-basic/package.json
+++ b/examples/react/start-supabase-basic/package.json
@@ -15,9 +15,9 @@
   "dependencies": {
     "@supabase/ssr": "^0.5.1",
     "@supabase/supabase-js": "^2.45.6",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
+    "@tanstack/start": "^1.75.0",
     "@vitejs/plugin-react": "^4.3.3",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
diff --git a/examples/react/start-trellaux/package.json b/examples/react/start-trellaux/package.json
index beb96dd9f..b5b8b8b4d 100644
--- a/examples/react/start-trellaux/package.json
+++ b/examples/react/start-trellaux/package.json
@@ -11,10 +11,10 @@
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
     "@tanstack/react-query-devtools": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/react-router-with-query": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
-    "@tanstack/start": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/react-router-with-query": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
+    "@tanstack/start": "^1.75.0",
     "ky": "^1.7.2",
     "msw": "^2.4.11",
     "react": "^18.3.1",
diff --git a/examples/react/with-framer-motion/package.json b/examples/react/with-framer-motion/package.json
index dd03cf8cc..9d92f0a05 100644
--- a/examples/react/with-framer-motion/package.json
+++ b/examples/react/with-framer-motion/package.json
@@ -9,8 +9,8 @@
     "start": "vite"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "redaxios": "^0.5.1",
     "framer-motion": "^11.11.9",
     "react": "^18.2.0",
diff --git a/examples/react/with-trpc-react-query/package.json b/examples/react/with-trpc-react-query/package.json
index ddd76986c..cce119739 100644
--- a/examples/react/with-trpc-react-query/package.json
+++ b/examples/react/with-trpc-react-query/package.json
@@ -10,8 +10,8 @@
   "dependencies": {
     "@tanstack/react-query": "^5.59.15",
     "@tanstack/react-query-devtools": "^5.59.15",
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "@trpc/client": "11.0.0-rc.593",
     "@trpc/react-query": "11.0.0-rc.593",
diff --git a/examples/react/with-trpc/package.json b/examples/react/with-trpc/package.json
index 1ae1cdb7f..3e593a522 100644
--- a/examples/react/with-trpc/package.json
+++ b/examples/react/with-trpc/package.json
@@ -8,8 +8,8 @@
     "start": "vinxi start"
   },
   "dependencies": {
-    "@tanstack/react-router": "^1.74.4",
-    "@tanstack/router-devtools": "^1.74.4",
+    "@tanstack/react-router": "^1.75.0",
+    "@tanstack/router-devtools": "^1.75.0",
     "@tanstack/router-plugin": "^1.74.2",
     "@trpc/client": "11.0.0-rc.593",
     "@trpc/server": "11.0.0-rc.593",
diff --git a/package.json b/package.json
index deb843594..ec8e15258 100644
--- a/package.json
+++ b/package.json
@@ -49,7 +49,7 @@
     "react-dom": "^18.3.1",
     "redaxios": "^0.5.1",
     "rimraf": "^6.0.1",
-    "typescript": "^5.6.2",
+    "typescript": "^5.6.3",
     "typescript51": "npm:typescript@5.1",
     "typescript52": "npm:typescript@5.2",
     "typescript53": "npm:typescript@5.3",
diff --git a/packages/create-router/package.json b/packages/create-router/package.json
index 26a9a84ed..2ba254562 100644
--- a/packages/create-router/package.json
+++ b/packages/create-router/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/create-router",
-  "version": "1.74.4",
+  "version": "1.75.0",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/eslint-plugin-router/package.json b/packages/eslint-plugin-router/package.json
index dbb6742db..4697b61f2 100644
--- a/packages/eslint-plugin-router/package.json
+++ b/packages/eslint-plugin-router/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/eslint-plugin-router",
-  "version": "1.70.0",
+  "version": "1.74.5",
   "description": "ESLint plugin for TanStack Router",
   "author": "Manuel Schiller",
   "license": "MIT",
diff --git a/packages/react-cross-context/package.json b/packages/react-cross-context/package.json
index 78a948aac..33cbc8198 100644
--- a/packages/react-cross-context/package.json
+++ b/packages/react-cross-context/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/react-cross-context",
-  "version": "1.60.0",
+  "version": "1.74.5",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/react-router-with-query/package.json b/packages/react-router-with-query/package.json
index 20ab8910d..0e9e8ecd8 100644
--- a/packages/react-router-with-query/package.json
+++ b/packages/react-router-with-query/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/react-router-with-query",
-  "version": "1.74.4",
+  "version": "1.75.0",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/react-router/package.json b/packages/react-router/package.json
index cfbaf460e..e642bd8c8 100644
--- a/packages/react-router/package.json
+++ b/packages/react-router/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/react-router",
-  "version": "1.74.4",
+  "version": "1.75.0",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/react-router/src/route.ts b/packages/react-router/src/route.ts
index 8809f9b84..1bc5c8890 100644
--- a/packages/react-router/src/route.ts
+++ b/packages/react-router/src/route.ts
@@ -498,6 +498,38 @@ export interface SearchValidatorAdapter<TInput, TOutput> {
 
 export type AnySearchValidatorAdapter = SearchValidatorAdapter<any, any>
 
+export interface StandardSchemaValidator<TInput, TOutput> {
+  readonly '~types'?: StandardSchemaValidatorTypes<TInput, TOutput> | undefined
+  readonly '~validate': AnyStandardSchemaValidate
+}
+
+export type AnyStandardSchemaValidator = StandardSchemaValidator<any, any>
+
+export interface StandardSchemaValidatorTypes<TInput, TOutput> {
+  readonly input: TInput
+  readonly output: TOutput
+}
+
+export interface AnyStandardSchemaValidateSuccess {
+  readonly value: any
+}
+
+export interface AnyStandardSchemaValidateFailure {
+  readonly issues: ReadonlyArray<AnyStandardSchemaValidateIssue>
+}
+
+export interface AnyStandardSchemaValidateIssue {
+  readonly message: string
+}
+
+export interface AnyStandardSchemaValidateInput {
+  readonly value: any
+}
+
+export type AnyStandardSchemaValidate = (
+  input: AnyStandardSchemaValidateInput,
+) => AnyStandardSchemaValidateSuccess | AnyStandardSchemaValidateFailure
+
 export type AnySearchValidatorFn = SearchValidatorFn<any, any>
 
 export type SearchValidatorFn<TInput, TOutput> = (input: TInput) => TOutput
@@ -506,6 +538,7 @@ export type SearchValidator<TInput, TOutput> =
   | SearchValidatorObj<TInput, TOutput>
   | SearchValidatorFn<TInput, TOutput>
   | SearchValidatorAdapter<TInput, TOutput>
+  | StandardSchemaValidator<TInput, TOutput>
   | undefined
 
 export type AnySearchValidator = SearchValidator<any, any>
@@ -624,11 +657,13 @@ export type ResolveSearchSchemaFnInput<TSearchValidator> =
     : AnySearchSchema
 
 export type ResolveSearchSchemaInput<TSearchValidator> =
-  TSearchValidator extends AnySearchValidatorAdapter
-    ? TSearchValidator['types']['input']
-    : TSearchValidator extends AnySearchValidatorObj
-      ? ResolveSearchSchemaFnInput<TSearchValidator['parse']>
-      : ResolveSearchSchemaFnInput<TSearchValidator>
+  TSearchValidator extends AnyStandardSchemaValidator
+    ? NonNullable<TSearchValidator['~types']>['input']
+    : TSearchValidator extends AnySearchValidatorAdapter
+      ? TSearchValidator['types']['input']
+      : TSearchValidator extends AnySearchValidatorObj
+        ? ResolveSearchSchemaFnInput<TSearchValidator['parse']>
+        : ResolveSearchSchemaFnInput<TSearchValidator>
 
 export type ResolveSearchSchemaFn<TSearchValidator> = TSearchValidator extends (
   ...args: any
@@ -639,11 +674,13 @@ export type ResolveSearchSchemaFn<TSearchValidator> = TSearchValidator extends (
 export type ResolveSearchSchema<TSearchValidator> =
   unknown extends TSearchValidator
     ? TSearchValidator
-    : TSearchValidator extends AnySearchValidatorAdapter
-      ? TSearchValidator['types']['output']
-      : TSearchValidator extends AnySearchValidatorObj
-        ? ResolveSearchSchemaFn<TSearchValidator['parse']>
-        : ResolveSearchSchemaFn<TSearchValidator>
+    : TSearchValidator extends AnyStandardSchemaValidator
+      ? NonNullable<TSearchValidator['~types']>['output']
+      : TSearchValidator extends AnySearchValidatorAdapter
+        ? TSearchValidator['types']['output']
+        : TSearchValidator extends AnySearchValidatorObj
+          ? ResolveSearchSchemaFn<TSearchValidator['parse']>
+          : ResolveSearchSchemaFn<TSearchValidator>
 
 export type ResolveFullSearchSchema<
   TParentRoute extends AnyRoute,
diff --git a/packages/react-router/src/router.ts b/packages/react-router/src/router.ts
index e06457fb7..52f1150af 100644
--- a/packages/react-router/src/router.ts
+++ b/packages/react-router/src/router.ts
@@ -43,6 +43,7 @@ import type {
   AnyRoute,
   AnyRouteWithContext,
   AnySearchSchema,
+  AnySearchValidator,
   BeforeLoadContextOptions,
   ErrorRouteComponent,
   LoaderFnContext,
@@ -557,6 +558,31 @@ function routeNeedsPreload(route: AnyRoute) {
   return false
 }
 
+function validateSearch(
+  validateSearch: AnySearchValidator,
+  input: unknown,
+): unknown {
+  if (validateSearch == null) return {}
+
+  if ('~validate' in validateSearch) {
+    const result = validateSearch['~validate']({ value: input })
+
+    if ('value' in result) return result.value
+
+    throw new SearchParamError(JSON.stringify(result.issues, undefined, 2))
+  }
+
+  if ('parse' in validateSearch) {
+    return validateSearch.parse(input)
+  }
+
+  if (typeof validateSearch === 'function') {
+    return validateSearch(input)
+  }
+
+  return {}
+}
+
 export type RouterEvents = {
   onBeforeNavigate: {
     type: 'onBeforeNavigate'
@@ -1114,12 +1140,8 @@ export class Router<
         const parentSearch = parentMatch?.search ?? next.search
 
         try {
-          const validator =
-            typeof route.options.validateSearch === 'object'
-              ? route.options.validateSearch.parse
-              : route.options.validateSearch
-
-          const search = validator?.(parentSearch) ?? {}
+          const search =
+            validateSearch(route.options.validateSearch, parentSearch) ?? {}
 
           return [
             {
@@ -1444,13 +1466,12 @@ export class Router<
         matchedRoutesResult?.matchedRoutes.forEach((route) => {
           try {
             if (route.options.validateSearch) {
-              const validator =
-                typeof route.options.validateSearch === 'object'
-                  ? route.options.validateSearch.parse
-                  : route.options.validateSearch
               validatedSearch = {
                 ...validatedSearch,
-                ...validator({ ...validatedSearch, ...search }),
+                ...(validateSearch(route.options.validateSearch, {
+                  ...validatedSearch,
+                  ...search,
+                }) ?? {}),
               }
             }
           } catch (e) {
@@ -2088,6 +2109,7 @@ export class Router<
 
               updateMatch(matchId, (prev) => {
                 prev.beforeLoadPromise?.resolve()
+                prev.loadPromise?.resolve()
 
                 return {
                   ...prev,
@@ -2481,7 +2503,11 @@ export class Router<
                       ;(async () => {
                         try {
                           await runLoader()
-                        } catch (err) {}
+                        } catch (err) {
+                          if (isResolvedRedirect(err)) {
+                            await this.navigate(err)
+                          }
+                        }
                       })()
                     } else if (status !== 'success') {
                       await runLoader()
diff --git a/packages/router-arktype-adapter/package.json b/packages/router-arktype-adapter/package.json
index abf0acedf..8f254e150 100644
--- a/packages/router-arktype-adapter/package.json
+++ b/packages/router-arktype-adapter/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/router-arktype-adapter",
-  "version": "1.74.4",
+  "version": "1.75.0",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/router-devtools/package.json b/packages/router-devtools/package.json
index 2663c2eb4..d2ad4b814 100644
--- a/packages/router-devtools/package.json
+++ b/packages/router-devtools/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/router-devtools",
-  "version": "1.74.4",
+  "version": "1.75.0",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/router-valibot-adapter/package.json b/packages/router-valibot-adapter/package.json
index 01aef2a7d..30c95c9b8 100644
--- a/packages/router-valibot-adapter/package.json
+++ b/packages/router-valibot-adapter/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/router-valibot-adapter",
-  "version": "1.74.4",
+  "version": "1.75.0",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/router-zod-adapter/package.json b/packages/router-zod-adapter/package.json
index 7cc24a925..bc368df89 100644
--- a/packages/router-zod-adapter/package.json
+++ b/packages/router-zod-adapter/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/router-zod-adapter",
-  "version": "1.74.4",
+  "version": "1.75.0",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/packages/start/package.json b/packages/start/package.json
index c25085a45..d673fc01b 100644
--- a/packages/start/package.json
+++ b/packages/start/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@tanstack/start",
-  "version": "1.74.4",
+  "version": "1.75.0",
   "description": "Modern and scalable routing for React applications",
   "author": "Tanner Linsley",
   "license": "MIT",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2e7001a35..8017041c6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -35,13 +35,13 @@ importers:
         version: 0.16.4
       '@eslint-react/eslint-plugin':
         specifier: ^1.15.0
-        version: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+        version: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@playwright/test':
         specifier: ^1.48.1
         version: 1.48.1
       '@tanstack/config':
         specifier: ^0.13.4
-        version: 0.13.4(@types/node@22.7.4)(esbuild@0.23.1)(eslint@9.13.0(jiti@1.21.6))(rollup@4.21.2)(typescript@5.6.2)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))
+        version: 0.13.4(@types/node@22.7.4)(esbuild@0.23.1)(eslint@9.13.0(jiti@1.21.6))(rollup@4.21.2)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))
       '@types/node':
         specifier: ^22.7.4
         version: 22.7.4
@@ -59,7 +59,7 @@ importers:
         version: 5.1.0-rc-fb9a90fa48-20240614(eslint@9.13.0(jiti@1.21.6))
       eslint-plugin-unused-imports:
         specifier: ^4.1.4
-        version: 4.1.4(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.13.0(jiti@1.21.6))
+        version: 4.1.4(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))
       glob:
         specifier: ^11.0.0
         version: 11.0.0
@@ -88,8 +88,8 @@ importers:
         specifier: ^6.0.1
         version: 6.0.1
       typescript:
-        specifier: ^5.6.2
-        version: 5.6.2
+        specifier: ^5.6.3
+        version: 5.6.3
       typescript51:
         specifier: npm:typescript@5.1
         version: typescript@5.1.6
@@ -110,7 +110,7 @@ importers:
         version: 5.4.9(@types/node@22.7.4)(terser@5.31.1)
       vitest:
         specifier: ^2.1.3
-        version: 2.1.3(@types/node@22.7.4)(jsdom@25.0.1)(msw@2.4.11(typescript@5.6.2))(terser@5.31.1)
+        version: 2.1.3(@types/node@22.7.4)(jsdom@25.0.1)(msw@2.4.11(typescript@5.6.3))(terser@5.31.1)
 
   e2e/react-router/basic:
     dependencies:
@@ -1578,10 +1578,10 @@ importers:
         version: 18.3.0
       html-webpack-plugin:
         specifier: ^5.6.2
-        version: 5.6.2(@rspack/core@1.0.13(@swc/helpers@0.5.13))(webpack@5.95.0)
+        version: 5.6.2(@rspack/core@1.0.13(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))
       swc-loader:
         specifier: ^0.2.6
-        version: 0.2.6(@swc/core@1.7.36(@swc/helpers@0.5.13))(webpack@5.95.0)
+        version: 0.2.6(@swc/core@1.7.36(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))
       typescript:
         specifier: ^5.6.2
         version: 5.6.2
@@ -2005,11 +2005,17 @@ importers:
         version: 18.3.1(react@18.3.1)
       valibot:
         specifier: 1.0.0-beta.1
-        version: 1.0.0-beta.1(typescript@5.6.2)
+        version: 1.0.0-beta.1(typescript@5.6.3)
       zod:
         specifier: ^3.23.8
         version: 3.23.8
     devDependencies:
+      '@testing-library/jest-dom':
+        specifier: ^6.5.0
+        version: 6.6.2
+      '@testing-library/react':
+        specifier: ^16.0.1
+        version: 16.0.1(@testing-library/dom@10.0.0)(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@types/react':
         specifier: ^18.2.47
         version: 18.3.11
@@ -2726,7 +2732,7 @@ importers:
         version: 4.3.3(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))
       html-webpack-plugin:
         specifier: ^5.6.0
-        version: 5.6.2(@rspack/core@1.0.13(@swc/helpers@0.5.13))(webpack@5.95.0)
+        version: 5.6.2(@rspack/core@1.0.13(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))
       react:
         specifier: ^18.3.1
         version: 18.3.1
@@ -2735,7 +2741,7 @@ importers:
         version: 18.3.1(react@18.3.1)
       swc-loader:
         specifier: ^0.2.6
-        version: 0.2.6(@swc/core@1.7.36(@swc/helpers@0.5.13))(webpack@5.95.0)
+        version: 0.2.6(@swc/core@1.7.36(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))
       typescript:
         specifier: ^5.6.2
         version: 5.6.2
@@ -2793,11 +2799,11 @@ importers:
     dependencies:
       '@typescript-eslint/utils':
         specifier: ^8.10.0
-        version: 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+        version: 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
     devDependencies:
       '@typescript-eslint/rule-tester':
         specifier: ^8.10.0
-        version: 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+        version: 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       combinate:
         specifier: ^1.1.11
         version: 1.1.11
@@ -3024,7 +3030,7 @@ importers:
         version: 16.0.1(@testing-library/dom@10.0.0)(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       valibot:
         specifier: 1.0.0-beta.1
-        version: 1.0.0-beta.1(typescript@5.6.2)
+        version: 1.0.0-beta.1(typescript@5.6.3)
 
   packages/router-vite-plugin:
     dependencies:
@@ -9779,6 +9785,11 @@ packages:
     engines: {node: '>=14.17'}
     hasBin: true
 
+  typescript@5.6.3:
+    resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+    engines: {node: '>=14.17'}
+    hasBin: true
+
   uc.micro@2.1.0:
     resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
 
@@ -11013,13 +11024,13 @@ snapshots:
 
   '@eslint-community/regexpp@4.11.0': {}
 
-  '@eslint-react/ast@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@eslint-react/ast@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       birecord: 0.1.1
       string-ts: 2.2.0
       ts-pattern: 5.4.0
@@ -11028,18 +11039,18 @@ snapshots:
       - supports-color
       - typescript
 
-  '@eslint-react/core@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@eslint-react/core@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
-      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.10.0
-      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       birecord: 0.1.1
       short-unique-id: 5.2.0
       ts-pattern: 5.4.0
@@ -11048,46 +11059,46 @@ snapshots:
       - supports-color
       - typescript
 
-  '@eslint-react/eslint-plugin@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@eslint-react/eslint-plugin@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
-      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.10.0
-      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       eslint: 9.13.0(jiti@1.21.6)
-      eslint-plugin-react-debug: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      eslint-plugin-react-dom: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      eslint-plugin-react-hooks-extra: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      eslint-plugin-react-naming-convention: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      eslint-plugin-react-web-api: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      eslint-plugin-react-x: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      eslint-plugin-react-debug: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      eslint-plugin-react-dom: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      eslint-plugin-react-hooks-extra: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      eslint-plugin-react-naming-convention: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      eslint-plugin-react-web-api: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      eslint-plugin-react-x: 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint-react/jsx@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@eslint-react/jsx@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
-      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.10.0
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       ts-pattern: 5.4.0
     transitivePeerDependencies:
       - eslint
       - supports-color
       - typescript
 
-  '@eslint-react/shared@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@eslint-react/shared@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
       '@eslint-react/tools': 1.15.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       picomatch: 4.0.2
     transitivePeerDependencies:
       - eslint
@@ -11096,24 +11107,24 @@ snapshots:
 
   '@eslint-react/tools@1.15.0': {}
 
-  '@eslint-react/types@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@eslint-react/types@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
       '@eslint-react/tools': 1.15.0
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
     transitivePeerDependencies:
       - eslint
       - supports-color
       - typescript
 
-  '@eslint-react/var@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@eslint-react/var@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
-      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.10.0
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       ts-pattern: 5.4.0
     transitivePeerDependencies:
       - eslint
@@ -12232,7 +12243,7 @@ snapshots:
     dependencies:
       '@swc/counter': 0.1.3
 
-  '@tanstack/config@0.13.4(@types/node@22.7.4)(esbuild@0.23.1)(eslint@9.13.0(jiti@1.21.6))(rollup@4.21.2)(typescript@5.6.2)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))':
+  '@tanstack/config@0.13.4(@types/node@22.7.4)(esbuild@0.23.1)(eslint@9.13.0(jiti@1.21.6))(rollup@4.21.2)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))':
     dependencies:
       '@commitlint/parse': 19.5.0
       '@eslint/js': 9.13.0
@@ -12240,7 +12251,7 @@ snapshots:
       commander: 12.1.0
       current-git-branch: 1.1.0
       esbuild-register: 3.6.0(esbuild@0.23.1)
-      eslint-plugin-import-x: 4.3.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      eslint-plugin-import-x: 4.3.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       eslint-plugin-n: 17.10.3(eslint@9.13.0(jiti@1.21.6))
       globals: 15.9.0
       interpret: 3.1.1
@@ -12250,14 +12261,14 @@ snapshots:
       rollup-plugin-preserve-directives: 0.4.0(rollup@4.21.2)
       semver: 7.6.3
       simple-git: 3.27.0
-      typedoc: 0.26.7(typescript@5.6.2)
-      typedoc-plugin-frontmatter: 1.0.0(typedoc-plugin-markdown@4.2.9(typedoc@0.26.7(typescript@5.6.2)))
-      typedoc-plugin-markdown: 4.2.9(typedoc@0.26.7(typescript@5.6.2))
-      typescript-eslint: 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      typedoc: 0.26.7(typescript@5.6.3)
+      typedoc-plugin-frontmatter: 1.0.0(typedoc-plugin-markdown@4.2.9(typedoc@0.26.7(typescript@5.6.3)))
+      typedoc-plugin-markdown: 4.2.9(typedoc@0.26.7(typescript@5.6.3))
+      typescript-eslint: 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       v8flags: 4.0.1
-      vite-plugin-dts: 4.0.3(@types/node@22.7.4)(rollup@4.21.2)(typescript@5.6.2)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))
+      vite-plugin-dts: 4.0.3(@types/node@22.7.4)(rollup@4.21.2)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))
       vite-plugin-externalize-deps: 0.8.0(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))
-      vite-tsconfig-paths: 5.0.1(typescript@5.6.2)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))
+      vite-tsconfig-paths: 5.0.1(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))
     transitivePeerDependencies:
       - '@types/node'
       - esbuild
@@ -12525,41 +12536,41 @@ snapshots:
     dependencies:
       '@types/yargs-parser': 21.0.0
 
-  '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
       '@eslint-community/regexpp': 4.11.0
-      '@typescript-eslint/parser': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/parser': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.8.0
-      '@typescript-eslint/type-utils': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/type-utils': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@typescript-eslint/utils': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/visitor-keys': 8.8.0
       eslint: 9.13.0(jiti@1.21.6)
       graphemer: 1.4.0
       ignore: 5.3.1
       natural-compare: 1.4.0
-      ts-api-utils: 1.3.0(typescript@5.6.2)
+      ts-api-utils: 1.3.0(typescript@5.6.3)
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
       '@typescript-eslint/scope-manager': 8.8.0
       '@typescript-eslint/types': 8.8.0
-      '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2)
+      '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.3)
       '@typescript-eslint/visitor-keys': 8.8.0
       debug: 4.3.6
       eslint: 9.13.0(jiti@1.21.6)
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/rule-tester@8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@typescript-eslint/rule-tester@8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
-      '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       ajv: 6.12.6
       eslint: 9.13.0(jiti@1.21.6)
       json-stable-stringify-without-jsonify: 1.0.1
@@ -12584,26 +12595,26 @@ snapshots:
       '@typescript-eslint/types': 8.8.1
       '@typescript-eslint/visitor-keys': 8.8.1
 
-  '@typescript-eslint/type-utils@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@typescript-eslint/type-utils@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
-      '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.3)
+      '@typescript-eslint/utils': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       debug: 4.3.6
-      ts-api-utils: 1.3.0(typescript@5.6.2)
+      ts-api-utils: 1.3.0(typescript@5.6.3)
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - eslint
       - supports-color
 
-  '@typescript-eslint/type-utils@8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@typescript-eslint/type-utils@8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
-      '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3)
+      '@typescript-eslint/utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       debug: 4.3.6
-      ts-api-utils: 1.3.0(typescript@5.6.2)
+      ts-api-utils: 1.3.0(typescript@5.6.3)
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - eslint
       - supports-color
@@ -12614,7 +12625,7 @@ snapshots:
 
   '@typescript-eslint/types@8.8.1': {}
 
-  '@typescript-eslint/typescript-estree@8.10.0(typescript@5.6.2)':
+  '@typescript-eslint/typescript-estree@8.10.0(typescript@5.6.3)':
     dependencies:
       '@typescript-eslint/types': 8.10.0
       '@typescript-eslint/visitor-keys': 8.10.0
@@ -12623,13 +12634,13 @@ snapshots:
       is-glob: 4.0.3
       minimatch: 9.0.5
       semver: 7.6.3
-      ts-api-utils: 1.3.0(typescript@5.6.2)
+      ts-api-utils: 1.3.0(typescript@5.6.3)
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/typescript-estree@8.8.0(typescript@5.6.2)':
+  '@typescript-eslint/typescript-estree@8.8.0(typescript@5.6.3)':
     dependencies:
       '@typescript-eslint/types': 8.8.0
       '@typescript-eslint/visitor-keys': 8.8.0
@@ -12638,13 +12649,13 @@ snapshots:
       is-glob: 4.0.3
       minimatch: 9.0.5
       semver: 7.6.3
-      ts-api-utils: 1.3.0(typescript@5.6.2)
+      ts-api-utils: 1.3.0(typescript@5.6.3)
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/typescript-estree@8.8.1(typescript@5.6.2)':
+  '@typescript-eslint/typescript-estree@8.8.1(typescript@5.6.3)':
     dependencies:
       '@typescript-eslint/types': 8.8.1
       '@typescript-eslint/visitor-keys': 8.8.1
@@ -12653,40 +12664,40 @@ snapshots:
       is-glob: 4.0.3
       minimatch: 9.0.5
       semver: 7.6.3
-      ts-api-utils: 1.3.0(typescript@5.6.2)
+      ts-api-utils: 1.3.0(typescript@5.6.3)
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/utils@8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@typescript-eslint/utils@8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0(jiti@1.21.6))
       '@typescript-eslint/scope-manager': 8.10.0
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.2)
+      '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3)
       eslint: 9.13.0(jiti@1.21.6)
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  '@typescript-eslint/utils@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@typescript-eslint/utils@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0(jiti@1.21.6))
       '@typescript-eslint/scope-manager': 8.8.0
       '@typescript-eslint/types': 8.8.0
-      '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2)
+      '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.3)
       eslint: 9.13.0(jiti@1.21.6)
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  '@typescript-eslint/utils@8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)':
+  '@typescript-eslint/utils@8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)':
     dependencies:
       '@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0(jiti@1.21.6))
       '@typescript-eslint/scope-manager': 8.8.1
       '@typescript-eslint/types': 8.8.1
-      '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.2)
+      '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3)
       eslint: 9.13.0(jiti@1.21.6)
     transitivePeerDependencies:
       - supports-color
@@ -12811,13 +12822,13 @@ snapshots:
       chai: 5.1.1
       tinyrainbow: 1.2.0
 
-  '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(msw@2.4.11(typescript@5.6.2))(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))':
+  '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(msw@2.4.11(typescript@5.6.3))(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))':
     dependencies:
       '@vitest/spy': 2.1.3
       estree-walker: 3.0.3
       magic-string: 0.30.11
     optionalDependencies:
-      msw: 2.4.11(typescript@5.6.2)
+      msw: 2.4.11(typescript@5.6.3)
       vite: 5.4.9(@types/node@22.7.4)(terser@5.31.1)
 
   '@vitest/pretty-format@2.1.3':
@@ -12887,6 +12898,20 @@ snapshots:
       path-browserify: 1.0.1
     optionalDependencies:
       typescript: 5.6.2
+    optional: true
+
+  '@vue/language-core@2.0.29(typescript@5.6.3)':
+    dependencies:
+      '@volar/language-core': 2.4.5
+      '@vue/compiler-dom': 3.4.27
+      '@vue/compiler-vue2': 2.7.16
+      '@vue/shared': 3.4.27
+      computeds: 0.0.1
+      minimatch: 9.0.5
+      muggle-string: 0.4.1
+      path-browserify: 1.0.1
+    optionalDependencies:
+      typescript: 5.6.3
 
   '@vue/language-core@2.1.6(typescript@5.6.2)':
     dependencies:
@@ -12981,17 +13006,17 @@ snapshots:
       '@webassemblyjs/ast': 1.12.1
       '@xtuc/long': 4.2.2
 
-  '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.95.0)':
+  '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))':
     dependencies:
       webpack: 5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4)
       webpack-cli: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.95.0)
 
-  '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.95.0)':
+  '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))':
     dependencies:
       webpack: 5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4)
       webpack-cli: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.95.0)
 
-  '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.1.0)(webpack@5.95.0)':
+  '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.95.0))(webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))':
     dependencies:
       webpack: 5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4)
       webpack-cli: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.95.0)
@@ -14186,9 +14211,9 @@ snapshots:
       eslint: 9.13.0(jiti@1.21.6)
       eslint-compat-utils: 0.5.1(eslint@9.13.0(jiti@1.21.6))
 
-  eslint-plugin-import-x@4.3.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2):
+  eslint-plugin-import-x@4.3.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3):
     dependencies:
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       debug: 4.3.6
       doctrine: 3.0.0
       eslint: 9.13.0(jiti@1.21.6)
@@ -14215,63 +14240,63 @@ snapshots:
       minimatch: 9.0.5
       semver: 7.6.3
 
-  eslint-plugin-react-debug@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2):
+  eslint-plugin-react-debug@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3):
     dependencies:
-      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.10.0
-      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       eslint: 9.13.0(jiti@1.21.6)
       string-ts: 2.2.0
       ts-pattern: 5.4.0
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-react-dom@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2):
+  eslint-plugin-react-dom@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3):
     dependencies:
-      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.10.0
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       eslint: 9.13.0(jiti@1.21.6)
       ts-pattern: 5.4.0
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-react-hooks-extra@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2):
+  eslint-plugin-react-hooks-extra@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3):
     dependencies:
-      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.10.0
-      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       eslint: 9.13.0(jiti@1.21.6)
       ts-pattern: 5.4.0
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
@@ -14279,71 +14304,71 @@ snapshots:
     dependencies:
       eslint: 9.13.0(jiti@1.21.6)
 
-  eslint-plugin-react-naming-convention@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2):
+  eslint-plugin-react-naming-convention@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3):
     dependencies:
-      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.10.0
-      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       eslint: 9.13.0(jiti@1.21.6)
       ts-pattern: 5.4.0
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-react-web-api@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2):
+  eslint-plugin-react-web-api@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3):
     dependencies:
-      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.10.0
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       birecord: 0.1.1
       eslint: 9.13.0(jiti@1.21.6)
       ts-pattern: 5.4.0
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-react-x@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2):
+  eslint-plugin-react-x@1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3):
     dependencies:
-      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/ast': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/core': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/jsx': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/shared': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@eslint-react/tools': 1.15.0
-      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@eslint-react/types': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@eslint-react/var': 1.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.10.0
-      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       '@typescript-eslint/types': 8.10.0
-      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.10.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       eslint: 9.13.0(jiti@1.21.6)
-      is-immutable-type: 5.0.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      is-immutable-type: 5.0.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       ts-pattern: 5.4.0
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.13.0(jiti@1.21.6)):
+  eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6)):
     dependencies:
       eslint: 9.13.0(jiti@1.21.6)
     optionalDependencies:
-      '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
 
   eslint-scope@5.1.1:
     dependencies:
@@ -14937,7 +14962,7 @@ snapshots:
 
   html-void-elements@3.0.0: {}
 
-  html-webpack-plugin@5.6.2(@rspack/core@1.0.13(@swc/helpers@0.5.13))(webpack@5.95.0):
+  html-webpack-plugin@5.6.2(@rspack/core@1.0.13(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4)):
     dependencies:
       '@types/html-minifier-terser': 6.1.0
       html-minifier-terser: 6.1.0
@@ -15141,13 +15166,13 @@ snapshots:
     dependencies:
       is-extglob: 2.1.1
 
-  is-immutable-type@5.0.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2):
+  is-immutable-type@5.0.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3):
     dependencies:
-      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/type-utils': 8.8.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
       eslint: 9.13.0(jiti@1.21.6)
-      ts-api-utils: 1.3.0(typescript@5.6.2)
-      ts-declaration-location: 1.0.4(typescript@5.6.2)
-      typescript: 5.6.2
+      ts-api-utils: 1.3.0(typescript@5.6.3)
+      ts-declaration-location: 1.0.4(typescript@5.6.3)
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
 
@@ -15691,6 +15716,29 @@ snapshots:
     optionalDependencies:
       typescript: 5.6.2
 
+  msw@2.4.11(typescript@5.6.3):
+    dependencies:
+      '@bundled-es-modules/cookie': 2.0.0
+      '@bundled-es-modules/statuses': 1.0.1
+      '@bundled-es-modules/tough-cookie': 0.1.6
+      '@inquirer/confirm': 3.2.0
+      '@mswjs/interceptors': 0.35.9
+      '@open-draft/until': 2.1.0
+      '@types/cookie': 0.6.0
+      '@types/statuses': 2.0.5
+      chalk: 4.1.2
+      graphql: 16.9.0
+      headers-polyfill: 4.0.3
+      is-node-process: 1.2.0
+      outvariant: 1.4.3
+      path-to-regexp: 6.3.0
+      strict-event-emitter: 0.5.1
+      type-fest: 4.26.1
+      yargs: 17.7.2
+    optionalDependencies:
+      typescript: 5.6.3
+    optional: true
+
   muggle-string@0.4.1: {}
 
   multicast-dns@7.2.5:
@@ -17085,7 +17133,7 @@ snapshots:
       csso: 5.0.5
       picocolors: 1.1.1
 
-  swc-loader@0.2.6(@swc/core@1.7.36(@swc/helpers@0.5.13))(webpack@5.95.0):
+  swc-loader@0.2.6(@swc/core@1.7.36(@swc/helpers@0.5.13))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4)):
     dependencies:
       '@swc/core': 1.7.36(@swc/helpers@0.5.13)
       '@swc/counter': 0.1.3
@@ -17155,26 +17203,26 @@ snapshots:
       mkdirp: 1.0.4
       yallist: 4.0.0
 
-  terser-webpack-plugin@5.3.10(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)):
+  terser-webpack-plugin@5.3.10(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4)):
     dependencies:
       '@jridgewell/trace-mapping': 0.3.25
       jest-worker: 27.5.1
       schema-utils: 3.3.0
       serialize-javascript: 6.0.2
       terser: 5.31.1
-      webpack: 5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)
+      webpack: 5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4)
     optionalDependencies:
       '@swc/core': 1.7.36(@swc/helpers@0.5.13)
       esbuild: 0.23.1
 
-  terser-webpack-plugin@5.3.10(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack@5.95.0):
+  terser-webpack-plugin@5.3.10(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)):
     dependencies:
       '@jridgewell/trace-mapping': 0.3.25
       jest-worker: 27.5.1
       schema-utils: 3.3.0
       serialize-javascript: 6.0.2
       terser: 5.31.1
-      webpack: 5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4)
+      webpack: 5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)
     optionalDependencies:
       '@swc/core': 1.7.36(@swc/helpers@0.5.13)
       esbuild: 0.23.1
@@ -17265,14 +17313,14 @@ snapshots:
 
   trim-lines@3.0.1: {}
 
-  ts-api-utils@1.3.0(typescript@5.6.2):
+  ts-api-utils@1.3.0(typescript@5.6.3):
     dependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
 
-  ts-declaration-location@1.0.4(typescript@5.6.2):
+  ts-declaration-location@1.0.4(typescript@5.6.3):
     dependencies:
       minimatch: 10.0.1
-      typescript: 5.6.2
+      typescript: 5.6.3
 
   ts-interface-checker@0.1.13: {}
 
@@ -17282,6 +17330,10 @@ snapshots:
     optionalDependencies:
       typescript: 5.6.2
 
+  tsconfck@3.0.3(typescript@5.6.3):
+    optionalDependencies:
+      typescript: 5.6.3
+
   tsconfig-paths@4.2.0:
     dependencies:
       json5: 2.2.3
@@ -17320,31 +17372,31 @@ snapshots:
       media-typer: 0.3.0
       mime-types: 2.1.35
 
-  typedoc-plugin-frontmatter@1.0.0(typedoc-plugin-markdown@4.2.9(typedoc@0.26.7(typescript@5.6.2))):
+  typedoc-plugin-frontmatter@1.0.0(typedoc-plugin-markdown@4.2.9(typedoc@0.26.7(typescript@5.6.3))):
     dependencies:
-      typedoc-plugin-markdown: 4.2.9(typedoc@0.26.7(typescript@5.6.2))
+      typedoc-plugin-markdown: 4.2.9(typedoc@0.26.7(typescript@5.6.3))
       yaml: 2.5.1
 
-  typedoc-plugin-markdown@4.2.9(typedoc@0.26.7(typescript@5.6.2)):
+  typedoc-plugin-markdown@4.2.9(typedoc@0.26.7(typescript@5.6.3)):
     dependencies:
-      typedoc: 0.26.7(typescript@5.6.2)
+      typedoc: 0.26.7(typescript@5.6.3)
 
-  typedoc@0.26.7(typescript@5.6.2):
+  typedoc@0.26.7(typescript@5.6.3):
     dependencies:
       lunr: 2.3.9
       markdown-it: 14.1.0
       minimatch: 9.0.5
       shiki: 1.17.7
-      typescript: 5.6.2
+      typescript: 5.6.3
       yaml: 2.5.1
 
-  typescript-eslint@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2):
+  typescript-eslint@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3):
     dependencies:
-      '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@typescript-eslint/parser': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.2)
+      '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@typescript-eslint/parser': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
+      '@typescript-eslint/utils': 8.8.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
     transitivePeerDependencies:
       - eslint
       - supports-color
@@ -17365,6 +17417,8 @@ snapshots:
 
   typescript@5.6.2: {}
 
+  typescript@5.6.3: {}
+
   uc.micro@2.1.0: {}
 
   ufo@1.5.4: {}
@@ -17594,9 +17648,9 @@ snapshots:
 
   v8flags@4.0.1: {}
 
-  valibot@1.0.0-beta.1(typescript@5.6.2):
+  valibot@1.0.0-beta.1(typescript@5.6.3):
     optionalDependencies:
-      typescript: 5.6.2
+      typescript: 5.6.3
 
   validate-npm-package-name@5.0.1: {}
 
@@ -17703,19 +17757,19 @@ snapshots:
       '@babel/core': 7.25.8
       vite: 5.4.9(@types/node@22.7.4)(terser@5.31.1)
 
-  vite-plugin-dts@4.0.3(@types/node@22.7.4)(rollup@4.21.2)(typescript@5.6.2)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1)):
+  vite-plugin-dts@4.0.3(@types/node@22.7.4)(rollup@4.21.2)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1)):
     dependencies:
       '@microsoft/api-extractor': 7.47.4(@types/node@22.7.4)
       '@rollup/pluginutils': 5.1.0(rollup@4.21.2)
       '@volar/typescript': 2.4.5
-      '@vue/language-core': 2.0.29(typescript@5.6.2)
+      '@vue/language-core': 2.0.29(typescript@5.6.3)
       compare-versions: 6.1.1
       debug: 4.3.6
       kolorist: 1.8.0
       local-pkg: 0.5.0
       magic-string: 0.30.11
-      typescript: 5.6.2
-      vue-tsc: 2.0.29(typescript@5.6.2)
+      typescript: 5.6.3
+      vue-tsc: 2.0.29(typescript@5.6.3)
     optionalDependencies:
       vite: 5.4.9(@types/node@22.7.4)(terser@5.31.1)
     transitivePeerDependencies:
@@ -17757,6 +17811,17 @@ snapshots:
       - supports-color
       - typescript
 
+  vite-tsconfig-paths@5.0.1(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1)):
+    dependencies:
+      debug: 4.3.6
+      globrex: 0.1.2
+      tsconfck: 3.0.3(typescript@5.6.3)
+    optionalDependencies:
+      vite: 5.4.9(@types/node@22.7.4)(terser@5.31.1)
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+
   vite@5.4.9(@types/node@22.7.4)(terser@5.31.1):
     dependencies:
       esbuild: 0.21.5
@@ -17767,10 +17832,10 @@ snapshots:
       fsevents: 2.3.3
       terser: 5.31.1
 
-  vitest@2.1.3(@types/node@22.7.4)(jsdom@25.0.1)(msw@2.4.11(typescript@5.6.2))(terser@5.31.1):
+  vitest@2.1.3(@types/node@22.7.4)(jsdom@25.0.1)(msw@2.4.11(typescript@5.6.3))(terser@5.31.1):
     dependencies:
       '@vitest/expect': 2.1.3
-      '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(msw@2.4.11(typescript@5.6.2))(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))
+      '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(msw@2.4.11(typescript@5.6.3))(vite@5.4.9(@types/node@22.7.4)(terser@5.31.1))
       '@vitest/pretty-format': 2.1.3
       '@vitest/runner': 2.1.3
       '@vitest/snapshot': 2.1.3
@@ -17810,6 +17875,14 @@ snapshots:
       '@vue/language-core': 2.0.29(typescript@5.6.2)
       semver: 7.6.3
       typescript: 5.6.2
+    optional: true
+
+  vue-tsc@2.0.29(typescript@5.6.3):
+    dependencies:
+      '@volar/typescript': 2.4.5
+      '@vue/language-core': 2.0.29(typescript@5.6.3)
+      semver: 7.6.3
+      typescript: 5.6.3
 
   w3c-xmlserializer@5.0.0:
     dependencies:
@@ -17837,9 +17910,9 @@ snapshots:
   webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.95.0):
     dependencies:
       '@discoveryjs/json-ext': 0.5.7
-      '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.95.0)
-      '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.95.0)
-      '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.1.0)(webpack@5.95.0)
+      '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))
+      '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))
+      '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.95.0))(webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))
       colorette: 2.0.20
       commander: 10.0.1
       cross-spawn: 7.0.3
@@ -17853,7 +17926,7 @@ snapshots:
     optionalDependencies:
       webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.95.0)
 
-  webpack-dev-middleware@7.4.2(webpack@5.95.0):
+  webpack-dev-middleware@7.4.2(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4)):
     dependencies:
       colorette: 2.0.20
       memfs: 4.9.3
@@ -17892,7 +17965,7 @@ snapshots:
       serve-index: 1.9.1
       sockjs: 0.3.24
       spdy: 4.0.2
-      webpack-dev-middleware: 7.4.2(webpack@5.95.0)
+      webpack-dev-middleware: 7.4.2(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))
       ws: 8.18.0
     optionalDependencies:
       webpack: 5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4)
@@ -17965,7 +18038,7 @@ snapshots:
       neo-async: 2.6.2
       schema-utils: 3.3.0
       tapable: 2.2.1
-      terser-webpack-plugin: 5.3.10(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack@5.95.0)
+      terser-webpack-plugin: 5.3.10(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack@5.95.0(@swc/core@1.7.36(@swc/helpers@0.5.13))(esbuild@0.23.1)(webpack-cli@5.1.4))
       watchpack: 2.4.1
       webpack-sources: 3.2.3
     optionalDependencies:


Test patch:
diff --git a/examples/react/search-validator-adapters/tests/arktype.test-d.tsx b/examples/react/search-validator-adapters/tests/arktype.test-d.tsx
new file mode 100644
index 000000000..a6ae63435
--- /dev/null
+++ b/examples/react/search-validator-adapters/tests/arktype.test-d.tsx
@@ -0,0 +1,16 @@
+import { Link } from '@tanstack/react-router'
+import { expectTypeOf, test } from 'vitest'
+import { Route as ArkTypeRoute } from '../src/routes/users/arktype.index'
+import type { router } from '../src/main'
+
+test('infers correct input and output type for valibot', () => {
+  expectTypeOf(Link<typeof router, string, '/users/arktype'>)
+    .parameter(0)
+    .toHaveProperty('search')
+    .exclude<boolean | ((...args: ReadonlyArray<any>) => any)>()
+    .toEqualTypeOf<{ search?: string } | undefined>()
+
+  expectTypeOf(ArkTypeRoute.useSearch()).toEqualTypeOf<{
+    search: string
+  }>()
+})
diff --git a/examples/react/search-validator-adapters/tests/arktype.test.tsx b/examples/react/search-validator-adapters/tests/arktype.test.tsx
new file mode 100644
index 000000000..5033b6537
--- /dev/null
+++ b/examples/react/search-validator-adapters/tests/arktype.test.tsx
@@ -0,0 +1,64 @@
+import { fireEvent, render, screen } from '@testing-library/react'
+import { expect, test } from 'vitest'
+import {
+  Link,
+  RouterProvider,
+  createRootRoute,
+  createRoute,
+  createRouter,
+} from '@tanstack/react-router'
+
+import '@testing-library/jest-dom/vitest'
+import { type } from 'arktype'
+
+test('can navigate to the route', async () => {
+  const rootRoute = createRootRoute()
+
+  const indexRoute = createRoute({
+    getParentRoute: () => rootRoute,
+    path: '/',
+    component: () => <Link to="/users/arktype">Arktype</Link>,
+  })
+
+  const ArkType = () => {
+    const { search } = arkTypeRoute.useSearch()
+
+    return (
+      <div>
+        <div>{search}</div>
+        <Link from="/users/arktype" search={{ search: 'updated' }}>
+          Update
+        </Link>
+      </div>
+    )
+  }
+
+  const search = type({
+    'search?': 'string = "default"',
+  })
+
+  const arkTypeRoute = createRoute({
+    getParentRoute: () => rootRoute,
+    path: '/users/arkType',
+    validateSearch: search,
+    component: ArkType,
+  })
+
+  const routeTree = rootRoute.addChildren([indexRoute, arkTypeRoute])
+
+  const router = createRouter({ routeTree })
+
+  render(<RouterProvider router={router as any} />)
+
+  const link = await screen.findByText('Arktype')
+
+  fireEvent.click(link)
+
+  expect(await screen.findByText('default')).toBeInTheDocument()
+
+  const updateLink = await screen.findByText('Update')
+
+  fireEvent.click(updateLink)
+
+  expect(await screen.findByText('updated')).toBeInTheDocument()
+})
diff --git a/examples/react/search-validator-adapters/tests/valibot.test-d.tsx b/examples/react/search-validator-adapters/tests/valibot.test-d.tsx
new file mode 100644
index 000000000..f5c0ed907
--- /dev/null
+++ b/examples/react/search-validator-adapters/tests/valibot.test-d.tsx
@@ -0,0 +1,14 @@
+import { Link } from '@tanstack/react-router'
+import { expectTypeOf, test } from 'vitest'
+import { Route as ValibotRoute } from '../src/routes/users/valibot.index'
+import type { router } from '../src/main'
+
+test('infers correct input and output type for valibot', () => {
+  expectTypeOf(Link<typeof router, string, '/users/valibot'>)
+    .parameter(0)
+    .toHaveProperty('search')
+    .exclude<boolean | ((...args: ReadonlyArray<any>) => any)>()
+    .toEqualTypeOf<{ search?: string } | undefined>()
+
+  expectTypeOf(ValibotRoute.useSearch()).toEqualTypeOf<{ search: string }>()
+})
diff --git a/examples/react/search-validator-adapters/tests/valibot.test.tsx b/examples/react/search-validator-adapters/tests/valibot.test.tsx
new file mode 100644
index 000000000..19350145c
--- /dev/null
+++ b/examples/react/search-validator-adapters/tests/valibot.test.tsx
@@ -0,0 +1,61 @@
+import { fireEvent, render, screen } from '@testing-library/react'
+import { expect, test } from 'vitest'
+import {
+  Link,
+  RouterProvider,
+  createRootRoute,
+  createRoute,
+  createRouter,
+} from '@tanstack/react-router'
+import * as v from 'valibot'
+import '@testing-library/jest-dom/vitest'
+
+test('can navigate to the route', async () => {
+  const rootRoute = createRootRoute()
+
+  const indexRoute = createRoute({
+    getParentRoute: () => rootRoute,
+    path: '/',
+    component: () => <Link to="/users/valibot">Valibot</Link>,
+  })
+
+  const Valibot = () => {
+    const { search } = valibotRoute.useSearch()
+
+    return (
+      <div>
+        <div>{search}</div>
+        <Link from="/users/valibot" search={{ search: 'updated' }}>
+          Update
+        </Link>
+      </div>
+    )
+  }
+
+  const valibotRoute = createRoute({
+    getParentRoute: () => rootRoute,
+    path: '/users/valibot',
+    validateSearch: v.object({
+      search: v.optional(v.string(), 'default'),
+    }),
+    component: Valibot,
+  })
+
+  const routeTree = rootRoute.addChildren([indexRoute, valibotRoute])
+
+  const router = createRouter({ routeTree })
+
+  render(<RouterProvider router={router as any} />)
+
+  const link = await screen.findByText('Valibot')
+
+  fireEvent.click(link)
+
+  expect(await screen.findByText('default')).toBeInTheDocument()
+
+  const updateLink = await screen.findByText('Update')
+
+  fireEvent.click(updateLink)
+
+  expect(await screen.findByText('updated')).toBeInTheDocument()
+})
diff --git a/packages/react-router/tests/errorComponent.test.tsx b/packages/react-router/tests/errorComponent.test.tsx
new file mode 100644
index 000000000..ccb9be1d4
--- /dev/null
+++ b/packages/react-router/tests/errorComponent.test.tsx
@@ -0,0 +1,131 @@
+import { afterEach, describe, expect, test, vi } from 'vitest'
+import { cleanup, fireEvent, render, screen } from '@testing-library/react'
+
+import {
+  Link,
+  RouterProvider,
+  createRootRoute,
+  createRoute,
+  createRouter,
+} from '../src'
+import type { ErrorComponentProps } from '../src'
+
+function MyErrorComponent(props: ErrorComponentProps) {
+  return <div>Error: {props.error.message}</div>
+}
+
+async function asyncToThrowFn() {
+  await new Promise((resolve) => setTimeout(resolve, 500))
+  throw new Error('error thrown')
+}
+
+function throwFn() {
+  throw new Error('error thrown')
+}
+
+afterEach(() => {
+  vi.resetAllMocks()
+  window.history.replaceState(null, 'root', '/')
+  cleanup()
+})
+
+describe.each([{ preload: false }, { preload: 'intent' }] as const)(
+  'errorComponent is rendered when the preload=$preload',
+  (options) => {
+    describe.each([true, false])('with async=%s', (isAsync) => {
+      const throwableFn = isAsync ? asyncToThrowFn : throwFn
+
+      const callers = [
+        { caller: 'beforeLoad', testFn: throwableFn },
+        { caller: 'loader', testFn: throwableFn },
+      ]
+
+      test.each(callers)(
+        'an Error is thrown on navigate in the route $caller function',
+        async ({ caller, testFn }) => {
+          const rootRoute = createRootRoute()
+          const indexRoute = createRoute({
+            getParentRoute: () => rootRoute,
+            path: '/',
+            component: function Home() {
+              return (
+                <div>
+                  <Link to="/about">link to about</Link>
+                </div>
+              )
+            },
+          })
+          const aboutRoute = createRoute({
+            getParentRoute: () => rootRoute,
+            path: '/about',
+            beforeLoad: caller === 'beforeLoad' ? testFn : undefined,
+            loader: caller === 'loader' ? testFn : undefined,
+            component: function Home() {
+              return <div>About route content</div>
+            },
+            errorComponent: MyErrorComponent,
+          })
+
+          const routeTree = rootRoute.addChildren([indexRoute, aboutRoute])
+
+          const router = createRouter({
+            routeTree,
+            defaultPreload: options.preload,
+          })
+
+          render(<RouterProvider router={router} />)
+
+          const linkToAbout = await screen.findByRole('link', {
+            name: 'link to about',
+          })
+
+          expect(linkToAbout).toBeInTheDocument()
+          fireEvent.mouseOver(linkToAbout)
+          fireEvent.click(linkToAbout)
+
+          const errorComponent = await screen.findByText(
+            `Error: error thrown`,
+            undefined,
+            { timeout: 750 },
+          )
+          expect(screen.findByText('About route content')).rejects.toThrow()
+          expect(errorComponent).toBeInTheDocument()
+        },
+      )
+
+      test.each(callers)(
+        'an Error is thrown on first load in the route $caller function',
+        async ({ caller, testFn }) => {
+          const rootRoute = createRootRoute()
+          const indexRoute = createRoute({
+            getParentRoute: () => rootRoute,
+            path: '/',
+            beforeLoad: caller === 'beforeLoad' ? testFn : undefined,
+            loader: caller === 'loader' ? testFn : undefined,
+            component: function Home() {
+              return <div>Index route content</div>
+            },
+            errorComponent: MyErrorComponent,
+          })
+
+          const routeTree = rootRoute.addChildren([indexRoute])
+
+          const router = createRouter({
+            routeTree,
+            defaultPreload: options.preload,
+          })
+
+          render(<RouterProvider router={router} />)
+
+          const errorComponent = await screen.findByText(
+            `Error: error thrown`,
+            undefined,
+            { timeout: 750 },
+          )
+          expect(screen.findByText('Index route content')).rejects.toThrow()
+          expect(errorComponent).toBeInTheDocument()
+        },
+      )
+    })
+  },
+)
diff --git a/packages/react-router/tests/loaders.test.tsx b/packages/react-router/tests/loaders.test.tsx
index 0ca852044..5f25c8a89 100644
--- a/packages/react-router/tests/loaders.test.tsx
+++ b/packages/react-router/tests/loaders.test.tsx
@@ -224,3 +224,101 @@ test('reproducer for #2053', async () => {
   const fooElement = await screen.findByText('fooId: 3ΚΑΠΠΑ')
   expect(fooElement).toBeInTheDocument()
 })
+
+test('reproducer for #2198 - throw error from beforeLoad upon initial load', async () => {
+  const rootRoute = createRootRoute({})
+
+  const indexRoute = createRoute({
+    getParentRoute: () => rootRoute,
+    path: '/',
+    component: () => <div>Index page</div>,
+    beforeLoad: () => {
+      throw new Error('Test!')
+    },
+    errorComponent: () => <div>indexErrorComponent</div>,
+  })
+
+  const routeTree = rootRoute.addChildren([indexRoute])
+  const router = createRouter({
+    routeTree,
+    defaultErrorComponent: () => {
+      return <div>defaultErrorComponent</div>
+    },
+  })
+
+  render(<RouterProvider router={router} />)
+
+  const errorElement = await screen.findByText('indexErrorComponent')
+  expect(errorElement).toBeInTheDocument()
+})
+
+test('throw error from loader upon initial load', async () => {
+  const rootRoute = createRootRoute({})
+
+  const indexRoute = createRoute({
+    getParentRoute: () => rootRoute,
+    path: '/',
+    component: () => <div>Index page</div>,
+    loader: () => {
+      throw new Error('Test!')
+    },
+    errorComponent: () => <div>indexErrorComponent</div>,
+  })
+
+  const routeTree = rootRoute.addChildren([indexRoute])
+  const router = createRouter({
+    routeTree,
+    defaultErrorComponent: () => {
+      return <div>defaultErrorComponent</div>
+    },
+  })
+
+  render(<RouterProvider router={router} />)
+
+  const errorElement = await screen.findByText('indexErrorComponent')
+  expect(errorElement).toBeInTheDocument()
+})
+
+test('throw error from beforeLoad when navigating to route', async () => {
+  const rootRoute = createRootRoute({})
+
+  const indexRoute = createRoute({
+    getParentRoute: () => rootRoute,
+    path: '/',
+    component: () => (
+      <div>
+        <h1>Index page</h1> <Link to="/foo">link to foo</Link>
+      </div>
+    ),
+    errorComponent: () => <div>indexErrorComponent</div>,
+  })
+
+  const fooRoute = createRoute({
+    getParentRoute: () => rootRoute,
+    path: '/foo',
+    component: () => <div>Foo page</div>,
+    beforeLoad: () => {
+      throw new Error('Test!')
+    },
+    errorComponent: () => <div>fooErrorComponent</div>,
+  })
+
+  const routeTree = rootRoute.addChildren([indexRoute, fooRoute])
+  const router = createRouter({
+    routeTree,
+    defaultErrorComponent: () => {
+      return <div>defaultErrorComponent</div>
+    },
+  })
+
+  render(<RouterProvider router={router} />)
+
+  const linkToFoo = await screen.findByRole('link', { name: 'link to foo' })
+
+  expect(linkToFoo).toBeInTheDocument()
+
+  fireEvent.click(linkToFoo)
+
+  const indexElement = await screen.findByText('fooErrorComponent')
+  expect(indexElement).toBeInTheDocument()
+})
diff --git a/packages/react-router/tests/redirect.test.tsx b/packages/react-router/tests/redirect.test.tsx
index fccd856d5..895bb33bc 100644
--- a/packages/react-router/tests/redirect.test.tsx
+++ b/packages/react-router/tests/redirect.test.tsx
@@ -16,6 +16,7 @@ import {
   createRoute,
   createRouter,
   redirect,
+  useRouter,
 } from '../src'
 
 import { sleep } from './utils'
@@ -178,6 +179,79 @@ describe('redirect', () => {
       expect(nestedLoaderMock).toHaveBeenCalled()
       expect(nestedFooLoaderMock).toHaveBeenCalled()
     })
+
+    test('when `redirect` is thrown in `loader` after `router.invalidate()`', async () => {
+      let shouldRedirect = false
+
+      const rootRoute = createRootRoute({})
+      const indexRoute = createRoute({
+        getParentRoute: () => rootRoute,
+        path: '/',
+        component: () => {
+          return (
+            <div>
+              <h1>Index page</h1>
+              <Link data-testid="link-to-about" to="/about">
+                link to about
+              </Link>
+            </div>
+          )
+        },
+      })
+      const aboutRoute = createRoute({
+        getParentRoute: () => rootRoute,
+        path: '/about',
+        loader: async () => {
+          await sleep(WAIT_TIME)
+          if (shouldRedirect) {
+            throw redirect({
+              to: '/final',
+            })
+          }
+        },
+        component: () => {
+          const router = useRouter()
+          return (
+            <button
+              data-testid="button-invalidate"
+              onClick={() => {
+                shouldRedirect = true
+                router.invalidate()
+              }}
+            >
+              invalidate
+            </button>
+          )
+        },
+      })
+      const finalRoute = createRoute({
+        getParentRoute: () => rootRoute,
+        path: '/final',
+        component: () => <div>Final</div>,
+      })
+
+      const routeTree = rootRoute.addChildren([
+        aboutRoute,
+        indexRoute,
+        finalRoute,
+      ])
+      const router = createRouter({ routeTree })
+
+      render(<RouterProvider router={router} />)
+
+      const linkToAbout = await screen.findByTestId('link-to-about')
+      expect(linkToAbout).toBeInTheDocument()
+
+      fireEvent.click(linkToAbout)
+
+      const invalidateButton = await screen.findByTestId('button-invalidate')
+      expect(invalidateButton).toBeInTheDocument()
+
+      fireEvent.click(invalidateButton)
+
+      expect(await screen.findByText('Final')).toBeInTheDocument()
+      expect(window.location.pathname).toBe('/final')
+    })
   })
 
   describe('SSR', () => {