@tanstack/router-core 1.171.21 → 1.171.23

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.
@@ -1 +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 { getLocationChangeInfo, runRouteLifecycle } from './router'\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(\n route: AnyRoute,\n onPendingReady?: () => void,\n): Promise<void> | undefined {\n const component = preloadComponent(route, 'component')\n const pending = preloadComponent(route, 'pendingComponent')\n const pendingReady =\n onPendingReady && pending ? pending.then(onPendingReady) : pending\n if (onPendingReady && !pending) {\n onPendingReady()\n }\n if (component && pendingReady) {\n return Promise.all([component, pendingReady]).then(() => {})\n }\n return component ?? pendingReady\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 onPendingReady?: () => void,\n): Promise<void> | undefined {\n const afterLazy = () =>\n componentType === false\n ? undefined\n : componentType\n ? preloadComponent(route, componentType)\n : loadComponents(route, onPendingReady)\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 | [kind: typeof SUCCESS, data: unknown]\n | [kind: typeof ERROR, error: unknown]\n | [kind: typeof NOT_FOUND, error: NotFoundError]\n | [kind: typeof REDIRECTED, redirect: AnyRedirect]\n | [kind: 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 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 and its optional hydration\n * handoff. While a publication awaits acknowledgement, its rollback lives\n * with the transaction that owns the publication.\n */\n refresh?: [\n presentation: Array<AnyRouteMatch>,\n handoff: NonNullable<AnyRouter['_handoff']> | undefined,\n rollback?: () => boolean,\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 /** Active speculative lanes retained for cancellation, invalidation, and cache clearing. */\n _preloads?: Map<AbortController, Array<AnyRouteMatch>>\n _refreshNextLoad?: boolean\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 chunkFailure: Promise<IndexedOutcome | undefined>,\n candidate?: WorkMatch,\n]\n\ntype BackgroundLoaderTask = [\n index: number,\n outcome: Promise<LoaderOutcome>,\n chunkFailure: 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 | [kind: typeof REDIRECTED, redirect: AnyRedirect]\n | [kind: typeof CANCELED]\n\ntype LaneResult = ProjectedLane | ControlOutcome\n\nfunction isControl(\n result: Lane<any> | ControlOutcome,\n): result is ControlOutcome {\n return typeof result[0 /* location or kind */] === '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 /* kind */] !== ERROR) {\n return outcome\n }\n try {\n route.options.onError?.(outcome[1 /* error */])\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 (\n options[0 /* controller */].signal.aborted ||\n !options[2 /* isCurrent */]()\n ) {\n options[0 /* controller */].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 planSuccessfulLane: () => void,\n retainedEnd: number,\n): Promise<IndexedOutcome | undefined> {\n const [location, matches] = lane\n const signal = options[0 /* controller */].signal\n const preload = !!options[4 /* preload */]\n for (let index = options[7 /* resolvedPrefix */] ?? 0; index < end; index++) {\n const match = matches[index]!\n const route = getRoute(router, match)\n\n match.abortController = options[0 /* controller */]\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 /* controller */],\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 /* isCurrent */]()) {\n options[0 /* controller */].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 // Retain only a success that is mounted through the same valid prefix.\n if (previousStatus === 'success' && index >= retainedEnd) {\n match.status = 'pending'\n }\n options[8 /* onReady */]?.()\n try {\n setFetching(router, match, 'beforeLoad', options[0 /* controller */])\n const result = await waitFor(beforeLoad(beforeLoadContext), signal)\n if (!options[2 /* isCurrent */]()) {\n options[0 /* controller */].abort()\n return [index, [CANCELED]]\n }\n const outcome = normalize(result, false, route.id)\n if (outcome[0 /* kind */] !== 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 /* controller */])\n }\n }\n\n // Let a synchronous lane claim predecessor flights before this frame yields.\n planSuccessfulLane()\n return\n}\n\nfunction releaseOwnedFlight(\n router: AnyRouter,\n match: WorkMatch,\n flight?: LoaderFlight,\n): AbortController | undefined {\n if (!flight || --flight[2 /* leases */]) {\n return\n }\n if (router._flights?.get(match.id) === flight) {\n const current = router._tx\n if (\n current &&\n !current[0 /* controller */].signal.aborted &&\n !(process.env.NODE_ENV !== 'production' && current[6 /* refresh */]) &&\n !current[3 /* matches */].includes(match) &&\n current[3 /* matches */].some((candidate) => candidate.id === match.id) &&\n current[3 /* matches */].some(\n (candidate) => candidate.isFetching === 'beforeLoad',\n )\n ) {\n // Keep work discoverable only while the current lane is still running\n // beforeLoad. Loader planning performs the matching zero-owner sweep.\n return\n }\n router._flights.delete(match.id)\n }\n return flight[1 /* controller */]\n}\n\nfunction releaseFlight(router: AnyRouter, match: WorkMatch): void {\n const flight = match._flight\n match._flight = undefined\n releaseOwnedFlight(router, match, flight)?.abort()\n}\n/**\n * Not passing in a `next` ownership recipient\n * is equivalent to discarding the match resources\n */\nfunction transferMatchResources(\n router: AnyRouter,\n previous: Array<AnyRouteMatch>,\n next?: Array<AnyRouteMatch>,\n deferSameIdFlight?: true,\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 if (\n deferSameIdFlight &&\n flight?.[2 /* leases */] === 1 &&\n router._flights?.get(match.id) === flight &&\n !(\n process.env.NODE_ENV !== 'production' && router._tx?.[6 /* refresh */]\n ) &&\n next?.some((candidate) => candidate.id === match.id)\n ) {\n // The successor has not made its same-ID reload decision yet.\n flight[2 /* leases */] = 0\n } else {\n const controller = releaseOwnedFlight(router, match, flight)\n if (controller) {\n abort.push(controller)\n }\n }\n }\n }\n for (const controller of abort) {\n controller.abort()\n }\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 /* leases */]++\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 /* controller */] !== 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 /* location */]\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 setFetching(router, match, 'loader', owner)\n try {\n if (!flight) {\n const controller = new AbortController()\n flight = [\n 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 // The registry controls discovery; leases keep current consumers\n // sharing the same terminal outcome.\n if (\n result[0 /* kind */] !== SUCCESS &&\n router._flights?.get(match.id) === flight\n ) {\n router._flights!.delete(match.id)\n if (!flight![2 /* leases */]) {\n controller.abort()\n }\n }\n return result[0 /* kind */] === ERROR && flight![2 /* leases */]\n ? normalizeError(route, result[1 /* error */])\n : result\n }),\n controller,\n 1,\n ]\n ;(router._flights ??= new Map()).set(match.id, flight)\n }\n match._flight = flight\n match.abortController = flight[1 /* controller */]\n return await waitFor(flight[0 /* outcome */], signal)\n } catch (cause) {\n if (cause !== signal) {\n throw cause\n }\n releaseFlight(router, match)\n return [CANCELED]\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 /* kind */] === SUCCESS) {\n match.loaderData = result[1 /* data */]\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 /* kind */] !== 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 /* leases */]++\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 /* kind */] === ERROR || outcome[0 /* kind */] === NOT_FOUND) {\n return {\n ...match,\n status: outcome[0 /* kind */] === ERROR ? 'error' : 'notFound',\n error: outcome[1 /* error */],\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 retainedEnd: number,\n): Promise<WorkMatch> {\n const match = lane[1 /* matches */][index]!\n const route = getRoute(router, match)\n const preload = !!options[4 /* preload */]\n const plannedCacheMatch = preload ? router._cache.get(match.id) : undefined\n let configured\n let reload = false\n let reloadFailure: LoaderOutcome | undefined\n try {\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 /* controller */],\n semanticParent,\n preload,\n ),\n )\n }\n if (!options[2 /* isCurrent */]()) {\n options[0 /* controller */].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 /* preload */] || 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 /* forceStaleReload */] ||\n match.cause === 'enter' ||\n options[3 /* base */].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 let donor =\n (!preload || route.options.preload !== false) &&\n routeLoader &&\n !(process.env.NODE_ENV !== 'production' && router._tx?.[6 /* refresh */])\n ? router._flights?.get(match.id)\n : undefined\n if (donor === match._flight || reloadFailure) {\n donor = undefined\n } else if (donor && !reload && !preload && configured === undefined) {\n // Normal cache policy accepts an already-running generation even when this\n // lane itself would not have started another loader.\n reload = true\n } else if (!reload) {\n donor = undefined\n }\n const background = !!(\n routeLoader &&\n reload &&\n match.status === 'success' &&\n !preload &&\n !options[5 /* sync */] &&\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 const onLazyReady =\n route.lazyFn && route._lazy !== true ? options[8 /* onReady */] : undefined\n if (loaded && !routeLoader) {\n match.invalid = false\n match.updatedAt = Date.now()\n }\n if (donor) {\n donor[2 /* leases */]++\n }\n if (blocking) {\n const acceptedFlight = match._flight\n match._flight = donor\n releaseOwnedFlight(router, match, acceptedFlight)?.abort()\n // A successful route without a loader has no blocking work to present. A\n // mounted success likewise remains renderable while its loader revalidates.\n if (match.status === 'success' && index >= retainedEnd) {\n match.status = 'pending'\n }\n options[8 /* onReady */]?.()\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 /* controller */],\n )\n const outcome = rawOutcome.then((result) => {\n if (blocking) {\n settleInto(match, result, preload)\n if (result[0 /* kind */] === SUCCESS) {\n if (\n preload &&\n routeLoader &&\n !options[0 /* controller */].signal.aborted\n ) {\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, undefined, onLazyReady)),\n options[0 /* controller */].signal,\n ).then(\n () => undefined,\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 /* kind */] === SUCCESS &&\n match.status === 'pending' &&\n options[2 /* isCurrent */]()\n ) {\n match.status = 'success'\n options[8 /* onReady */]?.()\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 /* controller */],\n ).then((result) => {\n match.isFetching = false\n settleInto(candidate, result, false)\n return result\n })\n ;(lane[2 /* background */] ??= []).push([\n index,\n backgroundOutcome,\n chunkFailure,\n candidate,\n ])\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 /* outcome */][1 /* error or redirect */] as\n | NotFoundError\n | undefined\n let index = cause?.routeId\n ? matches.findIndex((match) => match.routeId === cause.routeId)\n : (indexed?.[0 /* index */] ?? 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 /* background */]) {\n transferMatchResources(\n router,\n lane[2 /* background */].map((task) => task[3 /* candidate */]),\n )\n lane[2 /* background */] = 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 /* outcome */].then(async (outcome) => {\n const taskIndex = task[0 /* index */]\n if (gate && taskIndex >= (await gate)) {\n return\n }\n if (outcome[0 /* kind */] >= REDIRECTED) {\n throw [taskIndex, outcome] as IndexedOutcome\n }\n if (!loaderFailure && outcome[0 /* kind */] !== 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 /* index */] <= taskIndex) {\n return\n }\n return nextTask[1 /* outcome */].then((nextOutcome) => {\n if (nextOutcome[0 /* kind */] === REDIRECTED) {\n throw [\n nextTask[0 /* index */],\n nextOutcome,\n ] 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 /* matches */]\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 /* outcome */][0 /* kind */] === NOT_FOUND\n ? getNotFoundBoundary(router, matches, found, controller.signal)\n : found[0 /* index */]\n let readinessEnd = plannedBoundary < 0 ? matches.length : plannedBoundary\n\n if ((failure?.[1 /* outcome */][0 /* kind */] ?? 0) >= REDIRECTED) {\n readinessEnd = 0\n } else if (failure) {\n readinessEnd = failure[2 /* boundary */] ??= await boundaryOf(failure)\n for (const task of tasks) {\n if (task[0 /* index */] >= readinessEnd) {\n break\n }\n const outcome = await task[1 /* outcome */]\n // Presence means a loader previously succeeded, even with `undefined`.\n if (\n outcome[0 /* kind */] !== SUCCESS &&\n outcome[0 /* kind */] < REDIRECTED &&\n !('loaderData' in matches[task[0 /* index */]]!)\n ) {\n failure = [task[0 /* index */], outcome]\n readinessEnd = failure[2 /* boundary */] = await boundaryOf(failure)\n break\n }\n }\n }\n\n for (const task of tasks) {\n if (task[0 /* index */] >= readinessEnd) {\n break\n }\n const chunkFailure = await task[2 /* chunkFailure */]\n if (!chunkFailure) {\n continue\n }\n failure = chunkFailure\n break\n }\n\n if ((failure?.[1 /* outcome */][0 /* kind */] ?? 0) >= REDIRECTED) {\n const outcome = failure![1 /* outcome */]\n if (\n outcome[0 /* kind */] !== REDIRECTED ||\n outcome[1 /* redirect */].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 /* boundary */] ?? (await boundaryOf(failure)))\n : plannedBoundary\n if (boundary >= 0) {\n const outcome = failure?.[1 /* outcome */]\n const kind = outcome?.[0 /* kind */]\n const match = matches[boundary]!\n const cause = outcome?.[1 /* error or redirect */]\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 const route = getRoute(router, match)\n try {\n await waitFor<unknown>(\n outcome\n ? Promise.resolve().then(() =>\n loadRouteChunk(\n route,\n kind === ERROR ? 'errorComponent' : 'notFoundComponent',\n ),\n )\n : Promise.all([\n loadRouteChunk(route),\n loadRouteChunk(route, '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 /* outcome */]),\n ...tasks.map((task) => task[2 /* chunkFailure */]),\n ...(lane[2 /* background */] ?? []).map(\n (task) => task[1 /* outcome */],\n ),\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 /* matches */].length,\n): Promise<ProjectedLane> {\n const matches = lane[1 /* matches */]\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 const presented = router.stores.matches.get()\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 /* matches */],\n undefined,\n options[0 /* controller */].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 let retainedEnd = 0\n while (retainedEnd < end && retainedEnd !== plannedBoundary) {\n const match = matches[retainedEnd]!\n const committed = options[3 /* base */][retainedEnd]\n const visible = presented[retainedEnd]\n if (\n committed?.id !== match.id ||\n committed.status !== 'success' ||\n committed._notFound ||\n match.preload ||\n visible?.id !== match.id ||\n visible.status !== 'success' ||\n visible._notFound\n ) {\n break\n }\n retainedEnd++\n }\n const tasks: Array<LoaderTask> = []\n const start = options[7 /* resolvedPrefix */] ?? 0\n let semanticParent = start\n ? Promise.resolve(matched[1 /* matches */][start - 1]!)\n : undefined\n const planSuccessfulLane = () => {\n for (let index = start; index < end; index++) {\n if (options[0 /* controller */].signal.aborted) {\n break\n }\n semanticParent = createLoaderTask(\n router,\n matched as ContextualizedLane,\n index,\n tasks,\n semanticParent,\n options,\n retainedEnd,\n )\n }\n }\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(\n router,\n matched,\n options,\n end,\n planSuccessfulLane,\n retainedEnd,\n )\n if (failure) {\n options[5 /* sync */] = true\n end = failure[0 /* index */]\n if (failure[1 /* outcome */][0 /* kind */] === NOT_FOUND) {\n failure[2 /* boundary */] = await getNotFoundBoundary(\n router,\n matched[1 /* matches */],\n failure,\n options[0 /* controller */].signal,\n )\n end = Math.min(end, failure[2 /* boundary */] + 1)\n } else if (failure[1 /* outcome */][0 /* kind */] >= REDIRECTED) {\n end = 0\n }\n planSuccessfulLane()\n }\n if (options[2 /* isCurrent */]() && !options[4 /* preload */]) {\n const abort: Array<AbortController> = []\n for (const [id, flight] of router._flights ?? []) {\n if (!flight[2 /* leases */]) {\n router._flights!.delete(id)\n abort.push(flight[1 /* controller */])\n }\n }\n for (const controller of abort) {\n controller.abort()\n }\n }\n let reduced: ReducedLane | ControlOutcome\n try {\n const reduction = reduceLane(\n router,\n matched as ContextualizedLane,\n tasks,\n options[0 /* controller */],\n options[1 /* redirects */],\n settleTasks(tasks, failure, matched[2 /* background */]),\n options[8 /* onReady */],\n )\n if (matched[2 /* background */]?.length) {\n matched[3 /* backgroundSettlement */] = settleTasks(\n matched[2 /* background */],\n undefined,\n undefined,\n reduction.then(\n (foreground) =>\n isControl(foreground)\n ? 0\n : _getRenderedMatches(foreground[1 /* matches */]).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 /* controller */].signal,\n options[7 /* resolvedPrefix */] === reduced[1 /* matches */].length\n ? options[7 /* resolvedPrefix */]\n : 0,\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 =\n session?.[0 /* owner */][3 /* matches */][session[1 /* boundary */]]?.id\n if (session?.[0 /* owner */] !== tx) {\n if (\n session &&\n tx[3 /* matches */][session[1 /* boundary */]]?.id === sessionMatchId\n ) {\n session[0 /* owner */] = tx\n tookOver = true\n } else {\n clearTimeout(session?.[3 /* timer */])\n router._pending = session = undefined\n }\n }\n const matches = tx[3 /* matches */]\n const presented = router.stores.matches.get()\n let boundary = -1\n let delay: number | undefined\n let min!: number\n let component: unknown\n let presentedPending = false\n for (let index = 0; index < matches.length; index++) {\n const match = matches[index]!\n const success = match.status === 'success'\n presentedPending =\n presented[index]?.id === match.id &&\n presented[index]?.status === 'pending'\n if (success && !presentedPending) {\n continue\n }\n const route = getRoute(router, match as WorkMatch)\n delay =\n (success && presentedPending) || match.invalid\n ? 0\n : (route.options.pendingMs ?? router.options.defaultPendingMs)\n component =\n route.options.pendingComponent ??\n (router.options as any).defaultPendingComponent\n if (!component || typeof delay !== 'number' || delay === Infinity) {\n return\n }\n boundary = index\n min = route.options.pendingMinMs ?? router.options.defaultPendingMinMs ?? 0\n break\n }\n if (boundary < 0) {\n return\n }\n const matchId = matches[boundary]!.id\n if (\n !session ||\n session[1 /* boundary */] !== boundary ||\n sessionMatchId !== matchId\n ) {\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 /* timer */])\n router._pending = session = [\n tx,\n boundary,\n presentedPending ? Date.now() + min : tx[4 /* startedAt */] + delay!,\n undefined,\n presentedPending ? Promise.resolve(true) : undefined,\n component,\n ]\n }\n if (\n session[4 /* ack */] &&\n !tookOver &&\n session[5 /* component */] === component\n ) {\n return\n }\n session[5 /* component */] = component\n if (!session[4 /* ack */]) {\n clearTimeout(session[3 /* timer */])\n const remaining = session[2 /* deadline */] - Date.now()\n if (remaining > 0) {\n session[3 /* timer */] = setTimeout(\n () => offerPending(router, tx),\n remaining,\n )\n return\n }\n session[2 /* deadline */] = 0\n }\n const offered = matches.map((match) => ({\n ...match,\n _flight: undefined,\n }))\n offered[boundary]!.status = 'pending'\n const ack = router\n .startTransition(() => router.stores.setMatches(offered), offered)\n .then((rendered) => {\n if (\n rendered &&\n router._pending === session &&\n session[4 /* ack */] === ack &&\n !session[2 /* deadline */]\n ) {\n session[2 /* deadline */] = Date.now() + min\n }\n return rendered\n })\n session[4 /* ack */] = 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 /* owner */] === tx) {\n clearTimeout(session[3 /* timer */])\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 /* matches */])\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 /* matches */] = []\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 /* matches */] = []\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 /* matches */]\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 /* controller */].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 refresh = tx[6 /* refresh */]!\n const checkpoint: PublicationCheckpoint = {\n previousMatches: router._committed,\n previousPresentation: refresh[0 /* presentation */],\n previousCache: router._cache,\n commitPromise: router._commitPromise,\n published: false,\n }\n const commit = () => {\n finishPending(router, tx)\n refresh[2 /* rollback */] = rollback\n commitRefreshMatches(router, tx, lane[1 /* matches */], 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 (refresh[2 /* rollback */] === rollback) {\n refresh[2 /* rollback */] = 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 /* matches */])\n if (refresh[2 /* rollback */] === rollback) {\n refresh[2 /* rollback */] = undefined\n }\n if (checkpoint.published) {\n const handoff = refresh[1 /* handoff */]\n if (handoff && router._handoff === handoff) {\n handoff[1 /* finish */]()\n }\n if (router._tx === tx) {\n tx[6 /* refresh */] = 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 /* done */]\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 /* redirects */] + 1,\n } as any)\n}\n\nfunction restoreCommitted(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n): void {\n finishPending(router, tx)\n tx[0 /* controller */].abort()\n transferMatchResources(router, tx[3 /* matches */])\n tx[3 /* matches */] = []\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 /* index */]]!)\n next[task[0 /* index */]] = task[3 /* candidate */]\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 /* location */], next] as ContextualizedLane\n let reduced: ReducedLane | ControlOutcome\n try {\n reduced = await reduceLane(\n router,\n lane,\n tasks,\n tx[0 /* controller */],\n tx[1 /* redirects */],\n settlement,\n )\n } catch (cause) {\n transferMatchResources(router, next)\n throw cause\n }\n if (isControl(reduced)) {\n transferMatchResources(router, next)\n if (\n reduced[0 /* kind */] === REDIRECTED &&\n router._tx === tx &&\n router._committed === base\n ) {\n await followRedirect(router, tx, reduced[1 /* redirect */])\n }\n return\n }\n const projected = await projectLane(\n router,\n reduced,\n tx[0 /* controller */].signal,\n )\n if (router._tx !== tx || router._committed !== base) {\n transferMatchResources(router, projected[1 /* matches */])\n return\n }\n for (const match of projected[1 /* matches */] 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 /* matches */])\n transferMatchResources(router, base, projected[1 /* matches */])\n}\n\nasync function runClientTransaction(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n forceStaleReload: boolean,\n onReady?: () => void,\n sync?: boolean,\n resolvedPrefix?: number,\n): Promise<void> {\n const options: ExecuteLaneOptions = [\n tx[0 /* controller */],\n tx[1 /* redirects */],\n () => router._tx === tx && !!tx[3 /* matches */].length,\n router._committed,\n undefined,\n sync,\n forceStaleReload,\n resolvedPrefix,\n onReady,\n ]\n const result = await executeClientLane(\n router,\n tx[2 /* location */],\n tx[3 /* matches */],\n options,\n )\n\n if (isControl(result)) {\n if (result[0 /* kind */] === REDIRECTED && router._tx === tx) {\n finishPending(router, tx)\n transferMatchResources(router, tx[3 /* matches */])\n tx[3 /* matches */] = []\n if (router._tx === tx) {\n if (process.env.NODE_ENV !== 'production' && tx[6 /* refresh */]) {\n router._refreshNextLoad = true\n }\n await followRedirect(router, tx, result[1 /* redirect */])\n }\n } else {\n restoreCommitted(router, tx)\n }\n return\n }\n const pending = router._pending\n if (pending?.[0 /* owner */] === 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 /* timer */])\n if (pending[4 /* ack */]) {\n const signal = tx[0 /* controller */].signal\n let rendered = false\n try {\n rendered = await waitFor(pending[4 /* ack */], signal)\n } catch (cause) {\n if (cause !== signal) {\n throw cause\n }\n }\n if (\n rendered &&\n router._pending === pending &&\n pending[0 /* owner */] === tx\n ) {\n const remaining = pending[2 /* deadline */] - Date.now()\n if (remaining > 0) {\n try {\n await waitFor(\n new Promise<void>((resolve) => {\n pending[3 /* timer */] = setTimeout(resolve, remaining)\n }),\n signal,\n )\n } catch {}\n clearTimeout(pending[3 /* timer */])\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 /* location */]\n const changeInfo = getLocationChangeInfo(\n toLocation,\n router.stores.resolvedLocation.get(),\n )\n const background = result[2 /* background */]\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 /* matches */], 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 /* refresh */]\n ? await transitionRefresh(router, tx, result, changeInfo)\n : await router.startTransition(commit, result[1 /* matches */])\n if (\n process.env.NODE_ENV !== 'production' &&\n tx[6 /* refresh */] &&\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(\n router,\n tx,\n result[1 /* matches */],\n background,\n result[3 /* backgroundSettlement */]!,\n ).catch(console.error)\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 },\n): Promise<void> {\n let rematerialize = false\n if (process.env.NODE_ENV !== 'production') {\n router._tx?.[6 /* refresh */]?.[2 /* rollback */]?.()\n rematerialize = !!router._refreshNextLoad || !!router._tx?.[6 /* refresh */]\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 const handoff = router._handoff\n const hydrationController = rematerialize\n ? undefined\n : handoff?.[0 /* claim */]()\n const preflight = new AbortController()\n const previousPreflight = router._preflight\n router._preflight = preflight\n if (!rematerialize && !hydrationController) {\n handoff?.[1 /* finish */]()\n }\n previousPreflight?.abort()\n // The preflight controller is not exposed to route hooks. Every replacement\n // aborts its predecessor, so a live signal is the sole authority here.\n if (preflight.signal.aborted) {\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) {\n router.emit({ type: 'onBeforeLoad', ...changeInfo })\n }\n if (preflight.signal.aborted) {\n await awaitCurrent(router, previousOwner)\n return\n }\n const sameHref = previousLocation.href === location.href\n let matches: Array<AnyRouteMatch>\n let controller = preflight\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 (!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 const resolvedPrefix = hydrationController\n ? handoff![1 /* finish */](matches)\n : undefined\n if (resolvedPrefix) {\n controller = hydrationController!\n } else {\n hydrationController?.abort()\n }\n if (preflight.signal.aborted) {\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 ),\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 /* refresh */] = [refreshPresentation!, handoff]\n router._refreshNextLoad = undefined\n }\n router._tx = tx\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 /* controller */].abort()\n transferMatchResources(\n router,\n previousOwner[3 /* matches */],\n tx[3 /* matches */],\n true,\n )\n }\n if (router._tx !== tx) {\n transferMatchResources(router, tx[3 /* matches */])\n tx[3 /* matches */] = []\n await awaitCurrent(router, tx)\n return\n }\n router.batch(() => {\n router.stores.status.set('pending')\n router.stores.location.set(location)\n })\n // Cold loads have no committed UI to retain, but provisional not-found\n // matches must wait for lazy routes to place the final boundary.\n if (!resolvedLocation && !matches.some((match) => match._notFound)) {\n offerPending(router, tx)\n }\n try {\n await tx[5 /* done */]\n } finally {\n await awaitCurrent(router, tx)\n }\n}\n\nexport async function refreshClientRoute(\n router: CoordinatorRouter,\n): Promise<void> {\n router._tx?.[6 /* refresh */]?.[2 /* rollback */]?.()\n const pending = router._tx\n if (\n pending &&\n !pending[6 /* refresh */] &&\n router.stores.status.get() === 'pending'\n ) {\n await pending[5 /* done */]\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\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 if (\n process.env.NODE_ENV !== 'production' &&\n (router._refreshNextLoad || router._tx?.[6 /* refresh */])\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>\n try {\n matches = router.matchRoutes(location, {\n _controller: controller,\n })\n acquireMatchResources(matches)\n } catch (cause) {\n controller.abort()\n if (!isNotFound(cause)) {\n console.error(cause)\n }\n return\n }\n ;(router._preloads ??= new Map()).set(controller, matches)\n let active: boolean\n try {\n let result: LaneResult\n try {\n result = await executeClientLane(router, location, matches, [\n controller,\n redirects,\n // Preload lanes run to completion even when unrelated navigations commit:\n // finished work seeds the cache.\n () => true,\n base,\n true,\n ])\n } finally {\n active = router._preloads.delete(controller)\n transferMatchResources(router, matches)\n controller.abort()\n }\n if (!isControl(result)) {\n return result[1 /* matches */]\n }\n if (\n active &&\n result[0 /* kind */] === REDIRECTED &&\n !result[1 /* redirect */].options.reloadDocument\n ) {\n return preloadClientRoute(\n router,\n {\n ...result[1 /* redirect */].options,\n _fromLocation: location,\n },\n redirects + 1,\n )\n }\n } catch (cause) {\n if (!isNotFound(cause)) {\n console.error(cause)\n }\n }\n return\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 router.options.ssr = {\n nonce: (\n document.querySelector('meta[property=\"csp-nonce\"]') as\n | HTMLMetaElement\n | undefined\n )?.content,\n }\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 // Route context can abort this controller itself. Only a new slot owner\n // supersedes hydration.\n const isCurrent = () => router._preflight === controller\n\n let location!: AnyRouter['latestLocation']\n let candidates!: Array<AnyRouteMatch>\n let handoffHistoryHref!: string\n let handoffHistoryState: unknown\n try {\n await waitFor(\n router.options.hydrate?.(dehydratedRouter!.dehydratedData),\n controller.signal,\n )\n if (!isCurrent()) {\n return\n }\n // Hydration trusts transported context and beforeLoad. The raw history\n // entry owns the handoff; route structure is verified after rematching.\n const historyLocation = router.history.location\n handoffHistoryHref = historyLocation.href\n handoffHistoryState = historyLocation.state\n router.updateLatestLocation()\n location = router.latestLocation\n router.stores.location.set(location)\n candidates = router.matchRoutes(location, {\n _controller: controller,\n })\n } catch (cause) {\n if (isCurrent()) {\n router._preflight = undefined\n }\n controller.abort(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 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 return\n }\n if (!isCurrent()) {\n return\n }\n if (chunkFailure < committed.length) {\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 // `chunks.length` keeps the pre-retry committed length, so a smaller\n // `chunkFailure` is the exclusive bound of the verified context prefix.\n chunkFailure < chunks.length ? chunkFailure : verifiedAssetEnd,\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 // A verified descendant proves this data-only boundary was nonterminal.\n dataOnlyAssetEnd =\n boundary.ssr === 'data-only' && 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 const historyLocation = router.history.location\n return needsClientLoad &&\n !router._tx &&\n historyLocation.href === handoffHistoryHref &&\n historyLocation.state === handoffHistoryState &&\n router._committed === committedMatches &&\n committedMatches.length &&\n !controller.signal.aborted\n ? controller\n : undefined\n }\n const handoff: NonNullable<AnyRouter['_handoff']> = [\n claim,\n (matches) => {\n if (router._handoff !== handoff) {\n return\n }\n // `finish` is single-use. Consume the slot before validating or moving\n // resources so reentrant work cannot claim the same handoff.\n router._handoff = undefined\n const prefix = committedMatches.length\n if (\n !matches ||\n !claim() ||\n committedMatches.some((match, index) => match.id !== matches[index]?.id)\n ) {\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 = index > pendingBoundary! + 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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"}
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 { getLocationChangeInfo, runRouteLifecycle } from './router'\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(\n route: AnyRoute,\n onPendingReady?: () => void,\n): Promise<void> | undefined {\n const component = preloadComponent(route, 'component')\n const pending = preloadComponent(route, 'pendingComponent')\n const pendingReady =\n onPendingReady && pending ? pending.then(onPendingReady) : pending\n if (onPendingReady && !pending) {\n onPendingReady()\n }\n if (component && pendingReady) {\n return Promise.all([component, pendingReady]).then(() => {})\n }\n return component ?? pendingReady\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 onPendingReady?: () => void,\n): Promise<void> | undefined {\n const afterLazy = () =>\n componentType === false\n ? undefined\n : componentType\n ? preloadComponent(route, componentType)\n : loadComponents(route, onPendingReady)\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 | [kind: typeof SUCCESS, data: unknown]\n | [kind: typeof ERROR, error: unknown]\n | [kind: typeof NOT_FOUND, error: NotFoundError]\n | [kind: typeof REDIRECTED, redirect: AnyRedirect]\n | [kind: 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 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 and its optional hydration\n * handoff. While a publication awaits acknowledgement, its rollback lives\n * with the transaction that owns the publication.\n */\n refresh?: [\n presentation: Array<AnyRouteMatch>,\n handoff: NonNullable<AnyRouter['_handoff']> | undefined,\n rollback?: () => boolean,\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 /** Active speculative lanes retained for cancellation, invalidation, and cache clearing. */\n _preloads?: Map<AbortController, Array<AnyRouteMatch>>\n _refreshNextLoad?: boolean\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 chunkFailure: Promise<IndexedOutcome | undefined>,\n candidate?: WorkMatch,\n]\n\ntype BackgroundLoaderTask = [\n index: number,\n outcome: Promise<LoaderOutcome>,\n chunkFailure: 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 | [kind: typeof REDIRECTED, redirect: AnyRedirect]\n | [kind: typeof CANCELED]\n\ntype LaneResult = ProjectedLane | ControlOutcome\n\nfunction isControl(\n result: Lane<any> | ControlOutcome,\n): result is ControlOutcome {\n return typeof result[0 /* location or kind */] === '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 /* kind */] !== ERROR) {\n return outcome\n }\n try {\n route.options.onError?.(outcome[1 /* error */])\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 (\n options[0 /* controller */].signal.aborted ||\n !options[2 /* isCurrent */]()\n ) {\n options[0 /* controller */].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 planSuccessfulLane: () => void,\n retainedEnd: number,\n): Promise<IndexedOutcome | undefined> {\n const [location, matches] = lane\n const signal = options[0 /* controller */].signal\n const preload = !!options[4 /* preload */]\n for (let index = options[7 /* resolvedPrefix */] ?? 0; index < end; index++) {\n const match = matches[index]!\n const route = getRoute(router, match)\n\n match.abortController = options[0 /* controller */]\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 /* controller */],\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 /* isCurrent */]()) {\n options[0 /* controller */].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 // Retain only a success that is mounted through the same valid prefix.\n if (previousStatus === 'success' && index >= retainedEnd) {\n match.status = 'pending'\n }\n options[8 /* onReady */]?.()\n try {\n setFetching(router, match, 'beforeLoad', options[0 /* controller */])\n const result = await waitFor(beforeLoad(beforeLoadContext), signal)\n if (!options[2 /* isCurrent */]()) {\n options[0 /* controller */].abort()\n return [index, [CANCELED]]\n }\n const outcome = normalize(result, false, route.id)\n if (outcome[0 /* kind */] !== 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 /* controller */])\n }\n }\n\n // Let a synchronous lane claim predecessor flights before this frame yields.\n planSuccessfulLane()\n return\n}\n\nfunction releaseOwnedFlight(\n router: AnyRouter,\n match: WorkMatch,\n flight?: LoaderFlight,\n): AbortController | undefined {\n if (!flight || --flight[2 /* leases */]) {\n return\n }\n if (router._flights?.get(match.id) === flight) {\n const current = router._tx\n if (\n current &&\n !current[0 /* controller */].signal.aborted &&\n !(process.env.NODE_ENV !== 'production' && current[6 /* refresh */]) &&\n !current[3 /* matches */].includes(match) &&\n current[3 /* matches */].some((candidate) => candidate.id === match.id) &&\n current[3 /* matches */].some(\n (candidate) => candidate.isFetching === 'beforeLoad',\n )\n ) {\n // Keep work discoverable only while the current lane is still running\n // beforeLoad. Loader planning performs the matching zero-owner sweep.\n return\n }\n router._flights.delete(match.id)\n }\n return flight[1 /* controller */]\n}\n\nfunction releaseFlight(router: AnyRouter, match: WorkMatch): void {\n const flight = match._flight\n match._flight = undefined\n releaseOwnedFlight(router, match, flight)?.abort()\n}\n/**\n * Not passing in a `next` ownership recipient\n * is equivalent to discarding the match resources\n */\nfunction transferMatchResources(\n router: AnyRouter,\n previous: Array<AnyRouteMatch>,\n next?: Array<AnyRouteMatch>,\n deferSameIdFlight?: true,\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 if (\n deferSameIdFlight &&\n flight?.[2 /* leases */] === 1 &&\n router._flights?.get(match.id) === flight &&\n !(\n process.env.NODE_ENV !== 'production' && router._tx?.[6 /* refresh */]\n ) &&\n next?.some((candidate) => candidate.id === match.id)\n ) {\n // The successor has not made its same-ID reload decision yet.\n flight[2 /* leases */] = 0\n } else {\n const controller = releaseOwnedFlight(router, match, flight)\n if (controller) {\n abort.push(controller)\n }\n }\n }\n }\n for (const controller of abort) {\n controller.abort()\n }\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 /* leases */]++\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 /* controller */] !== 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 /* location */]\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 setFetching(router, match, 'loader', owner)\n try {\n if (!flight) {\n const controller = new AbortController()\n flight = [\n 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 // The registry controls discovery; leases keep current consumers\n // sharing the same terminal outcome.\n if (\n result[0 /* kind */] !== SUCCESS &&\n router._flights?.get(match.id) === flight\n ) {\n router._flights!.delete(match.id)\n if (!flight![2 /* leases */]) {\n controller.abort()\n }\n }\n return result[0 /* kind */] === ERROR && flight![2 /* leases */]\n ? normalizeError(route, result[1 /* error */])\n : result\n }),\n controller,\n 1,\n ]\n ;(router._flights ??= new Map()).set(match.id, flight)\n }\n match._flight = flight\n match.abortController = flight[1 /* controller */]\n return await waitFor(flight[0 /* outcome */], signal)\n } catch (cause) {\n if (cause !== signal) {\n throw cause\n }\n releaseFlight(router, match)\n return [CANCELED]\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 /* kind */] === SUCCESS) {\n match.loaderData = result[1 /* data */]\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 /* kind */] !== 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 /* leases */]++\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 /* kind */] === ERROR || outcome[0 /* kind */] === NOT_FOUND) {\n return {\n ...match,\n status: outcome[0 /* kind */] === ERROR ? 'error' : 'notFound',\n error: outcome[1 /* error */],\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 retainedEnd: number,\n): Promise<WorkMatch> {\n const match = lane[1 /* matches */][index]!\n const route = getRoute(router, match)\n const preload = !!options[4 /* preload */]\n const plannedCacheMatch = router._cache.get(match.id)\n let configured\n let reload = false\n let reloadFailure: LoaderOutcome | undefined\n try {\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 /* controller */],\n semanticParent,\n preload,\n ),\n )\n }\n if (!options[2 /* isCurrent */]()) {\n options[0 /* controller */].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 /* preload */] || 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 /* forceStaleReload */] ||\n match.cause === 'enter' ||\n options[3 /* base */].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 let donor =\n (!preload || route.options.preload !== false) &&\n routeLoader &&\n !(process.env.NODE_ENV !== 'production' && router._tx?.[6 /* refresh */])\n ? router._flights?.get(match.id)\n : undefined\n if (donor === match._flight || reloadFailure) {\n donor = undefined\n } else if (donor && !reload && !preload && configured === undefined) {\n // Normal cache policy accepts an already-running generation even when this\n // lane itself would not have started another loader.\n reload = true\n } else if (!reload) {\n donor = undefined\n }\n const background = !!(\n routeLoader &&\n reload &&\n match.status === 'success' &&\n !preload &&\n !options[5 /* sync */] &&\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 const onLazyReady =\n route.lazyFn && route._lazy !== true ? options[8 /* onReady */] : undefined\n if (loaded && !routeLoader) {\n match.invalid = false\n match.updatedAt = Date.now()\n }\n if (donor) {\n donor[2 /* leases */]++\n }\n if (blocking) {\n const acceptedFlight = match._flight\n match._flight = donor\n releaseOwnedFlight(router, match, acceptedFlight)?.abort()\n // A successful route without a loader has no blocking work to present. A\n // mounted success likewise remains renderable while its loader revalidates.\n if (match.status === 'success' && index >= retainedEnd) {\n match.status = 'pending'\n }\n options[8 /* onReady */]?.()\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 /* controller */],\n )\n const outcome = rawOutcome.then((result) => {\n if (blocking) {\n settleInto(match, result, preload)\n if (result[0 /* kind */] === SUCCESS) {\n // A settled generation can outlive its lane without keeping unresolved\n // navigation work alive. Refresh generations remain private for rollback.\n if (\n routeLoader &&\n !options[0 /* controller */].signal.aborted &&\n !(\n process.env.NODE_ENV !== 'production' &&\n !preload &&\n router._tx?.[6 /* refresh */]\n )\n ) {\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, undefined, onLazyReady)),\n options[0 /* controller */].signal,\n ).then(\n () => undefined,\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 /* kind */] === SUCCESS &&\n match.status === 'pending' &&\n options[2 /* isCurrent */]()\n ) {\n match.status = 'success'\n options[8 /* onReady */]?.()\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 /* controller */],\n ).then((result) => {\n match.isFetching = false\n settleInto(candidate, result, false)\n return result\n })\n ;(lane[2 /* background */] ??= []).push([\n index,\n backgroundOutcome,\n chunkFailure,\n candidate,\n ])\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 /* outcome */][1 /* error or redirect */] as\n | NotFoundError\n | undefined\n let index = cause?.routeId\n ? matches.findIndex((match) => match.routeId === cause.routeId)\n : (indexed?.[0 /* index */] ?? 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 /* background */]) {\n transferMatchResources(\n router,\n lane[2 /* background */].map((task) => task[3 /* candidate */]),\n )\n lane[2 /* background */] = 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 /* outcome */].then(async (outcome) => {\n const taskIndex = task[0 /* index */]\n if (gate && taskIndex >= (await gate)) {\n return\n }\n if (outcome[0 /* kind */] >= REDIRECTED) {\n throw [taskIndex, outcome] as IndexedOutcome\n }\n if (!loaderFailure && outcome[0 /* kind */] !== 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 /* index */] <= taskIndex) {\n return\n }\n return nextTask[1 /* outcome */].then((nextOutcome) => {\n if (nextOutcome[0 /* kind */] === REDIRECTED) {\n throw [\n nextTask[0 /* index */],\n nextOutcome,\n ] 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 /* matches */]\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 /* outcome */][0 /* kind */] === NOT_FOUND\n ? getNotFoundBoundary(router, matches, found, controller.signal)\n : found[0 /* index */]\n let readinessEnd = plannedBoundary < 0 ? matches.length : plannedBoundary\n\n if ((failure?.[1 /* outcome */][0 /* kind */] ?? 0) >= REDIRECTED) {\n readinessEnd = 0\n } else if (failure) {\n readinessEnd = failure[2 /* boundary */] ??= await boundaryOf(failure)\n for (const task of tasks) {\n if (task[0 /* index */] >= readinessEnd) {\n break\n }\n const outcome = await task[1 /* outcome */]\n // Presence means a loader previously succeeded, even with `undefined`.\n if (\n outcome[0 /* kind */] !== SUCCESS &&\n outcome[0 /* kind */] < REDIRECTED &&\n !('loaderData' in matches[task[0 /* index */]]!)\n ) {\n failure = [task[0 /* index */], outcome]\n readinessEnd = failure[2 /* boundary */] = await boundaryOf(failure)\n break\n }\n }\n }\n\n for (const task of tasks) {\n if (task[0 /* index */] >= readinessEnd) {\n break\n }\n const chunkFailure = await task[2 /* chunkFailure */]\n if (!chunkFailure) {\n continue\n }\n failure = chunkFailure\n break\n }\n\n if ((failure?.[1 /* outcome */][0 /* kind */] ?? 0) >= REDIRECTED) {\n const outcome = failure![1 /* outcome */]\n if (\n outcome[0 /* kind */] !== REDIRECTED ||\n outcome[1 /* redirect */].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 /* boundary */] ?? (await boundaryOf(failure)))\n : plannedBoundary\n if (boundary >= 0) {\n const outcome = failure?.[1 /* outcome */]\n const kind = outcome?.[0 /* kind */]\n const match = matches[boundary]!\n const cause = outcome?.[1 /* error or redirect */]\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 const route = getRoute(router, match)\n try {\n await waitFor<unknown>(\n outcome\n ? Promise.resolve().then(() =>\n loadRouteChunk(\n route,\n kind === ERROR ? 'errorComponent' : 'notFoundComponent',\n ),\n )\n : Promise.all([\n loadRouteChunk(route),\n loadRouteChunk(route, '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 /* outcome */]),\n ...tasks.map((task) => task[2 /* chunkFailure */]),\n ...(lane[2 /* background */] ?? []).map(\n (task) => task[1 /* outcome */],\n ),\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 /* matches */].length,\n): Promise<ProjectedLane> {\n const matches = lane[1 /* matches */]\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 const presented = router.stores.matches.get()\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 /* matches */],\n undefined,\n options[0 /* controller */].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 let retainedEnd = 0\n while (retainedEnd < end && retainedEnd !== plannedBoundary) {\n const match = matches[retainedEnd]!\n const committed = options[3 /* base */][retainedEnd]\n const visible = presented[retainedEnd]\n if (\n committed?.id !== match.id ||\n committed.status !== 'success' ||\n committed._notFound ||\n match.preload ||\n visible?.id !== match.id ||\n visible.status !== 'success' ||\n visible._notFound\n ) {\n break\n }\n retainedEnd++\n }\n const tasks: Array<LoaderTask> = []\n const start = options[7 /* resolvedPrefix */] ?? 0\n let semanticParent = start\n ? Promise.resolve(matched[1 /* matches */][start - 1]!)\n : undefined\n const planSuccessfulLane = () => {\n for (let index = start; index < end; index++) {\n if (options[0 /* controller */].signal.aborted) {\n break\n }\n semanticParent = createLoaderTask(\n router,\n matched as ContextualizedLane,\n index,\n tasks,\n semanticParent,\n options,\n retainedEnd,\n )\n }\n }\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(\n router,\n matched,\n options,\n end,\n planSuccessfulLane,\n retainedEnd,\n )\n if (failure) {\n options[5 /* sync */] = true\n end = failure[0 /* index */]\n if (failure[1 /* outcome */][0 /* kind */] === NOT_FOUND) {\n failure[2 /* boundary */] = await getNotFoundBoundary(\n router,\n matched[1 /* matches */],\n failure,\n options[0 /* controller */].signal,\n )\n end = Math.min(end, failure[2 /* boundary */] + 1)\n } else if (failure[1 /* outcome */][0 /* kind */] >= REDIRECTED) {\n end = 0\n }\n planSuccessfulLane()\n }\n if (options[2 /* isCurrent */]() && !options[4 /* preload */]) {\n const abort: Array<AbortController> = []\n for (const [id, flight] of router._flights ?? []) {\n if (!flight[2 /* leases */]) {\n router._flights!.delete(id)\n abort.push(flight[1 /* controller */])\n }\n }\n for (const controller of abort) {\n controller.abort()\n }\n }\n let reduced: ReducedLane | ControlOutcome\n try {\n const reduction = reduceLane(\n router,\n matched as ContextualizedLane,\n tasks,\n options[0 /* controller */],\n options[1 /* redirects */],\n settleTasks(tasks, failure, matched[2 /* background */]),\n options[8 /* onReady */],\n )\n if (matched[2 /* background */]?.length) {\n matched[3 /* backgroundSettlement */] = settleTasks(\n matched[2 /* background */],\n undefined,\n undefined,\n reduction.then(\n (foreground) =>\n isControl(foreground)\n ? 0\n : _getRenderedMatches(foreground[1 /* matches */]).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 /* controller */].signal,\n options[7 /* resolvedPrefix */] === reduced[1 /* matches */].length\n ? options[7 /* resolvedPrefix */]\n : 0,\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 =\n session?.[0 /* owner */][3 /* matches */][session[1 /* boundary */]]?.id\n if (session?.[0 /* owner */] !== tx) {\n if (\n session &&\n tx[3 /* matches */][session[1 /* boundary */]]?.id === sessionMatchId\n ) {\n session[0 /* owner */] = tx\n tookOver = true\n } else {\n clearTimeout(session?.[3 /* timer */])\n router._pending = session = undefined\n }\n }\n const matches = tx[3 /* matches */]\n const presented = router.stores.matches.get()\n let boundary = -1\n let delay: number | undefined\n let min!: number\n let component: unknown\n let presentedPending = false\n for (let index = 0; index < matches.length; index++) {\n const match = matches[index]!\n const success = match.status === 'success'\n presentedPending =\n presented[index]?.id === match.id &&\n presented[index]?.status === 'pending'\n if (success && !presentedPending) {\n continue\n }\n const route = getRoute(router, match as WorkMatch)\n delay =\n (success && presentedPending) || match.invalid\n ? 0\n : (route.options.pendingMs ?? router.options.defaultPendingMs)\n component =\n route.options.pendingComponent ??\n (router.options as any).defaultPendingComponent\n if (!component || typeof delay !== 'number' || delay === Infinity) {\n return\n }\n boundary = index\n min = route.options.pendingMinMs ?? router.options.defaultPendingMinMs ?? 0\n break\n }\n if (boundary < 0) {\n return\n }\n const matchId = matches[boundary]!.id\n if (\n !session ||\n session[1 /* boundary */] !== boundary ||\n sessionMatchId !== matchId\n ) {\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 /* timer */])\n router._pending = session = [\n tx,\n boundary,\n presentedPending ? Date.now() + min : tx[4 /* startedAt */] + delay!,\n undefined,\n presentedPending ? Promise.resolve(true) : undefined,\n component,\n ]\n }\n if (\n session[4 /* ack */] &&\n !tookOver &&\n session[5 /* component */] === component\n ) {\n return\n }\n session[5 /* component */] = component\n if (!session[4 /* ack */]) {\n clearTimeout(session[3 /* timer */])\n const remaining = session[2 /* deadline */] - Date.now()\n if (remaining > 0) {\n session[3 /* timer */] = setTimeout(\n () => offerPending(router, tx),\n remaining,\n )\n return\n }\n session[2 /* deadline */] = 0\n }\n const offered = matches.map((match) => ({\n ...match,\n _flight: undefined,\n }))\n offered[boundary]!.status = 'pending'\n const ack = router\n .startTransition(() => router.stores.setMatches(offered), offered)\n .then((rendered) => {\n if (\n rendered &&\n router._pending === session &&\n session[4 /* ack */] === ack &&\n !session[2 /* deadline */]\n ) {\n session[2 /* deadline */] = Date.now() + min\n }\n return rendered\n })\n session[4 /* ack */] = 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 /* owner */] === tx) {\n clearTimeout(session[3 /* timer */])\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 /* matches */])\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 /* matches */] = []\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 /* matches */] = []\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 /* matches */]\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 /* controller */].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 refresh = tx[6 /* refresh */]!\n const checkpoint: PublicationCheckpoint = {\n previousMatches: router._committed,\n previousPresentation: refresh[0 /* presentation */],\n previousCache: router._cache,\n commitPromise: router._commitPromise,\n published: false,\n }\n const commit = () => {\n finishPending(router, tx)\n refresh[2 /* rollback */] = rollback\n commitRefreshMatches(router, tx, lane[1 /* matches */], 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 (refresh[2 /* rollback */] === rollback) {\n refresh[2 /* rollback */] = 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 /* matches */])\n if (refresh[2 /* rollback */] === rollback) {\n refresh[2 /* rollback */] = undefined\n }\n if (checkpoint.published) {\n const handoff = refresh[1 /* handoff */]\n if (handoff && router._handoff === handoff) {\n handoff[1 /* finish */]()\n }\n if (router._tx === tx) {\n tx[6 /* refresh */] = 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 /* done */]\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 /* redirects */] + 1,\n } as any)\n}\n\nfunction restoreCommitted(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n): void {\n finishPending(router, tx)\n tx[0 /* controller */].abort()\n transferMatchResources(router, tx[3 /* matches */])\n tx[3 /* matches */] = []\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 /* index */]]!)\n next[task[0 /* index */]] = task[3 /* candidate */]\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 /* location */], next] as ContextualizedLane\n let reduced: ReducedLane | ControlOutcome\n try {\n reduced = await reduceLane(\n router,\n lane,\n tasks,\n tx[0 /* controller */],\n tx[1 /* redirects */],\n settlement,\n )\n } catch (cause) {\n transferMatchResources(router, next)\n throw cause\n }\n if (isControl(reduced)) {\n transferMatchResources(router, next)\n if (\n reduced[0 /* kind */] === REDIRECTED &&\n router._tx === tx &&\n router._committed === base\n ) {\n await followRedirect(router, tx, reduced[1 /* redirect */])\n }\n return\n }\n const projected = await projectLane(\n router,\n reduced,\n tx[0 /* controller */].signal,\n )\n if (router._tx !== tx || router._committed !== base) {\n transferMatchResources(router, projected[1 /* matches */])\n return\n }\n for (const match of projected[1 /* matches */] 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 /* matches */])\n transferMatchResources(router, base, projected[1 /* matches */])\n}\n\nasync function runClientTransaction(\n router: CoordinatorRouter,\n tx: LoadTransaction,\n forceStaleReload: boolean,\n onReady?: () => void,\n sync?: boolean,\n resolvedPrefix?: number,\n): Promise<void> {\n const options: ExecuteLaneOptions = [\n tx[0 /* controller */],\n tx[1 /* redirects */],\n () => router._tx === tx && !!tx[3 /* matches */].length,\n router._committed,\n undefined,\n sync,\n forceStaleReload,\n resolvedPrefix,\n onReady,\n ]\n const result = await executeClientLane(\n router,\n tx[2 /* location */],\n tx[3 /* matches */],\n options,\n )\n\n if (isControl(result)) {\n if (result[0 /* kind */] === REDIRECTED && router._tx === tx) {\n finishPending(router, tx)\n transferMatchResources(router, tx[3 /* matches */])\n tx[3 /* matches */] = []\n if (router._tx === tx) {\n if (process.env.NODE_ENV !== 'production' && tx[6 /* refresh */]) {\n router._refreshNextLoad = true\n }\n await followRedirect(router, tx, result[1 /* redirect */])\n }\n } else {\n restoreCommitted(router, tx)\n }\n return\n }\n const pending = router._pending\n if (pending?.[0 /* owner */] === 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 /* timer */])\n if (pending[4 /* ack */]) {\n const signal = tx[0 /* controller */].signal\n let rendered = false\n try {\n rendered = await waitFor(pending[4 /* ack */], signal)\n } catch (cause) {\n if (cause !== signal) {\n throw cause\n }\n }\n if (\n rendered &&\n router._pending === pending &&\n pending[0 /* owner */] === tx\n ) {\n const remaining = pending[2 /* deadline */] - Date.now()\n if (remaining > 0) {\n try {\n await waitFor(\n new Promise<void>((resolve) => {\n pending[3 /* timer */] = setTimeout(resolve, remaining)\n }),\n signal,\n )\n } catch {}\n clearTimeout(pending[3 /* timer */])\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 /* location */]\n const changeInfo = getLocationChangeInfo(\n toLocation,\n router.stores.resolvedLocation.get(),\n )\n const background = result[2 /* background */]\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 /* matches */], 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 /* refresh */]\n ? await transitionRefresh(router, tx, result, changeInfo)\n : await router.startTransition(commit, result[1 /* matches */])\n if (\n process.env.NODE_ENV !== 'production' &&\n tx[6 /* refresh */] &&\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(\n router,\n tx,\n result[1 /* matches */],\n background,\n result[3 /* backgroundSettlement */]!,\n ).catch(console.error)\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 },\n): Promise<void> {\n let rematerialize = false\n if (process.env.NODE_ENV !== 'production') {\n router._tx?.[6 /* refresh */]?.[2 /* rollback */]?.()\n rematerialize = !!router._refreshNextLoad || !!router._tx?.[6 /* refresh */]\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 const handoff = router._handoff\n const hydrationController = rematerialize\n ? undefined\n : handoff?.[0 /* claim */]()\n const preflight = new AbortController()\n const previousPreflight = router._preflight\n router._preflight = preflight\n if (!rematerialize && !hydrationController) {\n handoff?.[1 /* finish */]()\n }\n previousPreflight?.abort()\n // The preflight controller is not exposed to route hooks. Every replacement\n // aborts its predecessor, so a live signal is the sole authority here.\n if (preflight.signal.aborted) {\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) {\n router.emit({ type: 'onBeforeLoad', ...changeInfo })\n }\n if (preflight.signal.aborted) {\n await awaitCurrent(router, previousOwner)\n return\n }\n const sameHref = previousLocation.href === location.href\n let matches: Array<AnyRouteMatch>\n let controller = preflight\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 (!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 const resolvedPrefix = hydrationController\n ? handoff![1 /* finish */](matches)\n : undefined\n if (resolvedPrefix) {\n controller = hydrationController!\n } else {\n hydrationController?.abort()\n }\n if (preflight.signal.aborted) {\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 ),\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 /* refresh */] = [refreshPresentation!, handoff]\n router._refreshNextLoad = undefined\n }\n router._tx = tx\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 /* controller */].abort()\n transferMatchResources(\n router,\n previousOwner[3 /* matches */],\n tx[3 /* matches */],\n true,\n )\n }\n if (router._tx !== tx) {\n transferMatchResources(router, tx[3 /* matches */])\n tx[3 /* matches */] = []\n await awaitCurrent(router, tx)\n return\n }\n router.batch(() => {\n router.stores.status.set('pending')\n router.stores.location.set(location)\n })\n // Cold loads have no committed UI to retain, but provisional not-found\n // matches must wait for lazy routes to place the final boundary.\n if (!resolvedLocation && !matches.some((match) => match._notFound)) {\n offerPending(router, tx)\n }\n try {\n await tx[5 /* done */]\n } finally {\n await awaitCurrent(router, tx)\n }\n}\n\nexport async function refreshClientRoute(\n router: CoordinatorRouter,\n): Promise<void> {\n router._tx?.[6 /* refresh */]?.[2 /* rollback */]?.()\n const pending = router._tx\n if (\n pending &&\n !pending[6 /* refresh */] &&\n router.stores.status.get() === 'pending'\n ) {\n await pending[5 /* done */]\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\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 if (\n process.env.NODE_ENV !== 'production' &&\n (router._refreshNextLoad || router._tx?.[6 /* refresh */])\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>\n try {\n matches = router.matchRoutes(location, {\n _controller: controller,\n })\n acquireMatchResources(matches)\n } catch (cause) {\n controller.abort()\n if (!isNotFound(cause)) {\n console.error(cause)\n }\n return\n }\n ;(router._preloads ??= new Map()).set(controller, matches)\n let active: boolean\n try {\n let result: LaneResult\n try {\n result = await executeClientLane(router, location, matches, [\n controller,\n redirects,\n // Preload lanes run to completion even when unrelated navigations commit:\n // finished work seeds the cache.\n () => true,\n base,\n true,\n ])\n } finally {\n active = router._preloads.delete(controller)\n transferMatchResources(router, matches)\n controller.abort()\n }\n if (!isControl(result)) {\n return result[1 /* matches */]\n }\n if (\n active &&\n result[0 /* kind */] === REDIRECTED &&\n !result[1 /* redirect */].options.reloadDocument\n ) {\n return preloadClientRoute(\n router,\n {\n ...result[1 /* redirect */].options,\n _fromLocation: location,\n },\n redirects + 1,\n )\n }\n } catch (cause) {\n if (!isNotFound(cause)) {\n console.error(cause)\n }\n }\n return\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 router.options.ssr = {\n nonce: (\n document.querySelector('meta[property=\"csp-nonce\"]') as\n | HTMLMetaElement\n | undefined\n )?.content,\n }\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 // Route context can abort this controller itself. Only a new slot owner\n // supersedes hydration.\n const isCurrent = () => router._preflight === controller\n\n let location!: AnyRouter['latestLocation']\n let candidates!: Array<AnyRouteMatch>\n let handoffHistoryHref!: string\n let handoffHistoryState: unknown\n try {\n await waitFor(\n router.options.hydrate?.(dehydratedRouter!.dehydratedData),\n controller.signal,\n )\n if (!isCurrent()) {\n return\n }\n // Hydration trusts transported context and beforeLoad. The raw history\n // entry owns the handoff; route structure is verified after rematching.\n const historyLocation = router.history.location\n handoffHistoryHref = historyLocation.href\n handoffHistoryState = historyLocation.state\n router.updateLatestLocation()\n location = router.latestLocation\n router.stores.location.set(location)\n candidates = router.matchRoutes(location, {\n _controller: controller,\n })\n } catch (cause) {\n if (isCurrent()) {\n router._preflight = undefined\n }\n controller.abort(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 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 return\n }\n if (!isCurrent()) {\n return\n }\n if (chunkFailure < committed.length) {\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 // `chunks.length` keeps the pre-retry committed length, so a smaller\n // `chunkFailure` is the exclusive bound of the verified context prefix.\n chunkFailure < chunks.length ? chunkFailure : verifiedAssetEnd,\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 // A verified descendant proves this data-only boundary was nonterminal.\n dataOnlyAssetEnd =\n boundary.ssr === 'data-only' && 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 const historyLocation = router.history.location\n return needsClientLoad &&\n !router._tx &&\n historyLocation.href === handoffHistoryHref &&\n historyLocation.state === handoffHistoryState &&\n router._committed === committedMatches &&\n committedMatches.length &&\n !controller.signal.aborted\n ? controller\n : undefined\n }\n const handoff: NonNullable<AnyRouter['_handoff']> = [\n claim,\n (matches) => {\n if (router._handoff !== handoff) {\n return\n }\n // `finish` is single-use. Consume the slot before validating or moving\n // resources so reentrant work cannot claim the same handoff.\n router._handoff = undefined\n const prefix = committedMatches.length\n if (\n !matches ||\n !claim() ||\n committedMatches.some((match, index) => match.id !== matches[index]?.id)\n ) {\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 = index > pendingBoundary! + 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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"}