@tanstack/solid-router 1.132.49 → 1.133.7

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.
@@ -3,6 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const Solid$1 = require("solid-js/web");
4
4
  const Solid = require("solid-js");
5
5
  const warning = require("tiny-warning");
6
+ const routerCore = require("@tanstack/router-core");
6
7
  const CatchBoundary = require("./CatchBoundary.cjs");
7
8
  const useRouterState = require("./useRouterState.cjs");
8
9
  const useRouter = require("./useRouter.cjs");
@@ -30,12 +31,14 @@ const Solid__namespace = /* @__PURE__ */ _interopNamespaceDefault(Solid);
30
31
  function Matches() {
31
32
  const router = useRouter.useRouter();
32
33
  const ResolvedSuspense = router.isServer || typeof document !== "undefined" && router.ssr ? SafeFragment.SafeFragment : Solid__namespace.Suspense;
34
+ const rootRoute = () => router.routesById[routerCore.rootRouteId];
35
+ const PendingComponent = rootRoute().options.pendingComponent ?? router.options.defaultPendingComponent;
33
36
  const OptionalWrapper = router.options.InnerWrap || SafeFragment.SafeFragment;
34
37
  return Solid$1.createComponent(OptionalWrapper, {
35
38
  get children() {
36
39
  return Solid$1.createComponent(ResolvedSuspense, {
37
40
  get fallback() {
38
- return Solid$1.memo(() => !!router.options.defaultPendingComponent)() ? Solid$1.createComponent(router.options.defaultPendingComponent, {}) : null;
41
+ return PendingComponent ? Solid$1.createComponent(PendingComponent, {}) : null;
39
42
  },
40
43
  get children() {
41
44
  return [Solid$1.memo(() => Solid$1.memo(() => !!!router.isServer)() && Solid$1.createComponent(Transitioner.Transitioner, {})), Solid$1.createComponent(MatchesInner, {})];
@@ -1 +1 @@
1
- {"version":3,"file":"Matches.cjs","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 // 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 OptionalWrapper = router.options.InnerWrap || SafeFragment\n\n return (\n <OptionalWrapper>\n <ResolvedSuspense\n fallback={\n router.options.defaultPendingComponent ? (\n <router.options.defaultPendingComponent />\n ) : null\n }\n >\n {!router.isServer && <Transitioner />}\n <MatchesInner />\n </ResolvedSuspense>\n </OptionalWrapper>\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 const id = matchId()\n return id ? <Match matchId={id} /> : null\n }\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","ResolvedSuspense","isServer","document","ssr","SafeFragment","Solid","Suspense","OptionalWrapper","options","InnerWrap","_$createComponent","children","fallback","_$memo","defaultPendingComponent","Transitioner","MatchesInner","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.cjs","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport warning from 'tiny-warning'\nimport { rootRouteId } from '@tanstack/router-core'\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 AnyRoute,\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 // 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 rootRoute: () => AnyRoute = () => router.routesById[rootRouteId]\n const PendingComponent =\n rootRoute().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const OptionalWrapper = router.options.InnerWrap || SafeFragment\n\n return (\n <OptionalWrapper>\n <ResolvedSuspense\n fallback={PendingComponent ? <PendingComponent /> : null}\n >\n {!router.isServer && <Transitioner />}\n <MatchesInner />\n </ResolvedSuspense>\n </OptionalWrapper>\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 const id = matchId()\n return id ? <Match matchId={id} /> : null\n }\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","ResolvedSuspense","isServer","document","ssr","SafeFragment","Solid","Suspense","rootRoute","routesById","rootRouteId","PendingComponent","options","pendingComponent","defaultPendingComponent","OptionalWrapper","InnerWrap","_$createComponent","children","fallback","_$memo","Transitioner","MatchesInner","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,6 +1,7 @@
1
1
  import { createComponent, memo } from "solid-js/web";
2
2
  import * as Solid from "solid-js";
3
3
  import warning from "tiny-warning";
4
+ import { rootRouteId } from "@tanstack/router-core";
4
5
  import { CatchBoundary, ErrorComponent } from "./CatchBoundary.js";
5
6
  import { useRouterState } from "./useRouterState.js";
6
7
  import { useRouter } from "./useRouter.js";
@@ -11,12 +12,14 @@ import { SafeFragment } from "./SafeFragment.js";
11
12
  function Matches() {
12
13
  const router = useRouter();
13
14
  const ResolvedSuspense = router.isServer || typeof document !== "undefined" && router.ssr ? SafeFragment : Solid.Suspense;
15
+ const rootRoute = () => router.routesById[rootRouteId];
16
+ const PendingComponent = rootRoute().options.pendingComponent ?? router.options.defaultPendingComponent;
14
17
  const OptionalWrapper = router.options.InnerWrap || SafeFragment;
15
18
  return createComponent(OptionalWrapper, {
16
19
  get children() {
17
20
  return createComponent(ResolvedSuspense, {
18
21
  get fallback() {
19
- return memo(() => !!router.options.defaultPendingComponent)() ? createComponent(router.options.defaultPendingComponent, {}) : null;
22
+ return PendingComponent ? createComponent(PendingComponent, {}) : null;
20
23
  },
21
24
  get children() {
22
25
  return [memo(() => memo(() => !!!router.isServer)() && createComponent(Transitioner, {})), createComponent(MatchesInner, {})];
@@ -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 // 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 OptionalWrapper = router.options.InnerWrap || SafeFragment\n\n return (\n <OptionalWrapper>\n <ResolvedSuspense\n fallback={\n router.options.defaultPendingComponent ? (\n <router.options.defaultPendingComponent />\n ) : null\n }\n >\n {!router.isServer && <Transitioner />}\n <MatchesInner />\n </ResolvedSuspense>\n </OptionalWrapper>\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 const id = matchId()\n return id ? <Match matchId={id} /> : null\n }\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","ResolvedSuspense","isServer","document","ssr","SafeFragment","Solid","Suspense","OptionalWrapper","options","InnerWrap","_$createComponent","children","fallback","_$memo","defaultPendingComponent","Transitioner","MatchesInner","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 { rootRouteId } from '@tanstack/router-core'\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 AnyRoute,\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 // 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 rootRoute: () => AnyRoute = () => router.routesById[rootRouteId]\n const PendingComponent =\n rootRoute().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const OptionalWrapper = router.options.InnerWrap || SafeFragment\n\n return (\n <OptionalWrapper>\n <ResolvedSuspense\n fallback={PendingComponent ? <PendingComponent /> : null}\n >\n {!router.isServer && <Transitioner />}\n <MatchesInner />\n </ResolvedSuspense>\n </OptionalWrapper>\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 const id = matchId()\n return id ? <Match matchId={id} /> : null\n }\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","ResolvedSuspense","isServer","document","ssr","SafeFragment","Solid","Suspense","rootRoute","routesById","rootRouteId","PendingComponent","options","pendingComponent","defaultPendingComponent","OptionalWrapper","InnerWrap","_$createComponent","children","fallback","_$memo","Transitioner","MatchesInner","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,5 +1,6 @@
1
1
  import * as Solid from 'solid-js';
2
2
  import warning from 'tiny-warning';
3
+ import { rootRouteId } from '@tanstack/router-core';
3
4
  import { CatchBoundary, ErrorComponent } from './CatchBoundary';
4
5
  import { useRouterState } from './useRouterState';
5
6
  import { useRouter } from './useRouter';
@@ -13,9 +14,12 @@ export function Matches() {
13
14
  const ResolvedSuspense = router.isServer || (typeof document !== 'undefined' && router.ssr)
14
15
  ? SafeFragment
15
16
  : Solid.Suspense;
17
+ const rootRoute = () => router.routesById[rootRouteId];
18
+ const PendingComponent = rootRoute().options.pendingComponent ??
19
+ router.options.defaultPendingComponent;
16
20
  const OptionalWrapper = router.options.InnerWrap || SafeFragment;
17
21
  return (<OptionalWrapper>
18
- <ResolvedSuspense fallback={router.options.defaultPendingComponent ? (<router.options.defaultPendingComponent />) : null}>
22
+ <ResolvedSuspense fallback={PendingComponent ? <PendingComponent /> : null}>
19
23
  {!router.isServer && <Transitioner />}
20
24
  <MatchesInner />
21
25
  </ResolvedSuspense>
@@ -1 +1 @@
1
- {"version":3,"file":"Matches.jsx","sourceRoot":"","sources":["../../src/Matches.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Matches.jsx","sourceRoot":"","sources":["../../src/Matches.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-router",
3
- "version": "1.132.49",
3
+ "version": "1.133.7",
4
4
  "description": "Modern and scalable routing for Solid applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -88,8 +88,8 @@
88
88
  "isbot": "^5.1.22",
89
89
  "tiny-invariant": "^1.3.3",
90
90
  "tiny-warning": "^1.0.3",
91
- "@tanstack/router-core": "1.132.47",
92
- "@tanstack/history": "1.132.31"
91
+ "@tanstack/history": "1.133.3",
92
+ "@tanstack/router-core": "1.133.3"
93
93
  },
94
94
  "devDependencies": {
95
95
  "@solidjs/testing-library": "^0.8.10",
@@ -103,5 +103,21 @@
103
103
  "peerDependencies": {
104
104
  "solid-js": "^1.9.5"
105
105
  },
106
- "scripts": {}
106
+ "scripts": {
107
+ "clean": "rimraf ./dist && rimraf ./coverage",
108
+ "test:eslint": "eslint",
109
+ "test:types": "pnpm run \"/^test:types:ts[0-9]{2}$/\"",
110
+ "test:types:ts54": "node ../../node_modules/typescript54/lib/tsc.js -p tsconfig.legacy.json",
111
+ "test:types:ts55": "node ../../node_modules/typescript55/lib/tsc.js -p tsconfig.legacy.json",
112
+ "test:types:ts56": "node ../../node_modules/typescript56/lib/tsc.js -p tsconfig.legacy.json",
113
+ "test:types:ts57": "node ../../node_modules/typescript57/lib/tsc.js -p tsconfig.legacy.json",
114
+ "test:types:ts58": "node ../../node_modules/typescript58/lib/tsc.js -p tsconfig.legacy.json",
115
+ "test:types:ts59": "tsc -p tsconfig.legacy.json",
116
+ "test:unit": "vitest && vitest --mode server",
117
+ "test:unit:dev": "pnpm run test:unit --watch --hideSkippedTests",
118
+ "test:perf": "vitest bench",
119
+ "test:perf:dev": "pnpm run test:perf --watch --hideSkippedTests",
120
+ "test:build": "publint --strict && attw --ignore-rules no-resolution --pack .",
121
+ "build": "vite build && tsc -p tsconfig.build.json"
122
+ }
107
123
  }
package/src/Matches.tsx CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as Solid from 'solid-js'
2
2
  import warning from 'tiny-warning'
3
+ import { rootRouteId } from '@tanstack/router-core'
3
4
  import { CatchBoundary, ErrorComponent } from './CatchBoundary'
4
5
  import { useRouterState } from './useRouterState'
5
6
  import { useRouter } from './useRouter'
@@ -8,6 +9,7 @@ import { matchContext } from './matchContext'
8
9
  import { Match } from './Match'
9
10
  import { SafeFragment } from './SafeFragment'
10
11
  import type {
12
+ AnyRoute,
11
13
  AnyRouter,
12
14
  DeepPartial,
13
15
  Expand,
@@ -44,16 +46,17 @@ export function Matches() {
44
46
  ? SafeFragment
45
47
  : Solid.Suspense
46
48
 
49
+ const rootRoute: () => AnyRoute = () => router.routesById[rootRouteId]
50
+ const PendingComponent =
51
+ rootRoute().options.pendingComponent ??
52
+ router.options.defaultPendingComponent
53
+
47
54
  const OptionalWrapper = router.options.InnerWrap || SafeFragment
48
55
 
49
56
  return (
50
57
  <OptionalWrapper>
51
58
  <ResolvedSuspense
52
- fallback={
53
- router.options.defaultPendingComponent ? (
54
- <router.options.defaultPendingComponent />
55
- ) : null
56
- }
59
+ fallback={PendingComponent ? <PendingComponent /> : null}
57
60
  >
58
61
  {!router.isServer && <Transitioner />}
59
62
  <MatchesInner />