@tanstack/react-router 1.6.1 → 1.7.1

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.
@@ -102,7 +102,12 @@ function MatchInner({
102
102
  select: s => utils.pick(getRenderedMatches(s).find(d => d.id === matchId), ['status', 'error', 'showPending', 'loadPromise'])
103
103
  });
104
104
  if (match.status === 'error') {
105
- throw match.error;
105
+ if (isServerSideError(match.error)) {
106
+ const deserializeError = router.options.errorSerializer?.deserialize ?? defaultDeserializeError;
107
+ throw deserializeError(match.error.data);
108
+ } else {
109
+ throw match.error;
110
+ }
106
111
  }
107
112
  if (match.status === 'pending') {
108
113
  if (match.showPending) {
@@ -223,12 +228,28 @@ function useLoaderData(opts) {
223
228
  }
224
229
  });
225
230
  }
231
+ function isServerSideError(error) {
232
+ if (!(typeof error === 'object' && error && 'data' in error)) return false;
233
+ if (!('__isServerError' in error && error.__isServerError)) return false;
234
+ if (!(typeof error.data === 'object' && error.data)) return false;
235
+ return error.__isServerError === true;
236
+ }
237
+ function defaultDeserializeError(serializedData) {
238
+ if ('name' in serializedData && 'message' in serializedData) {
239
+ const error = new Error(serializedData.message);
240
+ error.name = serializedData.name;
241
+ return error;
242
+ }
243
+ return serializedData.data;
244
+ }
226
245
 
227
246
  exports.Match = Match;
228
247
  exports.MatchRoute = MatchRoute;
229
248
  exports.Matches = Matches;
230
249
  exports.Outlet = Outlet;
250
+ exports.defaultDeserializeError = defaultDeserializeError;
231
251
  exports.getRenderedMatches = getRenderedMatches;
252
+ exports.isServerSideError = isServerSideError;
232
253
  exports.matchContext = matchContext;
233
254
  exports.useLoaderData = useLoaderData;
234
255
  exports.useLoaderDeps = useLoaderDeps;
@@ -1 +1 @@
1
- {"version":3,"file":"Matches.js","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as React from 'react'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { ResolveRelativePath, ToOptions } from './link'\nimport { AnyRoute, ReactNode, RootSearchSchema } from './route'\nimport {\n ParseRoute,\n RouteById,\n RouteByPath,\n RouteIds,\n RoutePaths,\n} from './routeInfo'\nimport { RegisteredRouter, RouterState } from './router'\nimport { NoInfer, StrictOrFrom, pick } from './utils'\n\nexport const matchContext = React.createContext<string | undefined>(undefined)\n\nexport interface RouteMatch<\n TRouteTree extends AnyRoute = AnyRoute,\n TRouteId extends RouteIds<TRouteTree> = ParseRoute<TRouteTree>['id'],\n> {\n id: string\n routeId: TRouteId\n pathname: string\n params: RouteById<TRouteTree, TRouteId>['types']['allParams']\n status: 'pending' | 'success' | 'error'\n isFetching: boolean\n showPending: boolean\n error: unknown\n paramsError: unknown\n searchError: unknown\n updatedAt: number\n loadPromise?: Promise<void>\n loaderData?: RouteById<TRouteTree, TRouteId>['types']['loaderData']\n routeContext: RouteById<TRouteTree, TRouteId>['types']['routeContext']\n context: RouteById<TRouteTree, TRouteId>['types']['allContext']\n search: Exclude<\n RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema'],\n RootSearchSchema\n >\n fetchCount: number\n abortController: AbortController\n cause: 'preload' | 'enter' | 'stay'\n loaderDeps: RouteById<TRouteTree, TRouteId>['types']['loaderDeps']\n preload: boolean\n invalid: boolean\n pendingPromise?: Promise<void>\n}\n\nexport type AnyRouteMatch = RouteMatch<any, any>\n\nexport function Matches() {\n const router = useRouter()\n const matchId = useRouterState({\n select: (s) => {\n return getRenderedMatches(s)[0]?.id\n },\n })\n\n return (\n <matchContext.Provider value={matchId}>\n <CatchBoundary\n getResetKey={() => router.state.resolvedLocation.state?.key}\n errorComponent={ErrorComponent}\n onCatch={() => {\n warning(\n false,\n `Error in router! Consider setting an 'errorComponent' in your RootRoute! 👍`,\n )\n }}\n >\n {matchId ? <Match matchId={matchId} /> : null}\n </CatchBoundary>\n </matchContext.Provider>\n )\n}\n\nfunction SafeFragment(props: any) {\n return <>{props.children}</>\n}\n\nexport function Match({ matchId }: { matchId: string }) {\n const router = useRouter()\n const routeId = useRouterState({\n select: (s) =>\n getRenderedMatches(s).find((d) => d.id === matchId)?.routeId as string,\n })\n\n invariant(\n routeId,\n `Could not find routeId for matchId \"${matchId}\". Please file an issue!`,\n )\n\n const route = router.routesById[routeId]!\n\n const PendingComponent = (route.options.pendingComponent ??\n router.options.defaultPendingComponent) as any\n\n const pendingElement = PendingComponent ? <PendingComponent /> : null\n\n const routeErrorComponent =\n route.options.errorComponent ??\n router.options.defaultErrorComponent ??\n ErrorComponent\n\n const ResolvedSuspenseBoundary =\n route.options.wrapInSuspense ??\n PendingComponent ??\n route.options.component?.preload ??\n route.options.pendingComponent?.preload ??\n (route.options.errorComponent as any)?.preload\n ? React.Suspense\n : SafeFragment\n\n const ResolvedCatchBoundary = routeErrorComponent\n ? CatchBoundary\n : SafeFragment\n\n return (\n <matchContext.Provider value={matchId}>\n <ResolvedSuspenseBoundary fallback={pendingElement}>\n <ResolvedCatchBoundary\n getResetKey={() => router.state.resolvedLocation.state?.key}\n errorComponent={routeErrorComponent}\n onCatch={() => {\n warning(false, `Error in route match: ${matchId}`)\n }}\n >\n <MatchInner matchId={matchId!} pendingElement={pendingElement} />\n </ResolvedCatchBoundary>\n </ResolvedSuspenseBoundary>\n </matchContext.Provider>\n )\n}\n\nfunction MatchInner({\n matchId,\n pendingElement,\n}: {\n matchId: string\n pendingElement: any\n}): any {\n const router = useRouter()\n const routeId = useRouterState({\n select: (s) =>\n getRenderedMatches(s).find((d) => d.id === matchId)?.routeId as string,\n })\n\n const route = router.routesById[routeId]!\n\n const match = useRouterState({\n select: (s) =>\n pick(getRenderedMatches(s).find((d) => d.id === matchId)!, [\n 'status',\n 'error',\n 'showPending',\n 'loadPromise',\n ]),\n })\n\n if (match.status === 'error') {\n throw match.error\n }\n\n if (match.status === 'pending') {\n if (match.showPending) {\n return pendingElement\n }\n throw match.loadPromise\n }\n\n if (match.status === 'success') {\n let Comp = route.options.component ?? router.options.defaultComponent\n\n if (Comp) {\n return <Comp />\n }\n\n return <Outlet />\n }\n\n invariant(\n false,\n 'Idle routeMatch status encountered during rendering! You should never see this. File an issue!',\n )\n}\n\nexport const Outlet = React.memo(function Outlet() {\n const matchId = React.useContext(matchContext)\n\n const childMatchId = useRouterState({\n select: (s) => {\n const matches = getRenderedMatches(s)\n const index = matches.findIndex((d) => d.id === matchId)\n return matches[index + 1]?.id\n },\n })\n\n if (!childMatchId) {\n return null\n }\n\n return <Match matchId={childMatchId} />\n})\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n includeSearch?: boolean\n fuzzy?: boolean\n}\n\nexport type UseMatchRouteOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & MatchRouteOptions\n\nexport function useMatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>() {\n useRouterState({ select: (s) => [s.location, s.resolvedLocation] })\n const { matchRoute } = useRouter()\n\n return React.useCallback(\n <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n TResolved extends string = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n >(\n opts: UseMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n ): false | RouteById<TRouteTree, TResolved>['types']['allParams'] => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n return matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n },\n [],\n )\n}\n\nexport type MakeMatchRouteOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n MatchRouteOptions & {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | ((\n params?: RouteByPath<\n TRouteTree,\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => ReactNode)\n | React.ReactNode\n }\n\nexport function MatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n>(\n props: MakeMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): any {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)\n\n if (typeof props.children === 'function') {\n return (props.children as any)(params)\n }\n\n return !!params ? props.children : null\n}\n\nexport function getRenderedMatches(state: RouterState) {\n return state.pendingMatches?.some((d) => d.showPending)\n ? state.pendingMatches\n : state.matches\n}\n\nexport function useMatch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatchState = RouteMatch<TRouteTree, TFrom>,\n TSelected = TRouteMatchState,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatchState) => TSelected\n },\n): TSelected {\n const router = useRouter()\n const nearestMatchId = React.useContext(matchContext)\n\n const nearestMatchRouteId = getRenderedMatches(router.state).find(\n (d) => d.id === nearestMatchId,\n )?.routeId\n\n const matchRouteId = (() => {\n const matches = getRenderedMatches(router.state)\n const match = opts?.from\n ? matches.find((d) => d.routeId === opts?.from)\n : matches.find((d) => d.id === nearestMatchId)\n return match!.routeId\n })()\n\n if (opts?.strict ?? true) {\n invariant(\n nearestMatchRouteId == matchRouteId,\n `useMatch(\"${\n matchRouteId as string\n }\") is being called in a component that is meant to render the '${nearestMatchRouteId}' route. Did you mean to 'useMatch(\"${\n matchRouteId as string\n }\", { strict: false })' or 'useRoute(\"${\n matchRouteId as string\n }\")' instead?`,\n )\n }\n\n const matchSelection = useRouterState({\n select: (state) => {\n const match = getRenderedMatches(state).find(\n (d) => d.id === nearestMatchId,\n )\n\n invariant(\n match,\n `Could not find ${\n opts?.from\n ? `an active match from \"${opts.from}\"`\n : 'a nearest match!'\n }`,\n )\n\n return opts?.select ? opts.select(match as any) : match\n },\n })\n\n return matchSelection as any\n}\n\nexport function useMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n return useRouterState({\n select: (state) => {\n let matches = getRenderedMatches(state)\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n\nexport function useParentMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n const contextMatchId = React.useContext(matchContext)\n\n return useMatches({\n select: (matches) => {\n matches = matches.slice(matches.findIndex((d) => d.id === contextMatchId))\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n\nexport function useLoaderDeps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatch extends RouteMatch<TRouteTree, TFrom> = RouteMatch<\n TRouteTree,\n TFrom\n >,\n TSelected = Required<TRouteMatch>['loaderDeps'],\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatch) => TSelected\n },\n): TSelected {\n return useMatch({\n ...opts,\n select: (s) => {\n return typeof opts.select === 'function'\n ? opts.select(s?.loaderDeps)\n : s?.loaderDeps\n },\n })\n}\n\nexport function useLoaderData<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatch extends RouteMatch<TRouteTree, TFrom> = RouteMatch<\n TRouteTree,\n TFrom\n >,\n TSelected = Required<TRouteMatch>['loaderData'],\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatch) => TSelected\n },\n): TSelected {\n return useMatch({\n ...opts,\n select: (s) => {\n return typeof opts.select === 'function'\n ? opts.select(s?.loaderData)\n : s?.loaderData\n },\n })\n}\n"],"names":["matchContext","React","createContext","undefined","Matches","router","useRouter","matchId","useRouterState","select","s","getRenderedMatches","id","createElement","Provider","value","CatchBoundary","getResetKey","state","resolvedLocation","key","errorComponent","ErrorComponent","onCatch","warning","Match","SafeFragment","props","Fragment","children","routeId","find","d","invariant","route","routesById","PendingComponent","options","pendingComponent","defaultPendingComponent","pendingElement","routeErrorComponent","defaultErrorComponent","ResolvedSuspenseBoundary","wrapInSuspense","component","preload","Suspense","ResolvedCatchBoundary","fallback","MatchInner","match","pick","status","error","showPending","loadPromise","Comp","defaultComponent","Outlet","memo","useContext","childMatchId","matches","index","findIndex","useMatchRoute","location","matchRoute","useCallback","opts","pending","caseSensitive","fuzzy","includeSearch","rest","MatchRoute","params","pendingMatches","some","useMatch","nearestMatchId","nearestMatchRouteId","matchRouteId","from","strict","matchSelection","useMatches","useParentMatches","contextMatchId","slice","useLoaderDeps","loaderDeps","useLoaderData","loaderData"],"mappings":"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"}
1
+ {"version":3,"file":"Matches.js","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as React from 'react'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { ResolveRelativePath, ToOptions } from './link'\nimport { AnyRoute, ReactNode, RootSearchSchema } from './route'\nimport {\n ParseRoute,\n RouteById,\n RouteByPath,\n RouteIds,\n RoutePaths,\n} from './routeInfo'\nimport { RegisteredRouter, RouterState } from './router'\nimport { NoInfer, StrictOrFrom, pick } from './utils'\n\nexport const matchContext = React.createContext<string | undefined>(undefined)\n\nexport interface RouteMatch<\n TRouteTree extends AnyRoute = AnyRoute,\n TRouteId extends RouteIds<TRouteTree> = ParseRoute<TRouteTree>['id'],\n> {\n id: string\n routeId: TRouteId\n pathname: string\n params: RouteById<TRouteTree, TRouteId>['types']['allParams']\n status: 'pending' | 'success' | 'error'\n isFetching: boolean\n showPending: boolean\n error: unknown\n paramsError: unknown\n searchError: unknown\n updatedAt: number\n loadPromise?: Promise<void>\n loaderData?: RouteById<TRouteTree, TRouteId>['types']['loaderData']\n routeContext: RouteById<TRouteTree, TRouteId>['types']['routeContext']\n context: RouteById<TRouteTree, TRouteId>['types']['allContext']\n search: Exclude<\n RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema'],\n RootSearchSchema\n >\n fetchCount: number\n abortController: AbortController\n cause: 'preload' | 'enter' | 'stay'\n loaderDeps: RouteById<TRouteTree, TRouteId>['types']['loaderDeps']\n preload: boolean\n invalid: boolean\n pendingPromise?: Promise<void>\n}\n\nexport type AnyRouteMatch = RouteMatch<any, any>\n\nexport function Matches() {\n const router = useRouter()\n const matchId = useRouterState({\n select: (s) => {\n return getRenderedMatches(s)[0]?.id\n },\n })\n\n return (\n <matchContext.Provider value={matchId}>\n <CatchBoundary\n getResetKey={() => router.state.resolvedLocation.state?.key}\n errorComponent={ErrorComponent}\n onCatch={() => {\n warning(\n false,\n `Error in router! Consider setting an 'errorComponent' in your RootRoute! 👍`,\n )\n }}\n >\n {matchId ? <Match matchId={matchId} /> : null}\n </CatchBoundary>\n </matchContext.Provider>\n )\n}\n\nfunction SafeFragment(props: any) {\n return <>{props.children}</>\n}\n\nexport function Match({ matchId }: { matchId: string }) {\n const router = useRouter()\n const routeId = useRouterState({\n select: (s) =>\n getRenderedMatches(s).find((d) => d.id === matchId)?.routeId as string,\n })\n\n invariant(\n routeId,\n `Could not find routeId for matchId \"${matchId}\". Please file an issue!`,\n )\n\n const route = router.routesById[routeId]!\n\n const PendingComponent = (route.options.pendingComponent ??\n router.options.defaultPendingComponent) as any\n\n const pendingElement = PendingComponent ? <PendingComponent /> : null\n\n const routeErrorComponent =\n route.options.errorComponent ??\n router.options.defaultErrorComponent ??\n ErrorComponent\n\n const ResolvedSuspenseBoundary =\n route.options.wrapInSuspense ??\n PendingComponent ??\n route.options.component?.preload ??\n route.options.pendingComponent?.preload ??\n (route.options.errorComponent as any)?.preload\n ? React.Suspense\n : SafeFragment\n\n const ResolvedCatchBoundary = routeErrorComponent\n ? CatchBoundary\n : SafeFragment\n\n return (\n <matchContext.Provider value={matchId}>\n <ResolvedSuspenseBoundary fallback={pendingElement}>\n <ResolvedCatchBoundary\n getResetKey={() => router.state.resolvedLocation.state?.key}\n errorComponent={routeErrorComponent}\n onCatch={() => {\n warning(false, `Error in route match: ${matchId}`)\n }}\n >\n <MatchInner matchId={matchId!} pendingElement={pendingElement} />\n </ResolvedCatchBoundary>\n </ResolvedSuspenseBoundary>\n </matchContext.Provider>\n )\n}\n\nfunction MatchInner({\n matchId,\n pendingElement,\n}: {\n matchId: string\n pendingElement: any\n}): any {\n const router = useRouter()\n const routeId = useRouterState({\n select: (s) =>\n getRenderedMatches(s).find((d) => d.id === matchId)?.routeId as string,\n })\n\n const route = router.routesById[routeId]!\n\n const match = useRouterState({\n select: (s) =>\n pick(getRenderedMatches(s).find((d) => d.id === matchId)!, [\n 'status',\n 'error',\n 'showPending',\n 'loadPromise',\n ]),\n })\n\n if (match.status === 'error') {\n if (isServerSideError(match.error)) {\n const deserializeError =\n router.options.errorSerializer?.deserialize ?? defaultDeserializeError\n throw deserializeError(match.error.data)\n } else {\n throw match.error\n }\n }\n\n if (match.status === 'pending') {\n if (match.showPending) {\n return pendingElement\n }\n throw match.loadPromise\n }\n\n if (match.status === 'success') {\n let Comp = route.options.component ?? router.options.defaultComponent\n\n if (Comp) {\n return <Comp />\n }\n\n return <Outlet />\n }\n\n invariant(\n false,\n 'Idle routeMatch status encountered during rendering! You should never see this. File an issue!',\n )\n}\n\nexport const Outlet = React.memo(function Outlet() {\n const matchId = React.useContext(matchContext)\n\n const childMatchId = useRouterState({\n select: (s) => {\n const matches = getRenderedMatches(s)\n const index = matches.findIndex((d) => d.id === matchId)\n return matches[index + 1]?.id\n },\n })\n\n if (!childMatchId) {\n return null\n }\n\n return <Match matchId={childMatchId} />\n})\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n includeSearch?: boolean\n fuzzy?: boolean\n}\n\nexport type UseMatchRouteOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & MatchRouteOptions\n\nexport function useMatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>() {\n useRouterState({ select: (s) => [s.location, s.resolvedLocation] })\n const { matchRoute } = useRouter()\n\n return React.useCallback(\n <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n TResolved extends string = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n >(\n opts: UseMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n ): false | RouteById<TRouteTree, TResolved>['types']['allParams'] => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n return matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n },\n [],\n )\n}\n\nexport type MakeMatchRouteOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n MatchRouteOptions & {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | ((\n params?: RouteByPath<\n TRouteTree,\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => ReactNode)\n | React.ReactNode\n }\n\nexport function MatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n>(\n props: MakeMatchRouteOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): any {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)\n\n if (typeof props.children === 'function') {\n return (props.children as any)(params)\n }\n\n return !!params ? props.children : null\n}\n\nexport function getRenderedMatches(state: RouterState) {\n return state.pendingMatches?.some((d) => d.showPending)\n ? state.pendingMatches\n : state.matches\n}\n\nexport function useMatch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatchState = RouteMatch<TRouteTree, TFrom>,\n TSelected = TRouteMatchState,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatchState) => TSelected\n },\n): TSelected {\n const router = useRouter()\n const nearestMatchId = React.useContext(matchContext)\n\n const nearestMatchRouteId = getRenderedMatches(router.state).find(\n (d) => d.id === nearestMatchId,\n )?.routeId\n\n const matchRouteId = (() => {\n const matches = getRenderedMatches(router.state)\n const match = opts?.from\n ? matches.find((d) => d.routeId === opts?.from)\n : matches.find((d) => d.id === nearestMatchId)\n return match!.routeId\n })()\n\n if (opts?.strict ?? true) {\n invariant(\n nearestMatchRouteId == matchRouteId,\n `useMatch(\"${\n matchRouteId as string\n }\") is being called in a component that is meant to render the '${nearestMatchRouteId}' route. Did you mean to 'useMatch(\"${\n matchRouteId as string\n }\", { strict: false })' or 'useRoute(\"${\n matchRouteId as string\n }\")' instead?`,\n )\n }\n\n const matchSelection = useRouterState({\n select: (state) => {\n const match = getRenderedMatches(state).find(\n (d) => d.id === nearestMatchId,\n )\n\n invariant(\n match,\n `Could not find ${\n opts?.from\n ? `an active match from \"${opts.from}\"`\n : 'a nearest match!'\n }`,\n )\n\n return opts?.select ? opts.select(match as any) : match\n },\n })\n\n return matchSelection as any\n}\n\nexport function useMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n return useRouterState({\n select: (state) => {\n let matches = getRenderedMatches(state)\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n\nexport function useParentMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n const contextMatchId = React.useContext(matchContext)\n\n return useMatches({\n select: (matches) => {\n matches = matches.slice(matches.findIndex((d) => d.id === contextMatchId))\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n\nexport function useLoaderDeps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatch extends RouteMatch<TRouteTree, TFrom> = RouteMatch<\n TRouteTree,\n TFrom\n >,\n TSelected = Required<TRouteMatch>['loaderDeps'],\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatch) => TSelected\n },\n): TSelected {\n return useMatch({\n ...opts,\n select: (s) => {\n return typeof opts.select === 'function'\n ? opts.select(s?.loaderDeps)\n : s?.loaderDeps\n },\n })\n}\n\nexport function useLoaderData<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteMatch extends RouteMatch<TRouteTree, TFrom> = RouteMatch<\n TRouteTree,\n TFrom\n >,\n TSelected = Required<TRouteMatch>['loaderData'],\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatch) => TSelected\n },\n): TSelected {\n return useMatch({\n ...opts,\n select: (s) => {\n return typeof opts.select === 'function'\n ? opts.select(s?.loaderData)\n : s?.loaderData\n },\n })\n}\n\nexport function isServerSideError(error: unknown): error is {\n __isServerError: true\n data: Record<string, any>\n} {\n if (!(typeof error === 'object' && error && 'data' in error)) return false\n if (!('__isServerError' in error && error.__isServerError)) return false\n if (!(typeof error.data === 'object' && error.data)) return false\n\n return error.__isServerError === true\n}\n\nexport function defaultDeserializeError(serializedData: Record<string, any>) {\n if ('name' in serializedData && 'message' in serializedData) {\n const error = new Error(serializedData.message)\n error.name = serializedData.name\n return error\n }\n\n return serializedData.data\n}\n"],"names":["matchContext","React","createContext","undefined","Matches","router","useRouter","matchId","useRouterState","select","s","getRenderedMatches","id","createElement","Provider","value","CatchBoundary","getResetKey","state","resolvedLocation","key","errorComponent","ErrorComponent","onCatch","warning","Match","SafeFragment","props","Fragment","children","routeId","find","d","invariant","route","routesById","PendingComponent","options","pendingComponent","defaultPendingComponent","pendingElement","routeErrorComponent","defaultErrorComponent","ResolvedSuspenseBoundary","wrapInSuspense","component","preload","Suspense","ResolvedCatchBoundary","fallback","MatchInner","match","pick","status","isServerSideError","error","deserializeError","errorSerializer","deserialize","defaultDeserializeError","data","showPending","loadPromise","Comp","defaultComponent","Outlet","memo","useContext","childMatchId","matches","index","findIndex","useMatchRoute","location","matchRoute","useCallback","opts","pending","caseSensitive","fuzzy","includeSearch","rest","MatchRoute","params","pendingMatches","some","useMatch","nearestMatchId","nearestMatchRouteId","matchRouteId","from","strict","matchSelection","useMatches","useParentMatches","contextMatchId","slice","useLoaderDeps","loaderDeps","useLoaderData","loaderData","__isServerError","serializedData","Error","message","name"],"mappings":"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"}
@@ -10,17 +10,21 @@
10
10
  */
11
11
  'use strict';
12
12
 
13
+ var warning = require('tiny-warning');
14
+ var Matches = require('./Matches.js');
13
15
  var useRouter = require('./useRouter.js');
14
16
  var defer = require('./defer.js');
17
+ var router = require('./router.js');
15
18
 
16
19
  function useAwaited({
17
20
  promise
18
21
  }) {
19
- const router = useRouter.useRouter();
22
+ const router$1 = useRouter.useRouter();
20
23
  let state = promise.__deferredState;
21
24
  const key = `__TSR__DEFERRED__${state.uid}`;
22
25
  if (defer.isDehydratedDeferred(promise)) {
23
- state = router.hydrateData(key);
26
+ state = router$1.hydrateData(key);
27
+ if (!state) throw new Error('Could not find dehydrated data');
24
28
  promise = Promise.resolve(state.data);
25
29
  promise.__deferredState = state;
26
30
  }
@@ -28,9 +32,22 @@ function useAwaited({
28
32
  throw promise;
29
33
  }
30
34
  if (state.status === 'error') {
31
- throw state.error;
35
+ if (typeof document !== 'undefined') {
36
+ if (Matches.isServerSideError(state.error)) {
37
+ throw (router$1.options.errorSerializer?.deserialize ?? Matches.defaultDeserializeError)(state.error.data);
38
+ } else {
39
+ warning(false, "Encountered a server-side error that doesn't fit the expected shape");
40
+ throw state.error;
41
+ }
42
+ } else {
43
+ router$1.dehydrateData(key, state);
44
+ throw {
45
+ data: (router$1.options.errorSerializer?.serialize ?? router.defaultSerializeError)(state.error),
46
+ __isServerError: true
47
+ };
48
+ }
32
49
  }
33
- router.dehydrateData(key, state);
50
+ router$1.dehydrateData(key, state);
34
51
  return [state.data];
35
52
  }
36
53
  function Await(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"awaited.js","sources":["../../src/awaited.tsx"],"sourcesContent":["import { useRouter } from './useRouter'\nimport { DeferredPromise, isDehydratedDeferred } from './defer'\n\nexport type AwaitOptions<T> = {\n promise: DeferredPromise<T>\n}\n\nexport function useAwaited<T>({ promise }: AwaitOptions<T>): [T] {\n const router = useRouter()\n\n let state = promise.__deferredState\n const key = `__TSR__DEFERRED__${state.uid}`\n\n if (isDehydratedDeferred(promise)) {\n state = router.hydrateData(key)!\n promise = Promise.resolve(state.data) as DeferredPromise<any>\n promise.__deferredState = state\n }\n\n if (state.status === 'pending') {\n throw promise\n }\n\n if (state.status === 'error') {\n throw state.error\n }\n\n router.dehydrateData(key, state)\n\n return [state.data]\n}\n\nexport function Await<T>(\n props: AwaitOptions<T> & {\n children: (result: T) => JSX.Element\n },\n) {\n const awaited = useAwaited(props)\n return props.children(...awaited)\n}\n"],"names":["useAwaited","promise","router","useRouter","state","__deferredState","key","uid","isDehydratedDeferred","hydrateData","Promise","resolve","data","status","error","dehydrateData","Await","props","awaited","children"],"mappings":";;;;;;;;;;;;;;;AAOO,SAASA,UAAUA,CAAI;AAAEC,EAAAA,OAAAA;AAAyB,CAAC,EAAO;AAC/D,EAAA,MAAMC,MAAM,GAAGC,mBAAS,EAAE,CAAA;AAE1B,EAAA,IAAIC,KAAK,GAAGH,OAAO,CAACI,eAAe,CAAA;AACnC,EAAA,MAAMC,GAAG,GAAI,CAAA,iBAAA,EAAmBF,KAAK,CAACG,GAAI,CAAC,CAAA,CAAA;AAE3C,EAAA,IAAIC,0BAAoB,CAACP,OAAO,CAAC,EAAE;AACjCG,IAAAA,KAAK,GAAGF,MAAM,CAACO,WAAW,CAACH,GAAG,CAAE,CAAA;IAChCL,OAAO,GAAGS,OAAO,CAACC,OAAO,CAACP,KAAK,CAACQ,IAAI,CAAyB,CAAA;IAC7DX,OAAO,CAACI,eAAe,GAAGD,KAAK,CAAA;AACjC,GAAA;AAEA,EAAA,IAAIA,KAAK,CAACS,MAAM,KAAK,SAAS,EAAE;AAC9B,IAAA,MAAMZ,OAAO,CAAA;AACf,GAAA;AAEA,EAAA,IAAIG,KAAK,CAACS,MAAM,KAAK,OAAO,EAAE;IAC5B,MAAMT,KAAK,CAACU,KAAK,CAAA;AACnB,GAAA;AAEAZ,EAAAA,MAAM,CAACa,aAAa,CAACT,GAAG,EAAEF,KAAK,CAAC,CAAA;AAEhC,EAAA,OAAO,CAACA,KAAK,CAACQ,IAAI,CAAC,CAAA;AACrB,CAAA;AAEO,SAASI,KAAKA,CACnBC,KAEC,EACD;AACA,EAAA,MAAMC,OAAO,GAAGlB,UAAU,CAACiB,KAAK,CAAC,CAAA;AACjC,EAAA,OAAOA,KAAK,CAACE,QAAQ,CAAC,GAAGD,OAAO,CAAC,CAAA;AACnC;;;;;"}
1
+ {"version":3,"file":"awaited.js","sources":["../../src/awaited.tsx"],"sourcesContent":["import warning from 'tiny-warning'\nimport { defaultDeserializeError, isServerSideError } from './Matches'\nimport { useRouter } from './useRouter'\nimport { DeferredPromise, isDehydratedDeferred } from './defer'\nimport { defaultSerializeError } from './router'\n\nexport type AwaitOptions<T> = {\n promise: DeferredPromise<T>\n}\n\nexport function useAwaited<T>({ promise }: AwaitOptions<T>): [T] {\n const router = useRouter()\n\n let state = promise.__deferredState\n const key = `__TSR__DEFERRED__${state.uid}`\n\n if (isDehydratedDeferred(promise)) {\n state = router.hydrateData(key)!\n if (!state) throw new Error('Could not find dehydrated data')\n promise = Promise.resolve(state.data) as DeferredPromise<any>\n promise.__deferredState = state\n }\n\n if (state.status === 'pending') {\n throw promise\n }\n\n if (state.status === 'error') {\n if (typeof document !== 'undefined') {\n if (isServerSideError(state.error)) {\n throw (\n router.options.errorSerializer?.deserialize ?? defaultDeserializeError\n )(state.error.data as any)\n } else {\n warning(\n false,\n \"Encountered a server-side error that doesn't fit the expected shape\",\n )\n throw state.error\n }\n } else {\n router.dehydrateData(key, state)\n throw {\n data: (\n router.options.errorSerializer?.serialize ?? defaultSerializeError\n )(state.error),\n __isServerError: true,\n }\n }\n }\n\n router.dehydrateData(key, state)\n\n return [state.data]\n}\n\nexport function Await<T>(\n props: AwaitOptions<T> & {\n children: (result: T) => JSX.Element\n },\n) {\n const awaited = useAwaited(props)\n return props.children(...awaited)\n}\n"],"names":["useAwaited","promise","router","useRouter","state","__deferredState","key","uid","isDehydratedDeferred","hydrateData","Error","Promise","resolve","data","status","document","isServerSideError","error","options","errorSerializer","deserialize","defaultDeserializeError","warning","dehydrateData","serialize","defaultSerializeError","__isServerError","Await","props","awaited","children"],"mappings":";;;;;;;;;;;;;;;;;;AAUO,SAASA,UAAUA,CAAI;AAAEC,EAAAA,OAAAA;AAAyB,CAAC,EAAO;AAC/D,EAAA,MAAMC,QAAM,GAAGC,mBAAS,EAAE,CAAA;AAE1B,EAAA,IAAIC,KAAK,GAAGH,OAAO,CAACI,eAAe,CAAA;AACnC,EAAA,MAAMC,GAAG,GAAI,CAAA,iBAAA,EAAmBF,KAAK,CAACG,GAAI,CAAC,CAAA,CAAA;AAE3C,EAAA,IAAIC,0BAAoB,CAACP,OAAO,CAAC,EAAE;AACjCG,IAAAA,KAAK,GAAGF,QAAM,CAACO,WAAW,CAACH,GAAG,CAAE,CAAA;IAChC,IAAI,CAACF,KAAK,EAAE,MAAM,IAAIM,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAC7DT,OAAO,GAAGU,OAAO,CAACC,OAAO,CAACR,KAAK,CAACS,IAAI,CAAyB,CAAA;IAC7DZ,OAAO,CAACI,eAAe,GAAGD,KAAK,CAAA;AACjC,GAAA;AAEA,EAAA,IAAIA,KAAK,CAACU,MAAM,KAAK,SAAS,EAAE;AAC9B,IAAA,MAAMb,OAAO,CAAA;AACf,GAAA;AAEA,EAAA,IAAIG,KAAK,CAACU,MAAM,KAAK,OAAO,EAAE;AAC5B,IAAA,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;AACnC,MAAA,IAAIC,yBAAiB,CAACZ,KAAK,CAACa,KAAK,CAAC,EAAE;AAClC,QAAA,MAAM,CACJf,QAAM,CAACgB,OAAO,CAACC,eAAe,EAAEC,WAAW,IAAIC,+BAAuB,EACtEjB,KAAK,CAACa,KAAK,CAACJ,IAAW,CAAC,CAAA;AAC5B,OAAC,MAAM;AACLS,QAAAA,OAAO,CACL,KAAK,EACL,qEACF,CAAC,CAAA;QACD,MAAMlB,KAAK,CAACa,KAAK,CAAA;AACnB,OAAA;AACF,KAAC,MAAM;AACLf,MAAAA,QAAM,CAACqB,aAAa,CAACjB,GAAG,EAAEF,KAAK,CAAC,CAAA;MAChC,MAAM;AACJS,QAAAA,IAAI,EAAE,CACJX,QAAM,CAACgB,OAAO,CAACC,eAAe,EAAEK,SAAS,IAAIC,4BAAqB,EAClErB,KAAK,CAACa,KAAK,CAAC;AACdS,QAAAA,eAAe,EAAE,IAAA;OAClB,CAAA;AACH,KAAA;AACF,GAAA;AAEAxB,EAAAA,QAAM,CAACqB,aAAa,CAACjB,GAAG,EAAEF,KAAK,CAAC,CAAA;AAEhC,EAAA,OAAO,CAACA,KAAK,CAACS,IAAI,CAAC,CAAA;AACrB,CAAA;AAEO,SAASc,KAAKA,CACnBC,KAEC,EACD;AACA,EAAA,MAAMC,OAAO,GAAG7B,UAAU,CAAC4B,KAAK,CAAC,CAAA;AACjC,EAAA,OAAOA,KAAK,CAACE,QAAQ,CAAC,GAAGD,OAAO,CAAC,CAAA;AACnC;;;;;"}
@@ -10,7 +10,9 @@
10
10
  */
11
11
  'use strict';
12
12
 
13
- function defer(_promise) {
13
+ var router = require('./router.js');
14
+
15
+ function defer(_promise, options) {
14
16
  const promise = _promise;
15
17
  if (!promise.__deferredState) {
16
18
  promise.__deferredState = {
@@ -23,7 +25,10 @@ function defer(_promise) {
23
25
  state.data = data;
24
26
  }).catch(error => {
25
27
  state.status = 'error';
26
- state.error = error;
28
+ state.error = {
29
+ data: (options?.serializeError ?? router.defaultSerializeError)(error),
30
+ __isServerError: true
31
+ };
27
32
  });
28
33
  }
29
34
  return promise;
@@ -1 +1 @@
1
- {"version":3,"file":"defer.js","sources":["../../src/defer.ts"],"sourcesContent":["export type DeferredPromiseState<T> = { uid: string } & (\n | {\n status: 'pending'\n data?: T\n error?: unknown\n }\n | {\n status: 'success'\n data: T\n }\n | {\n status: 'error'\n data?: T\n error: unknown\n }\n)\n\nexport type DeferredPromise<T> = Promise<T> & {\n __deferredState: DeferredPromiseState<T>\n}\n\nexport function defer<T>(_promise: Promise<T>) {\n const promise = _promise as DeferredPromise<T>\n\n if (!promise.__deferredState) {\n promise.__deferredState = {\n uid: Math.random().toString(36).slice(2),\n status: 'pending',\n }\n\n const state = promise.__deferredState\n\n promise\n .then((data) => {\n state.status = 'success' as any\n state.data = data\n })\n .catch((error) => {\n state.status = 'error' as any\n state.error = error\n })\n }\n\n return promise\n}\n\nexport function isDehydratedDeferred(obj: any): boolean {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n !(obj instanceof Promise) &&\n !obj.then &&\n '__deferredState' in obj\n )\n}\n"],"names":["defer","_promise","promise","__deferredState","uid","Math","random","toString","slice","status","state","then","data","catch","error","isDehydratedDeferred","obj","Promise"],"mappings":";;;;;;;;;;;;AAqBO,SAASA,KAAKA,CAAIC,QAAoB,EAAE;EAC7C,MAAMC,OAAO,GAAGD,QAA8B,CAAA;AAE9C,EAAA,IAAI,CAACC,OAAO,CAACC,eAAe,EAAE;IAC5BD,OAAO,CAACC,eAAe,GAAG;AACxBC,MAAAA,GAAG,EAAEC,IAAI,CAACC,MAAM,EAAE,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC;AACxCC,MAAAA,MAAM,EAAE,SAAA;KACT,CAAA;AAED,IAAA,MAAMC,KAAK,GAAGR,OAAO,CAACC,eAAe,CAAA;AAErCD,IAAAA,OAAO,CACJS,IAAI,CAAEC,IAAI,IAAK;MACdF,KAAK,CAACD,MAAM,GAAG,SAAgB,CAAA;MAC/BC,KAAK,CAACE,IAAI,GAAGA,IAAI,CAAA;AACnB,KAAC,CAAC,CACDC,KAAK,CAAEC,KAAK,IAAK;MAChBJ,KAAK,CAACD,MAAM,GAAG,OAAc,CAAA;MAC7BC,KAAK,CAACI,KAAK,GAAGA,KAAK,CAAA;AACrB,KAAC,CAAC,CAAA;AACN,GAAA;AAEA,EAAA,OAAOZ,OAAO,CAAA;AAChB,CAAA;AAEO,SAASa,oBAAoBA,CAACC,GAAQ,EAAW;EACtD,OACE,OAAOA,GAAG,KAAK,QAAQ,IACvBA,GAAG,KAAK,IAAI,IACZ,EAAEA,GAAG,YAAYC,OAAO,CAAC,IACzB,CAACD,GAAG,CAACL,IAAI,IACT,iBAAiB,IAAIK,GAAG,CAAA;AAE5B;;;;;"}
1
+ {"version":3,"file":"defer.js","sources":["../../src/defer.ts"],"sourcesContent":["import { defaultSerializeError } from './router'\n\nexport type DeferredPromiseState<T> = { uid: string } & (\n | {\n status: 'pending'\n data?: T\n error?: unknown\n }\n | {\n status: 'success'\n data: T\n }\n | {\n status: 'error'\n data?: T\n error: unknown\n }\n)\n\nexport type DeferredPromise<T> = Promise<T> & {\n __deferredState: DeferredPromiseState<T>\n}\n\nexport function defer<T>(\n _promise: Promise<T>,\n options?: {\n serializeError?: typeof defaultSerializeError\n },\n) {\n const promise = _promise as DeferredPromise<T>\n\n if (!promise.__deferredState) {\n promise.__deferredState = {\n uid: Math.random().toString(36).slice(2),\n status: 'pending',\n }\n\n const state = promise.__deferredState\n\n promise\n .then((data) => {\n state.status = 'success' as any\n state.data = data\n })\n .catch((error) => {\n state.status = 'error' as any\n state.error = {\n data: (options?.serializeError ?? defaultSerializeError)(error),\n __isServerError: true,\n }\n })\n }\n\n return promise\n}\n\nexport function isDehydratedDeferred(obj: any): boolean {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n !(obj instanceof Promise) &&\n !obj.then &&\n '__deferredState' in obj\n )\n}\n"],"names":["defer","_promise","options","promise","__deferredState","uid","Math","random","toString","slice","status","state","then","data","catch","error","serializeError","defaultSerializeError","__isServerError","isDehydratedDeferred","obj","Promise"],"mappings":";;;;;;;;;;;;;;AAuBO,SAASA,KAAKA,CACnBC,QAAoB,EACpBC,OAEC,EACD;EACA,MAAMC,OAAO,GAAGF,QAA8B,CAAA;AAE9C,EAAA,IAAI,CAACE,OAAO,CAACC,eAAe,EAAE;IAC5BD,OAAO,CAACC,eAAe,GAAG;AACxBC,MAAAA,GAAG,EAAEC,IAAI,CAACC,MAAM,EAAE,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC;AACxCC,MAAAA,MAAM,EAAE,SAAA;KACT,CAAA;AAED,IAAA,MAAMC,KAAK,GAAGR,OAAO,CAACC,eAAe,CAAA;AAErCD,IAAAA,OAAO,CACJS,IAAI,CAAEC,IAAI,IAAK;MACdF,KAAK,CAACD,MAAM,GAAG,SAAgB,CAAA;MAC/BC,KAAK,CAACE,IAAI,GAAGA,IAAI,CAAA;AACnB,KAAC,CAAC,CACDC,KAAK,CAAEC,KAAK,IAAK;MAChBJ,KAAK,CAACD,MAAM,GAAG,OAAc,CAAA;MAC7BC,KAAK,CAACI,KAAK,GAAG;QACZF,IAAI,EAAE,CAACX,OAAO,EAAEc,cAAc,IAAIC,4BAAqB,EAAEF,KAAK,CAAC;AAC/DG,QAAAA,eAAe,EAAE,IAAA;OAClB,CAAA;AACH,KAAC,CAAC,CAAA;AACN,GAAA;AAEA,EAAA,OAAOf,OAAO,CAAA;AAChB,CAAA;AAEO,SAASgB,oBAAoBA,CAACC,GAAQ,EAAW;EACtD,OACE,OAAOA,GAAG,KAAK,QAAQ,IACvBA,GAAG,KAAK,IAAI,IACZ,EAAEA,GAAG,YAAYC,OAAO,CAAC,IACzB,CAACD,GAAG,CAACR,IAAI,IACT,iBAAiB,IAAIQ,GAAG,CAAA;AAE5B;;;;;"}
@@ -58,7 +58,9 @@ exports.Match = Matches.Match;
58
58
  exports.MatchRoute = Matches.MatchRoute;
59
59
  exports.Matches = Matches.Matches;
60
60
  exports.Outlet = Matches.Outlet;
61
+ exports.defaultDeserializeError = Matches.defaultDeserializeError;
61
62
  exports.getRenderedMatches = Matches.getRenderedMatches;
63
+ exports.isServerSideError = Matches.isServerSideError;
62
64
  exports.matchContext = Matches.matchContext;
63
65
  exports.useLoaderData = Matches.useLoaderData;
64
66
  exports.useLoaderDeps = Matches.useLoaderDeps;
@@ -92,6 +94,7 @@ exports.PathParamError = router.PathParamError;
92
94
  exports.Router = router.Router;
93
95
  exports.SearchParamError = router.SearchParamError;
94
96
  exports.componentTypes = router.componentTypes;
97
+ exports.defaultSerializeError = router.defaultSerializeError;
95
98
  exports.getInitialRouterState = router.getInitialRouterState;
96
99
  exports.lazyFn = router.lazyFn;
97
100
  exports.RouterProvider = RouterProvider.RouterProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sources":["../../src/link.tsx"],"sourcesContent":["import * as React from 'react'\nimport { useMatch } from './Matches'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { Trim } from './fileRoute'\nimport { AnyRoute, ReactNode, RootSearchSchema } from './route'\nimport { RouteByPath, RouteIds, RoutePaths } from './routeInfo'\nimport { RegisteredRouter } from './router'\nimport { LinkProps, UseLinkPropsOptions } from './useNavigate'\nimport {\n Expand,\n NoInfer,\n NonNullableUpdater,\n PickRequired,\n StringLiteral,\n Updater,\n WithoutEmpty,\n deepEqual,\n functionalUpdate,\n} from './utils'\nimport { HistoryState } from '@tanstack/history'\n\nexport type CleanPath<T extends string> = T extends `${infer L}//${infer R}`\n ? CleanPath<`${CleanPath<L>}/${CleanPath<R>}`>\n : T extends `${infer L}//`\n ? `${CleanPath<L>}/`\n : T extends `//${infer L}`\n ? `/${CleanPath<L>}`\n : T\n\nexport type Split<S, TIncludeTrailingSlash = true> = S extends unknown\n ? string extends S\n ? string[]\n : S extends string\n ? CleanPath<S> extends ''\n ? []\n : TIncludeTrailingSlash extends true\n ? CleanPath<S> extends `${infer T}/`\n ? [...Split<T>, '/']\n : CleanPath<S> extends `/${infer U}`\n ? Split<U>\n : CleanPath<S> extends `${infer T}/${infer U}`\n ? [...Split<T>, ...Split<U>]\n : [S]\n : CleanPath<S> extends `${infer T}/${infer U}`\n ? [...Split<T>, ...Split<U>]\n : S extends string\n ? [S]\n : never\n : never\n : never\n\nexport type ParsePathParams<T extends string> = keyof {\n [K in Trim<Split<T>[number], '_'> as K extends `$${infer L}` ? L extends '' ? '_splat' : L: never]: K\n}\n\nexport type Join<T, Delimiter extends string = '/'> = T extends []\n ? ''\n : T extends [infer L extends string]\n ? L\n : T extends [infer L extends string, ...infer Tail extends [...string[]]]\n ? CleanPath<`${L}${Delimiter}${Join<Tail>}`>\n : never\n\nexport type Last<T extends any[]> = T extends [...infer _, infer L] ? L : never\n\nexport type RelativeToPathAutoComplete<\n AllPaths extends string,\n TFrom extends string,\n TTo extends string,\n SplitPaths extends string[] = Split<AllPaths, false>,\n> = TTo extends `..${infer _}`\n ? SplitPaths extends [\n ...Split<ResolveRelativePath<TFrom, TTo>, false>,\n ...infer TToRest,\n ]\n ? `${CleanPath<\n Join<\n [\n ...Split<TTo, false>,\n ...(\n | TToRest\n | (Split<\n ResolveRelativePath<TFrom, TTo>,\n false\n >['length'] extends 1\n ? never\n : ['../'])\n ),\n ]\n >\n >}`\n : never\n : TTo extends `./${infer RestTTo}`\n ? SplitPaths extends [\n ...Split<TFrom, false>,\n ...Split<RestTTo, false>,\n ...infer RestPath,\n ]\n ? `${TTo}${Join<RestPath>}`\n : never\n :\n | (TFrom extends `/`\n ? never\n : SplitPaths extends [...Split<TFrom, false>, ...infer RestPath]\n ? Join<RestPath> extends { length: 0 }\n ? never\n : './'\n : never)\n | (TFrom extends `/` ? never : '../')\n | AllPaths\n\nexport type NavigateOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // `replace` is a boolean that determines whether the navigation should replace the current history entry or push a new one.\n replace?: boolean\n resetScroll?: boolean\n // If set to `true`, the link's underlying navigate() call will be wrapped in a `React.startTransition` call. Defaults to `true`.\n startTransition?: boolean\n}\n\nexport type ToOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptions<TRouteTree, TFrom, TTo> & {\n mask?: ToMaskOptions<TRouteTree, TMaskFrom, TMaskTo>\n}\n\nexport type ToMaskOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TMaskFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TMaskTo extends string = '',\n> = ToSubOptions<TRouteTree, TMaskFrom, TMaskTo> & {\n unmaskOnReload?: boolean\n}\n\nexport type ToSubOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n> = {\n to?: ToPathOption<TRouteTree, TFrom, TTo>\n // The new has string or a function to update it\n hash?: true | Updater<string>\n // State to pass to the history stack\n state?: true | NonNullableUpdater<HistoryState>\n // The source route path. This is automatically set when using route-level APIs, but for type-safe relative routing on the router itself, this is required\n from?: StringLiteral<TFrom>\n // // When using relative route paths, this option forces resolution from the current path, instead of the route API's path or `from` path\n} & CheckPath<TRouteTree, NoInfer<TResolved>, {}> &\n SearchParamOptions<TRouteTree, TFrom, TTo, TResolved> &\n PathParamOptions<TRouteTree, TFrom, TTo, TResolved>\n\ntype ParamsReducer<TFrom, TTo> = TTo | ((current: TFrom) => TTo)\n\ntype ParamVariant = 'PATH' | 'SEARCH'\nexport type ParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n TParamVariant extends ParamVariant,\n TFromRouteType extends\n | 'allParams'\n | 'fullSearchSchema' = TParamVariant extends 'PATH'\n ? 'allParams'\n : 'fullSearchSchema',\n TToRouteType extends\n | 'allParams'\n | 'fullSearchSchemaInput' = TParamVariant extends 'PATH'\n ? 'allParams'\n : 'fullSearchSchemaInput',\n TFromParams = Expand<\n Exclude<\n RouteByPath<TRouteTree, TFrom>['types'][TFromRouteType],\n RootSearchSchema\n >\n >,\n TToIndex = TTo extends ''\n ? ''\n : RouteByPath<TRouteTree, `${TTo}/`> extends never\n ? TTo\n : `${TTo}/`,\n TToParams = TToIndex extends ''\n ? TFromParams\n : never extends TResolved\n ? Expand<\n Exclude<\n RouteByPath<TRouteTree, TToIndex>['types'][TToRouteType],\n RootSearchSchema\n >\n >\n : Expand<\n Exclude<\n RouteByPath<TRouteTree, TResolved>['types'][TToRouteType],\n RootSearchSchema\n >\n >,\n TReducer = ParamsReducer<TFromParams, TToParams>,\n> = Expand<WithoutEmpty<PickRequired<TToParams>>> extends never\n ? Partial<MakeParamOption<TParamVariant, true | TReducer>>\n : TFromParams extends Expand<WithoutEmpty<PickRequired<TToParams>>>\n ? MakeParamOption<TParamVariant, true | TReducer>\n : MakeParamOption<TParamVariant, TReducer>\n\ntype MakeParamOption<\n TParamVariant extends ParamVariant,\n T,\n> = TParamVariant extends 'PATH'\n ? MakePathParamOptions<T>\n : MakeSearchParamOptions<T>\ntype MakeSearchParamOptions<T> = { search: T }\ntype MakePathParamOptions<T> = { params: T }\n\nexport type SearchParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'SEARCH'>\n\nexport type PathParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'PATH'>\n\nexport type ToPathOption<\n TRouteTree extends AnyRoute = AnyRoute,\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n> =\n | TTo\n | RelativeToPathAutoComplete<\n RoutePaths<TRouteTree>,\n NoInfer<TFrom> extends string ? NoInfer<TFrom> : '',\n NoInfer<TTo> & string\n >\n\nexport interface ActiveOptions {\n exact?: boolean\n includeHash?: boolean\n includeSearch?: boolean\n}\n\nexport type LinkOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // The standard anchor tag target attribute\n target?: HTMLAnchorElement['target']\n // Defaults to `{ exact: false, includeHash: false }`\n activeOptions?: ActiveOptions\n // If set, will preload the linked route on hover and cache it for this many milliseconds in hopes that the user will eventually navigate there.\n preload?: false | 'intent'\n // Delay intent preloading by this many milliseconds. If the intent exits before this delay, the preload will be cancelled.\n preloadDelay?: number\n // If true, will render the link without the href attribute\n disabled?: boolean\n}\n\nexport type CheckPath<TRouteTree extends AnyRoute, TPath, TPass> = Exclude<\n TPath,\n RoutePaths<TRouteTree>\n> extends never\n ? TPass\n : CheckPathError<TRouteTree, Exclude<TPath, RoutePaths<TRouteTree>>>\n\nexport type CheckPathError<TRouteTree extends AnyRoute, TInvalids> = {\n to: RoutePaths<TRouteTree>\n}\n\nexport type ResolveRelativePath<TFrom, TTo = '.'> = TFrom extends string\n ? TTo extends string\n ? TTo extends '.'\n ? TFrom\n : TTo extends `./`\n ? Join<[TFrom, '/']>\n : TTo extends `./${infer TRest}`\n ? ResolveRelativePath<TFrom, TRest>\n : TTo extends `/${infer TRest}`\n ? TTo\n : Split<TTo> extends ['..', ...infer ToRest]\n ? Split<TFrom> extends [...infer FromRest, infer FromTail]\n ? ToRest extends ['/']\n ? Join<[...FromRest, '/']>\n : ResolveRelativePath<Join<FromRest>, Join<ToRest>>\n : never\n : Split<TTo> extends ['.', ...infer ToRest]\n ? ToRest extends ['/']\n ? Join<[TFrom, '/']>\n : ResolveRelativePath<TFrom, Join<ToRest>>\n : CleanPath<Join<['/', ...Split<TFrom>, ...Split<TTo>]>>\n : never\n : never\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nconst preloadWarning = 'Error preloading route! ☝️'\n\nexport function useLinkProps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): React.AnchorHTMLAttributes<HTMLAnchorElement> {\n const router = useRouter()\n const matchPathname = useMatch({\n strict: false,\n select: (s) => s.pathname,\n })\n\n const {\n // custom props\n children,\n target,\n activeProps = () => ({ className: 'active' }),\n inactiveProps = () => ({}),\n activeOptions,\n disabled,\n hash,\n search,\n params,\n to,\n state,\n mask,\n preload: userPreload,\n preloadDelay: userPreloadDelay,\n replace,\n startTransition,\n resetScroll,\n // element props\n style,\n className,\n onClick,\n onFocus,\n onMouseEnter,\n onMouseLeave,\n onTouchStart,\n ...rest\n } = options\n\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n const dest = {\n from: options.to ? matchPathname : undefined,\n ...options,\n }\n\n let type: 'internal' | 'external' = 'internal'\n\n try {\n new URL(`${to}`)\n type = 'external'\n } catch {}\n\n if (type === 'external') {\n return {\n href: to,\n }\n }\n\n const next = router.buildLocation(dest as any)\n const preload = userPreload ?? router.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = useRouterState({\n select: (s) => {\n // Compare path/hash for matches\n const currentPathSplit = s.location.pathname.split('/')\n const nextPathSplit = next.pathname.split('/')\n const pathIsFuzzyEqual = nextPathSplit.every(\n (d, i) => d === currentPathSplit[i],\n )\n // Combine the matches based on user router.options\n const pathTest = activeOptions?.exact\n ? s.location.pathname === next.pathname\n : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash\n ? s.location.hash === next.hash\n : true\n const searchTest =\n activeOptions?.includeSearch ?? true\n ? deepEqual(s.location.search, next.search, !activeOptions?.exact)\n : true\n\n // The final \"active\" test\n return pathTest && hashTest && searchTest\n },\n })\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n if (\n !disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!target || target === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n // All is well? Navigate!\n router.commitLocation({ ...next, replace, resetScroll, startTransition })\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleTouchStart = (e: TouchEvent) => {\n if (preload) {\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleEnter = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload) {\n if (target.preloadTimeout) {\n return\n }\n\n target.preloadTimeout = setTimeout(() => {\n target.preloadTimeout = null\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }, preloadDelay)\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (target.preloadTimeout) {\n clearTimeout(target.preloadTimeout)\n target.preloadTimeout = null\n }\n }\n\n const composeHandlers =\n (handlers: (undefined | ((e: any) => void))[]) =>\n (e: React.SyntheticEvent) => {\n if (e.persist) e.persist()\n handlers.filter(Boolean).forEach((handler) => {\n if (e.defaultPrevented) return\n handler!(e)\n })\n }\n\n // Get the active props\n const resolvedActiveProps: React.HTMLAttributes<HTMLAnchorElement> = isActive\n ? functionalUpdate(activeProps as any, {}) ?? {}\n : {}\n\n // Get the inactive props\n const resolvedInactiveProps: React.HTMLAttributes<HTMLAnchorElement> =\n isActive ? {} : functionalUpdate(inactiveProps, {}) ?? {}\n\n return {\n ...resolvedActiveProps,\n ...resolvedInactiveProps,\n ...rest,\n href: disabled\n ? undefined\n : next.maskedLocation\n ? next.maskedLocation.href\n : next.href,\n onClick: composeHandlers([onClick, handleClick]),\n onFocus: composeHandlers([onFocus, handleFocus]),\n onMouseEnter: composeHandlers([onMouseEnter, handleEnter]),\n onMouseLeave: composeHandlers([onMouseLeave, handleLeave]),\n onTouchStart: composeHandlers([onTouchStart, handleTouchStart]),\n target,\n style: {\n ...style,\n ...resolvedActiveProps.style,\n ...resolvedInactiveProps.style,\n },\n className:\n [\n className,\n resolvedActiveProps.className,\n resolvedInactiveProps.className,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n ...(disabled\n ? {\n role: 'link',\n 'aria-disabled': true,\n }\n : undefined),\n ['data-status']: isActive ? 'active' : undefined,\n }\n}\n\nexport interface LinkComponent<TProps extends Record<string, any> = {}> {\n <\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n >(\n props: LinkProps<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n TProps &\n React.RefAttributes<HTMLAnchorElement>,\n ): ReactNode\n}\n\nexport const Link: LinkComponent = React.forwardRef((props: any, ref) => {\n const linkProps = useLinkProps(props)\n\n return (\n <a\n {...{\n ref: ref as any,\n ...linkProps,\n children:\n typeof props.children === 'function'\n ? props.children({\n isActive: (linkProps as any)['data-status'] === 'active',\n })\n : props.children,\n }}\n />\n )\n}) as any\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n"],"names":["preloadWarning","useLinkProps","options","router","useRouter","matchPathname","useMatch","strict","select","s","pathname","children","target","activeProps","className","inactiveProps","activeOptions","disabled","hash","search","params","to","state","mask","preload","userPreload","preloadDelay","userPreloadDelay","replace","startTransition","resetScroll","style","onClick","onFocus","onMouseEnter","onMouseLeave","onTouchStart","rest","dest","from","undefined","type","URL","href","next","buildLocation","defaultPreload","defaultPreloadDelay","isActive","useRouterState","currentPathSplit","location","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","pathTest","exact","hashTest","includeHash","searchTest","includeSearch","deepEqual","handleClick","e","isCtrlEvent","defaultPrevented","button","preventDefault","commitLocation","handleFocus","preloadRoute","catch","err","console","warn","handleTouchStart","handleEnter","preloadTimeout","setTimeout","handleLeave","clearTimeout","composeHandlers","handlers","persist","filter","Boolean","forEach","handler","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","maskedLocation","join","role","Link","React","forwardRef","props","ref","linkProps","createElement","_extends","metaKey","altKey","ctrlKey","shiftKey"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyTA,MAAMA,cAAc,GAAG,4BAA4B,CAAA;AAE5C,SAASC,YAAYA,CAO1BC,OAAwE,EACzB;AAC/C,EAAA,MAAMC,MAAM,GAAGC,mBAAS,EAAE,CAAA;EAC1B,MAAMC,aAAa,GAAGC,gBAAQ,CAAC;AAC7BC,IAAAA,MAAM,EAAE,KAAK;AACbC,IAAAA,MAAM,EAAGC,CAAC,IAAKA,CAAC,CAACC,QAAAA;AACnB,GAAC,CAAC,CAAA;EAEF,MAAM;AACJ;IACAC,QAAQ;IACRC,MAAM;IACNC,WAAW,GAAGA,OAAO;AAAEC,MAAAA,SAAS,EAAE,QAAA;AAAS,KAAC,CAAC;AAC7CC,IAAAA,aAAa,GAAGA,OAAO,EAAE,CAAC;IAC1BC,aAAa;IACbC,QAAQ;IACRC,IAAI;IACJC,MAAM;IACNC,MAAM;IACNC,EAAE;IACFC,KAAK;IACLC,IAAI;AACJC,IAAAA,OAAO,EAAEC,WAAW;AACpBC,IAAAA,YAAY,EAAEC,gBAAgB;IAC9BC,OAAO;IACPC,eAAe;IACfC,WAAW;AACX;IACAC,KAAK;IACLjB,SAAS;IACTkB,OAAO;IACPC,OAAO;IACPC,YAAY;IACZC,YAAY;IACZC,YAAY;IACZ,GAAGC,IAAAA;AACL,GAAC,GAAGnC,OAAO,CAAA;;AAEX;AACA;;AAEA;AACA;;AAEA,EAAA,MAAMoC,IAAI,GAAG;AACXC,IAAAA,IAAI,EAAErC,OAAO,CAACmB,EAAE,GAAGhB,aAAa,GAAGmC,SAAS;IAC5C,GAAGtC,OAAAA;GACJ,CAAA;EAED,IAAIuC,IAA6B,GAAG,UAAU,CAAA;EAE9C,IAAI;AACF,IAAA,IAAIC,GAAG,CAAE,CAAErB,EAAAA,EAAG,EAAC,CAAC,CAAA;AAChBoB,IAAAA,IAAI,GAAG,UAAU,CAAA;GAClB,CAAC,MAAM,EAAC;EAET,IAAIA,IAAI,KAAK,UAAU,EAAE;IACvB,OAAO;AACLE,MAAAA,IAAI,EAAEtB,EAAAA;KACP,CAAA;AACH,GAAA;AAEA,EAAA,MAAMuB,IAAI,GAAGzC,MAAM,CAAC0C,aAAa,CAACP,IAAW,CAAC,CAAA;EAC9C,MAAMd,OAAO,GAAGC,WAAW,IAAItB,MAAM,CAACD,OAAO,CAAC4C,cAAc,CAAA;EAC5D,MAAMpB,YAAY,GAChBC,gBAAgB,IAAIxB,MAAM,CAACD,OAAO,CAAC6C,mBAAmB,IAAI,CAAC,CAAA;EAE7D,MAAMC,QAAQ,GAAGC,6BAAc,CAAC;IAC9BzC,MAAM,EAAGC,CAAC,IAAK;AACb;MACA,MAAMyC,gBAAgB,GAAGzC,CAAC,CAAC0C,QAAQ,CAACzC,QAAQ,CAAC0C,KAAK,CAAC,GAAG,CAAC,CAAA;MACvD,MAAMC,aAAa,GAAGT,IAAI,CAAClC,QAAQ,CAAC0C,KAAK,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAA,MAAME,gBAAgB,GAAGD,aAAa,CAACE,KAAK,CAC1C,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,KAAKN,gBAAgB,CAACO,CAAC,CACpC,CAAC,CAAA;AACD;AACA,MAAA,MAAMC,QAAQ,GAAG1C,aAAa,EAAE2C,KAAK,GACjClD,CAAC,CAAC0C,QAAQ,CAACzC,QAAQ,KAAKkC,IAAI,CAAClC,QAAQ,GACrC4C,gBAAgB,CAAA;AACpB,MAAA,MAAMM,QAAQ,GAAG5C,aAAa,EAAE6C,WAAW,GACvCpD,CAAC,CAAC0C,QAAQ,CAACjC,IAAI,KAAK0B,IAAI,CAAC1B,IAAI,GAC7B,IAAI,CAAA;MACR,MAAM4C,UAAU,GACd9C,aAAa,EAAE+C,aAAa,IAAI,IAAI,GAChCC,eAAS,CAACvD,CAAC,CAAC0C,QAAQ,CAAChC,MAAM,EAAEyB,IAAI,CAACzB,MAAM,EAAE,CAACH,aAAa,EAAE2C,KAAK,CAAC,GAChE,IAAI,CAAA;;AAEV;AACA,MAAA,OAAOD,QAAQ,IAAIE,QAAQ,IAAIE,UAAU,CAAA;AAC3C,KAAA;AACF,GAAC,CAAC,CAAA;;AAEF;EACA,MAAMG,WAAW,GAAIC,CAAa,IAAK;IACrC,IACE,CAACjD,QAAQ,IACT,CAACkD,WAAW,CAACD,CAAC,CAAC,IACf,CAACA,CAAC,CAACE,gBAAgB,KAClB,CAACxD,MAAM,IAAIA,MAAM,KAAK,OAAO,CAAC,IAC/BsD,CAAC,CAACG,MAAM,KAAK,CAAC,EACd;MACAH,CAAC,CAACI,cAAc,EAAE,CAAA;;AAElB;MACAnE,MAAM,CAACoE,cAAc,CAAC;AAAE,QAAA,GAAG3B,IAAI;QAAEhB,OAAO;QAAEE,WAAW;AAAED,QAAAA,eAAAA;AAAgB,OAAC,CAAC,CAAA;AAC3E,KAAA;GACD,CAAA;;AAED;EACA,MAAM2C,WAAW,GAAIN,CAAa,IAAK;AACrC,IAAA,IAAI1C,OAAO,EAAE;MACXrB,MAAM,CAACsE,YAAY,CAACnC,IAAW,CAAC,CAACoC,KAAK,CAAEC,GAAG,IAAK;AAC9CC,QAAAA,OAAO,CAACC,IAAI,CAACF,GAAG,CAAC,CAAA;AACjBC,QAAAA,OAAO,CAACC,IAAI,CAAC7E,cAAc,CAAC,CAAA;AAC9B,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,CAAA;EAED,MAAM8E,gBAAgB,GAAIZ,CAAa,IAAK;AAC1C,IAAA,IAAI1C,OAAO,EAAE;MACXrB,MAAM,CAACsE,YAAY,CAACnC,IAAW,CAAC,CAACoC,KAAK,CAAEC,GAAG,IAAK;AAC9CC,QAAAA,OAAO,CAACC,IAAI,CAACF,GAAG,CAAC,CAAA;AACjBC,QAAAA,OAAO,CAACC,IAAI,CAAC7E,cAAc,CAAC,CAAA;AAC9B,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,CAAA;EAED,MAAM+E,WAAW,GAAIb,CAAa,IAAK;AACrC,IAAA,MAAMtD,MAAM,GAAIsD,CAAC,CAACtD,MAAM,IAAI,EAA+B,CAAA;AAE3D,IAAA,IAAIY,OAAO,EAAE;MACX,IAAIZ,MAAM,CAACoE,cAAc,EAAE;AACzB,QAAA,OAAA;AACF,OAAA;AAEApE,MAAAA,MAAM,CAACoE,cAAc,GAAGC,UAAU,CAAC,MAAM;QACvCrE,MAAM,CAACoE,cAAc,GAAG,IAAI,CAAA;QAC5B7E,MAAM,CAACsE,YAAY,CAACnC,IAAW,CAAC,CAACoC,KAAK,CAAEC,GAAG,IAAK;AAC9CC,UAAAA,OAAO,CAACC,IAAI,CAACF,GAAG,CAAC,CAAA;AACjBC,UAAAA,OAAO,CAACC,IAAI,CAAC7E,cAAc,CAAC,CAAA;AAC9B,SAAC,CAAC,CAAA;OACH,EAAE0B,YAAY,CAAC,CAAA;AAClB,KAAA;GACD,CAAA;EAED,MAAMwD,WAAW,GAAIhB,CAAa,IAAK;AACrC,IAAA,MAAMtD,MAAM,GAAIsD,CAAC,CAACtD,MAAM,IAAI,EAA+B,CAAA;IAE3D,IAAIA,MAAM,CAACoE,cAAc,EAAE;AACzBG,MAAAA,YAAY,CAACvE,MAAM,CAACoE,cAAc,CAAC,CAAA;MACnCpE,MAAM,CAACoE,cAAc,GAAG,IAAI,CAAA;AAC9B,KAAA;GACD,CAAA;AAED,EAAA,MAAMI,eAAe,GAClBC,QAA4C,IAC5CnB,CAAuB,IAAK;IAC3B,IAAIA,CAAC,CAACoB,OAAO,EAAEpB,CAAC,CAACoB,OAAO,EAAE,CAAA;IAC1BD,QAAQ,CAACE,MAAM,CAACC,OAAO,CAAC,CAACC,OAAO,CAAEC,OAAO,IAAK;MAC5C,IAAIxB,CAAC,CAACE,gBAAgB,EAAE,OAAA;MACxBsB,OAAO,CAAExB,CAAC,CAAC,CAAA;AACb,KAAC,CAAC,CAAA;GACH,CAAA;;AAEH;AACA,EAAA,MAAMyB,mBAA4D,GAAG3C,QAAQ,GACzE4C,sBAAgB,CAAC/E,WAAW,EAAS,EAAE,CAAC,IAAI,EAAE,GAC9C,EAAE,CAAA;;AAEN;AACA,EAAA,MAAMgF,qBAA8D,GAClE7C,QAAQ,GAAG,EAAE,GAAG4C,sBAAgB,CAAC7E,aAAa,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;EAE3D,OAAO;AACL,IAAA,GAAG4E,mBAAmB;AACtB,IAAA,GAAGE,qBAAqB;AACxB,IAAA,GAAGxD,IAAI;AACPM,IAAAA,IAAI,EAAE1B,QAAQ,GACVuB,SAAS,GACTI,IAAI,CAACkD,cAAc,GACjBlD,IAAI,CAACkD,cAAc,CAACnD,IAAI,GACxBC,IAAI,CAACD,IAAI;IACfX,OAAO,EAAEoD,eAAe,CAAC,CAACpD,OAAO,EAAEiC,WAAW,CAAC,CAAC;IAChDhC,OAAO,EAAEmD,eAAe,CAAC,CAACnD,OAAO,EAAEuC,WAAW,CAAC,CAAC;IAChDtC,YAAY,EAAEkD,eAAe,CAAC,CAAClD,YAAY,EAAE6C,WAAW,CAAC,CAAC;IAC1D5C,YAAY,EAAEiD,eAAe,CAAC,CAACjD,YAAY,EAAE+C,WAAW,CAAC,CAAC;IAC1D9C,YAAY,EAAEgD,eAAe,CAAC,CAAChD,YAAY,EAAE0C,gBAAgB,CAAC,CAAC;IAC/DlE,MAAM;AACNmB,IAAAA,KAAK,EAAE;AACL,MAAA,GAAGA,KAAK;MACR,GAAG4D,mBAAmB,CAAC5D,KAAK;AAC5B,MAAA,GAAG8D,qBAAqB,CAAC9D,KAAAA;KAC1B;IACDjB,SAAS,EACP,CACEA,SAAS,EACT6E,mBAAmB,CAAC7E,SAAS,EAC7B+E,qBAAqB,CAAC/E,SAAS,CAChC,CACEyE,MAAM,CAACC,OAAO,CAAC,CACfO,IAAI,CAAC,GAAG,CAAC,IAAIvD,SAAS;AAC3B,IAAA,IAAIvB,QAAQ,GACR;AACE+E,MAAAA,IAAI,EAAE,MAAM;AACZ,MAAA,eAAe,EAAE,IAAA;KAClB,GACDxD,SAAS;AACb,IAAA,CAAC,aAAa,GAAGQ,QAAQ,GAAG,QAAQ,GAAGR,SAAAA;GACxC,CAAA;AACH,CAAA;AAgBO,MAAMyD,IAAmB,gBAAGC,gBAAK,CAACC,UAAU,CAAC,CAACC,KAAU,EAAEC,GAAG,KAAK;AACvE,EAAA,MAAMC,SAAS,GAAGrG,YAAY,CAACmG,KAAK,CAAC,CAAA;AAErC,EAAA,oBACEF,gBAAA,CAAAK,aAAA,CAAA,GAAA,EAAAC,iCAAA,CAAA;AAEIH,IAAAA,GAAG,EAAEA,GAAAA;AAAU,GAAA,EACZC,SAAS,EAAA;IACZ3F,QAAQ,EACN,OAAOyF,KAAK,CAACzF,QAAQ,KAAK,UAAU,GAChCyF,KAAK,CAACzF,QAAQ,CAAC;AACbqC,MAAAA,QAAQ,EAAGsD,SAAS,CAAS,aAAa,CAAC,KAAK,QAAA;KACjD,CAAC,GACFF,KAAK,CAACzF,QAAAA;AAAQ,GAAA,CAEvB,CAAC,CAAA;AAEN,CAAC,EAAQ;AAET,SAASwD,WAAWA,CAACD,CAAa,EAAE;AAClC,EAAA,OAAO,CAAC,EAAEA,CAAC,CAACuC,OAAO,IAAIvC,CAAC,CAACwC,MAAM,IAAIxC,CAAC,CAACyC,OAAO,IAAIzC,CAAC,CAAC0C,QAAQ,CAAC,CAAA;AAC7D;;;;;"}
1
+ {"version":3,"file":"link.js","sources":["../../src/link.tsx"],"sourcesContent":["import * as React from 'react'\nimport { useMatch } from './Matches'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { Trim } from './fileRoute'\nimport { AnyRoute, ReactNode, RootSearchSchema } from './route'\nimport { RouteByPath, RouteIds, RoutePaths } from './routeInfo'\nimport { RegisteredRouter } from './router'\nimport { LinkProps, UseLinkPropsOptions } from './useNavigate'\nimport {\n Expand,\n NoInfer,\n NonNullableUpdater,\n PickRequired,\n StringLiteral,\n Updater,\n WithoutEmpty,\n deepEqual,\n functionalUpdate,\n} from './utils'\nimport { HistoryState } from '@tanstack/history'\n\nexport type CleanPath<T extends string> = T extends `${infer L}//${infer R}`\n ? CleanPath<`${CleanPath<L>}/${CleanPath<R>}`>\n : T extends `${infer L}//`\n ? `${CleanPath<L>}/`\n : T extends `//${infer L}`\n ? `/${CleanPath<L>}`\n : T\n\nexport type Split<S, TIncludeTrailingSlash = true> = S extends unknown\n ? string extends S\n ? string[]\n : S extends string\n ? CleanPath<S> extends ''\n ? []\n : TIncludeTrailingSlash extends true\n ? CleanPath<S> extends `${infer T}/`\n ? [...Split<T>, '/']\n : CleanPath<S> extends `/${infer U}`\n ? Split<U>\n : CleanPath<S> extends `${infer T}/${infer U}`\n ? [...Split<T>, ...Split<U>]\n : [S]\n : CleanPath<S> extends `${infer T}/${infer U}`\n ? [...Split<T>, ...Split<U>]\n : S extends string\n ? [S]\n : never\n : never\n : never\n\nexport type ParsePathParams<T extends string> = keyof {\n [K in Trim<Split<T>[number], '_'> as K extends `$${infer L}`\n ? L extends ''\n ? '_splat'\n : L\n : never]: K\n}\n\nexport type Join<T, Delimiter extends string = '/'> = T extends []\n ? ''\n : T extends [infer L extends string]\n ? L\n : T extends [infer L extends string, ...infer Tail extends [...string[]]]\n ? CleanPath<`${L}${Delimiter}${Join<Tail>}`>\n : never\n\nexport type Last<T extends any[]> = T extends [...infer _, infer L] ? L : never\n\nexport type RelativeToPathAutoComplete<\n AllPaths extends string,\n TFrom extends string,\n TTo extends string,\n SplitPaths extends string[] = Split<AllPaths, false>,\n> = TTo extends `..${infer _}`\n ? SplitPaths extends [\n ...Split<ResolveRelativePath<TFrom, TTo>, false>,\n ...infer TToRest,\n ]\n ? `${CleanPath<\n Join<\n [\n ...Split<TTo, false>,\n ...(\n | TToRest\n | (Split<\n ResolveRelativePath<TFrom, TTo>,\n false\n >['length'] extends 1\n ? never\n : ['../'])\n ),\n ]\n >\n >}`\n : never\n : TTo extends `./${infer RestTTo}`\n ? SplitPaths extends [\n ...Split<TFrom, false>,\n ...Split<RestTTo, false>,\n ...infer RestPath,\n ]\n ? `${TTo}${Join<RestPath>}`\n : never\n :\n | (TFrom extends `/`\n ? never\n : SplitPaths extends [...Split<TFrom, false>, ...infer RestPath]\n ? Join<RestPath> extends { length: 0 }\n ? never\n : './'\n : never)\n | (TFrom extends `/` ? never : '../')\n | AllPaths\n\nexport type NavigateOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = ToOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // `replace` is a boolean that determines whether the navigation should replace the current history entry or push a new one.\n replace?: boolean\n resetScroll?: boolean\n // If set to `true`, the link's underlying navigate() call will be wrapped in a `React.startTransition` call. Defaults to `true`.\n startTransition?: boolean\n}\n\nexport type ToOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptions<TRouteTree, TFrom, TTo> & {\n mask?: ToMaskOptions<TRouteTree, TMaskFrom, TMaskTo>\n}\n\nexport type ToMaskOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TMaskFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TMaskTo extends string = '',\n> = ToSubOptions<TRouteTree, TMaskFrom, TMaskTo> & {\n unmaskOnReload?: boolean\n}\n\nexport type ToSubOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = RoutePaths<TRouteTree>,\n TTo extends string = '',\n TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n> = {\n to?: ToPathOption<TRouteTree, TFrom, TTo>\n // The new has string or a function to update it\n hash?: true | Updater<string>\n // State to pass to the history stack\n state?: true | NonNullableUpdater<HistoryState>\n // The source route path. This is automatically set when using route-level APIs, but for type-safe relative routing on the router itself, this is required\n from?: StringLiteral<TFrom>\n // // When using relative route paths, this option forces resolution from the current path, instead of the route API's path or `from` path\n} & CheckPath<TRouteTree, NoInfer<TResolved>, {}> &\n SearchParamOptions<TRouteTree, TFrom, TTo, TResolved> &\n PathParamOptions<TRouteTree, TFrom, TTo, TResolved>\n\ntype ParamsReducer<TFrom, TTo> = TTo | ((current: TFrom) => TTo)\n\ntype ParamVariant = 'PATH' | 'SEARCH'\ntype ExcludeRootSearchSchema<\n T,\n Excluded = Exclude<T, RootSearchSchema>,\n> = [Excluded] extends [never] ? {} : Excluded\n\ntype PostProcessParams<\n T,\n TParamVariant extends ParamVariant,\n> = TParamVariant extends 'SEARCH' ? ExcludeRootSearchSchema<T> : T\n\nexport type ParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n TParamVariant extends ParamVariant,\n TFromRouteType extends\n | 'allParams'\n | 'fullSearchSchema' = TParamVariant extends 'PATH'\n ? 'allParams'\n : 'fullSearchSchema',\n TToRouteType extends\n | 'allParams'\n | 'fullSearchSchemaInput' = TParamVariant extends 'PATH'\n ? 'allParams'\n : 'fullSearchSchemaInput',\n TFromParams = PostProcessParams<\n RouteByPath<TRouteTree, TFrom>['types'][TFromRouteType],\n TParamVariant\n >,\n TToIndex = TTo extends ''\n ? ''\n : RouteByPath<TRouteTree, `${TTo}/`> extends never\n ? TTo\n : `${TTo}/`,\n TToParams = TToIndex extends ''\n ? TFromParams\n : never extends TResolved\n ? PostProcessParams<\n RouteByPath<TRouteTree, TToIndex>['types'][TToRouteType],\n TParamVariant\n >\n : PostProcessParams<\n RouteByPath<TRouteTree, TResolved>['types'][TToRouteType],\n TParamVariant\n >,\n TReducer = ParamsReducer<TFromParams, TToParams>,\n> = Expand<WithoutEmpty<PickRequired<TToParams>>> extends never\n ? Partial<MakeParamOption<TParamVariant, true | TReducer>>\n : TFromParams extends Expand<WithoutEmpty<PickRequired<TToParams>>>\n ? MakeParamOption<TParamVariant, true | TReducer>\n : MakeParamOption<TParamVariant, TReducer>\n\ntype MakeParamOption<\n TParamVariant extends ParamVariant,\n T,\n> = TParamVariant extends 'PATH'\n ? MakePathParamOptions<T>\n : MakeSearchParamOptions<T>\ntype MakeSearchParamOptions<T> = { search: T }\ntype MakePathParamOptions<T> = { params: T }\n\nexport type SearchParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'SEARCH'>\n\nexport type PathParamOptions<\n TRouteTree extends AnyRoute,\n TFrom,\n TTo extends string,\n TResolved,\n> = ParamOptions<TRouteTree, TFrom, TTo, TResolved, 'PATH'>\n\nexport type ToPathOption<\n TRouteTree extends AnyRoute = AnyRoute,\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n> =\n | TTo\n | RelativeToPathAutoComplete<\n RoutePaths<TRouteTree>,\n NoInfer<TFrom> extends string ? NoInfer<TFrom> : '',\n NoInfer<TTo> & string\n >\n\nexport interface ActiveOptions {\n exact?: boolean\n includeHash?: boolean\n includeSearch?: boolean\n}\n\nexport type LinkOptions<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n> = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // The standard anchor tag target attribute\n target?: HTMLAnchorElement['target']\n // Defaults to `{ exact: false, includeHash: false }`\n activeOptions?: ActiveOptions\n // If set, will preload the linked route on hover and cache it for this many milliseconds in hopes that the user will eventually navigate there.\n preload?: false | 'intent'\n // Delay intent preloading by this many milliseconds. If the intent exits before this delay, the preload will be cancelled.\n preloadDelay?: number\n // If true, will render the link without the href attribute\n disabled?: boolean\n}\n\nexport type CheckPath<TRouteTree extends AnyRoute, TPath, TPass> = Exclude<\n TPath,\n RoutePaths<TRouteTree>\n> extends never\n ? TPass\n : CheckPathError<TRouteTree, Exclude<TPath, RoutePaths<TRouteTree>>>\n\nexport type CheckPathError<TRouteTree extends AnyRoute, TInvalids> = {\n to: RoutePaths<TRouteTree>\n}\n\nexport type ResolveRelativePath<TFrom, TTo = '.'> = TFrom extends string\n ? TTo extends string\n ? TTo extends '.'\n ? TFrom\n : TTo extends `./`\n ? Join<[TFrom, '/']>\n : TTo extends `./${infer TRest}`\n ? ResolveRelativePath<TFrom, TRest>\n : TTo extends `/${infer TRest}`\n ? TTo\n : Split<TTo> extends ['..', ...infer ToRest]\n ? Split<TFrom> extends [...infer FromRest, infer FromTail]\n ? ToRest extends ['/']\n ? Join<[...FromRest, '/']>\n : ResolveRelativePath<Join<FromRest>, Join<ToRest>>\n : never\n : Split<TTo> extends ['.', ...infer ToRest]\n ? ToRest extends ['/']\n ? Join<[TFrom, '/']>\n : ResolveRelativePath<TFrom, Join<ToRest>>\n : CleanPath<Join<['/', ...Split<TFrom>, ...Split<TTo>]>>\n : never\n : never\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nconst preloadWarning = 'Error preloading route! ☝️'\n\nexport function useLinkProps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): React.AnchorHTMLAttributes<HTMLAnchorElement> {\n const router = useRouter()\n const matchPathname = useMatch({\n strict: false,\n select: (s) => s.pathname,\n })\n\n const {\n // custom props\n children,\n target,\n activeProps = () => ({ className: 'active' }),\n inactiveProps = () => ({}),\n activeOptions,\n disabled,\n hash,\n search,\n params,\n to,\n state,\n mask,\n preload: userPreload,\n preloadDelay: userPreloadDelay,\n replace,\n startTransition,\n resetScroll,\n // element props\n style,\n className,\n onClick,\n onFocus,\n onMouseEnter,\n onMouseLeave,\n onTouchStart,\n ...rest\n } = options\n\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n const dest = {\n from: options.to ? matchPathname : undefined,\n ...options,\n }\n\n let type: 'internal' | 'external' = 'internal'\n\n try {\n new URL(`${to}`)\n type = 'external'\n } catch {}\n\n if (type === 'external') {\n return {\n href: to,\n }\n }\n\n const next = router.buildLocation(dest as any)\n const preload = userPreload ?? router.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = useRouterState({\n select: (s) => {\n // Compare path/hash for matches\n const currentPathSplit = s.location.pathname.split('/')\n const nextPathSplit = next.pathname.split('/')\n const pathIsFuzzyEqual = nextPathSplit.every(\n (d, i) => d === currentPathSplit[i],\n )\n // Combine the matches based on user router.options\n const pathTest = activeOptions?.exact\n ? s.location.pathname === next.pathname\n : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash\n ? s.location.hash === next.hash\n : true\n const searchTest =\n activeOptions?.includeSearch ?? true\n ? deepEqual(s.location.search, next.search, !activeOptions?.exact)\n : true\n\n // The final \"active\" test\n return pathTest && hashTest && searchTest\n },\n })\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n if (\n !disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!target || target === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n // All is well? Navigate!\n router.commitLocation({ ...next, replace, resetScroll, startTransition })\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleTouchStart = (e: TouchEvent) => {\n if (preload) {\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleEnter = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload) {\n if (target.preloadTimeout) {\n return\n }\n\n target.preloadTimeout = setTimeout(() => {\n target.preloadTimeout = null\n router.preloadRoute(dest as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }, preloadDelay)\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (target.preloadTimeout) {\n clearTimeout(target.preloadTimeout)\n target.preloadTimeout = null\n }\n }\n\n const composeHandlers =\n (handlers: (undefined | ((e: any) => void))[]) =>\n (e: React.SyntheticEvent) => {\n if (e.persist) e.persist()\n handlers.filter(Boolean).forEach((handler) => {\n if (e.defaultPrevented) return\n handler!(e)\n })\n }\n\n // Get the active props\n const resolvedActiveProps: React.HTMLAttributes<HTMLAnchorElement> = isActive\n ? functionalUpdate(activeProps as any, {}) ?? {}\n : {}\n\n // Get the inactive props\n const resolvedInactiveProps: React.HTMLAttributes<HTMLAnchorElement> =\n isActive ? {} : functionalUpdate(inactiveProps, {}) ?? {}\n\n return {\n ...resolvedActiveProps,\n ...resolvedInactiveProps,\n ...rest,\n href: disabled\n ? undefined\n : next.maskedLocation\n ? next.maskedLocation.href\n : next.href,\n onClick: composeHandlers([onClick, handleClick]),\n onFocus: composeHandlers([onFocus, handleFocus]),\n onMouseEnter: composeHandlers([onMouseEnter, handleEnter]),\n onMouseLeave: composeHandlers([onMouseLeave, handleLeave]),\n onTouchStart: composeHandlers([onTouchStart, handleTouchStart]),\n target,\n style: {\n ...style,\n ...resolvedActiveProps.style,\n ...resolvedInactiveProps.style,\n },\n className:\n [\n className,\n resolvedActiveProps.className,\n resolvedInactiveProps.className,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n ...(disabled\n ? {\n role: 'link',\n 'aria-disabled': true,\n }\n : undefined),\n ['data-status']: isActive ? 'active' : undefined,\n }\n}\n\nexport interface LinkComponent<TProps extends Record<string, any> = {}> {\n <\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> | string = TFrom,\n TMaskTo extends string = '',\n >(\n props: LinkProps<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n TProps &\n React.RefAttributes<HTMLAnchorElement>,\n ): ReactNode\n}\n\nexport const Link: LinkComponent = React.forwardRef((props: any, ref) => {\n const linkProps = useLinkProps(props)\n\n return (\n <a\n {...{\n ref: ref as any,\n ...linkProps,\n children:\n typeof props.children === 'function'\n ? props.children({\n isActive: (linkProps as any)['data-status'] === 'active',\n })\n : props.children,\n }}\n />\n )\n}) as any\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n"],"names":["preloadWarning","useLinkProps","options","router","useRouter","matchPathname","useMatch","strict","select","s","pathname","children","target","activeProps","className","inactiveProps","activeOptions","disabled","hash","search","params","to","state","mask","preload","userPreload","preloadDelay","userPreloadDelay","replace","startTransition","resetScroll","style","onClick","onFocus","onMouseEnter","onMouseLeave","onTouchStart","rest","dest","from","undefined","type","URL","href","next","buildLocation","defaultPreload","defaultPreloadDelay","isActive","useRouterState","currentPathSplit","location","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","pathTest","exact","hashTest","includeHash","searchTest","includeSearch","deepEqual","handleClick","e","isCtrlEvent","defaultPrevented","button","preventDefault","commitLocation","handleFocus","preloadRoute","catch","err","console","warn","handleTouchStart","handleEnter","preloadTimeout","setTimeout","handleLeave","clearTimeout","composeHandlers","handlers","persist","filter","Boolean","forEach","handler","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","maskedLocation","join","role","Link","React","forwardRef","props","ref","linkProps","createElement","_extends","metaKey","altKey","ctrlKey","shiftKey"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiUA,MAAMA,cAAc,GAAG,4BAA4B,CAAA;AAE5C,SAASC,YAAYA,CAO1BC,OAAwE,EACzB;AAC/C,EAAA,MAAMC,MAAM,GAAGC,mBAAS,EAAE,CAAA;EAC1B,MAAMC,aAAa,GAAGC,gBAAQ,CAAC;AAC7BC,IAAAA,MAAM,EAAE,KAAK;AACbC,IAAAA,MAAM,EAAGC,CAAC,IAAKA,CAAC,CAACC,QAAAA;AACnB,GAAC,CAAC,CAAA;EAEF,MAAM;AACJ;IACAC,QAAQ;IACRC,MAAM;IACNC,WAAW,GAAGA,OAAO;AAAEC,MAAAA,SAAS,EAAE,QAAA;AAAS,KAAC,CAAC;AAC7CC,IAAAA,aAAa,GAAGA,OAAO,EAAE,CAAC;IAC1BC,aAAa;IACbC,QAAQ;IACRC,IAAI;IACJC,MAAM;IACNC,MAAM;IACNC,EAAE;IACFC,KAAK;IACLC,IAAI;AACJC,IAAAA,OAAO,EAAEC,WAAW;AACpBC,IAAAA,YAAY,EAAEC,gBAAgB;IAC9BC,OAAO;IACPC,eAAe;IACfC,WAAW;AACX;IACAC,KAAK;IACLjB,SAAS;IACTkB,OAAO;IACPC,OAAO;IACPC,YAAY;IACZC,YAAY;IACZC,YAAY;IACZ,GAAGC,IAAAA;AACL,GAAC,GAAGnC,OAAO,CAAA;;AAEX;AACA;;AAEA;AACA;;AAEA,EAAA,MAAMoC,IAAI,GAAG;AACXC,IAAAA,IAAI,EAAErC,OAAO,CAACmB,EAAE,GAAGhB,aAAa,GAAGmC,SAAS;IAC5C,GAAGtC,OAAAA;GACJ,CAAA;EAED,IAAIuC,IAA6B,GAAG,UAAU,CAAA;EAE9C,IAAI;AACF,IAAA,IAAIC,GAAG,CAAE,CAAErB,EAAAA,EAAG,EAAC,CAAC,CAAA;AAChBoB,IAAAA,IAAI,GAAG,UAAU,CAAA;GAClB,CAAC,MAAM,EAAC;EAET,IAAIA,IAAI,KAAK,UAAU,EAAE;IACvB,OAAO;AACLE,MAAAA,IAAI,EAAEtB,EAAAA;KACP,CAAA;AACH,GAAA;AAEA,EAAA,MAAMuB,IAAI,GAAGzC,MAAM,CAAC0C,aAAa,CAACP,IAAW,CAAC,CAAA;EAC9C,MAAMd,OAAO,GAAGC,WAAW,IAAItB,MAAM,CAACD,OAAO,CAAC4C,cAAc,CAAA;EAC5D,MAAMpB,YAAY,GAChBC,gBAAgB,IAAIxB,MAAM,CAACD,OAAO,CAAC6C,mBAAmB,IAAI,CAAC,CAAA;EAE7D,MAAMC,QAAQ,GAAGC,6BAAc,CAAC;IAC9BzC,MAAM,EAAGC,CAAC,IAAK;AACb;MACA,MAAMyC,gBAAgB,GAAGzC,CAAC,CAAC0C,QAAQ,CAACzC,QAAQ,CAAC0C,KAAK,CAAC,GAAG,CAAC,CAAA;MACvD,MAAMC,aAAa,GAAGT,IAAI,CAAClC,QAAQ,CAAC0C,KAAK,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAA,MAAME,gBAAgB,GAAGD,aAAa,CAACE,KAAK,CAC1C,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,KAAKN,gBAAgB,CAACO,CAAC,CACpC,CAAC,CAAA;AACD;AACA,MAAA,MAAMC,QAAQ,GAAG1C,aAAa,EAAE2C,KAAK,GACjClD,CAAC,CAAC0C,QAAQ,CAACzC,QAAQ,KAAKkC,IAAI,CAAClC,QAAQ,GACrC4C,gBAAgB,CAAA;AACpB,MAAA,MAAMM,QAAQ,GAAG5C,aAAa,EAAE6C,WAAW,GACvCpD,CAAC,CAAC0C,QAAQ,CAACjC,IAAI,KAAK0B,IAAI,CAAC1B,IAAI,GAC7B,IAAI,CAAA;MACR,MAAM4C,UAAU,GACd9C,aAAa,EAAE+C,aAAa,IAAI,IAAI,GAChCC,eAAS,CAACvD,CAAC,CAAC0C,QAAQ,CAAChC,MAAM,EAAEyB,IAAI,CAACzB,MAAM,EAAE,CAACH,aAAa,EAAE2C,KAAK,CAAC,GAChE,IAAI,CAAA;;AAEV;AACA,MAAA,OAAOD,QAAQ,IAAIE,QAAQ,IAAIE,UAAU,CAAA;AAC3C,KAAA;AACF,GAAC,CAAC,CAAA;;AAEF;EACA,MAAMG,WAAW,GAAIC,CAAa,IAAK;IACrC,IACE,CAACjD,QAAQ,IACT,CAACkD,WAAW,CAACD,CAAC,CAAC,IACf,CAACA,CAAC,CAACE,gBAAgB,KAClB,CAACxD,MAAM,IAAIA,MAAM,KAAK,OAAO,CAAC,IAC/BsD,CAAC,CAACG,MAAM,KAAK,CAAC,EACd;MACAH,CAAC,CAACI,cAAc,EAAE,CAAA;;AAElB;MACAnE,MAAM,CAACoE,cAAc,CAAC;AAAE,QAAA,GAAG3B,IAAI;QAAEhB,OAAO;QAAEE,WAAW;AAAED,QAAAA,eAAAA;AAAgB,OAAC,CAAC,CAAA;AAC3E,KAAA;GACD,CAAA;;AAED;EACA,MAAM2C,WAAW,GAAIN,CAAa,IAAK;AACrC,IAAA,IAAI1C,OAAO,EAAE;MACXrB,MAAM,CAACsE,YAAY,CAACnC,IAAW,CAAC,CAACoC,KAAK,CAAEC,GAAG,IAAK;AAC9CC,QAAAA,OAAO,CAACC,IAAI,CAACF,GAAG,CAAC,CAAA;AACjBC,QAAAA,OAAO,CAACC,IAAI,CAAC7E,cAAc,CAAC,CAAA;AAC9B,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,CAAA;EAED,MAAM8E,gBAAgB,GAAIZ,CAAa,IAAK;AAC1C,IAAA,IAAI1C,OAAO,EAAE;MACXrB,MAAM,CAACsE,YAAY,CAACnC,IAAW,CAAC,CAACoC,KAAK,CAAEC,GAAG,IAAK;AAC9CC,QAAAA,OAAO,CAACC,IAAI,CAACF,GAAG,CAAC,CAAA;AACjBC,QAAAA,OAAO,CAACC,IAAI,CAAC7E,cAAc,CAAC,CAAA;AAC9B,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,CAAA;EAED,MAAM+E,WAAW,GAAIb,CAAa,IAAK;AACrC,IAAA,MAAMtD,MAAM,GAAIsD,CAAC,CAACtD,MAAM,IAAI,EAA+B,CAAA;AAE3D,IAAA,IAAIY,OAAO,EAAE;MACX,IAAIZ,MAAM,CAACoE,cAAc,EAAE;AACzB,QAAA,OAAA;AACF,OAAA;AAEApE,MAAAA,MAAM,CAACoE,cAAc,GAAGC,UAAU,CAAC,MAAM;QACvCrE,MAAM,CAACoE,cAAc,GAAG,IAAI,CAAA;QAC5B7E,MAAM,CAACsE,YAAY,CAACnC,IAAW,CAAC,CAACoC,KAAK,CAAEC,GAAG,IAAK;AAC9CC,UAAAA,OAAO,CAACC,IAAI,CAACF,GAAG,CAAC,CAAA;AACjBC,UAAAA,OAAO,CAACC,IAAI,CAAC7E,cAAc,CAAC,CAAA;AAC9B,SAAC,CAAC,CAAA;OACH,EAAE0B,YAAY,CAAC,CAAA;AAClB,KAAA;GACD,CAAA;EAED,MAAMwD,WAAW,GAAIhB,CAAa,IAAK;AACrC,IAAA,MAAMtD,MAAM,GAAIsD,CAAC,CAACtD,MAAM,IAAI,EAA+B,CAAA;IAE3D,IAAIA,MAAM,CAACoE,cAAc,EAAE;AACzBG,MAAAA,YAAY,CAACvE,MAAM,CAACoE,cAAc,CAAC,CAAA;MACnCpE,MAAM,CAACoE,cAAc,GAAG,IAAI,CAAA;AAC9B,KAAA;GACD,CAAA;AAED,EAAA,MAAMI,eAAe,GAClBC,QAA4C,IAC5CnB,CAAuB,IAAK;IAC3B,IAAIA,CAAC,CAACoB,OAAO,EAAEpB,CAAC,CAACoB,OAAO,EAAE,CAAA;IAC1BD,QAAQ,CAACE,MAAM,CAACC,OAAO,CAAC,CAACC,OAAO,CAAEC,OAAO,IAAK;MAC5C,IAAIxB,CAAC,CAACE,gBAAgB,EAAE,OAAA;MACxBsB,OAAO,CAAExB,CAAC,CAAC,CAAA;AACb,KAAC,CAAC,CAAA;GACH,CAAA;;AAEH;AACA,EAAA,MAAMyB,mBAA4D,GAAG3C,QAAQ,GACzE4C,sBAAgB,CAAC/E,WAAW,EAAS,EAAE,CAAC,IAAI,EAAE,GAC9C,EAAE,CAAA;;AAEN;AACA,EAAA,MAAMgF,qBAA8D,GAClE7C,QAAQ,GAAG,EAAE,GAAG4C,sBAAgB,CAAC7E,aAAa,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;EAE3D,OAAO;AACL,IAAA,GAAG4E,mBAAmB;AACtB,IAAA,GAAGE,qBAAqB;AACxB,IAAA,GAAGxD,IAAI;AACPM,IAAAA,IAAI,EAAE1B,QAAQ,GACVuB,SAAS,GACTI,IAAI,CAACkD,cAAc,GACjBlD,IAAI,CAACkD,cAAc,CAACnD,IAAI,GACxBC,IAAI,CAACD,IAAI;IACfX,OAAO,EAAEoD,eAAe,CAAC,CAACpD,OAAO,EAAEiC,WAAW,CAAC,CAAC;IAChDhC,OAAO,EAAEmD,eAAe,CAAC,CAACnD,OAAO,EAAEuC,WAAW,CAAC,CAAC;IAChDtC,YAAY,EAAEkD,eAAe,CAAC,CAAClD,YAAY,EAAE6C,WAAW,CAAC,CAAC;IAC1D5C,YAAY,EAAEiD,eAAe,CAAC,CAACjD,YAAY,EAAE+C,WAAW,CAAC,CAAC;IAC1D9C,YAAY,EAAEgD,eAAe,CAAC,CAAChD,YAAY,EAAE0C,gBAAgB,CAAC,CAAC;IAC/DlE,MAAM;AACNmB,IAAAA,KAAK,EAAE;AACL,MAAA,GAAGA,KAAK;MACR,GAAG4D,mBAAmB,CAAC5D,KAAK;AAC5B,MAAA,GAAG8D,qBAAqB,CAAC9D,KAAAA;KAC1B;IACDjB,SAAS,EACP,CACEA,SAAS,EACT6E,mBAAmB,CAAC7E,SAAS,EAC7B+E,qBAAqB,CAAC/E,SAAS,CAChC,CACEyE,MAAM,CAACC,OAAO,CAAC,CACfO,IAAI,CAAC,GAAG,CAAC,IAAIvD,SAAS;AAC3B,IAAA,IAAIvB,QAAQ,GACR;AACE+E,MAAAA,IAAI,EAAE,MAAM;AACZ,MAAA,eAAe,EAAE,IAAA;KAClB,GACDxD,SAAS;AACb,IAAA,CAAC,aAAa,GAAGQ,QAAQ,GAAG,QAAQ,GAAGR,SAAAA;GACxC,CAAA;AACH,CAAA;AAgBO,MAAMyD,IAAmB,gBAAGC,gBAAK,CAACC,UAAU,CAAC,CAACC,KAAU,EAAEC,GAAG,KAAK;AACvE,EAAA,MAAMC,SAAS,GAAGrG,YAAY,CAACmG,KAAK,CAAC,CAAA;AAErC,EAAA,oBACEF,gBAAA,CAAAK,aAAA,CAAA,GAAA,EAAAC,iCAAA,CAAA;AAEIH,IAAAA,GAAG,EAAEA,GAAAA;AAAU,GAAA,EACZC,SAAS,EAAA;IACZ3F,QAAQ,EACN,OAAOyF,KAAK,CAACzF,QAAQ,KAAK,UAAU,GAChCyF,KAAK,CAACzF,QAAQ,CAAC;AACbqC,MAAAA,QAAQ,EAAGsD,SAAS,CAAS,aAAa,CAAC,KAAK,QAAA;KACjD,CAAC,GACFF,KAAK,CAACzF,QAAAA;AAAQ,GAAA,CAEvB,CAAC,CAAA;AAEN,CAAC,EAAQ;AAET,SAASwD,WAAWA,CAACD,CAAa,EAAE;AAClC,EAAA,OAAO,CAAC,EAAEA,CAAC,CAACuC,OAAO,IAAIvC,CAAC,CAACwC,MAAM,IAAIxC,CAAC,CAACyC,OAAO,IAAIzC,CAAC,CAAC0C,QAAQ,CAAC,CAAA;AAC7D;;;;;"}
@@ -1018,9 +1018,18 @@ class Router {
1018
1018
  return undefined;
1019
1019
  };
1020
1020
  dehydrate = () => {
1021
+ const pickError = this.options.errorSerializer?.serialize ?? defaultSerializeError;
1021
1022
  return {
1022
1023
  state: {
1023
- dehydratedMatches: this.state.matches.map(d => utils.pick(d, ['id', 'status', 'updatedAt', 'loaderData']))
1024
+ dehydratedMatches: this.state.matches.map(d => ({
1025
+ ...utils.pick(d, ['id', 'status', 'updatedAt', 'loaderData']),
1026
+ // If an error occurs server-side during SSRing,
1027
+ // send a small subset of the error to the client
1028
+ error: d.error ? {
1029
+ data: pickError(d.error),
1030
+ __isServerError: true
1031
+ } : undefined
1032
+ }))
1024
1033
  }
1025
1034
  };
1026
1035
  };
@@ -1087,11 +1096,21 @@ function getInitialRouterState(location) {
1087
1096
  lastUpdated: Date.now()
1088
1097
  };
1089
1098
  }
1099
+ function defaultSerializeError(err) {
1100
+ if (err instanceof Error) return {
1101
+ name: err.name,
1102
+ message: err.message
1103
+ };
1104
+ return {
1105
+ data: err
1106
+ };
1107
+ }
1090
1108
 
1091
1109
  exports.PathParamError = PathParamError;
1092
1110
  exports.Router = Router;
1093
1111
  exports.SearchParamError = SearchParamError;
1094
1112
  exports.componentTypes = componentTypes;
1113
+ exports.defaultSerializeError = defaultSerializeError;
1095
1114
  exports.getInitialRouterState = getInitialRouterState;
1096
1115
  exports.lazyFn = lazyFn;
1097
1116
  //# sourceMappingURL=router.js.map