@tanstack/router-devtools-core@1.168.1
Immutable
release. Only release title and notes can be modified.
Patch Changes
-
#7805
45c4ad8- Rewrite match loading around a lane-based scheduler that tracks each navigation, preload, and background reload as an ordered unit of work. This fixes pending/redirect/retry state leaking between overlapping navigations, restores correct SSR status codes for redirects, errors, and not-found responses, and closes hydration gaps where the client re-ran work the server had already completed.- Invalidation now retires matching active preloads so older speculative loader results cannot become fresh cache data after invalidation.
- Route
headers()now only runs on the server, matching the documented behavior — it is no longer invoked during client-side asset projection. - The documented default
gcTimeandpreloadGcTimenow match the existing runtime default of 5 minutes (300_000).
Removed / changed exported internals
RouterStateno longer includesloadedAt,isTransitioning,statusCode, orredirect. Usematch.updatedAtin place ofloadedAt; subscribe torouter.state.status/router.state.isLoadingin place ofisTransitioning; server response status and redirect handling are now internal to the server loader and are no longer exposed onrouter.state.RouteMatch.fetchCounthas been removed, with no replacement — it was purely informational.RouteMatch.statusno longer includes'redirected'(it remains'pending' | 'success' | 'error' | 'notFound') — redirected matches are dropped from the match list instead of being rendered.RouteMatch.globalNotFoundhas been renamed and privatized to the internal_notFoundfield. Usematch.status === 'notFound'instead.- The exported React, Solid, and Vue
Matchcomponents now acceptrouteIdinstead ofmatchId. - The exported
RouterStoresadapter contract now uses route-keyed presentation stores:matchesIdis replaced byids,matchStoresbybyRoute, andgetRouteMatchStore()bygetMatchStore(). The separateloadedAt,isLoading,isTransitioning,statusCode, andredirectstores have been removed, along with the pending/cache stores and their setters.StoreConfig.inithas also been removed. Read application-facing state fromrouter.state; preload and cache coordination are now internal. - Removed
RouterCoremembersgetMatch(),updateMatch(),cancelMatch(), andcancelMatches()— read matches fromrouter.state.matches(e.g.router.state.matches.find((m) => m.id === id)); there is no replacement for mutating or cancelling an individual in-flight match from outside the router. - Removed
RouterCore.hasNotFoundMatch()— userouter.state.matches.some((m) => m.status === 'notFound'). - Removed
RouterCore.looseRoutesById— useroutesById. - Removed
RouterCore.isPrerendering(),RouterCore.isViewTransitionTypesSupported, andRouterCore.viewTransitionPromise, with no replacement. - Removed
RouterCore.getParsedLocationHref()andRouterCore.clearExpiredCache(), with no replacement — expired cache entries are now reconciled automatically as part of match commit. - Removed
RouterCore.latestLoadPromiseandRouterCore.beforeLoad(), with no replacement. RouterCore.commitLocationPromiseandRouterCore.pendingBuiltLocationhave been replaced by the internal_commitPromiseand_pendingLocationfields.- Removed the exported
GetMatchFnandUpdateMatchFntypes, along with the methods they typed. - Removed the standalone
getMatchedRoutes()export from@tanstack/router-core— use therouter.getMatchedRoutes()instance method instead. RouterCore.loadRouteChunk()no longer accepts an array of component types as its second argument. One-argument usage is unchanged; the optional second argument is now'errorComponent','notFoundComponent', orfalsefor internal boundary loading.- Removed
Redirect.redirectHandled, which was internal redirect bookkeeping. MatchRoutesOpts.preloadandMatchRoutesOpts.desthave been removed.StartTransitionFnis now(fn, expected) => Promise<boolean>(previously(fn) => void). This only affects custom framework adapters that implementstartTransition.
-
Updated dependencies [
45c4ad8]:- @tanstack/router-core@1.171.16