@tanstack/solid-router 1.134.10 → 1.134.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Match.cjs +24 -14
- package/dist/cjs/Match.cjs.map +1 -1
- package/dist/cjs/Transitioner.cjs +9 -4
- package/dist/cjs/Transitioner.cjs.map +1 -1
- package/dist/cjs/useMatch.cjs +18 -5
- package/dist/cjs/useMatch.cjs.map +1 -1
- package/dist/esm/Match.js +24 -14
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Transitioner.js +9 -4
- package/dist/esm/Transitioner.js.map +1 -1
- package/dist/esm/useMatch.js +18 -5
- package/dist/esm/useMatch.js.map +1 -1
- package/dist/source/Match.jsx +34 -21
- package/dist/source/Match.jsx.map +1 -1
- package/dist/source/Transitioner.jsx +10 -4
- package/dist/source/Transitioner.jsx.map +1 -1
- package/dist/source/useMatch.jsx +21 -5
- package/dist/source/useMatch.jsx.map +1 -1
- package/package.json +2 -2
- package/src/Match.tsx +54 -36
- package/src/Transitioner.tsx +10 -4
- package/src/useMatch.tsx +33 -9
package/dist/cjs/Match.cjs
CHANGED
|
@@ -35,7 +35,9 @@ const Match = (props) => {
|
|
|
35
35
|
const matchState = useRouterState.useRouterState({
|
|
36
36
|
select: (s) => {
|
|
37
37
|
const match = s.matches.find((d) => d.id === props.matchId);
|
|
38
|
-
|
|
38
|
+
if (!match) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
39
41
|
return {
|
|
40
42
|
routeId: match.routeId,
|
|
41
43
|
ssr: match.ssr,
|
|
@@ -43,8 +45,9 @@ const Match = (props) => {
|
|
|
43
45
|
};
|
|
44
46
|
}
|
|
45
47
|
});
|
|
48
|
+
if (!matchState()) return null;
|
|
46
49
|
const route = () => router.routesById[matchState().routeId];
|
|
47
|
-
const
|
|
50
|
+
const resolvePendingComponent = () => route().options.pendingComponent ?? router.options.defaultPendingComponent;
|
|
48
51
|
const routeErrorComponent = () => route().options.errorComponent ?? router.options.defaultErrorComponent;
|
|
49
52
|
const routeOnCatch = () => route().options.onCatch ?? router.options.defaultOnCatch;
|
|
50
53
|
const routeNotFoundComponent = () => route().isRoot ? (
|
|
@@ -52,10 +55,7 @@ const Match = (props) => {
|
|
|
52
55
|
route().options.notFoundComponent ?? router.options.notFoundRoute?.options.component
|
|
53
56
|
) : route().options.notFoundComponent;
|
|
54
57
|
const resolvedNoSsr = matchState().ssr === false || matchState().ssr === "data-only";
|
|
55
|
-
const ResolvedSuspenseBoundary = () =>
|
|
56
|
-
// If we're on the root route, allow forcefully wrapping in suspense
|
|
57
|
-
(!route().isRoot || route().options.wrapInSuspense || resolvedNoSsr || matchState()._displayPending) && (route().options.wrapInSuspense ?? PendingComponent() ?? (route().options.errorComponent?.preload || resolvedNoSsr)) ? Solid__namespace.Suspense : SafeFragment.SafeFragment
|
|
58
|
-
);
|
|
58
|
+
const ResolvedSuspenseBoundary = () => Solid__namespace.Suspense;
|
|
59
59
|
const ResolvedCatchBoundary = () => routeErrorComponent() ? CatchBoundary.CatchBoundary : SafeFragment.SafeFragment;
|
|
60
60
|
const ResolvedNotFoundBoundary = () => routeNotFoundComponent() ? notFound.CatchNotFound : SafeFragment.SafeFragment;
|
|
61
61
|
const resetKey = useRouterState.useRouterState({
|
|
@@ -82,7 +82,7 @@ const Match = (props) => {
|
|
|
82
82
|
// Don't show fallback on server when using no-ssr mode to avoid hydration mismatch
|
|
83
83
|
Solid.memo(() => !!(router.isServer || resolvedNoSsr))() ? void 0 : Solid.createComponent(Solid.Dynamic, {
|
|
84
84
|
get component() {
|
|
85
|
-
return
|
|
85
|
+
return resolvePendingComponent();
|
|
86
86
|
}
|
|
87
87
|
})
|
|
88
88
|
);
|
|
@@ -127,7 +127,7 @@ const Match = (props) => {
|
|
|
127
127
|
get fallback() {
|
|
128
128
|
return Solid.createComponent(Solid.Dynamic, {
|
|
129
129
|
get component() {
|
|
130
|
-
return
|
|
130
|
+
return resolvePendingComponent();
|
|
131
131
|
}
|
|
132
132
|
});
|
|
133
133
|
},
|
|
@@ -183,6 +183,9 @@ const MatchInner = (props) => {
|
|
|
183
183
|
const matchState = useRouterState.useRouterState({
|
|
184
184
|
select: (s) => {
|
|
185
185
|
const match2 = s.matches.find((d) => d.id === props.matchId);
|
|
186
|
+
if (!match2) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
186
189
|
const routeId = match2.routeId;
|
|
187
190
|
const remountFn = router.routesById[routeId].options.remountDeps ?? router.options.defaultRemountDeps;
|
|
188
191
|
const remountDeps = remountFn?.({
|
|
@@ -205,6 +208,7 @@ const MatchInner = (props) => {
|
|
|
205
208
|
};
|
|
206
209
|
}
|
|
207
210
|
});
|
|
211
|
+
if (!matchState()) return null;
|
|
208
212
|
const route = () => router.routesById[matchState().routeId];
|
|
209
213
|
const match = () => matchState().match;
|
|
210
214
|
const componentKey = () => matchState().key ?? matchState().match.id;
|
|
@@ -263,7 +267,10 @@ const MatchInner = (props) => {
|
|
|
263
267
|
await new Promise((r) => setTimeout(r, 0));
|
|
264
268
|
return router.getMatch(match().id)?._nonReactive.loadPromise;
|
|
265
269
|
});
|
|
266
|
-
|
|
270
|
+
const FallbackComponent = route().options.pendingComponent ?? router.options.defaultPendingComponent;
|
|
271
|
+
return [FallbackComponent ? Solid.createComponent(Solid.Dynamic, {
|
|
272
|
+
component: FallbackComponent
|
|
273
|
+
}) : null, Solid.memo(loaderResult)];
|
|
267
274
|
}
|
|
268
275
|
}), Solid.createComponent(Solid__namespace.Match, {
|
|
269
276
|
get when() {
|
|
@@ -325,7 +332,9 @@ const Outlet = () => {
|
|
|
325
332
|
select: (s) => {
|
|
326
333
|
const matches = s.matches;
|
|
327
334
|
const parentMatch = matches.find((d) => d.id === matchId());
|
|
328
|
-
|
|
335
|
+
if (!parentMatch) {
|
|
336
|
+
return false;
|
|
337
|
+
}
|
|
329
338
|
return parentMatch.globalNotFound;
|
|
330
339
|
}
|
|
331
340
|
});
|
|
@@ -359,15 +368,16 @@ const Outlet = () => {
|
|
|
359
368
|
}
|
|
360
369
|
});
|
|
361
370
|
},
|
|
362
|
-
children: (
|
|
371
|
+
children: (matchIdAccessor) => {
|
|
372
|
+
const currentMatchId = Solid__namespace.createMemo(() => matchIdAccessor());
|
|
363
373
|
return Solid.createComponent(Solid__namespace.Show, {
|
|
364
374
|
get when() {
|
|
365
|
-
return
|
|
375
|
+
return currentMatchId() === routerCore.rootRouteId;
|
|
366
376
|
},
|
|
367
377
|
get fallback() {
|
|
368
378
|
return Solid.createComponent(Match, {
|
|
369
379
|
get matchId() {
|
|
370
|
-
return
|
|
380
|
+
return currentMatchId();
|
|
371
381
|
}
|
|
372
382
|
});
|
|
373
383
|
},
|
|
@@ -383,7 +393,7 @@ const Outlet = () => {
|
|
|
383
393
|
get children() {
|
|
384
394
|
return Solid.createComponent(Match, {
|
|
385
395
|
get matchId() {
|
|
386
|
-
return
|
|
396
|
+
return currentMatchId();
|
|
387
397
|
}
|
|
388
398
|
});
|
|
389
399
|
}
|
package/dist/cjs/Match.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Match.cjs","sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n isNotFound,\n isRedirect,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { Dynamic } from 'solid-js/web'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound } from './not-found'\nimport { matchContext } 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 const matchState = useRouterState({\n select: (s) => {\n const match = s.matches.find((d) => d.id === props.matchId)\n\n invariant(\n match,\n `Could not find match for matchId \"${props.matchId}\". Please file an issue!`,\n )\n return {\n routeId: match.routeId,\n ssr: match.ssr,\n _displayPending: match._displayPending,\n }\n },\n })\n\n const route: () => AnyRoute = () => router.routesById[matchState().routeId]\n\n const PendingComponent = () =>\n route().options.pendingComponent ?? 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 matchState().ssr === false || matchState().ssr === 'data-only'\n\n const ResolvedSuspenseBoundary = () =>\n // If we're on the root route, allow forcefully wrapping in suspense\n (!route().isRoot ||\n route().options.wrapInSuspense ||\n resolvedNoSsr ||\n matchState()._displayPending) &&\n (route().options.wrapInSuspense ??\n PendingComponent() ??\n ((route().options.errorComponent as any)?.preload || resolvedNoSsr))\n ? Solid.Suspense\n : SafeFragment\n\n const ResolvedCatchBoundary = () =>\n routeErrorComponent() ? CatchBoundary : SafeFragment\n\n const ResolvedNotFoundBoundary = () =>\n routeNotFoundComponent() ? CatchNotFound : SafeFragment\n\n const resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n const parentRouteId = useRouterState({\n select: (s) => {\n const index = s.matches.findIndex((d) => d.id === props.matchId)\n return s.matches[index - 1]?.routeId as string\n },\n })\n\n const ShellComponent = route().isRoot\n ? ((route().options as RootRouteOptions).shellComponent ?? SafeFragment)\n : SafeFragment\n\n return (\n <ShellComponent>\n <matchContext.Provider value={() => props.matchId}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={\n // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch\n router.isServer || resolvedNoSsr ? undefined : (\n <Dynamic component={PendingComponent()} />\n )\n }\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => resetKey()}\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 warning(false, `Error in route match: ${props.matchId}`)\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 && error.routeId !== matchState().routeId) ||\n (!error.routeId && !route().isRoot)\n )\n throw error\n\n return (\n <Dynamic component={routeNotFoundComponent()} {...error} />\n )\n }}\n >\n <Solid.Switch>\n <Solid.Match when={resolvedNoSsr}>\n <Solid.Show\n when={!router.isServer}\n fallback={<Dynamic component={PendingComponent()} />}\n >\n <MatchInner matchId={props.matchId} />\n </Solid.Show>\n </Solid.Match>\n <Solid.Match when={!resolvedNoSsr}>\n <MatchInner matchId={props.matchId} />\n </Solid.Match>\n </Solid.Switch>\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </matchContext.Provider>\n\n {parentRouteId() === rootRouteId ? (\n <>\n <OnRendered />\n <ScrollRestoration />\n </>\n ) : null}\n </ShellComponent>\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 = useRouterState({\n select: (s) => {\n return s.resolvedLocation?.state.__TSR_key\n },\n })\n Solid.createEffect(\n Solid.on([location], () => {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(router.state),\n })\n }),\n )\n return null\n}\n\nexport const MatchInner = (props: { matchId: string }): any => {\n const router = useRouter()\n\n const matchState = useRouterState({\n select: (s) => {\n const match = s.matches.find((d) => d.id === props.matchId)!\n const routeId = match.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: match.loaderDeps,\n params: match._strictParams,\n search: match._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n\n return {\n key,\n routeId,\n match: {\n id: match.id,\n status: match.status,\n error: match.error,\n _forcePending: match._forcePending,\n _displayPending: match._displayPending,\n },\n }\n },\n })\n\n const route = () => router.routesById[matchState().routeId]!\n\n const match = () => matchState().match\n\n const componentKey = () => matchState().key ?? matchState().match.id\n\n const out = () => {\n const Comp = 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={match()._displayPending}>\n {(_) => {\n const [displayPendingResult] = Solid.createResource(\n () =>\n router.getMatch(match().id)?._nonReactive.displayPendingPromise,\n )\n\n return <>{displayPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match()._forcePending}>\n {(_) => {\n const [minPendingResult] = Solid.createResource(\n () => router.getMatch(match().id)?._nonReactive.minPendingPromise,\n )\n\n return <>{minPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'pending'}>\n {(_) => {\n const pendingMinMs =\n route().options.pendingMinMs ?? router.options.defaultPendingMinMs\n\n if (pendingMinMs) {\n const routerMatch = router.getMatch(match().id)\n if (routerMatch && !routerMatch._nonReactive.minPendingPromise) {\n // Create a promise that will resolve after the minPendingMs\n if (!router.isServer) {\n const minPendingPromise = createControlledPromise<void>()\n\n routerMatch._nonReactive.minPendingPromise = 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(match().id)?._nonReactive.loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'notFound'}>\n {(_) => {\n invariant(isNotFound(match().error), 'Expected a notFound error')\n\n return renderRouteNotFound(router, route(), match().error)\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'redirected'}>\n {(_) => {\n invariant(isRedirect(match().error), 'Expected a redirect error')\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(match().id)?._nonReactive.loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'error'}>\n {(_) => {\n if (router.isServer) {\n const RouteErrorComponent =\n (route().options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n\n return (\n <RouteErrorComponent\n error={match().error}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw match().error\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'success'}>\n {keyedOut()}\n </Solid.Match>\n </Solid.Switch>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const matchId = Solid.useContext(matchContext)\n const routeId = useRouterState({\n select: (s) => s.matches.find((d) => d.id === matchId())?.routeId as string,\n })\n\n const route = () => router.routesById[routeId()]!\n\n const parentGlobalNotFound = useRouterState({\n select: (s) => {\n const matches = s.matches\n const parentMatch = matches.find((d) => d.id === matchId())\n invariant(\n parentMatch,\n `Could not find parent match for matchId \"${matchId()}\"`,\n )\n return parentMatch.globalNotFound\n },\n })\n\n const childMatchId = useRouterState({\n select: (s) => {\n const matches = s.matches\n const index = matches.findIndex((d) => d.id === matchId())\n const v = matches[index + 1]?.id\n return v\n },\n })\n\n const childMatchStatus = useRouterState({\n select: (s) => {\n const matches = s.matches\n const index = matches.findIndex((d) => d.id === matchId())\n return matches[index + 1]?.status\n },\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()}>\n {renderRouteNotFound(router, route(), undefined)}\n </Solid.Show>\n }\n >\n {(matchId) => {\n // const nextMatch = <Match matchId={matchId()} />\n\n return (\n <Solid.Show\n when={matchId() === rootRouteId}\n fallback={<Match matchId={matchId()} />}\n >\n <Solid.Suspense\n fallback={\n <Dynamic component={router.options.defaultPendingComponent} />\n }\n >\n <Match matchId={matchId()} />\n </Solid.Suspense>\n </Solid.Show>\n )\n }}\n </Solid.Show>\n )\n}\n"],"names":["Match","props","router","useRouter","matchState","useRouterState","select","s","match","matches","find","d","id","matchId","invariant","routeId","ssr","_displayPending","route","routesById","PendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","ResolvedSuspenseBoundary","wrapInSuspense","preload","Solid","Suspense","SafeFragment","ResolvedCatchBoundary","CatchBoundary","ResolvedNotFoundBoundary","CatchNotFound","resetKey","loadedAt","parentRouteId","index","findIndex","ShellComponent","shellComponent","_$createComponent","children","matchContext","Provider","value","Dynamic","fallback","_$memo","isServer","undefined","getResetKey","ErrorComponent","error","isNotFound","warning","_$mergeProps","Switch","when","Show","MatchInner","rootRouteId","OnRendered","ScrollRestoration","location","resolvedLocation","state","__TSR_key","createEffect","on","emit","type","getLocationChangeInfo","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","createControlledPromise","setTimeout","resolve","loaderResult","Promise","r","loadPromise","renderRouteNotFound","isRedirect","RouteErrorComponent","info","componentStack","useContext","parentGlobalNotFound","parentMatch","globalNotFound","childMatchId","v","childMatchStatus","shouldShowNotFound"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Match.cjs","sources":["../../src/Match.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport warning from 'tiny-warning'\nimport {\n createControlledPromise,\n getLocationChangeInfo,\n isNotFound,\n isRedirect,\n rootRouteId,\n} from '@tanstack/router-core'\nimport { Dynamic } from 'solid-js/web'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { CatchNotFound } from './not-found'\nimport { matchContext } 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 const matchState = useRouterState({\n select: (s) => {\n const match = s.matches.find((d) => d.id === props.matchId)\n\n // During navigation transitions, matches can be temporarily removed\n // Return null to avoid errors - the component will handle this gracefully\n if (!match) {\n return null\n }\n\n return {\n routeId: match.routeId,\n ssr: match.ssr,\n _displayPending: match._displayPending,\n }\n },\n })\n\n // If match doesn't exist yet, return null (component is being unmounted or not ready)\n if (!matchState()) return null\n\n const route: () => AnyRoute = () => router.routesById[matchState()!.routeId]\n\n const resolvePendingComponent = () =>\n route().options.pendingComponent ?? 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 matchState()!.ssr === false || matchState()!.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 resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n const parentRouteId = useRouterState({\n select: (s) => {\n const index = s.matches.findIndex((d) => d.id === props.matchId)\n return s.matches[index - 1]?.routeId as string\n },\n })\n\n const ShellComponent = route().isRoot\n ? ((route().options as RootRouteOptions).shellComponent ?? SafeFragment)\n : SafeFragment\n\n return (\n <ShellComponent>\n <matchContext.Provider value={() => props.matchId}>\n <Dynamic\n component={ResolvedSuspenseBoundary()}\n fallback={\n // Don't show fallback on server when using no-ssr mode to avoid hydration mismatch\n router.isServer || resolvedNoSsr ? undefined : (\n <Dynamic component={resolvePendingComponent()} />\n )\n }\n >\n <Dynamic\n component={ResolvedCatchBoundary()}\n getResetKey={() => resetKey()}\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 warning(false, `Error in route match: ${props.matchId}`)\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 && error.routeId !== matchState()!.routeId) ||\n (!error.routeId && !route().isRoot)\n )\n throw error\n\n return (\n <Dynamic component={routeNotFoundComponent()} {...error} />\n )\n }}\n >\n <Solid.Switch>\n <Solid.Match when={resolvedNoSsr}>\n <Solid.Show\n when={!router.isServer}\n fallback={<Dynamic component={resolvePendingComponent()} />}\n >\n <MatchInner matchId={props.matchId} />\n </Solid.Show>\n </Solid.Match>\n <Solid.Match when={!resolvedNoSsr}>\n <MatchInner matchId={props.matchId} />\n </Solid.Match>\n </Solid.Switch>\n </Dynamic>\n </Dynamic>\n </Dynamic>\n </matchContext.Provider>\n\n {parentRouteId() === rootRouteId ? (\n <>\n <OnRendered />\n <ScrollRestoration />\n </>\n ) : null}\n </ShellComponent>\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 = useRouterState({\n select: (s) => {\n return s.resolvedLocation?.state.__TSR_key\n },\n })\n Solid.createEffect(\n Solid.on([location], () => {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(router.state),\n })\n }),\n )\n return null\n}\n\nexport const MatchInner = (props: { matchId: string }): any => {\n const router = useRouter()\n\n const matchState = useRouterState({\n select: (s) => {\n const match = s.matches.find((d) => d.id === props.matchId)\n\n // During navigation transitions, matches can be temporarily removed\n if (!match) {\n return null\n }\n\n const routeId = match.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: match.loaderDeps,\n params: match._strictParams,\n search: match._strictSearch,\n })\n const key = remountDeps ? JSON.stringify(remountDeps) : undefined\n\n return {\n key,\n routeId,\n match: {\n id: match.id,\n status: match.status,\n error: match.error,\n _forcePending: match._forcePending,\n _displayPending: match._displayPending,\n },\n }\n },\n })\n\n if (!matchState()) return null\n\n const route = () => router.routesById[matchState()!.routeId]!\n\n const match = () => matchState()!.match\n\n const componentKey = () => matchState()!.key ?? matchState()!.match.id\n\n const out = () => {\n const Comp = 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={match()._displayPending}>\n {(_) => {\n const [displayPendingResult] = Solid.createResource(\n () =>\n router.getMatch(match().id)?._nonReactive.displayPendingPromise,\n )\n\n return <>{displayPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match()._forcePending}>\n {(_) => {\n const [minPendingResult] = Solid.createResource(\n () => router.getMatch(match().id)?._nonReactive.minPendingPromise,\n )\n\n return <>{minPendingResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'pending'}>\n {(_) => {\n const pendingMinMs =\n route().options.pendingMinMs ?? router.options.defaultPendingMinMs\n\n if (pendingMinMs) {\n const routerMatch = router.getMatch(match().id)\n if (routerMatch && !routerMatch._nonReactive.minPendingPromise) {\n // Create a promise that will resolve after the minPendingMs\n if (!router.isServer) {\n const minPendingPromise = createControlledPromise<void>()\n\n routerMatch._nonReactive.minPendingPromise = 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(match().id)?._nonReactive.loadPromise\n })\n\n const FallbackComponent =\n route().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n return (\n <>\n {FallbackComponent ? (\n <Dynamic component={FallbackComponent} />\n ) : null}\n {loaderResult()}\n </>\n )\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'notFound'}>\n {(_) => {\n invariant(isNotFound(match().error), 'Expected a notFound error')\n\n return renderRouteNotFound(router, route(), match().error)\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'redirected'}>\n {(_) => {\n invariant(isRedirect(match().error), 'Expected a redirect error')\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(match().id)?._nonReactive.loadPromise\n })\n\n return <>{loaderResult()}</>\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'error'}>\n {(_) => {\n if (router.isServer) {\n const RouteErrorComponent =\n (route().options.errorComponent ??\n router.options.defaultErrorComponent) ||\n ErrorComponent\n\n return (\n <RouteErrorComponent\n error={match().error}\n info={{\n componentStack: '',\n }}\n />\n )\n }\n\n throw match().error\n }}\n </Solid.Match>\n <Solid.Match when={match().status === 'success'}>\n {keyedOut()}\n </Solid.Match>\n </Solid.Switch>\n )\n}\n\nexport const Outlet = () => {\n const router = useRouter()\n const matchId = Solid.useContext(matchContext)\n const routeId = useRouterState({\n select: (s) => s.matches.find((d) => d.id === matchId())?.routeId as string,\n })\n\n const route = () => router.routesById[routeId()]!\n\n const parentGlobalNotFound = useRouterState({\n select: (s) => {\n const matches = s.matches\n const parentMatch = matches.find((d) => d.id === matchId())\n\n // During navigation transitions, parent match can be temporarily removed\n // Return false to avoid errors - the component will handle this gracefully\n if (!parentMatch) {\n return false\n }\n\n return parentMatch.globalNotFound\n },\n })\n\n const childMatchId = useRouterState({\n select: (s) => {\n const matches = s.matches\n const index = matches.findIndex((d) => d.id === matchId())\n const v = matches[index + 1]?.id\n return v\n },\n })\n\n const childMatchStatus = useRouterState({\n select: (s) => {\n const matches = s.matches\n const index = matches.findIndex((d) => d.id === matchId())\n return matches[index + 1]?.status\n },\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()}>\n {renderRouteNotFound(router, route(), undefined)}\n </Solid.Show>\n }\n >\n {(matchIdAccessor) => {\n // Use a memo to avoid stale accessor errors while keeping reactivity\n const currentMatchId = Solid.createMemo(() => matchIdAccessor())\n\n return (\n <Solid.Show\n when={currentMatchId() === 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"],"names":["Match","props","router","useRouter","matchState","useRouterState","select","s","match","matches","find","d","id","matchId","routeId","ssr","_displayPending","route","routesById","resolvePendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","ResolvedSuspenseBoundary","Solid","Suspense","ResolvedCatchBoundary","CatchBoundary","SafeFragment","ResolvedNotFoundBoundary","CatchNotFound","resetKey","loadedAt","parentRouteId","index","findIndex","ShellComponent","shellComponent","_$createComponent","children","matchContext","Provider","value","Dynamic","fallback","_$memo","isServer","undefined","getResetKey","ErrorComponent","error","isNotFound","warning","_$mergeProps","Switch","when","Show","MatchInner","rootRouteId","OnRendered","ScrollRestoration","location","resolvedLocation","state","__TSR_key","createEffect","on","emit","type","getLocationChangeInfo","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","createControlledPromise","setTimeout","resolve","loaderResult","Promise","r","loadPromise","FallbackComponent","invariant","renderRouteNotFound","isRedirect","RouteErrorComponent","info","componentStack","useContext","parentGlobalNotFound","parentMatch","globalNotFound","childMatchId","v","childMatchStatus","shouldShowNotFound","matchIdAccessor","currentMatchId","createMemo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBO,MAAMA,QAAQA,CAACC,UAA+B;AACnD,QAAMC,SAASC,UAAAA,UAAAA;AACf,QAAMC,aAAaC,eAAAA,eAAe;AAAA,IAChCC,QAASC,CAAAA,MAAM;AACb,YAAMC,QAAQD,EAAEE,QAAQC,KAAMC,OAAMA,EAAEC,OAAOX,MAAMY,OAAO;AAI1D,UAAI,CAACL,OAAO;AACV,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACLM,SAASN,MAAMM;AAAAA,QACfC,KAAKP,MAAMO;AAAAA,QACXC,iBAAiBR,MAAMQ;AAAAA,MAAAA;AAAAA,IAE3B;AAAA,EAAA,CACD;AAGD,MAAI,CAACZ,WAAAA,EAAc,QAAO;AAE1B,QAAMa,QAAwBA,MAAMf,OAAOgB,WAAWd,WAAAA,EAAcU,OAAO;AAE3E,QAAMK,0BAA0BA,MAC9BF,MAAAA,EAAQG,QAAQC,oBAAoBnB,OAAOkB,QAAQE;AAErD,QAAMC,sBAAsBA,MAC1BN,MAAAA,EAAQG,QAAQI,kBAAkBtB,OAAOkB,QAAQK;AAEnD,QAAMC,eAAeA,MACnBT,MAAAA,EAAQG,QAAQO,WAAWzB,OAAOkB,QAAQQ;AAE5C,QAAMC,yBAAyBA,MAC7BZ,MAAAA,EAAQa;AAAAA;AAAAA,IAEHb,QAAQG,QAAQW,qBACjB7B,OAAOkB,QAAQY,eAAeZ,QAAQa;AAAAA,MACtChB,MAAAA,EAAQG,QAAQW;AAEtB,QAAMG,gBACJ9B,aAAcW,QAAQ,SAASX,WAAAA,EAAcW,QAAQ;AAEvD,QAAMoB,2BAA2BA,MAAMC,iBAAMC;AAE7C,QAAMC,wBAAwBA,MAC5Bf,oBAAAA,IAAwBgB,cAAAA,gBAAgBC,aAAAA;AAE1C,QAAMC,2BAA2BA,MAC/BZ,uBAAAA,IAA2Ba,SAAAA,gBAAgBF,aAAAA;AAE7C,QAAMG,WAAWtC,eAAAA,eAAe;AAAA,IAC9BC,QAASC,OAAMA,EAAEqC;AAAAA,EAAAA,CAClB;AAED,QAAMC,gBAAgBxC,eAAAA,eAAe;AAAA,IACnCC,QAASC,CAAAA,MAAM;AACb,YAAMuC,QAAQvC,EAAEE,QAAQsC,UAAWpC,OAAMA,EAAEC,OAAOX,MAAMY,OAAO;AAC/D,aAAON,EAAEE,QAAQqC,QAAQ,CAAC,GAAGhC;AAAAA,IAC/B;AAAA,EAAA,CACD;AAED,QAAMkC,iBAAiB/B,QAAQa,SACzBb,QAAQG,QAA6B6B,kBAAkBT,aAAAA,eACzDA,aAAAA;AAEJ,SAAAU,MAAAA,gBACGF,gBAAc;AAAA,IAAA,IAAAG,WAAA;AAAA,aAAA,CAAAD,MAAAA,gBACZE,aAAAA,aAAaC,UAAQ;AAAA,QAACC,OAAOA,MAAMrD,MAAMY;AAAAA,QAAO,IAAAsC,WAAA;AAAA,iBAAAD,MAAAA,gBAC9CK,MAAAA,SAAO;AAAA,YAAA,IACNtB,YAAS;AAAA,qBAAEE,yBAAAA;AAAAA,YAA0B;AAAA,YAAA,IACrCqB,WAAQ;AAAA;AAAA;AAAA,gBAENC,WAAA,MAAA,CAAA,EAAAvD,OAAOwD,YAAYxB,cAAa,MAAGyB,SAAST,MAAAA,gBACzCK,eAAO;AAAA,kBAAA,IAACtB,YAAS;AAAA,2BAAEd,wBAAAA;AAAAA,kBAAyB;AAAA,gBAAA,CAAA;AAAA;AAAA,YAC9C;AAAA,YAAA,IAAAgC,WAAA;AAAA,qBAAAD,MAAAA,gBAGFK,MAAAA,SAAO;AAAA,gBAAA,IACNtB,YAAS;AAAA,yBAAEK,sBAAAA;AAAAA,gBAAuB;AAAA,gBAClCsB,aAAaA,MAAMjB,SAAAA;AAAAA,gBAAU,IAC7BnB,iBAAc;AAAA,yBAAED,yBAAyBsC,cAAAA;AAAAA,gBAAc;AAAA,gBACvDlC,SAASA,CAACmC,UAAiB;AAEzB,sBAAIC,WAAAA,WAAWD,KAAK,EAAG,OAAMA;AAC7BE,0BAAQ,OAAO,yBAAyB/D,MAAMY,OAAO,EAAE;AACvDa,+BAAAA,IAAiBoC,KAAK;AAAA,gBACxB;AAAA,gBAAC,IAAAX,WAAA;AAAA,yBAAAD,MAAAA,gBAEAK,MAAAA,SAAO;AAAA,oBAAA,IACNtB,YAAS;AAAA,6BAAEQ,yBAAAA;AAAAA,oBAA0B;AAAA,oBACrCe,UAAUA,CAACM,UAAe;AAGxB,0BACE,CAACjC,uBAAAA,KACAiC,MAAMhD,WAAWgD,MAAMhD,YAAYV,WAAAA,EAAcU,WACjD,CAACgD,MAAMhD,WAAW,CAACG,MAAAA,EAAQa,OAE5B,OAAMgC;AAER,6BAAAZ,MAAAA,gBACGK,MAAAA,SAAOU,iBAAA;AAAA,wBAAA,IAAChC,YAAS;AAAA,iCAAEJ,uBAAAA;AAAAA,wBAAwB;AAAA,sBAAA,GAAMiC,KAAK,CAAA;AAAA,oBAE3D;AAAA,oBAAC,IAAAX,WAAA;AAAA,6BAAAD,MAAAA,gBAEAd,iBAAM8B,QAAM;AAAA,wBAAA,IAAAf,WAAA;AAAA,iCAAA,CAAAD,MAAAA,gBACVd,iBAAMpC,OAAK;AAAA,4BAACmE,MAAMjC;AAAAA,4BAAa,IAAAiB,WAAA;AAAA,qCAAAD,MAAAA,gBAC7Bd,iBAAMgC,MAAI;AAAA,gCAAA,IACTD,OAAI;AAAA,yCAAE,CAACjE,OAAOwD;AAAAA,gCAAQ;AAAA,gCAAA,IACtBF,WAAQ;AAAA,yCAAAN,MAAAA,gBAAGK,MAAAA,SAAO;AAAA,oCAAA,IAACtB,YAAS;AAAA,6CAAEd,wBAAAA;AAAAA,oCAAyB;AAAA,kCAAA,CAAA;AAAA,gCAAA;AAAA,gCAAA,IAAAgC,WAAA;AAAA,yCAAAD,MAAAA,gBAEtDmB,YAAU;AAAA,oCAAA,IAACxD,UAAO;AAAA,6CAAEZ,MAAMY;AAAAA,oCAAO;AAAA,kCAAA,CAAA;AAAA,gCAAA;AAAA,8BAAA,CAAA;AAAA,4BAAA;AAAA,0BAAA,CAAA,GAAAqC,MAAAA,gBAGrCd,iBAAMpC,OAAK;AAAA,4BAACmE,MAAM,CAACjC;AAAAA,4BAAa,IAAAiB,WAAA;AAAA,qCAAAD,MAAAA,gBAC9BmB,YAAU;AAAA,gCAAA,IAACxD,UAAO;AAAA,yCAAEZ,MAAMY;AAAAA,gCAAO;AAAA,8BAAA,CAAA;AAAA,4BAAA;AAAA,0BAAA,CAAA,CAAA;AAAA,wBAAA;AAAA,sBAAA,CAAA;AAAA,oBAAA;AAAA,kBAAA,CAAA;AAAA,gBAAA;AAAA,cAAA,CAAA;AAAA,YAAA;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA4C,MAAAA,KAAA,MAQ7CA,MAAAA,WAAAZ,cAAAA,MAAoByB,WAAAA,WAAW,MAAA,CAAApB,MAAAA,gBAE3BqB,YAAU,CAAA,CAAA,GAAArB,MAAAA,gBACVsB,kBAAAA,0BAED,IAAI,CAAA;AAAA,IAAA;AAAA,EAAA,CAAA;AAGd;AASA,SAASD,aAAa;AACpB,QAAMrE,SAASC,UAAAA,UAAAA;AAEf,QAAMsE,WAAWpE,eAAAA,eAAe;AAAA,IAC9BC,QAASC,CAAAA,MAAM;AACb,aAAOA,EAAEmE,kBAAkBC,MAAMC;AAAAA,IACnC;AAAA,EAAA,CACD;AACDxC,mBAAMyC,aACJzC,iBAAM0C,GAAG,CAACL,QAAQ,GAAG,MAAM;AACzBvE,WAAO6E,KAAK;AAAA,MACVC,MAAM;AAAA,MACN,GAAGC,WAAAA,sBAAsB/E,OAAOyE,KAAK;AAAA,IAAA,CACtC;AAAA,EACH,CAAC,CACH;AACA,SAAO;AACT;AAEO,MAAMN,aAAaA,CAACpE,UAAoC;AAC7D,QAAMC,SAASC,UAAAA,UAAAA;AAEf,QAAMC,aAAaC,eAAAA,eAAe;AAAA,IAChCC,QAASC,CAAAA,MAAM;AACb,YAAMC,SAAQD,EAAEE,QAAQC,KAAMC,OAAMA,EAAEC,OAAOX,MAAMY,OAAO;AAG1D,UAAI,CAACL,QAAO;AACV,eAAO;AAAA,MACT;AAEA,YAAMM,UAAUN,OAAMM;AAEtB,YAAMoE,YACHhF,OAAOgB,WAAWJ,OAAO,EAAeM,QAAQ+D,eACjDjF,OAAOkB,QAAQgE;AACjB,YAAMD,cAAcD,YAAY;AAAA,QAC9BpE;AAAAA,QACAuE,YAAY7E,OAAM6E;AAAAA,QAClBC,QAAQ9E,OAAM+E;AAAAA,QACdC,QAAQhF,OAAMiF;AAAAA,MAAAA,CACf;AACD,YAAMC,MAAMP,cAAcQ,KAAKC,UAAUT,WAAW,IAAIxB;AAExD,aAAO;AAAA,QACL+B;AAAAA,QACA5E;AAAAA,QACAN,OAAO;AAAA,UACLI,IAAIJ,OAAMI;AAAAA,UACViF,QAAQrF,OAAMqF;AAAAA,UACd/B,OAAOtD,OAAMsD;AAAAA,UACbgC,eAAetF,OAAMsF;AAAAA,UACrB9E,iBAAiBR,OAAMQ;AAAAA,QAAAA;AAAAA,MACzB;AAAA,IAEJ;AAAA,EAAA,CACD;AAED,MAAI,CAACZ,WAAAA,EAAc,QAAO;AAE1B,QAAMa,QAAQA,MAAMf,OAAOgB,WAAWd,WAAAA,EAAcU,OAAO;AAE3D,QAAMN,QAAQA,MAAMJ,WAAAA,EAAcI;AAElC,QAAMuF,eAAeA,MAAM3F,WAAAA,EAAcsF,OAAOtF,WAAAA,EAAcI,MAAMI;AAEpE,QAAMoF,MAAMA,MAAM;AAChB,UAAMC,OAAOhF,QAAQG,QAAQa,aAAa/B,OAAOkB,QAAQ8E;AACzD,QAAID,MAAM;AACR,aAAA/C,MAAAA,gBAAQ+C,MAAI,EAAA;AAAA,IACd;AACA,WAAA/C,MAAAA,gBAAQiD,QAAM,EAAA;AAAA,EAChB;AAEA,QAAMC,WAAWA,MAAAlD,sBACdd,iBAAMgC,MAAI;AAAA,IAAA,IAACD,OAAI;AAAA,aAAE4B,aAAAA;AAAAA,IAAc;AAAA,IAAEM,OAAK;AAAA,IAAAlD,UACnCmD,UAASN,IAAAA;AAAAA,EAAI,CAAC;AAIpB,SAAA9C,MAAAA,gBACGd,iBAAM8B,QAAM;AAAA,IAAA,IAAAf,WAAA;AAAA,aAAA,CAAAD,MAAAA,gBACVd,iBAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,QAAQQ;AAAAA,QAAe;AAAA,QAAAmC,UACtCoD,CAAAA,MAAM;AACN,gBAAM,CAACC,oBAAoB,IAAIpE,iBAAMqE,eACnC,MACEvG,OAAOwG,SAASlG,MAAAA,EAAQI,EAAE,GAAG+F,aAAaC,qBAC9C;AAEA,iBAAAnD,MAAAA,KAAU+C,oBAAoB;AAAA,QAChC;AAAA,MAAA,CAAC,GAAAtD,MAAAA,gBAEFd,iBAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,QAAQsF;AAAAA,QAAa;AAAA,QAAA3C,UACpCoD,CAAAA,MAAM;AACN,gBAAM,CAACM,gBAAgB,IAAIzE,iBAAMqE,eAC/B,MAAMvG,OAAOwG,SAASlG,MAAAA,EAAQI,EAAE,GAAG+F,aAAaG,iBAClD;AAEA,iBAAArD,MAAAA,KAAUoD,gBAAgB;AAAA,QAC5B;AAAA,MAAA,CAAC,GAAA3D,MAAAA,gBAEFd,iBAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,MAAAA,EAAQqF,WAAW;AAAA,QAAS;AAAA,QAAA1C,UAC3CoD,CAAAA,MAAM;AACN,gBAAMQ,eACJ9F,QAAQG,QAAQ2F,gBAAgB7G,OAAOkB,QAAQ4F;AAEjD,cAAID,cAAc;AAChB,kBAAME,cAAc/G,OAAOwG,SAASlG,MAAAA,EAAQI,EAAE;AAC9C,gBAAIqG,eAAe,CAACA,YAAYN,aAAaG,mBAAmB;AAE9D,kBAAI,CAAC5G,OAAOwD,UAAU;AACpB,sBAAMoD,oBAAoBI,WAAAA,wBAAAA;AAE1BD,4BAAYN,aAAaG,oBAAoBA;AAE7CK,2BAAW,MAAM;AACfL,oCAAkBM,QAAAA;AAElBH,8BAAYN,aAAaG,oBAAoBnD;AAAAA,gBAC/C,GAAGoD,YAAY;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,CAACM,YAAY,IAAIjF,iBAAMqE,eAAe,YAAY;AACtD,kBAAM,IAAIa,QAASC,CAAAA,MAAMJ,WAAWI,GAAG,CAAC,CAAC;AACzC,mBAAOrH,OAAOwG,SAASlG,MAAAA,EAAQI,EAAE,GAAG+F,aAAaa;AAAAA,UACnD,CAAC;AAED,gBAAMC,oBACJxG,QAAQG,QAAQC,oBAChBnB,OAAOkB,QAAQE;AAEjB,iBAAA,CAEKmG,oBAAiBvE,MAAAA,gBACfK,eAAO;AAAA,YAACtB,WAAWwF;AAAAA,UAAAA,CAAiB,IACnC,MAAIhE,WACP4D,YAAY,CAAA;AAAA,QAGnB;AAAA,MAAA,CAAC,GAAAnE,MAAAA,gBAEFd,iBAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,MAAAA,EAAQqF,WAAW;AAAA,QAAU;AAAA,QAAA1C,UAC5CoD,CAAAA,MAAM;AACNmB,oBAAU3D,WAAAA,WAAWvD,MAAAA,EAAQsD,KAAK,GAAG,2BAA2B;AAEhE,iBAAO6D,oBAAAA,oBAAoBzH,QAAQe,MAAAA,GAAST,MAAAA,EAAQsD,KAAK;AAAA,QAC3D;AAAA,MAAA,CAAC,GAAAZ,MAAAA,gBAEFd,iBAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,MAAAA,EAAQqF,WAAW;AAAA,QAAY;AAAA,QAAA1C,UAC9CoD,CAAAA,MAAM;AACNmB,oBAAUE,WAAAA,WAAWpH,MAAAA,EAAQsD,KAAK,GAAG,2BAA2B;AAEhE,gBAAM,CAACuD,YAAY,IAAIjF,iBAAMqE,eAAe,YAAY;AACtD,kBAAM,IAAIa,QAASC,CAAAA,MAAMJ,WAAWI,GAAG,CAAC,CAAC;AACzC,mBAAOrH,OAAOwG,SAASlG,MAAAA,EAAQI,EAAE,GAAG+F,aAAaa;AAAAA,UACnD,CAAC;AAED,iBAAA/D,MAAAA,KAAU4D,YAAY;AAAA,QACxB;AAAA,MAAA,CAAC,GAAAnE,MAAAA,gBAEFd,iBAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,MAAAA,EAAQqF,WAAW;AAAA,QAAO;AAAA,QAAA1C,UACzCoD,CAAAA,MAAM;AACN,cAAIrG,OAAOwD,UAAU;AACnB,kBAAMmE,uBACH5G,QAAQG,QAAQI,kBACftB,OAAOkB,QAAQK,0BACjBoC,cAAAA;AAEF,mBAAAX,MAAAA,gBACG2E,qBAAmB;AAAA,cAAA,IAClB/D,QAAK;AAAA,uBAAEtD,QAAQsD;AAAAA,cAAK;AAAA,cACpBgE,MAAM;AAAA,gBACJC,gBAAgB;AAAA,cAAA;AAAA,YAClB,CAAC;AAAA,UAGP;AAEA,gBAAMvH,QAAQsD;AAAAA,QAChB;AAAA,MAAA,CAAC,GAAAZ,MAAAA,gBAEFd,iBAAMpC,OAAK;AAAA,QAAA,IAACmE,OAAI;AAAA,iBAAE3D,MAAAA,EAAQqF,WAAW;AAAA,QAAS;AAAA,QAAA,IAAA1C,WAAA;AAAA,iBAC5CiD,SAAAA;AAAAA,QAAU;AAAA,MAAA,CAAA,CAAA;AAAA,IAAA;AAAA,EAAA,CAAA;AAInB;AAEO,MAAMD,SAASA,MAAM;AAC1B,QAAMjG,SAASC,UAAAA,UAAAA;AACf,QAAMU,UAAUuB,iBAAM4F,WAAW5E,yBAAY;AAC7C,QAAMtC,UAAUT,eAAAA,eAAe;AAAA,IAC7BC,QAASC,CAAAA,MAAMA,EAAEE,QAAQC,KAAMC,OAAMA,EAAEC,OAAOC,QAAAA,CAAS,GAAGC;AAAAA,EAAAA,CAC3D;AAED,QAAMG,QAAQA,MAAMf,OAAOgB,WAAWJ,SAAS;AAE/C,QAAMmH,uBAAuB5H,eAAAA,eAAe;AAAA,IAC1CC,QAASC,CAAAA,MAAM;AACb,YAAME,UAAUF,EAAEE;AAClB,YAAMyH,cAAczH,QAAQC,KAAMC,OAAMA,EAAEC,OAAOC,SAAS;AAI1D,UAAI,CAACqH,aAAa;AAChB,eAAO;AAAA,MACT;AAEA,aAAOA,YAAYC;AAAAA,IACrB;AAAA,EAAA,CACD;AAED,QAAMC,eAAe/H,eAAAA,eAAe;AAAA,IAClCC,QAASC,CAAAA,MAAM;AACb,YAAME,UAAUF,EAAEE;AAClB,YAAMqC,QAAQrC,QAAQsC,UAAWpC,OAAMA,EAAEC,OAAOC,SAAS;AACzD,YAAMwH,IAAI5H,QAAQqC,QAAQ,CAAC,GAAGlC;AAC9B,aAAOyH;AAAAA,IACT;AAAA,EAAA,CACD;AAED,QAAMC,mBAAmBjI,eAAAA,eAAe;AAAA,IACtCC,QAASC,CAAAA,MAAM;AACb,YAAME,UAAUF,EAAEE;AAClB,YAAMqC,QAAQrC,QAAQsC,UAAWpC,OAAMA,EAAEC,OAAOC,SAAS;AACzD,aAAOJ,QAAQqC,QAAQ,CAAC,GAAG+C;AAAAA,IAC7B;AAAA,EAAA,CACD;AAGD,QAAM0C,qBAAqBA,MACzBD,uBAAuB,gBAAgBL,qBAAAA;AAEzC,SAAA/E,MAAAA,gBACGd,iBAAMgC,MAAI;AAAA,IAAA,IACTD,OAAI;AAAA,aAAEV,MAAAA,cAAC8E,mBAAAA,CAAoB,EAAA,KAAIH,aAAAA;AAAAA,IAAc;AAAA,IAAA,IAC7C5E,WAAQ;AAAA,aAAAN,MAAAA,gBACLd,iBAAMgC,MAAI;AAAA,QAAA,IAACD,OAAI;AAAA,iBAAEoE,mBAAAA;AAAAA,QAAoB;AAAA,QAAA,IAAApF,WAAA;AAAA,iBACnCwE,wCAAoBzH,QAAQe,MAAAA,GAAS0C,MAAS;AAAA,QAAC;AAAA,MAAA,CAAA;AAAA,IAAA;AAAA,IAAAR,UAIlDqF,CAAAA,oBAAoB;AAEpB,YAAMC,iBAAiBrG,iBAAMsG,WAAW,MAAMF,iBAAiB;AAE/D,aAAAtF,MAAAA,gBACGd,iBAAMgC,MAAI;AAAA,QAAA,IACTD,OAAI;AAAA,iBAAEsE,qBAAqBnE,WAAAA;AAAAA,QAAW;AAAA,QAAA,IACtCd,WAAQ;AAAA,iBAAAN,MAAAA,gBAAGlD,OAAK;AAAA,YAAA,IAACa,UAAO;AAAA,qBAAE4H,eAAAA;AAAAA,YAAgB;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,QAAA,IAAAtF,WAAA;AAAA,iBAAAD,MAAAA,gBAEzCd,iBAAMC,UAAQ;AAAA,YAAA,IACbmB,WAAQ;AAAA,qBAAAN,MAAAA,gBACLK,MAAAA,SAAO;AAAA,gBAAA,IAACtB,YAAS;AAAA,yBAAE/B,OAAOkB,QAAQE;AAAAA,gBAAuB;AAAA,cAAA,CAAA;AAAA,YAAA;AAAA,YAAA,IAAA6B,WAAA;AAAA,qBAAAD,MAAAA,gBAG3DlD,OAAK;AAAA,gBAAA,IAACa,UAAO;AAAA,yBAAE4H,eAAAA;AAAAA,gBAAgB;AAAA,cAAA,CAAA;AAAA,YAAA;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA;AAAA,IAIxC;AAAA,EAAA,CAAC;AAGP;;;;"}
|
|
@@ -45,10 +45,15 @@ function Transitioner() {
|
|
|
45
45
|
const previousIsAnyPending = utils.usePrevious(isAnyPending);
|
|
46
46
|
const isPagePending = () => isLoading() || hasPendingMatches();
|
|
47
47
|
const previousIsPagePending = utils.usePrevious(isPagePending);
|
|
48
|
-
router.startTransition =
|
|
48
|
+
router.startTransition = (fn) => {
|
|
49
49
|
setIsTransitioning(true);
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
Solid__namespace.startTransition(async () => {
|
|
51
|
+
try {
|
|
52
|
+
await fn();
|
|
53
|
+
} finally {
|
|
54
|
+
setIsTransitioning(false);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
52
57
|
};
|
|
53
58
|
Solid__namespace.onMount(() => {
|
|
54
59
|
const unsub = router.history.subscribe(router.load);
|
|
@@ -100,7 +105,7 @@ function Transitioner() {
|
|
|
100
105
|
});
|
|
101
106
|
}
|
|
102
107
|
}));
|
|
103
|
-
Solid__namespace.
|
|
108
|
+
Solid__namespace.createComputed(Solid__namespace.on([isPagePending, previousIsPagePending], ([isPagePending2, previousIsPagePending2]) => {
|
|
104
109
|
if (previousIsPagePending2.previous && !isPagePending2) {
|
|
105
110
|
router.emit({
|
|
106
111
|
type: "onBeforeRouteMount",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transitioner.cjs","sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n getLocationChangeInfo,\n handleHashScroll,\n trimPathRight,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport { usePrevious } from './utils'\n\nexport function Transitioner() {\n const router = useRouter()\n let mountLoadForRouter = { router, mounted: false }\n const isLoading = useRouterState({\n select: ({ isLoading }) => isLoading,\n })\n\n if (router.isServer) {\n return null\n }\n\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n // Track pending state changes\n const hasPendingMatches = useRouterState({\n select: (s) => s.matches.some((d) => d.status === 'pending'),\n })\n\n const previousIsLoading = usePrevious(isLoading)\n\n const isAnyPending = () =>\n isLoading() || isTransitioning() || hasPendingMatches()\n const previousIsAnyPending = usePrevious(isAnyPending)\n\n const isPagePending = () => isLoading() || hasPendingMatches()\n const previousIsPagePending = usePrevious(isPagePending)\n\n router.startTransition =
|
|
1
|
+
{"version":3,"file":"Transitioner.cjs","sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n getLocationChangeInfo,\n handleHashScroll,\n trimPathRight,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport { usePrevious } from './utils'\n\nexport function Transitioner() {\n const router = useRouter()\n let mountLoadForRouter = { router, mounted: false }\n const isLoading = useRouterState({\n select: ({ isLoading }) => isLoading,\n })\n\n if (router.isServer) {\n return null\n }\n\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n\n // Track pending state changes\n const hasPendingMatches = useRouterState({\n select: (s) => s.matches.some((d) => d.status === 'pending'),\n })\n\n const previousIsLoading = usePrevious(isLoading)\n\n const isAnyPending = () =>\n isLoading() || isTransitioning() || hasPendingMatches()\n const previousIsAnyPending = usePrevious(isAnyPending)\n\n const isPagePending = () => isLoading() || hasPendingMatches()\n const previousIsPagePending = usePrevious(isPagePending)\n\n router.startTransition = (fn: () => void | Promise<void>) => {\n setIsTransitioning(true)\n Solid.startTransition(async () => {\n try {\n await fn()\n } finally {\n setIsTransitioning(false)\n }\n })\n }\n\n // Subscribe to location changes\n // and try to load the new location\n Solid.onMount(() => {\n const unsub = router.history.subscribe(router.load)\n\n const nextLocation = router.buildLocation({\n to: router.latestLocation.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n\n if (\n trimPathRight(router.latestLocation.href) !==\n trimPathRight(nextLocation.href)\n ) {\n router.commitLocation({ ...nextLocation, replace: true })\n }\n\n Solid.onCleanup(() => {\n unsub()\n })\n })\n\n // Try to load the initial location\n Solid.createRenderEffect(() => {\n Solid.untrack(() => {\n if (\n // if we are hydrating from SSR, loading is triggered in ssr-client\n (typeof window !== 'undefined' && router.ssr) ||\n (mountLoadForRouter.router === router && mountLoadForRouter.mounted)\n ) {\n return\n }\n mountLoadForRouter = { router, mounted: true }\n const tryLoad = async () => {\n try {\n await router.load()\n } catch (err) {\n console.error(err)\n }\n }\n tryLoad()\n })\n })\n\n Solid.createRenderEffect(\n Solid.on(\n [previousIsLoading, isLoading],\n ([previousIsLoading, isLoading]) => {\n if (previousIsLoading.previous && !isLoading) {\n router.emit({\n type: 'onLoad',\n ...getLocationChangeInfo(router.state),\n })\n }\n },\n ),\n )\n\n Solid.createComputed(\n Solid.on(\n [isPagePending, previousIsPagePending],\n ([isPagePending, previousIsPagePending]) => {\n // emit onBeforeRouteMount\n if (previousIsPagePending.previous && !isPagePending) {\n router.emit({\n type: 'onBeforeRouteMount',\n ...getLocationChangeInfo(router.state),\n })\n }\n },\n ),\n )\n\n Solid.createRenderEffect(\n Solid.on(\n [isAnyPending, previousIsAnyPending],\n ([isAnyPending, previousIsAnyPending]) => {\n // The router was pending and now it's not\n if (previousIsAnyPending.previous && !isAnyPending) {\n router.emit({\n type: 'onResolved',\n ...getLocationChangeInfo(router.state),\n })\n\n router.__store.setState((s) => ({\n ...s,\n status: 'idle',\n resolvedLocation: s.location,\n }))\n\n handleHashScroll(router)\n }\n },\n ),\n )\n\n return null\n}\n"],"names":["Transitioner","router","useRouter","mountLoadForRouter","mounted","isLoading","useRouterState","select","isServer","isTransitioning","setIsTransitioning","Solid","createSignal","hasPendingMatches","s","matches","some","d","status","previousIsLoading","usePrevious","isAnyPending","previousIsAnyPending","isPagePending","previousIsPagePending","startTransition","fn","onMount","unsub","history","subscribe","load","nextLocation","buildLocation","to","latestLocation","pathname","search","params","hash","state","_includeValidateSearch","trimPathRight","href","commitLocation","replace","onCleanup","createRenderEffect","untrack","window","ssr","tryLoad","err","console","error","on","previous","emit","type","getLocationChangeInfo","createComputed","__store","setState","resolvedLocation","location","handleHashScroll"],"mappings":"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"}
|
package/dist/cjs/useMatch.cjs
CHANGED
|
@@ -23,17 +23,30 @@ function _interopNamespaceDefault(e) {
|
|
|
23
23
|
const Solid__namespace = /* @__PURE__ */ _interopNamespaceDefault(Solid);
|
|
24
24
|
function useMatch(opts) {
|
|
25
25
|
const nearestMatchId = Solid__namespace.useContext(opts.from ? matchContext.dummyMatchContext : matchContext.matchContext);
|
|
26
|
-
const
|
|
26
|
+
const matchState = useRouterState.useRouterState({
|
|
27
27
|
select: (state) => {
|
|
28
28
|
const match = state.matches.find((d) => opts.from ? opts.from === d.routeId : d.id === nearestMatchId());
|
|
29
|
-
invariant(!((opts.shouldThrow ?? true) && !match), `Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`);
|
|
30
29
|
if (match === void 0) {
|
|
31
|
-
|
|
30
|
+
const pendingMatch = state.pendingMatches?.find((d) => opts.from ? opts.from === d.routeId : d.id === nearestMatchId());
|
|
31
|
+
const shouldThrowError = !pendingMatch && !state.isTransitioning && (opts.shouldThrow ?? true);
|
|
32
|
+
return {
|
|
33
|
+
match: void 0,
|
|
34
|
+
shouldThrowError
|
|
35
|
+
};
|
|
32
36
|
}
|
|
33
|
-
return
|
|
37
|
+
return {
|
|
38
|
+
match: opts.select ? opts.select(match) : match,
|
|
39
|
+
shouldThrowError: false
|
|
40
|
+
};
|
|
34
41
|
}
|
|
35
42
|
});
|
|
36
|
-
|
|
43
|
+
Solid__namespace.createEffect(() => {
|
|
44
|
+
const state = matchState();
|
|
45
|
+
if (state.shouldThrowError) {
|
|
46
|
+
invariant(false, `Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
return Solid__namespace.createMemo(() => matchState().match);
|
|
37
50
|
}
|
|
38
51
|
exports.useMatch = useMatch;
|
|
39
52
|
//# sourceMappingURL=useMatch.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMatch.cjs","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport { useRouterState } from './useRouterState'\nimport { dummyMatchContext, matchContext } from './matchContext'\nimport type {\n AnyRouter,\n MakeRouteMatch,\n MakeRouteMatchUnion,\n RegisteredRouter,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? TStrict extends true\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : MakeRouteMatchUnion<TRouter>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Solid.Accessor<\n ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n const nearestMatchId = Solid.useContext(\n opts.from ? dummyMatchContext : matchContext,\n )\n\n const
|
|
1
|
+
{"version":3,"file":"useMatch.cjs","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport { useRouterState } from './useRouterState'\nimport { dummyMatchContext, matchContext } from './matchContext'\nimport type {\n AnyRouter,\n MakeRouteMatch,\n MakeRouteMatchUnion,\n RegisteredRouter,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? TStrict extends true\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : MakeRouteMatchUnion<TRouter>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Solid.Accessor<\n ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n const nearestMatchId = Solid.useContext(\n opts.from ? dummyMatchContext : matchContext,\n )\n\n // Create a signal to track error state separately from the match\n const matchState: Solid.Accessor<{\n match: any\n shouldThrowError: boolean\n }> = useRouterState({\n select: (state: any) => {\n const match = state.matches.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),\n )\n\n if (match === undefined) {\n // During navigation transitions, check if the match exists in pendingMatches\n const pendingMatch = state.pendingMatches?.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),\n )\n\n // Determine if we should throw an error\n const shouldThrowError =\n !pendingMatch && !state.isTransitioning && (opts.shouldThrow ?? true)\n\n return { match: undefined, shouldThrowError }\n }\n\n return {\n match: opts.select ? opts.select(match) : match,\n shouldThrowError: false,\n }\n },\n } as any)\n\n // Use createEffect to throw errors outside the reactive selector context\n // This allows error boundaries to properly catch the errors\n Solid.createEffect(() => {\n const state = matchState()\n if (state.shouldThrowError) {\n invariant(\n false,\n `Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n }\n })\n\n // Return an accessor that extracts just the match value\n return Solid.createMemo(() => matchState().match) as any\n}\n"],"names":["useMatch","opts","nearestMatchId","Solid","useContext","from","dummyMatchContext","matchContext","matchState","useRouterState","select","state","match","matches","find","d","routeId","id","undefined","pendingMatch","pendingMatches","shouldThrowError","isTransitioning","shouldThrow","createEffect","invariant","createMemo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsDO,SAASA,SAOdC,MASA;AACA,QAAMC,iBAAiBC,iBAAMC,WAC3BH,KAAKI,OAAOC,aAAAA,oBAAoBC,yBAClC;AAGA,QAAMC,aAGDC,eAAAA,eAAe;AAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,YAAMC,QAAQD,MAAME,QAAQC,KAAK,CAACC,MAChCd,KAAKI,OAAOJ,KAAKI,SAASU,EAAEC,UAAUD,EAAEE,OAAOf,gBACjD;AAEA,UAAIU,UAAUM,QAAW;AAEvB,cAAMC,eAAeR,MAAMS,gBAAgBN,KAAK,CAACC,MAC/Cd,KAAKI,OAAOJ,KAAKI,SAASU,EAAEC,UAAUD,EAAEE,OAAOf,gBACjD;AAGA,cAAMmB,mBACJ,CAACF,gBAAgB,CAACR,MAAMW,oBAAoBrB,KAAKsB,eAAe;AAElE,eAAO;AAAA,UAAEX,OAAOM;AAAAA,UAAWG;AAAAA,QAAAA;AAAAA,MAC7B;AAEA,aAAO;AAAA,QACLT,OAAOX,KAAKS,SAAST,KAAKS,OAAOE,KAAK,IAAIA;AAAAA,QAC1CS,kBAAkB;AAAA,MAAA;AAAA,IAEtB;AAAA,EAAA,CACM;AAIRlB,mBAAMqB,aAAa,MAAM;AACvB,UAAMb,QAAQH,WAAAA;AACd,QAAIG,MAAMU,kBAAkB;AAC1BI,gBACE,OACA,kBAAkBxB,KAAKI,OAAO,yBAAyBJ,KAAKI,IAAI,MAAM,kBAAkB,EAC1F;AAAA,IACF;AAAA,EACF,CAAC;AAGD,SAAOF,iBAAMuB,WAAW,MAAMlB,WAAAA,EAAaI,KAAK;AAClD;;"}
|
package/dist/esm/Match.js
CHANGED
|
@@ -16,7 +16,9 @@ const Match = (props) => {
|
|
|
16
16
|
const matchState = useRouterState({
|
|
17
17
|
select: (s) => {
|
|
18
18
|
const match = s.matches.find((d) => d.id === props.matchId);
|
|
19
|
-
|
|
19
|
+
if (!match) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
20
22
|
return {
|
|
21
23
|
routeId: match.routeId,
|
|
22
24
|
ssr: match.ssr,
|
|
@@ -24,8 +26,9 @@ const Match = (props) => {
|
|
|
24
26
|
};
|
|
25
27
|
}
|
|
26
28
|
});
|
|
29
|
+
if (!matchState()) return null;
|
|
27
30
|
const route = () => router.routesById[matchState().routeId];
|
|
28
|
-
const
|
|
31
|
+
const resolvePendingComponent = () => route().options.pendingComponent ?? router.options.defaultPendingComponent;
|
|
29
32
|
const routeErrorComponent = () => route().options.errorComponent ?? router.options.defaultErrorComponent;
|
|
30
33
|
const routeOnCatch = () => route().options.onCatch ?? router.options.defaultOnCatch;
|
|
31
34
|
const routeNotFoundComponent = () => route().isRoot ? (
|
|
@@ -33,10 +36,7 @@ const Match = (props) => {
|
|
|
33
36
|
route().options.notFoundComponent ?? router.options.notFoundRoute?.options.component
|
|
34
37
|
) : route().options.notFoundComponent;
|
|
35
38
|
const resolvedNoSsr = matchState().ssr === false || matchState().ssr === "data-only";
|
|
36
|
-
const ResolvedSuspenseBoundary = () =>
|
|
37
|
-
// If we're on the root route, allow forcefully wrapping in suspense
|
|
38
|
-
(!route().isRoot || route().options.wrapInSuspense || resolvedNoSsr || matchState()._displayPending) && (route().options.wrapInSuspense ?? PendingComponent() ?? (route().options.errorComponent?.preload || resolvedNoSsr)) ? Solid.Suspense : SafeFragment
|
|
39
|
-
);
|
|
39
|
+
const ResolvedSuspenseBoundary = () => Solid.Suspense;
|
|
40
40
|
const ResolvedCatchBoundary = () => routeErrorComponent() ? CatchBoundary : SafeFragment;
|
|
41
41
|
const ResolvedNotFoundBoundary = () => routeNotFoundComponent() ? CatchNotFound : SafeFragment;
|
|
42
42
|
const resetKey = useRouterState({
|
|
@@ -63,7 +63,7 @@ const Match = (props) => {
|
|
|
63
63
|
// Don't show fallback on server when using no-ssr mode to avoid hydration mismatch
|
|
64
64
|
memo(() => !!(router.isServer || resolvedNoSsr))() ? void 0 : createComponent(Dynamic, {
|
|
65
65
|
get component() {
|
|
66
|
-
return
|
|
66
|
+
return resolvePendingComponent();
|
|
67
67
|
}
|
|
68
68
|
})
|
|
69
69
|
);
|
|
@@ -108,7 +108,7 @@ const Match = (props) => {
|
|
|
108
108
|
get fallback() {
|
|
109
109
|
return createComponent(Dynamic, {
|
|
110
110
|
get component() {
|
|
111
|
-
return
|
|
111
|
+
return resolvePendingComponent();
|
|
112
112
|
}
|
|
113
113
|
});
|
|
114
114
|
},
|
|
@@ -164,6 +164,9 @@ const MatchInner = (props) => {
|
|
|
164
164
|
const matchState = useRouterState({
|
|
165
165
|
select: (s) => {
|
|
166
166
|
const match2 = s.matches.find((d) => d.id === props.matchId);
|
|
167
|
+
if (!match2) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
167
170
|
const routeId = match2.routeId;
|
|
168
171
|
const remountFn = router.routesById[routeId].options.remountDeps ?? router.options.defaultRemountDeps;
|
|
169
172
|
const remountDeps = remountFn?.({
|
|
@@ -186,6 +189,7 @@ const MatchInner = (props) => {
|
|
|
186
189
|
};
|
|
187
190
|
}
|
|
188
191
|
});
|
|
192
|
+
if (!matchState()) return null;
|
|
189
193
|
const route = () => router.routesById[matchState().routeId];
|
|
190
194
|
const match = () => matchState().match;
|
|
191
195
|
const componentKey = () => matchState().key ?? matchState().match.id;
|
|
@@ -244,7 +248,10 @@ const MatchInner = (props) => {
|
|
|
244
248
|
await new Promise((r) => setTimeout(r, 0));
|
|
245
249
|
return router.getMatch(match().id)?._nonReactive.loadPromise;
|
|
246
250
|
});
|
|
247
|
-
|
|
251
|
+
const FallbackComponent = route().options.pendingComponent ?? router.options.defaultPendingComponent;
|
|
252
|
+
return [FallbackComponent ? createComponent(Dynamic, {
|
|
253
|
+
component: FallbackComponent
|
|
254
|
+
}) : null, memo(loaderResult)];
|
|
248
255
|
}
|
|
249
256
|
}), createComponent(Solid.Match, {
|
|
250
257
|
get when() {
|
|
@@ -306,7 +313,9 @@ const Outlet = () => {
|
|
|
306
313
|
select: (s) => {
|
|
307
314
|
const matches = s.matches;
|
|
308
315
|
const parentMatch = matches.find((d) => d.id === matchId());
|
|
309
|
-
|
|
316
|
+
if (!parentMatch) {
|
|
317
|
+
return false;
|
|
318
|
+
}
|
|
310
319
|
return parentMatch.globalNotFound;
|
|
311
320
|
}
|
|
312
321
|
});
|
|
@@ -340,15 +349,16 @@ const Outlet = () => {
|
|
|
340
349
|
}
|
|
341
350
|
});
|
|
342
351
|
},
|
|
343
|
-
children: (
|
|
352
|
+
children: (matchIdAccessor) => {
|
|
353
|
+
const currentMatchId = Solid.createMemo(() => matchIdAccessor());
|
|
344
354
|
return createComponent(Solid.Show, {
|
|
345
355
|
get when() {
|
|
346
|
-
return
|
|
356
|
+
return currentMatchId() === rootRouteId;
|
|
347
357
|
},
|
|
348
358
|
get fallback() {
|
|
349
359
|
return createComponent(Match, {
|
|
350
360
|
get matchId() {
|
|
351
|
-
return
|
|
361
|
+
return currentMatchId();
|
|
352
362
|
}
|
|
353
363
|
});
|
|
354
364
|
},
|
|
@@ -364,7 +374,7 @@ const Outlet = () => {
|
|
|
364
374
|
get children() {
|
|
365
375
|
return createComponent(Match, {
|
|
366
376
|
get matchId() {
|
|
367
|
-
return
|
|
377
|
+
return currentMatchId();
|
|
368
378
|
}
|
|
369
379
|
});
|
|
370
380
|
}
|