@tanstack/solid-router 1.131.7 → 1.132.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Asset.cjs +2 -2
- package/dist/cjs/Asset.cjs.map +1 -1
- package/dist/cjs/CatchBoundary.cjs +1 -2
- package/dist/cjs/CatchBoundary.cjs.map +1 -1
- package/dist/cjs/ClientOnly.cjs.map +1 -1
- package/dist/cjs/HeadContent.cjs +10 -17
- package/dist/cjs/HeadContent.cjs.map +1 -1
- package/dist/cjs/Match.cjs +38 -65
- package/dist/cjs/Match.cjs.map +1 -1
- package/dist/cjs/Matches.cjs +4 -5
- package/dist/cjs/Matches.cjs.map +1 -1
- package/dist/cjs/RouterProvider.cjs.map +1 -1
- package/dist/cjs/SafeFragment.cjs.map +1 -1
- package/dist/cjs/ScriptOnce.cjs.map +1 -1
- package/dist/cjs/Scripts.cjs +7 -11
- package/dist/cjs/Scripts.cjs.map +1 -1
- package/dist/cjs/ScrollRestoration.cjs +3 -4
- package/dist/cjs/ScrollRestoration.cjs.map +1 -1
- package/dist/cjs/Transitioner.cjs.map +1 -1
- package/dist/cjs/awaited.cjs.map +1 -1
- package/dist/cjs/fileRoute.cjs +5 -5
- package/dist/cjs/fileRoute.cjs.map +1 -1
- package/dist/cjs/index.cjs +0 -12
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +1 -4
- package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
- package/dist/cjs/link.cjs +10 -11
- package/dist/cjs/link.cjs.map +1 -1
- package/dist/cjs/not-found.cjs +2 -4
- package/dist/cjs/not-found.cjs.map +1 -1
- package/dist/cjs/renderRouteNotFound.cjs.map +1 -1
- package/dist/cjs/route.cjs +12 -12
- package/dist/cjs/route.cjs.map +1 -1
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/cjs/routerContext.cjs.map +1 -1
- package/dist/cjs/scroll-restoration.cjs.map +1 -1
- package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
- package/dist/cjs/ssr/RouterServer.cjs.map +1 -1
- package/dist/cjs/ssr/defaultRenderHandler.cjs.map +1 -1
- package/dist/cjs/ssr/defaultStreamHandler.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
- package/dist/cjs/useBlocker.cjs +2 -2
- package/dist/cjs/useBlocker.cjs.map +1 -1
- package/dist/cjs/useCanGoBack.cjs.map +1 -1
- package/dist/cjs/useLoaderData.cjs.map +1 -1
- package/dist/cjs/useLoaderDeps.cjs.map +1 -1
- package/dist/cjs/useLocation.cjs +1 -1
- package/dist/cjs/useLocation.cjs.map +1 -1
- package/dist/cjs/useMatch.cjs.map +1 -1
- package/dist/cjs/useNavigate.cjs +1 -1
- package/dist/cjs/useNavigate.cjs.map +1 -1
- package/dist/cjs/useParams.cjs.map +1 -1
- package/dist/cjs/useRouter.cjs +1 -1
- package/dist/cjs/useRouter.cjs.map +1 -1
- package/dist/cjs/useRouterState.cjs +3 -3
- package/dist/cjs/useRouterState.cjs.map +1 -1
- package/dist/cjs/useSearch.cjs.map +1 -1
- package/dist/cjs/utils.cjs +1 -1
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/esm/Asset.js +2 -2
- package/dist/esm/Asset.js.map +1 -1
- package/dist/esm/CatchBoundary.js +1 -2
- package/dist/esm/CatchBoundary.js.map +1 -1
- package/dist/esm/ClientOnly.js.map +1 -1
- package/dist/esm/HeadContent.js +10 -17
- package/dist/esm/HeadContent.js.map +1 -1
- package/dist/esm/Match.js +39 -66
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Matches.js +4 -5
- package/dist/esm/Matches.js.map +1 -1
- package/dist/esm/RouterProvider.js.map +1 -1
- package/dist/esm/SafeFragment.js.map +1 -1
- package/dist/esm/ScriptOnce.js.map +1 -1
- package/dist/esm/Scripts.js +7 -11
- package/dist/esm/Scripts.js.map +1 -1
- package/dist/esm/ScrollRestoration.js +3 -4
- package/dist/esm/ScrollRestoration.js.map +1 -1
- package/dist/esm/Transitioner.js.map +1 -1
- package/dist/esm/awaited.js.map +1 -1
- package/dist/esm/fileRoute.js +5 -5
- package/dist/esm/fileRoute.js.map +1 -1
- package/dist/esm/index.d.ts +1 -4
- package/dist/esm/index.js +2 -8
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lazyRouteComponent.js.map +1 -1
- package/dist/esm/link.js +10 -11
- package/dist/esm/link.js.map +1 -1
- package/dist/esm/not-found.js +2 -4
- package/dist/esm/not-found.js.map +1 -1
- package/dist/esm/renderRouteNotFound.js.map +1 -1
- package/dist/esm/route.js +12 -12
- package/dist/esm/route.js.map +1 -1
- package/dist/esm/router.js.map +1 -1
- package/dist/esm/routerContext.js.map +1 -1
- package/dist/esm/scroll-restoration.js.map +1 -1
- package/dist/esm/ssr/RouterClient.js.map +1 -1
- package/dist/esm/ssr/RouterServer.js.map +1 -1
- package/dist/esm/ssr/defaultRenderHandler.js.map +1 -1
- package/dist/esm/ssr/defaultStreamHandler.js.map +1 -1
- package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
- package/dist/esm/ssr/renderRouterToString.js.map +1 -1
- package/dist/esm/useBlocker.js +2 -2
- package/dist/esm/useBlocker.js.map +1 -1
- package/dist/esm/useCanGoBack.js.map +1 -1
- package/dist/esm/useLoaderData.js.map +1 -1
- package/dist/esm/useLoaderDeps.js.map +1 -1
- package/dist/esm/useLocation.js +1 -1
- package/dist/esm/useLocation.js.map +1 -1
- package/dist/esm/useMatch.js.map +1 -1
- package/dist/esm/useNavigate.js +1 -1
- package/dist/esm/useNavigate.js.map +1 -1
- package/dist/esm/useParams.js.map +1 -1
- package/dist/esm/useRouter.js +1 -1
- package/dist/esm/useRouter.js.map +1 -1
- package/dist/esm/useRouterState.js +3 -3
- package/dist/esm/useRouterState.js.map +1 -1
- package/dist/esm/useSearch.js.map +1 -1
- package/dist/esm/utils.js +1 -1
- package/dist/esm/utils.js.map +1 -1
- package/dist/source/Match.jsx +33 -33
- package/dist/source/Match.jsx.map +1 -1
- package/dist/source/index.d.ts +1 -4
- package/dist/source/index.jsx +1 -4
- package/dist/source/index.jsx.map +1 -1
- package/dist/source/useBlocker.jsx +1 -1
- package/dist/source/useBlocker.jsx.map +1 -1
- package/package.json +4 -4
- package/src/Match.tsx +36 -35
- package/src/index.tsx +0 -5
- package/src/useBlocker.tsx +1 -1
package/dist/esm/Match.js
CHANGED
|
@@ -2,7 +2,7 @@ import { createComponent, memo, Dynamic, mergeProps } from "solid-js/web";
|
|
|
2
2
|
import * as Solid from "solid-js";
|
|
3
3
|
import invariant from "tiny-invariant";
|
|
4
4
|
import warning from "tiny-warning";
|
|
5
|
-
import { isNotFound, rootRouteId, createControlledPromise, isRedirect, getLocationChangeInfo } from "@tanstack/router-core";
|
|
5
|
+
import { isNotFound, rootRouteId, pick, createControlledPromise, isRedirect, getLocationChangeInfo } from "@tanstack/router-core";
|
|
6
6
|
import { ErrorComponent, CatchBoundary } from "./CatchBoundary.js";
|
|
7
7
|
import { useRouterState } from "./useRouterState.js";
|
|
8
8
|
import { useRouter } from "./useRouter.js";
|
|
@@ -17,32 +17,22 @@ const Match = (props) => {
|
|
|
17
17
|
select: (s) => {
|
|
18
18
|
const match = s.matches.find((d) => d.id === props.matchId);
|
|
19
19
|
invariant(match, `Could not find match for matchId "${props.matchId}". Please file an issue!`);
|
|
20
|
-
return
|
|
21
|
-
routeId: match.routeId,
|
|
22
|
-
ssr: match.ssr,
|
|
23
|
-
_displayPending: match._displayPending
|
|
24
|
-
};
|
|
20
|
+
return pick(match, ["routeId", "ssr", "_displayPending"]);
|
|
25
21
|
}
|
|
26
22
|
});
|
|
27
23
|
const route = () => router.routesById[matchState().routeId];
|
|
28
24
|
const PendingComponent = () => route().options.pendingComponent ?? router.options.defaultPendingComponent;
|
|
29
25
|
const routeErrorComponent = () => route().options.errorComponent ?? router.options.defaultErrorComponent;
|
|
30
26
|
const routeOnCatch = () => route().options.onCatch ?? router.options.defaultOnCatch;
|
|
31
|
-
const routeNotFoundComponent = () =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
route().options.notFoundComponent ?? ((_a = router.options.notFoundRoute) == null ? void 0 : _a.options.component)
|
|
36
|
-
) : route().options.notFoundComponent;
|
|
37
|
-
};
|
|
27
|
+
const routeNotFoundComponent = () => route().isRoot ? (
|
|
28
|
+
// If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component
|
|
29
|
+
route().options.notFoundComponent ?? router.options.notFoundRoute?.options.component
|
|
30
|
+
) : route().options.notFoundComponent;
|
|
38
31
|
const resolvedNoSsr = matchState().ssr === false || matchState().ssr === "data-only";
|
|
39
|
-
const ResolvedSuspenseBoundary = () =>
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
(!route().isRoot || route().options.wrapInSuspense || resolvedNoSsr || matchState()._displayPending) && (route().options.wrapInSuspense ?? PendingComponent() ?? (((_a = route().options.errorComponent) == null ? void 0 : _a.preload) || resolvedNoSsr)) ? Solid.Suspense : SafeFragment
|
|
44
|
-
);
|
|
45
|
-
};
|
|
32
|
+
const ResolvedSuspenseBoundary = () => (
|
|
33
|
+
// If we're on the root route, allow forcefully wrapping in suspense
|
|
34
|
+
(!route().isRoot || route().options.wrapInSuspense || resolvedNoSsr || matchState()._displayPending) && (route().options.wrapInSuspense ?? PendingComponent() ?? (route().options.errorComponent?.preload || resolvedNoSsr)) ? Solid.Suspense : SafeFragment
|
|
35
|
+
);
|
|
46
36
|
const ResolvedCatchBoundary = () => routeErrorComponent() ? CatchBoundary : SafeFragment;
|
|
47
37
|
const ResolvedNotFoundBoundary = () => routeNotFoundComponent() ? CatchNotFound : SafeFragment;
|
|
48
38
|
const resetKey = useRouterState({
|
|
@@ -50,9 +40,8 @@ const Match = (props) => {
|
|
|
50
40
|
});
|
|
51
41
|
const parentRouteId = useRouterState({
|
|
52
42
|
select: (s) => {
|
|
53
|
-
var _a;
|
|
54
43
|
const index = s.matches.findIndex((d) => d.id === props.matchId);
|
|
55
|
-
return
|
|
44
|
+
return s.matches[index - 1]?.routeId;
|
|
56
45
|
}
|
|
57
46
|
});
|
|
58
47
|
const ShellComponent = route().isRoot ? route().options.shellComponent ?? SafeFragment : SafeFragment;
|
|
@@ -82,10 +71,9 @@ const Match = (props) => {
|
|
|
82
71
|
return routeErrorComponent() || ErrorComponent;
|
|
83
72
|
},
|
|
84
73
|
onCatch: (error) => {
|
|
85
|
-
var _a;
|
|
86
74
|
if (isNotFound(error)) throw error;
|
|
87
75
|
warning(false, `Error in route match: ${props.matchId}`);
|
|
88
|
-
|
|
76
|
+
routeOnCatch()?.(error);
|
|
89
77
|
},
|
|
90
78
|
get children() {
|
|
91
79
|
return createComponent(Dynamic, {
|
|
@@ -153,8 +141,7 @@ function OnRendered() {
|
|
|
153
141
|
const router = useRouter();
|
|
154
142
|
const location = useRouterState({
|
|
155
143
|
select: (s) => {
|
|
156
|
-
|
|
157
|
-
return (_a = s.resolvedLocation) == null ? void 0 : _a.state.__TSR_key;
|
|
144
|
+
return s.resolvedLocation?.state.__TSR_key;
|
|
158
145
|
}
|
|
159
146
|
});
|
|
160
147
|
Solid.createEffect(Solid.on([location], () => {
|
|
@@ -169,10 +156,11 @@ const MatchInner = (props) => {
|
|
|
169
156
|
const router = useRouter();
|
|
170
157
|
const matchState = useRouterState({
|
|
171
158
|
select: (s) => {
|
|
172
|
-
const
|
|
159
|
+
const matchIndex = s.matches.findIndex((d) => d.id === props.matchId);
|
|
160
|
+
const match2 = s.matches[matchIndex];
|
|
173
161
|
const routeId = match2.routeId;
|
|
174
162
|
const remountFn = router.routesById[routeId].options.remountDeps ?? router.options.defaultRemountDeps;
|
|
175
|
-
const remountDeps = remountFn
|
|
163
|
+
const remountDeps = remountFn?.({
|
|
176
164
|
routeId,
|
|
177
165
|
loaderDeps: match2.loaderDeps,
|
|
178
166
|
params: match2._strictParams,
|
|
@@ -182,13 +170,7 @@ const MatchInner = (props) => {
|
|
|
182
170
|
return {
|
|
183
171
|
key,
|
|
184
172
|
routeId,
|
|
185
|
-
match:
|
|
186
|
-
id: match2.id,
|
|
187
|
-
status: match2.status,
|
|
188
|
-
error: match2.error,
|
|
189
|
-
_forcePending: match2._forcePending,
|
|
190
|
-
_displayPending: match2._displayPending
|
|
191
|
-
}
|
|
173
|
+
match: pick(match2, ["id", "status", "error", "_forcePending", "_displayPending"])
|
|
192
174
|
};
|
|
193
175
|
}
|
|
194
176
|
});
|
|
@@ -216,10 +198,7 @@ const MatchInner = (props) => {
|
|
|
216
198
|
return match()._displayPending;
|
|
217
199
|
},
|
|
218
200
|
children: (_) => {
|
|
219
|
-
const [displayPendingResult] = Solid.createResource(() =>
|
|
220
|
-
var _a;
|
|
221
|
-
return (_a = router.getMatch(match().id)) == null ? void 0 : _a._nonReactive.displayPendingPromise;
|
|
222
|
-
});
|
|
201
|
+
const [displayPendingResult] = Solid.createResource(() => router.getMatch(match().id)?.displayPendingPromise);
|
|
223
202
|
return memo(displayPendingResult);
|
|
224
203
|
}
|
|
225
204
|
}), createComponent(Solid.Match, {
|
|
@@ -227,10 +206,7 @@ const MatchInner = (props) => {
|
|
|
227
206
|
return match()._forcePending;
|
|
228
207
|
},
|
|
229
208
|
children: (_) => {
|
|
230
|
-
const [minPendingResult] = Solid.createResource(() =>
|
|
231
|
-
var _a;
|
|
232
|
-
return (_a = router.getMatch(match().id)) == null ? void 0 : _a._nonReactive.minPendingPromise;
|
|
233
|
-
});
|
|
209
|
+
const [minPendingResult] = Solid.createResource(() => router.getMatch(match().id)?.minPendingPromise);
|
|
234
210
|
return memo(minPendingResult);
|
|
235
211
|
}
|
|
236
212
|
}), createComponent(Solid.Match, {
|
|
@@ -239,25 +215,27 @@ const MatchInner = (props) => {
|
|
|
239
215
|
},
|
|
240
216
|
children: (_) => {
|
|
241
217
|
const pendingMinMs = route().options.pendingMinMs ?? router.options.defaultPendingMinMs;
|
|
242
|
-
if (pendingMinMs) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
218
|
+
if (pendingMinMs && !router.getMatch(match().id)?.minPendingPromise) {
|
|
219
|
+
if (!router.isServer) {
|
|
220
|
+
const minPendingPromise = createControlledPromise();
|
|
221
|
+
Promise.resolve().then(() => {
|
|
222
|
+
router.updateMatch(match().id, (prev) => ({
|
|
223
|
+
...prev,
|
|
224
|
+
minPendingPromise
|
|
225
|
+
}));
|
|
226
|
+
});
|
|
227
|
+
setTimeout(() => {
|
|
228
|
+
minPendingPromise.resolve();
|
|
229
|
+
router.updateMatch(match().id, (prev) => ({
|
|
230
|
+
...prev,
|
|
231
|
+
minPendingPromise: void 0
|
|
232
|
+
}));
|
|
233
|
+
}, pendingMinMs);
|
|
255
234
|
}
|
|
256
235
|
}
|
|
257
236
|
const [loaderResult] = Solid.createResource(async () => {
|
|
258
|
-
var _a;
|
|
259
237
|
await new Promise((r) => setTimeout(r, 0));
|
|
260
|
-
return
|
|
238
|
+
return router.getMatch(match().id)?.loadPromise;
|
|
261
239
|
});
|
|
262
240
|
return memo(loaderResult);
|
|
263
241
|
}
|
|
@@ -276,9 +254,8 @@ const MatchInner = (props) => {
|
|
|
276
254
|
children: (_) => {
|
|
277
255
|
invariant(isRedirect(match().error), "Expected a redirect error");
|
|
278
256
|
const [loaderResult] = Solid.createResource(async () => {
|
|
279
|
-
var _a;
|
|
280
257
|
await new Promise((r) => setTimeout(r, 0));
|
|
281
|
-
return
|
|
258
|
+
return router.getMatch(match().id)?.loadPromise;
|
|
282
259
|
});
|
|
283
260
|
return memo(loaderResult);
|
|
284
261
|
}
|
|
@@ -315,10 +292,7 @@ const Outlet = () => {
|
|
|
315
292
|
const router = useRouter();
|
|
316
293
|
const matchId = Solid.useContext(matchContext);
|
|
317
294
|
const routeId = useRouterState({
|
|
318
|
-
select: (s) =>
|
|
319
|
-
var _a;
|
|
320
|
-
return (_a = s.matches.find((d) => d.id === matchId())) == null ? void 0 : _a.routeId;
|
|
321
|
-
}
|
|
295
|
+
select: (s) => s.matches.find((d) => d.id === matchId())?.routeId
|
|
322
296
|
});
|
|
323
297
|
const route = () => router.routesById[routeId()];
|
|
324
298
|
const parentGlobalNotFound = useRouterState({
|
|
@@ -331,10 +305,9 @@ const Outlet = () => {
|
|
|
331
305
|
});
|
|
332
306
|
const childMatchId = useRouterState({
|
|
333
307
|
select: (s) => {
|
|
334
|
-
var _a;
|
|
335
308
|
const matches = s.matches;
|
|
336
309
|
const index = matches.findIndex((d) => d.id === matchId());
|
|
337
|
-
const v =
|
|
310
|
+
const v = matches[index + 1]?.id;
|
|
338
311
|
return v;
|
|
339
312
|
}
|
|
340
313
|
});
|
package/dist/esm/Match.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Match.js","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={<Dynamic component={PendingComponent()} />}\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 out = () => {\n const Comp = route().options.component ?? router.options.defaultComponent\n if (Comp) {\n return (\n <Solid.Show when={matchState().match.id} keyed>\n <Comp />\n </Solid.Show>\n )\n }\n return <Outlet />\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 Promise.resolve().then(() => {\n routerMatch._nonReactive.minPendingPromise = minPendingPromise\n })\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'}>{out()}</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 return (\n <Solid.Switch>\n <Solid.Match when={parentGlobalNotFound()}>\n {renderRouteNotFound(router, route(), undefined)}\n </Solid.Match>\n <Solid.Match when={childMatchId()}>\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.Match>\n </Solid.Switch>\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","getResetKey","ErrorComponent","error","isNotFound","warning","_$mergeProps","Switch","when","Show","isServer","MatchInner","_$memo","rootRouteId","OnRendered","ScrollRestoration","location","resolvedLocation","state","__TSR_key","createEffect","on","emit","type","getLocationChangeInfo","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","undefined","status","_forcePending","out","Comp","defaultComponent","keyed","Outlet","_","displayPendingResult","createResource","getMatch","_nonReactive","displayPendingPromise","minPendingResult","minPendingPromise","pendingMinMs","defaultPendingMinMs","routerMatch","createControlledPromise","resolve","then","setTimeout","loaderResult","Promise","r","loadPromise","renderRouteNotFound","isRedirect","RouteErrorComponent","info","componentStack","useContext","parentGlobalNotFound","parentMatch","globalNotFound","childMatchId","v"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Match.js","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 pick,\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 pick(match, ['routeId', 'ssr', '_displayPending'])\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={<Dynamic component={PendingComponent()} />}\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 matchIndex = s.matches.findIndex((d) => d.id === props.matchId)\n const match = s.matches[matchIndex]!\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: pick(match, [\n 'id',\n 'status',\n 'error',\n '_forcePending',\n '_displayPending',\n ]),\n }\n },\n })\n\n const route = () => router.routesById[matchState().routeId]!\n\n const match = () => matchState().match\n\n const out = () => {\n const Comp = route().options.component ?? router.options.defaultComponent\n if (Comp) {\n return (\n <Solid.Show when={matchState().match.id} keyed>\n <Comp />\n </Solid.Show>\n )\n }\n return <Outlet />\n }\n\n return (\n <Solid.Switch>\n <Solid.Match when={match()._displayPending}>\n {(_) => {\n const [displayPendingResult] = Solid.createResource(\n () => router.getMatch(match().id)?.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)?.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 && !router.getMatch(match().id)?.minPendingPromise) {\n // Create a promise that will resolve after the minPendingMs\n if (!router.isServer) {\n const minPendingPromise = createControlledPromise<void>()\n\n Promise.resolve().then(() => {\n router.updateMatch(match().id, (prev) => ({\n ...prev,\n minPendingPromise,\n }))\n })\n\n setTimeout(() => {\n minPendingPromise.resolve()\n\n // We've handled the minPendingPromise, so we can delete it\n router.updateMatch(match().id, (prev) => ({\n ...prev,\n minPendingPromise: undefined,\n }))\n }, pendingMinMs)\n }\n }\n\n const [loaderResult] = Solid.createResource(async () => {\n await new Promise((r) => setTimeout(r, 0))\n return router.getMatch(match().id)?.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)?.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'}>{out()}</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 return (\n <Solid.Switch>\n <Solid.Match when={parentGlobalNotFound()}>\n {renderRouteNotFound(router, route(), undefined)}\n </Solid.Match>\n <Solid.Match when={childMatchId()}>\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.Match>\n </Solid.Switch>\n )\n}\n"],"names":["Match","props","router","useRouter","matchState","useRouterState","select","s","match","matches","find","d","id","matchId","invariant","pick","route","routesById","routeId","PendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","resolvedNoSsr","ssr","ResolvedSuspenseBoundary","wrapInSuspense","_displayPending","preload","Solid","Suspense","SafeFragment","ResolvedCatchBoundary","CatchBoundary","ResolvedNotFoundBoundary","CatchNotFound","resetKey","loadedAt","parentRouteId","index","findIndex","ShellComponent","shellComponent","_$createComponent","children","matchContext","Provider","value","Dynamic","fallback","getResetKey","ErrorComponent","error","isNotFound","warning","_$mergeProps","Switch","when","Show","isServer","MatchInner","_$memo","rootRouteId","OnRendered","ScrollRestoration","location","resolvedLocation","state","__TSR_key","createEffect","on","emit","type","getLocationChangeInfo","matchIndex","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","undefined","out","Comp","defaultComponent","keyed","Outlet","_","displayPendingResult","createResource","getMatch","displayPendingPromise","_forcePending","minPendingResult","minPendingPromise","status","pendingMinMs","defaultPendingMinMs","createControlledPromise","Promise","resolve","then","updateMatch","prev","setTimeout","loaderResult","r","loadPromise","renderRouteNotFound","isRedirect","RouteErrorComponent","info","componentStack","useContext","parentGlobalNotFound","parentMatch","globalNotFound","childMatchId","v"],"mappings":"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"}
|
package/dist/esm/Matches.js
CHANGED
|
@@ -26,8 +26,7 @@ function MatchesInner() {
|
|
|
26
26
|
const router = useRouter();
|
|
27
27
|
const matchId = useRouterState({
|
|
28
28
|
select: (s) => {
|
|
29
|
-
|
|
30
|
-
return (_a = s.matches[0]) == null ? void 0 : _a.id;
|
|
29
|
+
return s.matches[0]?.id;
|
|
31
30
|
}
|
|
32
31
|
});
|
|
33
32
|
const resetKey = useRouterState({
|
|
@@ -104,7 +103,7 @@ function useMatches(opts) {
|
|
|
104
103
|
return useRouterState({
|
|
105
104
|
select: (state) => {
|
|
106
105
|
const matches = state.matches;
|
|
107
|
-
return
|
|
106
|
+
return opts?.select ? opts.select(matches) : matches;
|
|
108
107
|
}
|
|
109
108
|
});
|
|
110
109
|
}
|
|
@@ -113,7 +112,7 @@ function useParentMatches(opts) {
|
|
|
113
112
|
return useMatches({
|
|
114
113
|
select: (matches) => {
|
|
115
114
|
matches = matches.slice(0, matches.findIndex((d) => d.id === contextMatchId()));
|
|
116
|
-
return
|
|
115
|
+
return opts?.select ? opts.select(matches) : matches;
|
|
117
116
|
}
|
|
118
117
|
});
|
|
119
118
|
}
|
|
@@ -122,7 +121,7 @@ function useChildMatches(opts) {
|
|
|
122
121
|
return useMatches({
|
|
123
122
|
select: (matches) => {
|
|
124
123
|
matches = matches.slice(matches.findIndex((d) => d.id === contextMatchId()) + 1);
|
|
125
|
-
return
|
|
124
|
+
return opts?.select ? opts.select(matches) : matches;
|
|
126
125
|
}
|
|
127
126
|
});
|
|
128
127
|
}
|
package/dist/esm/Matches.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Matches.js","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport warning from 'tiny-warning'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { Transitioner } from './Transitioner'\nimport { matchContext } from './matchContext'\nimport { Match } from './Match'\nimport { SafeFragment } from './SafeFragment'\nimport type {\n AnyRouter,\n DeepPartial,\n Expand,\n MakeOptionalPathParams,\n MakeOptionalSearchParams,\n MakeRouteMatchUnion,\n MaskOptions,\n MatchRouteOptions,\n NoInfer,\n RegisteredRouter,\n ResolveRelativePath,\n ResolveRoute,\n RouteByPath,\n RouterState,\n ToSubOptionsProps,\n} from '@tanstack/router-core'\n\ndeclare module '@tanstack/router-core' {\n export interface RouteMatchExtensions {\n meta?: Array<Solid.JSX.IntrinsicElements['meta'] | undefined>\n links?: Array<Solid.JSX.IntrinsicElements['link'] | undefined>\n scripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n styles?: Array<Solid.JSX.IntrinsicElements['style'] | undefined>\n headScripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n }\n}\n\nexport function Matches() {\n const router = useRouter()\n\n const pendingElement = router.options.defaultPendingComponent ? (\n <router.options.defaultPendingComponent />\n ) : null\n\n // Do not render a root Suspense during SSR or hydrating from SSR\n const ResolvedSuspense =\n router.isServer || (typeof document !== 'undefined' && router.ssr)\n ? SafeFragment\n : Solid.Suspense\n\n const inner = (\n <ResolvedSuspense fallback={pendingElement}>\n {!router.isServer && <Transitioner />}\n <MatchesInner />\n </ResolvedSuspense>\n )\n\n return router.options.InnerWrap ? (\n <router.options.InnerWrap>{inner}</router.options.InnerWrap>\n ) : (\n inner\n )\n}\n\nfunction MatchesInner() {\n const router = useRouter()\n const matchId = useRouterState({\n select: (s) => {\n return s.matches[0]?.id\n },\n })\n\n const resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n const matchComponent = () =>\n matchId() ? <Match matchId={matchId()!} /> : null\n\n return (\n <matchContext.Provider value={matchId}>\n {router.options.disableGlobalCatchBoundary ? (\n matchComponent()\n ) : (\n <CatchBoundary\n getResetKey={() => resetKey()}\n errorComponent={ErrorComponent}\n onCatch={(error) => {\n warning(\n false,\n `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,\n )\n warning(false, error.message || error.toString())\n }}\n >\n {matchComponent()}\n </CatchBoundary>\n )}\n </matchContext.Provider>\n )\n}\n\nexport type UseMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptionsProps<TRouter, TFrom, TTo> &\n DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> &\n DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> &\n MaskOptions<TRouter, TMaskFrom, TMaskTo> &\n MatchRouteOptions\n\nexport function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {\n const router = useRouter()\n\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return <\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n >(\n opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n ): Solid.Accessor<\n false | Expand<ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']>\n > => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n const matchRoute = Solid.createMemo(() => {\n status()\n return router.matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n })\n\n return matchRoute\n }\n}\n\nexport type MakeMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | ((\n params?: RouteByPath<\n TRouter['routeTree'],\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => Solid.JSX.Element)\n | Solid.JSX.Element\n}\n\nexport function MatchRoute<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any {\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return (\n <Solid.Show when={status()} keyed>\n {(_) => {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)() as boolean\n const child = props.children\n if (typeof child === 'function') {\n return (child as any)(params)\n }\n\n return params ? child : null\n }}\n </Solid.Show>\n )\n}\n\nexport interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected\n}\n\nexport type UseMatchesResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected\n\nexport function useMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n return useRouterState({\n select: (state: RouterState<TRouter['routeTree']>) => {\n const matches = state.matches\n return opts?.select\n ? opts.select(matches as Array<MakeRouteMatchUnion<TRouter>>)\n : matches\n },\n } as any) as Solid.Accessor<UseMatchesResult<TRouter, TSelected>>\n}\n\nexport function useParentMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n 0,\n matches.findIndex((d) => d.id === contextMatchId()),\n )\n return opts?.select ? opts.select(matches) : matches\n },\n } as any)\n}\n\nexport function useChildMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n matches.findIndex((d) => d.id === contextMatchId()) + 1,\n )\n return opts?.select ? opts.select(matches) : matches\n },\n } as any)\n}\n"],"names":["Matches","router","useRouter","pendingElement","options","defaultPendingComponent","_$createComponent","ResolvedSuspense","isServer","document","ssr","SafeFragment","Solid","Suspense","inner","fallback","children","_$memo","Transitioner","MatchesInner","InnerWrap","matchId","useRouterState","select","s","matches","id","resetKey","loadedAt","matchComponent","Match","matchContext","Provider","value","disableGlobalCatchBoundary","CatchBoundary","getResetKey","errorComponent","ErrorComponent","onCatch","error","warning","message","toString","useMatchRoute","status","opts","pending","caseSensitive","fuzzy","includeSearch","rest","matchRoute","createMemo","MatchRoute","props","Show","when","keyed","_","params","child","useMatches","state","useParentMatches","contextMatchId","useContext","slice","findIndex","d","useChildMatches"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Matches.js","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport warning from 'tiny-warning'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { Transitioner } from './Transitioner'\nimport { matchContext } from './matchContext'\nimport { Match } from './Match'\nimport { SafeFragment } from './SafeFragment'\nimport type {\n AnyRouter,\n DeepPartial,\n Expand,\n MakeOptionalPathParams,\n MakeOptionalSearchParams,\n MakeRouteMatchUnion,\n MaskOptions,\n MatchRouteOptions,\n NoInfer,\n RegisteredRouter,\n ResolveRelativePath,\n ResolveRoute,\n RouteByPath,\n RouterState,\n ToSubOptionsProps,\n} from '@tanstack/router-core'\n\ndeclare module '@tanstack/router-core' {\n export interface RouteMatchExtensions {\n meta?: Array<Solid.JSX.IntrinsicElements['meta'] | undefined>\n links?: Array<Solid.JSX.IntrinsicElements['link'] | undefined>\n scripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n styles?: Array<Solid.JSX.IntrinsicElements['style'] | undefined>\n headScripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n }\n}\n\nexport function Matches() {\n const router = useRouter()\n\n const pendingElement = router.options.defaultPendingComponent ? (\n <router.options.defaultPendingComponent />\n ) : null\n\n // Do not render a root Suspense during SSR or hydrating from SSR\n const ResolvedSuspense =\n router.isServer || (typeof document !== 'undefined' && router.ssr)\n ? SafeFragment\n : Solid.Suspense\n\n const inner = (\n <ResolvedSuspense fallback={pendingElement}>\n {!router.isServer && <Transitioner />}\n <MatchesInner />\n </ResolvedSuspense>\n )\n\n return router.options.InnerWrap ? (\n <router.options.InnerWrap>{inner}</router.options.InnerWrap>\n ) : (\n inner\n )\n}\n\nfunction MatchesInner() {\n const router = useRouter()\n const matchId = useRouterState({\n select: (s) => {\n return s.matches[0]?.id\n },\n })\n\n const resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n const matchComponent = () =>\n matchId() ? <Match matchId={matchId()!} /> : null\n\n return (\n <matchContext.Provider value={matchId}>\n {router.options.disableGlobalCatchBoundary ? (\n matchComponent()\n ) : (\n <CatchBoundary\n getResetKey={() => resetKey()}\n errorComponent={ErrorComponent}\n onCatch={(error) => {\n warning(\n false,\n `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,\n )\n warning(false, error.message || error.toString())\n }}\n >\n {matchComponent()}\n </CatchBoundary>\n )}\n </matchContext.Provider>\n )\n}\n\nexport type UseMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptionsProps<TRouter, TFrom, TTo> &\n DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> &\n DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> &\n MaskOptions<TRouter, TMaskFrom, TMaskTo> &\n MatchRouteOptions\n\nexport function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {\n const router = useRouter()\n\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return <\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n >(\n opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n ): Solid.Accessor<\n false | Expand<ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']>\n > => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n const matchRoute = Solid.createMemo(() => {\n status()\n return router.matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n })\n\n return matchRoute\n }\n}\n\nexport type MakeMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | ((\n params?: RouteByPath<\n TRouter['routeTree'],\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => Solid.JSX.Element)\n | Solid.JSX.Element\n}\n\nexport function MatchRoute<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any {\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return (\n <Solid.Show when={status()} keyed>\n {(_) => {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)() as boolean\n const child = props.children\n if (typeof child === 'function') {\n return (child as any)(params)\n }\n\n return params ? child : null\n }}\n </Solid.Show>\n )\n}\n\nexport interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected\n}\n\nexport type UseMatchesResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected\n\nexport function useMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n return useRouterState({\n select: (state: RouterState<TRouter['routeTree']>) => {\n const matches = state.matches\n return opts?.select\n ? opts.select(matches as Array<MakeRouteMatchUnion<TRouter>>)\n : matches\n },\n } as any) as Solid.Accessor<UseMatchesResult<TRouter, TSelected>>\n}\n\nexport function useParentMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n 0,\n matches.findIndex((d) => d.id === contextMatchId()),\n )\n return opts?.select ? opts.select(matches) : matches\n },\n } as any)\n}\n\nexport function useChildMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n matches.findIndex((d) => d.id === contextMatchId()) + 1,\n )\n return opts?.select ? opts.select(matches) : matches\n },\n } as any)\n}\n"],"names":["Matches","router","useRouter","pendingElement","options","defaultPendingComponent","_$createComponent","ResolvedSuspense","isServer","document","ssr","SafeFragment","Solid","Suspense","inner","fallback","children","_$memo","Transitioner","MatchesInner","InnerWrap","matchId","useRouterState","select","s","matches","id","resetKey","loadedAt","matchComponent","Match","matchContext","Provider","value","disableGlobalCatchBoundary","CatchBoundary","getResetKey","errorComponent","ErrorComponent","onCatch","error","warning","message","toString","useMatchRoute","status","opts","pending","caseSensitive","fuzzy","includeSearch","rest","matchRoute","createMemo","MatchRoute","props","Show","when","keyed","_","params","child","useMatches","state","useParentMatches","contextMatchId","useContext","slice","findIndex","d","useChildMatches"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouterProvider.js","sources":["../../src/RouterProvider.tsx"],"sourcesContent":["import { Matches } from './Matches'\nimport { getRouterContext } from './routerContext'\nimport type * as Solid from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterOptions,\n} from '@tanstack/router-core'\n\nexport function RouterContextProvider<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({\n router,\n children,\n ...rest\n}: RouterProps<TRouter, TDehydrated> & {\n children: () => Solid.JSX.Element\n}) {\n // Allow the router to update options on the router instance\n router.update({\n ...router.options,\n ...rest,\n context: {\n ...router.options.context,\n ...rest.context,\n },\n } as any)\n\n const routerContext = getRouterContext()\n\n const provider = (\n <routerContext.Provider value={router as AnyRouter}>\n {children()}\n </routerContext.Provider>\n )\n\n if (router.options.Wrap) {\n return <router.options.Wrap>{provider}</router.options.Wrap>\n }\n\n return provider\n}\n\nexport function RouterProvider<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({ router, ...rest }: RouterProps<TRouter, TDehydrated>) {\n return (\n <RouterContextProvider router={router} {...rest}>\n {() => <Matches />}\n </RouterContextProvider>\n )\n}\n\nexport type RouterProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<\n RouterOptions<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n false,\n TRouter['history'],\n TDehydrated\n >,\n 'context'\n> & {\n router: TRouter\n context?: Partial<\n RouterOptions<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n false,\n TRouter['history'],\n TDehydrated\n >['context']\n >\n}\n"],"names":["RouterContextProvider","router","children","rest","update","options","context","routerContext","getRouterContext","provider","_$createComponent","Provider","value","Wrap","RouterProvider","_$mergeProps","Matches"],"mappings":";;;AASO,SAASA,sBAGd;AAAA,EACAC;AAAAA,EACAC;AAAAA,EACA,GAAGC;AAGL,GAAG;AAEDF,SAAOG,OAAO;AAAA,IACZ,GAAGH,OAAOI;AAAAA,IACV,GAAGF;AAAAA,IACHG,SAAS;AAAA,MACP,GAAGL,OAAOI,QAAQC;AAAAA,MAClB,GAAGH,KAAKG;AAAAA,IAAAA;AAAAA,EACV,CACM;AAER,QAAMC,gBAAgBC,
|
|
1
|
+
{"version":3,"file":"RouterProvider.js","sources":["../../src/RouterProvider.tsx"],"sourcesContent":["import { Matches } from './Matches'\nimport { getRouterContext } from './routerContext'\nimport type * as Solid from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterOptions,\n} from '@tanstack/router-core'\n\nexport function RouterContextProvider<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({\n router,\n children,\n ...rest\n}: RouterProps<TRouter, TDehydrated> & {\n children: () => Solid.JSX.Element\n}) {\n // Allow the router to update options on the router instance\n router.update({\n ...router.options,\n ...rest,\n context: {\n ...router.options.context,\n ...rest.context,\n },\n } as any)\n\n const routerContext = getRouterContext()\n\n const provider = (\n <routerContext.Provider value={router as AnyRouter}>\n {children()}\n </routerContext.Provider>\n )\n\n if (router.options.Wrap) {\n return <router.options.Wrap>{provider}</router.options.Wrap>\n }\n\n return provider\n}\n\nexport function RouterProvider<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({ router, ...rest }: RouterProps<TRouter, TDehydrated>) {\n return (\n <RouterContextProvider router={router} {...rest}>\n {() => <Matches />}\n </RouterContextProvider>\n )\n}\n\nexport type RouterProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<\n RouterOptions<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n false,\n TRouter['history'],\n TDehydrated\n >,\n 'context'\n> & {\n router: TRouter\n context?: Partial<\n RouterOptions<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n false,\n TRouter['history'],\n TDehydrated\n >['context']\n >\n}\n"],"names":["RouterContextProvider","router","children","rest","update","options","context","routerContext","getRouterContext","provider","_$createComponent","Provider","value","Wrap","RouterProvider","_$mergeProps","Matches"],"mappings":";;;AASO,SAASA,sBAGd;AAAA,EACAC;AAAAA,EACAC;AAAAA,EACA,GAAGC;AAGL,GAAG;AAEDF,SAAOG,OAAO;AAAA,IACZ,GAAGH,OAAOI;AAAAA,IACV,GAAGF;AAAAA,IACHG,SAAS;AAAA,MACP,GAAGL,OAAOI,QAAQC;AAAAA,MAClB,GAAGH,KAAKG;AAAAA,IAAAA;AAAAA,EACV,CACM;AAER,QAAMC,gBAAgBC,iBAAAA;AAEtB,QAAMC,WAAQC,gBACXH,cAAcI,UAAQ;AAAA,IAACC,OAAOX;AAAAA,IAAmB,IAAAC,WAAA;AAAA,aAC/CA,SAAAA;AAAAA,IAAU;AAAA,EAAA,CAAA;AAIf,MAAID,OAAOI,QAAQQ,MAAM;AACvB,WAAAH,gBAAQT,OAAOI,QAAQQ,MAAI;AAAA,MAAAX,UAAEO;AAAAA,IAAAA,CAAQ;AAAA,EACvC;AAEA,SAAOA;AACT;AAEO,SAASK,eAGd;AAAA,EAAEb;AAAAA,EAAQ,GAAGE;AAAwC,GAAG;AACxD,SAAAO,gBACGV,uBAAqBe,WAAA;AAAA,IAACd;AAAAA,EAAAA,GAAoBE,MAAI;AAAA,IAAAD,UAC5CA,MAAAQ,gBAAOM,SAAO,CAAA,CAAA;AAAA,EAAA,CAAG,CAAA;AAGxB;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SafeFragment.js","sources":["../../src/SafeFragment.tsx"],"sourcesContent":["export function SafeFragment(props: any) {\n return <>{props.children}</>\n}\n"],"names":["SafeFragment","props","_$memo","children"],"mappings":";AAAO,SAASA,aAAaC,OAAY;
|
|
1
|
+
{"version":3,"file":"SafeFragment.js","sources":["../../src/SafeFragment.tsx"],"sourcesContent":["export function SafeFragment(props: any) {\n return <>{props.children}</>\n}\n"],"names":["SafeFragment","props","_$memo","children"],"mappings":";AAAO,SAASA,aAAaC,OAAY;AACvC,SAAAC,KAAA,MAAUD,MAAME,QAAQ;AAC1B;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptOnce.js","sources":["../../src/ScriptOnce.tsx"],"sourcesContent":["export function ScriptOnce({\n children,\n}: {\n children: string\n log?: boolean\n sync?: boolean\n}) {\n if (typeof document !== 'undefined') {\n return null\n }\n\n return (\n <script\n class=\"tsr-once\"\n innerHTML={[children].filter(Boolean).join('\\n')}\n />\n )\n}\n"],"names":["ScriptOnce","children","document","_el$","_tmpl$","innerHTML","filter","Boolean","join"],"mappings":";;AAAO,SAASA,WAAW;AAAA,EACzBC;AAKF,GAAG;
|
|
1
|
+
{"version":3,"file":"ScriptOnce.js","sources":["../../src/ScriptOnce.tsx"],"sourcesContent":["export function ScriptOnce({\n children,\n}: {\n children: string\n log?: boolean\n sync?: boolean\n}) {\n if (typeof document !== 'undefined') {\n return null\n }\n\n return (\n <script\n class=\"tsr-once\"\n innerHTML={[children].filter(Boolean).join('\\n')}\n />\n )\n}\n"],"names":["ScriptOnce","children","document","_el$","_tmpl$","_$effect","innerHTML","filter","Boolean","join"],"mappings":";;AAAO,SAASA,WAAW;AAAA,EACzBC;AAKF,GAAG;AACD,MAAI,OAAOC,aAAa,aAAa;AACnC,WAAO;AAAA,EACT;AAEA,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAAA;AAAAC,iBAAAF,KAAAG,YAGe,CAACL,QAAQ,EAAEM,OAAOC,OAAO,EAAEC,KAAK,IAAI,CAAC;AAAA,WAAAN;AAAAA,EAAA,GAAA;AAGtD;"}
|
package/dist/esm/Scripts.js
CHANGED
|
@@ -6,22 +6,18 @@ const Scripts = () => {
|
|
|
6
6
|
const router = useRouter();
|
|
7
7
|
const assetScripts = useRouterState({
|
|
8
8
|
select: (state) => {
|
|
9
|
-
var _a;
|
|
10
9
|
const assetScripts2 = [];
|
|
11
|
-
const manifest =
|
|
10
|
+
const manifest = router.ssr?.manifest;
|
|
12
11
|
if (!manifest) {
|
|
13
12
|
return [];
|
|
14
13
|
}
|
|
15
|
-
state.matches.map((match) => router.looseRoutesById[match.routeId]).forEach((route) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
attrs: asset.attrs,
|
|
21
|
-
children: asset.children
|
|
22
|
-
});
|
|
14
|
+
state.matches.map((match) => router.looseRoutesById[match.routeId]).forEach((route) => manifest.routes[route.id]?.assets?.filter((d) => d.tag === "script").forEach((asset) => {
|
|
15
|
+
assetScripts2.push({
|
|
16
|
+
tag: "script",
|
|
17
|
+
attrs: asset.attrs,
|
|
18
|
+
children: asset.children
|
|
23
19
|
});
|
|
24
|
-
});
|
|
20
|
+
}));
|
|
25
21
|
return assetScripts2;
|
|
26
22
|
}
|
|
27
23
|
});
|
package/dist/esm/Scripts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scripts.js","sources":["../../src/Scripts.tsx"],"sourcesContent":["import { Asset } from './Asset'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const Scripts = () => {\n const router = useRouter()\n\n const assetScripts = useRouterState({\n select: (state) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: asset.attrs,\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n },\n })\n\n const scripts = useRouterState({\n select: (state) => ({\n scripts: (\n state.matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n },\n children,\n })),\n }),\n })\n\n const allScripts = [\n ...scripts().scripts,\n ...assetScripts(),\n ] as Array<RouterManagedTag>\n\n return (\n <>\n {allScripts.map((asset, i) => (\n <Asset {...asset} />\n ))}\n </>\n )\n}\n"],"names":["Scripts","router","useRouter","assetScripts","useRouterState","select","state","manifest","ssr","matches","map","match","looseRoutesById","routeId","forEach","route","routes","id","assets","filter","d","tag","asset","push","attrs","children","scripts","flat","Boolean","script","allScripts","_$memo","i","_$createComponent","Asset"],"mappings":";;;;AAKO,MAAMA,UAAUA,MAAM;AAC3B,QAAMC,SAASC,
|
|
1
|
+
{"version":3,"file":"Scripts.js","sources":["../../src/Scripts.tsx"],"sourcesContent":["import { Asset } from './Asset'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const Scripts = () => {\n const router = useRouter()\n\n const assetScripts = useRouterState({\n select: (state) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: asset.attrs,\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n },\n })\n\n const scripts = useRouterState({\n select: (state) => ({\n scripts: (\n state.matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n },\n children,\n })),\n }),\n })\n\n const allScripts = [\n ...scripts().scripts,\n ...assetScripts(),\n ] as Array<RouterManagedTag>\n\n return (\n <>\n {allScripts.map((asset, i) => (\n <Asset {...asset} />\n ))}\n </>\n )\n}\n"],"names":["Scripts","router","useRouter","assetScripts","useRouterState","select","state","manifest","ssr","matches","map","match","looseRoutesById","routeId","forEach","route","routes","id","assets","filter","d","tag","asset","push","attrs","children","scripts","flat","Boolean","script","allScripts","_$memo","i","_$createComponent","Asset"],"mappings":";;;;AAKO,MAAMA,UAAUA,MAAM;AAC3B,QAAMC,SAASC,UAAAA;AAEf,QAAMC,eAAeC,eAAe;AAAA,IAClCC,QAASC,CAAAA,UAAU;AACjB,YAAMH,gBAAwC,CAAA;AAC9C,YAAMI,WAAWN,OAAOO,KAAKD;AAE7B,UAAI,CAACA,UAAU;AACb,eAAO,CAAA;AAAA,MACT;AAEAD,YAAMG,QACHC,IAAKC,CAAAA,UAAUV,OAAOW,gBAAgBD,MAAME,OAAO,CAAE,EACrDC,QAASC,CAAAA,UACRR,SAASS,OAAOD,MAAME,EAAE,GAAGC,QACvBC,OAAQC,CAAAA,MAAMA,EAAEC,QAAQ,QAAQ,EACjCP,QAASQ,CAAAA,UAAU;AAClBnB,sBAAaoB,KAAK;AAAA,UAChBF,KAAK;AAAA,UACLG,OAAOF,MAAME;AAAAA,UACbC,UAAUH,MAAMG;AAAAA,QAAAA,CACV;AAAA,MACV,CAAC,CACL;AAEF,aAAOtB;AAAAA,IACT;AAAA,EAAA,CACD;AAED,QAAMuB,UAAUtB,eAAe;AAAA,IAC7BC,QAASC,CAAAA,WAAW;AAAA,MAClBoB,SACEpB,MAAMG,QACHC,IAAKC,WAAUA,MAAMe,OAAQ,EAC7BC,KAAK,CAAC,EACNR,OAAOS,OAAO,EACjBlB,IAAI,CAAC;AAAA,QAAEe;AAAAA,QAAU,GAAGI;AAAAA,MAAAA,OAAc;AAAA,QAClCR,KAAK;AAAA,QACLG,OAAO;AAAA,UACL,GAAGK;AAAAA,QAAAA;AAAAA,QAELJ;AAAAA,MAAAA,EACA;AAAA,IAAA;AAAA,EACJ,CACD;AAED,QAAMK,aAAa,CACjB,GAAGJ,QAAAA,EAAUA,SACb,GAAGvB,cAAc;AAGnB,SAAA4B,KAAA,MAEKD,WAAWpB,IAAI,CAACY,OAAOU,MAACC,gBACtBC,OAAUZ,KAAK,CACjB,CAAC;AAGR;"}
|
|
@@ -12,7 +12,6 @@ function ScrollRestoration(_props) {
|
|
|
12
12
|
return null;
|
|
13
13
|
}
|
|
14
14
|
function useElementScrollRestoration(options) {
|
|
15
|
-
var _a, _b;
|
|
16
15
|
useScrollRestoration();
|
|
17
16
|
const router = useRouter();
|
|
18
17
|
const getKey = options.getKey || defaultGetScrollRestorationKey;
|
|
@@ -20,15 +19,15 @@ function useElementScrollRestoration(options) {
|
|
|
20
19
|
if (options.id) {
|
|
21
20
|
elementSelector = `[data-scroll-restoration-id="${options.id}"]`;
|
|
22
21
|
} else {
|
|
23
|
-
const element =
|
|
22
|
+
const element = options.getElement?.();
|
|
24
23
|
if (!element) {
|
|
25
24
|
return;
|
|
26
25
|
}
|
|
27
26
|
elementSelector = element instanceof Window ? "window" : getCssSelector(element);
|
|
28
27
|
}
|
|
29
28
|
const restoreKey = getKey(router.latestLocation);
|
|
30
|
-
const byKey =
|
|
31
|
-
return byKey
|
|
29
|
+
const byKey = scrollRestorationCache?.state[restoreKey];
|
|
30
|
+
return byKey?.[elementSelector];
|
|
32
31
|
}
|
|
33
32
|
export {
|
|
34
33
|
ScrollRestoration,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollRestoration.js","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"],"names":["useScrollRestoration","router","useRouter","setupScrollRestoration","ScrollRestoration","_props","process","env","NODE_ENV","console","warn","useElementScrollRestoration","options","getKey","defaultGetScrollRestorationKey","elementSelector","id","element","getElement","Window","getCssSelector","restoreKey","latestLocation","byKey","scrollRestorationCache","state"],"mappings":";;AAaA,SAASA,uBAAuB;AAC9B,QAAMC,SAASC,
|
|
1
|
+
{"version":3,"file":"ScrollRestoration.js","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"],"names":["useScrollRestoration","router","useRouter","setupScrollRestoration","ScrollRestoration","_props","process","env","NODE_ENV","console","warn","useElementScrollRestoration","options","getKey","defaultGetScrollRestorationKey","elementSelector","id","element","getElement","Window","getCssSelector","restoreKey","latestLocation","byKey","scrollRestorationCache","state"],"mappings":";;AAaA,SAASA,uBAAuB;AAC9B,QAAMC,SAASC,UAAAA;AACfC,yBAAuBF,QAAQ,IAAI;AACrC;AAKO,SAASG,kBAAkBC,QAAkC;AAClEL,uBAAAA;AAEA,MAAIM,QAAQC,IAAIC,aAAa,eAAe;AAC1CC,YAAQC,KACN,uGACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAASC,4BACdC,SAYoC;AACpCZ,uBAAAA;AAEA,QAAMC,SAASC,UAAAA;AACf,QAAMW,SAASD,QAAQC,UAAUC;AAEjC,MAAIC,kBAAkB;AAEtB,MAAIH,QAAQI,IAAI;AACdD,sBAAkB,gCAAgCH,QAAQI,EAAE;AAAA,EAC9D,OAAO;AACL,UAAMC,UAAUL,QAAQM,aAAAA;AACxB,QAAI,CAACD,SAAS;AACZ;AAAA,IACF;AACAF,sBACEE,mBAAmBE,SAAS,WAAWC,eAAeH,OAAO;AAAA,EACjE;AAEA,QAAMI,aAAaR,OAAOZ,OAAOqB,cAAc;AAC/C,QAAMC,QAAQC,wBAAwBC,MAAMJ,UAAU;AACtD,SAAOE,QAAQR,eAAe;AAChC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transitioner.js","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 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 = async (fn: () => void | Promise<void>) => {\n setIsTransitioning(true)\n await fn()\n setIsTransitioning(false)\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.createRenderEffect(\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","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","__store","setState","resolvedLocation","location","handleHashScroll"],"mappings":";;;;;AAUO,SAASA,eAAe;AAC7B,QAAMC,SAASC,
|
|
1
|
+
{"version":3,"file":"Transitioner.js","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 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 = async (fn: () => void | Promise<void>) => {\n setIsTransitioning(true)\n await fn()\n setIsTransitioning(false)\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.createRenderEffect(\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","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","__store","setState","resolvedLocation","location","handleHashScroll"],"mappings":";;;;;AAUO,SAASA,eAAe;AAC7B,QAAMC,SAASC,UAAAA;AACf,MAAIC,qBAAqB;AAAA,IAAEF;AAAAA,IAAQG,SAAS;AAAA,EAAA;AAC5C,QAAMC,YAAYC,eAAe;AAAA,IAC/BC,QAAQA,CAAC;AAAA,MAAEF,WAAAA;AAAAA,IAAAA,MAAgBA;AAAAA,EAAAA,CAC5B;AAED,QAAM,CAACG,iBAAiBC,kBAAkB,IAAIC,MAAMC,aAAa,KAAK;AAEtE,QAAMC,oBAAoBN,eAAe;AAAA,IACvCC,QAASM,OAAMA,EAAEC,QAAQC,KAAMC,CAAAA,MAAMA,EAAEC,WAAW,SAAS;AAAA,EAAA,CAC5D;AAED,QAAMC,oBAAoBC,YAAYd,SAAS;AAE/C,QAAMe,eAAeA,MACnBf,UAAAA,KAAeG,gBAAAA,KAAqBI,kBAAAA;AACtC,QAAMS,uBAAuBF,YAAYC,YAAY;AAErD,QAAME,gBAAgBA,MAAMjB,UAAAA,KAAeO,kBAAAA;AAC3C,QAAMW,wBAAwBJ,YAAYG,aAAa;AAEvDrB,SAAOuB,kBAAkB,OAAOC,OAAmC;AACjEhB,uBAAmB,IAAI;AACvB,UAAMgB,GAAAA;AACNhB,uBAAmB,KAAK;AAAA,EAC1B;AAIAC,QAAMgB,QAAQ,MAAM;AAClB,UAAMC,QAAQ1B,OAAO2B,QAAQC,UAAU5B,OAAO6B,IAAI;AAElD,UAAMC,eAAe9B,OAAO+B,cAAc;AAAA,MACxCC,IAAIhC,OAAOiC,eAAeC;AAAAA,MAC1BC,QAAQ;AAAA,MACRC,QAAQ;AAAA,MACRC,MAAM;AAAA,MACNC,OAAO;AAAA,MACPC,wBAAwB;AAAA,IAAA,CACzB;AAED,QACEC,cAAcxC,OAAOiC,eAAeQ,IAAI,MACxCD,cAAcV,aAAaW,IAAI,GAC/B;AACAzC,aAAO0C,eAAe;AAAA,QAAE,GAAGZ;AAAAA,QAAca,SAAS;AAAA,MAAA,CAAM;AAAA,IAC1D;AAEAlC,UAAMmC,UAAU,MAAM;AACpBlB,YAAAA;AAAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGDjB,QAAMoC,mBAAmB,MAAM;AAC7BpC,UAAMqC,QAAQ,MAAM;AAClB;AAAA;AAAA,QAEG,OAAOC,WAAW,eAAe/C,OAAOgD,OACxC9C,mBAAmBF,WAAWA,UAAUE,mBAAmBC;AAAAA,QAC5D;AACA;AAAA,MACF;AACAD,2BAAqB;AAAA,QAAEF;AAAAA,QAAQG,SAAS;AAAA,MAAA;AACxC,YAAM8C,UAAU,YAAY;AAC1B,YAAI;AACF,gBAAMjD,OAAO6B,KAAAA;AAAAA,QACf,SAASqB,KAAK;AACZC,kBAAQC,MAAMF,GAAG;AAAA,QACnB;AAAA,MACF;AACAD,cAAAA;AAAAA,IACF,CAAC;AAAA,EACH,CAAC;AAEDxC,QAAMoC,mBACJpC,MAAM4C,GACJ,CAACpC,mBAAmBb,SAAS,GAC7B,CAAC,CAACa,oBAAmBb,UAAS,MAAM;AAClC,QAAIa,mBAAkBqC,YAAY,CAAClD,YAAW;AAC5CJ,aAAOuD,KAAK;AAAA,QACVC,MAAM;AAAA,QACN,GAAGC,sBAAsBzD,OAAOsC,KAAK;AAAA,MAAA,CACtC;AAAA,IACH;AAAA,EACF,CACF,CACF;AAEA7B,QAAMoC,mBACJpC,MAAM4C,GACJ,CAAChC,eAAeC,qBAAqB,GACrC,CAAC,CAACD,gBAAeC,sBAAqB,MAAM;AAE1C,QAAIA,uBAAsBgC,YAAY,CAACjC,gBAAe;AACpDrB,aAAOuD,KAAK;AAAA,QACVC,MAAM;AAAA,QACN,GAAGC,sBAAsBzD,OAAOsC,KAAK;AAAA,MAAA,CACtC;AAAA,IACH;AAAA,EACF,CACF,CACF;AAEA7B,QAAMoC,mBACJpC,MAAM4C,GACJ,CAAClC,cAAcC,oBAAoB,GACnC,CAAC,CAACD,eAAcC,qBAAoB,MAAM;AAExC,QAAIA,sBAAqBkC,YAAY,CAACnC,eAAc;AAClDnB,aAAOuD,KAAK;AAAA,QACVC,MAAM;AAAA,QACN,GAAGC,sBAAsBzD,OAAOsC,KAAK;AAAA,MAAA,CACtC;AAEDtC,aAAO0D,QAAQC,SAAU/C,CAAAA,OAAO;AAAA,QAC9B,GAAGA;AAAAA,QACHI,QAAQ;AAAA,QACR4C,kBAAkBhD,EAAEiD;AAAAA,MAAAA,EACpB;AAEFC,uBAAiB9D,MAAM;AAAA,IACzB;AAAA,EACF,CACF,CACF;AAEA,SAAO;AACT;"}
|