@tanstack/router-core 1.171.24 → 1.171.26

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.
@@ -37,10 +37,17 @@ declare const ERROR = 1;
37
37
  declare const NOT_FOUND = 2;
38
38
  declare const REDIRECTED = 3;
39
39
  declare const CANCELED = 4;
40
- type LoaderOutcome = [kind: typeof SUCCESS, data: unknown] | [kind: typeof ERROR, error: unknown] | [kind: typeof NOT_FOUND, error: NotFoundError] | [kind: typeof REDIRECTED, redirect: AnyRedirect] | [kind: typeof CANCELED];
40
+ type RedirectOutcome = [
41
+ kind: typeof REDIRECTED,
42
+ redirect: AnyRedirect,
43
+ location?: ParsedLocation
44
+ ];
45
+ type NonRedirectOutcome = [kind: typeof SUCCESS, data: unknown] | [kind: typeof ERROR, error: unknown] | [kind: typeof NOT_FOUND, error: NotFoundError] | [kind: typeof CANCELED];
46
+ type RawLoaderOutcome = NonRedirectOutcome | [kind: typeof REDIRECTED, redirect: AnyRedirect];
47
+ type LoaderOutcome = NonRedirectOutcome | RedirectOutcome;
41
48
  type IndexedOutcome = [index: number, outcome: LoaderOutcome, boundary?: number];
42
49
  export type LoaderFlight = [
43
- outcome: Promise<LoaderOutcome>,
50
+ outcome: Promise<RawLoaderOutcome>,
44
51
  controller: AbortController,
45
52
  leases: number
46
53
  ];
@@ -66,31 +73,25 @@ export type LoadTransaction = [
66
73
  startedAt: number,
67
74
  done: Promise<void>,
68
75
  /**
69
- * Dev-only HMR refresh mode. Presence is the mode flag; a refresh always
70
- * carries the presentation it started from and its optional hydration
71
- * handoff. While a publication awaits acknowledgement, its rollback lives
72
- * with the transaction that owns the publication.
76
+ * Dev-only HMR refresh mode. Presence forces successor rematerialization
77
+ * until this publication is acknowledged. The optional hydration handoff is
78
+ * retired when the refresh publishes.
73
79
  */
74
- refresh?: [
75
- presentation: Array<AnyRouteMatch>,
76
- handoff: NonNullable<AnyRouter['_handoff']> | undefined,
77
- rollback?: () => boolean
78
- ]
80
+ refresh?: [handoff: NonNullable<AnyRouter['_handoff']> | undefined]
79
81
  ];
80
82
  export type PendingSession = [
81
- owner: LoadTransaction,
82
- boundary: number,
83
+ generation: LoadTransaction,
84
+ boundaryId: string,
83
85
  /** Pending reveal time until acknowledged, then minimum-visible-until time. */
84
86
  deadline: number,
85
- timer?: ReturnType<typeof setTimeout>,
86
- ack?: Promise<boolean>,
87
+ revealTimer?: ReturnType<typeof setTimeout>,
88
+ ack?: Promise<boolean> | true,
87
89
  component?: unknown
88
90
  ];
89
91
  type CoordinatorRouter = AnyRouter & {
90
92
  /** Active speculative lanes retained for cancellation, invalidation, and cache clearing. */
91
93
  _preloads?: Map<AbortController, Array<AnyRouteMatch>>;
92
94
  _refreshNextLoad?: boolean;
93
- _cancelTransition?: () => void;
94
95
  };
95
96
  type BackgroundLoaderTask = [
96
97
  index: number,
@@ -100,14 +101,13 @@ type BackgroundLoaderTask = [
100
101
  ];
101
102
  export declare function waitFor<T>(value: T | PromiseLike<T>, signal: AbortSignal): Promise<T>;
102
103
  export declare function getRoute(router: AnyRouter, match: WorkMatch): AnyRoute;
103
- export declare function navigateFrom(router: AnyRouter, location: ParsedLocation): (opts: any) => Promise<void>;
104
104
  export declare function cacheLoaderMatch(router: CoordinatorRouter, match: SettledMatch, planned: AnyRouteMatch | undefined): void;
105
105
  export declare function projectLane(router: AnyRouter, lane: ReducedLane, signal: AbortSignal, start?: number, end?: number): Promise<ProjectedLane>;
106
106
  export declare function loadClientRoute(router: CoordinatorRouter, opts?: {
107
107
  sync?: boolean;
108
108
  }): Promise<void>;
109
109
  export declare function refreshClientRoute(router: CoordinatorRouter): Promise<void>;
110
- export declare function preloadClientRoute(router: CoordinatorRouter, opts: any, redirects?: number): Promise<Array<AnyRouteMatch> | undefined>;
110
+ export declare function preloadClientRoute(router: CoordinatorRouter, opts: any, redirects?: number, builtLocation?: ParsedLocation): Promise<Array<AnyRouteMatch> | undefined>;
111
111
  declare global {
112
112
  interface Window {
113
113
  [GLOBAL_TSR]?: TsrSsrGlobal;
@@ -19,15 +19,30 @@ function normalize(value, rejected) {
19
19
  if (rejected && typeof value?.then === "function") value = new Error("A Promise was thrown", { cause: value });
20
20
  return rejected ? [ERROR, value] : [SUCCESS, value];
21
21
  }
22
- function normalizeError(route, cause) {
22
+ function normalizeError(router, lane, route, cause, signal, notify = true) {
23
+ signal?.throwIfAborted();
23
24
  let outcome = normalize(cause, true);
24
- if (outcome[0] !== ERROR) return outcome;
25
+ if (outcome[0] !== ERROR) return materializeRedirect(router, lane, route, outcome, signal, notify);
25
26
  try {
26
27
  route.options.onError?.(outcome[1]);
27
28
  } catch (onErrorCause) {
28
29
  outcome = normalize(onErrorCause, true);
29
30
  }
30
- return outcome;
31
+ signal?.throwIfAborted();
32
+ return materializeRedirect(router, lane, route, outcome, signal, notify);
33
+ }
34
+ function materializeRedirect(router, lane, route, outcome, signal, notify = true) {
35
+ if (outcome[0] !== REDIRECTED) return outcome;
36
+ signal?.throwIfAborted();
37
+ try {
38
+ outcome[1].options._fromLocation = lane.location;
39
+ router.resolveRedirect(outcome[1]);
40
+ signal?.throwIfAborted();
41
+ return outcome;
42
+ } catch (cause) {
43
+ signal?.throwIfAborted();
44
+ return notify ? normalizeError(router, lane, route, cause, signal, false) : [ERROR, cause];
45
+ }
31
46
  }
32
47
  function maybe(value, cause) {
33
48
  if (cause !== void 0) return {
@@ -96,7 +111,7 @@ async function contextualize(router, lane, signal) {
96
111
  match.ssr = await resolveSsr(router, lane, index);
97
112
  } catch (cause) {
98
113
  signal?.throwIfAborted();
99
- failure = [index, stampNotFound(match, normalizeError(route, cause))];
114
+ failure = [index, stampNotFound(match, normalizeError(router, lane, route, cause, signal))];
100
115
  end = index;
101
116
  }
102
117
  signal?.throwIfAborted();
@@ -128,7 +143,7 @@ async function contextualize(router, lane, signal) {
128
143
  match.context = context;
129
144
  } catch (cause) {
130
145
  signal?.throwIfAborted();
131
- if (!failure) failure = [index, stampNotFound(match, normalizeError(route, cause))];
146
+ if (!failure) failure = [index, stampNotFound(match, normalizeError(router, lane, route, cause, signal))];
132
147
  end = index;
133
148
  break;
134
149
  }
@@ -136,7 +151,7 @@ async function contextualize(router, lane, signal) {
136
151
  if (failure) break;
137
152
  const validationError = match.paramsError ?? match.searchError;
138
153
  if (validationError !== void 0) {
139
- failure = [index, stampNotFound(match, normalizeError(route, validationError))];
154
+ failure = [index, stampNotFound(match, normalizeError(router, lane, route, validationError, signal))];
140
155
  end = index;
141
156
  break;
142
157
  }
@@ -163,7 +178,7 @@ async function contextualize(router, lane, signal) {
163
178
  try {
164
179
  const beforeLoadContext = await route.options.beforeLoad(options);
165
180
  signal?.throwIfAborted();
166
- const outcome = stampNotFound(match, normalize(beforeLoadContext, false));
181
+ const outcome = stampNotFound(match, materializeRedirect(router, lane, route, normalize(beforeLoadContext, false), signal));
167
182
  if (outcome[0] !== SUCCESS) {
168
183
  failure = [index, outcome];
169
184
  end = index;
@@ -177,7 +192,7 @@ async function contextualize(router, lane, signal) {
177
192
  parentContext = match.context;
178
193
  } catch (cause) {
179
194
  signal?.throwIfAborted();
180
- failure = [index, stampNotFound(match, normalizeError(route, cause))];
195
+ failure = [index, stampNotFound(match, normalizeError(router, lane, route, cause, signal))];
181
196
  end = index;
182
197
  break;
183
198
  }
@@ -214,8 +229,9 @@ function createLoaderTask(router, lane, index, tasks, signal) {
214
229
  const loader = typeof routeLoader === "function" ? routeLoader : routeLoader?.handler;
215
230
  if (!loader) outcome = Promise.resolve([SUCCESS, void 0]);
216
231
  else outcome = Promise.resolve().then(() => loader(getLoaderContext(router, lane, match, route, index, tasks))).then((result) => normalize(result, false), (cause) => normalize(cause, true)).then((result) => {
217
- if (result[0] !== REDIRECTED && (signal?.aborted || match.abortController.signal.reason === lane)) return [SKIPPED];
218
- if (result[0] === ERROR) result = normalizeError(route, result[1]);
232
+ if (signal?.aborted || match.abortController.signal.reason === lane) return [SKIPPED];
233
+ if (result[0] === ERROR) result = normalizeError(router, lane, route, result[1], signal);
234
+ else result = materializeRedirect(router, lane, route, result, signal);
219
235
  return stampNotFound(match, result);
220
236
  });
221
237
  }
@@ -248,9 +264,9 @@ async function getNotFoundBoundary(router, matches, indexed, signal, fallback =
248
264
  if (index < 0) index = 0;
249
265
  for (let candidate = index; candidate >= 0; candidate--) {
250
266
  const route = getRoute(router, matches[candidate]);
251
- const loading = require_load_client.loadRouteChunk(route, false);
252
- if (loading) try {
253
- await loading;
267
+ try {
268
+ const loading = require_load_client.loadRouteChunk(route, false);
269
+ if (loading) await loading;
254
270
  } catch {
255
271
  signal?.throwIfAborted();
256
272
  }
@@ -262,13 +278,6 @@ async function getNotFoundBoundary(router, matches, indexed, signal, fallback =
262
278
  function abortMatches(matches, start = 0, reason) {
263
279
  for (let index = start; index < matches.length; index++) matches[index].abortController.abort(reason);
264
280
  }
265
- function resolveServerRedirect(router, location, value) {
266
- value.options._fromLocation = location;
267
- return {
268
- type: "redirect",
269
- redirect: router.resolveRedirect(value)
270
- };
271
- }
272
281
  async function applyFailure(router, lane, indexed, signal) {
273
282
  if (!indexed) {
274
283
  const boundary = lane.matches.findIndex((match) => match._notFound);
@@ -330,14 +339,14 @@ async function loadNormalChunks(router, lane, end, signal) {
330
339
  signal?.throwIfAborted();
331
340
  }, (cause) => {
332
341
  signal?.throwIfAborted();
333
- return [index, stampNotFound(match, normalizeError(route, cause))];
342
+ return [index, stampNotFound(match, normalizeError(router, lane, route, cause, signal))];
334
343
  });
335
344
  chunk.catch(() => {});
336
345
  chunks.push(chunk);
337
346
  }
338
347
  } catch (cause) {
339
348
  signal?.throwIfAborted();
340
- chunks.push([index, stampNotFound(match, normalizeError(route, cause))]);
349
+ chunks.push([index, stampNotFound(match, normalizeError(router, lane, route, cause, signal))]);
341
350
  }
342
351
  }
343
352
  for (const chunk of chunks) {
@@ -449,7 +458,10 @@ async function executeServerLane(router, location, matchedMatches, signal) {
449
458
  signal?.throwIfAborted();
450
459
  if (control?.[1][0] === REDIRECTED) {
451
460
  abortMatches(lane.matches, 0, lane);
452
- return resolveServerRedirect(router, location, control[1][1]);
461
+ return {
462
+ type: "redirect",
463
+ redirect: control[1][1]
464
+ };
453
465
  }
454
466
  let failure = lane.failure ?? loaderFailure;
455
467
  const plannedBoundary = lane.matches.findIndex((match) => match._notFound);
@@ -472,7 +484,10 @@ async function executeServerLane(router, location, matchedMatches, signal) {
472
484
  if (requiredFailure) {
473
485
  if (requiredFailure[1][0] === REDIRECTED) {
474
486
  abortMatches(lane.matches);
475
- return resolveServerRedirect(router, location, requiredFailure[1][1]);
487
+ return {
488
+ type: "redirect",
489
+ redirect: requiredFailure[1][1]
490
+ };
476
491
  }
477
492
  failure = requiredFailure;
478
493
  }
@@ -519,13 +534,7 @@ async function loadServerRoute(router, opts) {
519
534
  state: true,
520
535
  _includeValidateSearch: true
521
536
  });
522
- if (next.publicHref !== canonical.publicHref) {
523
- const href = canonical.publicHref || "/";
524
- throw canonical.external ? require_redirect.redirect({ href }) : require_redirect.redirect({
525
- href,
526
- _builtLocation: canonical
527
- });
528
- }
537
+ if (next.publicHref !== canonical.publicHref) throw require_redirect.redirect({ href: canonical.publicHref || "/" });
529
538
  const changeInfo = require_router.getLocationChangeInfo(next, router.stores.resolvedLocation.get());
530
539
  router.emit({
531
540
  type: "onBeforeNavigate",
@@ -541,7 +550,11 @@ async function loadServerRoute(router, opts) {
541
550
  } catch (cause) {
542
551
  opts?._signal?.throwIfAborted();
543
552
  if (!require_redirect.isRedirect(cause)) throw cause;
544
- result = resolveServerRedirect(router, next, cause);
553
+ cause.options._fromLocation = next;
554
+ result = {
555
+ type: "redirect",
556
+ redirect: router.resolveRedirect(cause)
557
+ };
545
558
  }
546
559
  router._serverResult = result;
547
560
  router.batch(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"load-server.cjs","names":[],"sources":["../../src/load-server.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, redirect } from './redirect'\nimport { rootRouteId } from './root'\nimport { loadRouteChunk } from './load-client'\nimport { waitForReason } from './await-signal'\nimport { getLocationChangeInfo, runRouteLifecycle } from './router'\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 SsrContextOptions,\n} from './route'\nimport type { AnyRedirect } from './redirect'\nimport type { AnyRouter, SSROption } from './router'\n\ndeclare const serverLanePhase: unique symbol\n\ntype ServerLane<TPhase extends 'matched' | 'contextualized' | 'reduced'> = {\n readonly [serverLanePhase]: TPhase\n location: ParsedLocation\n matches: Array<AnyRouteMatch>\n}\n\ntype MatchedLane = ServerLane<'matched'>\n\ntype IndexedOutcome = [index: number, outcome: LoaderOutcome, boundary?: number]\n\ntype ContextualizedLane = ServerLane<'contextualized'> & {\n end: number\n failure?: IndexedOutcome\n}\n\ntype ReducedLane = ServerLane<'reduced'>\n\nconst SUCCESS = 0\nconst ERROR = 1\nconst NOT_FOUND = 2\nconst REDIRECTED = 3\nconst SKIPPED = 4\n\ntype LoaderOutcome =\n | [typeof SUCCESS, data: unknown]\n | [typeof ERROR, error: unknown]\n | [typeof NOT_FOUND, error: NotFoundError]\n | [typeof REDIRECTED, redirect: AnyRedirect]\n | [typeof SKIPPED]\n\ntype LoaderTask = {\n index: number\n outcome: Promise<LoaderOutcome>\n match: Promise<AnyRouteMatch>\n}\n\nexport type ServerLoadResult =\n | {\n type: 'render'\n status: 200 | 404 | 500\n matches: Array<AnyRouteMatch>\n }\n | { type: 'redirect'; redirect: AnyRedirect }\n\nfunction getRoute(router: AnyRouter, match: AnyRouteMatch): AnyRoute {\n return router.routesById[match.routeId]\n}\n\nfunction normalize(value: unknown, rejected: boolean): LoaderOutcome {\n if (isRedirect(value)) {\n return [REDIRECTED, value]\n }\n if (isNotFound(value)) {\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)\n if (outcome[0] !== ERROR) {\n return outcome\n }\n try {\n route.options.onError?.(outcome[1])\n } catch (onErrorCause) {\n outcome = normalize(onErrorCause, true)\n }\n return outcome\n}\n\nfunction maybe<TValue>(\n value: TValue,\n cause: unknown,\n): { status: 'success'; value: TValue } | { status: 'error'; error: unknown } {\n if (cause !== undefined) {\n return { status: 'error', error: cause }\n }\n return { status: 'success', value }\n}\n\nfunction navigateFrom(router: AnyRouter, location: ParsedLocation) {\n return (options: any) =>\n router.navigate({\n ...options,\n _fromLocation: location,\n })\n}\n\nfunction waitFor<T>(value: Promise<T>, signal?: AbortSignal): Promise<T> {\n return signal ? waitForReason(value, signal) : value\n}\n\nasync function resolveSsr(\n router: AnyRouter,\n lane: MatchedLane,\n index: number,\n): Promise<SSROption> {\n const match = lane.matches[index]!\n const route = getRoute(router, match)\n const parentSsr = lane.matches[index - 1]?.ssr\n\n if (router.isShell()) {\n return route.id === rootRouteId\n }\n if (parentSsr === false) {\n return false\n }\n\n const inherit = (value: SSROption): SSROption => {\n return value === true && parentSsr === 'data-only' ? 'data-only' : value\n }\n const defaultSsr = router.options.defaultSsr ?? true\n const inheritedDefault = inherit(defaultSsr)\n // A functional override can fail. Establish the inherited policy first so\n // the selected error boundary retains the route's actual renderability.\n match.ssr = inheritedDefault\n const option = route.options.ssr\n if (option === undefined) {\n return inheritedDefault\n }\n if (typeof option !== 'function') {\n return inherit(option)\n }\n\n const context: SsrContextOptions<any, any, any> = {\n search: maybe(match.search, match.searchError),\n params: maybe(match.params, match.paramsError),\n location: lane.location,\n matches: lane.matches.map((candidate) => ({\n index: candidate.index,\n pathname: candidate.pathname,\n fullPath: candidate.fullPath,\n staticData: candidate.staticData,\n id: candidate.id,\n routeId: candidate.routeId,\n search: maybe(candidate.search, candidate.searchError),\n params: maybe(candidate.params, candidate.paramsError),\n ssr: candidate.ssr,\n })),\n }\n return inherit((await option(context)) ?? defaultSsr)\n}\n\nfunction stampNotFound(\n match: AnyRouteMatch,\n outcome: LoaderOutcome,\n): LoaderOutcome {\n if (outcome[0] === NOT_FOUND && !outcome[1].routeId) {\n outcome[1].routeId = match.routeId\n }\n return outcome\n}\n\nasync function contextualize(\n router: AnyRouter,\n lane: MatchedLane,\n signal?: AbortSignal,\n): Promise<ContextualizedLane> {\n const globalBoundary = lane.matches.findIndex((match) => match._notFound)\n let end = globalBoundary < 0 ? lane.matches.length : globalBoundary + 1\n let failure: IndexedOutcome | undefined\n let parentContext: Record<string, unknown> = {\n ...(router.options.context ?? {}),\n }\n\n for (let index = 0; index < end; index++) {\n const match = lane.matches[index]!\n const route = getRoute(router, match)\n try {\n match.ssr = await resolveSsr(router, lane, index)\n } catch (cause) {\n signal?.throwIfAborted()\n failure = [index, stampNotFound(match, normalizeError(route, cause))]\n end = index\n }\n signal?.throwIfAborted()\n if (failure?.[1][0] === REDIRECTED) {\n break\n }\n\n match.__beforeLoadContext = undefined\n let context = parentContext\n try {\n let routeContext\n if (route.options.context) {\n const routeContextOptions: RouteContextOptions<\n any,\n any,\n any,\n any,\n any\n > = {\n deps: match.loaderDeps,\n params: match.params,\n context: parentContext,\n location: lane.location,\n navigate: navigateFrom(router, lane.location),\n buildLocation: router.buildLocation,\n cause: match.cause,\n abortController: match.abortController,\n preload: false,\n matches: lane.matches,\n routeId: route.id,\n }\n routeContext = route.options.context(routeContextOptions) ?? undefined\n }\n context = {\n ...parentContext,\n ...routeContext,\n }\n match.context = context\n } catch (cause) {\n signal?.throwIfAborted()\n if (!failure) {\n failure = [index, stampNotFound(match, normalizeError(route, cause))]\n }\n end = index\n break\n }\n signal?.throwIfAborted()\n if (failure) {\n break\n }\n const validationError = match.paramsError ?? match.searchError\n if (validationError !== undefined) {\n failure = [\n index,\n stampNotFound(match, normalizeError(route, validationError)),\n ]\n end = index\n break\n }\n signal?.throwIfAborted()\n\n if (match.ssr === false || !route.options.beforeLoad) {\n parentContext = context\n continue\n }\n\n const abortController = match.abortController\n const options: BeforeLoadContextOptions<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n > = {\n search: match.search,\n abortController,\n params: match.params,\n preload: false,\n context,\n location: lane.location,\n navigate: navigateFrom(router, lane.location),\n buildLocation: router.buildLocation,\n cause: match.cause,\n matches: lane.matches,\n routeId: route.id,\n ...router.options.additionalContext,\n }\n\n try {\n const beforeLoadContext = await route.options.beforeLoad(options)\n signal?.throwIfAborted()\n const outcome = stampNotFound(match, normalize(beforeLoadContext, false))\n if (outcome[0] !== SUCCESS) {\n failure = [index, outcome]\n end = index\n break\n }\n match.__beforeLoadContext = beforeLoadContext\n match.context = {\n ...context,\n ...beforeLoadContext,\n }\n parentContext = match.context\n } catch (cause) {\n signal?.throwIfAborted()\n failure = [index, stampNotFound(match, normalizeError(route, cause))]\n end = index\n break\n }\n }\n\n return {\n location: lane.location,\n matches: lane.matches,\n end,\n failure,\n } as ContextualizedLane\n}\n\nfunction getLoaderContext(\n router: AnyRouter,\n lane: ContextualizedLane,\n match: AnyRouteMatch,\n route: AnyRoute,\n index: number,\n tasks: Array<LoaderTask>,\n): LoaderFnContext {\n return {\n params: match.params,\n deps: match.loaderDeps,\n preload: false,\n parentMatchPromise: tasks[index - 1]?.match,\n abortController: match.abortController,\n context: match.context,\n location: lane.location,\n navigate: navigateFrom(router, lane.location),\n cause: match.cause,\n route,\n ...router.options.additionalContext,\n }\n}\n\nfunction createLoaderTask(\n router: AnyRouter,\n lane: ContextualizedLane,\n index: number,\n tasks: Array<LoaderTask>,\n signal?: AbortSignal,\n): LoaderTask {\n const match = lane.matches[index]!\n const route = getRoute(router, match)\n let outcome: Promise<LoaderOutcome>\n\n if (match.ssr === false) {\n outcome = Promise.resolve<LoaderOutcome>([SKIPPED])\n } else {\n const routeLoader = route.options.loader\n const loader =\n typeof routeLoader === 'function' ? routeLoader : routeLoader?.handler\n if (!loader) {\n outcome = Promise.resolve<LoaderOutcome>([SUCCESS, undefined])\n } else {\n outcome = Promise.resolve()\n .then(() =>\n loader(getLoaderContext(router, lane, match, route, index, tasks)),\n )\n .then(\n (result) => normalize(result, false),\n (cause) => normalize(cause, true),\n )\n .then((result): LoaderOutcome => {\n if (\n result[0] !== REDIRECTED &&\n (signal?.aborted || match.abortController.signal.reason === lane)\n ) {\n return [SKIPPED]\n }\n if (result[0] === ERROR) {\n result = normalizeError(route, result[1])\n }\n return stampNotFound(match, result)\n })\n }\n }\n\n const parentMatch = outcome.then((result) => {\n const snapshot = { ...match }\n if (result[0] === SUCCESS) {\n snapshot.loaderData = result[1]\n snapshot.status = 'success'\n snapshot.error = undefined\n snapshot.invalid = false\n snapshot.isFetching = false\n } else if (result[0] === ERROR) {\n snapshot.status = 'error'\n snapshot.error = result[1]\n } else if (result[0] === NOT_FOUND) {\n snapshot.status = 'notFound'\n snapshot.error = result[1]\n }\n return snapshot\n })\n\n return { index, outcome, match: parentMatch }\n}\n\nasync function getNotFoundBoundary(\n router: AnyRouter,\n matches: Array<AnyRouteMatch>,\n indexed: IndexedOutcome | undefined,\n signal?: AbortSignal,\n fallback = 0,\n): Promise<number> {\n const cause = indexed?.[1][1] as NotFoundError | undefined\n let index = cause?.routeId\n ? matches.findIndex((match) => match.routeId === cause.routeId)\n : (indexed?.[0] ?? matches.length - 1)\n if (index < 0) {\n index = 0\n }\n for (let candidate = index; candidate >= 0; candidate--) {\n const route = getRoute(router, matches[candidate]!)\n const loading = loadRouteChunk(route, false)\n if (loading) {\n try {\n await loading\n } catch {\n signal?.throwIfAborted()\n }\n }\n signal?.throwIfAborted()\n if (route.options.notFoundComponent) {\n return candidate\n }\n }\n return cause?.routeId ? index : fallback\n}\n\nfunction abortMatches(\n matches: Array<AnyRouteMatch>,\n start = 0,\n reason?: unknown,\n): void {\n for (let index = start; index < matches.length; index++) {\n matches[index]!.abortController.abort(reason)\n }\n}\n\nfunction resolveServerRedirect(\n router: AnyRouter,\n location: ParsedLocation,\n value: AnyRedirect,\n): ServerLoadResult {\n value.options._fromLocation = location\n return { type: 'redirect', redirect: router.resolveRedirect(value) }\n}\n\nasync function applyFailure(\n router: AnyRouter,\n lane: ContextualizedLane,\n indexed: IndexedOutcome | undefined,\n signal?: AbortSignal,\n): Promise<{ status: 200 | 404 | 500; boundary?: number; kind?: number }> {\n if (!indexed) {\n const boundary = lane.matches.findIndex((match) => match._notFound)\n if (boundary >= 0) {\n abortMatches(lane.matches, boundary + 1)\n return { status: 404, boundary, kind: NOT_FOUND }\n }\n return { status: 200 }\n }\n\n const [index, outcome] = indexed\n if (outcome[0] === ERROR) {\n const match = lane.matches[index]!\n match._notFound = undefined\n match.status = 'error'\n match.error = outcome[1]\n match.isFetching = false\n abortMatches(lane.matches, index + 1)\n return { status: 500, boundary: index, kind: ERROR }\n }\n\n const boundary =\n indexed[2] ??\n (await getNotFoundBoundary(router, lane.matches, indexed, signal))\n const match = lane.matches[boundary]!\n const cause = outcome[1] as NotFoundError\n cause.routeId = match.routeId\n match._notFound = undefined\n if (match.routeId === router.routeTree.id) {\n match.status = 'success'\n match._notFound = true\n match.error = cause\n } else {\n match.status = 'notFound'\n match.error = cause\n }\n match.isFetching = false\n abortMatches(lane.matches, boundary + 1)\n return { status: 404, boundary, kind: NOT_FOUND }\n}\n\nasync function loadNormalChunks(\n router: AnyRouter,\n lane: ContextualizedLane,\n end: number,\n signal?: AbortSignal,\n): Promise<IndexedOutcome | undefined> {\n const chunks: Array<IndexedOutcome | Promise<IndexedOutcome | undefined>> = []\n for (let index = 0; index < lane.matches.length; index++) {\n const match = lane.matches[index]!\n if (index >= end || match.ssr !== true || match.status !== 'success') {\n continue\n }\n const route = getRoute(router, match)\n try {\n const loading = loadRouteChunk(route)\n if (loading) {\n const chunk = loading.then(\n () => {\n signal?.throwIfAborted()\n return undefined\n },\n (cause) => {\n signal?.throwIfAborted()\n return [\n index,\n stampNotFound(match, normalizeError(route, cause)),\n ] as IndexedOutcome\n },\n )\n // Route-order reduction can return before later chunks settle.\n void chunk.catch(() => {})\n chunks.push(chunk)\n }\n } catch (cause) {\n signal?.throwIfAborted()\n chunks.push([index, stampNotFound(match, normalizeError(route, cause))])\n }\n }\n for (const chunk of chunks) {\n const indexed = Array.isArray(chunk) ? chunk : await chunk\n if (indexed) {\n return indexed\n }\n }\n return undefined\n}\n\nasync function projectLane(\n router: AnyRouter,\n lane: ReducedLane,\n signal?: AbortSignal,\n): Promise<void> {\n for (const match of lane.matches) {\n const routeOptions = getRoute(router, match).options\n if (routeOptions.head || routeOptions.scripts || routeOptions.headers) {\n const context = {\n ssr: router.options.ssr,\n matches: lane.matches,\n match,\n params: match.params,\n loaderData: match.loaderData,\n }\n try {\n const [head, scripts, headers] = await Promise.all([\n routeOptions.head?.(context),\n routeOptions.scripts?.(context),\n routeOptions.headers?.(context),\n ])\n signal?.throwIfAborted()\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 match.headers = headers\n } catch (cause) {\n signal?.throwIfAborted()\n console.error(cause)\n }\n }\n if (match.ssr === false || match.status !== 'success' || match._notFound) {\n break\n }\n }\n}\n\nasync function executeServerLane(\n router: AnyRouter,\n location: ParsedLocation,\n matchedMatches: Array<AnyRouteMatch>,\n signal?: AbortSignal,\n): Promise<ServerLoadResult> {\n const matched = {\n location,\n matches: matchedMatches.map((match) => ({\n ...match,\n __beforeLoadContext: undefined,\n context: {},\n isFetching: false,\n abortController: new AbortController(),\n })),\n } as MatchedLane\n const abortLane = () => abortMatches(matched.matches, 0, signal?.reason)\n if (signal?.aborted) {\n abortLane()\n signal.throwIfAborted()\n }\n signal?.addEventListener('abort', abortLane, { once: true })\n\n try {\n const plannedGlobalBoundary = matched.matches.findIndex(\n (match) => match._notFound,\n )\n if (router.options.notFoundMode !== 'root' && plannedGlobalBoundary >= 0) {\n const boundary = await getNotFoundBoundary(\n router,\n matched.matches,\n undefined,\n signal,\n plannedGlobalBoundary,\n )\n if (boundary !== plannedGlobalBoundary) {\n matched.matches[plannedGlobalBoundary]!._notFound = undefined\n matched.matches[boundary]!._notFound = true\n }\n }\n const lane = await contextualize(router, matched, signal)\n signal?.throwIfAborted()\n\n let loaderEnd = lane.end\n if (lane.failure?.[1][0] === REDIRECTED) {\n loaderEnd = 0\n } else if (lane.failure?.[1][0] === NOT_FOUND) {\n lane.failure[2] = await getNotFoundBoundary(\n router,\n lane.matches,\n lane.failure,\n signal,\n )\n loaderEnd = Math.min(loaderEnd, lane.failure[2] + 1)\n }\n\n const tasks: Array<LoaderTask> = []\n for (let index = 0; index < loaderEnd; index++) {\n const task = createLoaderTask(router, lane, index, tasks, signal)\n tasks.push(task)\n }\n\n let loaderFailure: IndexedOutcome | undefined\n let control = lane.failure?.[1][0] === REDIRECTED ? lane.failure : undefined\n try {\n await Promise.all(\n tasks.map((task) =>\n task.outcome.then((loadedOutcome) => {\n const match = lane.matches[task.index]!\n const outcome = loadedOutcome\n if (outcome[0] === SUCCESS) {\n match.loaderData = outcome[1]\n match.status = 'success'\n match.error = undefined\n match.invalid = false\n match.isFetching = false\n match.updatedAt = Date.now()\n } else if (outcome[0] === REDIRECTED) {\n control = [task.index, outcome]\n throw control\n } else {\n // A selective-SSR skip must stay pending for hydration. Every\n // settled server attempt is otherwise renderable unless\n // reduction selects it as the lane's terminal failure.\n if (match.ssr !== false) {\n match.status = 'success'\n match.error = undefined\n match.invalid = true\n match.isFetching = false\n }\n if (!loaderFailure && outcome[0] !== SKIPPED) {\n loaderFailure = [task.index, outcome]\n }\n }\n }),\n ),\n )\n } catch (cause) {\n if (!Array.isArray(cause)) {\n throw cause\n }\n control = cause as IndexedOutcome\n }\n signal?.throwIfAborted()\n\n if (control?.[1][0] === REDIRECTED) {\n abortMatches(lane.matches, 0, lane)\n return resolveServerRedirect(router, location, control[1][1])\n }\n\n let failure = lane.failure ?? loaderFailure\n const plannedBoundary = lane.matches.findIndex((match) => match._notFound)\n let readinessEnd: number\n if (failure) {\n const outcomeEnd = (failure[2] ??=\n failure[1][0] === NOT_FOUND\n ? await getNotFoundBoundary(router, lane.matches, failure, signal)\n : failure[0])\n for (const task of tasks) {\n if (task.index >= outcomeEnd) {\n break\n }\n const outcome = await task.outcome\n // Presence means a loader previously succeeded, even with `undefined`.\n if (\n outcome[0] !== SUCCESS &&\n outcome[0] < REDIRECTED &&\n !('loaderData' in lane.matches[task.index]!)\n ) {\n failure = [task.index, outcome]\n failure[2] =\n outcome[0] === NOT_FOUND\n ? await getNotFoundBoundary(router, lane.matches, failure, signal)\n : task.index\n break\n }\n }\n readinessEnd = failure[2]\n } else {\n readinessEnd = plannedBoundary < 0 ? lane.matches.length : plannedBoundary\n }\n const requiredFailure = await loadNormalChunks(\n router,\n lane,\n readinessEnd,\n signal,\n )\n signal?.throwIfAborted()\n if (requiredFailure) {\n if (requiredFailure[1][0] === REDIRECTED) {\n abortMatches(lane.matches)\n return resolveServerRedirect(router, location, requiredFailure[1][1])\n }\n failure = requiredFailure\n }\n\n const terminal = await applyFailure(router, lane, failure, signal)\n if (terminal.boundary !== undefined) {\n const match = lane.matches[terminal.boundary]!\n if (match.ssr === true) {\n const route = getRoute(router, match)\n try {\n if (terminal.kind === ERROR) {\n await loadRouteChunk(route, 'errorComponent')\n } else if (match._notFound) {\n await Promise.all([\n loadRouteChunk(route),\n loadRouteChunk(route, 'notFoundComponent'),\n ])\n } else {\n await loadRouteChunk(route, 'notFoundComponent')\n }\n } catch {}\n signal?.throwIfAborted()\n }\n }\n\n signal?.throwIfAborted()\n await projectLane(\n router,\n {\n location: lane.location,\n matches: lane.matches,\n } as ReducedLane,\n signal,\n )\n signal?.throwIfAborted()\n router.serverSsr?.onCleanup(abortLane)\n return { type: 'render', status: terminal.status, matches: lane.matches }\n } finally {\n signal?.removeEventListener('abort', abortLane)\n }\n}\n\ntype ServerLoadOptions = NonNullable<Parameters<AnyRouter['load']>[0]> & {\n _signal?: AbortSignal\n}\n\nexport async function loadServerRoute(\n router: AnyRouter,\n opts?: ServerLoadOptions,\n): Promise<void> {\n router.updateLatestLocation()\n const next = router.latestLocation\n const previous = router._committed\n let result: ServerLoadResult\n try {\n const canonical = router.buildLocation({\n to: next.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n if (next.publicHref !== canonical.publicHref) {\n const href = canonical.publicHref || '/'\n throw canonical.external\n ? redirect({ href })\n : redirect({ href, _builtLocation: canonical })\n }\n\n const fromLocation = router.stores.resolvedLocation.get()\n const changeInfo = getLocationChangeInfo(next, fromLocation)\n router.emit({ type: 'onBeforeNavigate', ...changeInfo })\n router.emit({ type: 'onBeforeLoad', ...changeInfo })\n opts?._signal?.throwIfAborted()\n result = await waitFor(\n executeServerLane(router, next, router.matchRoutes(next), opts?._signal),\n opts?._signal,\n )\n opts?._signal?.throwIfAborted()\n } catch (cause) {\n opts?._signal?.throwIfAborted()\n if (!isRedirect(cause)) {\n throw cause\n }\n result = resolveServerRedirect(router, next, cause)\n }\n\n router._serverResult = result\n router.batch(() => {\n router.stores.location.set(next)\n router.stores.status.set('idle')\n if (result.type === 'render') {\n router.stores.setMatches(result.matches)\n router.stores.resolvedLocation.set(next)\n }\n })\n if (result.type === 'render') {\n router._committed = result.matches\n runRouteLifecycle(router, previous, result.matches)\n }\n router._commitPromise?.resolve()\n router._commitPromise = undefined\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"load-server.cjs","names":[],"sources":["../../src/load-server.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, redirect } from './redirect'\nimport { rootRouteId } from './root'\nimport { loadRouteChunk } from './load-client'\nimport { waitForReason } from './await-signal'\nimport { getLocationChangeInfo, runRouteLifecycle } from './router'\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 SsrContextOptions,\n} from './route'\nimport type { AnyRedirect } from './redirect'\nimport type { AnyRouter, SSROption } from './router'\n\ndeclare const serverLanePhase: unique symbol\n\ntype ServerLane<TPhase extends 'matched' | 'contextualized' | 'reduced'> = {\n readonly [serverLanePhase]: TPhase\n location: ParsedLocation\n matches: Array<AnyRouteMatch>\n}\n\ntype MatchedLane = ServerLane<'matched'>\n\ntype IndexedOutcome = [index: number, outcome: LoaderOutcome, boundary?: number]\n\ntype ContextualizedLane = ServerLane<'contextualized'> & {\n end: number\n failure?: IndexedOutcome\n}\n\ntype ReducedLane = ServerLane<'reduced'>\n\nconst SUCCESS = 0\nconst ERROR = 1\nconst NOT_FOUND = 2\nconst REDIRECTED = 3\nconst SKIPPED = 4\n\ntype LoaderOutcome =\n | [typeof SUCCESS, data: unknown]\n | [typeof ERROR, error: unknown]\n | [typeof NOT_FOUND, error: NotFoundError]\n | [typeof REDIRECTED, redirect: AnyRedirect]\n | [typeof SKIPPED]\n\ntype LoaderTask = {\n index: number\n outcome: Promise<LoaderOutcome>\n match: Promise<AnyRouteMatch>\n}\n\nexport type ServerLoadResult =\n | {\n type: 'render'\n status: 200 | 404 | 500\n matches: Array<AnyRouteMatch>\n }\n | { type: 'redirect'; redirect: AnyRedirect }\n\nfunction getRoute(router: AnyRouter, match: AnyRouteMatch): AnyRoute {\n return router.routesById[match.routeId]\n}\n\nfunction normalize(value: unknown, rejected: boolean): LoaderOutcome {\n if (isRedirect(value)) {\n return [REDIRECTED, value]\n }\n if (isNotFound(value)) {\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(\n router: AnyRouter,\n lane: { location: ParsedLocation },\n route: AnyRoute,\n cause: unknown,\n signal?: AbortSignal,\n notify = true,\n): LoaderOutcome {\n signal?.throwIfAborted()\n let outcome = normalize(cause, true)\n if (outcome[0] !== ERROR) {\n return materializeRedirect(router, lane, route, outcome, signal, notify)\n }\n try {\n route.options.onError?.(outcome[1])\n } catch (onErrorCause) {\n outcome = normalize(onErrorCause, true)\n }\n signal?.throwIfAborted()\n return materializeRedirect(router, lane, route, outcome, signal, notify)\n}\n\nfunction materializeRedirect(\n router: AnyRouter,\n lane: { location: ParsedLocation },\n route: AnyRoute,\n outcome: LoaderOutcome,\n signal?: AbortSignal,\n notify = true,\n): LoaderOutcome {\n if (outcome[0] !== REDIRECTED) {\n return outcome\n }\n signal?.throwIfAborted()\n try {\n outcome[1].options._fromLocation = lane.location\n router.resolveRedirect(outcome[1])\n signal?.throwIfAborted()\n return outcome\n } catch (cause) {\n signal?.throwIfAborted()\n return notify\n ? normalizeError(router, lane, route, cause, signal, false)\n : [ERROR, cause]\n }\n}\n\nfunction maybe<TValue>(\n value: TValue,\n cause: unknown,\n): { status: 'success'; value: TValue } | { status: 'error'; error: unknown } {\n if (cause !== undefined) {\n return { status: 'error', error: cause }\n }\n return { status: 'success', value }\n}\n\nfunction navigateFrom(router: AnyRouter, location: ParsedLocation) {\n return (options: any) =>\n router.navigate({\n ...options,\n _fromLocation: location,\n })\n}\n\nfunction waitFor<T>(value: Promise<T>, signal?: AbortSignal): Promise<T> {\n return signal ? waitForReason(value, signal) : value\n}\n\nasync function resolveSsr(\n router: AnyRouter,\n lane: MatchedLane,\n index: number,\n): Promise<SSROption> {\n const match = lane.matches[index]!\n const route = getRoute(router, match)\n const parentSsr = lane.matches[index - 1]?.ssr\n\n if (router.isShell()) {\n return route.id === rootRouteId\n }\n if (parentSsr === false) {\n return false\n }\n\n const inherit = (value: SSROption): SSROption => {\n return value === true && parentSsr === 'data-only' ? 'data-only' : value\n }\n const defaultSsr = router.options.defaultSsr ?? true\n const inheritedDefault = inherit(defaultSsr)\n // A functional override can fail. Establish the inherited policy first so\n // the selected error boundary retains the route's actual renderability.\n match.ssr = inheritedDefault\n const option = route.options.ssr\n if (option === undefined) {\n return inheritedDefault\n }\n if (typeof option !== 'function') {\n return inherit(option)\n }\n\n const context: SsrContextOptions<any, any, any> = {\n search: maybe(match.search, match.searchError),\n params: maybe(match.params, match.paramsError),\n location: lane.location,\n matches: lane.matches.map((candidate) => ({\n index: candidate.index,\n pathname: candidate.pathname,\n fullPath: candidate.fullPath,\n staticData: candidate.staticData,\n id: candidate.id,\n routeId: candidate.routeId,\n search: maybe(candidate.search, candidate.searchError),\n params: maybe(candidate.params, candidate.paramsError),\n ssr: candidate.ssr,\n })),\n }\n return inherit((await option(context)) ?? defaultSsr)\n}\n\nfunction stampNotFound(\n match: AnyRouteMatch,\n outcome: LoaderOutcome,\n): LoaderOutcome {\n if (outcome[0] === NOT_FOUND && !outcome[1].routeId) {\n outcome[1].routeId = match.routeId\n }\n return outcome\n}\n\nasync function contextualize(\n router: AnyRouter,\n lane: MatchedLane,\n signal?: AbortSignal,\n): Promise<ContextualizedLane> {\n const globalBoundary = lane.matches.findIndex((match) => match._notFound)\n let end = globalBoundary < 0 ? lane.matches.length : globalBoundary + 1\n let failure: IndexedOutcome | undefined\n let parentContext: Record<string, unknown> = {\n ...(router.options.context ?? {}),\n }\n\n for (let index = 0; index < end; index++) {\n const match = lane.matches[index]!\n const route = getRoute(router, match)\n try {\n match.ssr = await resolveSsr(router, lane, index)\n } catch (cause) {\n signal?.throwIfAborted()\n failure = [\n index,\n stampNotFound(\n match,\n normalizeError(router, lane, route, cause, signal),\n ),\n ]\n end = index\n }\n signal?.throwIfAborted()\n if (failure?.[1][0] === REDIRECTED) {\n break\n }\n\n match.__beforeLoadContext = undefined\n let context = parentContext\n try {\n let routeContext\n if (route.options.context) {\n const routeContextOptions: RouteContextOptions<\n any,\n any,\n any,\n any,\n any\n > = {\n deps: match.loaderDeps,\n params: match.params,\n context: parentContext,\n location: lane.location,\n navigate: navigateFrom(router, lane.location),\n buildLocation: router.buildLocation,\n cause: match.cause,\n abortController: match.abortController,\n preload: false,\n matches: lane.matches,\n routeId: route.id,\n }\n routeContext = route.options.context(routeContextOptions) ?? undefined\n }\n context = {\n ...parentContext,\n ...routeContext,\n }\n match.context = context\n } catch (cause) {\n signal?.throwIfAborted()\n if (!failure) {\n failure = [\n index,\n stampNotFound(\n match,\n normalizeError(router, lane, route, cause, signal),\n ),\n ]\n }\n end = index\n break\n }\n signal?.throwIfAborted()\n if (failure) {\n break\n }\n const validationError = match.paramsError ?? match.searchError\n if (validationError !== undefined) {\n failure = [\n index,\n stampNotFound(\n match,\n normalizeError(router, lane, route, validationError, signal),\n ),\n ]\n end = index\n break\n }\n signal?.throwIfAborted()\n\n if (match.ssr === false || !route.options.beforeLoad) {\n parentContext = context\n continue\n }\n\n const abortController = match.abortController\n const options: BeforeLoadContextOptions<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n > = {\n search: match.search,\n abortController,\n params: match.params,\n preload: false,\n context,\n location: lane.location,\n navigate: navigateFrom(router, lane.location),\n buildLocation: router.buildLocation,\n cause: match.cause,\n matches: lane.matches,\n routeId: route.id,\n ...router.options.additionalContext,\n }\n\n try {\n const beforeLoadContext = await route.options.beforeLoad(options)\n signal?.throwIfAborted()\n const outcome = stampNotFound(\n match,\n materializeRedirect(\n router,\n lane,\n route,\n normalize(beforeLoadContext, false),\n signal,\n ),\n )\n if (outcome[0] !== SUCCESS) {\n failure = [index, outcome]\n end = index\n break\n }\n match.__beforeLoadContext = beforeLoadContext\n match.context = {\n ...context,\n ...beforeLoadContext,\n }\n parentContext = match.context\n } catch (cause) {\n signal?.throwIfAborted()\n failure = [\n index,\n stampNotFound(\n match,\n normalizeError(router, lane, route, cause, signal),\n ),\n ]\n end = index\n break\n }\n }\n\n return {\n location: lane.location,\n matches: lane.matches,\n end,\n failure,\n } as ContextualizedLane\n}\n\nfunction getLoaderContext(\n router: AnyRouter,\n lane: ContextualizedLane,\n match: AnyRouteMatch,\n route: AnyRoute,\n index: number,\n tasks: Array<LoaderTask>,\n): LoaderFnContext {\n return {\n params: match.params,\n deps: match.loaderDeps,\n preload: false,\n parentMatchPromise: tasks[index - 1]?.match,\n abortController: match.abortController,\n context: match.context,\n location: lane.location,\n navigate: navigateFrom(router, lane.location),\n cause: match.cause,\n route,\n ...router.options.additionalContext,\n }\n}\n\nfunction createLoaderTask(\n router: AnyRouter,\n lane: ContextualizedLane,\n index: number,\n tasks: Array<LoaderTask>,\n signal?: AbortSignal,\n): LoaderTask {\n const match = lane.matches[index]!\n const route = getRoute(router, match)\n let outcome: Promise<LoaderOutcome>\n\n if (match.ssr === false) {\n outcome = Promise.resolve<LoaderOutcome>([SKIPPED])\n } else {\n const routeLoader = route.options.loader\n const loader =\n typeof routeLoader === 'function' ? routeLoader : routeLoader?.handler\n if (!loader) {\n outcome = Promise.resolve<LoaderOutcome>([SUCCESS, undefined])\n } else {\n outcome = Promise.resolve()\n .then(() =>\n loader(getLoaderContext(router, lane, match, route, index, tasks)),\n )\n .then(\n (result) => normalize(result, false),\n (cause) => normalize(cause, true),\n )\n .then((result): LoaderOutcome => {\n if (signal?.aborted || match.abortController.signal.reason === lane) {\n return [SKIPPED]\n }\n if (result[0] === ERROR) {\n result = normalizeError(router, lane, route, result[1], signal)\n } else {\n result = materializeRedirect(router, lane, route, result, signal)\n }\n return stampNotFound(match, result)\n })\n }\n }\n\n const parentMatch = outcome.then((result) => {\n const snapshot = { ...match }\n if (result[0] === SUCCESS) {\n snapshot.loaderData = result[1]\n snapshot.status = 'success'\n snapshot.error = undefined\n snapshot.invalid = false\n snapshot.isFetching = false\n } else if (result[0] === ERROR) {\n snapshot.status = 'error'\n snapshot.error = result[1]\n } else if (result[0] === NOT_FOUND) {\n snapshot.status = 'notFound'\n snapshot.error = result[1]\n }\n return snapshot\n })\n\n return { index, outcome, match: parentMatch }\n}\n\nasync function getNotFoundBoundary(\n router: AnyRouter,\n matches: Array<AnyRouteMatch>,\n indexed: IndexedOutcome | undefined,\n signal?: AbortSignal,\n fallback = 0,\n): Promise<number> {\n const cause = indexed?.[1][1] as NotFoundError | undefined\n let index = cause?.routeId\n ? matches.findIndex((match) => match.routeId === cause.routeId)\n : (indexed?.[0] ?? matches.length - 1)\n if (index < 0) {\n index = 0\n }\n for (let candidate = index; candidate >= 0; candidate--) {\n const route = getRoute(router, matches[candidate]!)\n try {\n const loading = loadRouteChunk(route, false)\n if (loading) {\n await loading\n }\n } catch {\n signal?.throwIfAborted()\n }\n signal?.throwIfAborted()\n if (route.options.notFoundComponent) {\n return candidate\n }\n }\n return cause?.routeId ? index : fallback\n}\n\nfunction abortMatches(\n matches: Array<AnyRouteMatch>,\n start = 0,\n reason?: unknown,\n): void {\n for (let index = start; index < matches.length; index++) {\n matches[index]!.abortController.abort(reason)\n }\n}\n\nasync function applyFailure(\n router: AnyRouter,\n lane: ContextualizedLane,\n indexed: IndexedOutcome | undefined,\n signal?: AbortSignal,\n): Promise<{ status: 200 | 404 | 500; boundary?: number; kind?: number }> {\n if (!indexed) {\n const boundary = lane.matches.findIndex((match) => match._notFound)\n if (boundary >= 0) {\n abortMatches(lane.matches, boundary + 1)\n return { status: 404, boundary, kind: NOT_FOUND }\n }\n return { status: 200 }\n }\n\n const [index, outcome] = indexed\n if (outcome[0] === ERROR) {\n const match = lane.matches[index]!\n match._notFound = undefined\n match.status = 'error'\n match.error = outcome[1]\n match.isFetching = false\n abortMatches(lane.matches, index + 1)\n return { status: 500, boundary: index, kind: ERROR }\n }\n\n const boundary =\n indexed[2] ??\n (await getNotFoundBoundary(router, lane.matches, indexed, signal))\n const match = lane.matches[boundary]!\n const cause = outcome[1] as NotFoundError\n cause.routeId = match.routeId\n match._notFound = undefined\n if (match.routeId === router.routeTree.id) {\n match.status = 'success'\n match._notFound = true\n match.error = cause\n } else {\n match.status = 'notFound'\n match.error = cause\n }\n match.isFetching = false\n abortMatches(lane.matches, boundary + 1)\n return { status: 404, boundary, kind: NOT_FOUND }\n}\n\nasync function loadNormalChunks(\n router: AnyRouter,\n lane: ContextualizedLane,\n end: number,\n signal?: AbortSignal,\n): Promise<IndexedOutcome | undefined> {\n const chunks: Array<IndexedOutcome | Promise<IndexedOutcome | undefined>> = []\n for (let index = 0; index < lane.matches.length; index++) {\n const match = lane.matches[index]!\n if (index >= end || match.ssr !== true || match.status !== 'success') {\n continue\n }\n const route = getRoute(router, match)\n try {\n const loading = loadRouteChunk(route)\n if (loading) {\n const chunk = loading.then(\n () => {\n signal?.throwIfAborted()\n return undefined\n },\n (cause) => {\n signal?.throwIfAborted()\n return [\n index,\n stampNotFound(\n match,\n normalizeError(router, lane, route, cause, signal),\n ),\n ] as IndexedOutcome\n },\n )\n // Route-order reduction can return before later chunks settle.\n void chunk.catch(() => {})\n chunks.push(chunk)\n }\n } catch (cause) {\n signal?.throwIfAborted()\n chunks.push([\n index,\n stampNotFound(\n match,\n normalizeError(router, lane, route, cause, signal),\n ),\n ])\n }\n }\n for (const chunk of chunks) {\n const indexed = Array.isArray(chunk) ? chunk : await chunk\n if (indexed) {\n return indexed\n }\n }\n return undefined\n}\n\nasync function projectLane(\n router: AnyRouter,\n lane: ReducedLane,\n signal?: AbortSignal,\n): Promise<void> {\n for (const match of lane.matches) {\n const routeOptions = getRoute(router, match).options\n if (routeOptions.head || routeOptions.scripts || routeOptions.headers) {\n const context = {\n ssr: router.options.ssr,\n matches: lane.matches,\n match,\n params: match.params,\n loaderData: match.loaderData,\n }\n try {\n const [head, scripts, headers] = await Promise.all([\n routeOptions.head?.(context),\n routeOptions.scripts?.(context),\n routeOptions.headers?.(context),\n ])\n signal?.throwIfAborted()\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 match.headers = headers\n } catch (cause) {\n signal?.throwIfAborted()\n console.error(cause)\n }\n }\n if (match.ssr === false || match.status !== 'success' || match._notFound) {\n break\n }\n }\n}\n\nasync function executeServerLane(\n router: AnyRouter,\n location: ParsedLocation,\n matchedMatches: Array<AnyRouteMatch>,\n signal?: AbortSignal,\n): Promise<ServerLoadResult> {\n const matched = {\n location,\n matches: matchedMatches.map((match) => ({\n ...match,\n __beforeLoadContext: undefined,\n context: {},\n isFetching: false,\n abortController: new AbortController(),\n })),\n } as MatchedLane\n const abortLane = () => abortMatches(matched.matches, 0, signal?.reason)\n if (signal?.aborted) {\n abortLane()\n signal.throwIfAborted()\n }\n signal?.addEventListener('abort', abortLane, { once: true })\n\n try {\n const plannedGlobalBoundary = matched.matches.findIndex(\n (match) => match._notFound,\n )\n if (router.options.notFoundMode !== 'root' && plannedGlobalBoundary >= 0) {\n const boundary = await getNotFoundBoundary(\n router,\n matched.matches,\n undefined,\n signal,\n plannedGlobalBoundary,\n )\n if (boundary !== plannedGlobalBoundary) {\n matched.matches[plannedGlobalBoundary]!._notFound = undefined\n matched.matches[boundary]!._notFound = true\n }\n }\n const lane = await contextualize(router, matched, signal)\n signal?.throwIfAborted()\n\n let loaderEnd = lane.end\n if (lane.failure?.[1][0] === REDIRECTED) {\n loaderEnd = 0\n } else if (lane.failure?.[1][0] === NOT_FOUND) {\n lane.failure[2] = await getNotFoundBoundary(\n router,\n lane.matches,\n lane.failure,\n signal,\n )\n loaderEnd = Math.min(loaderEnd, lane.failure[2] + 1)\n }\n\n const tasks: Array<LoaderTask> = []\n for (let index = 0; index < loaderEnd; index++) {\n const task = createLoaderTask(router, lane, index, tasks, signal)\n tasks.push(task)\n }\n\n let loaderFailure: IndexedOutcome | undefined\n let control = lane.failure?.[1][0] === REDIRECTED ? lane.failure : undefined\n try {\n await Promise.all(\n tasks.map((task) =>\n task.outcome.then((loadedOutcome) => {\n const match = lane.matches[task.index]!\n const outcome = loadedOutcome\n if (outcome[0] === SUCCESS) {\n match.loaderData = outcome[1]\n match.status = 'success'\n match.error = undefined\n match.invalid = false\n match.isFetching = false\n match.updatedAt = Date.now()\n } else if (outcome[0] === REDIRECTED) {\n control = [task.index, outcome]\n throw control\n } else {\n // A selective-SSR skip must stay pending for hydration. Every\n // settled server attempt is otherwise renderable unless\n // reduction selects it as the lane's terminal failure.\n if (match.ssr !== false) {\n match.status = 'success'\n match.error = undefined\n match.invalid = true\n match.isFetching = false\n }\n if (!loaderFailure && outcome[0] !== SKIPPED) {\n loaderFailure = [task.index, outcome]\n }\n }\n }),\n ),\n )\n } catch (cause) {\n if (!Array.isArray(cause)) {\n throw cause\n }\n control = cause as IndexedOutcome\n }\n signal?.throwIfAborted()\n\n if (control?.[1][0] === REDIRECTED) {\n abortMatches(lane.matches, 0, lane)\n return { type: 'redirect', redirect: control[1][1] }\n }\n\n let failure = lane.failure ?? loaderFailure\n const plannedBoundary = lane.matches.findIndex((match) => match._notFound)\n let readinessEnd: number\n if (failure) {\n const outcomeEnd = (failure[2] ??=\n failure[1][0] === NOT_FOUND\n ? await getNotFoundBoundary(router, lane.matches, failure, signal)\n : failure[0])\n for (const task of tasks) {\n if (task.index >= outcomeEnd) {\n break\n }\n const outcome = await task.outcome\n // Presence means a loader previously succeeded, even with `undefined`.\n if (\n outcome[0] !== SUCCESS &&\n outcome[0] < REDIRECTED &&\n !('loaderData' in lane.matches[task.index]!)\n ) {\n failure = [task.index, outcome]\n failure[2] =\n outcome[0] === NOT_FOUND\n ? await getNotFoundBoundary(router, lane.matches, failure, signal)\n : task.index\n break\n }\n }\n readinessEnd = failure[2]\n } else {\n readinessEnd = plannedBoundary < 0 ? lane.matches.length : plannedBoundary\n }\n const requiredFailure = await loadNormalChunks(\n router,\n lane,\n readinessEnd,\n signal,\n )\n signal?.throwIfAborted()\n if (requiredFailure) {\n if (requiredFailure[1][0] === REDIRECTED) {\n abortMatches(lane.matches)\n return { type: 'redirect', redirect: requiredFailure[1][1] }\n }\n failure = requiredFailure\n }\n\n const terminal = await applyFailure(router, lane, failure, signal)\n if (terminal.boundary !== undefined) {\n const match = lane.matches[terminal.boundary]!\n if (match.ssr === true) {\n const route = getRoute(router, match)\n try {\n if (terminal.kind === ERROR) {\n await loadRouteChunk(route, 'errorComponent')\n } else if (match._notFound) {\n await Promise.all([\n loadRouteChunk(route),\n loadRouteChunk(route, 'notFoundComponent'),\n ])\n } else {\n await loadRouteChunk(route, 'notFoundComponent')\n }\n } catch {}\n signal?.throwIfAborted()\n }\n }\n\n signal?.throwIfAborted()\n await projectLane(\n router,\n {\n location: lane.location,\n matches: lane.matches,\n } as ReducedLane,\n signal,\n )\n signal?.throwIfAborted()\n router.serverSsr?.onCleanup(abortLane)\n return { type: 'render', status: terminal.status, matches: lane.matches }\n } finally {\n signal?.removeEventListener('abort', abortLane)\n }\n}\n\ntype ServerLoadOptions = NonNullable<Parameters<AnyRouter['load']>[0]> & {\n _signal?: AbortSignal\n}\n\nexport async function loadServerRoute(\n router: AnyRouter,\n opts?: ServerLoadOptions,\n): Promise<void> {\n router.updateLatestLocation()\n const next = router.latestLocation\n const previous = router._committed\n let result: ServerLoadResult\n try {\n const canonical = router.buildLocation({\n to: next.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n if (next.publicHref !== canonical.publicHref) {\n const href = canonical.publicHref || '/'\n throw redirect({ href })\n }\n\n const fromLocation = router.stores.resolvedLocation.get()\n const changeInfo = getLocationChangeInfo(next, fromLocation)\n router.emit({ type: 'onBeforeNavigate', ...changeInfo })\n router.emit({ type: 'onBeforeLoad', ...changeInfo })\n opts?._signal?.throwIfAborted()\n result = await waitFor(\n executeServerLane(router, next, router.matchRoutes(next), opts?._signal),\n opts?._signal,\n )\n opts?._signal?.throwIfAborted()\n } catch (cause) {\n opts?._signal?.throwIfAborted()\n if (!isRedirect(cause)) {\n throw cause\n }\n cause.options._fromLocation = next\n result = { type: 'redirect', redirect: router.resolveRedirect(cause) }\n }\n\n router._serverResult = result\n router.batch(() => {\n router.stores.location.set(next)\n router.stores.status.set('idle')\n if (result.type === 'render') {\n router.stores.setMatches(result.matches)\n router.stores.resolvedLocation.set(next)\n }\n })\n if (result.type === 'render') {\n router._committed = result.matches\n runRouteLifecycle(router, previous, result.matches)\n }\n router._commitPromise?.resolve()\n router._commitPromise = undefined\n}\n"],"mappings":"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"}
@@ -280,7 +280,7 @@ function processRouteMasks(routeList, processedTree) {
280
280
  function findFlatMatch(path, processedTree) {
281
281
  path ||= "/";
282
282
  const cached = processedTree.flatCache.get(path);
283
- if (cached) return cached;
283
+ if (cached !== void 0) return cached;
284
284
  const result = findMatch(path, processedTree.masksTree);
285
285
  processedTree.flatCache.set(path, result);
286
286
  return result;