@tanstack/router-core 1.171.15 → 1.171.16-pre.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Matches.cjs.map +1 -1
- package/dist/cjs/Matches.d.cts +3 -12
- package/dist/cjs/await-signal.cjs +21 -0
- package/dist/cjs/await-signal.cjs.map +1 -0
- package/dist/cjs/await-signal.d.cts +1 -0
- package/dist/cjs/index.cjs +3 -1
- package/dist/cjs/index.d.cts +3 -2
- package/dist/cjs/isServer/client.cjs +2 -0
- package/dist/cjs/isServer/client.cjs.map +1 -1
- package/dist/cjs/isServer/client.d.cts +1 -0
- package/dist/cjs/isServer/development.cjs +2 -0
- package/dist/cjs/isServer/development.cjs.map +1 -1
- package/dist/cjs/isServer/development.d.cts +1 -0
- package/dist/cjs/isServer/server.cjs +2 -0
- package/dist/cjs/isServer/server.cjs.map +1 -1
- package/dist/cjs/isServer/server.d.cts +1 -0
- package/dist/cjs/load-client.cjs +1470 -0
- package/dist/cjs/load-client.cjs.map +1 -0
- package/dist/cjs/load-client.d.cts +147 -0
- package/dist/cjs/load-server.cjs +565 -0
- package/dist/cjs/load-server.cjs.map +1 -0
- package/dist/cjs/load-server.d.cts +16 -0
- package/dist/cjs/redirect.cjs.map +1 -1
- package/dist/cjs/redirect.d.cts +0 -1
- package/dist/cjs/route.cjs.map +1 -1
- package/dist/cjs/router.cjs +187 -442
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/cjs/router.d.cts +61 -51
- package/dist/cjs/ssr/client.cjs +2 -2
- package/dist/cjs/ssr/createRequestHandler.cjs +60 -9
- package/dist/cjs/ssr/createRequestHandler.cjs.map +1 -1
- package/dist/cjs/ssr/createRequestHandler.d.cts +1 -0
- package/dist/cjs/ssr/handlerCallback.cjs +49 -4
- package/dist/cjs/ssr/handlerCallback.cjs.map +1 -1
- package/dist/cjs/ssr/handlerCallback.d.cts +3 -0
- package/dist/cjs/ssr/server.cjs +4 -0
- package/dist/cjs/ssr/server.d.cts +2 -2
- package/dist/cjs/ssr/ssr-client.d.cts +1 -10
- package/dist/cjs/ssr/ssr-match-id.cjs +2 -2
- package/dist/cjs/ssr/ssr-match-id.cjs.map +1 -1
- package/dist/cjs/ssr/ssr-server.cjs +6 -6
- package/dist/cjs/ssr/ssr-server.cjs.map +1 -1
- package/dist/cjs/ssr/transformStreamWithRouter.cjs +27 -1
- package/dist/cjs/ssr/transformStreamWithRouter.cjs.map +1 -1
- package/dist/cjs/ssr/transformStreamWithRouter.d.cts +2 -0
- package/dist/cjs/ssr/types.d.cts +0 -1
- package/dist/cjs/stores.cjs +30 -104
- package/dist/cjs/stores.cjs.map +1 -1
- package/dist/cjs/stores.d.cts +7 -32
- package/dist/cjs/utils.cjs +0 -4
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/esm/Matches.d.ts +3 -12
- package/dist/esm/Matches.js.map +1 -1
- package/dist/esm/await-signal.d.ts +1 -0
- package/dist/esm/await-signal.js +21 -0
- package/dist/esm/await-signal.js.map +1 -0
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.js +3 -2
- package/dist/esm/isServer/client.d.ts +1 -0
- package/dist/esm/isServer/client.js +2 -1
- package/dist/esm/isServer/client.js.map +1 -1
- package/dist/esm/isServer/development.d.ts +1 -0
- package/dist/esm/isServer/development.js +2 -1
- package/dist/esm/isServer/development.js.map +1 -1
- package/dist/esm/isServer/server.d.ts +1 -0
- package/dist/esm/isServer/server.js +2 -1
- package/dist/esm/isServer/server.js.map +1 -1
- package/dist/esm/load-client.d.ts +147 -0
- package/dist/esm/load-client.js +1462 -0
- package/dist/esm/load-client.js.map +1 -0
- package/dist/esm/load-server.d.ts +16 -0
- package/dist/esm/load-server.js +565 -0
- package/dist/esm/load-server.js.map +1 -0
- package/dist/esm/redirect.d.ts +0 -1
- package/dist/esm/redirect.js.map +1 -1
- package/dist/esm/route.js.map +1 -1
- package/dist/esm/router.d.ts +61 -51
- package/dist/esm/router.js +188 -444
- package/dist/esm/router.js.map +1 -1
- package/dist/esm/ssr/client.js +1 -1
- package/dist/esm/ssr/createRequestHandler.d.ts +1 -0
- package/dist/esm/ssr/createRequestHandler.js +61 -11
- package/dist/esm/ssr/createRequestHandler.js.map +1 -1
- package/dist/esm/ssr/handlerCallback.d.ts +3 -0
- package/dist/esm/ssr/handlerCallback.js +47 -5
- package/dist/esm/ssr/handlerCallback.js.map +1 -1
- package/dist/esm/ssr/server.d.ts +2 -2
- package/dist/esm/ssr/server.js +3 -3
- package/dist/esm/ssr/ssr-client.d.ts +1 -10
- package/dist/esm/ssr/ssr-match-id.js +2 -2
- package/dist/esm/ssr/ssr-match-id.js.map +1 -1
- package/dist/esm/ssr/ssr-server.js +6 -6
- package/dist/esm/ssr/ssr-server.js.map +1 -1
- package/dist/esm/ssr/transformStreamWithRouter.d.ts +2 -0
- package/dist/esm/ssr/transformStreamWithRouter.js +27 -1
- package/dist/esm/ssr/transformStreamWithRouter.js.map +1 -1
- package/dist/esm/ssr/types.d.ts +0 -1
- package/dist/esm/stores.d.ts +7 -32
- package/dist/esm/stores.js +30 -104
- package/dist/esm/stores.js.map +1 -1
- package/dist/esm/utils.js +1 -4
- package/dist/esm/utils.js.map +1 -1
- package/package.json +3 -3
- package/src/Matches.ts +6 -21
- package/src/await-signal.ts +27 -0
- package/src/index.ts +1 -3
- package/src/isServer/client.ts +1 -0
- package/src/isServer/development.ts +1 -0
- package/src/isServer/server.ts +1 -0
- package/src/load-client.ts +2701 -0
- package/src/load-server.ts +849 -0
- package/src/redirect.ts +0 -1
- package/src/route.ts +2 -11
- package/src/router.ts +379 -769
- package/src/ssr/createRequestHandler.ts +109 -16
- package/src/ssr/handlerCallback.ts +76 -10
- package/src/ssr/server.ts +4 -1
- package/src/ssr/ssr-client.ts +1 -310
- package/src/ssr/ssr-match-id.ts +11 -2
- package/src/ssr/ssr-server.ts +9 -8
- package/src/ssr/transformStreamWithRouter.ts +37 -1
- package/src/ssr/types.ts +0 -1
- package/src/stores.ts +46 -208
- package/dist/cjs/load-matches.cjs +0 -658
- package/dist/cjs/load-matches.cjs.map +0 -1
- package/dist/cjs/load-matches.d.cts +0 -18
- package/dist/cjs/ssr/ssr-client.cjs +0 -183
- package/dist/cjs/ssr/ssr-client.cjs.map +0 -1
- package/dist/esm/load-matches.d.ts +0 -18
- package/dist/esm/load-matches.js +0 -656
- package/dist/esm/load-matches.js.map +0 -1
- package/dist/esm/ssr/ssr-client.js +0 -183
- package/dist/esm/ssr/ssr-client.js.map +0 -1
- package/src/load-matches.ts +0 -1278
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-client.cjs","names":[],"sources":["../../src/load-client.ts"],"sourcesContent":["// Keep this filename free of a secondary extension so declaration generation\n// can rewrite relative imports for both ESM and CJS.\nimport { isNotFound } from './not-found'\nimport { isRedirect } from './redirect'\nimport {\n _getUserHistoryState,\n getLocationChangeInfo,\n runRouteLifecycle,\n} from './router'\nimport { deepEqual } from './utils'\nimport { hydrateSsrMatchId } from './ssr/ssr-match-id'\nimport type { GLOBAL_SEROVAL, GLOBAL_TSR } from './ssr/constants'\nimport type { AnySerializationAdapter } from './ssr/serializer/transformer'\nimport type { TsrSsrGlobal } from './ssr/types'\nimport type { ParsedLocation } from './location'\nimport type { AnyRouteMatch } from './Matches'\nimport type { NotFoundError } from './not-found'\nimport type {\n AnyRoute,\n BeforeLoadContextOptions,\n LoaderFnContext,\n RouteContextOptions,\n RouteLoaderFn,\n} from './route'\nimport type { AnyRedirect } from './redirect'\nimport type { AnyRouter } from './router'\n\ntype RouteComponentType =\n | 'component'\n | 'pendingComponent'\n | 'errorComponent'\n | 'notFoundComponent'\n\nexport function replaceRouteChunk(\n route: AnyRoute,\n lazyFn: AnyRoute['lazyFn'],\n): void {\n route.lazyFn = lazyFn ?? route.lazyFn\n route._lazy = undefined\n}\n\nfunction preloadComponent(\n route: AnyRoute,\n type: RouteComponentType,\n): Promise<void> | undefined {\n return (route.options[type] as any)?.preload?.()\n}\n\nfunction loadComponents(route: AnyRoute): Promise<void> | undefined {\n const component = preloadComponent(route, 'component')\n const pending = preloadComponent(route, 'pendingComponent')\n if (component && pending) {\n return Promise.all([component, pending]).then(() => {})\n }\n return component ?? pending\n}\n\nexport function loadRouteChunk(\n route: AnyRoute,\n // `false` waits only for lazy route options, before a boundary is selected.\n componentType?: 'errorComponent' | 'notFoundComponent' | false,\n): Promise<void> | undefined {\n const afterLazy = () =>\n componentType === false\n ? undefined\n : componentType\n ? preloadComponent(route, componentType)\n : loadComponents(route)\n const current = route._lazy\n if (current) {\n return current === true ? afterLazy() : current.then(afterLazy)\n }\n if (!route.lazyFn) {\n return afterLazy()\n }\n\n const promise = route.lazyFn().then(\n (lazyRoute) => {\n // HMR clears the owner before an obsolete import can settle.\n if (process.env.NODE_ENV === 'production' || route._lazy === promise) {\n const { id: _id, ...options } = lazyRoute.options\n Object.assign(route.options, options)\n route._lazy = true\n }\n },\n (error) => {\n if (process.env.NODE_ENV === 'production' || route._lazy === promise) {\n route._lazy = undefined\n }\n throw error\n },\n )\n route._lazy = promise\n return promise.then(afterLazy)\n}\n\n/** Return the structural lane through the first terminal render boundary. */\nexport function _getRenderedMatches(\n matches: Array<AnyRouteMatch>,\n): Array<AnyRouteMatch> {\n const end =\n matches.findIndex(\n (match) => match.status !== 'success' || match._notFound,\n ) + 1\n return end && end < matches.length ? matches.slice(0, end) : matches\n}\n\n/** Return the lane whose document assets belong to the current presentation. */\nexport function _getAssetMatches(\n matches: Array<AnyRouteMatch>,\n): Array<AnyRouteMatch> {\n let end = matches.length\n for (let index = 0; index < end; index++) {\n const match = matches[index]!\n // `_assetEnd` is only ever set on hydration presentation clones that are\n // `status: 'pending'`, `ssr: 'data-only'`, error-free, and not not-found\n // (see hydrate.ts), and commits clear it — so its presence alone is the guard.\n if (match._assetEnd !== undefined) {\n end = Math.min(end, Math.max(index + 1, match._assetEnd))\n continue\n }\n if (match.status !== 'success' || match._notFound) {\n end = index + 1\n break\n }\n }\n // `end` only ever shrinks to `index + 1 >= 1`, so no zero guard is needed.\n return end < matches.length ? matches.slice(0, end) : matches\n}\n\ndeclare const lanePhase: unique symbol\n\ntype LanePhase = 'matched' | 'contextualized' | 'reduced' | 'projected'\n\n/**\n * Lane matches carry their lane's phase so functions can demand evidence of\n * pipeline position (e.g. `commitMatches` only accepts a projected lane's\n * matches). The brand is phantom — it never exists at runtime.\n */\ntype LaneMatches<TPhase extends LanePhase> = Array<WorkMatch> & {\n readonly [lanePhase]?: TPhase\n}\n\ntype Lane<TPhase extends LanePhase> = [\n location: ParsedLocation,\n matches: LaneMatches<TPhase>,\n background?: Array<BackgroundLoaderTask>,\n backgroundSettlement?: Promise<IndexedOutcome | undefined>,\n] & { readonly [lanePhase]?: TPhase }\n\ntype MatchedLane = Lane<'matched'>\ntype ContextualizedLane = Lane<'contextualized'>\ntype ReducedLane = Lane<'reduced'>\ntype ProjectedLane = Lane<'projected'>\n\nconst SUCCESS = 0\nconst ERROR = 1\nconst NOT_FOUND = 2\n// Control outcomes stay contiguous so the hot path can test them together.\nconst REDIRECTED = 3\nconst CANCELED = 4\n\ntype LoaderOutcome =\n | [typeof SUCCESS, data: unknown]\n | [typeof ERROR, error: unknown]\n | [typeof NOT_FOUND, error: NotFoundError]\n | [typeof REDIRECTED, redirect: AnyRedirect]\n | [typeof CANCELED]\n\ntype IndexedOutcome = [index: number, outcome: LoaderOutcome, boundary?: number]\n\nexport type LoaderFlight = [\n outcome: Promise<LoaderOutcome>,\n controller: AbortController,\n leases: number,\n]\n\ntype WorkMatch = AnyRouteMatch & {\n _flight?: LoaderFlight\n}\n\ndeclare const matchPhase: unique symbol\n\n/**\n * A match whose loader outcome has been applied by `settleInto`, which is the\n * sole granter of this brand (phantom, zero-runtime). Consumers that require\n * it — e.g. `cacheLoaderMatch` — can only be reached after settlement, so the\n * compiler enforces the loader→settle→cache ordering. Sources that arrive\n * already settled (dehydrated server data) must cast at a named boundary.\n */\ntype SettledMatch = WorkMatch & { readonly [matchPhase]: 'settled' }\n\nexport type LaneInputs = [\n routeTree: AnyRoute,\n context: unknown,\n additionalContext: unknown,\n state: object,\n search: object,\n maskedLocation:\n | [\n href: string,\n state: object,\n search: object,\n unmaskOnReload: boolean | undefined,\n ]\n | undefined,\n]\n\nexport type ActivePreload = [\n matches: Array<AnyRouteMatch>,\n controller: AbortController,\n result: Promise<LaneResult>,\n semanticOwner: Array<AnyRouteMatch>,\n inputs: LaneInputs,\n redirects: number,\n]\n\nexport type LoadTransaction = [\n controller: AbortController,\n redirects: number,\n location: ParsedLocation,\n matches: Array<AnyRouteMatch>,\n startedAt: number,\n done: Promise<void>,\n /**\n * Dev-only HMR refresh mode. Presence is the mode flag; a refresh always\n * carries the presentation it started from, while the hydration handoff is\n * genuinely optional — the tuple makes a half-armed refresh unrepresentable.\n */\n refresh?: [\n presentation: Array<AnyRouteMatch>,\n handoff: NonNullable<AnyRouter['_handoff']> | undefined,\n ],\n]\n\nexport type PendingSession = [\n owner: LoadTransaction,\n boundary: number,\n /** Pending reveal time until acknowledged, then minimum-visible-until time. */\n deadline: number,\n timer?: ReturnType<typeof setTimeout>,\n ack?: Promise<boolean>,\n component?: unknown,\n]\n\ntype CoordinatorRouter = AnyRouter & {\n /** Whole speculative lanes that a matching navigation may adopt. */\n _preloads?: Map<string, ActivePreload>\n _refreshNextLoad?: boolean\n _rollbackRefresh?: () => void\n _cancelTransition?: () => void\n}\n\ntype PublicationCheckpoint = {\n previousMatches: Array<AnyRouteMatch>\n previousPresentation: Array<AnyRouteMatch>\n previousCache: Map<string, AnyRouteMatch>\n commitPromise: CoordinatorRouter['_commitPromise']\n published: boolean\n}\n\ntype LoaderTask = [\n index: number,\n outcome: Promise<LoaderOutcome>,\n ready: Promise<IndexedOutcome | undefined>,\n candidate?: WorkMatch,\n]\n\ntype BackgroundLoaderTask = [\n index: number,\n outcome: Promise<LoaderOutcome>,\n ready: Promise<IndexedOutcome | undefined>,\n candidate: WorkMatch,\n]\n\ntype ExecuteLaneOptions = [\n controller: AbortController,\n redirects: number,\n isCurrent: () => boolean,\n base: Array<AnyRouteMatch>,\n preload?: boolean,\n sync?: boolean,\n forceStaleReload?: boolean,\n resolvedPrefix?: number,\n onReady?: () => void,\n]\n\ntype ControlOutcome =\n | [typeof REDIRECTED, redirect: AnyRedirect]\n | [typeof CANCELED]\n\ntype LaneResult = ProjectedLane | ControlOutcome\n\nfunction isControl(\n result: Lane<any> | ControlOutcome,\n): result is ControlOutcome {\n return typeof result[0] === 'number'\n}\n\nexport function waitFor<T>(\n value: T | PromiseLike<T>,\n signal: AbortSignal,\n): Promise<T> {\n if (signal.aborted) {\n return Promise.race([Promise.reject(signal), value])\n }\n return new Promise<T>((resolve, reject) => {\n const abort = () => reject(signal)\n signal.addEventListener('abort', abort, { once: true })\n Promise.resolve(value)\n .then(resolve, reject)\n .finally(() => signal.removeEventListener('abort', abort))\n })\n}\n\nexport function getRoute(router: AnyRouter, match: WorkMatch): AnyRoute {\n return (router.routesById as Record<string, AnyRoute>)[match.routeId]!\n}\n\nfunction normalize(\n value: unknown,\n rejected: boolean,\n routeId?: string,\n): LoaderOutcome {\n if (isRedirect(value)) {\n return [REDIRECTED, value]\n }\n if (isNotFound(value)) {\n value.routeId ||= routeId\n return [NOT_FOUND, value]\n }\n if (rejected && typeof (value as any)?.then === 'function') {\n value = new Error('A Promise was thrown', { cause: value })\n }\n return rejected ? [ERROR, value] : [SUCCESS, value]\n}\n\nfunction normalizeError(route: AnyRoute, cause: unknown): LoaderOutcome {\n let outcome = normalize(cause, true, route.id)\n if (outcome[0] !== ERROR) {\n return outcome\n }\n try {\n route.options.onError?.(outcome[1])\n } catch (onErrorCause) {\n outcome = normalize(onErrorCause, true, route.id)\n }\n return outcome\n}\n\nfunction normalizeLaneError(\n route: AnyRoute,\n cause: unknown,\n options: ExecuteLaneOptions,\n): LoaderOutcome {\n if (options[0].signal.aborted || !options[2]()) {\n options[0].abort()\n return [CANCELED]\n }\n return normalizeError(route, cause)\n}\n\nexport function navigateFrom(router: AnyRouter, location: ParsedLocation) {\n return (opts: any) =>\n router.navigate({\n ...opts,\n _fromLocation: location,\n })\n}\n\nasync function contextualize(\n router: AnyRouter,\n lane: MatchedLane,\n options: ExecuteLaneOptions,\n end: number,\n): Promise<IndexedOutcome | undefined> {\n const [location, matches] = lane\n const signal = options[0].signal\n const preload = !!options[4]\n for (let index = options[7] ?? 0; index < end; index++) {\n const match = matches[index]!\n const route = getRoute(router, match)\n\n match.abortController = options[0]\n // Contextualization is serial, so the previous match already contains the\n // complete parent context for this route.\n const parentContext =\n matches[index - 1]?.context ?? router.options.context ?? {}\n const common = {\n params: match.params,\n location,\n navigate: navigateFrom(router, location),\n buildLocation: router.buildLocation,\n cause: preload ? ('preload' as const) : match.cause,\n abortController: options[0],\n preload,\n matches,\n routeId: route.id,\n }\n let context = parentContext\n try {\n let routeContext = match._ctx\n if (!routeContext && route.options.context) {\n routeContext = match._ctx =\n route.options.context({\n ...common,\n deps: match.loaderDeps,\n context: parentContext,\n } satisfies RouteContextOptions<any, any, any, any, any>) || {}\n }\n context = {\n ...parentContext,\n ...routeContext,\n }\n match.context = context\n } catch (cause) {\n releaseFlight(router, match)\n return [index, normalizeLaneError(route, cause, options)]\n }\n if (signal.aborted || !options[2]()) {\n options[0].abort()\n return [index, [CANCELED]]\n }\n const validationError = match.paramsError ?? match.searchError\n if (validationError !== undefined) {\n releaseFlight(router, match)\n return [index, normalizeLaneError(route, validationError, options)]\n }\n const beforeLoad = route.options.beforeLoad\n if (!beforeLoad) {\n continue\n }\n\n const beforeLoadContext: BeforeLoadContextOptions<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n > = {\n ...common,\n search: match.search,\n context,\n ...router.options.additionalContext,\n }\n\n const previousStatus = match.status\n if (previousStatus === 'success') {\n match.status = 'pending'\n }\n options[8]?.()\n try {\n setFetching(router, match, 'beforeLoad', options[0])\n const result = await waitFor(beforeLoad(beforeLoadContext), signal)\n if (!options[2]()) {\n options[0].abort()\n return [index, [CANCELED]]\n }\n const outcome = normalize(result, false, route.id)\n if (outcome[0] !== SUCCESS) {\n releaseFlight(router, match)\n return [index, outcome]\n }\n match.context = {\n ...context,\n ...result,\n }\n } catch (cause) {\n releaseFlight(router, match)\n return [index, normalizeLaneError(route, cause, options)]\n } finally {\n if (previousStatus === 'success' && match.status === 'pending') {\n match.status = 'success'\n }\n setFetching(router, match, false, options[0])\n }\n }\n\n return\n}\n\nfunction releaseOwnedFlight(\n router: AnyRouter,\n id: string,\n flight?: LoaderFlight,\n): AbortController | undefined {\n if (!flight || --flight[2]) {\n return\n }\n if (router._flights?.get(id) === flight) {\n router._flights.delete(id)\n }\n return flight[1]\n}\n\nfunction releaseFlight(router: AnyRouter, match: WorkMatch): void {\n const flight = match._flight\n match._flight = undefined\n releaseOwnedFlight(router, match.id, flight)?.abort()\n}\nexport function laneInputs(\n router: AnyRouter,\n location: ParsedLocation,\n): LaneInputs {\n const masked = location.maskedLocation\n return [\n router.routeTree,\n router.options.context ?? {},\n router.options.additionalContext,\n _getUserHistoryState(location.state),\n location.search,\n masked && [\n masked.href,\n _getUserHistoryState(masked.state),\n masked.search,\n masked.unmaskOnReload,\n ],\n ]\n}\n\nfunction samePreloadLane(\n preload: ActivePreload,\n router: AnyRouter,\n location: ParsedLocation,\n redirects: number,\n): boolean {\n return (\n preload[3] === router._committed &&\n preload[5] === redirects &&\n deepEqual(preload[4], laneInputs(router, location)) &&\n !preload[0].some(\n (match) => getRoute(router, match as WorkMatch).options.preload === false,\n )\n )\n}\n\n/**\n * Not passing in a `next` ownership recipient\n * is equivalent to discarding the match resources\n */\nexport function transferMatchResources(\n router: AnyRouter,\n previous: Array<AnyRouteMatch>,\n next?: Array<AnyRouteMatch>,\n): void {\n const abort: Array<AbortController> = []\n for (const match of previous as Array<WorkMatch>) {\n if (!next?.includes(match)) {\n const flight = match._flight\n match._flight = undefined\n const controller = releaseOwnedFlight(router, match.id, flight)\n if (controller) {\n abort.push(controller)\n }\n }\n }\n for (const controller of abort) {\n controller.abort()\n }\n}\n\nfunction discardPreload(router: AnyRouter, preload: ActivePreload): void {\n preload[1].abort()\n transferMatchResources(router, preload[0])\n}\n\nfunction acquireMatchResources(matches: Array<AnyRouteMatch>): void {\n for (const match of matches as Array<WorkMatch>) {\n const flight = match._flight\n if (flight) {\n flight[2]++\n }\n }\n}\n\nfunction setFetching(\n router: AnyRouter,\n match: WorkMatch,\n value: AnyRouteMatch['isFetching'],\n owner?: AbortController,\n): void {\n match.isFetching = value\n if (owner && router._tx?.[0] !== owner) {\n return\n }\n const store = router.stores.byRoute.get(match.routeId)\n const presented = store?.get()\n if (presented?.id === match.id) {\n store!.set({ ...presented, isFetching: value })\n }\n}\n\nfunction getLoaderContext(\n router: AnyRouter,\n lane: ContextualizedLane,\n match: WorkMatch,\n route: AnyRoute,\n controller: AbortController,\n parentMatchPromise: Promise<WorkMatch> | undefined,\n preload: boolean,\n): LoaderFnContext {\n const location = lane[0]\n return {\n params: match.params,\n location,\n navigate: navigateFrom(router, location),\n cause: preload ? ('preload' as const) : match.cause,\n abortController: controller,\n preload,\n deps: match.loaderDeps,\n parentMatchPromise: parentMatchPromise as any,\n context: match.context,\n route,\n ...router.options.additionalContext,\n }\n}\n\nasync function loadResource(\n router: AnyRouter,\n lane: ContextualizedLane,\n match: WorkMatch,\n route: AnyRoute,\n loader: RouteLoaderFn<any> | undefined,\n parentMatchPromise: Promise<WorkMatch> | undefined,\n preload: boolean,\n owner: AbortController,\n): Promise<LoaderOutcome> {\n const signal = owner.signal\n if (signal.aborted) {\n return [CANCELED]\n }\n if (!loader) {\n return [SUCCESS, undefined]\n }\n\n let flight = match._flight\n let joined = !!flight\n setFetching(router, match, 'loader', owner)\n try {\n for (;;) {\n if (!flight) {\n const controller = new AbortController()\n const outcome = Promise.resolve()\n .then(() =>\n loader(\n getLoaderContext(\n router,\n lane,\n match,\n route,\n controller,\n parentMatchPromise,\n preload,\n ),\n ),\n )\n .then(\n (value) => normalize(value, false, route.id),\n (cause) => normalize(cause, true, route.id),\n )\n .then((result): LoaderOutcome => {\n return result[0] === ERROR && match._flight === flight\n ? normalizeError(route, result[1])\n : result\n })\n flight = [outcome, controller, 1]\n ;(router._flights ??= new Map()).set(match.id, flight)\n }\n match._flight = flight\n match.abortController = flight[1]\n try {\n const outcome = await waitFor(flight[0], signal)\n if (!joined || outcome[0] === SUCCESS || outcome[0] === REDIRECTED) {\n return outcome\n }\n } catch (cause) {\n if (cause === signal) {\n releaseFlight(router, match)\n return [CANCELED]\n }\n throw cause\n }\n releaseFlight(router, match)\n if (signal.aborted) {\n return [CANCELED]\n }\n flight = undefined\n joined = false\n }\n } finally {\n setFetching(router, match, false, owner)\n }\n}\n\nfunction settleInto(\n match: WorkMatch,\n result: LoaderOutcome,\n preload: boolean,\n): asserts match is SettledMatch {\n if (result[0] === SUCCESS) {\n match.loaderData = result[1]\n match.error = undefined\n match.status = 'success'\n match.invalid = false\n match.updatedAt = Date.now()\n match.preload = preload\n } else if (result[0] !== REDIRECTED) {\n // Reduction installs only the selected terminal failure. Every other\n // settled attempt remains a renderable, stale match in that lane.\n match.status = 'success'\n match.error = undefined\n match.invalid = true\n }\n}\n\nexport function cacheLoaderMatch(\n router: CoordinatorRouter,\n match: SettledMatch,\n planned: AnyRouteMatch | undefined,\n): void {\n const current = router._cache.get(match.id) as WorkMatch | undefined\n if (\n current !== planned ||\n router._committed.some(\n (candidate) =>\n candidate.id === match.id &&\n (candidate as WorkMatch)._flight === match._flight,\n )\n ) {\n return\n }\n const cached = {\n ...match,\n _notFound: undefined,\n context: {},\n } as WorkMatch\n if (cached._flight) {\n cached._flight[2]++\n }\n router._cache.set(match.id, cached)\n if (current) {\n releaseFlight(router, current)\n }\n}\n\nfunction getParentSnapshot(\n match: WorkMatch,\n outcome: LoaderOutcome,\n): WorkMatch {\n if (outcome[0] === ERROR || outcome[0] === NOT_FOUND) {\n return {\n ...match,\n status: outcome[0] === ERROR ? 'error' : 'notFound',\n error: outcome[1],\n _flight: undefined,\n }\n }\n return match\n}\n\nfunction createLoaderTask(\n router: AnyRouter,\n lane: ContextualizedLane,\n index: number,\n tasks: Array<LoaderTask>,\n semanticParent: Promise<WorkMatch> | undefined,\n options: ExecuteLaneOptions,\n): Promise<WorkMatch> {\n const match = lane[1][index]!\n const route = getRoute(router, match)\n const preload = !!options[4]\n const plannedCacheMatch = preload ? router._cache.get(match.id) : undefined\n let reload = false\n let reloadFailure: LoaderOutcome | undefined\n try {\n let configured\n if (match.status === 'success') {\n configured = route.options.shouldReload\n if (typeof configured === 'function') {\n configured = configured(\n getLoaderContext(\n router,\n lane,\n match,\n route,\n options[0],\n semanticParent,\n preload,\n ),\n )\n }\n if (!options[2]()) {\n options[0].abort()\n reloadFailure = [CANCELED]\n }\n }\n if (!reloadFailure) {\n if (match.status !== 'success') {\n reload = true\n } else {\n const staleAge =\n options[4] || match.preload\n ? (route.options.preloadStaleTime ??\n router.options.defaultPreloadStaleTime ??\n 30_000)\n : (route.options.staleTime ?? router.options.defaultStaleTime ?? 0)\n reload = !!(\n match.invalid ||\n configured ||\n (configured === undefined &&\n Date.now() - match.updatedAt >= staleAge &&\n (options[6] ||\n match.cause === 'enter' ||\n options[3].some(\n (candidate) =>\n candidate.routeId === match.routeId &&\n candidate.id !== match.id,\n )))\n )\n }\n }\n } catch (cause) {\n match.invalid = true\n releaseFlight(router, match)\n reloadFailure = normalizeLaneError(route, cause, options)\n }\n const routeLoader = route.options.loader\n const loader =\n typeof routeLoader === 'function' ? routeLoader : routeLoader?.handler\n const background = !!(\n routeLoader &&\n reload &&\n match.status === 'success' &&\n !preload &&\n !options[5] &&\n ((typeof routeLoader === 'function'\n ? undefined\n : routeLoader?.staleReloadMode) ??\n router.options.defaultStaleReloadMode) !== 'blocking'\n )\n const loaded = reload && (!preload || route.options.preload !== false)\n const blocking =\n loaded && !background && (match.status !== 'success' || !!routeLoader)\n if (loaded && !routeLoader) {\n match.invalid = false\n match.updatedAt = Date.now()\n }\n let donor = loaded && routeLoader ? router._flights?.get(match.id) : undefined\n if (donor === match._flight) {\n donor = undefined\n } else if (donor) {\n donor[2]++\n }\n if (blocking) {\n const acceptedFlight = match._flight\n match._flight = donor\n releaseOwnedFlight(router, match.id, acceptedFlight)?.abort()\n // A successful route without a loader has no blocking work to present. It\n // still gets a task so its chunk and derived assets participate in the\n // lane, but putting it back into pending would hide an already-rendered\n // ancestor while only a descendant is loading.\n if (match.status === 'success') {\n match.status = 'pending'\n }\n options[8]?.()\n }\n if (!loaded) {\n match.isFetching = false\n }\n const rawOutcome = reloadFailure\n ? Promise.resolve(reloadFailure)\n : !blocking\n ? Promise.resolve<LoaderOutcome>([SUCCESS, match.loaderData])\n : loadResource(\n router,\n lane,\n match,\n route,\n loader,\n semanticParent,\n preload,\n options[0],\n )\n const outcome = rawOutcome.then((result) => {\n if (blocking) {\n settleInto(match, result, preload)\n if (result[0] === SUCCESS) {\n if (preload && routeLoader) {\n cacheLoaderMatch(router, match, plannedCacheMatch)\n }\n // A route is renderable only after both its data and normal component\n // chunk are ready. Its loader data is already available to descendants.\n match.status = 'pending'\n }\n }\n return result\n })\n\n const rawChunkFailure = waitFor(\n Promise.resolve().then(() => loadRouteChunk(route)),\n options[0].signal,\n ).then(\n () => {\n options[8]?.()\n return undefined\n },\n (cause): IndexedOutcome => [\n index,\n normalizeLaneError(route, cause, options),\n ],\n )\n const chunkFailure = rawChunkFailure.then((failure) =>\n outcome.then((result) => {\n if (\n blocking &&\n !failure &&\n result[0] === SUCCESS &&\n match.status === 'pending' &&\n options[2]()\n ) {\n match.status = 'success'\n options[8]?.()\n }\n return failure\n }),\n )\n tasks.push([index, outcome, chunkFailure])\n if (!background) {\n return outcome.then((result) => getParentSnapshot(match, result))\n }\n const candidate: WorkMatch = {\n ...match,\n status: 'pending',\n preload: false,\n _flight: donor,\n }\n match.invalid = false\n match.isFetching = 'loader'\n const backgroundOutcome = loadResource(\n router,\n lane,\n candidate,\n route,\n loader,\n semanticParent,\n false,\n options[0],\n ).then((result) => {\n match.isFetching = false\n settleInto(candidate, result, false)\n return result\n })\n ;(lane[2] ??= []).push([index, backgroundOutcome, chunkFailure, candidate])\n return backgroundOutcome.then((result) =>\n getParentSnapshot(candidate, result),\n )\n}\n\nasync function getNotFoundBoundary(\n router: AnyRouter,\n matches: Array<WorkMatch>,\n indexed: IndexedOutcome | undefined,\n signal: AbortSignal,\n fallback = 0,\n): Promise<number> {\n const cause = indexed?.[1][1] as NotFoundError | undefined\n let index = cause?.routeId\n ? matches.findIndex((match) => match.routeId === cause.routeId)\n : (indexed?.[0] ?? matches.length - 1)\n if (index < 0) {\n index = 0\n }\n for (let i = index; i >= 0; i--) {\n const route = getRoute(router, matches[i]!)\n const loading = loadRouteChunk(route, false)\n if (loading) {\n try {\n await waitFor(loading, signal)\n } catch (cause) {\n if (cause === signal) {\n throw cause\n }\n }\n }\n if (route.options.notFoundComponent) {\n return i\n }\n }\n return cause?.routeId ? index : fallback\n}\n\nfunction discardBackground(router: AnyRouter, lane: Lane<any>): void {\n if (lane[2]) {\n transferMatchResources(\n router,\n lane[2].map((task) => task[3]),\n )\n lane[2] = undefined\n }\n}\n\nasync function settleTasks(\n tasks: Array<LoaderTask>,\n serialFailure?: IndexedOutcome,\n redirectTasks?: Array<BackgroundLoaderTask>,\n gate?: number | Promise<number>,\n): Promise<IndexedOutcome | undefined> {\n let loaderFailure: IndexedOutcome | undefined\n\n try {\n await Promise.all(\n tasks.map((task) =>\n task[1].then(async (outcome) => {\n const taskIndex = task[0]\n if (gate && taskIndex >= (await gate)) {\n return\n }\n if (outcome[0] >= REDIRECTED) {\n throw [taskIndex, outcome] as IndexedOutcome\n }\n if (!loaderFailure && outcome[0] !== SUCCESS) {\n loaderFailure = [taskIndex, outcome]\n // Every started descendant must settle before an ordinary failure\n // wins because a redirect from any of them remains control flow.\n await Promise.all(\n (redirectTasks ?? []).map((nextTask) => {\n if (nextTask[0] <= taskIndex) {\n return\n }\n return nextTask[1].then((nextOutcome) => {\n if (nextOutcome[0] === REDIRECTED) {\n throw [nextTask[0], nextOutcome] as IndexedOutcome\n }\n })\n }),\n )\n }\n }),\n ),\n )\n } catch (cause) {\n return cause as IndexedOutcome\n }\n return serialFailure ?? loaderFailure\n}\n\nasync function reduceLane(\n router: AnyRouter,\n lane: ContextualizedLane,\n tasks: Array<LoaderTask>,\n controller: AbortController,\n redirects: number,\n settlement: Promise<IndexedOutcome | undefined>,\n onReady?: () => void,\n): Promise<ReducedLane | ControlOutcome> {\n const matches = lane[1]\n let failure = await settlement\n let redirectLimitExceeded = false\n const plannedBoundary = matches.findIndex((match) => match._notFound)\n const boundaryOf = (found: IndexedOutcome) =>\n found[1][0] === NOT_FOUND\n ? getNotFoundBoundary(router, matches, found, controller.signal)\n : found[0]\n let readinessEnd = plannedBoundary < 0 ? matches.length : plannedBoundary\n\n if ((failure?.[1][0] ?? 0) >= REDIRECTED) {\n readinessEnd = 0\n } else if (failure) {\n readinessEnd = failure[2] ??= await boundaryOf(failure)\n for (const task of tasks) {\n if (task[0] >= readinessEnd) {\n break\n }\n const outcome = await task[1]\n // Presence means a loader previously succeeded, even with `undefined`.\n if (\n outcome[0] !== SUCCESS &&\n outcome[0] < REDIRECTED &&\n !('loaderData' in matches[task[0]]!)\n ) {\n failure = [task[0], outcome]\n readinessEnd = failure[2] = await boundaryOf(failure)\n break\n }\n }\n }\n\n for (const task of tasks) {\n if (task[0] >= readinessEnd) {\n break\n }\n const chunkFailure = await task[2]\n if (!chunkFailure) {\n continue\n }\n failure = chunkFailure\n break\n }\n\n if ((failure?.[1][0] ?? 0) >= REDIRECTED) {\n const outcome = failure![1]\n if (\n outcome[0] !== REDIRECTED ||\n outcome[1].options.reloadDocument ||\n redirects < 20\n ) {\n discardBackground(router, lane)\n return outcome as ControlOutcome\n }\n redirectLimitExceeded = true\n failure = [0, [ERROR, new Error('Too many redirects')]]\n }\n\n const boundary = failure\n ? (failure[2] ?? (await boundaryOf(failure)))\n : plannedBoundary\n if (boundary >= 0) {\n const outcome = failure?.[1]\n const kind = outcome?.[0]\n const match = matches[boundary]!\n const cause = outcome?.[1]\n const install = () => {\n if (outcome) {\n match._notFound = undefined\n if (kind === ERROR) {\n match.status = 'error'\n } else {\n ;(cause as NotFoundError).routeId = match.routeId\n if (match.routeId === router.routeTree.id) {\n match.status = 'success'\n match._notFound = true\n } else {\n match.status = 'notFound'\n }\n }\n match.error = cause\n match.isFetching = false\n }\n }\n install()\n try {\n await waitFor<unknown>(\n outcome\n ? Promise.resolve().then(() =>\n loadRouteChunk(\n getRoute(router, match),\n kind === ERROR ? 'errorComponent' : 'notFoundComponent',\n ),\n )\n : Promise.all([\n loadRouteChunk(getRoute(router, match)),\n loadRouteChunk(getRoute(router, match), 'notFoundComponent'),\n ]),\n controller.signal,\n )\n } catch (cause) {\n if (cause === controller.signal) {\n discardBackground(router, lane)\n return [CANCELED]\n }\n }\n if (!outcome) {\n match.status = 'success'\n onReady?.()\n } else if (redirectLimitExceeded) {\n controller.abort()\n await Promise.all([\n ...tasks.map((task) => task[1]),\n ...tasks.map((task) => task[2]),\n ...(lane[2] ?? []).map((task) => task[1]),\n ])\n discardBackground(router, lane)\n transferMatchResources(router, matches)\n install()\n }\n }\n\n return lane as ReducedLane\n}\n\nexport async function projectLane(\n router: AnyRouter,\n lane: ReducedLane,\n signal: AbortSignal,\n start = 0,\n end = lane[1].length,\n): Promise<ProjectedLane> {\n const matches = lane[1]\n for (let index = start; index < end; index++) {\n const match = matches[index]!\n const routeOptions = getRoute(router, match).options\n if (routeOptions.head || routeOptions.scripts) {\n try {\n const context = {\n ssr: router.options.ssr,\n matches,\n match,\n params: match.params,\n loaderData: match.loaderData,\n }\n const [head, scripts] = await waitFor(\n Promise.all([\n routeOptions.head?.(context),\n routeOptions.scripts?.(context),\n ]),\n signal,\n )\n match.meta = head?.meta\n match.links = head?.links\n match.headScripts = head?.scripts\n match.styles = head?.styles\n match.scripts = scripts\n } catch (cause) {\n if (cause === signal) {\n break\n }\n console.error(cause)\n }\n }\n if (match.status !== 'success' || match._notFound) {\n break\n }\n }\n return lane as ProjectedLane\n}\n\nasync function executeClientLane(\n router: AnyRouter,\n location: ParsedLocation,\n matches: Array<AnyRouteMatch>,\n options: ExecuteLaneOptions,\n): Promise<LaneResult> {\n const matched = [location, matches as Array<WorkMatch>] as MatchedLane\n let plannedBoundary = matches.findIndex((match) => match._notFound)\n if (router.options.notFoundMode !== 'root' && plannedBoundary >= 0) {\n const boundary = await getNotFoundBoundary(\n router,\n matched[1],\n undefined,\n options[0].signal,\n plannedBoundary,\n )\n if (boundary !== plannedBoundary) {\n matches[plannedBoundary]!._notFound = undefined\n matches[boundary]!._notFound = true\n }\n plannedBoundary = boundary\n }\n let end = plannedBoundary < 0 ? matches.length : plannedBoundary + 1\n // From here on `matched` is contextualized: `contextualize` communicates\n // through mutation plus a failure return, so the phase brand is asserted at\n // the two use sites below rather than granted by a (byte-costing) return.\n const failure = await contextualize(router, matched, options, end)\n if (failure) {\n options[5] = true\n }\n const tasks: Array<LoaderTask> = []\n const start = options[7] ?? 0\n let semanticParent = start\n ? Promise.resolve(matched[1][start - 1]!)\n : undefined\n end = failure?.[0] ?? end\n if (failure?.[1][0] === NOT_FOUND) {\n failure[2] = await getNotFoundBoundary(\n router,\n matched[1],\n failure,\n options[0].signal,\n )\n end = Math.min(end, failure[2] + 1)\n } else if ((failure?.[1][0] ?? 0) >= REDIRECTED) {\n end = 0\n }\n for (let index = start; index < end; index++) {\n if (options[0].signal.aborted) {\n break\n }\n semanticParent = createLoaderTask(\n router,\n matched as ContextualizedLane,\n index,\n tasks,\n semanticParent,\n options,\n )\n }\n let reduced: ReducedLane | ControlOutcome\n try {\n const reduction = reduceLane(\n router,\n matched as ContextualizedLane,\n tasks,\n options[0],\n options[1],\n settleTasks(tasks, failure, matched[2]),\n options[8],\n )\n if (matched[2]?.length) {\n matched[3] = settleTasks(\n matched[2],\n undefined,\n undefined,\n reduction.then(\n (foreground) =>\n isControl(foreground)\n ? 0\n : _getRenderedMatches(foreground[1]).length,\n () => 0,\n ),\n )\n }\n reduced = await reduction\n } catch (cause) {\n discardBackground(router, matched)\n throw cause\n }\n if (isControl(reduced)) {\n return reduced\n }\n return projectLane(\n router,\n reduced,\n options[0].signal,\n options[7] === reduced[1].length ? options[7] : 0,\n )\n}\n\n/**\n * Finds the first route that should show pending UI and its two timing values.\n * A fallback already on screen remains selected after its route loads, so we\n * do not jump to a child fallback. Matches put back into pending by invalidation\n * skip pendingMs, and a route without a usable fallback blocks pending UI for deeper routes.\n */\nfunction pendingConfig(\n router: AnyRouter,\n matches: Array<AnyRouteMatch>,\n):\n | [delay: number, boundary: number, min: number, component: unknown]\n | undefined\n | void {\n const presented = router.stores.matches.get()\n for (let index = 0; index < matches.length; index++) {\n const match = matches[index]!\n const success = match.status === 'success'\n const visible =\n success &&\n presented[index]?.id === match.id &&\n presented[index]?.status === 'pending'\n if (success && !visible) {\n continue\n }\n const route = getRoute(router, match as WorkMatch)\n const delay =\n visible || match.invalid\n ? 0\n : (route.options.pendingMs ?? router.options.defaultPendingMs)\n const component =\n route.options.pendingComponent ??\n (router.options as any).defaultPendingComponent\n return component && typeof delay === 'number' && delay !== Infinity\n ? [\n delay,\n index,\n route.options.pendingMinMs ?? router.options.defaultPendingMinMs ?? 0,\n component,\n ]\n : undefined\n }\n}\n\n/**\n * Waits for `pendingMs`, then presents the complete lane. Rendering applies the\n * selected boundary cutoff while retaining every match's structural state.\n * A replacement load for the same match keeps the timer; choosing a different\n * match resets it. `pendingMinMs` starts after the fallback renders.\n */\nfunction offerPending(router: CoordinatorRouter, tx: LoadTransaction): void {\n if (router._tx !== tx) {\n return\n }\n let session = router._pending\n let tookOver = false\n const sessionMatchId = session?.[0][3][session[1]]?.id\n if (session?.[0] !== tx) {\n if (session && tx[3][session[1]]?.id === sessionMatchId) {\n session[0] = tx\n tookOver = true\n } else {\n clearTimeout(session?.[3])\n router._pending = session = undefined\n }\n }\n const config = pendingConfig(router, tx[3])\n if (!config) {\n return\n }\n const [delay, boundary, min, component] = config\n const matchId = tx[3][boundary]!.id\n if (!session || session[1] !== boundary || sessionMatchId !== matchId) {\n // Hydration and redirects can preserve pending presentation without a session.\n // Do not delay it again; conservatively start pendingMinMs from now.\n clearTimeout(session?.[3])\n const presented = router.stores.matches.get()[boundary]\n const visible = presented?.id === matchId && presented.status === 'pending'\n router._pending = session = [\n tx,\n boundary,\n visible ? Date.now() + min : tx[4] + delay,\n undefined,\n visible ? Promise.resolve(true) : undefined,\n component,\n ]\n }\n if (session[4] && !tookOver && session[5] === component) {\n return\n }\n session[5] = component\n if (!session[4]) {\n clearTimeout(session[3])\n const remaining = session[2] - Date.now()\n if (remaining > 0) {\n session[3] = setTimeout(() => {\n offerPending(router, tx)\n }, remaining)\n return\n }\n session[2] = 0\n }\n const offered = tx[3].map((match) => ({\n ...match,\n _flight: undefined,\n }))\n offered[boundary]!.status = 'pending'\n const ack = router\n .startTransition(() => router.stores.setMatches(offered), offered, true)\n .then((rendered) => {\n if (\n rendered &&\n router._pending === session &&\n session[4] === ack &&\n !session[2]\n ) {\n session[2] = Date.now() + min\n }\n return rendered\n })\n session[4] = ack\n}\n\n/**\n * Cancels pending UI timing when its load ends. The ownership check prevents\n * an older, superseded load from clearing pending UI that a newer load took over.\n */\nfunction finishPending(router: CoordinatorRouter, tx: LoadTransaction): void {\n const session = router._pending\n if (session?.[0] === tx) {\n clearTimeout(session[3])\n router._pending = undefined\n }\n}\n\nfunction publishMatches(\n router: CoordinatorRouter,\n matches: Array<AnyRouteMatch>,\n): void {\n router._committed = matches\n router.stores.setMatches(matches)\n}\n\nfunction discardLane(router: AnyRouter, lane: ProjectedLane): void {\n transferMatchResources(router, lane[1])\n discardBackground(router, lane)\n}\n\nfunction commitMatches(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n matches: LaneMatches<'projected'>,\n resolvedPrefix?: number,\n): void {\n const previous = router._committed\n const previousCached = router._cache\n for (const match of matches) {\n match.preload = false\n if (resolvedPrefix) {\n match._assetEnd = undefined\n }\n }\n const cut = _getRenderedMatches(matches).length\n const cached = new Map<string, AnyRouteMatch>()\n const now = Date.now()\n for (const match of [...previous, ...previousCached.values()]) {\n // Rendered-prefix ids and settled successes anywhere in the lane are\n // authoritative: retaining an older same-id generation would shadow them\n // at the next planning pass. Unsettled beyond-boundary matches are not —\n // they must not evict a newer same-id preload.\n if (\n match.status !== 'success' ||\n matches.some(\n (candidate, index) =>\n candidate.id === match.id &&\n (index < cut || candidate.status === 'success'),\n )\n ) {\n continue\n }\n const work = match as WorkMatch\n const route = getRoute(router, work)\n if (\n !route.options.loader ||\n now - match.updatedAt >=\n (match.preload\n ? (route.options.preloadGcTime ??\n router.options.defaultPreloadGcTime ??\n 300_000)\n : (route.options.gcTime ?? router.options.defaultGcTime ?? 300_000))\n ) {\n continue\n }\n cached.set(\n match.id,\n previousCached.get(match.id) === match\n ? match\n : ({\n ...match,\n _flight: undefined,\n isFetching: false,\n context: {},\n } as WorkMatch),\n )\n }\n // The lane becomes committed before publication can synchronously reenter.\n tx[3] = []\n router._cache = cached\n publishMatches(router, matches)\n transferMatchResources(\n router,\n [...previousCached.values(), ...previous],\n [...matches, ...cached.values()],\n )\n runRouteLifecycle(router, previous, matches, () => router._tx === tx)\n}\n\nfunction commitRefreshMatches(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n matches: LaneMatches<'projected'>,\n checkpoint: PublicationCheckpoint,\n): void {\n const previous = router._committed\n const previousCached = router._cache\n for (const match of matches) {\n match.preload = false\n }\n const cached = new Map<string, AnyRouteMatch>()\n // Delay releasing the previous owners until the HMR render is acknowledged.\n // Old generations must not become reusable cache entries after refresh.\n tx[3] = []\n router._cache = cached\n checkpoint.previousMatches = previous\n checkpoint.previousCache = previousCached\n checkpoint.published = true\n publishMatches(router, matches)\n if (!checkpoint.published || router._tx !== tx) {\n return\n }\n runRouteLifecycle(router, previous, matches, () => router._tx === tx)\n}\n\nfunction settlePublication(\n router: CoordinatorRouter,\n checkpoint: PublicationCheckpoint,\n): void {\n if (!checkpoint.published) {\n return\n }\n checkpoint.published = false\n transferMatchResources(\n router,\n [...checkpoint.previousCache.values(), ...checkpoint.previousMatches],\n [...router._cache.values(), ...router._committed],\n )\n}\n\nfunction rollbackPublication(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n lane: ProjectedLane,\n checkpoint: PublicationCheckpoint,\n): boolean {\n if (\n !checkpoint.published ||\n router._tx !== tx ||\n router._committed !== lane[1]\n ) {\n settlePublication(router, checkpoint)\n return false\n }\n\n const discarded = [...router._cache.values(), ...router._committed]\n const restored = [\n ...checkpoint.previousCache.values(),\n ...checkpoint.previousMatches,\n ]\n router._cache = checkpoint.previousCache\n router._committed = checkpoint.previousMatches\n checkpoint.published = false\n\n for (const match of discarded as Array<WorkMatch>) {\n if (\n !restored.includes(match) &&\n match._flight &&\n router._flights?.get(match.id) === match._flight\n ) {\n router._flights.delete(match.id)\n }\n }\n\n finishPending(router, tx)\n router.batch(() => {\n router.stores.status.set('idle')\n router.stores.setMatches(checkpoint.previousPresentation)\n })\n tx[0].abort()\n transferMatchResources(router, discarded, restored)\n discardBackground(router, lane)\n if (router._tx === tx && router._commitPromise === checkpoint.commitPromise) {\n router._commitPromise?.resolve()\n router._commitPromise = undefined\n }\n return true\n}\n\nasync function transitionRefresh(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n lane: ProjectedLane,\n changeInfo: ReturnType<typeof getLocationChangeInfo>,\n): Promise<boolean | undefined> {\n const checkpoint: PublicationCheckpoint = {\n previousMatches: router._committed,\n previousPresentation: tx[6]?.[0] ?? router.stores.matches.get(),\n previousCache: router._cache,\n commitPromise: router._commitPromise,\n published: false,\n }\n const commit = () => {\n finishPending(router, tx)\n router._rollbackRefresh = rollback\n commitRefreshMatches(router, tx, lane[1], checkpoint)\n if (!checkpoint.published || router._tx !== tx) {\n return\n }\n router.emit({ type: 'onLoad', ...changeInfo })\n if (router._tx === tx) {\n router.emit({ type: 'onBeforeRouteMount', ...changeInfo })\n }\n }\n const rollback = () => {\n if (router._rollbackRefresh === rollback) {\n router._rollbackRefresh = undefined\n }\n const restored = rollbackPublication(router, tx, lane, checkpoint)\n router._cancelTransition?.()\n return restored\n }\n try {\n const rendered = await router.startTransition(commit, lane[1])\n if (router._rollbackRefresh === rollback) {\n router._rollbackRefresh = undefined\n }\n if (checkpoint.published) {\n const handoff = tx[6]?.[1]\n if (handoff && router._handoff === handoff) {\n handoff[1]()\n }\n if (router._tx === tx) {\n tx[6] = undefined\n }\n }\n settlePublication(router, checkpoint)\n return rendered\n } catch (cause) {\n if (rollback()) {\n return\n }\n throw cause\n }\n}\n\nasync function awaitCurrent(\n router: CoordinatorRouter,\n owner?: LoadTransaction,\n): Promise<void> {\n let current = router._tx\n while (current && current !== owner) {\n await current[5]\n if (router._tx === current) {\n return\n }\n current = router._tx\n }\n}\n\nasync function followRedirect(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n redirect: AnyRedirect,\n): Promise<void> {\n await router.navigate({\n ...redirect.options,\n replace: true,\n ignoreBlocker: true,\n _redirects: tx[1] + 1,\n } as any)\n}\n\nfunction restoreCommitted(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n): void {\n finishPending(router, tx)\n tx[0].abort()\n transferMatchResources(router, tx[3])\n tx[3] = []\n if (router._tx !== tx) {\n return\n }\n router.batch(() => {\n router.stores.status.set('idle')\n router.stores.setMatches(router._committed)\n })\n if (router._tx === tx) {\n router._commitPromise?.resolve()\n router._commitPromise = undefined\n }\n}\n\nasync function runBackground(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n base: Array<AnyRouteMatch>,\n tasks: Array<BackgroundLoaderTask>,\n settlement: Promise<IndexedOutcome | undefined>,\n): Promise<void> {\n const next = base.map((match) => ({ ...match }))\n acquireMatchResources(next)\n for (const task of tasks) {\n releaseFlight(router, next[task[0]]!)\n next[task[0]] = task[3]\n }\n // Phase jump: the clones inherit beforeLoad context from the committed\n // foreground lane, which already ran `contextualize` for these matches.\n const lane = [tx[2], next] as ContextualizedLane\n let reduced: ReducedLane | ControlOutcome\n try {\n reduced = await reduceLane(router, lane, tasks, tx[0], tx[1], settlement)\n } catch (cause) {\n transferMatchResources(router, next)\n throw cause\n }\n if (isControl(reduced)) {\n transferMatchResources(router, next)\n if (\n reduced[0] === REDIRECTED &&\n router._tx === tx &&\n router._committed === base\n ) {\n await followRedirect(router, tx, reduced[1])\n }\n return\n }\n const projected = await projectLane(router, reduced, tx[0].signal)\n if (router._tx !== tx || router._committed !== base) {\n transferMatchResources(router, projected[1])\n return\n }\n for (const match of projected[1] as Array<WorkMatch>) {\n const cached = router._cache.get(match.id) as WorkMatch | undefined\n if (cached?._flight && cached._flight === match._flight) {\n router._cache.delete(match.id)\n releaseFlight(router, cached)\n }\n }\n publishMatches(router, projected[1])\n transferMatchResources(router, base, projected[1])\n}\n\nasync function runClientTransaction(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n forceStaleReload: boolean,\n onReady?: () => void,\n sync?: boolean,\n resolvedPrefix?: number,\n adopted?: ActivePreload,\n retained?: ActivePreload,\n): Promise<void> {\n const options: ExecuteLaneOptions = [\n tx[0],\n tx[1],\n () => router._tx === tx && !!tx[3].length,\n router._committed,\n undefined,\n sync,\n forceStaleReload,\n resolvedPrefix,\n onReady,\n ]\n let result: LaneResult\n try {\n result = adopted\n ? await adopted[2]\n : await executeClientLane(router, tx[2], tx[3], options)\n } finally {\n if (retained) {\n discardPreload(router, retained)\n }\n }\n if (\n adopted &&\n router._tx === tx &&\n ((isControl(result) && result[0] === CANCELED) ||\n (!isControl(result) &&\n result[1].some(\n (match) => match.status !== 'success' || match._notFound,\n )))\n ) {\n // Successful loaders already seeded the cache; retry only the guard lane.\n const donors = tx[3] as Array<WorkMatch>\n tx[3] = []\n transferMatchResources(router, donors)\n tx[0].abort()\n if (router._tx !== tx) {\n return\n }\n const controller = new AbortController()\n tx[0] = options[0] = controller\n tx[3] = router.matchRoutes(tx[2], {\n _controller: controller,\n })\n acquireMatchResources(tx[3])\n result = await executeClientLane(router, tx[2], tx[3], options)\n }\n\n if (isControl(result)) {\n if (result[0] === REDIRECTED && router._tx === tx) {\n finishPending(router, tx)\n transferMatchResources(router, tx[3])\n tx[3] = []\n if (router._tx === tx) {\n if (process.env.NODE_ENV !== 'production' && tx[6]) {\n router._refreshNextLoad = true\n }\n await followRedirect(router, tx, result[1])\n }\n } else {\n restoreCommitted(router, tx)\n }\n return\n }\n const pending = router._pending\n if (pending?.[0] === tx) {\n /**\n * Loading finished, so cancel any pending reveal. If the fallback rendered,\n * wait out the rest of `pendingMinMs` before replacing it. If it never\n * rendered, there is no minimum wait; if another load took it over, that\n * load owns the deadline.\n */\n clearTimeout(pending[3])\n if (pending[4]) {\n const signal = tx[0].signal\n let rendered = false\n try {\n rendered = await waitFor(pending[4], signal)\n } catch (cause) {\n if (cause !== signal) {\n throw cause\n }\n }\n if (rendered && router._pending === pending && pending[0] === tx) {\n const remaining = pending[2] - Date.now()\n if (remaining > 0) {\n try {\n await waitFor(\n new Promise<void>((resolve) => {\n pending[3] = setTimeout(resolve, remaining)\n }),\n signal,\n )\n } catch {}\n clearTimeout(pending[3])\n }\n }\n }\n }\n if (router._tx !== tx) {\n finishPending(router, tx)\n discardLane(router, result)\n return\n }\n const toLocation = tx[2]\n const changeInfo = getLocationChangeInfo(\n toLocation,\n router.stores.resolvedLocation.get(),\n )\n const background = result[2]\n await router.startViewTransition(async () => {\n if (router._tx !== tx) {\n discardLane(router, result)\n return\n }\n const commit = () => {\n finishPending(router, tx)\n commitMatches(router, tx, result[1], resolvedPrefix)\n if (router._tx !== tx) {\n return\n }\n router.emit({ type: 'onLoad', ...changeInfo })\n if (router._tx === tx) {\n router.emit({ type: 'onBeforeRouteMount', ...changeInfo })\n }\n }\n const rendered =\n process.env.NODE_ENV !== 'production' && tx[6]\n ? await transitionRefresh(router, tx, result, changeInfo)\n : await router.startTransition(commit, result[1])\n if (\n process.env.NODE_ENV !== 'production' &&\n tx[6] &&\n rendered === undefined\n ) {\n return\n }\n if (router._tx !== tx) {\n discardBackground(router, result)\n return\n }\n if (background?.length) {\n // Publish refreshes only after the foreground render acknowledgement.\n // Otherwise a fast refresh can replace the acknowledged generation\n // before the framework commits it and strand the navigation.\n runBackground(router, tx, result[1], background, result[3]!).catch(\n console.error,\n )\n }\n router.batch(() => {\n router.stores.resolvedLocation.set(toLocation)\n router.stores.status.set('idle')\n if (router._tx === tx) {\n router.emit({ type: 'onResolved', ...changeInfo })\n }\n if (rendered && router._tx === tx) {\n router.emit({ type: 'onRendered', ...changeInfo })\n }\n })\n if (router._tx !== tx) {\n return\n }\n router._commitPromise?.resolve()\n router._commitPromise = undefined\n })\n}\n\nexport async function loadClientRoute(\n router: CoordinatorRouter,\n opts?: { sync?: boolean; _dedupe?: boolean },\n): Promise<void> {\n let rematerialize = false\n if (process.env.NODE_ENV !== 'production') {\n router._rollbackRefresh?.()\n rematerialize = !!router._refreshNextLoad || !!router._tx?.[6]\n }\n const refreshPresentation = rematerialize\n ? router.stores.matches.get()\n : undefined\n const previousOwner = router._tx\n const resolvedLocation = router.stores.resolvedLocation.get()\n const previousLocation = resolvedLocation ?? router.stores.location.get()\n const location = router.latestLocation\n const pendingLocation = router._pendingLocation as\n | (ParsedLocation & { _redirects?: number })\n | undefined\n const redirects =\n pendingLocation?.href === location.href\n ? (pendingLocation._redirects ?? 0)\n : 0\n // A same-location navigation joins the transaction already loading it\n // instead of restarting its work. Reload requests never carry the flag,\n // and same-location redirects must restart the lane they came from.\n if (\n opts?._dedupe &&\n !redirects &&\n previousOwner &&\n !rematerialize &&\n previousOwner[2].href === location.href &&\n router.stores.status.get() === 'pending'\n ) {\n await awaitCurrent(router)\n return\n }\n const handoff = router._handoff\n const hydrationController = rematerialize ? undefined : handoff?.[0]()\n const preflight = new AbortController()\n const previousPreflight = router._preflight\n router._preflight = preflight\n if (!rematerialize && !hydrationController) {\n handoff?.[1]()\n }\n previousPreflight?.abort()\n if (preflight.signal.aborted || router._tx !== previousOwner) {\n await awaitCurrent(router, previousOwner)\n return\n }\n\n const changeInfo = getLocationChangeInfo(location, resolvedLocation)\n router.emit({ type: 'onBeforeNavigate', ...changeInfo })\n if (!preflight.signal.aborted && router._tx === previousOwner) {\n router.emit({ type: 'onBeforeLoad', ...changeInfo })\n }\n if (preflight.signal.aborted || router._tx !== previousOwner) {\n preflight.abort()\n await awaitCurrent(router, previousOwner)\n return\n }\n const sameHref = previousLocation.href === location.href\n let adopted = router._preloads?.get(location.href)\n let retained: ActivePreload | undefined\n if (rematerialize && adopted) {\n router._preloads!.delete(location.href)\n discardPreload(router, adopted)\n adopted = undefined\n if (preflight.signal.aborted || router._tx !== previousOwner) {\n preflight.abort()\n await awaitCurrent(router, previousOwner)\n return\n }\n }\n if (\n adopted &&\n (hydrationController ||\n !samePreloadLane(\n adopted,\n router,\n pendingLocation?.href === location.href ? pendingLocation : location,\n redirects,\n ))\n ) {\n router._preloads!.delete(location.href)\n // Keep incompatible loader flights alive through the real lane's reload\n // decisions so matching generations can still donate their work.\n retained = adopted\n adopted = undefined\n }\n let matches: Array<AnyRouteMatch>\n let controller = preflight\n let resolvedPrefix: number | undefined\n if (adopted) {\n controller = adopted[1]\n matches = adopted[0]\n router._preloads!.delete(location.href)\n } else {\n try {\n matches =\n process.env.NODE_ENV !== 'production' && rematerialize\n ? router.matchRoutes(location, {\n _controller: preflight,\n _rematerialize: true,\n })\n : router.matchRoutes(location, { _controller: preflight })\n acquireMatchResources(matches)\n } catch (cause) {\n preflight.abort()\n if (retained) {\n discardPreload(router, retained)\n }\n if (!isRedirect(cause)) {\n if (process.env.NODE_ENV !== 'production' && rematerialize) {\n router._refreshNextLoad = undefined\n }\n await awaitCurrent(router)\n router._commitPromise?.resolve()\n router._commitPromise = undefined\n return\n }\n await router.navigate({\n ...cause.options,\n replace: true,\n ignoreBlocker: true,\n })\n await awaitCurrent(router, previousOwner)\n return\n }\n resolvedPrefix = hydrationController ? handoff : undefined\n if (resolvedPrefix) {\n controller = hydrationController!\n } else {\n hydrationController?.abort()\n }\n }\n if (router._preflight !== preflight || router._tx !== previousOwner) {\n preflight.abort()\n transferMatchResources(router, matches)\n await awaitCurrent(router, previousOwner)\n return\n }\n router._preflight = undefined\n\n const tx: LoadTransaction = [\n controller,\n redirects,\n location,\n matches,\n Date.now(),\n Promise.resolve()\n .then(() =>\n runClientTransaction(\n router,\n tx,\n sameHref,\n () => offerPending(router, tx),\n opts?.sync,\n resolvedPrefix,\n adopted,\n retained,\n ),\n )\n .catch(() => {\n if (router._tx === tx) {\n restoreCommitted(router, tx)\n }\n }),\n ]\n if (process.env.NODE_ENV !== 'production' && rematerialize) {\n // `refreshPresentation` is always captured when `rematerialize` is set.\n tx[6] = [refreshPresentation!, handoff]\n router._refreshNextLoad = undefined\n }\n router._tx = tx\n if (!rematerialize && router._handoff === handoff) {\n router._handoff = undefined\n }\n if (previousOwner) {\n for (const match of router.stores.matches.get() as Array<WorkMatch>) {\n if (router._tx !== tx) {\n break\n }\n if (match.isFetching) {\n setFetching(router, match, false)\n }\n }\n previousOwner[0].abort()\n transferMatchResources(router, previousOwner[3])\n }\n if (router._tx !== tx) {\n transferMatchResources(router, tx[3])\n tx[3] = []\n await awaitCurrent(router, tx)\n return\n }\n\n router.batch(() => {\n router.stores.status.set('pending')\n router.stores.location.set(location)\n })\n offerPending(router, tx)\n try {\n await tx[5]\n } finally {\n await awaitCurrent(router, tx)\n }\n}\n\nexport async function refreshClientRoute(\n router: CoordinatorRouter,\n): Promise<void> {\n router._rollbackRefresh?.()\n const pending = router._tx\n if (pending && !pending[6] && router.stores.status.get() === 'pending') {\n await pending[5]\n if (router._tx !== pending) {\n await awaitCurrent(router, pending)\n }\n }\n // Existing owners remain alive for rollback but cannot donate stale work.\n router._flights?.clear()\n router.clearCache()\n router._refreshNextLoad = true\n await loadClientRoute(router, { sync: true })\n}\n\nfunction followPreloadRedirect(\n router: CoordinatorRouter,\n result: ControlOutcome,\n location: ParsedLocation,\n owner: LoadTransaction | undefined,\n redirects: number,\n): Promise<Array<AnyRouteMatch> | undefined> | undefined {\n if (\n result[0] === REDIRECTED &&\n !result[1].options.reloadDocument &&\n router._tx === owner\n ) {\n return preloadClientRoute(\n router,\n {\n ...result[1].options,\n _fromLocation: location,\n },\n redirects + 1,\n )\n }\n return\n}\n\nexport async function preloadClientRoute(\n router: CoordinatorRouter,\n opts: any,\n redirects = 0,\n): Promise<Array<AnyRouteMatch> | undefined> {\n if (redirects > 20) {\n return\n }\n const owner = router._tx\n if (\n process.env.NODE_ENV !== 'production' &&\n (router._refreshNextLoad || owner?.[6])\n ) {\n return\n }\n const location = opts._builtLocation ?? router.buildLocation(opts)\n const base = router._committed\n const controller = new AbortController()\n let matches: Array<AnyRouteMatch> | undefined\n let preload: ActivePreload | undefined\n let replaced: ActivePreload | undefined\n try {\n const pending = router._preloads?.get(location.href)\n if (pending) {\n if (samePreloadLane(pending, router, location, redirects)) {\n const result = await pending[2]\n return isControl(result)\n ? followPreloadRedirect(router, result, location, owner, redirects)\n : result[1]\n }\n router._preloads!.delete(location.href)\n // Keep the superseded lane alive until this lane has made its reload\n // decisions. Its active flights are the synchronous donor authority.\n replaced = pending\n }\n matches = router.matchRoutes(location, {\n _controller: controller,\n })\n acquireMatchResources(matches)\n const promise = Promise.resolve()\n .then(() =>\n executeClientLane(router, location, matches!, [\n controller,\n redirects,\n // Preload lanes run to completion even when unrelated navigations\n // commit: finished work seeds the cache, and adoption safety is\n // enforced independently by samePreloadLane's base identity check.\n () => true,\n base,\n true,\n ]),\n )\n .finally(() => {\n if (replaced) {\n discardPreload(router, replaced)\n }\n })\n preload = [\n matches,\n controller,\n promise,\n base,\n laneInputs(router, location),\n redirects,\n ]\n ;(router._preloads ??= new Map()).set(location.href, preload)\n const result = await promise\n if (router._preloads?.get(location.href) !== preload) {\n return isControl(result) ? undefined : result[1]\n }\n router._preloads.delete(location.href)\n if (isControl(result)) {\n controller.abort()\n transferMatchResources(router, matches)\n return followPreloadRedirect(router, result, location, owner, redirects)\n }\n\n transferMatchResources(router, result[1])\n controller.abort()\n return result[1]\n } catch (cause) {\n if (!preload || router._preloads?.get(location.href) === preload) {\n if (preload) {\n router._preloads!.delete(location.href)\n }\n controller.abort()\n if (matches) {\n transferMatchResources(router, matches)\n }\n }\n if (router._tx !== owner) {\n return\n }\n if (!isNotFound(cause)) {\n console.error(cause)\n }\n return\n }\n}\n\n// --- SSR hydration (client entry via @tanstack/router-core/ssr/client) ---\n\ndeclare global {\n interface Window {\n [GLOBAL_TSR]?: TsrSsrGlobal\n [GLOBAL_SEROVAL]?: any\n }\n}\n\nexport async function hydrate(router: AnyRouter): Promise<void> {\n if (process.env.NODE_ENV !== 'production' && !window.$_TSR) {\n throw new Error(\n 'Invariant failed: Expected to find bootstrap data on window.$_TSR, but we did not. Please file an issue!',\n )\n }\n const tsr = window.$_TSR!\n\n const adapters = router.options.serializationAdapters as\n | Array<AnySerializationAdapter>\n | undefined\n if (adapters?.length) {\n tsr.t = new Map(\n adapters.map((adapter) => [adapter.key, adapter.fromSerializable]),\n )\n tsr.buffer.forEach((script) => script())\n }\n tsr.initialized = true\n\n const dehydratedRouter = tsr.router\n if (process.env.NODE_ENV !== 'production' && !dehydratedRouter) {\n throw new Error(\n 'Invariant failed: Expected to find a dehydrated data on window.$_TSR.router, but we did not. Please file an issue!',\n )\n }\n router.ssr = { manifest: dehydratedRouter!.manifest }\n const nonce = (\n document.querySelector('meta[property=\"csp-nonce\"]') as\n | HTMLMetaElement\n | undefined\n )?.content\n router.options.ssr = { nonce }\n\n const dehydratedMatches = dehydratedRouter!.matches\n\n const controller = new AbortController()\n const previousPreflight = router._preflight\n router._preflight = controller\n previousPreflight?.abort()\n const retire = (cause?: unknown) => {\n if (router._preflight === controller) {\n router._preflight = undefined\n }\n controller.abort(cause)\n return false\n }\n const isCurrent = () =>\n (!router._tx &&\n router._preflight === controller &&\n !controller.signal.aborted) ||\n retire()\n\n let location!: AnyRouter['latestLocation']\n let candidates!: Array<AnyRouteMatch>\n let handoffInputs!: ReturnType<typeof laneInputs>\n try {\n await waitFor(\n router.options.hydrate?.(dehydratedRouter!.dehydratedData),\n controller.signal,\n )\n if (!isCurrent()) {\n return\n }\n router.updateLatestLocation()\n location = router.latestLocation\n router.stores.location.set(location)\n handoffInputs = laneInputs(router, location)\n candidates = router.matchRoutes(location, {\n _controller: controller,\n })\n } catch (cause) {\n retire(cause)\n if (cause !== controller.signal) {\n throw cause\n }\n }\n if (!isCurrent()) {\n return\n }\n const committed: Array<AnyRouteMatch> = []\n let pendingBoundary: number | undefined\n let verifiedAssetEnd = 0\n const retryFrom = (index: number) => {\n // The failing route's identity is still verified, but no descendant is.\n verifiedAssetEnd = Math.min(verifiedAssetEnd, index + 1)\n const removed = committed.splice(index)\n for (const match of removed) {\n if (\n getRoute(router, match).options.loader &&\n (match.status === 'success' ||\n (!match.invalid && 'loaderData' in match))\n ) {\n cacheLoaderMatch(\n router,\n // Phase jump: dehydrated server data is already past the loader\n // phase — the guard above verified a settled success (or transported\n // loaderData), so this clone is settled without a client settleInto.\n {\n ...match,\n status: 'success',\n error: undefined,\n preload: true,\n } as SettledMatch,\n router._cache.get(match.id),\n )\n }\n }\n transferMatchResources(router, removed)\n }\n\n // A longer server lane is valid only when the local match already caps the\n // branch at a global not-found boundary. Otherwise no transported work is\n // safe to attach to the shorter client lane.\n const shared =\n dehydratedMatches.length > candidates.length\n ? candidates.findIndex((match) => match._notFound) + 1\n : dehydratedMatches.length\n let isTerminal = false\n for (let index = 0; index < shared; index++) {\n const candidate = candidates[index]!\n const dehydrated = dehydratedMatches[index]!\n if (\n typeof dehydrated.i !== 'string' ||\n hydrateSsrMatchId(dehydrated.i) !== candidate.id\n ) {\n pendingBoundary ??= index\n break\n }\n verifiedAssetEnd = index + 1\n const route = getRoute(router, candidate)\n if (\n 'l' in dehydrated ||\n (dehydrated.s === 'success' &&\n dehydrated.e === undefined &&\n route.options.loader)\n ) {\n candidate.loaderData = dehydrated.l\n }\n candidate.status = dehydrated.s\n candidate.ssr = dehydrated.ssr\n route.options.ssr = candidate.ssr\n candidate.updatedAt = dehydrated.u\n candidate.error = dehydrated.e\n candidate._notFound ||= dehydrated.g\n const terminal =\n candidate.status === 'error' ||\n candidate.status === 'notFound' ||\n candidate._notFound\n if (terminal) {\n isTerminal = true\n committed.push(candidate)\n if (candidate.ssr === false || candidate.ssr === 'data-only') {\n pendingBoundary ??= index\n }\n break\n }\n if (candidate.status === 'pending') {\n pendingBoundary ??= index\n break\n }\n\n committed.push(candidate)\n if (candidate.ssr === 'data-only') {\n pendingBoundary ??= index\n }\n }\n let verifiedContextEnd = verifiedAssetEnd\n\n if (\n !isTerminal &&\n committed.length === shared &&\n shared < candidates.length\n ) {\n pendingBoundary = shared\n }\n\n // Hooks observe structural membership. Execution remains limited to\n // `committed`, the accepted server prefix.\n const chunks = committed.map(async (match) => {\n try {\n const route = getRoute(router, match)\n if (match._notFound) {\n await Promise.all([\n loadRouteChunk(route),\n loadRouteChunk(route, 'notFoundComponent'),\n ])\n } else {\n await loadRouteChunk(\n route,\n match.status === 'error'\n ? 'errorComponent'\n : match.status === 'notFound'\n ? 'notFoundComponent'\n : undefined,\n )\n }\n return true\n } catch {\n return false\n }\n })\n let chunkFailure = 0\n try {\n while (\n chunkFailure < chunks.length &&\n (await waitFor(chunks[chunkFailure]!, controller.signal))\n ) {\n chunkFailure++\n }\n } catch {\n isCurrent()\n return\n }\n if (!isCurrent()) {\n return\n }\n if (chunkFailure < committed.length) {\n verifiedContextEnd = Math.min(verifiedContextEnd, chunkFailure)\n retryFrom(chunkFailure)\n }\n\n // The first pending match is already visible, so prepare its route context\n // without granting its beforeLoad or loader any hydration authority.\n const contextEnd = Math.max(\n pendingBoundary === committed.length\n ? committed.length + 1\n : committed.length,\n verifiedContextEnd,\n )\n for (let index = 0; index < contextEnd; index++) {\n const match = candidates[index]!\n const route = getRoute(router, match)\n const parentContext =\n candidates[index - 1]?.context ?? router.options.context ?? {}\n let routeContext\n if (route.options.context) {\n try {\n routeContext = match._ctx =\n route.options.context({\n deps: match.loaderDeps,\n params: match.params,\n context: parentContext,\n location,\n navigate: navigateFrom(router, location),\n buildLocation: router.buildLocation,\n cause: match.cause,\n abortController: controller,\n preload: false,\n matches: candidates,\n routeId: route.id,\n }) || {}\n } catch {\n if (!isCurrent()) {\n return\n }\n if (\n match.status !== 'error' &&\n match.status !== 'notFound' &&\n !match._notFound\n ) {\n retryFrom(index)\n break\n }\n }\n if (!isCurrent()) {\n return\n }\n }\n match.context = {\n ...parentContext,\n ...routeContext,\n ...(committed[index] && dehydratedMatches[index]!.b),\n }\n }\n\n await projectLane(\n router,\n [location, candidates] as any,\n controller.signal,\n 0,\n verifiedAssetEnd,\n )\n if (!isCurrent()) {\n return\n }\n const needsClientLoad =\n pendingBoundary !== undefined || committed.length < shared\n const committedMatches =\n isTerminal && committed.length === shared ? candidates : committed\n let presented = needsClientLoad ? candidates : committedMatches\n let dataOnlyAssetEnd: number | undefined\n if (needsClientLoad && pendingBoundary !== undefined) {\n const boundary = presented[pendingBoundary]!\n dataOnlyAssetEnd =\n boundary.status === 'success' &&\n boundary.ssr === 'data-only' &&\n boundary.error === undefined &&\n !boundary._notFound &&\n verifiedAssetEnd > pendingBoundary + 1\n ? verifiedAssetEnd\n : undefined\n presented = presented.slice()\n presented[pendingBoundary] = {\n ...boundary,\n status: 'pending',\n ssr: boundary.ssr === 'data-only' ? 'data-only' : false,\n _assetEnd: dataOnlyAssetEnd,\n }\n }\n\n const claim = () =>\n needsClientLoad &&\n !router._tx &&\n router.latestLocation.state === location.state &&\n deepEqual(handoffInputs, laneInputs(router, router.latestLocation)) &&\n router._committed === committedMatches &&\n committedMatches.length &&\n !controller.signal.aborted\n ? controller\n : undefined\n const handoff: NonNullable<AnyRouter['_handoff']> = [\n claim,\n (matches) => {\n if (router._handoff !== handoff) {\n return\n }\n const prefix = committedMatches.length\n if (\n !matches ||\n !claim() ||\n committedMatches.some((match, index) => match.id !== matches[index]?.id)\n ) {\n router._handoff = undefined\n controller.abort()\n return\n }\n let handoffAssetEnd = dataOnlyAssetEnd\n if (handoffAssetEnd !== undefined) {\n for (let index = prefix; index < handoffAssetEnd; index++) {\n if (candidates[index]?.id !== matches[index]?.id) {\n handoffAssetEnd =\n index > (pendingBoundary ?? -1) + 1 ? index : undefined\n break\n }\n }\n }\n const clones = committedMatches.map((match) => ({ ...match }))\n if (handoffAssetEnd !== undefined) {\n clones[pendingBoundary!]!._assetEnd = handoffAssetEnd\n }\n transferMatchResources(router, matches.splice(0, prefix, ...clones))\n for (let index = prefix; index < matches.length; index++) {\n const match = matches[index]!\n const hydrated = candidates[index]\n if (hydrated?.id === match.id && hydrated._ctx) {\n match._ctx = hydrated._ctx\n }\n match.abortController = controller\n }\n return prefix\n },\n ]\n router._committed = committedMatches\n router._handoff = handoff\n router._preflight = undefined\n router.batch(() => {\n router.stores.setMatches(presented)\n router.stores.status.set('idle')\n if (!needsClientLoad) {\n router.stores.resolvedLocation.set(router.stores.location.get())\n }\n })\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { GLOBAL_SEROVAL, GLOBAL_TSR } from './ssr/constants.cjs';
|
|
2
|
+
import { TsrSsrGlobal } from './ssr/types.cjs';
|
|
3
|
+
import { ParsedLocation } from './location.cjs';
|
|
4
|
+
import { AnyRouteMatch } from './Matches.cjs';
|
|
5
|
+
import { NotFoundError } from './not-found.cjs';
|
|
6
|
+
import { AnyRoute } from './route.cjs';
|
|
7
|
+
import { AnyRedirect } from './redirect.cjs';
|
|
8
|
+
import { AnyRouter } from './router.cjs';
|
|
9
|
+
export declare function replaceRouteChunk(route: AnyRoute, lazyFn: AnyRoute['lazyFn']): void;
|
|
10
|
+
export declare function loadRouteChunk(route: AnyRoute, componentType?: 'errorComponent' | 'notFoundComponent' | false): Promise<void> | undefined;
|
|
11
|
+
/** Return the structural lane through the first terminal render boundary. */
|
|
12
|
+
export declare function _getRenderedMatches(matches: Array<AnyRouteMatch>): Array<AnyRouteMatch>;
|
|
13
|
+
/** Return the lane whose document assets belong to the current presentation. */
|
|
14
|
+
export declare function _getAssetMatches(matches: Array<AnyRouteMatch>): Array<AnyRouteMatch>;
|
|
15
|
+
declare const lanePhase: unique symbol;
|
|
16
|
+
type LanePhase = 'matched' | 'contextualized' | 'reduced' | 'projected';
|
|
17
|
+
/**
|
|
18
|
+
* Lane matches carry their lane's phase so functions can demand evidence of
|
|
19
|
+
* pipeline position (e.g. `commitMatches` only accepts a projected lane's
|
|
20
|
+
* matches). The brand is phantom — it never exists at runtime.
|
|
21
|
+
*/
|
|
22
|
+
type LaneMatches<TPhase extends LanePhase> = Array<WorkMatch> & {
|
|
23
|
+
readonly [lanePhase]?: TPhase;
|
|
24
|
+
};
|
|
25
|
+
type Lane<TPhase extends LanePhase> = [
|
|
26
|
+
location: ParsedLocation,
|
|
27
|
+
matches: LaneMatches<TPhase>,
|
|
28
|
+
background?: Array<BackgroundLoaderTask>,
|
|
29
|
+
backgroundSettlement?: Promise<IndexedOutcome | undefined>
|
|
30
|
+
] & {
|
|
31
|
+
readonly [lanePhase]?: TPhase;
|
|
32
|
+
};
|
|
33
|
+
type ReducedLane = Lane<'reduced'>;
|
|
34
|
+
type ProjectedLane = Lane<'projected'>;
|
|
35
|
+
declare const SUCCESS = 0;
|
|
36
|
+
declare const ERROR = 1;
|
|
37
|
+
declare const NOT_FOUND = 2;
|
|
38
|
+
declare const REDIRECTED = 3;
|
|
39
|
+
declare const CANCELED = 4;
|
|
40
|
+
type LoaderOutcome = [typeof SUCCESS, data: unknown] | [typeof ERROR, error: unknown] | [typeof NOT_FOUND, error: NotFoundError] | [typeof REDIRECTED, redirect: AnyRedirect] | [typeof CANCELED];
|
|
41
|
+
type IndexedOutcome = [index: number, outcome: LoaderOutcome, boundary?: number];
|
|
42
|
+
export type LoaderFlight = [
|
|
43
|
+
outcome: Promise<LoaderOutcome>,
|
|
44
|
+
controller: AbortController,
|
|
45
|
+
leases: number
|
|
46
|
+
];
|
|
47
|
+
type WorkMatch = AnyRouteMatch & {
|
|
48
|
+
_flight?: LoaderFlight;
|
|
49
|
+
};
|
|
50
|
+
declare const matchPhase: unique symbol;
|
|
51
|
+
/**
|
|
52
|
+
* A match whose loader outcome has been applied by `settleInto`, which is the
|
|
53
|
+
* sole granter of this brand (phantom, zero-runtime). Consumers that require
|
|
54
|
+
* it — e.g. `cacheLoaderMatch` — can only be reached after settlement, so the
|
|
55
|
+
* compiler enforces the loader→settle→cache ordering. Sources that arrive
|
|
56
|
+
* already settled (dehydrated server data) must cast at a named boundary.
|
|
57
|
+
*/
|
|
58
|
+
type SettledMatch = WorkMatch & {
|
|
59
|
+
readonly [matchPhase]: 'settled';
|
|
60
|
+
};
|
|
61
|
+
export type LaneInputs = [
|
|
62
|
+
routeTree: AnyRoute,
|
|
63
|
+
context: unknown,
|
|
64
|
+
additionalContext: unknown,
|
|
65
|
+
state: object,
|
|
66
|
+
search: object,
|
|
67
|
+
maskedLocation: [
|
|
68
|
+
href: string,
|
|
69
|
+
state: object,
|
|
70
|
+
search: object,
|
|
71
|
+
unmaskOnReload: boolean | undefined
|
|
72
|
+
] | undefined
|
|
73
|
+
];
|
|
74
|
+
export type ActivePreload = [
|
|
75
|
+
matches: Array<AnyRouteMatch>,
|
|
76
|
+
controller: AbortController,
|
|
77
|
+
result: Promise<LaneResult>,
|
|
78
|
+
semanticOwner: Array<AnyRouteMatch>,
|
|
79
|
+
inputs: LaneInputs,
|
|
80
|
+
redirects: number
|
|
81
|
+
];
|
|
82
|
+
export type LoadTransaction = [
|
|
83
|
+
controller: AbortController,
|
|
84
|
+
redirects: number,
|
|
85
|
+
location: ParsedLocation,
|
|
86
|
+
matches: Array<AnyRouteMatch>,
|
|
87
|
+
startedAt: number,
|
|
88
|
+
done: Promise<void>,
|
|
89
|
+
/**
|
|
90
|
+
* Dev-only HMR refresh mode. Presence is the mode flag; a refresh always
|
|
91
|
+
* carries the presentation it started from, while the hydration handoff is
|
|
92
|
+
* genuinely optional — the tuple makes a half-armed refresh unrepresentable.
|
|
93
|
+
*/
|
|
94
|
+
refresh?: [
|
|
95
|
+
presentation: Array<AnyRouteMatch>,
|
|
96
|
+
handoff: NonNullable<AnyRouter['_handoff']> | undefined
|
|
97
|
+
]
|
|
98
|
+
];
|
|
99
|
+
export type PendingSession = [
|
|
100
|
+
owner: LoadTransaction,
|
|
101
|
+
boundary: number,
|
|
102
|
+
/** Pending reveal time until acknowledged, then minimum-visible-until time. */
|
|
103
|
+
deadline: number,
|
|
104
|
+
timer?: ReturnType<typeof setTimeout>,
|
|
105
|
+
ack?: Promise<boolean>,
|
|
106
|
+
component?: unknown
|
|
107
|
+
];
|
|
108
|
+
type CoordinatorRouter = AnyRouter & {
|
|
109
|
+
/** Whole speculative lanes that a matching navigation may adopt. */
|
|
110
|
+
_preloads?: Map<string, ActivePreload>;
|
|
111
|
+
_refreshNextLoad?: boolean;
|
|
112
|
+
_rollbackRefresh?: () => void;
|
|
113
|
+
_cancelTransition?: () => void;
|
|
114
|
+
};
|
|
115
|
+
type BackgroundLoaderTask = [
|
|
116
|
+
index: number,
|
|
117
|
+
outcome: Promise<LoaderOutcome>,
|
|
118
|
+
ready: Promise<IndexedOutcome | undefined>,
|
|
119
|
+
candidate: WorkMatch
|
|
120
|
+
];
|
|
121
|
+
type ControlOutcome = [typeof REDIRECTED, redirect: AnyRedirect] | [typeof CANCELED];
|
|
122
|
+
type LaneResult = ProjectedLane | ControlOutcome;
|
|
123
|
+
export declare function waitFor<T>(value: T | PromiseLike<T>, signal: AbortSignal): Promise<T>;
|
|
124
|
+
export declare function getRoute(router: AnyRouter, match: WorkMatch): AnyRoute;
|
|
125
|
+
export declare function navigateFrom(router: AnyRouter, location: ParsedLocation): (opts: any) => Promise<void>;
|
|
126
|
+
export declare function laneInputs(router: AnyRouter, location: ParsedLocation): LaneInputs;
|
|
127
|
+
/**
|
|
128
|
+
* Not passing in a `next` ownership recipient
|
|
129
|
+
* is equivalent to discarding the match resources
|
|
130
|
+
*/
|
|
131
|
+
export declare function transferMatchResources(router: AnyRouter, previous: Array<AnyRouteMatch>, next?: Array<AnyRouteMatch>): void;
|
|
132
|
+
export declare function cacheLoaderMatch(router: CoordinatorRouter, match: SettledMatch, planned: AnyRouteMatch | undefined): void;
|
|
133
|
+
export declare function projectLane(router: AnyRouter, lane: ReducedLane, signal: AbortSignal, start?: number, end?: number): Promise<ProjectedLane>;
|
|
134
|
+
export declare function loadClientRoute(router: CoordinatorRouter, opts?: {
|
|
135
|
+
sync?: boolean;
|
|
136
|
+
_dedupe?: boolean;
|
|
137
|
+
}): Promise<void>;
|
|
138
|
+
export declare function refreshClientRoute(router: CoordinatorRouter): Promise<void>;
|
|
139
|
+
export declare function preloadClientRoute(router: CoordinatorRouter, opts: any, redirects?: number): Promise<Array<AnyRouteMatch> | undefined>;
|
|
140
|
+
declare global {
|
|
141
|
+
interface Window {
|
|
142
|
+
[GLOBAL_TSR]?: TsrSsrGlobal;
|
|
143
|
+
[GLOBAL_SEROVAL]?: any;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
export declare function hydrate(router: AnyRouter): Promise<void>;
|
|
147
|
+
export {};
|