@tanstack/solid-router 1.168.4 → 1.168.6

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.
@@ -126,7 +126,7 @@ var Match = (props) => {
126
126
  }
127
127
  });
128
128
  }
129
- }), (0, solid_js_web.memo)(() => (0, solid_js_web.memo)(() => currentMatchState().parentRouteId === _tanstack_router_core.rootRouteId)() ? [(0, solid_js_web.createComponent)(OnRendered, {}), (0, solid_js_web.createComponent)(require_scroll_restoration.ScrollRestoration, {})] : null)];
129
+ }), (0, solid_js_web.memo)(() => (0, solid_js_web.memo)(() => currentMatchState().parentRouteId === _tanstack_router_core.rootRouteId)() ? [(0, solid_js_web.createComponent)(OnRendered, {}), (0, solid_js_web.memo)(() => (0, solid_js_web.memo)(() => !!(router.options.scrollRestoration && (_tanstack_router_core_isServer.isServer ?? router.isServer)))() ? (0, solid_js_web.createComponent)(require_scroll_restoration.ScrollRestoration, {}) : null)] : null)];
130
130
  } });
131
131
  }
132
132
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Match.cjs","names":["Solid","createControlledPromise","getLocationChangeInfo","invariant","isNotFound","isRedirect","rootRouteId","isServer","Dynamic","CatchBoundary","ErrorComponent","useRouter","CatchNotFound","nearestMatchContext","SafeFragment","renderRouteNotFound","ScrollRestoration","AnyRoute","RootRouteOptions","Match","props","matchId","router","match","createMemo","id","undefined","stores","activeMatchStoresById","get","state","rawMatchState","currentMatch","routeId","parentRouteId","routesById","parentRoute","ssr","_displayPending","hasPendingMatch","currentRouteId","Boolean","pendingRouteIds","nearestMatch","hasPending","_$createComponent","Show","when","children","currentMatchState","route","resolvePendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","ResolvedSuspenseBoundary","Suspense","ResolvedCatchBoundary","ResolvedNotFoundBoundary","ShellComponent","shellComponent","Provider","value","fallback","_$memo","getResetKey","loadedAt","error","Error","process","env","NODE_ENV","console","warn","_$mergeProps","Switch","MatchInner","OnRendered","location","resolvedLocation","__TSR_key","createEffect","on","emit","type","useContext","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","status","_forcePending","componentKey","out","Comp","defaultComponent","Outlet","keyedOut","keyed","_key","_","displayPendingResult","createResource","getMatch","_nonReactive","displayPendingPromise","minPendingResult","minPendingPromise","pendingMinMs","defaultPendingMinMs","routerMatch","setTimeout","resolve","loaderResult","Promise","r","loadPromise","FallbackComponent","_routeId","RouteErrorComponent","info","componentStack","nearestParentMatch","parentMatch","parentGlobalNotFound","globalNotFound","childMatchId","childMatchIdByRouteId","childMatchStatus","shouldShowNotFound","resolvedRoute","childMatchIdAccessor","currentMatchId"],"sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n invariant,\n isNotFound,\n isRedirect,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound } from './not-found'\nimport { nearestMatchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { renderRouteNotFound } from './renderRouteNotFound'\nimport { ScrollRestoration } from './scroll-restoration'\nimport type { AnyRoute, RootRouteOptions } from '@tanstack/router-core'\n\nexport const Match = (props: { matchId: string }) => {\n const router = useRouter()\n\n const match = Solid.createMemo(() => {\n const id = props.matchId\n if (!id) return undefined\n return router.stores.activeMatchStoresById.get(id)?.state\n })\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n const parentRouteId = (router.routesById[routeId] as AnyRoute)?.parentRoute\n ?.id\n\n return {\n matchId: currentMatch.id,\n routeId,\n ssr: currentMatch.ssr,\n _displayPending: currentMatch._displayPending,\n parentRouteId: parentRouteId as string | undefined,\n }\n })\n\n const hasPendingMatch = Solid.createMemo(() => {\n const currentRouteId = rawMatchState()?.routeId\n return currentRouteId\n ? Boolean(router.stores.pendingRouteIds.state[currentRouteId])\n : false\n })\n const nearestMatch = {\n matchId: () => rawMatchState()?.matchId,\n routeId: () => rawMatchState()?.routeId,\n match,\n hasPending: hasPendingMatch,\n }\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route: () => AnyRoute = () =>\n router.routesById[currentMatchState().routeId]\n\n const resolvePendingComponent = () =>\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const routeErrorComponent = () =>\n route().options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = () =>\n route().options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = () =>\n route().isRoot\n ? // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component\n (route().options.notFoundComponent ??\n router.options.notFoundRoute?.options.component)\n : route().options.notFoundComponent\n\n const resolvedNoSsr =\n currentMatchState().ssr === false ||\n currentMatchState().ssr === 'data-only'\n\n const ResolvedSuspenseBoundary = () => Solid.Suspense\n\n const ResolvedCatchBoundary = () =>\n routeErrorComponent() ? CatchBoundary : SafeFragment\n\n const ResolvedNotFoundBoundary = () =>\n routeNotFoundComponent() ? CatchNotFound : SafeFragment\n\n const ShellComponent = route().isRoot\n ? ((route().options as RootRouteOptions).shellComponent ??\n SafeFragment)\n : SafeFragment\n\n return (\n <ShellComponent>\n <nearestMatchContext.Provider value={nearestMatch}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={\n // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch\n (isServer ?? router.isServer) && resolvedNoSsr ? undefined : (\n <Dynamic component={resolvePendingComponent()} />\n )\n }\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => router.stores.loadedAt.state}\n errorComponent={routeErrorComponent() || ErrorComponent}\n onCatch={(error: Error) => {\n // Forward not found errors (we don't want to show the error component for these)\n if (isNotFound(error)) throw error\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: Error in route match: ${currentMatchState().routeId}`,\n )\n }\n routeOnCatch()?.(error)\n }}\n >\n <Dynamic\n component={ResolvedNotFoundBoundary()}\n fallback={(error: any) => {\n // If the current not found handler doesn't exist or it has a\n // route ID which doesn't match the current route, rethrow the error\n if (\n !routeNotFoundComponent() ||\n (error.routeId &&\n error.routeId !== currentMatchState().routeId) ||\n (!error.routeId && !route().isRoot)\n )\n throw error\n\n return (\n <Dynamic\n component={routeNotFoundComponent()}\n {...error}\n />\n )\n }}\n >\n <Solid.Switch>\n <Solid.Match when={resolvedNoSsr}>\n <Solid.Show\n when={!(isServer ?? router.isServer)}\n fallback={\n <Dynamic component={resolvePendingComponent()} />\n }\n >\n <MatchInner />\n </Solid.Show>\n </Solid.Match>\n <Solid.Match when={!resolvedNoSsr}>\n <MatchInner />\n </Solid.Match>\n </Solid.Switch>\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </nearestMatchContext.Provider>\n\n {currentMatchState().parentRouteId === rootRouteId ? (\n <>\n <OnRendered />\n <ScrollRestoration />\n </>\n ) : null}\n </ShellComponent>\n )\n }}\n </Solid.Show>\n )\n}\n\n// On Rendered can't happen above the root layout because it actually\n// renders a dummy dom element to track the rendered state of the app.\n// We render a script tag with a key that changes based on the current\n// location state.__TSR_key. Also, because it's below the root layout, it\n// allows us to fire onRendered events even after a hydration mismatch\n// error that occurred above the root layout (like bad head/link tags,\n// which is common).\nfunction OnRendered() {\n const router = useRouter()\n\n const location = Solid.createMemo(\n () => router.stores.resolvedLocation.state?.state.__TSR_key,\n )\n Solid.createEffect(\n Solid.on([location], () => {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(\n router.stores.location.state,\n router.stores.resolvedLocation.state,\n ),\n })\n }),\n )\n return null\n}\n\nexport const MatchInner = (): any => {\n const router = useRouter()\n const match = Solid.useContext(nearestMatchContext).match\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n\n const remountFn =\n (router.routesById[routeId] as AnyRoute).options.remountDeps ??\n router.options.defaultRemountDeps\n const remountDeps = remountFn?.({\n routeId,\n loaderDeps: currentMatch.loaderDeps,\n params: currentMatch._strictParams,\n search: currentMatch._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n\n return {\n key,\n routeId,\n match: {\n id: currentMatch.id,\n status: currentMatch.status,\n error: currentMatch.error,\n _forcePending: currentMatch._forcePending ?? false,\n _displayPending: currentMatch._displayPending ?? false,\n },\n }\n })\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route = () => router.routesById[currentMatchState().routeId]!\n\n const currentMatch = () => currentMatchState().match\n\n const componentKey = () =>\n currentMatchState().key ?? currentMatchState().match.id\n\n const out = () => {\n const Comp =\n route().options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp />\n }\n return <Outlet />\n }\n\n const keyedOut = () => (\n <Solid.Show when={componentKey()} keyed>\n {(_key) => out()}\n </Solid.Show>\n )\n\n return (\n <Solid.Switch>\n <Solid.Match when={currentMatch()._displayPending}>\n {(_) => {\n const [displayPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .displayPendingPromise,\n )\n\n return <>{displayPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch()._forcePending}>\n {(_) => {\n const [minPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .minPendingPromise,\n )\n\n return <>{minPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'pending'}>\n {(_) => {\n const pendingMinMs =\n route().options.pendingMinMs ??\n router.options.defaultPendingMinMs\n\n if (pendingMinMs) {\n const routerMatch = router.getMatch(currentMatch().id)\n if (\n routerMatch &&\n !routerMatch._nonReactive.minPendingPromise\n ) {\n // Create a promise that will resolve after the minPendingMs\n if (!(isServer ?? router.isServer)) {\n const minPendingPromise = createControlledPromise<void>()\n\n routerMatch._nonReactive.minPendingPromise =\n minPendingPromise\n\n setTimeout(() => {\n minPendingPromise.resolve()\n // We've handled the minPendingPromise, so we can delete it\n routerMatch._nonReactive.minPendingPromise = undefined\n }, pendingMinMs)\n }\n }\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch().id)?._nonReactive\n .loadPromise\n })\n\n const FallbackComponent =\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n return (\n <>\n {FallbackComponent && pendingMinMs > 0 ? (\n <Dynamic component={FallbackComponent} />\n ) : null}\n {loaderResult()}\n </>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'notFound'}>\n {(_) => {\n if (!isNotFound(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a notFound error',\n )\n }\n\n invariant()\n }\n\n // Use Show with keyed to ensure re-render when routeId changes\n return (\n <Solid.Show when={currentMatchState().routeId} keyed>\n {(_routeId) =>\n renderRouteNotFound(router, route(), currentMatch().error)\n }\n </Solid.Show>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'redirected'}>\n {(_) => {\n if (!isRedirect(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a redirect error',\n )\n }\n\n invariant()\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch().id)?._nonReactive\n .loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'error'}>\n {(_) => {\n if (isServer ?? router.isServer) {\n const RouteErrorComponent =\n (route().options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n\n return (\n <RouteErrorComponent\n error={currentMatch().error}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw currentMatch().error\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'success'}>\n {keyedOut()}\n </Solid.Match>\n </Solid.Switch>\n )\n }}\n </Solid.Show>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const nearestParentMatch = Solid.useContext(nearestMatchContext)\n const parentMatch = nearestParentMatch.match\n const routeId = nearestParentMatch.routeId\n const route = Solid.createMemo(() =>\n routeId() ? router.routesById[routeId()!] : undefined,\n )\n\n const parentGlobalNotFound = Solid.createMemo(\n () => parentMatch()?.globalNotFound ?? false,\n )\n\n const childMatchId = Solid.createMemo(() => {\n const currentRouteId = routeId()\n return currentRouteId\n ? router.stores.childMatchIdByRouteId.state[currentRouteId]\n : undefined\n })\n\n const childMatchStatus = Solid.createMemo(() => {\n const id = childMatchId()\n if (!id) return undefined\n return router.stores.activeMatchStoresById.get(id)?.state.status\n })\n\n // Only show not-found if we're not in a redirected state\n const shouldShowNotFound = () =>\n childMatchStatus() !== 'redirected' && parentGlobalNotFound()\n\n return (\n <Solid.Show\n when={!shouldShowNotFound() && childMatchId()}\n fallback={\n <Solid.Show when={shouldShowNotFound() && route()}>\n {(resolvedRoute) =>\n renderRouteNotFound(router, resolvedRoute(), undefined)\n }\n </Solid.Show>\n }\n >\n {(childMatchIdAccessor) => {\n const currentMatchId = Solid.createMemo(() => childMatchIdAccessor())\n\n return (\n <Solid.Show\n when={routeId() === rootRouteId}\n fallback={<Match matchId={currentMatchId()} />}\n >\n <Solid.Suspense\n fallback={\n <Dynamic component={router.options.defaultPendingComponent} />\n }\n >\n <Match matchId={currentMatchId()} />\n </Solid.Suspense>\n </Solid.Show>\n )\n }}\n </Solid.Show>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Match.cjs","names":["Solid","createControlledPromise","getLocationChangeInfo","invariant","isNotFound","isRedirect","rootRouteId","isServer","Dynamic","CatchBoundary","ErrorComponent","useRouter","CatchNotFound","nearestMatchContext","SafeFragment","renderRouteNotFound","ScrollRestoration","AnyRoute","RootRouteOptions","Match","props","matchId","router","match","createMemo","id","undefined","stores","activeMatchStoresById","get","state","rawMatchState","currentMatch","routeId","parentRouteId","routesById","parentRoute","ssr","_displayPending","hasPendingMatch","currentRouteId","Boolean","pendingRouteIds","nearestMatch","hasPending","_$createComponent","Show","when","children","currentMatchState","route","resolvePendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","ResolvedSuspenseBoundary","Suspense","ResolvedCatchBoundary","ResolvedNotFoundBoundary","ShellComponent","shellComponent","Provider","value","fallback","_$memo","getResetKey","loadedAt","error","Error","process","env","NODE_ENV","console","warn","_$mergeProps","Switch","MatchInner","OnRendered","scrollRestoration","location","resolvedLocation","__TSR_key","createEffect","on","emit","type","useContext","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","status","_forcePending","componentKey","out","Comp","defaultComponent","Outlet","keyedOut","keyed","_key","_","displayPendingResult","createResource","getMatch","_nonReactive","displayPendingPromise","minPendingResult","minPendingPromise","pendingMinMs","defaultPendingMinMs","routerMatch","setTimeout","resolve","loaderResult","Promise","r","loadPromise","FallbackComponent","_routeId","RouteErrorComponent","info","componentStack","nearestParentMatch","parentMatch","parentGlobalNotFound","globalNotFound","childMatchId","childMatchIdByRouteId","childMatchStatus","shouldShowNotFound","resolvedRoute","childMatchIdAccessor","currentMatchId"],"sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n invariant,\n isNotFound,\n isRedirect,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound } from './not-found'\nimport { nearestMatchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { renderRouteNotFound } from './renderRouteNotFound'\nimport { ScrollRestoration } from './scroll-restoration'\nimport type { AnyRoute, RootRouteOptions } from '@tanstack/router-core'\n\nexport const Match = (props: { matchId: string }) => {\n const router = useRouter()\n\n const match = Solid.createMemo(() => {\n const id = props.matchId\n if (!id) return undefined\n return router.stores.activeMatchStoresById.get(id)?.state\n })\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n const parentRouteId = (router.routesById[routeId] as AnyRoute)?.parentRoute\n ?.id\n\n return {\n matchId: currentMatch.id,\n routeId,\n ssr: currentMatch.ssr,\n _displayPending: currentMatch._displayPending,\n parentRouteId: parentRouteId as string | undefined,\n }\n })\n\n const hasPendingMatch = Solid.createMemo(() => {\n const currentRouteId = rawMatchState()?.routeId\n return currentRouteId\n ? Boolean(router.stores.pendingRouteIds.state[currentRouteId])\n : false\n })\n const nearestMatch = {\n matchId: () => rawMatchState()?.matchId,\n routeId: () => rawMatchState()?.routeId,\n match,\n hasPending: hasPendingMatch,\n }\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route: () => AnyRoute = () =>\n router.routesById[currentMatchState().routeId]\n\n const resolvePendingComponent = () =>\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const routeErrorComponent = () =>\n route().options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = () =>\n route().options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = () =>\n route().isRoot\n ? // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component\n (route().options.notFoundComponent ??\n router.options.notFoundRoute?.options.component)\n : route().options.notFoundComponent\n\n const resolvedNoSsr =\n currentMatchState().ssr === false ||\n currentMatchState().ssr === 'data-only'\n\n const ResolvedSuspenseBoundary = () => Solid.Suspense\n\n const ResolvedCatchBoundary = () =>\n routeErrorComponent() ? CatchBoundary : SafeFragment\n\n const ResolvedNotFoundBoundary = () =>\n routeNotFoundComponent() ? CatchNotFound : SafeFragment\n\n const ShellComponent = route().isRoot\n ? ((route().options as RootRouteOptions).shellComponent ??\n SafeFragment)\n : SafeFragment\n\n return (\n <ShellComponent>\n <nearestMatchContext.Provider value={nearestMatch}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={\n // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch\n (isServer ?? router.isServer) && resolvedNoSsr ? undefined : (\n <Dynamic component={resolvePendingComponent()} />\n )\n }\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => router.stores.loadedAt.state}\n errorComponent={routeErrorComponent() || ErrorComponent}\n onCatch={(error: Error) => {\n // Forward not found errors (we don't want to show the error component for these)\n if (isNotFound(error)) throw error\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: Error in route match: ${currentMatchState().routeId}`,\n )\n }\n routeOnCatch()?.(error)\n }}\n >\n <Dynamic\n component={ResolvedNotFoundBoundary()}\n fallback={(error: any) => {\n // If the current not found handler doesn't exist or it has a\n // route ID which doesn't match the current route, rethrow the error\n if (\n !routeNotFoundComponent() ||\n (error.routeId &&\n error.routeId !== currentMatchState().routeId) ||\n (!error.routeId && !route().isRoot)\n )\n throw error\n\n return (\n <Dynamic\n component={routeNotFoundComponent()}\n {...error}\n />\n )\n }}\n >\n <Solid.Switch>\n <Solid.Match when={resolvedNoSsr}>\n <Solid.Show\n when={!(isServer ?? router.isServer)}\n fallback={\n <Dynamic component={resolvePendingComponent()} />\n }\n >\n <MatchInner />\n </Solid.Show>\n </Solid.Match>\n <Solid.Match when={!resolvedNoSsr}>\n <MatchInner />\n </Solid.Match>\n </Solid.Switch>\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </nearestMatchContext.Provider>\n\n {currentMatchState().parentRouteId === rootRouteId ? (\n <>\n <OnRendered />\n {router.options.scrollRestoration &&\n (isServer ?? router.isServer) ? (\n <ScrollRestoration />\n ) : null}\n </>\n ) : null}\n </ShellComponent>\n )\n }}\n </Solid.Show>\n )\n}\n\n// On Rendered can't happen above the root layout because it needs to run\n// after the app has committed below the root layout. Keeping it here lets us\n// fire onRendered even after a hydration mismatch above the root layout\n// (like bad head/link tags, which is common).\nfunction OnRendered() {\n const router = useRouter()\n\n const location = Solid.createMemo(\n () => router.stores.resolvedLocation.state?.state.__TSR_key,\n )\n Solid.createEffect(\n Solid.on([location], () => {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(\n router.stores.location.state,\n router.stores.resolvedLocation.state,\n ),\n })\n }),\n )\n return null\n}\n\nexport const MatchInner = (): any => {\n const router = useRouter()\n const match = Solid.useContext(nearestMatchContext).match\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n\n const remountFn =\n (router.routesById[routeId] as AnyRoute).options.remountDeps ??\n router.options.defaultRemountDeps\n const remountDeps = remountFn?.({\n routeId,\n loaderDeps: currentMatch.loaderDeps,\n params: currentMatch._strictParams,\n search: currentMatch._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n\n return {\n key,\n routeId,\n match: {\n id: currentMatch.id,\n status: currentMatch.status,\n error: currentMatch.error,\n _forcePending: currentMatch._forcePending ?? false,\n _displayPending: currentMatch._displayPending ?? false,\n },\n }\n })\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route = () => router.routesById[currentMatchState().routeId]!\n\n const currentMatch = () => currentMatchState().match\n\n const componentKey = () =>\n currentMatchState().key ?? currentMatchState().match.id\n\n const out = () => {\n const Comp =\n route().options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp />\n }\n return <Outlet />\n }\n\n const keyedOut = () => (\n <Solid.Show when={componentKey()} keyed>\n {(_key) => out()}\n </Solid.Show>\n )\n\n return (\n <Solid.Switch>\n <Solid.Match when={currentMatch()._displayPending}>\n {(_) => {\n const [displayPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .displayPendingPromise,\n )\n\n return <>{displayPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch()._forcePending}>\n {(_) => {\n const [minPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .minPendingPromise,\n )\n\n return <>{minPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'pending'}>\n {(_) => {\n const pendingMinMs =\n route().options.pendingMinMs ??\n router.options.defaultPendingMinMs\n\n if (pendingMinMs) {\n const routerMatch = router.getMatch(currentMatch().id)\n if (\n routerMatch &&\n !routerMatch._nonReactive.minPendingPromise\n ) {\n // Create a promise that will resolve after the minPendingMs\n if (!(isServer ?? router.isServer)) {\n const minPendingPromise = createControlledPromise<void>()\n\n routerMatch._nonReactive.minPendingPromise =\n minPendingPromise\n\n setTimeout(() => {\n minPendingPromise.resolve()\n // We've handled the minPendingPromise, so we can delete it\n routerMatch._nonReactive.minPendingPromise = undefined\n }, pendingMinMs)\n }\n }\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch().id)?._nonReactive\n .loadPromise\n })\n\n const FallbackComponent =\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n return (\n <>\n {FallbackComponent && pendingMinMs > 0 ? (\n <Dynamic component={FallbackComponent} />\n ) : null}\n {loaderResult()}\n </>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'notFound'}>\n {(_) => {\n if (!isNotFound(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a notFound error',\n )\n }\n\n invariant()\n }\n\n // Use Show with keyed to ensure re-render when routeId changes\n return (\n <Solid.Show when={currentMatchState().routeId} keyed>\n {(_routeId) =>\n renderRouteNotFound(router, route(), currentMatch().error)\n }\n </Solid.Show>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'redirected'}>\n {(_) => {\n if (!isRedirect(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a redirect error',\n )\n }\n\n invariant()\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch().id)?._nonReactive\n .loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'error'}>\n {(_) => {\n if (isServer ?? router.isServer) {\n const RouteErrorComponent =\n (route().options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n\n return (\n <RouteErrorComponent\n error={currentMatch().error}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw currentMatch().error\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'success'}>\n {keyedOut()}\n </Solid.Match>\n </Solid.Switch>\n )\n }}\n </Solid.Show>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const nearestParentMatch = Solid.useContext(nearestMatchContext)\n const parentMatch = nearestParentMatch.match\n const routeId = nearestParentMatch.routeId\n const route = Solid.createMemo(() =>\n routeId() ? router.routesById[routeId()!] : undefined,\n )\n\n const parentGlobalNotFound = Solid.createMemo(\n () => parentMatch()?.globalNotFound ?? false,\n )\n\n const childMatchId = Solid.createMemo(() => {\n const currentRouteId = routeId()\n return currentRouteId\n ? router.stores.childMatchIdByRouteId.state[currentRouteId]\n : undefined\n })\n\n const childMatchStatus = Solid.createMemo(() => {\n const id = childMatchId()\n if (!id) return undefined\n return router.stores.activeMatchStoresById.get(id)?.state.status\n })\n\n // Only show not-found if we're not in a redirected state\n const shouldShowNotFound = () =>\n childMatchStatus() !== 'redirected' && parentGlobalNotFound()\n\n return (\n <Solid.Show\n when={!shouldShowNotFound() && childMatchId()}\n fallback={\n <Solid.Show when={shouldShowNotFound() && route()}>\n {(resolvedRoute) =>\n renderRouteNotFound(router, resolvedRoute(), undefined)\n }\n </Solid.Show>\n }\n >\n {(childMatchIdAccessor) => {\n const currentMatchId = Solid.createMemo(() => childMatchIdAccessor())\n\n return (\n <Solid.Show\n when={routeId() === rootRouteId}\n fallback={<Match matchId={currentMatchId()} />}\n >\n <Solid.Suspense\n fallback={\n <Dynamic component={router.options.defaultPendingComponent} />\n }\n >\n <Match matchId={currentMatchId()} />\n </Solid.Suspense>\n </Solid.Show>\n )\n }}\n </Solid.Show>\n )\n}\n"],"mappings":"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"}
@@ -15,17 +15,7 @@ function ScrollRestoration(_props) {
15
15
  }
16
16
  function useElementScrollRestoration(options) {
17
17
  useScrollRestoration();
18
- const router = require_useRouter.useRouter();
19
- const getKey = options.getKey || _tanstack_router_core.defaultGetScrollRestorationKey;
20
- let elementSelector = "";
21
- if (options.id) elementSelector = `[data-scroll-restoration-id="${options.id}"]`;
22
- else {
23
- const element = options.getElement?.();
24
- if (!element) return;
25
- elementSelector = element instanceof Window ? "window" : (0, _tanstack_router_core.getCssSelector)(element);
26
- }
27
- const restoreKey = getKey(router.latestLocation);
28
- return (_tanstack_router_core.scrollRestorationCache?.state[restoreKey])?.[elementSelector];
18
+ return (0, _tanstack_router_core.getElementScrollRestorationEntry)(require_useRouter.useRouter(), options);
29
19
  }
30
20
  //#endregion
31
21
  exports.ScrollRestoration = ScrollRestoration;
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollRestoration.cjs","names":["defaultGetScrollRestorationKey","getCssSelector","scrollRestorationCache","setupScrollRestoration","useRouter","ParsedLocation","ScrollRestorationEntry","ScrollRestorationOptions","useScrollRestoration","router","ScrollRestoration","_props","process","env","NODE_ENV","console","warn","useElementScrollRestoration","options","id","getElement","Window","Element","getKey","location","elementSelector","element","restoreKey","latestLocation","byKey","state"],"sources":["../../src/ScrollRestoration.tsx"],"sourcesContent":["import {\n defaultGetScrollRestorationKey,\n getCssSelector,\n scrollRestorationCache,\n setupScrollRestoration,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n ParsedLocation,\n ScrollRestorationEntry,\n ScrollRestorationOptions,\n} from '@tanstack/router-core'\n\nfunction useScrollRestoration() {\n const router = useRouter()\n setupScrollRestoration(router, true)\n}\n\n/**\n * @deprecated use createRouter's `scrollRestoration` option instead\n */\nexport function ScrollRestoration(_props: ScrollRestorationOptions) {\n useScrollRestoration()\n\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n \"The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.\",\n )\n }\n\n return null\n}\n\nexport function useElementScrollRestoration(\n options: (\n | {\n id: string\n getElement?: () => Window | Element | undefined | null\n }\n | {\n id?: string\n getElement: () => Window | Element | undefined | null\n }\n ) & {\n getKey?: (location: ParsedLocation) => string\n },\n): ScrollRestorationEntry | undefined {\n useScrollRestoration()\n\n const router = useRouter()\n const getKey = options.getKey || defaultGetScrollRestorationKey\n\n let elementSelector = ''\n\n if (options.id) {\n elementSelector = `[data-scroll-restoration-id=\"${options.id}\"]`\n } else {\n const element = options.getElement?.()\n if (!element) {\n return\n }\n elementSelector =\n element instanceof Window ? 'window' : getCssSelector(element)\n }\n\n const restoreKey = getKey(router.latestLocation)\n const byKey = scrollRestorationCache?.state[restoreKey]\n return byKey?.[elementSelector]\n}\n"],"mappings":";;;;AAaA,SAASQ,uBAAuB;AAE9BL,EAAAA,GAAAA,sBAAAA,wBADeC,kBAAAA,WAAW,EACK,KAAK;;;;;AAMtC,SAAgBM,kBAAkBC,QAAkC;AAClEH,uBAAsB;AAEtB,KAAA,QAAA,IAAA,aAA6B,cAC3BO,SAAQC,KACN,wGACD;AAGH,QAAO;;AAGT,SAAgBC,4BACdC,SAYoC;AACpCV,uBAAsB;CAEtB,MAAMC,SAASL,kBAAAA,WAAW;CAC1B,MAAMmB,SAASL,QAAQK,UAAUvB,sBAAAA;CAEjC,IAAIyB,kBAAkB;AAEtB,KAAIP,QAAQC,GACVM,mBAAkB,gCAAgCP,QAAQC,GAAE;MACvD;EACL,MAAMO,UAAUR,QAAQE,cAAc;AACtC,MAAI,CAACM,QACH;AAEFD,oBACEC,mBAAmBL,SAAS,YAAA,GAAA,sBAAA,gBAA0BK,QAAQ;;CAGlE,MAAMC,aAAaJ,OAAOd,OAAOmB,eAAe;AAEhD,SADc1B,sBAAAA,wBAAwB4B,MAAMH,eAC7BF"}
1
+ {"version":3,"file":"ScrollRestoration.cjs","names":["getElementScrollRestorationEntry","setupScrollRestoration","useRouter","ParsedLocation","ScrollRestorationEntry","ScrollRestorationOptions","useScrollRestoration","router","ScrollRestoration","_props","process","env","NODE_ENV","console","warn","useElementScrollRestoration","options","id","getElement","Window","Element","getKey","location"],"sources":["../../src/ScrollRestoration.tsx"],"sourcesContent":["import {\n getElementScrollRestorationEntry,\n setupScrollRestoration,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n ParsedLocation,\n ScrollRestorationEntry,\n ScrollRestorationOptions,\n} from '@tanstack/router-core'\n\nfunction useScrollRestoration() {\n const router = useRouter()\n setupScrollRestoration(router, true)\n}\n\n/**\n * @deprecated use createRouter's `scrollRestoration` option instead\n */\nexport function ScrollRestoration(_props: ScrollRestorationOptions) {\n useScrollRestoration()\n\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n \"The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.\",\n )\n }\n\n return null\n}\n\nexport function useElementScrollRestoration(\n options: (\n | {\n id: string\n getElement?: () => Window | Element | undefined | null\n }\n | {\n id?: string\n getElement: () => Window | Element | undefined | null\n }\n ) & {\n getKey?: (location: ParsedLocation) => string\n },\n): ScrollRestorationEntry | undefined {\n useScrollRestoration()\n\n return getElementScrollRestorationEntry(useRouter(), options)\n}\n"],"mappings":";;;;AAWA,SAASM,uBAAuB;AAE9BL,EAAAA,GAAAA,sBAAAA,wBADeC,kBAAAA,WAAW,EACK,KAAK;;;;;AAMtC,SAAgBM,kBAAkBC,QAAkC;AAClEH,uBAAsB;AAEtB,KAAA,QAAA,IAAA,aAA6B,cAC3BO,SAAQC,KACN,wGACD;AAGH,QAAO;;AAGT,SAAgBC,4BACdC,SAYoC;AACpCV,uBAAsB;AAEtB,SAAA,GAAA,sBAAA,kCAAwCJ,kBAAAA,WAAW,EAAEc,QAAQ"}
@@ -1,26 +1,13 @@
1
1
  require("./_virtual/_rolldown/runtime.cjs");
2
2
  const require_useRouter = require("./useRouter.cjs");
3
3
  const require_ScriptOnce = require("./ScriptOnce.cjs");
4
- let _tanstack_router_core = require("@tanstack/router-core");
5
4
  let solid_js_web = require("solid-js/web");
6
- let _tanstack_router_core_isServer = require("@tanstack/router-core/isServer");
5
+ let _tanstack_router_core_scroll_restoration_script = require("@tanstack/router-core/scroll-restoration-script");
7
6
  //#region src/scroll-restoration.tsx
8
7
  function ScrollRestoration() {
9
- const router = require_useRouter.useRouter();
10
- if (!router.isScrollRestoring || !(_tanstack_router_core_isServer.isServer ?? router.isServer)) return null;
11
- if (typeof router.options.scrollRestoration === "function") {
12
- if (!router.options.scrollRestoration({ location: router.latestLocation })) return null;
13
- }
14
- const userKey = (router.options.getScrollRestorationKey || _tanstack_router_core.defaultGetScrollRestorationKey)(router.latestLocation);
15
- const resolvedKey = userKey !== (0, _tanstack_router_core.defaultGetScrollRestorationKey)(router.latestLocation) ? userKey : void 0;
16
- const restoreScrollOptions = {
17
- storageKey: _tanstack_router_core.storageKey,
18
- shouldScrollRestoration: true
19
- };
20
- if (resolvedKey) restoreScrollOptions.key = resolvedKey;
21
- return (0, solid_js_web.createComponent)(require_ScriptOnce.ScriptOnce, { get children() {
22
- return `(${_tanstack_router_core.restoreScroll.toString()})(${(0, _tanstack_router_core.escapeHtml)(JSON.stringify(restoreScrollOptions))})`;
23
- } });
8
+ const script = (0, _tanstack_router_core_scroll_restoration_script.getScrollRestorationScriptForRouter)(require_useRouter.useRouter());
9
+ if (!script) return null;
10
+ return (0, solid_js_web.createComponent)(require_ScriptOnce.ScriptOnce, { children: script });
24
11
  }
25
12
  //#endregion
26
13
  exports.ScrollRestoration = ScrollRestoration;
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-restoration.cjs","names":["defaultGetScrollRestorationKey","escapeHtml","restoreScroll","storageKey","isServer","useRouter","ScriptOnce","ScrollRestoration","router","isScrollRestoring","options","scrollRestoration","shouldRestore","location","latestLocation","getKey","getScrollRestorationKey","userKey","resolvedKey","undefined","restoreScrollOptions","Parameters","shouldScrollRestoration","key","_$createComponent","children","toString","JSON","stringify"],"sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import {\n defaultGetScrollRestorationKey,\n escapeHtml,\n restoreScroll,\n storageKey,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\nimport { ScriptOnce } from './ScriptOnce'\n\nexport function ScrollRestoration() {\n const router = useRouter()\n if (!router.isScrollRestoring || !(isServer ?? router.isServer)) {\n return null\n }\n if (typeof router.options.scrollRestoration === 'function') {\n const shouldRestore = router.options.scrollRestoration({\n location: router.latestLocation,\n })\n if (!shouldRestore) {\n return null\n }\n }\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n const userKey = getKey(router.latestLocation)\n const resolvedKey =\n userKey !== defaultGetScrollRestorationKey(router.latestLocation)\n ? userKey\n : undefined\n\n const restoreScrollOptions: Parameters<typeof restoreScroll>[0] = {\n storageKey,\n shouldScrollRestoration: true,\n }\n if (resolvedKey) {\n restoreScrollOptions.key = resolvedKey\n }\n\n return (\n <ScriptOnce\n children={`(${restoreScroll.toString()})(${escapeHtml(JSON.stringify(restoreScrollOptions))})`}\n />\n )\n}\n"],"mappings":";;;;;;;AAUA,SAAgBO,oBAAoB;CAClC,MAAMC,SAASH,kBAAAA,WAAW;AAC1B,KAAI,CAACG,OAAOC,qBAAqB,EAAEL,+BAAAA,YAAYI,OAAOJ,UACpD,QAAO;AAET,KAAI,OAAOI,OAAOE,QAAQC,sBAAsB;MAI1C,CAHkBH,OAAOE,QAAQC,kBAAkB,EACrDE,UAAUL,OAAOM,gBAClB,CAAC,CAEA,QAAO;;CAKX,MAAMG,WADJT,OAAOE,QAAQM,2BAA2BhB,sBAAAA,gCACrBQ,OAAOM,eAAe;CAC7C,MAAMI,cACJD,aAAAA,GAAAA,sBAAAA,gCAA2CT,OAAOM,eAAe,GAC7DG,UACAE,KAAAA;CAEN,MAAMC,uBAA4D;EAChEjB,YAAAA,sBAAAA;EACAmB,yBAAyB;EAC1B;AACD,KAAIJ,YACFE,sBAAqBG,MAAML;AAG7B,SAAA,GAAA,aAAA,iBACGZ,mBAAAA,YAAU,EAAA,IACTmB,WAAQ;AAAA,SAAE,IAAIvB,sBAAAA,cAAcwB,UAAU,CAAA,KAAA,GAAA,sBAAA,YAAgBC,KAAKC,UAAUR,qBAAqB,CAAC,CAAA;IAAG,CAAA"}
1
+ {"version":3,"file":"scroll-restoration.cjs","names":["getScrollRestorationScriptForRouter","useRouter","ScriptOnce","ScrollRestoration","router","script","_$createComponent","children"],"sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import { getScrollRestorationScriptForRouter } from '@tanstack/router-core/scroll-restoration-script'\nimport { useRouter } from './useRouter'\nimport { ScriptOnce } from './ScriptOnce'\n\nexport function ScrollRestoration() {\n const router = useRouter()\n const script = getScrollRestorationScriptForRouter(router)\n\n if (!script) {\n return null\n }\n\n return <ScriptOnce children={script} />\n}\n"],"mappings":";;;;;;AAIA,SAAgBG,oBAAoB;CAElC,MAAME,UAAAA,GAAAA,gDAAAA,qCADSJ,kBAAAA,WAAW,CACgC;AAE1D,KAAI,CAACI,OACH,QAAO;AAGT,SAAA,GAAA,aAAA,iBAAQH,mBAAAA,YAAU,EAACK,UAAUF,QAAM,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBlocker.cjs","names":["Solid","useRouter","BlockerFnArgs","HistoryAction","HistoryLocation","SolidNode","AnyRoute","AnyRouter","ParseRoute","RegisteredRouter","ShouldBlockFnLocation","routeId","TRouteId","fullPath","TFullPath","pathname","params","TAllParams","search","TFullSearchSchema","AnyShouldBlockFnLocation","MakeShouldBlockFnLocationUnion","TRouter","TRoute","BlockerResolver","status","current","next","action","proceed","reset","ShouldBlockFnArgs","ShouldBlockFn","args","Promise","UseBlockerOpts","shouldBlockFn","enableBeforeUnload","disabled","withResolver","TWithResolver","LegacyBlockerFn","LegacyBlockerOpts","blockerFn","condition","_resolveBlockerOpts","opts","undefined","shouldBlock","Boolean","_customBlockerFn","createMemo","useBlocker","Accessor","blockerFnOrOpts","props","mergeProps","router","resolver","setResolver","createSignal","createEffect","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","foundRoute","routeParams","id","currentLocation","nextLocation","promise","resolve","canNavigateAsync","disposeBlock","history","block","onCleanup","_resolvePromptBlockerArgs","PromptProps","LegacyPromptProps","BlockComponent","Block","propsWithChildren","rest","splitProps","children","child","_$memo","TParams"],"sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type { SolidNode } from './route'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ninterface ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(opts.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && opts.blockerFn !== undefined) {\n return await opts.blockerFn()\n }\n return shouldBlock()\n }\n\n return {\n get shouldBlockFn() {\n return _customBlockerFn\n },\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return opts.blockerFn === undefined\n },\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Solid.Accessor<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver> | void {\n const props = Solid.mergeProps(\n {\n enableBeforeUnload: true,\n disabled: false,\n withResolver: false,\n },\n _resolveBlockerOpts(opts, condition),\n )\n\n const router = useRouter()\n\n const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Solid.createEffect(() => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(location)\n const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname)\n if (matchedRoutes.foundRoute === undefined) {\n return {\n routeId: '__notFound__',\n fullPath: parsedLocation.pathname,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n if (\n current.routeId === '__notFound__' &&\n next.routeId !== '__notFound__'\n ) {\n return false\n }\n\n const shouldBlock = await props.shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!props.withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n setResolver({\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n })\n })\n\n const canNavigateAsync = await promise\n setResolver({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n return canNavigateAsync\n }\n\n const disposeBlock = props.disabled\n ? undefined\n : router.history.block({\n blockerFn: blockerFnComposed,\n enableBeforeUnload: props.enableBeforeUnload,\n })\n\n Solid.onCleanup(() => disposeBlock?.())\n })\n\n return resolver\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return props\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(props.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && props.blockerFn !== undefined) {\n return await props.blockerFn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return props.blockerFn === undefined\n },\n }\n}\n\ninterface BlockComponent {\n <\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n >(\n opts: PromptProps<TRouter, TWithResolver>,\n ): SolidNode\n /**\n * @deprecated Use the UseBlockerOpts property instead\n */\n (opts: LegacyPromptProps): SolidNode\n}\n\nexport const Block: BlockComponent = function Block(\n opts: PromptProps | LegacyPromptProps,\n): SolidNode {\n const [propsWithChildren, rest] = Solid.splitProps(opts, ['children'])\n const args = _resolvePromptBlockerArgs(rest)\n\n const resolver = useBlocker(args)\n const children = Solid.createMemo(() => {\n const child = propsWithChildren.children\n if (resolver && typeof child === 'function') return child(resolver())\n return child\n })\n\n return <>{children()}</>\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: SolidNode | ((params: BlockerResolver) => SolidNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: SolidNode | ((params: TParams) => SolidNode)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useBlocker.cjs","names":["Solid","useRouter","BlockerFnArgs","HistoryAction","HistoryLocation","SolidNode","AnyRoute","AnyRouter","ParseRoute","RegisteredRouter","ShouldBlockFnLocation","routeId","TRouteId","fullPath","TFullPath","pathname","params","TAllParams","search","TFullSearchSchema","AnyShouldBlockFnLocation","MakeShouldBlockFnLocationUnion","TRouter","TRoute","BlockerResolver","status","current","next","action","proceed","reset","ShouldBlockFnArgs","ShouldBlockFn","args","Promise","UseBlockerOpts","shouldBlockFn","enableBeforeUnload","disabled","withResolver","TWithResolver","LegacyBlockerFn","LegacyBlockerOpts","blockerFn","condition","_resolveBlockerOpts","opts","undefined","shouldBlock","Boolean","_customBlockerFn","createMemo","useBlocker","Accessor","blockerFnOrOpts","props","mergeProps","router","resolver","setResolver","createSignal","createEffect","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","foundRoute","routeParams","id","currentLocation","nextLocation","promise","resolve","canNavigateAsync","disposeBlock","history","block","onCleanup","_resolvePromptBlockerArgs","PromptProps","LegacyPromptProps","BlockComponent","Block","propsWithChildren","rest","splitProps","children","child","_$memo","TParams"],"sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type { SolidNode } from './route'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ntype ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> = {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(opts.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && opts.blockerFn !== undefined) {\n return await opts.blockerFn()\n }\n return shouldBlock()\n }\n\n return {\n get shouldBlockFn() {\n return _customBlockerFn\n },\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return opts.blockerFn === undefined\n },\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Solid.Accessor<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver> | void {\n const props = Solid.mergeProps(\n {\n enableBeforeUnload: true,\n disabled: false,\n withResolver: false,\n },\n _resolveBlockerOpts(opts, condition),\n )\n\n const router = useRouter()\n\n const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Solid.createEffect(() => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(location)\n const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname)\n if (matchedRoutes.foundRoute === undefined) {\n return {\n routeId: '__notFound__',\n fullPath: parsedLocation.pathname,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n if (\n current.routeId === '__notFound__' &&\n next.routeId !== '__notFound__'\n ) {\n return false\n }\n\n const shouldBlock = await props.shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!props.withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n setResolver({\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n })\n })\n\n const canNavigateAsync = await promise\n setResolver({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n return canNavigateAsync\n }\n\n const disposeBlock = props.disabled\n ? undefined\n : router.history.block({\n blockerFn: blockerFnComposed,\n enableBeforeUnload: props.enableBeforeUnload,\n })\n\n Solid.onCleanup(() => disposeBlock?.())\n })\n\n return resolver\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return props\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(props.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && props.blockerFn !== undefined) {\n return await props.blockerFn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return props.blockerFn === undefined\n },\n }\n}\n\ninterface BlockComponent {\n <\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n >(\n opts: PromptProps<TRouter, TWithResolver>,\n ): SolidNode\n /**\n * @deprecated Use the UseBlockerOpts property instead\n */\n (opts: LegacyPromptProps): SolidNode\n}\n\nexport const Block: BlockComponent = function Block(\n opts: PromptProps | LegacyPromptProps,\n): SolidNode {\n const [propsWithChildren, rest] = Solid.splitProps(opts, ['children'])\n const args = _resolvePromptBlockerArgs(rest)\n\n const resolver = useBlocker(args)\n const children = Solid.createMemo(() => {\n const child = propsWithChildren.children\n if (resolver && typeof child === 'function') return child(resolver())\n return child\n })\n\n return <>{children()}</>\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: SolidNode | ((params: BlockerResolver) => SolidNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: SolidNode | ((params: TParams) => SolidNode)\n}\n"],"mappings":"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"}
@@ -2,13 +2,13 @@ import { HistoryAction } from '@tanstack/history';
2
2
  import { SolidNode } from './route.cjs';
3
3
  import { AnyRoute, AnyRouter, ParseRoute, RegisteredRouter } from '@tanstack/router-core';
4
4
  import * as Solid from 'solid-js';
5
- interface ShouldBlockFnLocation<out TRouteId, out TFullPath, out TAllParams, out TFullSearchSchema> {
5
+ type ShouldBlockFnLocation<out TRouteId, out TFullPath, out TAllParams, out TFullSearchSchema> = {
6
6
  routeId: TRouteId;
7
7
  fullPath: TFullPath;
8
8
  pathname: string;
9
9
  params: TAllParams;
10
10
  search: TFullSearchSchema;
11
- }
11
+ };
12
12
  type MakeShouldBlockFnLocationUnion<TRouter extends AnyRouter = RegisteredRouter, TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>> = TRoute extends any ? ShouldBlockFnLocation<TRoute['id'], TRoute['fullPath'], TRoute['types']['allParams'], TRoute['types']['fullSearchSchema']> : never;
13
13
  type BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> = {
14
14
  status: 'blocked';
package/dist/esm/Match.js CHANGED
@@ -124,7 +124,7 @@ var Match = (props) => {
124
124
  }
125
125
  });
126
126
  }
127
- }), memo(() => memo(() => currentMatchState().parentRouteId === rootRouteId)() ? [createComponent(OnRendered, {}), createComponent(ScrollRestoration, {})] : null)];
127
+ }), memo(() => memo(() => currentMatchState().parentRouteId === rootRouteId)() ? [createComponent(OnRendered, {}), memo(() => memo(() => !!(router.options.scrollRestoration && (isServer ?? router.isServer)))() ? createComponent(ScrollRestoration, {}) : null)] : null)];
128
128
  } });
129
129
  }
130
130
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Match.js","names":["Solid","createControlledPromise","getLocationChangeInfo","invariant","isNotFound","isRedirect","rootRouteId","isServer","Dynamic","CatchBoundary","ErrorComponent","useRouter","CatchNotFound","nearestMatchContext","SafeFragment","renderRouteNotFound","ScrollRestoration","AnyRoute","RootRouteOptions","Match","props","matchId","router","match","createMemo","id","undefined","stores","activeMatchStoresById","get","state","rawMatchState","currentMatch","routeId","parentRouteId","routesById","parentRoute","ssr","_displayPending","hasPendingMatch","currentRouteId","Boolean","pendingRouteIds","nearestMatch","hasPending","_$createComponent","Show","when","children","currentMatchState","route","resolvePendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","ResolvedSuspenseBoundary","Suspense","ResolvedCatchBoundary","ResolvedNotFoundBoundary","ShellComponent","shellComponent","Provider","value","fallback","_$memo","getResetKey","loadedAt","error","Error","process","env","NODE_ENV","console","warn","_$mergeProps","Switch","MatchInner","OnRendered","location","resolvedLocation","__TSR_key","createEffect","on","emit","type","useContext","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","status","_forcePending","componentKey","out","Comp","defaultComponent","Outlet","keyedOut","keyed","_key","_","displayPendingResult","createResource","getMatch","_nonReactive","displayPendingPromise","minPendingResult","minPendingPromise","pendingMinMs","defaultPendingMinMs","routerMatch","setTimeout","resolve","loaderResult","Promise","r","loadPromise","FallbackComponent","_routeId","RouteErrorComponent","info","componentStack","nearestParentMatch","parentMatch","parentGlobalNotFound","globalNotFound","childMatchId","childMatchIdByRouteId","childMatchStatus","shouldShowNotFound","resolvedRoute","childMatchIdAccessor","currentMatchId"],"sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n invariant,\n isNotFound,\n isRedirect,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound } from './not-found'\nimport { nearestMatchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { renderRouteNotFound } from './renderRouteNotFound'\nimport { ScrollRestoration } from './scroll-restoration'\nimport type { AnyRoute, RootRouteOptions } from '@tanstack/router-core'\n\nexport const Match = (props: { matchId: string }) => {\n const router = useRouter()\n\n const match = Solid.createMemo(() => {\n const id = props.matchId\n if (!id) return undefined\n return router.stores.activeMatchStoresById.get(id)?.state\n })\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n const parentRouteId = (router.routesById[routeId] as AnyRoute)?.parentRoute\n ?.id\n\n return {\n matchId: currentMatch.id,\n routeId,\n ssr: currentMatch.ssr,\n _displayPending: currentMatch._displayPending,\n parentRouteId: parentRouteId as string | undefined,\n }\n })\n\n const hasPendingMatch = Solid.createMemo(() => {\n const currentRouteId = rawMatchState()?.routeId\n return currentRouteId\n ? Boolean(router.stores.pendingRouteIds.state[currentRouteId])\n : false\n })\n const nearestMatch = {\n matchId: () => rawMatchState()?.matchId,\n routeId: () => rawMatchState()?.routeId,\n match,\n hasPending: hasPendingMatch,\n }\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route: () => AnyRoute = () =>\n router.routesById[currentMatchState().routeId]\n\n const resolvePendingComponent = () =>\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const routeErrorComponent = () =>\n route().options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = () =>\n route().options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = () =>\n route().isRoot\n ? // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component\n (route().options.notFoundComponent ??\n router.options.notFoundRoute?.options.component)\n : route().options.notFoundComponent\n\n const resolvedNoSsr =\n currentMatchState().ssr === false ||\n currentMatchState().ssr === 'data-only'\n\n const ResolvedSuspenseBoundary = () => Solid.Suspense\n\n const ResolvedCatchBoundary = () =>\n routeErrorComponent() ? CatchBoundary : SafeFragment\n\n const ResolvedNotFoundBoundary = () =>\n routeNotFoundComponent() ? CatchNotFound : SafeFragment\n\n const ShellComponent = route().isRoot\n ? ((route().options as RootRouteOptions).shellComponent ??\n SafeFragment)\n : SafeFragment\n\n return (\n <ShellComponent>\n <nearestMatchContext.Provider value={nearestMatch}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={\n // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch\n (isServer ?? router.isServer) && resolvedNoSsr ? undefined : (\n <Dynamic component={resolvePendingComponent()} />\n )\n }\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => router.stores.loadedAt.state}\n errorComponent={routeErrorComponent() || ErrorComponent}\n onCatch={(error: Error) => {\n // Forward not found errors (we don't want to show the error component for these)\n if (isNotFound(error)) throw error\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: Error in route match: ${currentMatchState().routeId}`,\n )\n }\n routeOnCatch()?.(error)\n }}\n >\n <Dynamic\n component={ResolvedNotFoundBoundary()}\n fallback={(error: any) => {\n // If the current not found handler doesn't exist or it has a\n // route ID which doesn't match the current route, rethrow the error\n if (\n !routeNotFoundComponent() ||\n (error.routeId &&\n error.routeId !== currentMatchState().routeId) ||\n (!error.routeId && !route().isRoot)\n )\n throw error\n\n return (\n <Dynamic\n component={routeNotFoundComponent()}\n {...error}\n />\n )\n }}\n >\n <Solid.Switch>\n <Solid.Match when={resolvedNoSsr}>\n <Solid.Show\n when={!(isServer ?? router.isServer)}\n fallback={\n <Dynamic component={resolvePendingComponent()} />\n }\n >\n <MatchInner />\n </Solid.Show>\n </Solid.Match>\n <Solid.Match when={!resolvedNoSsr}>\n <MatchInner />\n </Solid.Match>\n </Solid.Switch>\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </nearestMatchContext.Provider>\n\n {currentMatchState().parentRouteId === rootRouteId ? (\n <>\n <OnRendered />\n <ScrollRestoration />\n </>\n ) : null}\n </ShellComponent>\n )\n }}\n </Solid.Show>\n )\n}\n\n// On Rendered can't happen above the root layout because it actually\n// renders a dummy dom element to track the rendered state of the app.\n// We render a script tag with a key that changes based on the current\n// location state.__TSR_key. Also, because it's below the root layout, it\n// allows us to fire onRendered events even after a hydration mismatch\n// error that occurred above the root layout (like bad head/link tags,\n// which is common).\nfunction OnRendered() {\n const router = useRouter()\n\n const location = Solid.createMemo(\n () => router.stores.resolvedLocation.state?.state.__TSR_key,\n )\n Solid.createEffect(\n Solid.on([location], () => {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(\n router.stores.location.state,\n router.stores.resolvedLocation.state,\n ),\n })\n }),\n )\n return null\n}\n\nexport const MatchInner = (): any => {\n const router = useRouter()\n const match = Solid.useContext(nearestMatchContext).match\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n\n const remountFn =\n (router.routesById[routeId] as AnyRoute).options.remountDeps ??\n router.options.defaultRemountDeps\n const remountDeps = remountFn?.({\n routeId,\n loaderDeps: currentMatch.loaderDeps,\n params: currentMatch._strictParams,\n search: currentMatch._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n\n return {\n key,\n routeId,\n match: {\n id: currentMatch.id,\n status: currentMatch.status,\n error: currentMatch.error,\n _forcePending: currentMatch._forcePending ?? false,\n _displayPending: currentMatch._displayPending ?? false,\n },\n }\n })\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route = () => router.routesById[currentMatchState().routeId]!\n\n const currentMatch = () => currentMatchState().match\n\n const componentKey = () =>\n currentMatchState().key ?? currentMatchState().match.id\n\n const out = () => {\n const Comp =\n route().options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp />\n }\n return <Outlet />\n }\n\n const keyedOut = () => (\n <Solid.Show when={componentKey()} keyed>\n {(_key) => out()}\n </Solid.Show>\n )\n\n return (\n <Solid.Switch>\n <Solid.Match when={currentMatch()._displayPending}>\n {(_) => {\n const [displayPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .displayPendingPromise,\n )\n\n return <>{displayPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch()._forcePending}>\n {(_) => {\n const [minPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .minPendingPromise,\n )\n\n return <>{minPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'pending'}>\n {(_) => {\n const pendingMinMs =\n route().options.pendingMinMs ??\n router.options.defaultPendingMinMs\n\n if (pendingMinMs) {\n const routerMatch = router.getMatch(currentMatch().id)\n if (\n routerMatch &&\n !routerMatch._nonReactive.minPendingPromise\n ) {\n // Create a promise that will resolve after the minPendingMs\n if (!(isServer ?? router.isServer)) {\n const minPendingPromise = createControlledPromise<void>()\n\n routerMatch._nonReactive.minPendingPromise =\n minPendingPromise\n\n setTimeout(() => {\n minPendingPromise.resolve()\n // We've handled the minPendingPromise, so we can delete it\n routerMatch._nonReactive.minPendingPromise = undefined\n }, pendingMinMs)\n }\n }\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch().id)?._nonReactive\n .loadPromise\n })\n\n const FallbackComponent =\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n return (\n <>\n {FallbackComponent && pendingMinMs > 0 ? (\n <Dynamic component={FallbackComponent} />\n ) : null}\n {loaderResult()}\n </>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'notFound'}>\n {(_) => {\n if (!isNotFound(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a notFound error',\n )\n }\n\n invariant()\n }\n\n // Use Show with keyed to ensure re-render when routeId changes\n return (\n <Solid.Show when={currentMatchState().routeId} keyed>\n {(_routeId) =>\n renderRouteNotFound(router, route(), currentMatch().error)\n }\n </Solid.Show>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'redirected'}>\n {(_) => {\n if (!isRedirect(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a redirect error',\n )\n }\n\n invariant()\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch().id)?._nonReactive\n .loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'error'}>\n {(_) => {\n if (isServer ?? router.isServer) {\n const RouteErrorComponent =\n (route().options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n\n return (\n <RouteErrorComponent\n error={currentMatch().error}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw currentMatch().error\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'success'}>\n {keyedOut()}\n </Solid.Match>\n </Solid.Switch>\n )\n }}\n </Solid.Show>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const nearestParentMatch = Solid.useContext(nearestMatchContext)\n const parentMatch = nearestParentMatch.match\n const routeId = nearestParentMatch.routeId\n const route = Solid.createMemo(() =>\n routeId() ? router.routesById[routeId()!] : undefined,\n )\n\n const parentGlobalNotFound = Solid.createMemo(\n () => parentMatch()?.globalNotFound ?? false,\n )\n\n const childMatchId = Solid.createMemo(() => {\n const currentRouteId = routeId()\n return currentRouteId\n ? router.stores.childMatchIdByRouteId.state[currentRouteId]\n : undefined\n })\n\n const childMatchStatus = Solid.createMemo(() => {\n const id = childMatchId()\n if (!id) return undefined\n return router.stores.activeMatchStoresById.get(id)?.state.status\n })\n\n // Only show not-found if we're not in a redirected state\n const shouldShowNotFound = () =>\n childMatchStatus() !== 'redirected' && parentGlobalNotFound()\n\n return (\n <Solid.Show\n when={!shouldShowNotFound() && childMatchId()}\n fallback={\n <Solid.Show when={shouldShowNotFound() && route()}>\n {(resolvedRoute) =>\n renderRouteNotFound(router, resolvedRoute(), undefined)\n }\n </Solid.Show>\n }\n >\n {(childMatchIdAccessor) => {\n const currentMatchId = Solid.createMemo(() => childMatchIdAccessor())\n\n return (\n <Solid.Show\n when={routeId() === rootRouteId}\n fallback={<Match matchId={currentMatchId()} />}\n >\n <Solid.Suspense\n fallback={\n <Dynamic component={router.options.defaultPendingComponent} />\n }\n >\n <Match matchId={currentMatchId()} />\n </Solid.Suspense>\n </Solid.Show>\n )\n }}\n </Solid.Show>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Match.js","names":["Solid","createControlledPromise","getLocationChangeInfo","invariant","isNotFound","isRedirect","rootRouteId","isServer","Dynamic","CatchBoundary","ErrorComponent","useRouter","CatchNotFound","nearestMatchContext","SafeFragment","renderRouteNotFound","ScrollRestoration","AnyRoute","RootRouteOptions","Match","props","matchId","router","match","createMemo","id","undefined","stores","activeMatchStoresById","get","state","rawMatchState","currentMatch","routeId","parentRouteId","routesById","parentRoute","ssr","_displayPending","hasPendingMatch","currentRouteId","Boolean","pendingRouteIds","nearestMatch","hasPending","_$createComponent","Show","when","children","currentMatchState","route","resolvePendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","ResolvedSuspenseBoundary","Suspense","ResolvedCatchBoundary","ResolvedNotFoundBoundary","ShellComponent","shellComponent","Provider","value","fallback","_$memo","getResetKey","loadedAt","error","Error","process","env","NODE_ENV","console","warn","_$mergeProps","Switch","MatchInner","OnRendered","scrollRestoration","location","resolvedLocation","__TSR_key","createEffect","on","emit","type","useContext","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","status","_forcePending","componentKey","out","Comp","defaultComponent","Outlet","keyedOut","keyed","_key","_","displayPendingResult","createResource","getMatch","_nonReactive","displayPendingPromise","minPendingResult","minPendingPromise","pendingMinMs","defaultPendingMinMs","routerMatch","setTimeout","resolve","loaderResult","Promise","r","loadPromise","FallbackComponent","_routeId","RouteErrorComponent","info","componentStack","nearestParentMatch","parentMatch","parentGlobalNotFound","globalNotFound","childMatchId","childMatchIdByRouteId","childMatchStatus","shouldShowNotFound","resolvedRoute","childMatchIdAccessor","currentMatchId"],"sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n invariant,\n isNotFound,\n isRedirect,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound } from './not-found'\nimport { nearestMatchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { renderRouteNotFound } from './renderRouteNotFound'\nimport { ScrollRestoration } from './scroll-restoration'\nimport type { AnyRoute, RootRouteOptions } from '@tanstack/router-core'\n\nexport const Match = (props: { matchId: string }) => {\n const router = useRouter()\n\n const match = Solid.createMemo(() => {\n const id = props.matchId\n if (!id) return undefined\n return router.stores.activeMatchStoresById.get(id)?.state\n })\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n const parentRouteId = (router.routesById[routeId] as AnyRoute)?.parentRoute\n ?.id\n\n return {\n matchId: currentMatch.id,\n routeId,\n ssr: currentMatch.ssr,\n _displayPending: currentMatch._displayPending,\n parentRouteId: parentRouteId as string | undefined,\n }\n })\n\n const hasPendingMatch = Solid.createMemo(() => {\n const currentRouteId = rawMatchState()?.routeId\n return currentRouteId\n ? Boolean(router.stores.pendingRouteIds.state[currentRouteId])\n : false\n })\n const nearestMatch = {\n matchId: () => rawMatchState()?.matchId,\n routeId: () => rawMatchState()?.routeId,\n match,\n hasPending: hasPendingMatch,\n }\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route: () => AnyRoute = () =>\n router.routesById[currentMatchState().routeId]\n\n const resolvePendingComponent = () =>\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const routeErrorComponent = () =>\n route().options.errorComponent ?? router.options.defaultErrorComponent\n\n const routeOnCatch = () =>\n route().options.onCatch ?? router.options.defaultOnCatch\n\n const routeNotFoundComponent = () =>\n route().isRoot\n ? // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component\n (route().options.notFoundComponent ??\n router.options.notFoundRoute?.options.component)\n : route().options.notFoundComponent\n\n const resolvedNoSsr =\n currentMatchState().ssr === false ||\n currentMatchState().ssr === 'data-only'\n\n const ResolvedSuspenseBoundary = () => Solid.Suspense\n\n const ResolvedCatchBoundary = () =>\n routeErrorComponent() ? CatchBoundary : SafeFragment\n\n const ResolvedNotFoundBoundary = () =>\n routeNotFoundComponent() ? CatchNotFound : SafeFragment\n\n const ShellComponent = route().isRoot\n ? ((route().options as RootRouteOptions).shellComponent ??\n SafeFragment)\n : SafeFragment\n\n return (\n <ShellComponent>\n <nearestMatchContext.Provider value={nearestMatch}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={\n // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch\n (isServer ?? router.isServer) && resolvedNoSsr ? undefined : (\n <Dynamic component={resolvePendingComponent()} />\n )\n }\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => router.stores.loadedAt.state}\n errorComponent={routeErrorComponent() || ErrorComponent}\n onCatch={(error: Error) => {\n // Forward not found errors (we don't want to show the error component for these)\n if (isNotFound(error)) throw error\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Warning: Error in route match: ${currentMatchState().routeId}`,\n )\n }\n routeOnCatch()?.(error)\n }}\n >\n <Dynamic\n component={ResolvedNotFoundBoundary()}\n fallback={(error: any) => {\n // If the current not found handler doesn't exist or it has a\n // route ID which doesn't match the current route, rethrow the error\n if (\n !routeNotFoundComponent() ||\n (error.routeId &&\n error.routeId !== currentMatchState().routeId) ||\n (!error.routeId && !route().isRoot)\n )\n throw error\n\n return (\n <Dynamic\n component={routeNotFoundComponent()}\n {...error}\n />\n )\n }}\n >\n <Solid.Switch>\n <Solid.Match when={resolvedNoSsr}>\n <Solid.Show\n when={!(isServer ?? router.isServer)}\n fallback={\n <Dynamic component={resolvePendingComponent()} />\n }\n >\n <MatchInner />\n </Solid.Show>\n </Solid.Match>\n <Solid.Match when={!resolvedNoSsr}>\n <MatchInner />\n </Solid.Match>\n </Solid.Switch>\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </nearestMatchContext.Provider>\n\n {currentMatchState().parentRouteId === rootRouteId ? (\n <>\n <OnRendered />\n {router.options.scrollRestoration &&\n (isServer ?? router.isServer) ? (\n <ScrollRestoration />\n ) : null}\n </>\n ) : null}\n </ShellComponent>\n )\n }}\n </Solid.Show>\n )\n}\n\n// On Rendered can't happen above the root layout because it needs to run\n// after the app has committed below the root layout. Keeping it here lets us\n// fire onRendered even after a hydration mismatch above the root layout\n// (like bad head/link tags, which is common).\nfunction OnRendered() {\n const router = useRouter()\n\n const location = Solid.createMemo(\n () => router.stores.resolvedLocation.state?.state.__TSR_key,\n )\n Solid.createEffect(\n Solid.on([location], () => {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(\n router.stores.location.state,\n router.stores.resolvedLocation.state,\n ),\n })\n }),\n )\n return null\n}\n\nexport const MatchInner = (): any => {\n const router = useRouter()\n const match = Solid.useContext(nearestMatchContext).match\n\n const rawMatchState = Solid.createMemo(() => {\n const currentMatch = match()\n if (!currentMatch) {\n return null\n }\n\n const routeId = currentMatch.routeId as string\n\n const remountFn =\n (router.routesById[routeId] as AnyRoute).options.remountDeps ??\n router.options.defaultRemountDeps\n const remountDeps = remountFn?.({\n routeId,\n loaderDeps: currentMatch.loaderDeps,\n params: currentMatch._strictParams,\n search: currentMatch._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n\n return {\n key,\n routeId,\n match: {\n id: currentMatch.id,\n status: currentMatch.status,\n error: currentMatch.error,\n _forcePending: currentMatch._forcePending ?? false,\n _displayPending: currentMatch._displayPending ?? false,\n },\n }\n })\n\n return (\n <Solid.Show when={rawMatchState()}>\n {(currentMatchState) => {\n const route = () => router.routesById[currentMatchState().routeId]!\n\n const currentMatch = () => currentMatchState().match\n\n const componentKey = () =>\n currentMatchState().key ?? currentMatchState().match.id\n\n const out = () => {\n const Comp =\n route().options.component ?? router.options.defaultComponent\n if (Comp) {\n return <Comp />\n }\n return <Outlet />\n }\n\n const keyedOut = () => (\n <Solid.Show when={componentKey()} keyed>\n {(_key) => out()}\n </Solid.Show>\n )\n\n return (\n <Solid.Switch>\n <Solid.Match when={currentMatch()._displayPending}>\n {(_) => {\n const [displayPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .displayPendingPromise,\n )\n\n return <>{displayPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch()._forcePending}>\n {(_) => {\n const [minPendingResult] = Solid.createResource(\n () =>\n router.getMatch(currentMatch().id)?._nonReactive\n .minPendingPromise,\n )\n\n return <>{minPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'pending'}>\n {(_) => {\n const pendingMinMs =\n route().options.pendingMinMs ??\n router.options.defaultPendingMinMs\n\n if (pendingMinMs) {\n const routerMatch = router.getMatch(currentMatch().id)\n if (\n routerMatch &&\n !routerMatch._nonReactive.minPendingPromise\n ) {\n // Create a promise that will resolve after the minPendingMs\n if (!(isServer ?? router.isServer)) {\n const minPendingPromise = createControlledPromise<void>()\n\n routerMatch._nonReactive.minPendingPromise =\n minPendingPromise\n\n setTimeout(() => {\n minPendingPromise.resolve()\n // We've handled the minPendingPromise, so we can delete it\n routerMatch._nonReactive.minPendingPromise = undefined\n }, pendingMinMs)\n }\n }\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch().id)?._nonReactive\n .loadPromise\n })\n\n const FallbackComponent =\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n return (\n <>\n {FallbackComponent && pendingMinMs > 0 ? (\n <Dynamic component={FallbackComponent} />\n ) : null}\n {loaderResult()}\n </>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'notFound'}>\n {(_) => {\n if (!isNotFound(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a notFound error',\n )\n }\n\n invariant()\n }\n\n // Use Show with keyed to ensure re-render when routeId changes\n return (\n <Solid.Show when={currentMatchState().routeId} keyed>\n {(_routeId) =>\n renderRouteNotFound(router, route(), currentMatch().error)\n }\n </Solid.Show>\n )\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'redirected'}>\n {(_) => {\n if (!isRedirect(currentMatch().error)) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n 'Invariant failed: Expected a redirect error',\n )\n }\n\n invariant()\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(currentMatch().id)?._nonReactive\n .loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'error'}>\n {(_) => {\n if (isServer ?? router.isServer) {\n const RouteErrorComponent =\n (route().options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n\n return (\n <RouteErrorComponent\n error={currentMatch().error}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw currentMatch().error\n }}\n </Solid.Match>\n <Solid.Match when={currentMatch().status === 'success'}>\n {keyedOut()}\n </Solid.Match>\n </Solid.Switch>\n )\n }}\n </Solid.Show>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const nearestParentMatch = Solid.useContext(nearestMatchContext)\n const parentMatch = nearestParentMatch.match\n const routeId = nearestParentMatch.routeId\n const route = Solid.createMemo(() =>\n routeId() ? router.routesById[routeId()!] : undefined,\n )\n\n const parentGlobalNotFound = Solid.createMemo(\n () => parentMatch()?.globalNotFound ?? false,\n )\n\n const childMatchId = Solid.createMemo(() => {\n const currentRouteId = routeId()\n return currentRouteId\n ? router.stores.childMatchIdByRouteId.state[currentRouteId]\n : undefined\n })\n\n const childMatchStatus = Solid.createMemo(() => {\n const id = childMatchId()\n if (!id) return undefined\n return router.stores.activeMatchStoresById.get(id)?.state.status\n })\n\n // Only show not-found if we're not in a redirected state\n const shouldShowNotFound = () =>\n childMatchStatus() !== 'redirected' && parentGlobalNotFound()\n\n return (\n <Solid.Show\n when={!shouldShowNotFound() && childMatchId()}\n fallback={\n <Solid.Show when={shouldShowNotFound() && route()}>\n {(resolvedRoute) =>\n renderRouteNotFound(router, resolvedRoute(), undefined)\n }\n </Solid.Show>\n }\n >\n {(childMatchIdAccessor) => {\n const currentMatchId = Solid.createMemo(() => childMatchIdAccessor())\n\n return (\n <Solid.Show\n when={routeId() === rootRouteId}\n fallback={<Match matchId={currentMatchId()} />}\n >\n <Solid.Suspense\n fallback={\n <Dynamic component={router.options.defaultPendingComponent} />\n }\n >\n <Match matchId={currentMatchId()} />\n </Solid.Suspense>\n </Solid.Show>\n )\n }}\n </Solid.Show>\n )\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { useRouter } from "./useRouter.js";
2
- import { defaultGetScrollRestorationKey, getCssSelector, scrollRestorationCache, setupScrollRestoration } from "@tanstack/router-core";
2
+ import { getElementScrollRestorationEntry, setupScrollRestoration } from "@tanstack/router-core";
3
3
  //#region src/ScrollRestoration.tsx
4
4
  function useScrollRestoration() {
5
5
  setupScrollRestoration(useRouter(), true);
@@ -14,17 +14,7 @@ function ScrollRestoration(_props) {
14
14
  }
15
15
  function useElementScrollRestoration(options) {
16
16
  useScrollRestoration();
17
- const router = useRouter();
18
- const getKey = options.getKey || defaultGetScrollRestorationKey;
19
- let elementSelector = "";
20
- if (options.id) elementSelector = `[data-scroll-restoration-id="${options.id}"]`;
21
- else {
22
- const element = options.getElement?.();
23
- if (!element) return;
24
- elementSelector = element instanceof Window ? "window" : getCssSelector(element);
25
- }
26
- const restoreKey = getKey(router.latestLocation);
27
- return (scrollRestorationCache?.state[restoreKey])?.[elementSelector];
17
+ return getElementScrollRestorationEntry(useRouter(), options);
28
18
  }
29
19
  //#endregion
30
20
  export { ScrollRestoration, useElementScrollRestoration };
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollRestoration.js","names":["defaultGetScrollRestorationKey","getCssSelector","scrollRestorationCache","setupScrollRestoration","useRouter","ParsedLocation","ScrollRestorationEntry","ScrollRestorationOptions","useScrollRestoration","router","ScrollRestoration","_props","process","env","NODE_ENV","console","warn","useElementScrollRestoration","options","id","getElement","Window","Element","getKey","location","elementSelector","element","restoreKey","latestLocation","byKey","state"],"sources":["../../src/ScrollRestoration.tsx"],"sourcesContent":["import {\n defaultGetScrollRestorationKey,\n getCssSelector,\n scrollRestorationCache,\n setupScrollRestoration,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n ParsedLocation,\n ScrollRestorationEntry,\n ScrollRestorationOptions,\n} from '@tanstack/router-core'\n\nfunction useScrollRestoration() {\n const router = useRouter()\n setupScrollRestoration(router, true)\n}\n\n/**\n * @deprecated use createRouter's `scrollRestoration` option instead\n */\nexport function ScrollRestoration(_props: ScrollRestorationOptions) {\n useScrollRestoration()\n\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n \"The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.\",\n )\n }\n\n return null\n}\n\nexport function useElementScrollRestoration(\n options: (\n | {\n id: string\n getElement?: () => Window | Element | undefined | null\n }\n | {\n id?: string\n getElement: () => Window | Element | undefined | null\n }\n ) & {\n getKey?: (location: ParsedLocation) => string\n },\n): ScrollRestorationEntry | undefined {\n useScrollRestoration()\n\n const router = useRouter()\n const getKey = options.getKey || defaultGetScrollRestorationKey\n\n let elementSelector = ''\n\n if (options.id) {\n elementSelector = `[data-scroll-restoration-id=\"${options.id}\"]`\n } else {\n const element = options.getElement?.()\n if (!element) {\n return\n }\n elementSelector =\n element instanceof Window ? 'window' : getCssSelector(element)\n }\n\n const restoreKey = getKey(router.latestLocation)\n const byKey = scrollRestorationCache?.state[restoreKey]\n return byKey?.[elementSelector]\n}\n"],"mappings":";;;AAaA,SAASQ,uBAAuB;AAE9BL,wBADeC,WAAW,EACK,KAAK;;;;;AAMtC,SAAgBM,kBAAkBC,QAAkC;AAClEH,uBAAsB;AAEtB,KAAA,QAAA,IAAA,aAA6B,cAC3BO,SAAQC,KACN,wGACD;AAGH,QAAO;;AAGT,SAAgBC,4BACdC,SAYoC;AACpCV,uBAAsB;CAEtB,MAAMC,SAASL,WAAW;CAC1B,MAAMmB,SAASL,QAAQK,UAAUvB;CAEjC,IAAIyB,kBAAkB;AAEtB,KAAIP,QAAQC,GACVM,mBAAkB,gCAAgCP,QAAQC,GAAE;MACvD;EACL,MAAMO,UAAUR,QAAQE,cAAc;AACtC,MAAI,CAACM,QACH;AAEFD,oBACEC,mBAAmBL,SAAS,WAAWpB,eAAeyB,QAAQ;;CAGlE,MAAMC,aAAaJ,OAAOd,OAAOmB,eAAe;AAEhD,SADc1B,wBAAwB4B,MAAMH,eAC7BF"}
1
+ {"version":3,"file":"ScrollRestoration.js","names":["getElementScrollRestorationEntry","setupScrollRestoration","useRouter","ParsedLocation","ScrollRestorationEntry","ScrollRestorationOptions","useScrollRestoration","router","ScrollRestoration","_props","process","env","NODE_ENV","console","warn","useElementScrollRestoration","options","id","getElement","Window","Element","getKey","location"],"sources":["../../src/ScrollRestoration.tsx"],"sourcesContent":["import {\n getElementScrollRestorationEntry,\n setupScrollRestoration,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n ParsedLocation,\n ScrollRestorationEntry,\n ScrollRestorationOptions,\n} from '@tanstack/router-core'\n\nfunction useScrollRestoration() {\n const router = useRouter()\n setupScrollRestoration(router, true)\n}\n\n/**\n * @deprecated use createRouter's `scrollRestoration` option instead\n */\nexport function ScrollRestoration(_props: ScrollRestorationOptions) {\n useScrollRestoration()\n\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n \"The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.\",\n )\n }\n\n return null\n}\n\nexport function useElementScrollRestoration(\n options: (\n | {\n id: string\n getElement?: () => Window | Element | undefined | null\n }\n | {\n id?: string\n getElement: () => Window | Element | undefined | null\n }\n ) & {\n getKey?: (location: ParsedLocation) => string\n },\n): ScrollRestorationEntry | undefined {\n useScrollRestoration()\n\n return getElementScrollRestorationEntry(useRouter(), options)\n}\n"],"mappings":";;;AAWA,SAASM,uBAAuB;AAE9BL,wBADeC,WAAW,EACK,KAAK;;;;;AAMtC,SAAgBM,kBAAkBC,QAAkC;AAClEH,uBAAsB;AAEtB,KAAA,QAAA,IAAA,aAA6B,cAC3BO,SAAQC,KACN,wGACD;AAGH,QAAO;;AAGT,SAAgBC,4BACdC,SAYoC;AACpCV,uBAAsB;AAEtB,QAAON,iCAAiCE,WAAW,EAAEc,QAAQ"}
@@ -1,25 +1,12 @@
1
1
  import { useRouter } from "./useRouter.js";
2
2
  import { ScriptOnce } from "./ScriptOnce.js";
3
- import { defaultGetScrollRestorationKey, escapeHtml, restoreScroll, storageKey } from "@tanstack/router-core";
4
3
  import { createComponent } from "solid-js/web";
5
- import { isServer } from "@tanstack/router-core/isServer";
4
+ import { getScrollRestorationScriptForRouter } from "@tanstack/router-core/scroll-restoration-script";
6
5
  //#region src/scroll-restoration.tsx
7
6
  function ScrollRestoration() {
8
- const router = useRouter();
9
- if (!router.isScrollRestoring || !(isServer ?? router.isServer)) return null;
10
- if (typeof router.options.scrollRestoration === "function") {
11
- if (!router.options.scrollRestoration({ location: router.latestLocation })) return null;
12
- }
13
- const userKey = (router.options.getScrollRestorationKey || defaultGetScrollRestorationKey)(router.latestLocation);
14
- const resolvedKey = userKey !== defaultGetScrollRestorationKey(router.latestLocation) ? userKey : void 0;
15
- const restoreScrollOptions = {
16
- storageKey,
17
- shouldScrollRestoration: true
18
- };
19
- if (resolvedKey) restoreScrollOptions.key = resolvedKey;
20
- return createComponent(ScriptOnce, { get children() {
21
- return `(${restoreScroll.toString()})(${escapeHtml(JSON.stringify(restoreScrollOptions))})`;
22
- } });
7
+ const script = getScrollRestorationScriptForRouter(useRouter());
8
+ if (!script) return null;
9
+ return createComponent(ScriptOnce, { children: script });
23
10
  }
24
11
  //#endregion
25
12
  export { ScrollRestoration };
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-restoration.js","names":["defaultGetScrollRestorationKey","escapeHtml","restoreScroll","storageKey","isServer","useRouter","ScriptOnce","ScrollRestoration","router","isScrollRestoring","options","scrollRestoration","shouldRestore","location","latestLocation","getKey","getScrollRestorationKey","userKey","resolvedKey","undefined","restoreScrollOptions","Parameters","shouldScrollRestoration","key","_$createComponent","children","toString","JSON","stringify"],"sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import {\n defaultGetScrollRestorationKey,\n escapeHtml,\n restoreScroll,\n storageKey,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\nimport { ScriptOnce } from './ScriptOnce'\n\nexport function ScrollRestoration() {\n const router = useRouter()\n if (!router.isScrollRestoring || !(isServer ?? router.isServer)) {\n return null\n }\n if (typeof router.options.scrollRestoration === 'function') {\n const shouldRestore = router.options.scrollRestoration({\n location: router.latestLocation,\n })\n if (!shouldRestore) {\n return null\n }\n }\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n const userKey = getKey(router.latestLocation)\n const resolvedKey =\n userKey !== defaultGetScrollRestorationKey(router.latestLocation)\n ? userKey\n : undefined\n\n const restoreScrollOptions: Parameters<typeof restoreScroll>[0] = {\n storageKey,\n shouldScrollRestoration: true,\n }\n if (resolvedKey) {\n restoreScrollOptions.key = resolvedKey\n }\n\n return (\n <ScriptOnce\n children={`(${restoreScroll.toString()})(${escapeHtml(JSON.stringify(restoreScrollOptions))})`}\n />\n )\n}\n"],"mappings":";;;;;;AAUA,SAAgBO,oBAAoB;CAClC,MAAMC,SAASH,WAAW;AAC1B,KAAI,CAACG,OAAOC,qBAAqB,EAAEL,YAAYI,OAAOJ,UACpD,QAAO;AAET,KAAI,OAAOI,OAAOE,QAAQC,sBAAsB;MAI1C,CAHkBH,OAAOE,QAAQC,kBAAkB,EACrDE,UAAUL,OAAOM,gBAClB,CAAC,CAEA,QAAO;;CAKX,MAAMG,WADJT,OAAOE,QAAQM,2BAA2BhB,gCACrBQ,OAAOM,eAAe;CAC7C,MAAMI,cACJD,YAAYjB,+BAA+BQ,OAAOM,eAAe,GAC7DG,UACAE,KAAAA;CAEN,MAAMC,uBAA4D;EAChEjB;EACAmB,yBAAyB;EAC1B;AACD,KAAIJ,YACFE,sBAAqBG,MAAML;AAG7B,QAAAM,gBACGlB,YAAU,EAAA,IACTmB,WAAQ;AAAA,SAAE,IAAIvB,cAAcwB,UAAU,CAAA,IAAKzB,WAAW0B,KAAKC,UAAUR,qBAAqB,CAAC,CAAA;IAAG,CAAA"}
1
+ {"version":3,"file":"scroll-restoration.js","names":["getScrollRestorationScriptForRouter","useRouter","ScriptOnce","ScrollRestoration","router","script","_$createComponent","children"],"sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import { getScrollRestorationScriptForRouter } from '@tanstack/router-core/scroll-restoration-script'\nimport { useRouter } from './useRouter'\nimport { ScriptOnce } from './ScriptOnce'\n\nexport function ScrollRestoration() {\n const router = useRouter()\n const script = getScrollRestorationScriptForRouter(router)\n\n if (!script) {\n return null\n }\n\n return <ScriptOnce children={script} />\n}\n"],"mappings":";;;;;AAIA,SAAgBG,oBAAoB;CAElC,MAAME,SAASL,oCADAC,WAAW,CACgC;AAE1D,KAAI,CAACI,OACH,QAAO;AAGT,QAAAC,gBAAQJ,YAAU,EAACK,UAAUF,QAAM,CAAA"}
@@ -2,13 +2,13 @@ import { HistoryAction } from '@tanstack/history';
2
2
  import { SolidNode } from './route.js';
3
3
  import { AnyRoute, AnyRouter, ParseRoute, RegisteredRouter } from '@tanstack/router-core';
4
4
  import * as Solid from 'solid-js';
5
- interface ShouldBlockFnLocation<out TRouteId, out TFullPath, out TAllParams, out TFullSearchSchema> {
5
+ type ShouldBlockFnLocation<out TRouteId, out TFullPath, out TAllParams, out TFullSearchSchema> = {
6
6
  routeId: TRouteId;
7
7
  fullPath: TFullPath;
8
8
  pathname: string;
9
9
  params: TAllParams;
10
10
  search: TFullSearchSchema;
11
- }
11
+ };
12
12
  type MakeShouldBlockFnLocationUnion<TRouter extends AnyRouter = RegisteredRouter, TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>> = TRoute extends any ? ShouldBlockFnLocation<TRoute['id'], TRoute['fullPath'], TRoute['types']['allParams'], TRoute['types']['fullSearchSchema']> : never;
13
13
  type BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> = {
14
14
  status: 'blocked';
@@ -1 +1 @@
1
- {"version":3,"file":"useBlocker.js","names":["Solid","useRouter","BlockerFnArgs","HistoryAction","HistoryLocation","SolidNode","AnyRoute","AnyRouter","ParseRoute","RegisteredRouter","ShouldBlockFnLocation","routeId","TRouteId","fullPath","TFullPath","pathname","params","TAllParams","search","TFullSearchSchema","AnyShouldBlockFnLocation","MakeShouldBlockFnLocationUnion","TRouter","TRoute","BlockerResolver","status","current","next","action","proceed","reset","ShouldBlockFnArgs","ShouldBlockFn","args","Promise","UseBlockerOpts","shouldBlockFn","enableBeforeUnload","disabled","withResolver","TWithResolver","LegacyBlockerFn","LegacyBlockerOpts","blockerFn","condition","_resolveBlockerOpts","opts","undefined","shouldBlock","Boolean","_customBlockerFn","createMemo","useBlocker","Accessor","blockerFnOrOpts","props","mergeProps","router","resolver","setResolver","createSignal","createEffect","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","foundRoute","routeParams","id","currentLocation","nextLocation","promise","resolve","canNavigateAsync","disposeBlock","history","block","onCleanup","_resolvePromptBlockerArgs","PromptProps","LegacyPromptProps","BlockComponent","Block","propsWithChildren","rest","splitProps","children","child","_$memo","TParams"],"sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type { SolidNode } from './route'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ninterface ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(opts.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && opts.blockerFn !== undefined) {\n return await opts.blockerFn()\n }\n return shouldBlock()\n }\n\n return {\n get shouldBlockFn() {\n return _customBlockerFn\n },\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return opts.blockerFn === undefined\n },\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Solid.Accessor<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver> | void {\n const props = Solid.mergeProps(\n {\n enableBeforeUnload: true,\n disabled: false,\n withResolver: false,\n },\n _resolveBlockerOpts(opts, condition),\n )\n\n const router = useRouter()\n\n const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Solid.createEffect(() => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(location)\n const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname)\n if (matchedRoutes.foundRoute === undefined) {\n return {\n routeId: '__notFound__',\n fullPath: parsedLocation.pathname,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n if (\n current.routeId === '__notFound__' &&\n next.routeId !== '__notFound__'\n ) {\n return false\n }\n\n const shouldBlock = await props.shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!props.withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n setResolver({\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n })\n })\n\n const canNavigateAsync = await promise\n setResolver({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n return canNavigateAsync\n }\n\n const disposeBlock = props.disabled\n ? undefined\n : router.history.block({\n blockerFn: blockerFnComposed,\n enableBeforeUnload: props.enableBeforeUnload,\n })\n\n Solid.onCleanup(() => disposeBlock?.())\n })\n\n return resolver\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return props\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(props.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && props.blockerFn !== undefined) {\n return await props.blockerFn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return props.blockerFn === undefined\n },\n }\n}\n\ninterface BlockComponent {\n <\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n >(\n opts: PromptProps<TRouter, TWithResolver>,\n ): SolidNode\n /**\n * @deprecated Use the UseBlockerOpts property instead\n */\n (opts: LegacyPromptProps): SolidNode\n}\n\nexport const Block: BlockComponent = function Block(\n opts: PromptProps | LegacyPromptProps,\n): SolidNode {\n const [propsWithChildren, rest] = Solid.splitProps(opts, ['children'])\n const args = _resolvePromptBlockerArgs(rest)\n\n const resolver = useBlocker(args)\n const children = Solid.createMemo(() => {\n const child = propsWithChildren.children\n if (resolver && typeof child === 'function') return child(resolver())\n return child\n })\n\n return <>{children()}</>\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: SolidNode | ((params: BlockerResolver) => SolidNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: SolidNode | ((params: TParams) => SolidNode)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useBlocker.js","names":["Solid","useRouter","BlockerFnArgs","HistoryAction","HistoryLocation","SolidNode","AnyRoute","AnyRouter","ParseRoute","RegisteredRouter","ShouldBlockFnLocation","routeId","TRouteId","fullPath","TFullPath","pathname","params","TAllParams","search","TFullSearchSchema","AnyShouldBlockFnLocation","MakeShouldBlockFnLocationUnion","TRouter","TRoute","BlockerResolver","status","current","next","action","proceed","reset","ShouldBlockFnArgs","ShouldBlockFn","args","Promise","UseBlockerOpts","shouldBlockFn","enableBeforeUnload","disabled","withResolver","TWithResolver","LegacyBlockerFn","LegacyBlockerOpts","blockerFn","condition","_resolveBlockerOpts","opts","undefined","shouldBlock","Boolean","_customBlockerFn","createMemo","useBlocker","Accessor","blockerFnOrOpts","props","mergeProps","router","resolver","setResolver","createSignal","createEffect","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","foundRoute","routeParams","id","currentLocation","nextLocation","promise","resolve","canNavigateAsync","disposeBlock","history","block","onCleanup","_resolvePromptBlockerArgs","PromptProps","LegacyPromptProps","BlockComponent","Block","propsWithChildren","rest","splitProps","children","child","_$memo","TParams"],"sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type { SolidNode } from './route'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ntype ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> = {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(opts.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && opts.blockerFn !== undefined) {\n return await opts.blockerFn()\n }\n return shouldBlock()\n }\n\n return {\n get shouldBlockFn() {\n return _customBlockerFn\n },\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return opts.blockerFn === undefined\n },\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Solid.Accessor<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver> | void {\n const props = Solid.mergeProps(\n {\n enableBeforeUnload: true,\n disabled: false,\n withResolver: false,\n },\n _resolveBlockerOpts(opts, condition),\n )\n\n const router = useRouter()\n\n const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Solid.createEffect(() => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(location)\n const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname)\n if (matchedRoutes.foundRoute === undefined) {\n return {\n routeId: '__notFound__',\n fullPath: parsedLocation.pathname,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n if (\n current.routeId === '__notFound__' &&\n next.routeId !== '__notFound__'\n ) {\n return false\n }\n\n const shouldBlock = await props.shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!props.withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n setResolver({\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n })\n })\n\n const canNavigateAsync = await promise\n setResolver({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n return canNavigateAsync\n }\n\n const disposeBlock = props.disabled\n ? undefined\n : router.history.block({\n blockerFn: blockerFnComposed,\n enableBeforeUnload: props.enableBeforeUnload,\n })\n\n Solid.onCleanup(() => disposeBlock?.())\n })\n\n return resolver\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return props\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(props.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && props.blockerFn !== undefined) {\n return await props.blockerFn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return props.blockerFn === undefined\n },\n }\n}\n\ninterface BlockComponent {\n <\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n >(\n opts: PromptProps<TRouter, TWithResolver>,\n ): SolidNode\n /**\n * @deprecated Use the UseBlockerOpts property instead\n */\n (opts: LegacyPromptProps): SolidNode\n}\n\nexport const Block: BlockComponent = function Block(\n opts: PromptProps | LegacyPromptProps,\n): SolidNode {\n const [propsWithChildren, rest] = Solid.splitProps(opts, ['children'])\n const args = _resolvePromptBlockerArgs(rest)\n\n const resolver = useBlocker(args)\n const children = Solid.createMemo(() => {\n const child = propsWithChildren.children\n if (resolver && typeof child === 'function') return child(resolver())\n return child\n })\n\n return <>{children()}</>\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: SolidNode | ((params: BlockerResolver) => SolidNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: SolidNode | ((params: TParams) => SolidNode)\n}\n"],"mappings":";;;;AAoFA,SAAS6C,oBACPC,MACAF,WACgB;AAChB,KAAIE,SAASC,KAAAA,EACX,QAAO;EACLX,qBAAqB;EACrBG,cAAc;EACf;AAGH,KAAI,mBAAmBO,KACrB,QAAOA;AAGT,KAAI,OAAOA,SAAS,YAAY;EAC9B,MAAME,cAAcC,QAAQL,aAAa,KAAK;EAE9C,MAAMM,mBAAmB,YAAY;AACnC,OAAIF,YAAa,QAAO,MAAMF,MAAM;AACpC,UAAO;;AAGT,SAAO;GACLV,eAAec;GACfb,oBAAoBW;GACpBT,cAAc;GACf;;CAGH,MAAMS,cAAchD,MAAMmD,iBAAiBF,QAAQH,KAAKF,aAAa,KAAK,CAAC;CAE3E,MAAMM,mBAAmB,YAAY;AACnC,MAAIF,aAAa,IAAIF,KAAKH,cAAcI,KAAAA,EACtC,QAAO,MAAMD,KAAKH,WAAW;AAE/B,SAAOK,aAAa;;AAGtB,QAAO;EACL,IAAIZ,gBAAgB;AAClB,UAAOc;;EAET,IAAIb,qBAAqB;AACvB,UAAOW,aAAa;;EAEtB,IAAIT,eAAe;AACjB,UAAOO,KAAKH,cAAcI,KAAAA;;EAE7B;;AAyBH,SAAgBK,WACdN,MACAF,WACwC;CACxC,MAAMW,QAAQvD,MAAMwD,WAClB;EACEnB,oBAAoB;EACpBC,UAAU;EACVC,cAAc;EACf,EACDM,oBAAoBC,MAAMF,UAC5B,CAAC;CAED,MAAMa,SAASxD,WAAW;CAE1B,MAAM,CAACyD,UAAUC,eAAe3D,MAAM4D,aAA8B;EAClEnC,QAAQ;EACRC,SAASqB,KAAAA;EACTpB,MAAMoB,KAAAA;EACNnB,QAAQmB,KAAAA;EACRlB,SAASkB,KAAAA;EACTjB,OAAOiB,KAAAA;EACR,CAAC;AAEF/C,OAAM6D,mBAAmB;EACvB,MAAMC,oBAAoB,OAAOC,kBAAiC;GAChE,SAASC,YACPC,UAC0B;IAC1B,MAAMC,iBAAiBT,OAAOU,cAAcF,SAAS;IACrD,MAAMG,gBAAgBX,OAAOY,iBAAiBH,eAAenD,SAAS;AACtE,QAAIqD,cAAcE,eAAevB,KAAAA,EAC/B,QAAO;KACLpC,SAAS;KACTE,UAAUqD,eAAenD;KACzBA,UAAUmD,eAAenD;KACzBC,QAAQoD,cAAcG;KACtBrD,QAAQgD,eAAehD;KACxB;AAEH,WAAO;KACLP,SAASyD,cAAcE,WAAWE;KAClC3D,UAAUuD,cAAcE,WAAWzD;KACnCE,UAAUmD,eAAenD;KACzBC,QAAQoD,cAAcG;KACtBrD,QAAQgD,eAAehD;KACxB;;GAGH,MAAMQ,UAAUsC,YAAYD,cAAcU,gBAAgB;GAC1D,MAAM9C,OAAOqC,YAAYD,cAAcW,aAAa;AAEpD,OACEhD,QAAQf,YAAY,kBACpBgB,KAAKhB,YAAY,eAEjB,QAAO;GAGT,MAAMqC,cAAc,MAAMO,MAAMnB,cAAc;IAC5CR,QAAQmC,cAAcnC;IACtBF;IACAC;IACD,CAAC;AACF,OAAI,CAAC4B,MAAMhB,aACT,QAAOS;AAGT,OAAI,CAACA,YACH,QAAO;GAcT,MAAM6B,mBAAmB,MAXT,IAAI3C,SAAkB0C,YAAY;AAChDjB,gBAAY;KACVlC,QAAQ;KACRC;KACAC;KACAC,QAAQmC,cAAcnC;KACtBC,eAAe+C,QAAQ,MAAM;KAC7B9C,aAAa8C,QAAQ,KAAI;KAC1B,CAAC;KACF;AAGFjB,eAAY;IACVlC,QAAQ;IACRC,SAASqB,KAAAA;IACTpB,MAAMoB,KAAAA;IACNnB,QAAQmB,KAAAA;IACRlB,SAASkB,KAAAA;IACTjB,OAAOiB,KAAAA;IACR,CAAC;AAEF,UAAO8B;;EAGT,MAAMC,eAAevB,MAAMjB,WACvBS,KAAAA,IACAU,OAAOsB,QAAQC,MAAM;GACnBrC,WAAWmB;GACXzB,oBAAoBkB,MAAMlB;GAC3B,CAAC;AAENrC,QAAMiF,gBAAgBH,gBAAgB,CAAC;GACvC;AAEF,QAAOpB;;AAGT,IAAMwB,6BACJ3B,UACmB;AACnB,KAAI,mBAAmBA,MACrB,QAAOA;CAGT,MAAMP,cAAchD,MAAMmD,iBAAiBF,QAAQM,MAAMX,aAAa,KAAK,CAAC;CAE5E,MAAMM,mBAAmB,YAAY;AACnC,MAAIF,aAAa,IAAIO,MAAMZ,cAAcI,KAAAA,EACvC,QAAO,MAAMQ,MAAMZ,WAAW;AAEhC,SAAOK;;AAGT,QAAO;EACLZ,eAAec;EACf,IAAIb,qBAAqB;AACvB,UAAOW,aAAa;;EAEtB,IAAIT,eAAe;AACjB,UAAOgB,MAAMZ,cAAcI,KAAAA;;EAE9B;;AAgBH,IAAauC,QAAwB,SAASA,MAC5CxC,MACW;CACX,MAAM,CAACyC,mBAAmBC,QAAQxF,MAAMyF,WAAW3C,MAAM,CAAC,WAAW,CAAC;CAGtE,MAAMY,WAAWN,WAFJ8B,0BAA0BM,KAAK,CAEX;AAOjC,QAAAI,KANiB5F,MAAMmD,iBAAiB;EACtC,MAAMwC,QAAQJ,kBAAkBG;AAChC,MAAIhC,YAAY,OAAOiC,UAAU,WAAY,QAAOA,MAAMjC,UAAU,CAAC;AACrE,SAAOiC;GACP,CAEgB"}
@@ -107,19 +107,17 @@ export const Match = (props) => {
107
107
 
108
108
  {currentMatchState().parentRouteId === rootRouteId ? (<>
109
109
  <OnRendered />
110
- <ScrollRestoration />
110
+ {router.options.scrollRestoration &&
111
+ (isServer ?? router.isServer) ? (<ScrollRestoration />) : null}
111
112
  </>) : null}
112
113
  </ShellComponent>);
113
114
  }}
114
115
  </Solid.Show>);
115
116
  };
116
- // On Rendered can't happen above the root layout because it actually
117
- // renders a dummy dom element to track the rendered state of the app.
118
- // We render a script tag with a key that changes based on the current
119
- // location state.__TSR_key. Also, because it's below the root layout, it
120
- // allows us to fire onRendered events even after a hydration mismatch
121
- // error that occurred above the root layout (like bad head/link tags,
122
- // which is common).
117
+ // On Rendered can't happen above the root layout because it needs to run
118
+ // after the app has committed below the root layout. Keeping it here lets us
119
+ // fire onRendered even after a hydration mismatch above the root layout
120
+ // (like bad head/link tags, which is common).
123
121
  function OnRendered() {
124
122
  const router = useRouter();
125
123
  const location = Solid.createMemo(() => router.stores.resolvedLocation.state?.state.__TSR_key);
@@ -1 +1 @@
1
- {"version":3,"file":"Match.jsx","sourceRoot":"","sources":["../../src/Match.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Match.jsx","sourceRoot":"","sources":["../../src/Match.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { defaultGetScrollRestorationKey, getCssSelector, scrollRestorationCache, setupScrollRestoration, } from '@tanstack/router-core';
1
+ import { getElementScrollRestorationEntry, setupScrollRestoration, } from '@tanstack/router-core';
2
2
  import { useRouter } from './useRouter';
3
3
  function useScrollRestoration() {
4
4
  const router = useRouter();
@@ -16,22 +16,6 @@ export function ScrollRestoration(_props) {
16
16
  }
17
17
  export function useElementScrollRestoration(options) {
18
18
  useScrollRestoration();
19
- const router = useRouter();
20
- const getKey = options.getKey || defaultGetScrollRestorationKey;
21
- let elementSelector = '';
22
- if (options.id) {
23
- elementSelector = `[data-scroll-restoration-id="${options.id}"]`;
24
- }
25
- else {
26
- const element = options.getElement?.();
27
- if (!element) {
28
- return;
29
- }
30
- elementSelector =
31
- element instanceof Window ? 'window' : getCssSelector(element);
32
- }
33
- const restoreKey = getKey(router.latestLocation);
34
- const byKey = scrollRestorationCache?.state[restoreKey];
35
- return byKey?.[elementSelector];
19
+ return getElementScrollRestorationEntry(useRouter(), options);
36
20
  }
37
21
  //# sourceMappingURL=ScrollRestoration.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollRestoration.jsx","sourceRoot":"","sources":["../../src/ScrollRestoration.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,cAAc,EACd,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAOvC,SAAS,oBAAoB;IAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAgC;IAChE,oBAAoB,EAAE,CAAA;IAEtB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CACV,uGAAuG,CACxG,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAWC;IAED,oBAAoB,EAAE,CAAA;IAEtB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,8BAA8B,CAAA;IAE/D,IAAI,eAAe,GAAG,EAAE,CAAA;IAExB,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,eAAe,GAAG,gCAAgC,OAAO,CAAC,EAAE,IAAI,CAAA;IAClE,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,EAAE,CAAA;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAM;QACR,CAAC;QACD,eAAe;YACb,OAAO,YAAY,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAClE,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAChD,MAAM,KAAK,GAAG,sBAAsB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IACvD,OAAO,KAAK,EAAE,CAAC,eAAe,CAAC,CAAA;AACjC,CAAC"}
1
+ {"version":3,"file":"ScrollRestoration.jsx","sourceRoot":"","sources":["../../src/ScrollRestoration.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,sBAAsB,GACvB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAOvC,SAAS,oBAAoB;IAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAgC;IAChE,oBAAoB,EAAE,CAAA;IAEtB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CACV,uGAAuG,CACxG,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAWC;IAED,oBAAoB,EAAE,CAAA;IAEtB,OAAO,gCAAgC,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAA;AAC/D,CAAC"}
@@ -1,32 +1,12 @@
1
- import { defaultGetScrollRestorationKey, escapeHtml, restoreScroll, storageKey, } from '@tanstack/router-core';
2
- import { isServer } from '@tanstack/router-core/isServer';
1
+ import { getScrollRestorationScriptForRouter } from '@tanstack/router-core/scroll-restoration-script';
3
2
  import { useRouter } from './useRouter';
4
3
  import { ScriptOnce } from './ScriptOnce';
5
4
  export function ScrollRestoration() {
6
5
  const router = useRouter();
7
- if (!router.isScrollRestoring || !(isServer ?? router.isServer)) {
6
+ const script = getScrollRestorationScriptForRouter(router);
7
+ if (!script) {
8
8
  return null;
9
9
  }
10
- if (typeof router.options.scrollRestoration === 'function') {
11
- const shouldRestore = router.options.scrollRestoration({
12
- location: router.latestLocation,
13
- });
14
- if (!shouldRestore) {
15
- return null;
16
- }
17
- }
18
- const getKey = router.options.getScrollRestorationKey || defaultGetScrollRestorationKey;
19
- const userKey = getKey(router.latestLocation);
20
- const resolvedKey = userKey !== defaultGetScrollRestorationKey(router.latestLocation)
21
- ? userKey
22
- : undefined;
23
- const restoreScrollOptions = {
24
- storageKey,
25
- shouldScrollRestoration: true,
26
- };
27
- if (resolvedKey) {
28
- restoreScrollOptions.key = resolvedKey;
29
- }
30
- return (<ScriptOnce children={`(${restoreScroll.toString()})(${escapeHtml(JSON.stringify(restoreScrollOptions))})`}/>);
10
+ return <ScriptOnce children={script}/>;
31
11
  }
32
12
  //# sourceMappingURL=scroll-restoration.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-restoration.jsx","sourceRoot":"","sources":["../../src/scroll-restoration.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,UAAU,EACV,aAAa,EACb,UAAU,GACX,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;QAC3D,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACrD,QAAQ,EAAE,MAAM,CAAC,cAAc;SAChC,CAAC,CAAA;QACF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GACV,MAAM,CAAC,OAAO,CAAC,uBAAuB,IAAI,8BAA8B,CAAA;IAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAC7C,MAAM,WAAW,GACf,OAAO,KAAK,8BAA8B,CAAC,MAAM,CAAC,cAAc,CAAC;QAC/D,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,SAAS,CAAA;IAEf,MAAM,oBAAoB,GAAwC;QAChE,UAAU;QACV,uBAAuB,EAAE,IAAI;KAC9B,CAAA;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,oBAAoB,CAAC,GAAG,GAAG,WAAW,CAAA;IACxC,CAAC;IAED,OAAO,CACL,CAAC,UAAU,CACT,QAAQ,CAAC,CAAC,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,EAC/F,CACH,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"scroll-restoration.jsx","sourceRoot":"","sources":["../../src/scroll-restoration.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,iDAAiD,CAAA;AACrG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,MAAM,GAAG,mCAAmC,CAAC,MAAM,CAAC,CAAA;IAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAG,CAAA;AACzC,CAAC"}
@@ -2,13 +2,13 @@ import * as Solid from 'solid-js';
2
2
  import type { HistoryAction } from '@tanstack/history';
3
3
  import type { SolidNode } from './route';
4
4
  import type { AnyRoute, AnyRouter, ParseRoute, RegisteredRouter } from '@tanstack/router-core';
5
- interface ShouldBlockFnLocation<out TRouteId, out TFullPath, out TAllParams, out TFullSearchSchema> {
5
+ type ShouldBlockFnLocation<out TRouteId, out TFullPath, out TAllParams, out TFullSearchSchema> = {
6
6
  routeId: TRouteId;
7
7
  fullPath: TFullPath;
8
8
  pathname: string;
9
9
  params: TAllParams;
10
10
  search: TFullSearchSchema;
11
- }
11
+ };
12
12
  type MakeShouldBlockFnLocationUnion<TRouter extends AnyRouter = RegisteredRouter, TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>> = TRoute extends any ? ShouldBlockFnLocation<TRoute['id'], TRoute['fullPath'], TRoute['types']['allParams'], TRoute['types']['fullSearchSchema']> : never;
13
13
  type BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> = {
14
14
  status: 'blocked';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-router",
3
- "version": "1.168.4",
3
+ "version": "1.168.6",
4
4
  "description": "Modern and scalable routing for Solid applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -91,8 +91,8 @@
91
91
  "@solid-primitives/refs": "^1.0.8",
92
92
  "@solidjs/meta": "^0.29.4",
93
93
  "isbot": "^5.1.22",
94
- "@tanstack/history": "1.161.6",
95
- "@tanstack/router-core": "1.168.4"
94
+ "@tanstack/router-core": "1.168.6",
95
+ "@tanstack/history": "1.161.6"
96
96
  },
97
97
  "devDependencies": {
98
98
  "@solidjs/testing-library": "^0.8.10",
package/src/Match.tsx CHANGED
@@ -170,7 +170,10 @@ export const Match = (props: { matchId: string }) => {
170
170
  {currentMatchState().parentRouteId === rootRouteId ? (
171
171
  <>
172
172
  <OnRendered />
173
- <ScrollRestoration />
173
+ {router.options.scrollRestoration &&
174
+ (isServer ?? router.isServer) ? (
175
+ <ScrollRestoration />
176
+ ) : null}
174
177
  </>
175
178
  ) : null}
176
179
  </ShellComponent>
@@ -180,13 +183,10 @@ export const Match = (props: { matchId: string }) => {
180
183
  )
181
184
  }
182
185
 
183
- // On Rendered can't happen above the root layout because it actually
184
- // renders a dummy dom element to track the rendered state of the app.
185
- // We render a script tag with a key that changes based on the current
186
- // location state.__TSR_key. Also, because it's below the root layout, it
187
- // allows us to fire onRendered events even after a hydration mismatch
188
- // error that occurred above the root layout (like bad head/link tags,
189
- // which is common).
186
+ // On Rendered can't happen above the root layout because it needs to run
187
+ // after the app has committed below the root layout. Keeping it here lets us
188
+ // fire onRendered even after a hydration mismatch above the root layout
189
+ // (like bad head/link tags, which is common).
190
190
  function OnRendered() {
191
191
  const router = useRouter()
192
192
 
@@ -1,7 +1,5 @@
1
1
  import {
2
- defaultGetScrollRestorationKey,
3
- getCssSelector,
4
- scrollRestorationCache,
2
+ getElementScrollRestorationEntry,
5
3
  setupScrollRestoration,
6
4
  } from '@tanstack/router-core'
7
5
  import { useRouter } from './useRouter'
@@ -47,23 +45,5 @@ export function useElementScrollRestoration(
47
45
  ): ScrollRestorationEntry | undefined {
48
46
  useScrollRestoration()
49
47
 
50
- const router = useRouter()
51
- const getKey = options.getKey || defaultGetScrollRestorationKey
52
-
53
- let elementSelector = ''
54
-
55
- if (options.id) {
56
- elementSelector = `[data-scroll-restoration-id="${options.id}"]`
57
- } else {
58
- const element = options.getElement?.()
59
- if (!element) {
60
- return
61
- }
62
- elementSelector =
63
- element instanceof Window ? 'window' : getCssSelector(element)
64
- }
65
-
66
- const restoreKey = getKey(router.latestLocation)
67
- const byKey = scrollRestorationCache?.state[restoreKey]
68
- return byKey?.[elementSelector]
48
+ return getElementScrollRestorationEntry(useRouter(), options)
69
49
  }
@@ -1,45 +1,14 @@
1
- import {
2
- defaultGetScrollRestorationKey,
3
- escapeHtml,
4
- restoreScroll,
5
- storageKey,
6
- } from '@tanstack/router-core'
7
- import { isServer } from '@tanstack/router-core/isServer'
1
+ import { getScrollRestorationScriptForRouter } from '@tanstack/router-core/scroll-restoration-script'
8
2
  import { useRouter } from './useRouter'
9
3
  import { ScriptOnce } from './ScriptOnce'
10
4
 
11
5
  export function ScrollRestoration() {
12
6
  const router = useRouter()
13
- if (!router.isScrollRestoring || !(isServer ?? router.isServer)) {
14
- return null
15
- }
16
- if (typeof router.options.scrollRestoration === 'function') {
17
- const shouldRestore = router.options.scrollRestoration({
18
- location: router.latestLocation,
19
- })
20
- if (!shouldRestore) {
21
- return null
22
- }
23
- }
24
- const getKey =
25
- router.options.getScrollRestorationKey || defaultGetScrollRestorationKey
26
- const userKey = getKey(router.latestLocation)
27
- const resolvedKey =
28
- userKey !== defaultGetScrollRestorationKey(router.latestLocation)
29
- ? userKey
30
- : undefined
7
+ const script = getScrollRestorationScriptForRouter(router)
31
8
 
32
- const restoreScrollOptions: Parameters<typeof restoreScroll>[0] = {
33
- storageKey,
34
- shouldScrollRestoration: true,
35
- }
36
- if (resolvedKey) {
37
- restoreScrollOptions.key = resolvedKey
9
+ if (!script) {
10
+ return null
38
11
  }
39
12
 
40
- return (
41
- <ScriptOnce
42
- children={`(${restoreScroll.toString()})(${escapeHtml(JSON.stringify(restoreScrollOptions))})`}
43
- />
44
- )
13
+ return <ScriptOnce children={script} />
45
14
  }
@@ -13,12 +13,12 @@ import type {
13
13
  RegisteredRouter,
14
14
  } from '@tanstack/router-core'
15
15
 
16
- interface ShouldBlockFnLocation<
16
+ type ShouldBlockFnLocation<
17
17
  out TRouteId,
18
18
  out TFullPath,
19
19
  out TAllParams,
20
20
  out TFullSearchSchema,
21
- > {
21
+ > = {
22
22
  routeId: TRouteId
23
23
  fullPath: TFullPath
24
24
  pathname: string