@tanstack/react-router 0.0.1-beta.206 → 0.0.1-beta.207
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/RouterProvider.js +49 -47
- package/build/cjs/RouterProvider.js.map +1 -1
- package/build/cjs/react.js +2 -1
- package/build/cjs/react.js.map +1 -1
- package/build/cjs/router.js.map +1 -1
- package/build/esm/index.js +51 -48
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +167 -167
- package/build/types/router.d.ts +3 -0
- package/build/umd/index.development.js +51 -48
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -2
- package/src/RouterProvider.tsx +58 -61
- package/src/react.tsx +2 -1
- package/src/router.ts +2 -0
package/build/cjs/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sources":["../../src/react.tsx"],"sourcesContent":["import * as React from 'react'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport {\n LinkOptions,\n ToOptions,\n ResolveRelativePath,\n NavigateOptions,\n} from './link'\nimport {\n AnySearchSchema,\n AnyPathParams,\n AnyContext,\n AnyRoute,\n rootRouteId,\n} from './route'\nimport {\n RoutePaths,\n RouteByPath,\n RouteIds,\n ParseRoute,\n RoutesById,\n RouteById,\n AllParams,\n} from './routeInfo'\nimport { RegisteredRouter, RouterOptions, Router, RouterState } from './router'\nimport { RouteMatch } from './RouteMatch'\nimport { NoInfer, functionalUpdate, last } from './utils'\nimport { MatchRouteOptions, RouterContext } from './RouterProvider'\nimport { routerContext } from './RouterProvider'\n\nconst useLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nexport type RouteProps<\n TFullSearchSchema extends Record<string, any> = AnySearchSchema,\n TAllParams extends AnyPathParams = AnyPathParams,\n TAllContext extends Record<string, any> = AnyContext,\n> = {\n useMatch: <TSelected = TAllContext>(opts?: {\n select?: (search: TAllContext) => TSelected\n }) => TSelected\n useRouteMeta: <TSelected = TAllContext>(opts?: {\n select?: (search: TAllContext) => TSelected\n }) => TSelected\n useSearch: <TSelected = TFullSearchSchema>(opts?: {\n select?: (search: TFullSearchSchema) => TSelected\n }) => TSelected\n useParams: <TSelected = TAllParams>(opts?: {\n select?: (search: TAllParams) => TSelected\n }) => TSelected\n}\n\nexport type ErrorRouteProps<\n TFullSearchSchema extends Record<string, any> = AnySearchSchema,\n TAllParams extends AnyPathParams = AnyPathParams,\n TAllContext extends Record<string, any> = AnyContext,\n> = {\n error: unknown\n info: { componentStack: string }\n} & RouteProps<TFullSearchSchema, TAllParams, TAllContext>\n\nexport type PendingRouteProps<\n TFullSearchSchema extends Record<string, any> = AnySearchSchema,\n TAllParams extends AnyPathParams = AnyPathParams,\n TAllContext extends Record<string, any> = AnyContext,\n> = RouteProps<TFullSearchSchema, TAllParams, TAllContext>\n\n//\n\ntype ReactNode = any\n\nexport type SyncRouteComponent<TProps> =\n | ((props: TProps) => ReactNode)\n | React.LazyExoticComponent<(props: TProps) => ReactNode>\n\nexport type AsyncRouteComponent<TProps> = SyncRouteComponent<TProps> & {\n preload?: () => Promise<void>\n}\n\nexport type RouteComponent<\n TFullSearchSchema extends Record<string, any>,\n TAllParams extends AnyPathParams,\n TAllContext extends Record<string, any>,\n> = AsyncRouteComponent<RouteProps<TFullSearchSchema, TAllParams, TAllContext>>\n\nexport type ErrorRouteComponent<\n TFullSearchSchema extends Record<string, any>,\n TAllParams extends AnyPathParams,\n TAllContext extends Record<string, any>,\n> = AsyncRouteComponent<\n ErrorRouteProps<TFullSearchSchema, TAllParams, TAllContext>\n>\n\nexport type PendingRouteComponent<\n TFullSearchSchema extends Record<string, any>,\n TAllParams extends AnyPathParams,\n TAllContext extends Record<string, any>,\n> = AsyncRouteComponent<\n PendingRouteProps<TFullSearchSchema, TAllParams, TAllContext>\n>\n\nexport type AnyRouteComponent = RouteComponent<any, any, any>\n\nexport function lazyRouteComponent<\n T extends Record<string, any>,\n TKey extends keyof T = 'default',\n>(\n importer: () => Promise<T>,\n exportName?: TKey,\n): T[TKey] extends (props: infer TProps) => any\n ? AsyncRouteComponent<TProps>\n : never {\n let loadPromise: Promise<any>\n\n const load = () => {\n if (!loadPromise) {\n loadPromise = importer()\n }\n\n return loadPromise\n }\n\n const lazyComp = React.lazy(async () => {\n const moduleExports = await load()\n const comp = moduleExports[exportName ?? 'default']\n return {\n default: comp,\n }\n })\n\n ;(lazyComp as any).preload = load\n\n return lazyComp as any\n}\n\nexport type LinkPropsOptions<\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> = LinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // A function that returns additional props for the `active` state of this link. These props override other props passed to the link (`style`'s are merged, `className`'s are concatenated)\n activeProps?:\n | React.AnchorHTMLAttributes<HTMLAnchorElement>\n | (() => React.AnchorHTMLAttributes<HTMLAnchorElement>)\n // A function that returns additional props for the `inactive` state of this link. These props override other props passed to the link (`style`'s are merged, `className`'s are concatenated)\n inactiveProps?:\n | React.AnchorHTMLAttributes<HTMLAnchorElement>\n | (() => React.AnchorHTMLAttributes<HTMLAnchorElement>)\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 MakeUseMatchRouteOptions<\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<AnyRoute, TFrom, TTo, TMaskFrom, TMaskTo> & MatchRouteOptions\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 type MakeLinkPropsOptions<\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> = LinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n React.AnchorHTMLAttributes<HTMLAnchorElement>\n\nexport type MakeLinkOptions<\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> = LinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> & {\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 | React.ReactNode\n | ((state: { isActive: boolean }) => React.ReactNode)\n }\n\nexport type PromptProps = {\n message: string\n condition?: boolean | any\n children?: ReactNode\n}\n\n//\n\nexport function useLinkProps<\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 options: MakeLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): React.AnchorHTMLAttributes<HTMLAnchorElement> {\n const { buildLink, state: routerState } = useRouter()\n const match = useMatch({\n strict: false,\n })\n\n const {\n // custom props\n type,\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,\n preloadDelay,\n replace,\n // element props\n style,\n className,\n onClick,\n onFocus,\n onMouseEnter,\n onMouseLeave,\n onTouchStart,\n ...rest\n } = options\n\n const linkInfo = buildLink(routerState, {\n from: options.to ? match.pathname : undefined,\n ...options,\n } as any)\n\n if (linkInfo.type === 'external') {\n const { href } = linkInfo\n return { href }\n }\n\n const {\n handleClick,\n handleFocus,\n handleEnter,\n handleLeave,\n handleTouchStart,\n isActive,\n next,\n } = linkInfo\n\n const handleReactClick = (e: Event) => {\n if (options.startTransition ?? true) {\n ;(React.startTransition || ((d) => d))(() => {\n handleClick(e)\n })\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, handleReactClick]),\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> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n >(\n props: MakeLinkOptions<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\nexport function Navigate<\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>(props: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): null {\n const { navigate } = useRouter()\n const match = useMatch({ strict: false })\n\n useLayoutEffect(() => {\n navigate({\n from: props.to ? match.pathname : undefined,\n ...props,\n } as any)\n }, [])\n\n return null\n}\n\nexport const matchesContext = React.createContext<RouteMatch[]>(null!)\nexport type RouterProps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> & {\n router: Router<TRouteTree>\n context?: Partial<RouterOptions<TRouteTree, TDehydrated>['meta']>\n}\n\nexport function useRouter<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>(): RouterContext<TRouteTree> {\n const value = React.useContext(routerContext)\n warning(value, 'useRouter must be used inside a <RouterProvider> component!')\n return value as any\n}\n\nexport function useRouterState<\n TSelected = RouterState<RegisteredRouter['routeTree']>,\n>(opts?: {\n select: (state: RouterState<RegisteredRouter['routeTree']>) => TSelected\n}): TSelected {\n const { state } = useRouter()\n // return useStore(router.__store, opts?.select as any)\n return opts?.select ? opts.select(state) : (state as any)\n}\n\nexport function useMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n const contextMatches = React.useContext(matchesContext)\n\n return useRouterState({\n select: (state) => {\n const matches = state.matches.slice(\n state.matches.findIndex((d) => d.id === contextMatches[0]?.id),\n )\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n\ntype StrictOrFrom<TFrom> =\n | {\n from: TFrom\n strict?: true\n }\n | {\n from?: never\n strict: false\n }\n\nexport function useMatch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TStrict extends boolean = true,\n TRouteMatchState = RouteMatch<TRouteTree, TFrom>,\n TSelected = TRouteMatchState,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatchState) => TSelected\n },\n): TStrict extends true ? TRouteMatchState : TRouteMatchState | undefined {\n const nearestMatch = React.useContext(matchesContext)[0]!\n const nearestMatchRouteId = nearestMatch?.routeId\n\n const matchRouteId = useRouterState({\n select: (state) => {\n const match = opts?.from\n ? state.matches.find((d) => d.routeId === opts?.from)\n : state.matches.find((d) => d.id === nearestMatch.id)\n\n return match!.routeId\n },\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 = opts?.from\n ? state.matches.find((d) => d.routeId === opts?.from)\n : state.matches.find((d) => d.id === nearestMatch.id)\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 type RouteFromIdOrRoute<\n T,\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n> = T extends ParseRoute<TRouteTree>\n ? T\n : T extends RouteIds<TRouteTree>\n ? RoutesById<TRouteTree>[T]\n : T extends string\n ? RouteIds<TRouteTree>\n : never\n\nexport function useRouteMeta<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TStrict extends boolean = true,\n TRouteMeta = RouteById<TRouteTree, TFrom>['types']['allMeta'],\n TSelected = TRouteMeta,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (search: TRouteMeta) => TSelected\n },\n): TStrict extends true ? TSelected : TSelected | undefined {\n return useMatch({\n ...(opts as any),\n select: (match: RouteMatch) =>\n opts?.select ? opts.select(match.meta as TRouteMeta) : match.meta,\n })\n}\n\nexport function useSearch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TStrict extends boolean = true,\n TSearch = RouteById<TRouteTree, TFrom>['types']['fullSearchSchema'],\n TSelected = TSearch,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (search: TSearch) => TSelected\n },\n): TStrict extends true ? TSelected : TSelected | undefined {\n return useMatch({\n ...(opts as any),\n select: (match: RouteMatch) => {\n return opts?.select ? opts.select(match.search as TSearch) : match.search\n },\n })\n}\n\nexport function useParams<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TDefaultSelected = AllParams<TRouteTree> &\n RouteById<TRouteTree, TFrom>['types']['allParams'],\n TSelected = TDefaultSelected,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (search: TDefaultSelected) => TSelected\n },\n): TSelected {\n return useRouterState({\n select: (state: any) => {\n const params = (last(state.matches) as any)?.params\n return opts?.select ? opts.select(params) : params\n },\n })\n}\n\nexport function useNavigate<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDefaultFrom extends RoutePaths<TRouteTree> = '/',\n>(defaultOpts?: { from?: TDefaultFrom }) {\n const { navigate } = useRouter()\n const match = useMatch({\n strict: false,\n })\n return React.useCallback(\n <\n TFrom extends RoutePaths<TRouteTree> = TDefaultFrom,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n >(\n opts?: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n ) => {\n return navigate({\n from: opts?.to ? match.pathname : undefined,\n ...defaultOpts,\n ...(opts as any),\n })\n },\n [],\n )\n}\n\nexport function useMatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>() {\n const { state, 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: MakeUseMatchRouteOptions<\n TRouteTree,\n TFrom,\n TTo,\n TMaskFrom,\n TMaskTo\n >,\n ): false | RouteById<TRouteTree, TResolved>['types']['allParams'] => {\n const { pending, caseSensitive, ...rest } = opts\n\n return matchRoute(state, rest as any, {\n pending,\n caseSensitive,\n })\n },\n [],\n )\n}\n\nexport function Matches() {\n const { routesById, state } = useRouter()\n\n // const matches = useRouterState({\n // select: (state) => {\n // return state.matches\n // },\n // })\n\n const { matches } = state\n\n const locationKey = useRouterState({\n select: (d) => d.resolvedLocation.state?.key,\n })\n\n const route = routesById[rootRouteId]\n\n const errorComponent = React.useCallback(\n (props: any) => {\n return React.createElement(ErrorComponent, {\n ...props,\n useMatch: route.useMatch,\n useRouteMeta: route.useRouteMeta,\n useSearch: route.useSearch,\n useParams: route.useParams,\n })\n },\n [route],\n )\n\n return (\n <matchesContext.Provider value={matches}>\n <CatchBoundary\n resetKey={locationKey}\n errorComponent={errorComponent}\n onCatch={() => {\n warning(\n false,\n `Error in router! Consider setting an 'errorComponent' in your RootRoute! 👍`,\n )\n }}\n >\n {matches.length ? <Match matches={matches} /> : null}\n </CatchBoundary>\n </matchesContext.Provider>\n )\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 Outlet() {\n const matches = React.useContext(matchesContext).slice(1)\n\n if (!matches[0]) {\n return null\n }\n\n return <Match matches={matches} />\n}\n\nconst defaultPending = () => null\n\nfunction Match({ matches }: { matches: RouteMatch[] }) {\n const { options, routesById } = useRouter()\n const match = matches[0]!\n const routeId = match?.routeId\n const route = routesById[routeId]\n const locationKey = useRouterState({\n select: (s) => s.resolvedLocation.state?.key,\n })\n\n const PendingComponent = (route.options.pendingComponent ??\n options.defaultPendingComponent ??\n defaultPending) as any\n\n const routeErrorComponent =\n route.options.errorComponent ??\n options.defaultErrorComponent ??\n ErrorComponent\n\n const ResolvedSuspenseBoundary =\n route.options.wrapInSuspense ?? !route.isRoot\n ? React.Suspense\n : SafeFragment\n\n const ResolvedCatchBoundary = !!routeErrorComponent\n ? CatchBoundary\n : SafeFragment\n\n const errorComponent = React.useCallback(\n (props: any) => {\n return React.createElement(routeErrorComponent, {\n ...props,\n useMatch: route.useMatch,\n useRouteMeta: route.useRouteMeta,\n useSearch: route.useSearch,\n useParams: route.useParams,\n })\n },\n [route],\n )\n\n return (\n <matchesContext.Provider value={matches}>\n <ResolvedSuspenseBoundary\n fallback={React.createElement(PendingComponent, {\n useMatch: route.useMatch,\n useRouteMeta: route.useRouteMeta,\n useSearch: route.useSearch,\n useParams: route.useParams,\n })}\n >\n <ResolvedCatchBoundary\n resetKey={locationKey}\n errorComponent={errorComponent}\n onCatch={() => {\n warning(false, `Error in route match: ${match.id}`)\n }}\n >\n <MatchInner match={match} />\n </ResolvedCatchBoundary>\n </ResolvedSuspenseBoundary>\n </matchesContext.Provider>\n )\n}\n\nfunction MatchInner({ match }: { match: RouteMatch }): any {\n const { options, routesById } = useRouter()\n const route = routesById[match.routeId]\n\n if (match.status === 'error') {\n throw match.error\n }\n\n if (match.status === 'pending') {\n throw match.loadPromise\n }\n\n if (match.status === 'success') {\n let comp = route.options.component ?? options.defaultComponent\n\n if (comp) {\n return React.createElement(comp, {\n useMatch: route.useMatch,\n useRouteMeta: route.useRouteMeta as any,\n useSearch: route.useSearch,\n useParams: route.useParams as any,\n } as any)\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\nfunction SafeFragment(props: any) {\n return <>{props.children}</>\n}\n\n// export function useInjectHtml() {\n// const { } = useRouter()\n\n// return React.useCallback(\n// (html: string | (() => Promise<string> | string)) => {\n// router.injectHtml(html)\n// },\n// [],\n// )\n// }\n\n// export function useDehydrate() {\n// const { } = useRouter()\n\n// return React.useCallback(function dehydrate<T>(\n// key: any,\n// data: T | (() => Promise<T> | T),\n// ) {\n// return router.dehydrateData(key, data)\n// },\n// [])\n// }\n\n// export function useHydrate() {\n// const { } = useRouter()\n\n// return function hydrate<T = unknown>(key: any) {\n// return router.hydrateData(key) as T\n// }\n// }\n\n// This is the messiest thing ever... I'm either seriously tired (likely) or\n// there has to be a better way to reset error boundaries when the\n// router's location key changes.\n\nexport function CatchBoundary(props: {\n resetKey: string\n children: any\n errorComponent?: any\n onCatch: (error: any) => void\n}) {\n const errorComponent = props.errorComponent ?? ErrorComponent\n\n return (\n <CatchBoundaryImpl\n resetKey={props.resetKey}\n onCatch={props.onCatch}\n children={({ error }) => {\n if (error) {\n return React.createElement(errorComponent, {\n error,\n })\n }\n\n return props.children\n }}\n />\n )\n}\n\nexport class CatchBoundaryImpl extends React.Component<{\n resetKey: string\n children: (props: { error: any; reset: () => void }) => any\n onCatch?: (error: any) => void\n}> {\n state = { error: null } as any\n static getDerivedStateFromError(error: any) {\n return { error }\n }\n componentDidUpdate(\n prevProps: Readonly<{\n resetKey: string\n children: (props: { error: any; reset: () => void }) => any\n onCatch?: ((error: any, info: any) => void) | undefined\n }>,\n prevState: any,\n ): void {\n if (prevState.error && prevProps.resetKey !== this.props.resetKey) {\n this.setState({ error: null })\n }\n }\n componentDidCatch(error: any) {\n this.props.onCatch?.(error)\n }\n render() {\n return this.props.children(this.state)\n }\n}\n\nexport function ErrorComponent({ error }: { error: any }) {\n const [show, setShow] = React.useState(process.env.NODE_ENV !== 'production')\n\n return (\n <div style={{ padding: '.5rem', maxWidth: '100%' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '.5rem' }}>\n <strong style={{ fontSize: '1rem' }}>Something went wrong!</strong>\n <button\n style={{\n appearance: 'none',\n fontSize: '.6em',\n border: '1px solid currentColor',\n padding: '.1rem .2rem',\n fontWeight: 'bold',\n borderRadius: '.25rem',\n }}\n onClick={() => setShow((d) => !d)}\n >\n {show ? 'Hide Error' : 'Show Error'}\n </button>\n </div>\n <div style={{ height: '.25rem' }} />\n {show ? (\n <div>\n <pre\n style={{\n fontSize: '.7em',\n border: '1px solid red',\n borderRadius: '.25rem',\n padding: '.3rem',\n color: 'red',\n overflow: 'auto',\n }}\n >\n {error.message ? <code>{error.message}</code> : null}\n </pre>\n </div>\n ) : null}\n </div>\n )\n}\n\nexport function useBlocker(\n message: string,\n condition: boolean | any = true,\n): void {\n const { history } = useRouter()\n\n React.useEffect(() => {\n if (!condition) return\n\n let unblock = history.block((retry, cancel) => {\n if (window.confirm(message)) {\n unblock()\n retry()\n }\n })\n\n return unblock\n })\n}\n\nexport function Block({ message, condition, children }: PromptProps) {\n useBlocker(message, condition)\n return (children ?? null) as ReactNode\n}\n\nexport function shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n"],"names":["useLayoutEffect","window","React","useEffect","lazyRouteComponent","importer","exportName","loadPromise","load","lazyComp","lazy","moduleExports","comp","default","preload","useLinkProps","options","buildLink","state","routerState","useRouter","match","useMatch","strict","type","children","target","activeProps","className","inactiveProps","activeOptions","disabled","hash","search","params","to","mask","preloadDelay","replace","style","onClick","onFocus","onMouseEnter","onMouseLeave","onTouchStart","rest","linkInfo","from","pathname","undefined","href","handleClick","handleFocus","handleEnter","handleLeave","handleTouchStart","isActive","next","handleReactClick","e","startTransition","d","composeHandlers","handlers","persist","filter","Boolean","forEach","handler","defaultPrevented","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","maskedLocation","join","role","Link","forwardRef","props","ref","linkProps","createElement","_extends","Navigate","navigate","matchesContext","createContext","value","useContext","routerContext","warning","useRouterState","opts","select","useMatches","contextMatches","matches","slice","findIndex","id","nearestMatch","nearestMatchRouteId","routeId","matchRouteId","find","invariant","matchSelection","useRouteMeta","meta","useSearch","useParams","last","useNavigate","defaultOpts","useCallback","useMatchRoute","matchRoute","pending","caseSensitive","Matches","routesById","locationKey","resolvedLocation","key","route","rootRouteId","errorComponent","ErrorComponent","Provider","CatchBoundary","resetKey","onCatch","length","Match","MatchRoute","Outlet","defaultPending","s","PendingComponent","pendingComponent","defaultPendingComponent","routeErrorComponent","defaultErrorComponent","ResolvedSuspenseBoundary","wrapInSuspense","isRoot","Suspense","SafeFragment","ResolvedCatchBoundary","fallback","MatchInner","status","error","component","defaultComponent","Fragment","CatchBoundaryImpl","Component","getDerivedStateFromError","componentDidUpdate","prevProps","prevState","setState","componentDidCatch","render","show","setShow","useState","process","env","NODE_ENV","padding","maxWidth","display","alignItems","gap","fontSize","appearance","border","fontWeight","borderRadius","height","color","overflow","message","useBlocker","condition","history","unblock","block","retry","cancel","confirm","Block","shallow","objA","objB","Object","is","keysA","keys","i","prototype","hasOwnProperty","call"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"react.js","sources":["../../src/react.tsx"],"sourcesContent":["import * as React from 'react'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport {\n LinkOptions,\n ToOptions,\n ResolveRelativePath,\n NavigateOptions,\n} from './link'\nimport {\n AnySearchSchema,\n AnyPathParams,\n AnyContext,\n AnyRoute,\n rootRouteId,\n} from './route'\nimport {\n RoutePaths,\n RouteByPath,\n RouteIds,\n ParseRoute,\n RoutesById,\n RouteById,\n AllParams,\n} from './routeInfo'\nimport { RegisteredRouter, RouterOptions, Router, RouterState } from './router'\nimport { RouteMatch } from './RouteMatch'\nimport { NoInfer, functionalUpdate, last } from './utils'\nimport { MatchRouteOptions, RouterContext } from './RouterProvider'\nimport { routerContext } from './RouterProvider'\n\nconst useLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nexport type RouteProps<\n TFullSearchSchema extends Record<string, any> = AnySearchSchema,\n TAllParams extends AnyPathParams = AnyPathParams,\n TAllContext extends Record<string, any> = AnyContext,\n> = {\n useMatch: <TSelected = TAllContext>(opts?: {\n select?: (search: TAllContext) => TSelected\n }) => TSelected\n useRouteMeta: <TSelected = TAllContext>(opts?: {\n select?: (search: TAllContext) => TSelected\n }) => TSelected\n useSearch: <TSelected = TFullSearchSchema>(opts?: {\n select?: (search: TFullSearchSchema) => TSelected\n }) => TSelected\n useParams: <TSelected = TAllParams>(opts?: {\n select?: (search: TAllParams) => TSelected\n }) => TSelected\n}\n\nexport type ErrorRouteProps<\n TFullSearchSchema extends Record<string, any> = AnySearchSchema,\n TAllParams extends AnyPathParams = AnyPathParams,\n TAllContext extends Record<string, any> = AnyContext,\n> = {\n error: unknown\n info: { componentStack: string }\n} & RouteProps<TFullSearchSchema, TAllParams, TAllContext>\n\nexport type PendingRouteProps<\n TFullSearchSchema extends Record<string, any> = AnySearchSchema,\n TAllParams extends AnyPathParams = AnyPathParams,\n TAllContext extends Record<string, any> = AnyContext,\n> = RouteProps<TFullSearchSchema, TAllParams, TAllContext>\n\n//\n\ntype ReactNode = any\n\nexport type SyncRouteComponent<TProps> =\n | ((props: TProps) => ReactNode)\n | React.LazyExoticComponent<(props: TProps) => ReactNode>\n\nexport type AsyncRouteComponent<TProps> = SyncRouteComponent<TProps> & {\n preload?: () => Promise<void>\n}\n\nexport type RouteComponent<\n TFullSearchSchema extends Record<string, any>,\n TAllParams extends AnyPathParams,\n TAllContext extends Record<string, any>,\n> = AsyncRouteComponent<RouteProps<TFullSearchSchema, TAllParams, TAllContext>>\n\nexport type ErrorRouteComponent<\n TFullSearchSchema extends Record<string, any>,\n TAllParams extends AnyPathParams,\n TAllContext extends Record<string, any>,\n> = AsyncRouteComponent<\n ErrorRouteProps<TFullSearchSchema, TAllParams, TAllContext>\n>\n\nexport type PendingRouteComponent<\n TFullSearchSchema extends Record<string, any>,\n TAllParams extends AnyPathParams,\n TAllContext extends Record<string, any>,\n> = AsyncRouteComponent<\n PendingRouteProps<TFullSearchSchema, TAllParams, TAllContext>\n>\n\nexport type AnyRouteComponent = RouteComponent<any, any, any>\n\nexport function lazyRouteComponent<\n T extends Record<string, any>,\n TKey extends keyof T = 'default',\n>(\n importer: () => Promise<T>,\n exportName?: TKey,\n): T[TKey] extends (props: infer TProps) => any\n ? AsyncRouteComponent<TProps>\n : never {\n let loadPromise: Promise<any>\n\n const load = () => {\n if (!loadPromise) {\n loadPromise = importer()\n }\n\n return loadPromise\n }\n\n const lazyComp = React.lazy(async () => {\n const moduleExports = await load()\n const comp = moduleExports[exportName ?? 'default']\n return {\n default: comp,\n }\n })\n\n ;(lazyComp as any).preload = load\n\n return lazyComp as any\n}\n\nexport type LinkPropsOptions<\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> = LinkOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // A function that returns additional props for the `active` state of this link. These props override other props passed to the link (`style`'s are merged, `className`'s are concatenated)\n activeProps?:\n | React.AnchorHTMLAttributes<HTMLAnchorElement>\n | (() => React.AnchorHTMLAttributes<HTMLAnchorElement>)\n // A function that returns additional props for the `inactive` state of this link. These props override other props passed to the link (`style`'s are merged, `className`'s are concatenated)\n inactiveProps?:\n | React.AnchorHTMLAttributes<HTMLAnchorElement>\n | (() => React.AnchorHTMLAttributes<HTMLAnchorElement>)\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 MakeUseMatchRouteOptions<\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<AnyRoute, TFrom, TTo, TMaskFrom, TMaskTo> & MatchRouteOptions\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 type MakeLinkPropsOptions<\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> = LinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n React.AnchorHTMLAttributes<HTMLAnchorElement>\n\nexport type MakeLinkOptions<\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> = LinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> &\n Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> & {\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 | React.ReactNode\n | ((state: { isActive: boolean }) => React.ReactNode)\n }\n\nexport type PromptProps = {\n message: string\n condition?: boolean | any\n children?: ReactNode\n}\n\n//\n\nexport function useLinkProps<\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 options: MakeLinkPropsOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n): React.AnchorHTMLAttributes<HTMLAnchorElement> {\n const { buildLink, state: routerState } = useRouter()\n const match = useMatch({\n strict: false,\n })\n\n const {\n // custom props\n type,\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,\n preloadDelay,\n replace,\n // element props\n style,\n className,\n onClick,\n onFocus,\n onMouseEnter,\n onMouseLeave,\n onTouchStart,\n ...rest\n } = options\n\n const linkInfo = buildLink(routerState, {\n from: options.to ? match.pathname : undefined,\n ...options,\n } as any)\n\n if (linkInfo.type === 'external') {\n const { href } = linkInfo\n return { href }\n }\n\n const {\n handleClick,\n handleFocus,\n handleEnter,\n handleLeave,\n handleTouchStart,\n isActive,\n next,\n } = linkInfo\n\n const handleReactClick = (e: Event) => {\n if (options.startTransition ?? true) {\n ;(React.startTransition || ((d) => d))(() => {\n handleClick(e)\n })\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, handleReactClick]),\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> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n >(\n props: MakeLinkOptions<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\nexport function Navigate<\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>(props: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>): null {\n const { navigate } = useRouter()\n const match = useMatch({ strict: false })\n\n useLayoutEffect(() => {\n navigate({\n from: props.to ? match.pathname : undefined,\n ...props,\n } as any)\n }, [])\n\n return null\n}\n\nexport const matchesContext = React.createContext<RouteMatch[]>(null!)\nexport type RouterProps<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> & {\n router: Router<TRouteTree>\n context?: Partial<RouterOptions<TRouteTree, TDehydrated>['meta']>\n}\n\nexport function useRouter<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>(): RouterContext<TRouteTree> {\n const resolvedContext = window.__TSR_ROUTER_CONTEXT__ || routerContext\n const value = React.useContext(resolvedContext)\n warning(value, 'useRouter must be used inside a <RouterProvider> component!')\n return value as any\n}\n\nexport function useRouterState<\n TSelected = RouterState<RegisteredRouter['routeTree']>,\n>(opts?: {\n select: (state: RouterState<RegisteredRouter['routeTree']>) => TSelected\n}): TSelected {\n const { state } = useRouter()\n // return useStore(router.__store, opts?.select as any)\n return opts?.select ? opts.select(state) : (state as any)\n}\n\nexport function useMatches<T = RouteMatch[]>(opts?: {\n select?: (matches: RouteMatch[]) => T\n}): T {\n const contextMatches = React.useContext(matchesContext)\n\n return useRouterState({\n select: (state) => {\n const matches = state.matches.slice(\n state.matches.findIndex((d) => d.id === contextMatches[0]?.id),\n )\n return opts?.select ? opts.select(matches) : (matches as T)\n },\n })\n}\n\ntype StrictOrFrom<TFrom> =\n | {\n from: TFrom\n strict?: true\n }\n | {\n from?: never\n strict: false\n }\n\nexport function useMatch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TStrict extends boolean = true,\n TRouteMatchState = RouteMatch<TRouteTree, TFrom>,\n TSelected = TRouteMatchState,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (match: TRouteMatchState) => TSelected\n },\n): TStrict extends true ? TRouteMatchState : TRouteMatchState | undefined {\n const nearestMatch = React.useContext(matchesContext)[0]!\n const nearestMatchRouteId = nearestMatch?.routeId\n\n const matchRouteId = useRouterState({\n select: (state) => {\n const match = opts?.from\n ? state.matches.find((d) => d.routeId === opts?.from)\n : state.matches.find((d) => d.id === nearestMatch.id)\n\n return match!.routeId\n },\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 = opts?.from\n ? state.matches.find((d) => d.routeId === opts?.from)\n : state.matches.find((d) => d.id === nearestMatch.id)\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 type RouteFromIdOrRoute<\n T,\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n> = T extends ParseRoute<TRouteTree>\n ? T\n : T extends RouteIds<TRouteTree>\n ? RoutesById<TRouteTree>[T]\n : T extends string\n ? RouteIds<TRouteTree>\n : never\n\nexport function useRouteMeta<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TStrict extends boolean = true,\n TRouteMeta = RouteById<TRouteTree, TFrom>['types']['allMeta'],\n TSelected = TRouteMeta,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (search: TRouteMeta) => TSelected\n },\n): TStrict extends true ? TSelected : TSelected | undefined {\n return useMatch({\n ...(opts as any),\n select: (match: RouteMatch) =>\n opts?.select ? opts.select(match.meta as TRouteMeta) : match.meta,\n })\n}\n\nexport function useSearch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TStrict extends boolean = true,\n TSearch = RouteById<TRouteTree, TFrom>['types']['fullSearchSchema'],\n TSelected = TSearch,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (search: TSearch) => TSelected\n },\n): TStrict extends true ? TSelected : TSelected | undefined {\n return useMatch({\n ...(opts as any),\n select: (match: RouteMatch) => {\n return opts?.select ? opts.select(match.search as TSearch) : match.search\n },\n })\n}\n\nexport function useParams<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TDefaultSelected = AllParams<TRouteTree> &\n RouteById<TRouteTree, TFrom>['types']['allParams'],\n TSelected = TDefaultSelected,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (search: TDefaultSelected) => TSelected\n },\n): TSelected {\n return useRouterState({\n select: (state: any) => {\n const params = (last(state.matches) as any)?.params\n return opts?.select ? opts.select(params) : params\n },\n })\n}\n\nexport function useNavigate<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TDefaultFrom extends RoutePaths<TRouteTree> = '/',\n>(defaultOpts?: { from?: TDefaultFrom }) {\n const { navigate } = useRouter()\n const match = useMatch({\n strict: false,\n })\n return React.useCallback(\n <\n TFrom extends RoutePaths<TRouteTree> = TDefaultFrom,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = '/',\n TMaskTo extends string = '',\n >(\n opts?: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n ) => {\n return navigate({\n from: opts?.to ? match.pathname : undefined,\n ...defaultOpts,\n ...(opts as any),\n })\n },\n [],\n )\n}\n\nexport function useMatchRoute<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n>() {\n const { state, 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: MakeUseMatchRouteOptions<\n TRouteTree,\n TFrom,\n TTo,\n TMaskFrom,\n TMaskTo\n >,\n ): false | RouteById<TRouteTree, TResolved>['types']['allParams'] => {\n const { pending, caseSensitive, ...rest } = opts\n\n return matchRoute(state, rest as any, {\n pending,\n caseSensitive,\n })\n },\n [],\n )\n}\n\nexport function Matches() {\n const { routesById, state } = useRouter()\n\n // const matches = useRouterState({\n // select: (state) => {\n // return state.matches\n // },\n // })\n\n const { matches } = state\n\n const locationKey = useRouterState({\n select: (d) => d.resolvedLocation.state?.key,\n })\n\n const route = routesById[rootRouteId]\n\n const errorComponent = React.useCallback(\n (props: any) => {\n return React.createElement(ErrorComponent, {\n ...props,\n useMatch: route.useMatch,\n useRouteMeta: route.useRouteMeta,\n useSearch: route.useSearch,\n useParams: route.useParams,\n })\n },\n [route],\n )\n\n return (\n <matchesContext.Provider value={matches}>\n <CatchBoundary\n resetKey={locationKey}\n errorComponent={errorComponent}\n onCatch={() => {\n warning(\n false,\n `Error in router! Consider setting an 'errorComponent' in your RootRoute! 👍`,\n )\n }}\n >\n {matches.length ? <Match matches={matches} /> : null}\n </CatchBoundary>\n </matchesContext.Provider>\n )\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 Outlet() {\n const matches = React.useContext(matchesContext).slice(1)\n\n if (!matches[0]) {\n return null\n }\n\n return <Match matches={matches} />\n}\n\nconst defaultPending = () => null\n\nfunction Match({ matches }: { matches: RouteMatch[] }) {\n const { options, routesById } = useRouter()\n const match = matches[0]!\n const routeId = match?.routeId\n const route = routesById[routeId]\n const locationKey = useRouterState({\n select: (s) => s.resolvedLocation.state?.key,\n })\n\n const PendingComponent = (route.options.pendingComponent ??\n options.defaultPendingComponent ??\n defaultPending) as any\n\n const routeErrorComponent =\n route.options.errorComponent ??\n options.defaultErrorComponent ??\n ErrorComponent\n\n const ResolvedSuspenseBoundary =\n route.options.wrapInSuspense ?? !route.isRoot\n ? React.Suspense\n : SafeFragment\n\n const ResolvedCatchBoundary = !!routeErrorComponent\n ? CatchBoundary\n : SafeFragment\n\n const errorComponent = React.useCallback(\n (props: any) => {\n return React.createElement(routeErrorComponent, {\n ...props,\n useMatch: route.useMatch,\n useRouteMeta: route.useRouteMeta,\n useSearch: route.useSearch,\n useParams: route.useParams,\n })\n },\n [route],\n )\n\n return (\n <matchesContext.Provider value={matches}>\n <ResolvedSuspenseBoundary\n fallback={React.createElement(PendingComponent, {\n useMatch: route.useMatch,\n useRouteMeta: route.useRouteMeta,\n useSearch: route.useSearch,\n useParams: route.useParams,\n })}\n >\n <ResolvedCatchBoundary\n resetKey={locationKey}\n errorComponent={errorComponent}\n onCatch={() => {\n warning(false, `Error in route match: ${match.id}`)\n }}\n >\n <MatchInner match={match} />\n </ResolvedCatchBoundary>\n </ResolvedSuspenseBoundary>\n </matchesContext.Provider>\n )\n}\n\nfunction MatchInner({ match }: { match: RouteMatch }): any {\n const { options, routesById } = useRouter()\n const route = routesById[match.routeId]\n\n if (match.status === 'error') {\n throw match.error\n }\n\n if (match.status === 'pending') {\n throw match.loadPromise\n }\n\n if (match.status === 'success') {\n let comp = route.options.component ?? options.defaultComponent\n\n if (comp) {\n return React.createElement(comp, {\n useMatch: route.useMatch,\n useRouteMeta: route.useRouteMeta as any,\n useSearch: route.useSearch,\n useParams: route.useParams as any,\n } as any)\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\nfunction SafeFragment(props: any) {\n return <>{props.children}</>\n}\n\n// export function useInjectHtml() {\n// const { } = useRouter()\n\n// return React.useCallback(\n// (html: string | (() => Promise<string> | string)) => {\n// router.injectHtml(html)\n// },\n// [],\n// )\n// }\n\n// export function useDehydrate() {\n// const { } = useRouter()\n\n// return React.useCallback(function dehydrate<T>(\n// key: any,\n// data: T | (() => Promise<T> | T),\n// ) {\n// return router.dehydrateData(key, data)\n// },\n// [])\n// }\n\n// export function useHydrate() {\n// const { } = useRouter()\n\n// return function hydrate<T = unknown>(key: any) {\n// return router.hydrateData(key) as T\n// }\n// }\n\n// This is the messiest thing ever... I'm either seriously tired (likely) or\n// there has to be a better way to reset error boundaries when the\n// router's location key changes.\n\nexport function CatchBoundary(props: {\n resetKey: string\n children: any\n errorComponent?: any\n onCatch: (error: any) => void\n}) {\n const errorComponent = props.errorComponent ?? ErrorComponent\n\n return (\n <CatchBoundaryImpl\n resetKey={props.resetKey}\n onCatch={props.onCatch}\n children={({ error }) => {\n if (error) {\n return React.createElement(errorComponent, {\n error,\n })\n }\n\n return props.children\n }}\n />\n )\n}\n\nexport class CatchBoundaryImpl extends React.Component<{\n resetKey: string\n children: (props: { error: any; reset: () => void }) => any\n onCatch?: (error: any) => void\n}> {\n state = { error: null } as any\n static getDerivedStateFromError(error: any) {\n return { error }\n }\n componentDidUpdate(\n prevProps: Readonly<{\n resetKey: string\n children: (props: { error: any; reset: () => void }) => any\n onCatch?: ((error: any, info: any) => void) | undefined\n }>,\n prevState: any,\n ): void {\n if (prevState.error && prevProps.resetKey !== this.props.resetKey) {\n this.setState({ error: null })\n }\n }\n componentDidCatch(error: any) {\n this.props.onCatch?.(error)\n }\n render() {\n return this.props.children(this.state)\n }\n}\n\nexport function ErrorComponent({ error }: { error: any }) {\n const [show, setShow] = React.useState(process.env.NODE_ENV !== 'production')\n\n return (\n <div style={{ padding: '.5rem', maxWidth: '100%' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '.5rem' }}>\n <strong style={{ fontSize: '1rem' }}>Something went wrong!</strong>\n <button\n style={{\n appearance: 'none',\n fontSize: '.6em',\n border: '1px solid currentColor',\n padding: '.1rem .2rem',\n fontWeight: 'bold',\n borderRadius: '.25rem',\n }}\n onClick={() => setShow((d) => !d)}\n >\n {show ? 'Hide Error' : 'Show Error'}\n </button>\n </div>\n <div style={{ height: '.25rem' }} />\n {show ? (\n <div>\n <pre\n style={{\n fontSize: '.7em',\n border: '1px solid red',\n borderRadius: '.25rem',\n padding: '.3rem',\n color: 'red',\n overflow: 'auto',\n }}\n >\n {error.message ? <code>{error.message}</code> : null}\n </pre>\n </div>\n ) : null}\n </div>\n )\n}\n\nexport function useBlocker(\n message: string,\n condition: boolean | any = true,\n): void {\n const { history } = useRouter()\n\n React.useEffect(() => {\n if (!condition) return\n\n let unblock = history.block((retry, cancel) => {\n if (window.confirm(message)) {\n unblock()\n retry()\n }\n })\n\n return unblock\n })\n}\n\nexport function Block({ message, condition, children }: PromptProps) {\n useBlocker(message, condition)\n return (children ?? null) as ReactNode\n}\n\nexport function shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n"],"names":["useLayoutEffect","window","React","useEffect","lazyRouteComponent","importer","exportName","loadPromise","load","lazyComp","lazy","moduleExports","comp","default","preload","useLinkProps","options","buildLink","state","routerState","useRouter","match","useMatch","strict","type","children","target","activeProps","className","inactiveProps","activeOptions","disabled","hash","search","params","to","mask","preloadDelay","replace","style","onClick","onFocus","onMouseEnter","onMouseLeave","onTouchStart","rest","linkInfo","from","pathname","undefined","href","handleClick","handleFocus","handleEnter","handleLeave","handleTouchStart","isActive","next","handleReactClick","e","startTransition","d","composeHandlers","handlers","persist","filter","Boolean","forEach","handler","defaultPrevented","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","maskedLocation","join","role","Link","forwardRef","props","ref","linkProps","createElement","_extends","Navigate","navigate","matchesContext","createContext","resolvedContext","__TSR_ROUTER_CONTEXT__","routerContext","value","useContext","warning","useRouterState","opts","select","useMatches","contextMatches","matches","slice","findIndex","id","nearestMatch","nearestMatchRouteId","routeId","matchRouteId","find","invariant","matchSelection","useRouteMeta","meta","useSearch","useParams","last","useNavigate","defaultOpts","useCallback","useMatchRoute","matchRoute","pending","caseSensitive","Matches","routesById","locationKey","resolvedLocation","key","route","rootRouteId","errorComponent","ErrorComponent","Provider","CatchBoundary","resetKey","onCatch","length","Match","MatchRoute","Outlet","defaultPending","s","PendingComponent","pendingComponent","defaultPendingComponent","routeErrorComponent","defaultErrorComponent","ResolvedSuspenseBoundary","wrapInSuspense","isRoot","Suspense","SafeFragment","ResolvedCatchBoundary","fallback","MatchInner","status","error","component","defaultComponent","Fragment","CatchBoundaryImpl","Component","getDerivedStateFromError","componentDidUpdate","prevProps","prevState","setState","componentDidCatch","render","show","setShow","useState","process","env","NODE_ENV","padding","maxWidth","display","alignItems","gap","fontSize","appearance","border","fontWeight","borderRadius","height","color","overflow","message","useBlocker","condition","history","unblock","block","retry","cancel","confirm","Block","shallow","objA","objB","Object","is","keysA","keys","i","prototype","hasOwnProperty","call"],"mappings":"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"}
|
package/build/cjs/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sources":["../../src/router.ts"],"sourcesContent":["import { RouterHistory } from '@tanstack/history'\n\n//\n\nimport {\n AnySearchSchema,\n AnyRoute,\n AnyContext,\n AnyPathParams,\n RouteMask,\n} from './route'\nimport { FullSearchSchema } from './routeInfo'\nimport { defaultParseSearch, defaultStringifySearch } from './searchParams'\nimport { PickAsRequired, Updater, NonNullableUpdater } from './utils'\nimport {\n ErrorRouteComponent,\n PendingRouteComponent,\n RouteComponent,\n} from './react'\nimport { RouteMatch } from './RouteMatch'\nimport { ParsedLocation } from './location'\nimport { LocationState } from './location'\nimport { SearchSerializer, SearchParser } from './searchParams'\n\n//\n\ndeclare global {\n interface Window {\n __TSR_DEHYDRATED__?: HydrationCtx\n }\n}\n\nexport interface Register {\n // router: Router\n}\n\nexport type AnyRouter = Router<any, any>\n\nexport type RegisteredRouter = Register extends {\n router: infer TRouter extends AnyRouter\n}\n ? TRouter\n : AnyRouter\n\nexport type HydrationCtx = {\n router: DehydratedRouter\n payload: Record<string, any>\n}\n\nexport type RouterContextOptions<TRouteTree extends AnyRoute> =\n AnyContext extends TRouteTree['types']['routerMeta']\n ? {\n meta?: TRouteTree['types']['routerMeta']\n }\n : {\n meta: TRouteTree['types']['routerMeta']\n }\n\nexport interface RouterOptions<\n TRouteTree extends AnyRoute,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> {\n history?: RouterHistory\n stringifySearch?: SearchSerializer\n parseSearch?: SearchParser\n defaultPreload?: false | 'intent'\n defaultPreloadDelay?: number\n defaultComponent?: RouteComponent<AnySearchSchema, AnyPathParams, AnyContext>\n defaultErrorComponent?: ErrorRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext\n >\n defaultPendingComponent?: PendingRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext\n >\n defaultMaxAge?: number\n defaultGcMaxAge?: number\n defaultPreloadMaxAge?: number\n caseSensitive?: boolean\n routeTree?: TRouteTree\n basepath?: string\n createRoute?: (opts: { route: AnyRoute; router: AnyRouter }) => void\n meta?: TRouteTree['types']['routerMeta']\n // dehydrate?: () => TDehydrated\n // hydrate?: (dehydrated: TDehydrated) => void\n routeMasks?: RouteMask<TRouteTree>[]\n unmaskOnReload?: boolean\n}\n\nexport interface RouterState<TRouteTree extends AnyRoute = AnyRoute> {\n status: 'idle' | 'pending'\n isFetching: boolean\n matches: RouteMatch<TRouteTree>[]\n pendingMatches: RouteMatch<TRouteTree>[]\n location: ParsedLocation<FullSearchSchema<TRouteTree>>\n resolvedLocation: ParsedLocation<FullSearchSchema<TRouteTree>>\n lastUpdated: number\n}\n\nexport type ListenerFn<TEvent extends RouterEvent> = (event: TEvent) => void\n\nexport interface BuildNextOptions {\n to?: string | number | null\n params?: true | Updater<unknown>\n search?: true | Updater<unknown>\n hash?: true | Updater<string>\n state?: true | NonNullableUpdater<LocationState>\n mask?: {\n to?: string | number | null\n params?: true | Updater<unknown>\n search?: true | Updater<unknown>\n hash?: true | Updater<string>\n state?: true | NonNullableUpdater<LocationState>\n unmaskOnReload?: boolean\n }\n from?: string\n}\n\nexport interface DehydratedRouterState {\n dehydratedMatches: DehydratedRouteMatch[]\n}\n\nexport type DehydratedRouteMatch = Pick<\n RouteMatch,\n 'fetchedAt' | 'invalid' | 'id' | 'status' | 'updatedAt'\n>\n\nexport interface DehydratedRouter {\n state: DehydratedRouterState\n}\n\nexport type RouterConstructorOptions<\n TRouteTree extends AnyRoute,\n TDehydrated extends Record<string, any>,\n> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> &\n RouterContextOptions<TRouteTree>\n\nexport const componentTypes = [\n 'component',\n 'errorComponent',\n 'pendingComponent',\n] as const\n\nexport type RouterEvents = {\n onBeforeLoad: {\n type: 'onBeforeLoad'\n from: ParsedLocation\n to: ParsedLocation\n pathChanged: boolean\n }\n onLoad: {\n type: 'onLoad'\n from: ParsedLocation\n to: ParsedLocation\n pathChanged: boolean\n }\n}\n\nexport type RouterEvent = RouterEvents[keyof RouterEvents]\n\nexport type RouterListener<TRouterEvent extends RouterEvent> = {\n eventType: TRouterEvent['type']\n fn: ListenerFn<TRouterEvent>\n}\n\nexport class Router<\n TRouteTree extends AnyRoute = AnyRoute,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> {\n options: PickAsRequired<\n RouterOptions<TRouteTree, TDehydrated>,\n 'stringifySearch' | 'parseSearch' | 'meta'\n >\n routeTree: TRouteTree\n // dehydratedData?: TDehydrated\n // resetNextScroll = false\n // tempLocationKey = `${Math.round(Math.random() * 10000000)}`\n\n constructor(options: RouterConstructorOptions<TRouteTree, TDehydrated>) {\n this.options = {\n defaultPreloadDelay: 50,\n meta: undefined!,\n ...options,\n stringifySearch: options?.stringifySearch ?? defaultStringifySearch,\n parseSearch: options?.parseSearch ?? defaultParseSearch,\n }\n\n this.routeTree = this.options.routeTree as TRouteTree\n }\n\n subscribers = new Set<RouterListener<RouterEvent>>()\n\n subscribe = <TType extends keyof RouterEvents>(\n eventType: TType,\n fn: ListenerFn<RouterEvents[TType]>,\n ) => {\n const listener: RouterListener<any> = {\n eventType,\n fn,\n }\n\n this.subscribers.add(listener)\n\n return () => {\n this.subscribers.delete(listener)\n }\n }\n\n emit = (routerEvent: RouterEvent) => {\n this.subscribers.forEach((listener) => {\n if (listener.eventType === routerEvent.type) {\n listener.fn(routerEvent)\n }\n })\n }\n\n // dehydrate = (): DehydratedRouter => {\n // return {\n // state: {\n // dehydratedMatches: state.matches.map((d) =>\n // pick(d, ['fetchedAt', 'invalid', 'id', 'status', 'updatedAt']),\n // ),\n // },\n // }\n // }\n\n // hydrate = async (__do_not_use_server_ctx?: HydrationCtx) => {\n // let _ctx = __do_not_use_server_ctx\n // // Client hydrates from window\n // if (typeof document !== 'undefined') {\n // _ctx = window.__TSR_DEHYDRATED__\n // }\n\n // invariant(\n // _ctx,\n // 'Expected to find a __TSR_DEHYDRATED__ property on window... but we did not. Did you forget to render <DehydrateRouter /> in your app?',\n // )\n\n // const ctx = _ctx\n // this.dehydratedData = ctx.payload as any\n // this.options.hydrate?.(ctx.payload as any)\n // const dehydratedState = ctx.router.state\n\n // let matches = this.matchRoutes(\n // state.location.pathname,\n // state.location.search,\n // ).map((match) => {\n // const dehydratedMatch = dehydratedState.dehydratedMatches.find(\n // (d) => d.id === match.id,\n // )\n\n // invariant(\n // dehydratedMatch,\n // `Could not find a client-side match for dehydrated match with id: ${match.id}!`,\n // )\n\n // if (dehydratedMatch) {\n // return {\n // ...match,\n // ...dehydratedMatch,\n // }\n // }\n // return match\n // })\n\n // this.setState((s) => {\n // return {\n // ...s,\n // matches: dehydratedState.dehydratedMatches as any,\n // }\n // })\n // }\n\n // TODO:\n // injectedHtml: (string | (() => Promise<string> | string))[] = []\n\n // TODO:\n // injectHtml = async (html: string | (() => Promise<string> | string)) => {\n // this.injectedHtml.push(html)\n // }\n\n // TODO:\n // dehydrateData = <T>(key: any, getData: T | (() => Promise<T> | T)) => {\n // if (typeof document === 'undefined') {\n // const strKey = typeof key === 'string' ? key : JSON.stringify(key)\n\n // this.injectHtml(async () => {\n // const id = `__TSR_DEHYDRATED__${strKey}`\n // const data =\n // typeof getData === 'function' ? await (getData as any)() : getData\n // return `<script id='${id}' suppressHydrationWarning>window[\"__TSR_DEHYDRATED__${escapeJSON(\n // strKey,\n // )}\"] = ${JSON.stringify(data)}\n // ;(() => {\n // var el = document.getElementById('${id}')\n // el.parentElement.removeChild(el)\n // })()\n // </script>`\n // })\n\n // return () => this.hydrateData<T>(key)\n // }\n\n // return () => undefined\n // }\n\n // hydrateData = <T = unknown>(key: any) => {\n // if (typeof document !== 'undefined') {\n // const strKey = typeof key === 'string' ? key : JSON.stringify(key)\n\n // return window[`__TSR_DEHYDRATED__${strKey}` as any] as T\n // }\n\n // return undefined\n // }\n\n // resolveMatchPromise = (matchId: string, key: string, value: any) => {\n // state.matches\n // .find((d) => d.id === matchId)\n // ?.__promisesByKey[key]?.resolve(value)\n // }\n\n // setRouteMatch = (\n // id: string,\n // pending: boolean,\n // updater: NonNullableUpdater<RouteMatch<TRouteTree>>,\n // ) => {\n // const key = pending ? 'pendingMatches' : 'matches'\n\n // this.setState((prev) => {\n // return {\n // ...prev,\n // [key]: prev[key].map((d) => {\n // if (d.id === id) {\n // return functionalUpdate(updater, d)\n // }\n\n // return d\n // }),\n // }\n // })\n // }\n\n // setPendingRouteMatch = (\n // id: string,\n // updater: NonNullableUpdater<RouteMatch<TRouteTree>>,\n // ) => {\n // this.setRouteMatch(id, true, updater)\n // }\n}\n\nfunction escapeJSON(jsonString: string) {\n return jsonString\n .replace(/\\\\/g, '\\\\\\\\') // Escape backslashes\n .replace(/'/g, \"\\\\'\") // Escape single quotes\n .replace(/\"/g, '\\\\\"') // Escape double quotes\n}\n\n// A function that takes an import() argument which is a function and returns a new function that will\n// proxy arguments from the caller to the imported function, retaining all type\n// information along the way\nexport function lazyFn<\n T extends Record<string, (...args: any[]) => any>,\n TKey extends keyof T = 'default',\n>(fn: () => Promise<T>, key?: TKey) {\n return async (...args: Parameters<T[TKey]>): Promise<ReturnType<T[TKey]>> => {\n const imported = await fn()\n return imported[key || 'default'](...args)\n }\n}\n"],"names":["componentTypes","Router","constructor","options","defaultPreloadDelay","meta","undefined","stringifySearch","defaultStringifySearch","parseSearch","defaultParseSearch","routeTree","subscribers","Set","subscribe","eventType","fn","listener","add","delete","emit","routerEvent","forEach","type","lazyFn","key","args","imported"],"mappings":";;;;;;;;;;;;;;;;AAEA;;AAsBA;;AAoHO,MAAMA,cAAc,GAAG,CAC5B,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EACV;AAwBH,MAAMC,MAAM,CAGjB;AAMA;AACA;AACA;EAEAC,WAAWA,CAACC,OAA0D,EAAE;IACtE,IAAI,CAACA,OAAO,GAAG;AACbC,MAAAA,mBAAmB,EAAE,EAAE;AACvBC,MAAAA,IAAI,EAAEC,SAAU;AAChB,MAAA,GAAGH,OAAO;AACVI,MAAAA,eAAe,EAAEJ,OAAO,EAAEI,eAAe,IAAIC,mCAAsB;AACnEC,MAAAA,WAAW,EAAEN,OAAO,EAAEM,WAAW,IAAIC,+BAAAA;KACtC,CAAA;AAED,IAAA,IAAI,CAACC,SAAS,GAAG,IAAI,CAACR,OAAO,CAACQ,SAAuB,CAAA;AACvD,GAAA;AAEAC,EAAAA,WAAW,GAAG,IAAIC,GAAG,EAA+B,CAAA;AAEpDC,EAAAA,SAAS,GAAGA,CACVC,SAAgB,EAChBC,EAAmC,KAChC;AACH,IAAA,MAAMC,QAA6B,GAAG;MACpCF,SAAS;AACTC,MAAAA,EAAAA;KACD,CAAA;AAED,IAAA,IAAI,CAACJ,WAAW,CAACM,GAAG,CAACD,QAAQ,CAAC,CAAA;AAE9B,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAACL,WAAW,CAACO,MAAM,CAACF,QAAQ,CAAC,CAAA;KAClC,CAAA;GACF,CAAA;EAEDG,IAAI,GAAIC,WAAwB,IAAK;AACnC,IAAA,IAAI,CAACT,WAAW,CAACU,OAAO,CAAEL,QAAQ,IAAK;AACrC,MAAA,IAAIA,QAAQ,CAACF,SAAS,KAAKM,WAAW,CAACE,IAAI,EAAE;AAC3CN,QAAAA,QAAQ,CAACD,EAAE,CAACK,WAAW,CAAC,CAAA;AAC1B,OAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACF,CAAA;;AASA;AACA;AACA;AACO,SAASG,MAAMA,CAGpBR,EAAoB,EAAES,GAAU,EAAE;EAClC,OAAO,OAAO,GAAGC,IAAyB,KAAmC;AAC3E,IAAA,MAAMC,QAAQ,GAAG,MAAMX,EAAE,EAAE,CAAA;IAC3B,OAAOW,QAAQ,CAACF,GAAG,IAAI,SAAS,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAA;GAC3C,CAAA;AACH;;;;;;"}
|
|
1
|
+
{"version":3,"file":"router.js","sources":["../../src/router.ts"],"sourcesContent":["import { RouterHistory } from '@tanstack/history'\n\n//\n\nimport {\n AnySearchSchema,\n AnyRoute,\n AnyContext,\n AnyPathParams,\n RouteMask,\n} from './route'\nimport { FullSearchSchema } from './routeInfo'\nimport { defaultParseSearch, defaultStringifySearch } from './searchParams'\nimport { PickAsRequired, Updater, NonNullableUpdater } from './utils'\nimport {\n ErrorRouteComponent,\n PendingRouteComponent,\n RouteComponent,\n} from './react'\nimport { RouteMatch } from './RouteMatch'\nimport { ParsedLocation } from './location'\nimport { LocationState } from './location'\nimport { SearchSerializer, SearchParser } from './searchParams'\nimport { RouterContext } from './RouterProvider'\n\n//\n\ndeclare global {\n interface Window {\n __TSR_DEHYDRATED__?: HydrationCtx\n __TSR_ROUTER_CONTEXT__?: React.Context<RouterContext<any>>\n }\n}\n\nexport interface Register {\n // router: Router\n}\n\nexport type AnyRouter = Router<any, any>\n\nexport type RegisteredRouter = Register extends {\n router: infer TRouter extends AnyRouter\n}\n ? TRouter\n : AnyRouter\n\nexport type HydrationCtx = {\n router: DehydratedRouter\n payload: Record<string, any>\n}\n\nexport type RouterContextOptions<TRouteTree extends AnyRoute> =\n AnyContext extends TRouteTree['types']['routerMeta']\n ? {\n meta?: TRouteTree['types']['routerMeta']\n }\n : {\n meta: TRouteTree['types']['routerMeta']\n }\n\nexport interface RouterOptions<\n TRouteTree extends AnyRoute,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> {\n history?: RouterHistory\n stringifySearch?: SearchSerializer\n parseSearch?: SearchParser\n defaultPreload?: false | 'intent'\n defaultPreloadDelay?: number\n defaultComponent?: RouteComponent<AnySearchSchema, AnyPathParams, AnyContext>\n defaultErrorComponent?: ErrorRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext\n >\n defaultPendingComponent?: PendingRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext\n >\n defaultMaxAge?: number\n defaultGcMaxAge?: number\n defaultPreloadMaxAge?: number\n caseSensitive?: boolean\n routeTree?: TRouteTree\n basepath?: string\n createRoute?: (opts: { route: AnyRoute; router: AnyRouter }) => void\n meta?: TRouteTree['types']['routerMeta']\n // dehydrate?: () => TDehydrated\n // hydrate?: (dehydrated: TDehydrated) => void\n routeMasks?: RouteMask<TRouteTree>[]\n unmaskOnReload?: boolean\n}\n\nexport interface RouterState<TRouteTree extends AnyRoute = AnyRoute> {\n status: 'idle' | 'pending'\n isFetching: boolean\n matches: RouteMatch<TRouteTree>[]\n pendingMatches: RouteMatch<TRouteTree>[]\n location: ParsedLocation<FullSearchSchema<TRouteTree>>\n resolvedLocation: ParsedLocation<FullSearchSchema<TRouteTree>>\n lastUpdated: number\n}\n\nexport type ListenerFn<TEvent extends RouterEvent> = (event: TEvent) => void\n\nexport interface BuildNextOptions {\n to?: string | number | null\n params?: true | Updater<unknown>\n search?: true | Updater<unknown>\n hash?: true | Updater<string>\n state?: true | NonNullableUpdater<LocationState>\n mask?: {\n to?: string | number | null\n params?: true | Updater<unknown>\n search?: true | Updater<unknown>\n hash?: true | Updater<string>\n state?: true | NonNullableUpdater<LocationState>\n unmaskOnReload?: boolean\n }\n from?: string\n}\n\nexport interface DehydratedRouterState {\n dehydratedMatches: DehydratedRouteMatch[]\n}\n\nexport type DehydratedRouteMatch = Pick<\n RouteMatch,\n 'fetchedAt' | 'invalid' | 'id' | 'status' | 'updatedAt'\n>\n\nexport interface DehydratedRouter {\n state: DehydratedRouterState\n}\n\nexport type RouterConstructorOptions<\n TRouteTree extends AnyRoute,\n TDehydrated extends Record<string, any>,\n> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> &\n RouterContextOptions<TRouteTree>\n\nexport const componentTypes = [\n 'component',\n 'errorComponent',\n 'pendingComponent',\n] as const\n\nexport type RouterEvents = {\n onBeforeLoad: {\n type: 'onBeforeLoad'\n from: ParsedLocation\n to: ParsedLocation\n pathChanged: boolean\n }\n onLoad: {\n type: 'onLoad'\n from: ParsedLocation\n to: ParsedLocation\n pathChanged: boolean\n }\n}\n\nexport type RouterEvent = RouterEvents[keyof RouterEvents]\n\nexport type RouterListener<TRouterEvent extends RouterEvent> = {\n eventType: TRouterEvent['type']\n fn: ListenerFn<TRouterEvent>\n}\n\nexport class Router<\n TRouteTree extends AnyRoute = AnyRoute,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> {\n options: PickAsRequired<\n RouterOptions<TRouteTree, TDehydrated>,\n 'stringifySearch' | 'parseSearch' | 'meta'\n >\n routeTree: TRouteTree\n // dehydratedData?: TDehydrated\n // resetNextScroll = false\n // tempLocationKey = `${Math.round(Math.random() * 10000000)}`\n\n constructor(options: RouterConstructorOptions<TRouteTree, TDehydrated>) {\n this.options = {\n defaultPreloadDelay: 50,\n meta: undefined!,\n ...options,\n stringifySearch: options?.stringifySearch ?? defaultStringifySearch,\n parseSearch: options?.parseSearch ?? defaultParseSearch,\n }\n\n this.routeTree = this.options.routeTree as TRouteTree\n }\n\n subscribers = new Set<RouterListener<RouterEvent>>()\n\n subscribe = <TType extends keyof RouterEvents>(\n eventType: TType,\n fn: ListenerFn<RouterEvents[TType]>,\n ) => {\n const listener: RouterListener<any> = {\n eventType,\n fn,\n }\n\n this.subscribers.add(listener)\n\n return () => {\n this.subscribers.delete(listener)\n }\n }\n\n emit = (routerEvent: RouterEvent) => {\n this.subscribers.forEach((listener) => {\n if (listener.eventType === routerEvent.type) {\n listener.fn(routerEvent)\n }\n })\n }\n\n // dehydrate = (): DehydratedRouter => {\n // return {\n // state: {\n // dehydratedMatches: state.matches.map((d) =>\n // pick(d, ['fetchedAt', 'invalid', 'id', 'status', 'updatedAt']),\n // ),\n // },\n // }\n // }\n\n // hydrate = async (__do_not_use_server_ctx?: HydrationCtx) => {\n // let _ctx = __do_not_use_server_ctx\n // // Client hydrates from window\n // if (typeof document !== 'undefined') {\n // _ctx = window.__TSR_DEHYDRATED__\n // }\n\n // invariant(\n // _ctx,\n // 'Expected to find a __TSR_DEHYDRATED__ property on window... but we did not. Did you forget to render <DehydrateRouter /> in your app?',\n // )\n\n // const ctx = _ctx\n // this.dehydratedData = ctx.payload as any\n // this.options.hydrate?.(ctx.payload as any)\n // const dehydratedState = ctx.router.state\n\n // let matches = this.matchRoutes(\n // state.location.pathname,\n // state.location.search,\n // ).map((match) => {\n // const dehydratedMatch = dehydratedState.dehydratedMatches.find(\n // (d) => d.id === match.id,\n // )\n\n // invariant(\n // dehydratedMatch,\n // `Could not find a client-side match for dehydrated match with id: ${match.id}!`,\n // )\n\n // if (dehydratedMatch) {\n // return {\n // ...match,\n // ...dehydratedMatch,\n // }\n // }\n // return match\n // })\n\n // this.setState((s) => {\n // return {\n // ...s,\n // matches: dehydratedState.dehydratedMatches as any,\n // }\n // })\n // }\n\n // TODO:\n // injectedHtml: (string | (() => Promise<string> | string))[] = []\n\n // TODO:\n // injectHtml = async (html: string | (() => Promise<string> | string)) => {\n // this.injectedHtml.push(html)\n // }\n\n // TODO:\n // dehydrateData = <T>(key: any, getData: T | (() => Promise<T> | T)) => {\n // if (typeof document === 'undefined') {\n // const strKey = typeof key === 'string' ? key : JSON.stringify(key)\n\n // this.injectHtml(async () => {\n // const id = `__TSR_DEHYDRATED__${strKey}`\n // const data =\n // typeof getData === 'function' ? await (getData as any)() : getData\n // return `<script id='${id}' suppressHydrationWarning>window[\"__TSR_DEHYDRATED__${escapeJSON(\n // strKey,\n // )}\"] = ${JSON.stringify(data)}\n // ;(() => {\n // var el = document.getElementById('${id}')\n // el.parentElement.removeChild(el)\n // })()\n // </script>`\n // })\n\n // return () => this.hydrateData<T>(key)\n // }\n\n // return () => undefined\n // }\n\n // hydrateData = <T = unknown>(key: any) => {\n // if (typeof document !== 'undefined') {\n // const strKey = typeof key === 'string' ? key : JSON.stringify(key)\n\n // return window[`__TSR_DEHYDRATED__${strKey}` as any] as T\n // }\n\n // return undefined\n // }\n\n // resolveMatchPromise = (matchId: string, key: string, value: any) => {\n // state.matches\n // .find((d) => d.id === matchId)\n // ?.__promisesByKey[key]?.resolve(value)\n // }\n\n // setRouteMatch = (\n // id: string,\n // pending: boolean,\n // updater: NonNullableUpdater<RouteMatch<TRouteTree>>,\n // ) => {\n // const key = pending ? 'pendingMatches' : 'matches'\n\n // this.setState((prev) => {\n // return {\n // ...prev,\n // [key]: prev[key].map((d) => {\n // if (d.id === id) {\n // return functionalUpdate(updater, d)\n // }\n\n // return d\n // }),\n // }\n // })\n // }\n\n // setPendingRouteMatch = (\n // id: string,\n // updater: NonNullableUpdater<RouteMatch<TRouteTree>>,\n // ) => {\n // this.setRouteMatch(id, true, updater)\n // }\n}\n\nfunction escapeJSON(jsonString: string) {\n return jsonString\n .replace(/\\\\/g, '\\\\\\\\') // Escape backslashes\n .replace(/'/g, \"\\\\'\") // Escape single quotes\n .replace(/\"/g, '\\\\\"') // Escape double quotes\n}\n\n// A function that takes an import() argument which is a function and returns a new function that will\n// proxy arguments from the caller to the imported function, retaining all type\n// information along the way\nexport function lazyFn<\n T extends Record<string, (...args: any[]) => any>,\n TKey extends keyof T = 'default',\n>(fn: () => Promise<T>, key?: TKey) {\n return async (...args: Parameters<T[TKey]>): Promise<ReturnType<T[TKey]>> => {\n const imported = await fn()\n return imported[key || 'default'](...args)\n }\n}\n"],"names":["componentTypes","Router","constructor","options","defaultPreloadDelay","meta","undefined","stringifySearch","defaultStringifySearch","parseSearch","defaultParseSearch","routeTree","subscribers","Set","subscribe","eventType","fn","listener","add","delete","emit","routerEvent","forEach","type","lazyFn","key","args","imported"],"mappings":";;;;;;;;;;;;;;;;AAEA;;AAuBA;;AAqHO,MAAMA,cAAc,GAAG,CAC5B,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EACV;AAwBH,MAAMC,MAAM,CAGjB;AAMA;AACA;AACA;EAEAC,WAAWA,CAACC,OAA0D,EAAE;IACtE,IAAI,CAACA,OAAO,GAAG;AACbC,MAAAA,mBAAmB,EAAE,EAAE;AACvBC,MAAAA,IAAI,EAAEC,SAAU;AAChB,MAAA,GAAGH,OAAO;AACVI,MAAAA,eAAe,EAAEJ,OAAO,EAAEI,eAAe,IAAIC,mCAAsB;AACnEC,MAAAA,WAAW,EAAEN,OAAO,EAAEM,WAAW,IAAIC,+BAAAA;KACtC,CAAA;AAED,IAAA,IAAI,CAACC,SAAS,GAAG,IAAI,CAACR,OAAO,CAACQ,SAAuB,CAAA;AACvD,GAAA;AAEAC,EAAAA,WAAW,GAAG,IAAIC,GAAG,EAA+B,CAAA;AAEpDC,EAAAA,SAAS,GAAGA,CACVC,SAAgB,EAChBC,EAAmC,KAChC;AACH,IAAA,MAAMC,QAA6B,GAAG;MACpCF,SAAS;AACTC,MAAAA,EAAAA;KACD,CAAA;AAED,IAAA,IAAI,CAACJ,WAAW,CAACM,GAAG,CAACD,QAAQ,CAAC,CAAA;AAE9B,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAACL,WAAW,CAACO,MAAM,CAACF,QAAQ,CAAC,CAAA;KAClC,CAAA;GACF,CAAA;EAEDG,IAAI,GAAIC,WAAwB,IAAK;AACnC,IAAA,IAAI,CAACT,WAAW,CAACU,OAAO,CAAEL,QAAQ,IAAK;AACrC,MAAA,IAAIA,QAAQ,CAACF,SAAS,KAAKM,WAAW,CAACE,IAAI,EAAE;AAC3CN,QAAAA,QAAQ,CAACD,EAAE,CAACK,WAAW,CAAC,CAAA;AAC1B,OAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACF,CAAA;;AASA;AACA;AACA;AACO,SAASG,MAAMA,CAGpBR,EAAoB,EAAES,GAAU,EAAE;EAClC,OAAO,OAAO,GAAGC,IAAyB,KAAmC;AAC3E,IAAA,MAAMC,QAAQ,GAAG,MAAMX,EAAE,EAAE,CAAA;IAC3B,OAAOW,QAAQ,CAACF,GAAG,IAAI,SAAS,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAA;GAC3C,CAAA;AACH;;;;;;"}
|
package/build/esm/index.js
CHANGED
|
@@ -671,6 +671,9 @@ function isRedirect(obj) {
|
|
|
671
671
|
|
|
672
672
|
const preloadWarning = 'Error preloading route! ☝️';
|
|
673
673
|
const routerContext = /*#__PURE__*/React.createContext(null);
|
|
674
|
+
if (typeof document !== 'undefined') {
|
|
675
|
+
window.__TSR_ROUTER_CONTEXT__ = routerContext;
|
|
676
|
+
}
|
|
674
677
|
function getInitialRouterState(location) {
|
|
675
678
|
return {
|
|
676
679
|
status: 'idle',
|
|
@@ -698,6 +701,10 @@ function RouterProvider({
|
|
|
698
701
|
const tempLocationKeyRef = React.useRef(`${Math.round(Math.random() * 10000000)}`);
|
|
699
702
|
const resetNextScrollRef = React.useRef(false);
|
|
700
703
|
const navigateTimeoutRef = React.useRef(null);
|
|
704
|
+
const latestLoadPromiseRef = React.useRef(Promise.resolve());
|
|
705
|
+
const checkLatest = promise => {
|
|
706
|
+
return latestLoadPromiseRef.current !== promise ? latestLoadPromiseRef.current : undefined;
|
|
707
|
+
};
|
|
701
708
|
const parseLocation = useStableCallback(previousLocation => {
|
|
702
709
|
const parse = ({
|
|
703
710
|
pathname,
|
|
@@ -821,7 +828,6 @@ function RouterProvider({
|
|
|
821
828
|
d.child.rank = i;
|
|
822
829
|
return d.child;
|
|
823
830
|
}), [routesByPath]);
|
|
824
|
-
const latestLoadPromiseRef = React.useRef(Promise.resolve());
|
|
825
831
|
const matchRoutes = useStableCallback((pathname, locationSearch, opts) => {
|
|
826
832
|
let routeParams = {};
|
|
827
833
|
let foundRoute = flatRoutes.find(route => {
|
|
@@ -1120,9 +1126,11 @@ function RouterProvider({
|
|
|
1120
1126
|
});
|
|
1121
1127
|
});
|
|
1122
1128
|
const loadMatches = useStableCallback(async ({
|
|
1129
|
+
checkLatest,
|
|
1123
1130
|
matches,
|
|
1124
1131
|
preload
|
|
1125
1132
|
}) => {
|
|
1133
|
+
let latestPromise;
|
|
1126
1134
|
let firstBadMatchIndex;
|
|
1127
1135
|
|
|
1128
1136
|
// Check each match middleware to see if the route can be accessed
|
|
@@ -1183,7 +1191,7 @@ function RouterProvider({
|
|
|
1183
1191
|
} catch (err) {
|
|
1184
1192
|
if (isRedirect(err)) {
|
|
1185
1193
|
if (!preload) navigate(err);
|
|
1186
|
-
return;
|
|
1194
|
+
return matches;
|
|
1187
1195
|
}
|
|
1188
1196
|
throw err;
|
|
1189
1197
|
}
|
|
@@ -1196,11 +1204,6 @@ function RouterProvider({
|
|
|
1196
1204
|
if (match.isFetching) {
|
|
1197
1205
|
return getRouteMatch(state, match.id)?.loadPromise;
|
|
1198
1206
|
}
|
|
1199
|
-
const fetchedAt = Date.now();
|
|
1200
|
-
const checkLatest = () => {
|
|
1201
|
-
const latest = getRouteMatch(state, match.id);
|
|
1202
|
-
return latest && latest.fetchedAt !== fetchedAt ? latest.loadPromise : undefined;
|
|
1203
|
-
};
|
|
1204
1207
|
const handleIfRedirect = err => {
|
|
1205
1208
|
if (isRedirect(err)) {
|
|
1206
1209
|
if (!preload) {
|
|
@@ -1211,7 +1214,6 @@ function RouterProvider({
|
|
|
1211
1214
|
return false;
|
|
1212
1215
|
};
|
|
1213
1216
|
const load = async () => {
|
|
1214
|
-
let latestPromise;
|
|
1215
1217
|
try {
|
|
1216
1218
|
const componentsPromise = Promise.all(componentTypes.map(async type => {
|
|
1217
1219
|
const component = route.options[type];
|
|
@@ -1253,12 +1255,18 @@ function RouterProvider({
|
|
|
1253
1255
|
updatedAt: Date.now()
|
|
1254
1256
|
};
|
|
1255
1257
|
}
|
|
1258
|
+
if (!preload) {
|
|
1259
|
+
setState(s => ({
|
|
1260
|
+
...s,
|
|
1261
|
+
matches: s.matches.map(d => d.id === match.id ? match : d)
|
|
1262
|
+
}));
|
|
1263
|
+
}
|
|
1256
1264
|
};
|
|
1257
1265
|
let loadPromise;
|
|
1258
1266
|
matches[index] = match = {
|
|
1259
1267
|
...match,
|
|
1260
1268
|
isFetching: true,
|
|
1261
|
-
fetchedAt,
|
|
1269
|
+
fetchedAt: Date.now(),
|
|
1262
1270
|
invalid: false
|
|
1263
1271
|
};
|
|
1264
1272
|
loadPromise = load();
|
|
@@ -1270,35 +1278,32 @@ function RouterProvider({
|
|
|
1270
1278
|
})());
|
|
1271
1279
|
});
|
|
1272
1280
|
await Promise.all(matchPromises);
|
|
1281
|
+
return matches;
|
|
1273
1282
|
});
|
|
1274
|
-
const load = useStableCallback(async
|
|
1283
|
+
const load = useStableCallback(async () => {
|
|
1275
1284
|
const promise = new Promise(async (resolve, reject) => {
|
|
1285
|
+
const next = latestLocationRef.current;
|
|
1276
1286
|
const prevLocation = state.resolvedLocation;
|
|
1277
|
-
const pathDidChange = !!(
|
|
1287
|
+
const pathDidChange = !!(next && prevLocation.href !== next.href);
|
|
1278
1288
|
let latestPromise;
|
|
1279
|
-
const checkLatest = () => {
|
|
1280
|
-
return latestLoadPromiseRef.current !== promise ? latestLoadPromiseRef.current : undefined;
|
|
1281
|
-
};
|
|
1282
1289
|
|
|
1283
1290
|
// Cancel any pending matches
|
|
1284
1291
|
cancelMatches(state);
|
|
1285
1292
|
router.emit({
|
|
1286
1293
|
type: 'onBeforeLoad',
|
|
1287
1294
|
from: prevLocation,
|
|
1288
|
-
to:
|
|
1295
|
+
to: next ?? state.location,
|
|
1289
1296
|
pathChanged: pathDidChange
|
|
1290
1297
|
});
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
}
|
|
1298
|
+
|
|
1299
|
+
// Ingest the new location
|
|
1300
|
+
setState(s => ({
|
|
1301
|
+
...s,
|
|
1302
|
+
location: next
|
|
1303
|
+
}));
|
|
1298
1304
|
|
|
1299
1305
|
// Match the routes
|
|
1300
|
-
|
|
1301
|
-
throwOnError: opts?.throwOnError,
|
|
1306
|
+
let matches = matchRoutes(next.pathname, next.search, {
|
|
1302
1307
|
debug: true
|
|
1303
1308
|
});
|
|
1304
1309
|
setState(s => ({
|
|
@@ -1307,10 +1312,11 @@ function RouterProvider({
|
|
|
1307
1312
|
matches
|
|
1308
1313
|
}));
|
|
1309
1314
|
try {
|
|
1310
|
-
// Load the matches
|
|
1311
1315
|
try {
|
|
1316
|
+
// Load the matches
|
|
1312
1317
|
await loadMatches({
|
|
1313
|
-
matches
|
|
1318
|
+
matches,
|
|
1319
|
+
checkLatest: () => checkLatest(promise)
|
|
1314
1320
|
});
|
|
1315
1321
|
} catch (err) {
|
|
1316
1322
|
// swallow this error, since we'll display the
|
|
@@ -1318,7 +1324,7 @@ function RouterProvider({
|
|
|
1318
1324
|
}
|
|
1319
1325
|
|
|
1320
1326
|
// Only apply the latest transition
|
|
1321
|
-
if (latestPromise = checkLatest()) {
|
|
1327
|
+
if (latestPromise = checkLatest(promise)) {
|
|
1322
1328
|
return latestPromise;
|
|
1323
1329
|
}
|
|
1324
1330
|
|
|
@@ -1355,13 +1361,13 @@ function RouterProvider({
|
|
|
1355
1361
|
router.emit({
|
|
1356
1362
|
type: 'onLoad',
|
|
1357
1363
|
from: prevLocation,
|
|
1358
|
-
to:
|
|
1364
|
+
to: next,
|
|
1359
1365
|
pathChanged: pathDidChange
|
|
1360
1366
|
});
|
|
1361
1367
|
resolve();
|
|
1362
1368
|
} catch (err) {
|
|
1363
1369
|
// Only apply the latest transition
|
|
1364
|
-
if (latestPromise = checkLatest()) {
|
|
1370
|
+
if (latestPromise = checkLatest(promise)) {
|
|
1365
1371
|
return latestPromise;
|
|
1366
1372
|
}
|
|
1367
1373
|
reject(err);
|
|
@@ -1370,13 +1376,6 @@ function RouterProvider({
|
|
|
1370
1376
|
latestLoadPromiseRef.current = promise;
|
|
1371
1377
|
return latestLoadPromiseRef.current;
|
|
1372
1378
|
});
|
|
1373
|
-
const safeLoad = React.useCallback(async () => {
|
|
1374
|
-
try {
|
|
1375
|
-
return load();
|
|
1376
|
-
} catch (err) {
|
|
1377
|
-
// Don't do anything
|
|
1378
|
-
}
|
|
1379
|
-
}, []);
|
|
1380
1379
|
const preloadRoute = useStableCallback(async (navigateOpts = state.location) => {
|
|
1381
1380
|
let next = buildLocation(navigateOpts);
|
|
1382
1381
|
let matches = matchRoutes(next.pathname, next.search, {
|
|
@@ -1384,7 +1383,8 @@ function RouterProvider({
|
|
|
1384
1383
|
});
|
|
1385
1384
|
await loadMatches({
|
|
1386
1385
|
matches,
|
|
1387
|
-
preload: true
|
|
1386
|
+
preload: true,
|
|
1387
|
+
checkLatest: () => undefined
|
|
1388
1388
|
});
|
|
1389
1389
|
return [last(matches), matches];
|
|
1390
1390
|
});
|
|
@@ -1497,10 +1497,13 @@ function RouterProvider({
|
|
|
1497
1497
|
const unsub = history.subscribe(() => {
|
|
1498
1498
|
latestLocationRef.current = parseLocation(latestLocationRef.current);
|
|
1499
1499
|
React.startTransition(() => {
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1500
|
+
if (state.location !== latestLocationRef.current) {
|
|
1501
|
+
try {
|
|
1502
|
+
load();
|
|
1503
|
+
} catch (err) {
|
|
1504
|
+
console.error(err);
|
|
1505
|
+
}
|
|
1506
|
+
}
|
|
1504
1507
|
});
|
|
1505
1508
|
});
|
|
1506
1509
|
const nextLocation = buildLocation({
|
|
@@ -1522,13 +1525,12 @@ function RouterProvider({
|
|
|
1522
1525
|
const initialLoad = React.useRef(true);
|
|
1523
1526
|
if (initialLoad.current) {
|
|
1524
1527
|
initialLoad.current = false;
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
safeLoad();
|
|
1528
|
+
try {
|
|
1529
|
+
load();
|
|
1530
|
+
} catch (err) {
|
|
1531
|
+
console.error(err);
|
|
1530
1532
|
}
|
|
1531
|
-
}
|
|
1533
|
+
}
|
|
1532
1534
|
React.useMemo(() => [...state.matches, ...state.pendingMatches].some(d => d.isFetching), [state.matches, state.pendingMatches]);
|
|
1533
1535
|
const matchRoute = useStableCallback((state, location, opts) => {
|
|
1534
1536
|
location = {
|
|
@@ -1733,7 +1735,8 @@ function Navigate(props) {
|
|
|
1733
1735
|
}
|
|
1734
1736
|
const matchesContext = /*#__PURE__*/React.createContext(null);
|
|
1735
1737
|
function useRouter() {
|
|
1736
|
-
const
|
|
1738
|
+
const resolvedContext = window.__TSR_ROUTER_CONTEXT__ || routerContext;
|
|
1739
|
+
const value = React.useContext(resolvedContext);
|
|
1737
1740
|
warning(value, 'useRouter must be used inside a <RouterProvider> component!');
|
|
1738
1741
|
return value;
|
|
1739
1742
|
}
|