diff --git a/.changeset/pre.json b/.changeset/pre.json index fee786662b..89df4eb7ff 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -36,5 +36,19 @@ "@playground/split-route-modules-spa": "0.0.0", "@playground/vite-plugin-cloudflare": "0.0.0" }, - "changesets": [] + "changesets": [ + "bright-brooms-hammer", + "dull-moons-share", + "fluffy-walls-add", + "long-brooms-shake", + "olive-planets-think", + "real-chairs-exercise", + "rotten-grapes-cough", + "shiny-pans-admire", + "six-ways-carry", + "spicy-camels-love", + "stabilize-split-route-modules", + "stabilize-vite-environment-api", + "witty-ears-itch" + ] } diff --git a/packages/create-react-router/CHANGELOG.md b/packages/create-react-router/CHANGELOG.md index 63d3b8db2c..339d6d5be6 100644 --- a/packages/create-react-router/CHANGELOG.md +++ b/packages/create-react-router/CHANGELOG.md @@ -1,5 +1,7 @@ # `create-react-router` +## 7.10.0-pre.0 + ## 7.9.6 ## 7.9.5 diff --git a/packages/create-react-router/package.json b/packages/create-react-router/package.json index ed7d0dd395..5bde21f2a3 100644 --- a/packages/create-react-router/package.json +++ b/packages/create-react-router/package.json @@ -1,6 +1,6 @@ { "name": "create-react-router", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "Create a new React Router app", "homepage": "https://reactrouter.com", "bugs": { diff --git a/packages/react-router-architect/CHANGELOG.md b/packages/react-router-architect/CHANGELOG.md index f6b1fb787e..c2d5fac5c4 100644 --- a/packages/react-router-architect/CHANGELOG.md +++ b/packages/react-router-architect/CHANGELOG.md @@ -1,5 +1,13 @@ # `@react-router/architect` +## 7.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `react-router@7.10.0-pre.0` + - `@react-router/node@7.10.0-pre.0` + ## 7.9.6 ### Patch Changes diff --git a/packages/react-router-architect/package.json b/packages/react-router-architect/package.json index d601a6490a..199ac733c8 100644 --- a/packages/react-router-architect/package.json +++ b/packages/react-router-architect/package.json @@ -1,6 +1,6 @@ { "name": "@react-router/architect", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "Architect server request handler for React Router", "bugs": { "url": "https://github.com/remix-run/react-router/issues" diff --git a/packages/react-router-cloudflare/CHANGELOG.md b/packages/react-router-cloudflare/CHANGELOG.md index 6f5e17e31d..e5856f89ff 100644 --- a/packages/react-router-cloudflare/CHANGELOG.md +++ b/packages/react-router-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # `@react-router/cloudflare` +## 7.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `react-router@7.10.0-pre.0` + ## 7.9.6 ### Patch Changes diff --git a/packages/react-router-cloudflare/package.json b/packages/react-router-cloudflare/package.json index cc76b85833..f6cfbce655 100644 --- a/packages/react-router-cloudflare/package.json +++ b/packages/react-router-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@react-router/cloudflare", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "Cloudflare platform abstractions for React Router", "bugs": { "url": "https://github.com/remix-run/react-router/issues" diff --git a/packages/react-router-dev/CHANGELOG.md b/packages/react-router-dev/CHANGELOG.md index b1de0a997f..914c1e481c 100644 --- a/packages/react-router-dev/CHANGELOG.md +++ b/packages/react-router-dev/CHANGELOG.md @@ -1,5 +1,43 @@ # `@react-router/dev` +## 7.10.0-pre.0 + +### Minor Changes + +- Stabilize `future.v8_splitRouteModules`, replacing `future.unstable_splitRouteModules` ([#14595](https://github.com/remix-run/react-router/pull/14595)) + - ⚠️ This is a breaking change if you have begun using `future.unstable_splitRouteModules`. Please update your `react-router.config.ts`. + +- Stabilize `future.v8_viteEnvironmentApi`, replacing `future.unstable_viteEnvironmentApi` ([#14595](https://github.com/remix-run/react-router/pull/14595)) + - ⚠️ This is a breaking change if you have begun using `future.unstable_viteEnvironmentApi`. Please update your `react-router.config.ts`. + +### Patch Changes + +- Load environment variables before evaluating `routes.ts` ([#14446](https://github.com/remix-run/react-router/pull/14446)) + + For example, you can now compute your routes based on [`VITE_`-prefixed environment variables](https://vite.dev/guide/env-and-mode#env-variables): + + ```txt + # .env + VITE_ENV_ROUTE=my-route + ``` + + ```ts + // app/routes.ts + import { type RouteConfig, route } from "@react-router/dev/routes"; + + const routes: RouteConfig = []; + if (import.meta.env.VITE_ENV_ROUTE === "my-route") { + routes.push(route("my-route", "routes/my-route.tsx")); + } + + export default routes; + ``` + +- Updated dependencies: + - `react-router@7.10.0-pre.0` + - `@react-router/node@7.10.0-pre.0` + - `@react-router/serve@7.10.0-pre.0` + ## 7.9.6 ### Patch Changes diff --git a/packages/react-router-dev/package.json b/packages/react-router-dev/package.json index c2809b6bb1..8ca435d66f 100644 --- a/packages/react-router-dev/package.json +++ b/packages/react-router-dev/package.json @@ -1,6 +1,6 @@ { "name": "@react-router/dev", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "Dev tools and CLI for React Router", "homepage": "https://reactrouter.com", "bugs": { diff --git a/packages/react-router-dom/CHANGELOG.md b/packages/react-router-dom/CHANGELOG.md index 22dd6901b7..b6a5bfc8b7 100644 --- a/packages/react-router-dom/CHANGELOG.md +++ b/packages/react-router-dom/CHANGELOG.md @@ -1,5 +1,12 @@ # react-router-dom +## 7.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `react-router@7.10.0-pre.0` + ## 7.9.6 ### Patch Changes diff --git a/packages/react-router-dom/package.json b/packages/react-router-dom/package.json index d6069e7a31..d83809c197 100644 --- a/packages/react-router-dom/package.json +++ b/packages/react-router-dom/package.json @@ -1,6 +1,6 @@ { "name": "react-router-dom", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "Declarative routing for React web applications", "keywords": [ "react", diff --git a/packages/react-router-express/CHANGELOG.md b/packages/react-router-express/CHANGELOG.md index abaf647d62..872817b7ef 100644 --- a/packages/react-router-express/CHANGELOG.md +++ b/packages/react-router-express/CHANGELOG.md @@ -1,5 +1,13 @@ # `@react-router/express` +## 7.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `react-router@7.10.0-pre.0` + - `@react-router/node@7.10.0-pre.0` + ## 7.9.6 ### Patch Changes diff --git a/packages/react-router-express/package.json b/packages/react-router-express/package.json index 11b666ae17..f02f23da91 100644 --- a/packages/react-router-express/package.json +++ b/packages/react-router-express/package.json @@ -1,6 +1,6 @@ { "name": "@react-router/express", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "Express server request handler for React Router", "bugs": { "url": "https://github.com/remix-run/react-router/issues" diff --git a/packages/react-router-fs-routes/CHANGELOG.md b/packages/react-router-fs-routes/CHANGELOG.md index 88365788e9..9d993b41b5 100644 --- a/packages/react-router-fs-routes/CHANGELOG.md +++ b/packages/react-router-fs-routes/CHANGELOG.md @@ -1,5 +1,12 @@ # `@react-router/fs-routes` +## 7.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@react-router/dev@7.10.0-pre.0` + ## 7.9.6 ### Patch Changes diff --git a/packages/react-router-fs-routes/package.json b/packages/react-router-fs-routes/package.json index 67e41e4f32..1cd336c747 100644 --- a/packages/react-router-fs-routes/package.json +++ b/packages/react-router-fs-routes/package.json @@ -1,6 +1,6 @@ { "name": "@react-router/fs-routes", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "File system routing conventions for React Router, for use within routes.ts", "bugs": { "url": "https://github.com/remix-run/react-router/issues" diff --git a/packages/react-router-node/CHANGELOG.md b/packages/react-router-node/CHANGELOG.md index 0aee07f18b..41b5b55ad4 100644 --- a/packages/react-router-node/CHANGELOG.md +++ b/packages/react-router-node/CHANGELOG.md @@ -1,5 +1,12 @@ # `@react-router/node` +## 7.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `react-router@7.10.0-pre.0` + ## 7.9.6 ### Patch Changes diff --git a/packages/react-router-node/package.json b/packages/react-router-node/package.json index 8d5b92de8c..dd685283be 100644 --- a/packages/react-router-node/package.json +++ b/packages/react-router-node/package.json @@ -1,6 +1,6 @@ { "name": "@react-router/node", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "Node.js platform abstractions for React Router", "bugs": { "url": "https://github.com/remix-run/react-router/issues" diff --git a/packages/react-router-remix-routes-option-adapter/CHANGELOG.md b/packages/react-router-remix-routes-option-adapter/CHANGELOG.md index 77677e9ebc..c93c86af13 100644 --- a/packages/react-router-remix-routes-option-adapter/CHANGELOG.md +++ b/packages/react-router-remix-routes-option-adapter/CHANGELOG.md @@ -1,5 +1,12 @@ # `@react-router/remix-config-routes-adapter` +## 7.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@react-router/dev@7.10.0-pre.0` + ## 7.9.6 ### Patch Changes diff --git a/packages/react-router-remix-routes-option-adapter/package.json b/packages/react-router-remix-routes-option-adapter/package.json index 7d6905d7a4..fa020dc96e 100644 --- a/packages/react-router-remix-routes-option-adapter/package.json +++ b/packages/react-router-remix-routes-option-adapter/package.json @@ -1,6 +1,6 @@ { "name": "@react-router/remix-routes-option-adapter", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "Adapter for Remix's \"routes\" config option, for use within routes.ts", "bugs": { "url": "https://github.com/remix-run/react-router/issues" diff --git a/packages/react-router-serve/CHANGELOG.md b/packages/react-router-serve/CHANGELOG.md index 0f905889a2..ccd5326401 100644 --- a/packages/react-router-serve/CHANGELOG.md +++ b/packages/react-router-serve/CHANGELOG.md @@ -1,5 +1,14 @@ # `@react-router/serve` +## 7.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `react-router@7.10.0-pre.0` + - `@react-router/node@7.10.0-pre.0` + - `@react-router/express@7.10.0-pre.0` + ## 7.9.6 ### Patch Changes diff --git a/packages/react-router-serve/package.json b/packages/react-router-serve/package.json index efc2e2be0a..76537e98ba 100644 --- a/packages/react-router-serve/package.json +++ b/packages/react-router-serve/package.json @@ -1,6 +1,6 @@ { "name": "@react-router/serve", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "Production application server for React Router", "bugs": { "url": "https://github.com/remix-run/react-router/issues" diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index 67578b6b9f..f5f50aff3a 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -1,5 +1,73 @@ # `react-router` +## 7.10.0-pre.0 + +### Minor Changes + +- Stabilize `fetcher.reset()` ([#14545](https://github.com/remix-run/react-router/pull/14545)) + - ⚠️ This is a breaking change if you have begun using `fetcher.unstable_reset()` + +- Stabilize the `dataStrategy` `match.shouldRevalidateArgs`/`match.shouldCallHandler()` APIs. ([#14592](https://github.com/remix-run/react-router/pull/14592)) + - The `match.shouldLoad` API is now marked deprecated in favor of these more powerful alternatives + - If you're using this API in a custom `dataStrategy` today, you can swap to the new API at your convenience: + + ```tsx + // Before + const matchesToLoad = matches.filter((m) => m.shouldLoad); + + // After + const matchesToLoad = matches.filter((m) => m.shouldCallHandler()); + ``` + + - `match.shouldRevalidateArgs` is the argument that will be passed to the route `shouldRevaliate` function + - Combined with the parameter accepted by `match.shouldCallHandler`, you can define a custom revalidation behavior for your `dataStrategy`: + + ```tsx + const matchesToLoad = matches.filter((m) => { + const defaultShouldRevalidate = customRevalidationBehavior( + match.shouldRevalidateArgs, + ); + return m.shouldCallHandler(defaultShouldRevalidate); + // The argument here will override the internal `defaultShouldRevalidate` value + }); + ``` + +### Patch Changes + +- Fix a Framework Mode bug where the `defaultShouldRevalidate` parameter to `shouldRevalidate` would not be correct after `action` returned a 4xx/5xx response (`true` when it should have been `false`) ([#14592](https://github.com/remix-run/react-router/pull/14592)) + - If your `shouldRevalidate` function relied on that parameter, you may have seen unintended revalidations + +- Fix `fetcher.submit` failing with plain objects containing a `tagName` property ([#14534](https://github.com/remix-run/react-router/pull/14534)) +- [UNSTABLE] Add `unstable_pattern` to the parameters for client side `unstable_onError`, refactor how it's called by `RouterProvider` to avoid potential strict mode issues ([#14573](https://github.com/remix-run/react-router/pull/14573)) +- Add new `unstable_useTransitions` flag to routers to give users control over the usage of [`React.startTransition`](https://react.dev/reference/react/startTransition) and [`React.useOptimistic`](https://react.dev/reference/react/useOptimistic). ([#14524](https://github.com/remix-run/react-router/pull/14524)) + - Framework Mode + Data Mode: + - ``/`` + - When left unset (current default behavior) + - Router state updates are wrapped in `React.startTransition` + - ⚠️ This can lead to buggy behaviors if you are wrapping your own navigations/fetchers in `React.startTransition` + - You should set the flag to `true` if you run into this scenario to get the enhanced `useOptimistic` behavior (requires React 19) + - When set to `true` + - Router state updates remain wrapped in `React.startTransition` (as they are without the flag) + - `Link`/`Form` navigations will be wrapped in `React.startTransition` + - A subset of router state info will be surfaced to the UI _during_ navigations via `React.useOptimistic` (i.e., `useNavigation()`, `useFetchers()`, etc.) + - ⚠️ This is a React 19 API so you must also be React 19 to opt into this flag for Framework/Data Mode + - When set to `false` + - The router will not leverage `React.startTransition` or `React.useOptimistic` on any navigations or state changes + - Declarative Mode + - `` + - When left unset + - Router state updates are wrapped in `React.startTransition` + - When set to `true` + - Router state updates remain wrapped in `React.startTransition` (as they are without the flag) + - `Link`/`Form` navigations will be wrapped in `React.startTransition` + - When set to `false` + - the router will not leverage `React.startTransition` on any navigations or state changes + +- Fix the promise returned from `useNavigate` in Framework/Data Mode so that it properly tracks the duration of `popstate` navigations (i.e., `navigate(-1)`) ([#14524](https://github.com/remix-run/react-router/pull/14524)) +- Fix internal type error in useRoute types that surfaces when skipLibCheck is disabled ([#14577](https://github.com/remix-run/react-router/pull/14577)) +- Preserve `statusText` on the `ErrorResponse` instance when throwing `data()` from a route handler ([#14555](https://github.com/remix-run/react-router/pull/14555)) +- Optimize href() to avoid backtracking regex on splat ([#14329](https://github.com/remix-run/react-router/pull/14329)) + ## 7.9.6 ### Patch Changes diff --git a/packages/react-router/package.json b/packages/react-router/package.json index ccc90824d3..ad36afd465 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "react-router", - "version": "7.9.6", + "version": "7.10.0-pre.0", "description": "Declarative routing for React", "keywords": [ "react",