chore(react-router): Update dependency react-router to v7.5.0 #5682
+6
−6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
7.1.5
->7.5.0
Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
remix-run/react-router (react-router)
v7.5.0
Compare Source
Minor Changes
Add granular object-based API for
route.lazy
to support lazy loading of individual route properties, for example: (#13294)Breaking change for
route.unstable_lazyMiddleware
consumersThe
route.unstable_lazyMiddleware
property is no longer supported. If you want to lazily load middleware, you must use the new object-basedroute.lazy
API withroute.lazy.unstable_middleware
, for example:Patch Changes
unstable_subResourceIntegrity
future flag that enables generation of an importmap with integrity for the scripts that will be loaded by the browser. (#13163)v7.4.1
Compare Source
Patch Changes
Fix types on
unstable_MiddlewareFunction
to avoid type errors when a middleware doesn't return a value (#13311)Dedupe calls to
route.lazy
functions (#13260)Add support for
route.unstable_lazyMiddleware
function to allow lazy loading of middleware logic. (#13210)Breaking change for
unstable_middleware
consumersThe
route.unstable_middleware
property is no longer supported in the return value fromroute.lazy
. If you want to lazily load middleware, you must useroute.unstable_lazyMiddleware
.v7.4.0
Compare Source
Patch Changes
shouldRevalidate
behavior forclientLoader
-only routes inssr:true
apps (#13221)RequestHandler
loadContext
parameter type when middleware is enabled (#13204)Route.unstable_MiddlewareFunction
to have a return value ofResponse | undefined
instead ofResponse | void
becaue you should not return anything if you aren't returning theResponse
(#13199)next()
and are no longer leaking theMiddlewareError
implementation detail (#13180)v7.3.0
Compare Source
Minor Changes
Add
fetcherKey
as a parameter topatchRoutesOnNavigation
(#13061)fetcher
calls to undiscovered routes, this mismatch will trigger a document reload of the current pathPatch Changes
Skip resource route flow in dev server in SPA mode (#13113)
Support middleware on routes (unstable) (#12941)
Middleware is implemented behind a
future.unstable_middleware
flag. To enable, you must enable the flag and the types in yourreact-router-config.ts
file:clientMiddleware
that we will be addressing this before a stable release.context
parameter passed to yourloader
/action
functions - see below for more information.Once enabled, routes can define an array of middleware functions that will run sequentially before route handlers run. These functions accept the same parameters as
loader
/action
plus an additionalnext
parameter to run the remaining data pipeline. This allows middlewares to perform logic before and after handlers execute.Here's a simple example of a client-side logging middleware that can be placed on the root route:
Note that in the above example, the
next
/middleware
functions don't return anything. This is by design as on the client there is no "response" to send over the network like there would be for middlewares running on the server. The data is all handled behind the scenes by the statefulrouter
.For a server-side middleware, the
next
function will return the HTTPResponse
that React Router will be sending across the wire, thus giving you a chance to make changes as needed. You may throw a new response to short circuit and respond immediately, or you may return a new or altered response to override the default returned bynext()
.You can throw a
redirect
from a middleware to short circuit any remaining processing:Note that in cases like this where you don't need to do any post-processing you don't need to call the
next
function or return aResponse
.Here's another example of using a server middleware to detect 404s and check the CMS for a redirect:
context
parameterWhen middleware is enabled, your application will use a different type of
context
parameter in your loaders and actions to provide better type safety. Instead ofAppLoadContext
,context
will now be an instance ofContextProvider
that you can use with type-safe contexts (similar toReact.createContext
):If you are using a custom server with a
getLoadContext
function, the return value for initial context values passed from the server adapter layer is no longer an object and should now return anunstable_InitialContext
(Map<RouterContext, unknown>
):Fix types for loaderData and actionData that contained
Record
s (#13139)UNSTABLE(BREAKING):
unstable_SerializesTo
added a way to register custom serialization types in Single Fetch for other library and framework authors like Apollo.It was implemented with branded type whose branded property that was made optional so that casting arbitrary values was easy:
However, this broke type inference in
loaderData
andactionData
for anyRecord
types as those would now (incorrectly) matchunstable_SerializesTo
.This affected all users, not just those that depended on
unstable_SerializesTo
.To fix this, the branded property of
unstable_SerializesTo
is marked as required instead of optional.For library and framework authors using
unstable_SerializesTo
, you may need to addas unknown
casts before casting tounstable_SerializesTo
.[REMOVE] Remove middleware depth logic and always call middlware for all matches (#13172)
Fix single fetch
_root.data
requests when abasename
is used (#12898)Add
context
support to client side data routers (unstable) (#12941)Your application
loader
andaction
functions on the client will now receive acontext
parameter. This is an instance ofunstable_RouterContextProvider
that you use with type-safe contexts (similar toReact.createContext
) and is most useful with the correspondingmiddleware
/clientMiddleware
API's:Similar to server-side requests, a fresh
context
will be created per navigation (orfetcher
call). If you have initial data you'd like to populate in the context for every request, you can provide anunstable_getContext
function at the root of your app:createBrowserRouter(routes, { unstable_getContext })
<HydratedRouter unstable_getContext>
This function should return an value of type
unstable_InitialContext
which is aMap<unstable_RouterContext, unknown>
of context's and initial values:v7.2.0
Compare Source
Minor Changes
New type-safe
href
utility that guarantees links point to actual paths in your app (#13012)Patch Changes
Fix typegen for repeated params (#13012)
In React Router, path parameters are keyed by their name.
So for a path pattern like
/a/:id/b/:id?/c/:id
, the last:id
will set the value forid
inuseParams
and theparams
prop.For example,
/a/1/b/2/c/3
will result in the value{ id: 3 }
at runtime.Previously, generated types for params incorrectly modeled repeated params with an array.
So
/a/1/b/2/c/3
generated a type like{ id: [1,2,3] }
.To be consistent with runtime behavior, the generated types now correctly model the "last one wins" semantics of path parameters.
So
/a/1/b/2/c/3
now generates a type like{ id: 3 }
.Don't apply Single Fetch revalidation de-optimization when in SPA mode since there is no server HTTP request (#12948)
Properly handle revalidations to across a prerender/SPA boundary (#13021)
.data
requests if the path wasn't pre-rendered because the request will 404loader
data inssr:false
mode is static because it's generated at build timeclientLoader
to do anything dynamicloader
and not aclientLoader
, we disable revalidation by default because there is no new data to retrieve.data
request logic if there are no server loaders withshouldLoad=true
in our single fetchdataStrategy
.data
request that would 404 after a submissionError at build time in
ssr:false
+prerender
apps for the edge case scenario of: (#13021)loader
(does not have aclientLoader
)loaderData
because there is no server on which to run theloader
clientLoader
or pre-rendering the child pathsclientLoader
, calling theserverLoader()
on non-prerendered paths will throw a 404Add unstable support for splitting route modules in framework mode via
future.unstable_splitRouteModules
(#11871)Add
unstable_SerializesTo
brand type for library authors to register types serializable by React Router's streaming format (turbo-stream
) (ab5b05b02
)Align dev server behavior with static file server behavior when
ssr:false
is set (#12948)prerender
config exists, only SSR down to the rootHydrateFallback
(SPA Mode)prerender
config exists but the current path is not prerendered, only SSR down to the rootHydrateFallback
(SPA Fallback).data
requests to non-pre-rendered pathsImprove prefetch performance of CSS side effects in framework mode (#12889)
Disable Lazy Route Discovery for all
ssr:false
apps and not just "SPA Mode" because there is no runtime server to serve the search-param-configured__manifest
requests (#12894)ssr:false
and noprerender
config but we realized it should apply to allssr:false
apps, including those prerendering multiple pagesprerender
scenarios we would prerender the/__manifest
file assuming the static file server would serve it but that makes some unneccesary assumptions about the static file server behaviorsProperly handle interrupted manifest requests in lazy route discovery (#12915)
Configuration
📅 Schedule: Branch creation - "before 7am on the first day of the week" in timezone GMT, Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.