@tanstack/react-router 1.6.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/Matches.js +22 -1
- package/build/cjs/Matches.js.map +1 -1
- package/build/cjs/awaited.js +21 -4
- package/build/cjs/awaited.js.map +1 -1
- package/build/cjs/defer.js +7 -2
- package/build/cjs/defer.js.map +1 -1
- package/build/cjs/index.js +3 -0
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/router.js +20 -1
- package/build/cjs/router.js.map +1 -1
- package/build/esm/index.js +1900 -1846
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +585 -560
- package/build/types/Matches.d.ts +5 -0
- package/build/types/defer.d.ts +4 -1
- package/build/types/router.d.ts +20 -6
- package/build/types/routerContext.d.ts +1 -1
- package/build/umd/index.development.js +1902 -1845
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +2 -2
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -2
- package/src/Matches.tsx +28 -1
- package/src/awaited.tsx +25 -1
- package/src/defer.ts +12 -2
- package/src/router.ts +50 -7
package/build/cjs/Matches.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/build/cjs/Matches.js.map
CHANGED
|
@@ -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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"}
|
package/build/cjs/awaited.js
CHANGED
|
@@ -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
|
-
|
|
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) {
|
package/build/cjs/awaited.js.map
CHANGED
|
@@ -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":"
|
|
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;;;;;"}
|
package/build/cjs/defer.js
CHANGED
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
*/
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
|
|
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 =
|
|
28
|
+
state.error = {
|
|
29
|
+
data: (options?.serializeError ?? router.defaultSerializeError)(error),
|
|
30
|
+
__isServerError: true
|
|
31
|
+
};
|
|
27
32
|
});
|
|
28
33
|
}
|
|
29
34
|
return promise;
|
package/build/cjs/defer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defer.js","sources":["../../src/defer.ts"],"sourcesContent":["
|
|
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;;;;;"}
|
package/build/cjs/index.js
CHANGED
|
@@ -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;
|
package/build/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/build/cjs/router.js
CHANGED
|
@@ -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 =>
|
|
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
|