@tanstack/react-router 1.4.9 → 1.4.10
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.map +1 -1
- package/build/cjs/useParams.js.map +1 -1
- package/build/cjs/useSearch.js.map +1 -1
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +351 -351
- package/build/types/Matches.d.ts +6 -6
- package/build/types/useParams.d.ts +2 -2
- package/build/types/useSearch.d.ts +3 -3
- package/build/types/utils.d.ts +0 -1
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -2
- package/src/Matches.tsx +14 -17
- package/src/useParams.tsx +4 -6
- package/src/useSearch.tsx +4 -6
- package/src/utils.ts +0 -6
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 { useRouter, useRouterState } from './RouterProvider'\nimport { ResolveRelativePath, ToOptions } from './link'\nimport { AnyRoute, ReactNode } from './route'\nimport {\n ParseRoute,\n RouteById,\n RouteByPath,\n RouteIds,\n RoutePaths,\n} from './routeInfo'\nimport { RegisteredRouter, RouterState } from './router'\nimport { GetTFrom, 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: RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema']\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 TOpts extends StrictOrFrom<TFrom>,\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TFromInferred extends RouteIds<TRouteTree> = GetTFrom<TOpts, TRouteTree>,\n TRouteMatchState = RouteMatch<TRouteTree, TFromInferred>,\n TSelected = TRouteMatchState,\n>(\n opts: TOpts & {\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 TOpts extends StrictOrFrom<TFrom>,\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TFromInferred extends RouteIds<TRouteTree> = GetTFrom<TOpts, TRouteTree>,\n TRouteMatch extends RouteMatch<TRouteTree, TFromInferred> = RouteMatch<\n TRouteTree,\n TFromInferred\n >,\n TSelected = Required<TRouteMatch>['loaderDeps'],\n>(\n opts: TOpts & {\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 TOpts extends StrictOrFrom<TFrom>,\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TFromInferred extends RouteIds<TRouteTree> = GetTFrom<TOpts, TRouteTree>,\n TRouteMatch extends RouteMatch<TRouteTree, TFromInferred> = RouteMatch<\n TRouteTree,\n TFromInferred\n >,\n TSelected = Required<TRouteMatch>['loaderData'],\n>(\n opts: TOpts & {\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 { useRouter, useRouterState } from './RouterProvider'\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useParams.js","sources":["../../src/useParams.tsx"],"sourcesContent":["import { AnyRoute } from './route'\nimport { RouteIds, RouteById
|
|
1
|
+
{"version":3,"file":"useParams.js","sources":["../../src/useParams.tsx"],"sourcesContent":["import { AnyRoute } from './route'\nimport { RouteIds, RouteById } from './routeInfo'\nimport { RegisteredRouter } from './router'\nimport { last } from './utils'\nimport { useRouterState } from './RouterProvider'\nimport { StrictOrFrom } from './utils'\nimport { getRenderedMatches } from './Matches'\n\nexport function useParams<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TParams = RouteById<TRouteTree, TFrom>['types']['allParams'],\n TSelected = TParams,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (params: TParams) => TSelected\n },\n): TSelected {\n return useRouterState({\n select: (state: any) => {\n const params = (last(getRenderedMatches(state)) as any)?.params\n return opts?.select ? opts.select(params) : params\n },\n })\n}\n"],"names":["useParams","opts","useRouterState","select","state","params","last","getRenderedMatches"],"mappings":";;;;;;;;;;;;;;;;AAQO,SAASA,SAASA,CAMvBC,IAEC,EACU;AACX,EAAA,OAAOC,6BAAc,CAAC;IACpBC,MAAM,EAAGC,KAAU,IAAK;MACtB,MAAMC,MAAM,GAAIC,UAAI,CAACC,0BAAkB,CAACH,KAAK,CAAC,CAAC,EAAUC,MAAM,CAAA;MAC/D,OAAOJ,IAAI,EAAEE,MAAM,GAAGF,IAAI,CAACE,MAAM,CAACE,MAAM,CAAC,GAAGA,MAAM,CAAA;AACpD,KAAA;AACF,GAAC,CAAC,CAAA;AACJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSearch.js","sources":["../../src/useSearch.tsx"],"sourcesContent":["import { AnyRoute } from './route'\nimport { RouteIds, RouteById } from './routeInfo'\nimport { RegisteredRouter } from './router'\nimport { RouteMatch } from './Matches'\nimport { useMatch } from './Matches'\nimport { StrictOrFrom
|
|
1
|
+
{"version":3,"file":"useSearch.js","sources":["../../src/useSearch.tsx"],"sourcesContent":["import { AnyRoute, RootSearchSchema } from './route'\nimport { RouteIds, RouteById } from './routeInfo'\nimport { RegisteredRouter } from './router'\nimport { RouteMatch } from './Matches'\nimport { useMatch } from './Matches'\nimport { StrictOrFrom } from './utils'\n\nexport function useSearch<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TSearch = Exclude<RouteById<TRouteTree, TFrom>['types']['fullSearchSchema'], RootSearchSchema>,\n TSelected = TSearch,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (search: TSearch) => TSelected\n },\n) : TSelected {\n return useMatch({\n ...opts,\n select: (match: RouteMatch) => {\n return opts?.select ? opts.select(match.search as TSearch) : match.search\n },\n })\n}\n"],"names":["useSearch","opts","useMatch","select","match","search"],"mappings":";;;;;;;;;;;;;;AAOO,SAASA,SAASA,CAMvBC,IAEC,EACW;AACZ,EAAA,OAAOC,gBAAQ,CAAC;AACd,IAAA,GAAGD,IAAI;IACPE,MAAM,EAAGC,KAAiB,IAAK;AAC7B,MAAA,OAAOH,IAAI,EAAEE,MAAM,GAAGF,IAAI,CAACE,MAAM,CAACC,KAAK,CAACC,MAAiB,CAAC,GAAGD,KAAK,CAACC,MAAM,CAAA;AAC3E,KAAA;AACF,GAAC,CAAC,CAAA;AACJ;;;;"}
|
package/build/cjs/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import * as React from 'react'\nimport { useMatch } from './Matches'\nimport { RouteMatch } from './Matches'\nimport { AnyRoute } from './route'\nimport { RouteIds, RouteById } from './routeInfo'\nimport { RegisteredRouter } from './router'\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\nexport type IsAny<T, Y, N = T> = 1 extends 0 & T ? Y : N\nexport type PickAsRequired<T, K extends keyof T> = Omit<T, K> &\n Required<Pick<T, K>>\n\nexport type PickRequired<T> = {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K]\n}\n\n// from https://stackoverflow.com/a/76458160\nexport type WithoutEmpty<T> = T extends T ? ({} extends T ? never : T) : never\n\n// export type Expand<T> = T\nexport type Expand<T> = T extends object\n ? T extends infer O\n ? { [K in keyof O]: O[K] }\n : never\n : T\n\nexport type UnionToIntersection<U> = (\n U extends any ? (k: U) => void : never\n) extends (k: infer I) => any\n ? I\n : never\n\n// type Compute<T> = { [K in keyof T]: T[K] } | never\n\n// type AllKeys<T> = T extends any ? keyof T : never\n\n// export type MergeUnion<T, Keys extends keyof T = keyof T> = Compute<\n// {\n// [K in Keys]: T[Keys]\n// } & {\n// [K in AllKeys<T>]?: T extends any\n// ? K extends keyof T\n// ? T[K]\n// : never\n// : never\n// }\n// >\n\nexport type Assign<Left, Right> = Omit<Left, keyof Right> & Right\n\nexport type AssignAll<T extends any[]> = T extends [infer Left, ...infer Right]\n ? Right extends any[]\n ? Assign<Left, AssignAll<Right>>\n : Left\n : {}\n\n// // Sample types to merge\n// type TypeA = {\n// shared: string\n// onlyInA: string\n// nested: {\n// shared: string\n// aProp: string\n// }\n// array: string[]\n// }\n\n// type TypeB = {\n// shared: number\n// onlyInB: number\n// nested: {\n// shared: number\n// bProp: number\n// }\n// array: number[]\n// }\n\n// type TypeC = {\n// shared: boolean\n// onlyInC: boolean\n// nested: {\n// shared: boolean\n// cProp: boolean\n// }\n// array: boolean[]\n// }\n\n// type Test = Expand<Assign<TypeA, TypeB>>\n\n// // Using DeepMerge to merge TypeA and TypeB\n// type MergedType = Expand<AssignAll<[TypeA, TypeB, TypeC]>>\n\nexport type Timeout = ReturnType<typeof setTimeout>\n\nexport type Updater<TPrevious, TResult = TPrevious> =\n | TResult\n | ((prev?: TPrevious) => TResult)\n\nexport type NonNullableUpdater<TPrevious, TResult = TPrevious> =\n | TResult\n | ((prev: TPrevious) => TResult)\n\n// from https://github.com/type-challenges/type-challenges/issues/737\ntype LastInUnion<U> = UnionToIntersection<\n U extends unknown ? (x: U) => 0 : never\n> extends (x: infer L) => 0\n ? L\n : never\nexport type UnionToTuple<U, Last = LastInUnion<U>> = [U] extends [never]\n ? []\n : [...UnionToTuple<Exclude<U, Last>>, Last]\n\n//\n\nexport const isServer = typeof document === 'undefined'\n\nexport function last<T>(arr: T[]) {\n return arr[arr.length - 1]\n}\n\nfunction isFunction(d: any): d is Function {\n return typeof d === 'function'\n}\n\nexport function functionalUpdate<TResult>(\n updater: Updater<TResult> | NonNullableUpdater<TResult>,\n previous: TResult,\n): TResult {\n if (isFunction(updater)) {\n return updater(previous as TResult)\n }\n\n return updater\n}\n\nexport function pick<T, K extends keyof T>(parent: T, keys: K[]): Pick<T, K> {\n return keys.reduce((obj: any, key: K) => {\n obj[key] = parent[key]\n return obj\n }, {} as any)\n}\n\n/**\n * This function returns `prev` if `_next` is deeply equal.\n * If not, it will replace any deeply equal children of `b` with those of `a`.\n * This can be used for structural sharing between immutable JSON values for example.\n * Do not use this with signals\n */\nexport function replaceEqualDeep<T>(prev: any, _next: T): T {\n if (prev === _next) {\n return prev\n }\n\n const next = _next as any\n\n const array = isPlainArray(prev) && isPlainArray(next)\n\n if (array || (isPlainObject(prev) && isPlainObject(next))) {\n const prevItems = array ? prev : Object.keys(prev)\n const prevSize = prevItems.length\n const nextItems = array ? next : Object.keys(next)\n const nextSize = nextItems.length\n const copy: any = array ? [] : {}\n\n let equalItems = 0\n\n for (let i = 0; i < nextSize; i++) {\n const key = array ? i : nextItems[i]\n if (\n !array &&\n prev[key] === undefined &&\n next[key] === undefined &&\n prevItems.includes(key)\n ) {\n copy[key] = undefined\n equalItems++\n } else {\n copy[key] = replaceEqualDeep(prev[key], next[key])\n if (copy[key] === prev[key] && prev[key] !== undefined) {\n equalItems++\n }\n }\n }\n\n return prevSize === nextSize && equalItems === prevSize ? prev : copy\n }\n\n return next\n}\n\n// Copied from: https://github.com/jonschlinkert/is-plain-object\nexport function isPlainObject(o: any) {\n if (!hasObjectPrototype(o)) {\n return false\n }\n\n // If has modified constructor\n const ctor = o.constructor\n if (typeof ctor === 'undefined') {\n return true\n }\n\n // If has modified prototype\n const prot = ctor.prototype\n if (!hasObjectPrototype(prot)) {\n return false\n }\n\n // If constructor does not have an Object-specific method\n if (!prot.hasOwnProperty('isPrototypeOf')) {\n return false\n }\n\n // Most likely a plain Object\n return true\n}\n\nfunction hasObjectPrototype(o: any) {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\nexport function isPlainArray(value: unknown) {\n return Array.isArray(value) && value.length === Object.keys(value).length\n}\n\nexport function deepEqual(a: any, b: any, partial: boolean = false): boolean {\n if (a === b) {\n return true\n }\n\n if (typeof a !== typeof b) {\n return false\n }\n\n if (isPlainObject(a) && isPlainObject(b)) {\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n\n if (!partial && aKeys.length !== bKeys.length) {\n return false\n }\n\n return !bKeys.some(\n (key) => !(key in a) || !deepEqual(a[key], b[key], partial),\n )\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n return !a.some((item, index) => !deepEqual(item, b[index], partial))\n }\n\n return false\n}\n\nexport function useStableCallback<T extends (...args: any[]) => any>(fn: T): T {\n const fnRef = React.useRef(fn)\n fnRef.current = fn\n\n const ref = React.useRef((...args: any[]) => fnRef.current(...args))\n return ref.current as T\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\nexport type StringLiteral<T> = T extends string\n ? string extends T\n ? string\n : T\n : never\n\nexport type StrictOrFrom<TFrom> =\n | {\n from: StringLiteral<TFrom> | TFrom\n strict?: true\n }\n | {\n from?: never\n strict: false\n }\n\nexport type GetTFrom<T, TRouteTree extends AnyRoute> = T extends StrictOrFrom<\n infer TFrom extends RouteIds<TRouteTree>\n>\n ? TFrom\n : never\n\nexport function useRouteContext<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteContext = RouteById<TRouteTree, TFrom>['types']['allContext'],\n TSelected = TRouteContext,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (search: TRouteContext) => TSelected\n },\n): TSelected {\n return useMatch({\n ...(opts as any),\n select: (match: RouteMatch) =>\n opts?.select\n ? opts.select(match.context as TRouteContext)\n : match.context,\n })\n}\n\nexport const useLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nexport function 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"],"names":["isServer","document","last","arr","length","isFunction","d","functionalUpdate","updater","previous","pick","parent","keys","reduce","obj","key","replaceEqualDeep","prev","_next","next","array","isPlainArray","isPlainObject","prevItems","Object","prevSize","nextItems","nextSize","copy","equalItems","i","undefined","includes","o","hasObjectPrototype","ctor","constructor","prot","prototype","hasOwnProperty","toString","call","value","Array","isArray","deepEqual","a","b","partial","aKeys","bKeys","some","item","index","useStableCallback","fn","fnRef","React","useRef","current","ref","args","shallow","objA","objB","is","keysA","useRouteContext","opts","useMatch","select","match","context","useLayoutEffect","window","useEffect","escapeJSON","jsonString","replace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["import * as React from 'react'\nimport { useMatch } from './Matches'\nimport { RouteMatch } from './Matches'\nimport { AnyRoute } from './route'\nimport { RouteIds, RouteById } from './routeInfo'\nimport { RegisteredRouter } from './router'\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\nexport type IsAny<T, Y, N = T> = 1 extends 0 & T ? Y : N\nexport type PickAsRequired<T, K extends keyof T> = Omit<T, K> &\n Required<Pick<T, K>>\n\nexport type PickRequired<T> = {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K]\n}\n\n// from https://stackoverflow.com/a/76458160\nexport type WithoutEmpty<T> = T extends T ? ({} extends T ? never : T) : never\n\n// export type Expand<T> = T\nexport type Expand<T> = T extends object\n ? T extends infer O\n ? { [K in keyof O]: O[K] }\n : never\n : T\n\nexport type UnionToIntersection<U> = (\n U extends any ? (k: U) => void : never\n) extends (k: infer I) => any\n ? I\n : never\n\n// type Compute<T> = { [K in keyof T]: T[K] } | never\n\n// type AllKeys<T> = T extends any ? keyof T : never\n\n// export type MergeUnion<T, Keys extends keyof T = keyof T> = Compute<\n// {\n// [K in Keys]: T[Keys]\n// } & {\n// [K in AllKeys<T>]?: T extends any\n// ? K extends keyof T\n// ? T[K]\n// : never\n// : never\n// }\n// >\n\nexport type Assign<Left, Right> = Omit<Left, keyof Right> & Right\n\nexport type AssignAll<T extends any[]> = T extends [infer Left, ...infer Right]\n ? Right extends any[]\n ? Assign<Left, AssignAll<Right>>\n : Left\n : {}\n\n// // Sample types to merge\n// type TypeA = {\n// shared: string\n// onlyInA: string\n// nested: {\n// shared: string\n// aProp: string\n// }\n// array: string[]\n// }\n\n// type TypeB = {\n// shared: number\n// onlyInB: number\n// nested: {\n// shared: number\n// bProp: number\n// }\n// array: number[]\n// }\n\n// type TypeC = {\n// shared: boolean\n// onlyInC: boolean\n// nested: {\n// shared: boolean\n// cProp: boolean\n// }\n// array: boolean[]\n// }\n\n// type Test = Expand<Assign<TypeA, TypeB>>\n\n// // Using DeepMerge to merge TypeA and TypeB\n// type MergedType = Expand<AssignAll<[TypeA, TypeB, TypeC]>>\n\nexport type Timeout = ReturnType<typeof setTimeout>\n\nexport type Updater<TPrevious, TResult = TPrevious> =\n | TResult\n | ((prev?: TPrevious) => TResult)\n\nexport type NonNullableUpdater<TPrevious, TResult = TPrevious> =\n | TResult\n | ((prev: TPrevious) => TResult)\n\n// from https://github.com/type-challenges/type-challenges/issues/737\ntype LastInUnion<U> = UnionToIntersection<\n U extends unknown ? (x: U) => 0 : never\n> extends (x: infer L) => 0\n ? L\n : never\nexport type UnionToTuple<U, Last = LastInUnion<U>> = [U] extends [never]\n ? []\n : [...UnionToTuple<Exclude<U, Last>>, Last]\n\n//\n\nexport const isServer = typeof document === 'undefined'\n\nexport function last<T>(arr: T[]) {\n return arr[arr.length - 1]\n}\n\nfunction isFunction(d: any): d is Function {\n return typeof d === 'function'\n}\n\nexport function functionalUpdate<TResult>(\n updater: Updater<TResult> | NonNullableUpdater<TResult>,\n previous: TResult,\n): TResult {\n if (isFunction(updater)) {\n return updater(previous as TResult)\n }\n\n return updater\n}\n\nexport function pick<T, K extends keyof T>(parent: T, keys: K[]): Pick<T, K> {\n return keys.reduce((obj: any, key: K) => {\n obj[key] = parent[key]\n return obj\n }, {} as any)\n}\n\n/**\n * This function returns `prev` if `_next` is deeply equal.\n * If not, it will replace any deeply equal children of `b` with those of `a`.\n * This can be used for structural sharing between immutable JSON values for example.\n * Do not use this with signals\n */\nexport function replaceEqualDeep<T>(prev: any, _next: T): T {\n if (prev === _next) {\n return prev\n }\n\n const next = _next as any\n\n const array = isPlainArray(prev) && isPlainArray(next)\n\n if (array || (isPlainObject(prev) && isPlainObject(next))) {\n const prevItems = array ? prev : Object.keys(prev)\n const prevSize = prevItems.length\n const nextItems = array ? next : Object.keys(next)\n const nextSize = nextItems.length\n const copy: any = array ? [] : {}\n\n let equalItems = 0\n\n for (let i = 0; i < nextSize; i++) {\n const key = array ? i : nextItems[i]\n if (\n !array &&\n prev[key] === undefined &&\n next[key] === undefined &&\n prevItems.includes(key)\n ) {\n copy[key] = undefined\n equalItems++\n } else {\n copy[key] = replaceEqualDeep(prev[key], next[key])\n if (copy[key] === prev[key] && prev[key] !== undefined) {\n equalItems++\n }\n }\n }\n\n return prevSize === nextSize && equalItems === prevSize ? prev : copy\n }\n\n return next\n}\n\n// Copied from: https://github.com/jonschlinkert/is-plain-object\nexport function isPlainObject(o: any) {\n if (!hasObjectPrototype(o)) {\n return false\n }\n\n // If has modified constructor\n const ctor = o.constructor\n if (typeof ctor === 'undefined') {\n return true\n }\n\n // If has modified prototype\n const prot = ctor.prototype\n if (!hasObjectPrototype(prot)) {\n return false\n }\n\n // If constructor does not have an Object-specific method\n if (!prot.hasOwnProperty('isPrototypeOf')) {\n return false\n }\n\n // Most likely a plain Object\n return true\n}\n\nfunction hasObjectPrototype(o: any) {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\nexport function isPlainArray(value: unknown) {\n return Array.isArray(value) && value.length === Object.keys(value).length\n}\n\nexport function deepEqual(a: any, b: any, partial: boolean = false): boolean {\n if (a === b) {\n return true\n }\n\n if (typeof a !== typeof b) {\n return false\n }\n\n if (isPlainObject(a) && isPlainObject(b)) {\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n\n if (!partial && aKeys.length !== bKeys.length) {\n return false\n }\n\n return !bKeys.some(\n (key) => !(key in a) || !deepEqual(a[key], b[key], partial),\n )\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n return !a.some((item, index) => !deepEqual(item, b[index], partial))\n }\n\n return false\n}\n\nexport function useStableCallback<T extends (...args: any[]) => any>(fn: T): T {\n const fnRef = React.useRef(fn)\n fnRef.current = fn\n\n const ref = React.useRef((...args: any[]) => fnRef.current(...args))\n return ref.current as T\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\nexport type StringLiteral<T> = T extends string\n ? string extends T\n ? string\n : T\n : never\n\nexport type StrictOrFrom<TFrom> =\n | {\n from: StringLiteral<TFrom> | TFrom\n strict?: true\n }\n | {\n from?: never\n strict: false\n }\n\nexport function useRouteContext<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RouteIds<TRouteTree> = RouteIds<TRouteTree>,\n TRouteContext = RouteById<TRouteTree, TFrom>['types']['allContext'],\n TSelected = TRouteContext,\n>(\n opts: StrictOrFrom<TFrom> & {\n select?: (search: TRouteContext) => TSelected\n },\n): TSelected {\n return useMatch({\n ...(opts as any),\n select: (match: RouteMatch) =>\n opts?.select\n ? opts.select(match.context as TRouteContext)\n : match.context,\n })\n}\n\nexport const useLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nexport function 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"],"names":["isServer","document","last","arr","length","isFunction","d","functionalUpdate","updater","previous","pick","parent","keys","reduce","obj","key","replaceEqualDeep","prev","_next","next","array","isPlainArray","isPlainObject","prevItems","Object","prevSize","nextItems","nextSize","copy","equalItems","i","undefined","includes","o","hasObjectPrototype","ctor","constructor","prot","prototype","hasOwnProperty","toString","call","value","Array","isArray","deepEqual","a","b","partial","aKeys","bKeys","some","item","index","useStableCallback","fn","fnRef","React","useRef","current","ref","args","shallow","objA","objB","is","keysA","useRouteContext","opts","useMatch","select","match","context","useLayoutEffect","window","useEffect","escapeJSON","jsonString","replace"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA;;AAGA;;AAaA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAYA;;AAUA;;MAEaA,QAAQ,GAAG,OAAOC,QAAQ,KAAK,YAAW;AAEhD,SAASC,IAAIA,CAAIC,GAAQ,EAAE;AAChC,EAAA,OAAOA,GAAG,CAACA,GAAG,CAACC,MAAM,GAAG,CAAC,CAAC,CAAA;AAC5B,CAAA;AAEA,SAASC,UAAUA,CAACC,CAAM,EAAiB;EACzC,OAAO,OAAOA,CAAC,KAAK,UAAU,CAAA;AAChC,CAAA;AAEO,SAASC,gBAAgBA,CAC9BC,OAAuD,EACvDC,QAAiB,EACR;AACT,EAAA,IAAIJ,UAAU,CAACG,OAAO,CAAC,EAAE;IACvB,OAAOA,OAAO,CAACC,QAAmB,CAAC,CAAA;AACrC,GAAA;AAEA,EAAA,OAAOD,OAAO,CAAA;AAChB,CAAA;AAEO,SAASE,IAAIA,CAAuBC,MAAS,EAAEC,IAAS,EAAc;EAC3E,OAAOA,IAAI,CAACC,MAAM,CAAC,CAACC,GAAQ,EAAEC,GAAM,KAAK;AACvCD,IAAAA,GAAG,CAACC,GAAG,CAAC,GAAGJ,MAAM,CAACI,GAAG,CAAC,CAAA;AACtB,IAAA,OAAOD,GAAG,CAAA;GACX,EAAE,EAAS,CAAC,CAAA;AACf,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,gBAAgBA,CAAIC,IAAS,EAAEC,KAAQ,EAAK;EAC1D,IAAID,IAAI,KAAKC,KAAK,EAAE;AAClB,IAAA,OAAOD,IAAI,CAAA;AACb,GAAA;EAEA,MAAME,IAAI,GAAGD,KAAY,CAAA;EAEzB,MAAME,KAAK,GAAGC,YAAY,CAACJ,IAAI,CAAC,IAAII,YAAY,CAACF,IAAI,CAAC,CAAA;EAEtD,IAAIC,KAAK,IAAKE,aAAa,CAACL,IAAI,CAAC,IAAIK,aAAa,CAACH,IAAI,CAAE,EAAE;IACzD,MAAMI,SAAS,GAAGH,KAAK,GAAGH,IAAI,GAAGO,MAAM,CAACZ,IAAI,CAACK,IAAI,CAAC,CAAA;AAClD,IAAA,MAAMQ,QAAQ,GAAGF,SAAS,CAACnB,MAAM,CAAA;IACjC,MAAMsB,SAAS,GAAGN,KAAK,GAAGD,IAAI,GAAGK,MAAM,CAACZ,IAAI,CAACO,IAAI,CAAC,CAAA;AAClD,IAAA,MAAMQ,QAAQ,GAAGD,SAAS,CAACtB,MAAM,CAAA;AACjC,IAAA,MAAMwB,IAAS,GAAGR,KAAK,GAAG,EAAE,GAAG,EAAE,CAAA;IAEjC,IAAIS,UAAU,GAAG,CAAC,CAAA;IAElB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,EAAEG,CAAC,EAAE,EAAE;MACjC,MAAMf,GAAG,GAAGK,KAAK,GAAGU,CAAC,GAAGJ,SAAS,CAACI,CAAC,CAAC,CAAA;MACpC,IACE,CAACV,KAAK,IACNH,IAAI,CAACF,GAAG,CAAC,KAAKgB,SAAS,IACvBZ,IAAI,CAACJ,GAAG,CAAC,KAAKgB,SAAS,IACvBR,SAAS,CAACS,QAAQ,CAACjB,GAAG,CAAC,EACvB;AACAa,QAAAA,IAAI,CAACb,GAAG,CAAC,GAAGgB,SAAS,CAAA;AACrBF,QAAAA,UAAU,EAAE,CAAA;AACd,OAAC,MAAM;AACLD,QAAAA,IAAI,CAACb,GAAG,CAAC,GAAGC,gBAAgB,CAACC,IAAI,CAACF,GAAG,CAAC,EAAEI,IAAI,CAACJ,GAAG,CAAC,CAAC,CAAA;AAClD,QAAA,IAAIa,IAAI,CAACb,GAAG,CAAC,KAAKE,IAAI,CAACF,GAAG,CAAC,IAAIE,IAAI,CAACF,GAAG,CAAC,KAAKgB,SAAS,EAAE;AACtDF,UAAAA,UAAU,EAAE,CAAA;AACd,SAAA;AACF,OAAA;AACF,KAAA;IAEA,OAAOJ,QAAQ,KAAKE,QAAQ,IAAIE,UAAU,KAAKJ,QAAQ,GAAGR,IAAI,GAAGW,IAAI,CAAA;AACvE,GAAA;AAEA,EAAA,OAAOT,IAAI,CAAA;AACb,CAAA;;AAEA;AACO,SAASG,aAAaA,CAACW,CAAM,EAAE;AACpC,EAAA,IAAI,CAACC,kBAAkB,CAACD,CAAC,CAAC,EAAE;AAC1B,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;;AAEA;AACA,EAAA,MAAME,IAAI,GAAGF,CAAC,CAACG,WAAW,CAAA;AAC1B,EAAA,IAAI,OAAOD,IAAI,KAAK,WAAW,EAAE;AAC/B,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;;AAEA;AACA,EAAA,MAAME,IAAI,GAAGF,IAAI,CAACG,SAAS,CAAA;AAC3B,EAAA,IAAI,CAACJ,kBAAkB,CAACG,IAAI,CAAC,EAAE;AAC7B,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;;AAEA;AACA,EAAA,IAAI,CAACA,IAAI,CAACE,cAAc,CAAC,eAAe,CAAC,EAAE;AACzC,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;;AAEA;AACA,EAAA,OAAO,IAAI,CAAA;AACb,CAAA;AAEA,SAASL,kBAAkBA,CAACD,CAAM,EAAE;EAClC,OAAOT,MAAM,CAACc,SAAS,CAACE,QAAQ,CAACC,IAAI,CAACR,CAAC,CAAC,KAAK,iBAAiB,CAAA;AAChE,CAAA;AAEO,SAASZ,YAAYA,CAACqB,KAAc,EAAE;AAC3C,EAAA,OAAOC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,IAAIA,KAAK,CAACtC,MAAM,KAAKoB,MAAM,CAACZ,IAAI,CAAC8B,KAAK,CAAC,CAACtC,MAAM,CAAA;AAC3E,CAAA;AAEO,SAASyC,SAASA,CAACC,CAAM,EAAEC,CAAM,EAAEC,OAAgB,GAAG,KAAK,EAAW;EAC3E,IAAIF,CAAC,KAAKC,CAAC,EAAE;AACX,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AAEA,EAAA,IAAI,OAAOD,CAAC,KAAK,OAAOC,CAAC,EAAE;AACzB,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;EAEA,IAAIzB,aAAa,CAACwB,CAAC,CAAC,IAAIxB,aAAa,CAACyB,CAAC,CAAC,EAAE;AACxC,IAAA,MAAME,KAAK,GAAGzB,MAAM,CAACZ,IAAI,CAACkC,CAAC,CAAC,CAAA;AAC5B,IAAA,MAAMI,KAAK,GAAG1B,MAAM,CAACZ,IAAI,CAACmC,CAAC,CAAC,CAAA;IAE5B,IAAI,CAACC,OAAO,IAAIC,KAAK,CAAC7C,MAAM,KAAK8C,KAAK,CAAC9C,MAAM,EAAE;AAC7C,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AAEA,IAAA,OAAO,CAAC8C,KAAK,CAACC,IAAI,CACfpC,GAAG,IAAK,EAAEA,GAAG,IAAI+B,CAAC,CAAC,IAAI,CAACD,SAAS,CAACC,CAAC,CAAC/B,GAAG,CAAC,EAAEgC,CAAC,CAAChC,GAAG,CAAC,EAAEiC,OAAO,CAC5D,CAAC,CAAA;AACH,GAAA;AAEA,EAAA,IAAIL,KAAK,CAACC,OAAO,CAACE,CAAC,CAAC,IAAIH,KAAK,CAACC,OAAO,CAACG,CAAC,CAAC,EAAE;IACxC,OAAO,CAACD,CAAC,CAACK,IAAI,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK,CAACR,SAAS,CAACO,IAAI,EAAEL,CAAC,CAACM,KAAK,CAAC,EAAEL,OAAO,CAAC,CAAC,CAAA;AACtE,GAAA;AAEA,EAAA,OAAO,KAAK,CAAA;AACd,CAAA;AAEO,SAASM,iBAAiBA,CAAoCC,EAAK,EAAK;AAC7E,EAAA,MAAMC,KAAK,GAAGC,gBAAK,CAACC,MAAM,CAACH,EAAE,CAAC,CAAA;EAC9BC,KAAK,CAACG,OAAO,GAAGJ,EAAE,CAAA;AAElB,EAAA,MAAMK,GAAG,GAAGH,gBAAK,CAACC,MAAM,CAAC,CAAC,GAAGG,IAAW,KAAKL,KAAK,CAACG,OAAO,CAAC,GAAGE,IAAI,CAAC,CAAC,CAAA;EACpE,OAAOD,GAAG,CAACD,OAAO,CAAA;AACpB,CAAA;AAEO,SAASG,OAAOA,CAAIC,IAAO,EAAEC,IAAO,EAAE;EAC3C,IAAIxC,MAAM,CAACyC,EAAE,CAACF,IAAI,EAAEC,IAAI,CAAC,EAAE;AACzB,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AAEA,EAAA,IACE,OAAOD,IAAI,KAAK,QAAQ,IACxBA,IAAI,KAAK,IAAI,IACb,OAAOC,IAAI,KAAK,QAAQ,IACxBA,IAAI,KAAK,IAAI,EACb;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEA,EAAA,MAAME,KAAK,GAAG1C,MAAM,CAACZ,IAAI,CAACmD,IAAI,CAAC,CAAA;AAC/B,EAAA,IAAIG,KAAK,CAAC9D,MAAM,KAAKoB,MAAM,CAACZ,IAAI,CAACoD,IAAI,CAAC,CAAC5D,MAAM,EAAE;AAC7C,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEA,EAAA,KAAK,IAAI0B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoC,KAAK,CAAC9D,MAAM,EAAE0B,CAAC,EAAE,EAAE;AACrC,IAAA,IACE,CAACN,MAAM,CAACc,SAAS,CAACC,cAAc,CAACE,IAAI,CAACuB,IAAI,EAAEE,KAAK,CAACpC,CAAC,CAAW,CAAC,IAC/D,CAACN,MAAM,CAACyC,EAAE,CAACF,IAAI,CAACG,KAAK,CAACpC,CAAC,CAAC,CAAY,EAAEkC,IAAI,CAACE,KAAK,CAACpC,CAAC,CAAC,CAAY,CAAC,EAChE;AACA,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AACF,GAAA;AACA,EAAA,OAAO,IAAI,CAAA;AACb,CAAA;AAkBO,SAASqC,eAAeA,CAM7BC,IAEC,EACU;AACX,EAAA,OAAOC,gBAAQ,CAAC;AACd,IAAA,GAAID,IAAY;AAChBE,IAAAA,MAAM,EAAGC,KAAiB,IACxBH,IAAI,EAAEE,MAAM,GACRF,IAAI,CAACE,MAAM,CAACC,KAAK,CAACC,OAAwB,CAAC,GAC3CD,KAAK,CAACC,OAAAA;AACd,GAAC,CAAC,CAAA;AACJ,CAAA;AAEaC,MAAAA,eAAe,GAC1B,OAAOC,MAAM,KAAK,WAAW,GAAGjB,gBAAK,CAACgB,eAAe,GAAGhB,gBAAK,CAACkB,UAAS;AAElE,SAASC,UAAUA,CAACC,UAAkB,EAAE;EAC7C,OAAOA,UAAU,CACdC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AAAC,GACvBA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;AAAC,GACrBA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1B;;;;;;;;;;;;;;;;"}
|