@tanstack/solid-router 1.124.0 → 1.125.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.
@@ -32,14 +32,14 @@ function _interopNamespaceDefault(e) {
32
32
  const Solid__namespace = /* @__PURE__ */ _interopNamespaceDefault(Solid$1);
33
33
  const Match = (props) => {
34
34
  const router = useRouter.useRouter();
35
- const routeId = useRouterState.useRouterState({
35
+ const matchState = useRouterState.useRouterState({
36
36
  select: (s) => {
37
- var _a;
38
- return (_a = s.matches.find((d) => d.id === props.matchId)) == null ? void 0 : _a.routeId;
37
+ const match = s.matches.find((d) => d.id === props.matchId);
38
+ invariant(match, `Could not find match for matchId "${props.matchId}". Please file an issue!`);
39
+ return routerCore.pick(match, ["routeId", "ssr", "_displayPending"]);
39
40
  }
40
41
  });
41
- invariant(routeId, `Could not find routeId for matchId "${props.matchId}". Please file an issue!`);
42
- const route = () => router.routesById[routeId()];
42
+ const route = () => router.routesById[matchState().routeId];
43
43
  const PendingComponent = () => route().options.pendingComponent ?? router.options.defaultPendingComponent;
44
44
  const routeErrorComponent = () => route().options.errorComponent ?? router.options.defaultErrorComponent;
45
45
  const routeOnCatch = () => route().options.onCatch ?? router.options.defaultOnCatch;
@@ -50,11 +50,12 @@ const Match = (props) => {
50
50
  route().options.notFoundComponent ?? ((_a = router.options.notFoundRoute) == null ? void 0 : _a.options.component)
51
51
  ) : route().options.notFoundComponent;
52
52
  };
53
+ const resolvedNoSsr = matchState().ssr === false || matchState().ssr === "data-only";
53
54
  const ResolvedSuspenseBoundary = () => {
54
55
  var _a;
55
56
  return (
56
57
  // If we're on the root route, allow forcefully wrapping in suspense
57
- (!route().isRoot || route().options.wrapInSuspense) && (route().options.wrapInSuspense ?? PendingComponent() ?? ((_a = route().options.errorComponent) == null ? void 0 : _a.preload)) ? Solid__namespace.Suspense : SafeFragment.SafeFragment
58
+ (!route().isRoot || route().options.wrapInSuspense || resolvedNoSsr || matchState()._displayPending) && (route().options.wrapInSuspense ?? PendingComponent() ?? (((_a = route().options.errorComponent) == null ? void 0 : _a.preload) || resolvedNoSsr)) ? Solid__namespace.Suspense : SafeFragment.SafeFragment
58
59
  );
59
60
  };
60
61
  const ResolvedCatchBoundary = () => routeErrorComponent() ? CatchBoundary.CatchBoundary : SafeFragment.SafeFragment;
@@ -107,7 +108,7 @@ const Match = (props) => {
107
108
  return ResolvedNotFoundBoundary();
108
109
  },
109
110
  fallback: (error) => {
110
- if (!routeNotFoundComponent() || error.routeId && error.routeId !== routeId || !error.routeId && !route().isRoot) throw error;
111
+ if (!routeNotFoundComponent() || error.routeId && error.routeId !== matchState().routeId || !error.routeId && !route().isRoot) throw error;
111
112
  return Solid.createComponent(Solid.Dynamic, Solid.mergeProps({
112
113
  get component() {
113
114
  return routeNotFoundComponent();
@@ -115,9 +116,43 @@ const Match = (props) => {
115
116
  }, error));
116
117
  },
117
118
  get children() {
118
- return Solid.createComponent(MatchInner, {
119
- get matchId() {
120
- return props.matchId;
119
+ return Solid.createComponent(Solid__namespace.Switch, {
120
+ get children() {
121
+ return [Solid.createComponent(Solid__namespace.Match, {
122
+ get when() {
123
+ return resolvedNoSsr || router.isShell;
124
+ },
125
+ get children() {
126
+ return Solid.createComponent(Solid__namespace.Show, {
127
+ get when() {
128
+ return !router.isServer;
129
+ },
130
+ get fallback() {
131
+ return Solid.createComponent(Solid.Dynamic, {
132
+ get component() {
133
+ return PendingComponent();
134
+ }
135
+ });
136
+ },
137
+ get children() {
138
+ return Solid.createComponent(MatchInner, {
139
+ get matchId() {
140
+ return props.matchId;
141
+ }
142
+ });
143
+ }
144
+ });
145
+ }
146
+ }), Solid.createComponent(Solid__namespace.Match, {
147
+ when: !resolvedNoSsr,
148
+ get children() {
149
+ return Solid.createComponent(MatchInner, {
150
+ get matchId() {
151
+ return props.matchId;
152
+ }
153
+ });
154
+ }
155
+ })];
121
156
  }
122
157
  });
123
158
  }
@@ -165,7 +200,7 @@ const MatchInner = (props) => {
165
200
  return {
166
201
  key,
167
202
  routeId,
168
- match: routerCore.pick(match2, ["id", "status", "error"])
203
+ match: routerCore.pick(match2, ["id", "status", "error", "_forcePending", "_displayPending"])
169
204
  };
170
205
  }
171
206
  });
@@ -181,6 +216,49 @@ const MatchInner = (props) => {
181
216
  return Solid.createComponent(Solid__namespace.Switch, {
182
217
  get children() {
183
218
  return [Solid.createComponent(Solid__namespace.Match, {
219
+ get when() {
220
+ return match()._displayPending;
221
+ },
222
+ children: (_) => {
223
+ const [displayPendingResult] = Solid__namespace.createResource(() => {
224
+ var _a;
225
+ return (_a = router.getMatch(match().id)) == null ? void 0 : _a.displayPendingPromise;
226
+ });
227
+ return Solid.memo(displayPendingResult);
228
+ }
229
+ }), Solid.createComponent(Solid__namespace.Match, {
230
+ get when() {
231
+ return match().status === "pending" || match()._forcePending;
232
+ },
233
+ children: (_) => {
234
+ var _a;
235
+ const pendingMinMs = route().options.pendingMinMs ?? router.options.defaultPendingMinMs;
236
+ if (pendingMinMs && !((_a = router.getMatch(match().id)) == null ? void 0 : _a.minPendingPromise)) {
237
+ if (!router.isServer) {
238
+ const minPendingPromise = routerCore.createControlledPromise();
239
+ Promise.resolve().then(() => {
240
+ router.updateMatch(match().id, (prev) => ({
241
+ ...prev,
242
+ minPendingPromise
243
+ }));
244
+ });
245
+ setTimeout(() => {
246
+ minPendingPromise.resolve();
247
+ router.updateMatch(match().id, (prev) => ({
248
+ ...prev,
249
+ minPendingPromise: void 0
250
+ }));
251
+ }, pendingMinMs);
252
+ }
253
+ }
254
+ const [loaderResult] = Solid__namespace.createResource(async () => {
255
+ var _a2;
256
+ await new Promise((r) => setTimeout(r, 0));
257
+ return (_a2 = router.getMatch(match().id)) == null ? void 0 : _a2.loadPromise;
258
+ });
259
+ return Solid.memo(loaderResult);
260
+ }
261
+ }), Solid.createComponent(Solid__namespace.Match, {
184
262
  get when() {
185
263
  return match().status === "notFound";
186
264
  },
@@ -219,38 +297,6 @@ const MatchInner = (props) => {
219
297
  }
220
298
  throw match().error;
221
299
  }
222
- }), Solid.createComponent(Solid__namespace.Match, {
223
- get when() {
224
- return match().status === "pending";
225
- },
226
- children: (_) => {
227
- var _a;
228
- const pendingMinMs = route().options.pendingMinMs ?? router.options.defaultPendingMinMs;
229
- if (pendingMinMs && !((_a = router.getMatch(match().id)) == null ? void 0 : _a.minPendingPromise)) {
230
- if (!router.isServer) {
231
- const minPendingPromise = routerCore.createControlledPromise();
232
- Promise.resolve().then(() => {
233
- router.updateMatch(match().id, (prev) => ({
234
- ...prev,
235
- minPendingPromise
236
- }));
237
- });
238
- setTimeout(() => {
239
- minPendingPromise.resolve();
240
- router.updateMatch(match().id, (prev) => ({
241
- ...prev,
242
- minPendingPromise: void 0
243
- }));
244
- }, pendingMinMs);
245
- }
246
- }
247
- const [loaderResult] = Solid__namespace.createResource(async () => {
248
- var _a2;
249
- await new Promise((r) => setTimeout(r, 0));
250
- return (_a2 = router.getMatch(match().id)) == null ? void 0 : _a2.loadPromise;
251
- });
252
- return Solid.memo(loaderResult);
253
- }
254
300
  }), Solid.createComponent(Solid__namespace.Match, {
255
301
  get when() {
256
302
  return match().status === "success";
@@ -292,26 +338,6 @@ const Outlet = () => {
292
338
  return Solid.createComponent(Solid__namespace.Switch, {
293
339
  get children() {
294
340
  return [Solid.createComponent(Solid__namespace.Match, {
295
- get when() {
296
- return router.isShell;
297
- },
298
- get children() {
299
- return Solid.createComponent(Solid__namespace.Suspense, {
300
- get fallback() {
301
- return Solid.createComponent(Solid.Dynamic, {
302
- get component() {
303
- return router.options.defaultPendingComponent;
304
- }
305
- });
306
- },
307
- get children() {
308
- return Solid.createComponent(CatchBoundary.ErrorComponent, {
309
- error: new Error("ShellBoundaryError")
310
- });
311
- }
312
- });
313
- }
314
- }), Solid.createComponent(Solid__namespace.Match, {
315
341
  get when() {
316
342
  return parentGlobalNotFound();
317
343
  },
@@ -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 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 routeId = useRouterState({\n select: (s) => {\n return s.matches.find((d) => d.id === props.matchId)?.routeId as string\n },\n })\n\n invariant(\n routeId,\n `Could not find routeId for matchId \"${props.matchId}\". Please file an issue!`,\n )\n\n const route: () => AnyRoute = () => router.routesById[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 ResolvedSuspenseBoundary = () =>\n // If we're on the root route, allow forcefully wrapping in suspense\n (!route().isRoot || route().options.wrapInSuspense) &&\n (route().options.wrapInSuspense ??\n PendingComponent() ??\n (route().options.errorComponent as any)?.preload)\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 !== routeId) ||\n (!error.routeId && !route().isRoot)\n )\n throw error\n\n return (\n <Dynamic component={routeNotFoundComponent()} {...error} />\n )\n }}\n >\n <MatchInner matchId={props.matchId} />\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 // { match, key, routeId } =\n const matchState: Solid.Accessor<any> = 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, ['id', 'status', 'error']),\n }\n },\n })\n\n const route = () => router.routesById[matchState().routeId]!\n\n // function useChangedDiff(value: any) {\n // const ref = Solid.useRef(value)\n // const changed = ref.current !== value\n // if (changed) {\n // console.log(\n // 'Changed:',\n // value,\n // Object.fromEntries(\n // Object.entries(value).filter(\n // ([key, val]) => val !== ref.current[key],\n // ),\n // ),\n // )\n // }\n // ref.current = value\n // }\n\n // useChangedDiff(match)\n const match = () => matchState().match\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 return (\n <Solid.Switch>\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 === '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 === '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={router.isShell}>\n <Solid.Suspense\n fallback={\n <Dynamic component={router.options.defaultPendingComponent} />\n }\n >\n <ErrorComponent error={new Error('ShellBoundaryError')} />\n </Solid.Suspense>\n </Solid.Match>\n\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","routeId","useRouterState","select","s","matches","find","d","id","matchId","invariant","route","routesById","PendingComponent","options","pendingComponent","defaultPendingComponent","routeErrorComponent","errorComponent","defaultErrorComponent","routeOnCatch","onCatch","defaultOnCatch","routeNotFoundComponent","isRoot","notFoundComponent","notFoundRoute","component","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","MatchInner","_$memo","rootRouteId","OnRendered","ScrollRestoration","location","resolvedLocation","state","__TSR_key","createEffect","on","emit","type","getLocationChangeInfo","matchState","matchIndex","match","remountFn","remountDeps","defaultRemountDeps","loaderDeps","params","_strictParams","search","_strictSearch","key","JSON","stringify","undefined","pick","out","Comp","defaultComponent","Outlet","Switch","when","status","_","renderRouteNotFound","isRedirect","loaderResult","createResource","Promise","r","setTimeout","getMatch","loadPromise","isServer","RouteErrorComponent","info","componentStack","pendingMinMs","defaultPendingMinMs","minPendingPromise","createControlledPromise","resolve","then","updateMatch","prev","useContext","parentGlobalNotFound","parentMatch","globalNotFound","childMatchId","v","isShell","Error","Show"],"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 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 || router.isShell}>\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 <Comp />\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().status === 'pending' || match()._forcePending}>\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","isShell","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","Outlet","_","displayPendingResult","createResource","getMatch","displayPendingPromise","status","_forcePending","pendingMinMs","defaultPendingMinMs","minPendingPromise","createControlledPromise","resolve","then","updateMatch","prev","setTimeout","loaderResult","Promise","r","loadPromise","renderRouteNotFound","isRedirect","RouteErrorComponent","info","componentStack","useContext","parentGlobalNotFound","parentMatch","globalNotFound","childMatchId","v"],"mappings":"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"}
@@ -2,20 +2,12 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const Solid$1 = require("solid-js/web");
4
4
  const Solid = require("solid-js");
5
- const Match = require("./Match.cjs");
6
- const ClientOnly = require("./ClientOnly.cjs");
7
- function isModuleNotFoundError(error) {
8
- return typeof (error == null ? void 0 : error.message) === "string" && /Failed to fetch dynamically imported module/.test(error.message);
9
- }
10
- function lazyRouteComponent(importer, exportName, ssr) {
5
+ const routerCore = require("@tanstack/router-core");
6
+ function lazyRouteComponent(importer, exportName) {
11
7
  let loadPromise;
12
8
  let comp;
13
9
  let error;
14
10
  const load = () => {
15
- if (typeof document === "undefined" && (ssr == null ? void 0 : ssr()) === false) {
16
- comp = () => null;
17
- return Promise.resolve(comp);
18
- }
19
11
  if (!loadPromise) {
20
12
  loadPromise = importer().then((res) => {
21
13
  loadPromise = void 0;
@@ -29,7 +21,7 @@ function lazyRouteComponent(importer, exportName, ssr) {
29
21
  };
30
22
  const lazyComp = function Lazy(props) {
31
23
  if (error) {
32
- if (isModuleNotFoundError(error)) {
24
+ if (routerCore.isModuleNotFoundError(error)) {
33
25
  if (error instanceof Error && typeof window !== "undefined" && typeof sessionStorage !== "undefined") {
34
26
  const storageKey = `tanstack_router_reload:${error.message}`;
35
27
  if (!sessionStorage.getItem(storageKey)) {
@@ -50,18 +42,6 @@ function lazyRouteComponent(importer, exportName, ssr) {
50
42
  });
51
43
  return Solid$1.memo(compResource);
52
44
  }
53
- if ((ssr == null ? void 0 : ssr()) === false) {
54
- return Solid$1.createComponent(ClientOnly.ClientOnly, {
55
- get fallback() {
56
- return Solid$1.createComponent(Match.Outlet, {});
57
- },
58
- get children() {
59
- return Solid$1.createComponent(Solid$1.Dynamic, Solid$1.mergeProps({
60
- component: comp
61
- }, props));
62
- }
63
- });
64
- }
65
45
  return Solid$1.createComponent(Solid$1.Dynamic, Solid$1.mergeProps({
66
46
  component: comp
67
47
  }, props));
@@ -1 +1 @@
1
- {"version":3,"file":"lazyRouteComponent.cjs","sources":["../../src/lazyRouteComponent.tsx"],"sourcesContent":["import { Dynamic } from 'solid-js/web'\nimport { createResource } from 'solid-js'\nimport { Outlet } from './Match'\nimport { ClientOnly } from './ClientOnly'\nimport type { AsyncRouteComponent } from './route'\n\n// If the load fails due to module not found, it may mean a new version of\n// the build was deployed and the user's browser is still using an old version.\n// If this happens, the old version in the user's browser would have an outdated\n// URL to the lazy module.\n// In that case, we want to attempt one window refresh to get the latest.\nfunction isModuleNotFoundError(error: any): boolean {\n return (\n typeof error?.message === 'string' &&\n /Failed to fetch dynamically imported module/.test(error.message)\n )\n}\n\nexport function lazyRouteComponent<\n T extends Record<string, any>,\n TKey extends keyof T = 'default',\n>(\n importer: () => Promise<T>,\n exportName?: TKey,\n ssr?: () => boolean,\n): T[TKey] extends (props: infer TProps) => any\n ? AsyncRouteComponent<TProps>\n : never {\n let loadPromise: Promise<any> | undefined\n let comp: T[TKey] | T['default']\n let error: any\n\n const load = () => {\n if (typeof document === 'undefined' && ssr?.() === false) {\n comp = (() => null) as any\n return Promise.resolve(comp)\n }\n if (!loadPromise) {\n loadPromise = importer()\n .then((res) => {\n loadPromise = undefined\n comp = res[exportName ?? 'default']\n return comp\n })\n .catch((err) => {\n error = err\n })\n }\n\n return loadPromise\n }\n\n const lazyComp = function Lazy(props: any) {\n // Now that we're out of preload and into actual render path,\n // throw the error if it was a module not found error during preload\n if (error) {\n if (isModuleNotFoundError(error)) {\n // We don't want an error thrown from preload in this case, because\n // there's nothing we want to do about module not found during preload.\n // Record the error, recover the promise with a null return,\n // and we will attempt module not found resolution during the render path.\n\n if (\n error instanceof Error &&\n typeof window !== 'undefined' &&\n typeof sessionStorage !== 'undefined'\n ) {\n // Again, we want to reload one time on module not found error and not enter\n // a reload loop if there is some other issue besides an old deploy.\n // That's why we store our reload attempt in sessionStorage.\n // Use error.message as key because it contains the module path that failed.\n const storageKey = `tanstack_router_reload:${error.message}`\n if (!sessionStorage.getItem(storageKey)) {\n sessionStorage.setItem(storageKey, '1')\n window.location.reload()\n\n // Return empty component while we wait for window to reload\n return {\n default: () => null,\n }\n }\n }\n }\n\n // Otherwise, just throw the error\n throw error\n }\n\n if (!comp) {\n const [compResource] = createResource(load, {\n initialValue: comp,\n ssrLoadFrom: 'initial',\n })\n return <>{compResource()}</>\n }\n\n if (ssr?.() === false) {\n return (\n <ClientOnly fallback={<Outlet />}>\n <Dynamic component={comp} {...props} />\n </ClientOnly>\n )\n }\n return <Dynamic component={comp} {...props} />\n }\n\n ;(lazyComp as any).preload = load\n\n return lazyComp as any\n}\n"],"names":["isModuleNotFoundError","error","message","test","lazyRouteComponent","importer","exportName","ssr","loadPromise","comp","load","document","Promise","resolve","then","res","undefined","catch","err","lazyComp","Lazy","props","Error","window","sessionStorage","storageKey","getItem","setItem","location","reload","default","compResource","createResource","initialValue","ssrLoadFrom","_$memo","_$createComponent","ClientOnly","fallback","Outlet","children","Dynamic","_$mergeProps","component","preload"],"mappings":";;;;;;AAWA,SAASA,sBAAsBC,OAAqB;AAClD,SACE,QAAOA,+BAAOC,aAAY,YAC1B,8CAA8CC,KAAKF,MAAMC,OAAO;AAEpE;AAEgBE,SAAAA,mBAIdC,UACAC,YACAC,KAGQ;AACJC,MAAAA;AACAC,MAAAA;AACAR,MAAAA;AAEJ,QAAMS,OAAOA,MAAM;AACjB,QAAI,OAAOC,aAAa,gBAAeJ,kCAAY,OAAO;AACxDE,aAAQ,MAAM;AACPG,aAAAA,QAAQC,QAAQJ,IAAI;AAAA,IAAA;AAE7B,QAAI,CAACD,aAAa;AACFH,oBAAAA,SAAAA,EACXS,KAAMC,CAAQ,QAAA;AACCC,sBAAAA;AACPD,eAAAA,IAAIT,cAAc,SAAS;AAC3BG,eAAAA;AAAAA,MAAAA,CACR,EACAQ,MAAOC,CAAQ,QAAA;AACNA,gBAAAA;AAAAA,MAAAA,CACT;AAAA,IAAA;AAGEV,WAAAA;AAAAA,EACT;AAEMW,QAAAA,WAAW,SAASC,KAAKC,OAAY;AAGzC,QAAIpB,OAAO;AACLD,UAAAA,sBAAsBC,KAAK,GAAG;AAMhC,YACEA,iBAAiBqB,SACjB,OAAOC,WAAW,eAClB,OAAOC,mBAAmB,aAC1B;AAKMC,gBAAAA,aAAa,0BAA0BxB,MAAMC,OAAO;AAC1D,cAAI,CAACsB,eAAeE,QAAQD,UAAU,GAAG;AACxBE,2BAAAA,QAAQF,YAAY,GAAG;AACtCF,mBAAOK,SAASC,OAAO;AAGhB,mBAAA;AAAA,cACLC,SAASA,MAAM;AAAA,YACjB;AAAA,UAAA;AAAA,QACF;AAAA,MACF;AAII7B,YAAAA;AAAAA,IAAAA;AAGR,QAAI,CAACQ,MAAM;AACT,YAAM,CAACsB,YAAY,IAAIC,MAAAA,eAAetB,MAAM;AAAA,QAC1CuB,cAAcxB;AAAAA,QACdyB,aAAa;AAAA,MAAA,CACd;AACD,aAAAC,QAAAA,KAAUJ,YAAY;AAAA,IAAA;AAGpBxB,SAAAA,kCAAY,OAAO;AACrB,aAAA6B,QAAAA,gBACGC,WAAAA,YAAU;AAAA,QAAA,IAACC,WAAQ;AAAAF,iBAAAA,QAAAA,gBAAGG,MAAM,QAAA,EAAA;AAAA,QAAA;AAAA,QAAA,IAAAC,WAAA;AAAAJ,iBAAAA,QAAAA,gBAC1BK,iBAAOC,mBAAA;AAAA,YAACC,WAAWlC;AAAAA,UAAI,GAAMY,KAAK,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA;AAAA,IAAA;AAIzCe,WAAAA,QAAAA,gBAAQK,iBAAOC,mBAAA;AAAA,MAACC,WAAWlC;AAAAA,IAAI,GAAMY,KAAK,CAAA;AAAA,EAC5C;AAEEF,WAAiByB,UAAUlC;AAEtBS,SAAAA;AACT;;"}
1
+ {"version":3,"file":"lazyRouteComponent.cjs","sources":["../../src/lazyRouteComponent.tsx"],"sourcesContent":["import { Dynamic } from 'solid-js/web'\nimport { createResource } from 'solid-js'\nimport { isModuleNotFoundError } from '@tanstack/router-core'\nimport type { AsyncRouteComponent } from './route'\n\nexport function lazyRouteComponent<\n T extends Record<string, any>,\n TKey extends keyof T = 'default',\n>(\n importer: () => Promise<T>,\n exportName?: TKey,\n): T[TKey] extends (props: infer TProps) => any\n ? AsyncRouteComponent<TProps>\n : never {\n let loadPromise: Promise<any> | undefined\n let comp: T[TKey] | T['default']\n let error: any\n\n const load = () => {\n if (!loadPromise) {\n loadPromise = importer()\n .then((res) => {\n loadPromise = undefined\n comp = res[exportName ?? 'default']\n return comp\n })\n .catch((err) => {\n error = err\n })\n }\n\n return loadPromise\n }\n\n const lazyComp = function Lazy(props: any) {\n // Now that we're out of preload and into actual render path,\n // throw the error if it was a module not found error during preload\n if (error) {\n // If the load fails due to module not found, it may mean a new version of\n // the build was deployed and the user's browser is still using an old version.\n // If this happens, the old version in the user's browser would have an outdated\n // URL to the lazy module.\n // In that case, we want to attempt one window refresh to get the latest.\n if (isModuleNotFoundError(error)) {\n // We don't want an error thrown from preload in this case, because\n // there's nothing we want to do about module not found during preload.\n // Record the error, recover the promise with a null return,\n // and we will attempt module not found resolution during the render path.\n\n if (\n error instanceof Error &&\n typeof window !== 'undefined' &&\n typeof sessionStorage !== 'undefined'\n ) {\n // Again, we want to reload one time on module not found error and not enter\n // a reload loop if there is some other issue besides an old deploy.\n // That's why we store our reload attempt in sessionStorage.\n // Use error.message as key because it contains the module path that failed.\n const storageKey = `tanstack_router_reload:${error.message}`\n if (!sessionStorage.getItem(storageKey)) {\n sessionStorage.setItem(storageKey, '1')\n window.location.reload()\n\n // Return empty component while we wait for window to reload\n return {\n default: () => null,\n }\n }\n }\n }\n\n // Otherwise, just throw the error\n throw error\n }\n\n if (!comp) {\n const [compResource] = createResource(load, {\n initialValue: comp,\n ssrLoadFrom: 'initial',\n })\n return <>{compResource()}</>\n }\n\n return <Dynamic component={comp} {...props} />\n }\n\n ;(lazyComp as any).preload = load\n\n return lazyComp as any\n}\n"],"names":["lazyRouteComponent","importer","exportName","loadPromise","comp","error","load","then","res","undefined","catch","err","lazyComp","Lazy","props","isModuleNotFoundError","Error","window","sessionStorage","storageKey","message","getItem","setItem","location","reload","default","compResource","createResource","initialValue","ssrLoadFrom","_$memo","_$createComponent","Dynamic","_$mergeProps","component","preload"],"mappings":";;;;;AAKgBA,SAAAA,mBAIdC,UACAC,YAGQ;AACJC,MAAAA;AACAC,MAAAA;AACAC,MAAAA;AAEJ,QAAMC,OAAOA,MAAM;AACjB,QAAI,CAACH,aAAa;AACFF,oBAAAA,SAAAA,EACXM,KAAMC,CAAQ,QAAA;AACCC,sBAAAA;AACPD,eAAAA,IAAIN,cAAc,SAAS;AAC3BE,eAAAA;AAAAA,MAAAA,CACR,EACAM,MAAOC,CAAQ,QAAA;AACNA,gBAAAA;AAAAA,MAAAA,CACT;AAAA,IAAA;AAGER,WAAAA;AAAAA,EACT;AAEMS,QAAAA,WAAW,SAASC,KAAKC,OAAY;AAGzC,QAAIT,OAAO;AAMLU,UAAAA,WAAAA,sBAAsBV,KAAK,GAAG;AAMhC,YACEA,iBAAiBW,SACjB,OAAOC,WAAW,eAClB,OAAOC,mBAAmB,aAC1B;AAKMC,gBAAAA,aAAa,0BAA0Bd,MAAMe,OAAO;AAC1D,cAAI,CAACF,eAAeG,QAAQF,UAAU,GAAG;AACxBG,2BAAAA,QAAQH,YAAY,GAAG;AACtCF,mBAAOM,SAASC,OAAO;AAGhB,mBAAA;AAAA,cACLC,SAASA,MAAM;AAAA,YACjB;AAAA,UAAA;AAAA,QACF;AAAA,MACF;AAIIpB,YAAAA;AAAAA,IAAAA;AAGR,QAAI,CAACD,MAAM;AACT,YAAM,CAACsB,YAAY,IAAIC,MAAAA,eAAerB,MAAM;AAAA,QAC1CsB,cAAcxB;AAAAA,QACdyB,aAAa;AAAA,MAAA,CACd;AACD,aAAAC,QAAAA,KAAUJ,YAAY;AAAA,IAAA;AAGxBK,WAAAA,QAAAA,gBAAQC,iBAAOC,mBAAA;AAAA,MAACC,WAAW9B;AAAAA,IAAI,GAAMU,KAAK,CAAA;AAAA,EAC5C;AAEEF,WAAiBuB,UAAU7B;AAEtBM,SAAAA;AACT;;"}
@@ -1,2 +1,2 @@
1
1
  import { AsyncRouteComponent } from './route.cjs';
2
- export declare function lazyRouteComponent<T extends Record<string, any>, TKey extends keyof T = 'default'>(importer: () => Promise<T>, exportName?: TKey, ssr?: () => boolean): T[TKey] extends (props: infer TProps) => any ? AsyncRouteComponent<TProps> : never;
2
+ export declare function lazyRouteComponent<T extends Record<string, any>, TKey extends keyof T = 'default'>(importer: () => Promise<T>, exportName?: TKey): T[TKey] extends (props: infer TProps) => any ? AsyncRouteComponent<TProps> : never;
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, pick, isRedirect, createControlledPromise, 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";
@@ -13,14 +13,14 @@ import { renderRouteNotFound } from "./renderRouteNotFound.js";
13
13
  import { ScrollRestoration } from "./scroll-restoration.js";
14
14
  const Match = (props) => {
15
15
  const router = useRouter();
16
- const routeId = useRouterState({
16
+ const matchState = useRouterState({
17
17
  select: (s) => {
18
- var _a;
19
- return (_a = s.matches.find((d) => d.id === props.matchId)) == null ? void 0 : _a.routeId;
18
+ const match = s.matches.find((d) => d.id === props.matchId);
19
+ invariant(match, `Could not find match for matchId "${props.matchId}". Please file an issue!`);
20
+ return pick(match, ["routeId", "ssr", "_displayPending"]);
20
21
  }
21
22
  });
22
- invariant(routeId, `Could not find routeId for matchId "${props.matchId}". Please file an issue!`);
23
- const route = () => router.routesById[routeId()];
23
+ const route = () => router.routesById[matchState().routeId];
24
24
  const PendingComponent = () => route().options.pendingComponent ?? router.options.defaultPendingComponent;
25
25
  const routeErrorComponent = () => route().options.errorComponent ?? router.options.defaultErrorComponent;
26
26
  const routeOnCatch = () => route().options.onCatch ?? router.options.defaultOnCatch;
@@ -31,11 +31,12 @@ const Match = (props) => {
31
31
  route().options.notFoundComponent ?? ((_a = router.options.notFoundRoute) == null ? void 0 : _a.options.component)
32
32
  ) : route().options.notFoundComponent;
33
33
  };
34
+ const resolvedNoSsr = matchState().ssr === false || matchState().ssr === "data-only";
34
35
  const ResolvedSuspenseBoundary = () => {
35
36
  var _a;
36
37
  return (
37
38
  // If we're on the root route, allow forcefully wrapping in suspense
38
- (!route().isRoot || route().options.wrapInSuspense) && (route().options.wrapInSuspense ?? PendingComponent() ?? ((_a = route().options.errorComponent) == null ? void 0 : _a.preload)) ? Solid.Suspense : SafeFragment
39
+ (!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
39
40
  );
40
41
  };
41
42
  const ResolvedCatchBoundary = () => routeErrorComponent() ? CatchBoundary : SafeFragment;
@@ -88,7 +89,7 @@ const Match = (props) => {
88
89
  return ResolvedNotFoundBoundary();
89
90
  },
90
91
  fallback: (error) => {
91
- if (!routeNotFoundComponent() || error.routeId && error.routeId !== routeId || !error.routeId && !route().isRoot) throw error;
92
+ if (!routeNotFoundComponent() || error.routeId && error.routeId !== matchState().routeId || !error.routeId && !route().isRoot) throw error;
92
93
  return createComponent(Dynamic, mergeProps({
93
94
  get component() {
94
95
  return routeNotFoundComponent();
@@ -96,9 +97,43 @@ const Match = (props) => {
96
97
  }, error));
97
98
  },
98
99
  get children() {
99
- return createComponent(MatchInner, {
100
- get matchId() {
101
- return props.matchId;
100
+ return createComponent(Solid.Switch, {
101
+ get children() {
102
+ return [createComponent(Solid.Match, {
103
+ get when() {
104
+ return resolvedNoSsr || router.isShell;
105
+ },
106
+ get children() {
107
+ return createComponent(Solid.Show, {
108
+ get when() {
109
+ return !router.isServer;
110
+ },
111
+ get fallback() {
112
+ return createComponent(Dynamic, {
113
+ get component() {
114
+ return PendingComponent();
115
+ }
116
+ });
117
+ },
118
+ get children() {
119
+ return createComponent(MatchInner, {
120
+ get matchId() {
121
+ return props.matchId;
122
+ }
123
+ });
124
+ }
125
+ });
126
+ }
127
+ }), createComponent(Solid.Match, {
128
+ when: !resolvedNoSsr,
129
+ get children() {
130
+ return createComponent(MatchInner, {
131
+ get matchId() {
132
+ return props.matchId;
133
+ }
134
+ });
135
+ }
136
+ })];
102
137
  }
103
138
  });
104
139
  }
@@ -146,7 +181,7 @@ const MatchInner = (props) => {
146
181
  return {
147
182
  key,
148
183
  routeId,
149
- match: pick(match2, ["id", "status", "error"])
184
+ match: pick(match2, ["id", "status", "error", "_forcePending", "_displayPending"])
150
185
  };
151
186
  }
152
187
  });
@@ -162,6 +197,49 @@ const MatchInner = (props) => {
162
197
  return createComponent(Solid.Switch, {
163
198
  get children() {
164
199
  return [createComponent(Solid.Match, {
200
+ get when() {
201
+ return match()._displayPending;
202
+ },
203
+ children: (_) => {
204
+ const [displayPendingResult] = Solid.createResource(() => {
205
+ var _a;
206
+ return (_a = router.getMatch(match().id)) == null ? void 0 : _a.displayPendingPromise;
207
+ });
208
+ return memo(displayPendingResult);
209
+ }
210
+ }), createComponent(Solid.Match, {
211
+ get when() {
212
+ return match().status === "pending" || match()._forcePending;
213
+ },
214
+ children: (_) => {
215
+ var _a;
216
+ const pendingMinMs = route().options.pendingMinMs ?? router.options.defaultPendingMinMs;
217
+ if (pendingMinMs && !((_a = router.getMatch(match().id)) == null ? void 0 : _a.minPendingPromise)) {
218
+ if (!router.isServer) {
219
+ const minPendingPromise = createControlledPromise();
220
+ Promise.resolve().then(() => {
221
+ router.updateMatch(match().id, (prev) => ({
222
+ ...prev,
223
+ minPendingPromise
224
+ }));
225
+ });
226
+ setTimeout(() => {
227
+ minPendingPromise.resolve();
228
+ router.updateMatch(match().id, (prev) => ({
229
+ ...prev,
230
+ minPendingPromise: void 0
231
+ }));
232
+ }, pendingMinMs);
233
+ }
234
+ }
235
+ const [loaderResult] = Solid.createResource(async () => {
236
+ var _a2;
237
+ await new Promise((r) => setTimeout(r, 0));
238
+ return (_a2 = router.getMatch(match().id)) == null ? void 0 : _a2.loadPromise;
239
+ });
240
+ return memo(loaderResult);
241
+ }
242
+ }), createComponent(Solid.Match, {
165
243
  get when() {
166
244
  return match().status === "notFound";
167
245
  },
@@ -200,38 +278,6 @@ const MatchInner = (props) => {
200
278
  }
201
279
  throw match().error;
202
280
  }
203
- }), createComponent(Solid.Match, {
204
- get when() {
205
- return match().status === "pending";
206
- },
207
- children: (_) => {
208
- var _a;
209
- const pendingMinMs = route().options.pendingMinMs ?? router.options.defaultPendingMinMs;
210
- if (pendingMinMs && !((_a = router.getMatch(match().id)) == null ? void 0 : _a.minPendingPromise)) {
211
- if (!router.isServer) {
212
- const minPendingPromise = createControlledPromise();
213
- Promise.resolve().then(() => {
214
- router.updateMatch(match().id, (prev) => ({
215
- ...prev,
216
- minPendingPromise
217
- }));
218
- });
219
- setTimeout(() => {
220
- minPendingPromise.resolve();
221
- router.updateMatch(match().id, (prev) => ({
222
- ...prev,
223
- minPendingPromise: void 0
224
- }));
225
- }, pendingMinMs);
226
- }
227
- }
228
- const [loaderResult] = Solid.createResource(async () => {
229
- var _a2;
230
- await new Promise((r) => setTimeout(r, 0));
231
- return (_a2 = router.getMatch(match().id)) == null ? void 0 : _a2.loadPromise;
232
- });
233
- return memo(loaderResult);
234
- }
235
281
  }), createComponent(Solid.Match, {
236
282
  get when() {
237
283
  return match().status === "success";
@@ -273,26 +319,6 @@ const Outlet = () => {
273
319
  return createComponent(Solid.Switch, {
274
320
  get children() {
275
321
  return [createComponent(Solid.Match, {
276
- get when() {
277
- return router.isShell;
278
- },
279
- get children() {
280
- return createComponent(Solid.Suspense, {
281
- get fallback() {
282
- return createComponent(Dynamic, {
283
- get component() {
284
- return router.options.defaultPendingComponent;
285
- }
286
- });
287
- },
288
- get children() {
289
- return createComponent(ErrorComponent, {
290
- error: new Error("ShellBoundaryError")
291
- });
292
- }
293
- });
294
- }
295
- }), createComponent(Solid.Match, {
296
322
  get when() {
297
323
  return parentGlobalNotFound();
298
324
  },