@tanstack/solid-router 1.111.3 → 1.111.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/fileRoute.cjs +4 -1
- package/dist/cjs/fileRoute.cjs.map +1 -1
- package/dist/cjs/fileRoute.d.cts +4 -4
- package/dist/cjs/index.d.cts +1 -3
- package/dist/cjs/redirects.cjs.map +1 -1
- package/dist/cjs/redirects.d.cts +2 -16
- package/dist/cjs/route.cjs.map +1 -1
- package/dist/cjs/route.d.cts +1 -2
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/cjs/router.d.cts +1 -2
- package/dist/cjs/typePrimitives.d.cts +3 -4
- package/dist/cjs/useLoaderData.cjs.map +1 -1
- package/dist/cjs/useLoaderData.d.cts +2 -4
- package/dist/cjs/useLoaderDeps.cjs.map +1 -1
- package/dist/cjs/useLoaderDeps.d.cts +2 -4
- package/dist/cjs/useNavigate.cjs.map +1 -1
- package/dist/cjs/useNavigate.d.cts +1 -2
- package/dist/cjs/useParams.cjs.map +1 -1
- package/dist/cjs/useParams.d.cts +2 -4
- package/dist/cjs/useRouteContext.cjs.map +1 -1
- package/dist/cjs/useRouteContext.d.cts +1 -8
- package/dist/cjs/useSearch.cjs.map +1 -1
- package/dist/cjs/useSearch.d.cts +2 -4
- package/dist/esm/fileRoute.d.ts +4 -4
- package/dist/esm/fileRoute.js +4 -1
- package/dist/esm/fileRoute.js.map +1 -1
- package/dist/esm/index.d.ts +1 -3
- package/dist/esm/redirects.d.ts +2 -16
- package/dist/esm/redirects.js.map +1 -1
- package/dist/esm/route.d.ts +1 -2
- package/dist/esm/route.js.map +1 -1
- package/dist/esm/router.d.ts +1 -2
- package/dist/esm/router.js.map +1 -1
- package/dist/esm/typePrimitives.d.ts +3 -4
- package/dist/esm/useLoaderData.d.ts +2 -4
- package/dist/esm/useLoaderData.js.map +1 -1
- package/dist/esm/useLoaderDeps.d.ts +2 -4
- package/dist/esm/useLoaderDeps.js.map +1 -1
- package/dist/esm/useNavigate.d.ts +1 -2
- package/dist/esm/useNavigate.js.map +1 -1
- package/dist/esm/useParams.d.ts +2 -4
- package/dist/esm/useParams.js.map +1 -1
- package/dist/esm/useRouteContext.d.ts +1 -8
- package/dist/esm/useRouteContext.js.map +1 -1
- package/dist/esm/useSearch.d.ts +2 -4
- package/dist/esm/useSearch.js.map +1 -1
- package/dist/source/Asset.d.ts +2 -0
- package/dist/source/Asset.jsx +22 -0
- package/dist/source/Asset.jsx.map +1 -0
- package/dist/source/CatchBoundary.d.ts +11 -0
- package/dist/source/CatchBoundary.jsx +43 -0
- package/dist/source/CatchBoundary.jsx.map +1 -0
- package/dist/source/HeadContent.d.ts +8 -0
- package/dist/source/HeadContent.jsx +125 -0
- package/dist/source/HeadContent.jsx.map +1 -0
- package/dist/source/Match.d.ts +8 -0
- package/dist/source/Match.jsx +256 -0
- package/dist/source/Match.jsx.map +1 -0
- package/dist/source/Matches.d.ts +67 -0
- package/dist/source/Matches.jsx +103 -0
- package/dist/source/Matches.jsx.map +1 -0
- package/dist/source/RouterProvider.d.ts +10 -0
- package/dist/source/RouterProvider.jsx +27 -0
- package/dist/source/RouterProvider.jsx.map +1 -0
- package/dist/source/SafeFragment.d.ts +1 -0
- package/dist/source/SafeFragment.jsx +4 -0
- package/dist/source/SafeFragment.jsx.map +1 -0
- package/dist/source/ScriptOnce.d.ts +5 -0
- package/dist/source/ScriptOnce.jsx +17 -0
- package/dist/source/ScriptOnce.jsx.map +1 -0
- package/dist/source/Scripts.d.ts +1 -0
- package/dist/source/Scripts.jsx +49 -0
- package/dist/source/Scripts.jsx.map +1 -0
- package/dist/source/ScrollRestoration.d.ts +15 -0
- package/dist/source/ScrollRestoration.jsx +36 -0
- package/dist/source/ScrollRestoration.jsx.map +1 -0
- package/dist/source/Transitioner.d.ts +1 -0
- package/dist/source/Transitioner.jsx +112 -0
- package/dist/source/Transitioner.jsx.map +1 -0
- package/dist/source/awaited.d.ts +11 -0
- package/dist/source/awaited.jsx +24 -0
- package/dist/source/awaited.jsx.map +1 -0
- package/dist/source/fileRoute.d.ts +46 -0
- package/dist/source/fileRoute.js +88 -0
- package/dist/source/fileRoute.js.map +1 -0
- package/dist/source/history.d.ts +8 -0
- package/dist/source/history.js +2 -0
- package/dist/source/history.js.map +1 -0
- package/dist/source/index.d.ts +50 -0
- package/dist/source/index.jsx +41 -0
- package/dist/source/index.jsx.map +1 -0
- package/dist/source/lazyRouteComponent.d.ts +7 -0
- package/dist/source/lazyRouteComponent.jsx +82 -0
- package/dist/source/lazyRouteComponent.jsx.map +1 -0
- package/dist/source/link.d.ts +41 -0
- package/dist/source/link.jsx +339 -0
- package/dist/source/link.jsx.map +1 -0
- package/dist/source/matchContext.d.ts +3 -0
- package/dist/source/matchContext.jsx +5 -0
- package/dist/source/matchContext.jsx.map +1 -0
- package/dist/source/not-found.d.ts +27 -0
- package/dist/source/not-found.jsx +39 -0
- package/dist/source/not-found.jsx.map +1 -0
- package/dist/source/redirects.d.ts +5 -0
- package/dist/source/redirects.js +25 -0
- package/dist/source/redirects.js.map +1 -0
- package/dist/source/renderRouteNotFound.d.ts +3 -0
- package/dist/source/renderRouteNotFound.jsx +15 -0
- package/dist/source/renderRouteNotFound.jsx.map +1 -0
- package/dist/source/route.d.ts +256 -0
- package/dist/source/route.js +240 -0
- package/dist/source/route.js.map +1 -0
- package/dist/source/router.d.ts +549 -0
- package/dist/source/router.js +1802 -0
- package/dist/source/router.js.map +1 -0
- package/dist/source/routerContext.d.ts +8 -0
- package/dist/source/routerContext.jsx +13 -0
- package/dist/source/routerContext.jsx.map +1 -0
- package/dist/source/scroll-restoration.d.ts +29 -0
- package/dist/source/scroll-restoration.jsx +244 -0
- package/dist/source/scroll-restoration.jsx.map +1 -0
- package/dist/source/typePrimitives.d.ts +69 -0
- package/dist/source/typePrimitives.js +2 -0
- package/dist/source/typePrimitives.js.map +1 -0
- package/dist/source/useBlocker.d.ts +68 -0
- package/dist/source/useBlocker.jsx +136 -0
- package/dist/source/useBlocker.jsx.map +1 -0
- package/dist/source/useCanGoBack.d.ts +1 -0
- package/dist/source/useCanGoBack.js +5 -0
- package/dist/source/useCanGoBack.js.map +1 -0
- package/dist/source/useLoaderData.d.ts +10 -0
- package/dist/source/useLoaderData.jsx +11 -0
- package/dist/source/useLoaderData.jsx.map +1 -0
- package/dist/source/useLoaderDeps.d.ts +9 -0
- package/dist/source/useLoaderDeps.jsx +11 -0
- package/dist/source/useLoaderDeps.jsx.map +1 -0
- package/dist/source/useLocation.d.ts +7 -0
- package/dist/source/useLocation.jsx +7 -0
- package/dist/source/useLocation.jsx.map +1 -0
- package/dist/source/useMatch.d.ts +14 -0
- package/dist/source/useMatch.jsx +19 -0
- package/dist/source/useMatch.jsx.map +1 -0
- package/dist/source/useNavigate.d.ts +6 -0
- package/dist/source/useNavigate.jsx +32 -0
- package/dist/source/useNavigate.jsx.map +1 -0
- package/dist/source/useParams.d.ts +12 -0
- package/dist/source/useParams.jsx +12 -0
- package/dist/source/useParams.jsx.map +1 -0
- package/dist/source/useRouteContext.d.ts +5 -0
- package/dist/source/useRouteContext.js +8 -0
- package/dist/source/useRouteContext.js.map +1 -0
- package/dist/source/useRouter.d.ts +4 -0
- package/dist/source/useRouter.jsx +9 -0
- package/dist/source/useRouter.jsx.map +1 -0
- package/dist/source/useRouterState.d.ts +8 -0
- package/dist/source/useRouterState.jsx +14 -0
- package/dist/source/useRouterState.jsx.map +1 -0
- package/dist/source/useSearch.d.ts +12 -0
- package/dist/source/useSearch.jsx +12 -0
- package/dist/source/useSearch.jsx.map +1 -0
- package/dist/source/utils.d.ts +43 -0
- package/dist/source/utils.js +59 -0
- package/dist/source/utils.js.map +1 -0
- package/package.json +6 -2
- package/src/fileRoute.ts +12 -6
- package/src/index.tsx +4 -2
- package/src/redirects.ts +4 -36
- package/src/route.ts +1 -2
- package/src/router.ts +2 -1
- package/src/typePrimitives.ts +5 -3
- package/src/useLoaderData.tsx +5 -19
- package/src/useLoaderDeps.tsx +5 -11
- package/src/useNavigate.tsx +5 -12
- package/src/useParams.tsx +3 -20
- package/src/useRouteContext.ts +5 -36
- package/src/useSearch.tsx +3 -21
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { LinkComponentProps } from './link.js';
|
|
2
|
-
import { Redirect } from './redirects.js';
|
|
3
2
|
import { AnyRouter, RegisteredRouter } from './router.js';
|
|
4
|
-
import { UseParamsOptions
|
|
5
|
-
import { UseSearchOptions
|
|
6
|
-
import { Constrain, ConstrainLiteral, FromPathOption, NavigateOptions, PathParamOptions, RouteIds, SearchParamOptions, ToPathOption } from '@tanstack/router-core';
|
|
3
|
+
import { UseParamsOptions } from './useParams.js';
|
|
4
|
+
import { UseSearchOptions } from './useSearch.js';
|
|
5
|
+
import { Constrain, ConstrainLiteral, FromPathOption, NavigateOptions, PathParamOptions, Redirect, RouteIds, SearchParamOptions, ToPathOption, UseParamsResult, UseSearchResult } from '@tanstack/router-core';
|
|
7
6
|
export type ValidateFromPath<TRouter extends AnyRouter = RegisteredRouter, TFrom = string> = FromPathOption<TRouter, TFrom>;
|
|
8
7
|
export type ValidateToPath<TRouter extends AnyRouter = RegisteredRouter, TTo extends string | undefined = undefined, TFrom extends string = string> = ToPathOption<TRouter, TFrom, TTo>;
|
|
9
8
|
export type ValidateSearch<TRouter extends AnyRouter = RegisteredRouter, TTo extends string | undefined = undefined, TFrom extends string = string> = SearchParamOptions<TRouter, TFrom, TTo>;
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { Accessor } from 'solid-js';
|
|
2
2
|
import { AnyRouter, RegisteredRouter } from './router.js';
|
|
3
3
|
import { StrictOrFrom } from './utils.js';
|
|
4
|
-
import {
|
|
4
|
+
import { ResolveUseLoaderData, UseLoaderDataResult } from '@tanstack/router-core';
|
|
5
5
|
export interface UseLoaderDataBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> {
|
|
6
|
-
select?: (match:
|
|
6
|
+
select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected;
|
|
7
7
|
}
|
|
8
8
|
export type UseLoaderDataOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>;
|
|
9
|
-
export type ResolveLoaderData<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? AllLoaderData<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['loaderData']>;
|
|
10
|
-
export type UseLoaderDataResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveLoaderData<TRouter, TFrom, TStrict> : TSelected;
|
|
11
9
|
export type UseLoaderDataRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>) => Accessor<UseLoaderDataResult<TRouter, TId, true, TSelected>>;
|
|
12
10
|
export declare function useLoaderData<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown>(opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>): Accessor<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLoaderData.js","sources":["../../src/useLoaderData.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { StrictOrFrom } from './utils'\nimport type {
|
|
1
|
+
{"version":3,"file":"useLoaderData.js","sources":["../../src/useLoaderData.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { StrictOrFrom } from './utils'\nimport type {\n ResolveUseLoaderData,\n UseLoaderDataResult,\n} from '@tanstack/router-core'\n\nexport interface UseLoaderDataBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> {\n select?: (match: ResolveUseLoaderData<TRouter, TFrom, TStrict>) => TSelected\n}\n\nexport type UseLoaderDataOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseLoaderDataBaseOptions<TRouter, TFrom, TStrict, TSelected>\n\nexport type UseLoaderDataRoute<out TId> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLoaderDataBaseOptions<TRouter, TId, true, TSelected>,\n) => Accessor<UseLoaderDataResult<TRouter, TId, true, TSelected>>\n\nexport function useLoaderData<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseLoaderDataOptions<TRouter, TFrom, TStrict, TSelected>,\n): Accessor<UseLoaderDataResult<TRouter, TFrom, TStrict, TSelected>> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n select: (s: any) => {\n return opts.select ? opts.select(s.loaderData) : s.loaderData\n },\n } as any) as any\n}\n"],"names":["useLoaderData","opts","useMatch","from","strict","select","s","loaderData"],"mappings":";AAiCO,SAASA,cAMdC,MACmE;AACnE,SAAOC,SAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,QAAQA,CAACC,MAAW;AAClB,aAAOL,KAAKI,SAASJ,KAAKI,OAAOC,EAAEC,UAAU,IAAID,EAAEC;AAAAA,IAAAA;AAAAA,EACrD,CACM;AACV;"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { AnyRouter, RegisteredRouter } from './router.js';
|
|
2
2
|
import { StrictOrFrom } from './utils.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ResolveUseLoaderDeps, UseLoaderDepsResult } from '@tanstack/router-core';
|
|
4
4
|
export interface UseLoaderDepsBaseOptions<TRouter extends AnyRouter, TFrom, TSelected> {
|
|
5
|
-
select?: (deps:
|
|
5
|
+
select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected;
|
|
6
6
|
}
|
|
7
7
|
export type UseLoaderDepsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TSelected> = StrictOrFrom<TRouter, TFrom> & UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>;
|
|
8
|
-
export type ResolveLoaderDeps<TRouter extends AnyRouter, TFrom> = Expand<RouteById<TRouter['routeTree'], TFrom>['types']['loaderDeps']>;
|
|
9
|
-
export type UseLoaderDepsResult<TRouter extends AnyRouter, TFrom, TSelected> = unknown extends TSelected ? ResolveLoaderDeps<TRouter, TFrom> : TSelected;
|
|
10
8
|
export type UseLoaderDepsRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>) => UseLoaderDepsResult<TRouter, TId, TSelected>;
|
|
11
9
|
export declare function useLoaderDeps<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TSelected = unknown>(opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>): UseLoaderDepsResult<TRouter, TFrom, TSelected>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLoaderDeps.js","sources":["../../src/useLoaderDeps.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { StrictOrFrom } from './utils'\nimport type {
|
|
1
|
+
{"version":3,"file":"useLoaderDeps.js","sources":["../../src/useLoaderDeps.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { StrictOrFrom } from './utils'\nimport type {\n ResolveUseLoaderDeps,\n UseLoaderDepsResult,\n} from '@tanstack/router-core'\n\nexport interface UseLoaderDepsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TSelected,\n> {\n select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected\n}\n\nexport type UseLoaderDepsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom> &\n UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>\n\nexport type UseLoaderDepsRoute<out TId> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>,\n) => UseLoaderDepsResult<TRouter, TId, TSelected>\n\nexport function useLoaderDeps<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TSelected = unknown,\n>(\n opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>,\n): UseLoaderDepsResult<TRouter, TFrom, TSelected> {\n const { select, ...rest } = opts\n return useMatch({\n ...rest,\n select: (s) => {\n return select ? select(s.loaderDeps) : s.loaderDeps\n },\n }) as UseLoaderDepsResult<TRouter, TFrom, TSelected>\n}\n"],"names":["useLoaderDeps","opts","select","rest","useMatch","s","loaderDeps"],"mappings":";AA8BO,SAASA,cAKdC,MACgD;AAC1C,QAAA;AAAA,IAAEC;AAAAA,IAAQ,GAAGC;AAAAA,EAAAA,IAASF;AAC5B,SAAOG,SAAS;AAAA,IACd,GAAGD;AAAAA,IACHD,QAASG,CAAM,MAAA;AACb,aAAOH,SAASA,OAAOG,EAAEC,UAAU,IAAID,EAAEC;AAAAA,IAAAA;AAAAA,EAC3C,CACD;AACH;"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { FromPathOption, NavigateOptions } from '@tanstack/router-core';
|
|
1
|
+
import { FromPathOption, NavigateOptions, UseNavigateResult } from '@tanstack/router-core';
|
|
2
2
|
import { AnyRouter, RegisteredRouter } from './router.js';
|
|
3
|
-
export type UseNavigateResult<TDefaultFrom extends string> = <TRouter extends RegisteredRouter, TTo extends string | undefined, TFrom extends string = TDefaultFrom, TMaskFrom extends string = TFrom, TMaskTo extends string = ''>({ from, ...rest }: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>) => Promise<void>;
|
|
4
3
|
export declare function useNavigate<TRouter extends AnyRouter = RegisteredRouter, TDefaultFrom extends string = string>(_defaultOpts?: {
|
|
5
4
|
from?: FromPathOption<TRouter, TDefaultFrom>;
|
|
6
5
|
}): UseNavigateResult<TDefaultFrom>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNavigate.js","sources":["../../src/useNavigate.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {
|
|
1
|
+
{"version":3,"file":"useNavigate.js","sources":["../../src/useNavigate.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n FromPathOption,\n NavigateOptions,\n UseNavigateResult,\n} from '@tanstack/router-core'\nimport type { AnyRouter, RegisteredRouter } from './router'\n\nexport function useNavigate<\n TRouter extends AnyRouter = RegisteredRouter,\n TDefaultFrom extends string = string,\n>(_defaultOpts?: {\n from?: FromPathOption<TRouter, TDefaultFrom>\n}): UseNavigateResult<TDefaultFrom> {\n const { navigate } = useRouter()\n\n return ((options: NavigateOptions) => {\n return navigate({ ...options })\n }) as UseNavigateResult<TDefaultFrom>\n}\n\n// NOTE: I don't know of anyone using this. It's undocumented, so let's wait until someone needs it\n// export function typedNavigate<\n// TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n// TDefaultFrom extends RoutePaths<TRouteTree> = '/',\n// >(navigate: (opts: NavigateOptions<any>) => Promise<void>) {\n// return navigate as <\n// TFrom extends RoutePaths<TRouteTree> = TDefaultFrom,\n// TTo extends string = '',\n// TMaskFrom extends RoutePaths<TRouteTree> = '/',\n// TMaskTo extends string = '',\n// >(\n// opts?: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>,\n// ) => Promise<void>\n// } //\n\nexport function Navigate<\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: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): null {\n const { navigate } = useRouter()\n\n Solid.onMount(() => {\n navigate({\n ...props,\n })\n })\n\n return null\n}\n"],"names":["useNavigate","_defaultOpts","navigate","useRouter","options","Navigate","props","Solid","onMount"],"mappings":";;AASO,SAASA,YAGdC,cAEkC;AAC5B,QAAA;AAAA,IAAEC;AAAAA,MAAaC,UAAU;AAE/B,SAAQ,CAACC,YAA6B;AACpC,WAAOF,SAAS;AAAA,MAAE,GAAGE;AAAAA,IAAAA,CAAS;AAAA,EAChC;AACF;AAiBO,SAASC,SAMdC,OAAuE;AACjE,QAAA;AAAA,IAAEJ;AAAAA,MAAaC,UAAU;AAE/BI,QAAMC,QAAQ,MAAM;AACT,aAAA;AAAA,MACP,GAAGF;AAAAA,IAAAA,CACJ;AAAA,EAAA,CACF;AAEM,SAAA;AACT;"}
|
package/dist/esm/useParams.d.ts
CHANGED
|
@@ -2,13 +2,11 @@ import { ThrowConstraint } from './useMatch.js';
|
|
|
2
2
|
import { Accessor } from 'solid-js';
|
|
3
3
|
import { AnyRouter, RegisteredRouter } from './router.js';
|
|
4
4
|
import { StrictOrFrom } from './utils.js';
|
|
5
|
-
import {
|
|
5
|
+
import { ResolveUseParams, ThrowOrOptional, UseParamsResult } from '@tanstack/router-core';
|
|
6
6
|
export interface UseParamsBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> {
|
|
7
|
-
select?: (params:
|
|
7
|
+
select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected;
|
|
8
8
|
shouldThrow?: TThrow;
|
|
9
9
|
}
|
|
10
10
|
export type UseParamsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TThrow extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
|
|
11
|
-
export type ResolveParams<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? AllParams<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['allParams']>;
|
|
12
|
-
export type UseParamsResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveParams<TRouter, TFrom, TStrict> : TSelected;
|
|
13
11
|
export type UseParamsRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseParamsBaseOptions<TRouter, TFrom, true, true, TSelected>) => Accessor<UseParamsResult<TRouter, TFrom, true, TSelected>>;
|
|
14
12
|
export declare function useParams<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown>(opts: UseParamsOptions<TRouter, TFrom, TStrict, ThrowConstraint<TStrict, TThrow>, TSelected>): Accessor<ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useParams.js","sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { ThrowConstraint } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { StrictOrFrom } from './utils'\nimport type {\n
|
|
1
|
+
{"version":3,"file":"useParams.js","sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { ThrowConstraint } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { StrictOrFrom } from './utils'\nimport type {\n ResolveUseParams,\n ThrowOrOptional,\n UseParamsResult,\n} from '@tanstack/router-core'\n\nexport interface UseParamsBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (params: ResolveUseParams<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseParamsOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseParamsBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseParamsRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseParamsBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Accessor<UseParamsResult<TRouter, TFrom, true, TSelected>>\n\nexport function useParams<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseParamsOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Accessor<\n ThrowOrOptional<UseParamsResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.params) : match.params\n },\n } as any) as any\n}\n"],"names":["useParams","opts","useMatch","from","strict","shouldThrow","select","match","params"],"mappings":";AA4CO,SAASA,UAOdC,MASA;AACA,SAAOC,SAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IAAAA;AAAAA,EACzD,CACM;AACV;"}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { Accessor } from 'solid-js';
|
|
2
2
|
import { AnyRouter, RegisteredRouter } from './router.js';
|
|
3
|
-
import {
|
|
4
|
-
import { AllContext, Expand, RouteById } from '@tanstack/router-core';
|
|
5
|
-
export interface UseRouteContextBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> {
|
|
6
|
-
select?: (search: ResolveRouteContext<TRouter, TFrom, TStrict>) => TSelected;
|
|
7
|
-
}
|
|
8
|
-
export type UseRouteContextOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TStrict extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseRouteContextBaseOptions<TRouter, TFrom, TStrict, TSelected>;
|
|
9
|
-
export type ResolveRouteContext<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? AllContext<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['allContext']>;
|
|
10
|
-
export type UseRouteContextResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveRouteContext<TRouter, TFrom, TStrict> : TSelected;
|
|
3
|
+
import { UseRouteContextBaseOptions, UseRouteContextOptions, UseRouteContextResult } from '@tanstack/router-core';
|
|
11
4
|
export type UseRouteContextRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>) => Accessor<UseRouteContextResult<TRouter, TFrom, true, TSelected>>;
|
|
12
5
|
export declare function useRouteContext<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TSelected = unknown>(opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>): Accessor<UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRouteContext.js","sources":["../../src/useRouteContext.ts"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\n\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type {
|
|
1
|
+
{"version":3,"file":"useRouteContext.js","sources":["../../src/useRouteContext.ts"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\n\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type {\n UseRouteContextBaseOptions,\n UseRouteContextOptions,\n UseRouteContextResult,\n} from '@tanstack/router-core'\n\nexport type UseRouteContextRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouteContextBaseOptions<TRouter, TFrom, true, TSelected>,\n) => Accessor<UseRouteContextResult<TRouter, TFrom, true, TSelected>>\n\nexport function useRouteContext<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseRouteContextOptions<TRouter, TFrom, TStrict, TSelected>,\n): Accessor<UseRouteContextResult<TRouter, TFrom, TStrict, TSelected>> {\n return useMatch({\n ...(opts as any),\n select: (match) =>\n opts.select ? opts.select(match.context) : match.context,\n }) as any\n}\n"],"names":[],"mappings":";AAiBO,SAAS,gBAMd,MACqE;AACrE,SAAO,SAAS;AAAA,IACd,GAAI;AAAA,IACJ,QAAQ,CAAC,UACP,KAAK,SAAS,KAAK,OAAO,MAAM,OAAO,IAAI,MAAM;AAAA,EAAA,CACpD;AACH;"}
|
package/dist/esm/useSearch.d.ts
CHANGED
|
@@ -2,13 +2,11 @@ import { ThrowConstraint } from './useMatch.js';
|
|
|
2
2
|
import { Accessor } from 'solid-js';
|
|
3
3
|
import { AnyRouter, RegisteredRouter } from './router.js';
|
|
4
4
|
import { StrictOrFrom } from './utils.js';
|
|
5
|
-
import {
|
|
5
|
+
import { ResolveUseSearch, ThrowOrOptional, UseSearchResult } from '@tanstack/router-core';
|
|
6
6
|
export interface UseSearchBaseOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> {
|
|
7
|
-
select?: (state:
|
|
7
|
+
select?: (state: ResolveUseSearch<TRouter, TFrom, TStrict>) => TSelected;
|
|
8
8
|
shouldThrow?: TThrow;
|
|
9
9
|
}
|
|
10
10
|
export type UseSearchOptions<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TThrow extends boolean, TSelected> = StrictOrFrom<TRouter, TFrom, TStrict> & UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>;
|
|
11
|
-
export type UseSearchResult<TRouter extends AnyRouter, TFrom, TStrict extends boolean, TSelected> = unknown extends TSelected ? ResolveSearch<TRouter, TFrom, TStrict> : TSelected;
|
|
12
|
-
export type ResolveSearch<TRouter extends AnyRouter, TFrom, TStrict extends boolean> = TStrict extends false ? FullSearchSchema<TRouter['routeTree']> : Expand<RouteById<TRouter['routeTree'], TFrom>['types']['fullSearchSchema']>;
|
|
13
11
|
export type UseSearchRoute<out TFrom> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseSearchBaseOptions<TRouter, TFrom, true, true, TSelected>) => Accessor<UseSearchResult<TRouter, TFrom, true, TSelected>>;
|
|
14
12
|
export declare function useSearch<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TStrict extends boolean = true, TThrow extends boolean = true, TSelected = unknown>(opts: UseSearchOptions<TRouter, TFrom, TStrict, ThrowConstraint<TStrict, TThrow>, TSelected>): Accessor<ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSearch.js","sources":["../../src/useSearch.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { ThrowConstraint } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { StrictOrFrom } from './utils'\nimport type {\n
|
|
1
|
+
{"version":3,"file":"useSearch.js","sources":["../../src/useSearch.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { ThrowConstraint } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type { AnyRouter, RegisteredRouter } from './router'\nimport type { StrictOrFrom } from './utils'\nimport type {\n ResolveUseSearch,\n ThrowOrOptional,\n UseSearchResult,\n} from '@tanstack/router-core'\n\nexport interface UseSearchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (state: ResolveUseSearch<TRouter, TFrom, TStrict>) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseSearchOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseSearchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseSearchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseSearchBaseOptions<\n TRouter,\n TFrom,\n /* TStrict */ true,\n /* TThrow */ true,\n TSelected\n >,\n) => Accessor<UseSearchResult<TRouter, TFrom, true, TSelected>>\n\nexport function useSearch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseSearchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Accessor<\n ThrowOrOptional<UseSearchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n return useMatch({\n from: opts.from!,\n strict: opts.strict,\n shouldThrow: opts.shouldThrow,\n select: (match: any) => {\n return opts.select ? opts.select(match.search) : match.search\n },\n }) as any\n}\n"],"names":["useSearch","opts","useMatch","from","strict","shouldThrow","select","match","search"],"mappings":";AA4CO,SAASA,UAOdC,MASA;AACA,SAAOC,SAAS;AAAA,IACdC,MAAMF,KAAKE;AAAAA,IACXC,QAAQH,KAAKG;AAAAA,IACbC,aAAaJ,KAAKI;AAAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,aAAON,KAAKK,SAASL,KAAKK,OAAOC,MAAMC,MAAM,IAAID,MAAMC;AAAAA,IAAAA;AAAAA,EACzD,CACD;AACH;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function Asset({ tag, attrs, children }) {
|
|
2
|
+
switch (tag) {
|
|
3
|
+
case 'title':
|
|
4
|
+
return <title {...attrs}>{children}</title>;
|
|
5
|
+
case 'meta':
|
|
6
|
+
return <meta {...attrs}/>;
|
|
7
|
+
case 'link':
|
|
8
|
+
return <link {...attrs}/>;
|
|
9
|
+
case 'style':
|
|
10
|
+
return <style {...attrs} innerHTML={children}/>;
|
|
11
|
+
case 'script':
|
|
12
|
+
if (attrs && attrs.src) {
|
|
13
|
+
return <script {...attrs}/>;
|
|
14
|
+
}
|
|
15
|
+
if (typeof children === 'string')
|
|
16
|
+
return <script {...attrs} innerHTML={children}/>;
|
|
17
|
+
return null;
|
|
18
|
+
default:
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=Asset.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"AAEA,MAAM,UAAU,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAoB;IAC9D,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;QAC7C,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;QAC5B,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;QAC5B,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAG,CAAA;QAClD,KAAK,QAAQ;YACX,IAAK,KAAa,IAAK,KAAa,CAAC,GAAG,EAAE,CAAC;gBACzC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAG,CAAA;YAC9B,CAAC;YACD,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAC9B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAG,CAAA;YACnD,OAAO,IAAI,CAAA;QACb;YACE,OAAO,IAAI,CAAA;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as Solid from 'solid-js';
|
|
2
|
+
import type { ErrorRouteComponent } from './route';
|
|
3
|
+
export declare function CatchBoundary(props: {
|
|
4
|
+
getResetKey: () => number | string;
|
|
5
|
+
children: Solid.JSX.Element;
|
|
6
|
+
errorComponent?: ErrorRouteComponent;
|
|
7
|
+
onCatch?: (error: Error) => void;
|
|
8
|
+
} & Solid.ParentProps): Solid.JSX.Element;
|
|
9
|
+
export declare function ErrorComponent({ error }: {
|
|
10
|
+
error: any;
|
|
11
|
+
}): Solid.JSX.Element;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as Solid from 'solid-js';
|
|
2
|
+
import { Dynamic } from 'solid-js/web';
|
|
3
|
+
export function CatchBoundary(props) {
|
|
4
|
+
return (<Solid.ErrorBoundary fallback={(error, reset) => {
|
|
5
|
+
props.onCatch?.(error);
|
|
6
|
+
Solid.createEffect(Solid.on([props.getResetKey], () => reset(), { defer: true }));
|
|
7
|
+
return (<Dynamic component={props.errorComponent ?? ErrorComponent} error={error} reset={reset}/>);
|
|
8
|
+
}}>
|
|
9
|
+
{props.children}
|
|
10
|
+
</Solid.ErrorBoundary>);
|
|
11
|
+
}
|
|
12
|
+
export function ErrorComponent({ error }) {
|
|
13
|
+
const [show, setShow] = Solid.createSignal(process.env.NODE_ENV !== 'production');
|
|
14
|
+
return (<div style={{ padding: '.5rem', 'max-width': '100%' }}>
|
|
15
|
+
<div style={{ display: 'flex', 'align-items': 'center', gap: '.5rem' }}>
|
|
16
|
+
<strong style={{ 'font-size': '1rem' }}>Something went wrong!</strong>
|
|
17
|
+
<button style={{
|
|
18
|
+
appearance: 'none',
|
|
19
|
+
'font-size': '.6em',
|
|
20
|
+
border: '1px solid currentColor',
|
|
21
|
+
padding: '.1rem .2rem',
|
|
22
|
+
'font-weight': 'bold',
|
|
23
|
+
'border-radius': '.25rem',
|
|
24
|
+
}} onClick={() => setShow((d) => !d)}>
|
|
25
|
+
{show() ? 'Hide Error' : 'Show Error'}
|
|
26
|
+
</button>
|
|
27
|
+
</div>
|
|
28
|
+
<div style={{ height: '.25rem' }}/>
|
|
29
|
+
{show() ? (<div>
|
|
30
|
+
<pre style={{
|
|
31
|
+
'font-size': '.7em',
|
|
32
|
+
border: '1px solid red',
|
|
33
|
+
'border-radius': '.25rem',
|
|
34
|
+
padding: '.3rem',
|
|
35
|
+
color: 'red',
|
|
36
|
+
overflow: 'auto',
|
|
37
|
+
}}>
|
|
38
|
+
{error.message ? <code>{error.message}</code> : null}
|
|
39
|
+
</pre>
|
|
40
|
+
</div>) : null}
|
|
41
|
+
</div>);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=CatchBoundary.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CatchBoundary.jsx","sourceRoot":"","sources":["../../src/CatchBoundary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as Solid from 'solid-js';
|
|
2
|
+
import type { RouterManagedTag } from '@tanstack/router-core';
|
|
3
|
+
export declare const useTags: () => RouterManagedTag[];
|
|
4
|
+
/**
|
|
5
|
+
* @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
|
|
6
|
+
* It should be rendered in the `<head>` of your document.
|
|
7
|
+
*/
|
|
8
|
+
export declare function HeadContent(): Solid.JSX.Element[];
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import * as Solid from 'solid-js';
|
|
2
|
+
import { Asset } from './Asset';
|
|
3
|
+
import { useRouter } from './useRouter';
|
|
4
|
+
import { useRouterState } from './useRouterState';
|
|
5
|
+
export const useTags = () => {
|
|
6
|
+
const router = useRouter();
|
|
7
|
+
const routeMeta = useRouterState({
|
|
8
|
+
select: (state) => {
|
|
9
|
+
return state.matches.map((match) => match.meta).filter(Boolean);
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
const meta = Solid.createMemo(() => {
|
|
13
|
+
const resultMeta = [];
|
|
14
|
+
const metaByAttribute = {};
|
|
15
|
+
let title;
|
|
16
|
+
[...routeMeta()].reverse().forEach((metas) => {
|
|
17
|
+
;
|
|
18
|
+
[...metas].reverse().forEach((m) => {
|
|
19
|
+
if (!m)
|
|
20
|
+
return;
|
|
21
|
+
if (m.title) {
|
|
22
|
+
if (!title) {
|
|
23
|
+
title = {
|
|
24
|
+
tag: 'title',
|
|
25
|
+
children: m.title,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const attribute = m.name ?? m.property;
|
|
31
|
+
if (attribute) {
|
|
32
|
+
if (metaByAttribute[attribute]) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
metaByAttribute[attribute] = true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
resultMeta.push({
|
|
40
|
+
tag: 'meta',
|
|
41
|
+
attrs: {
|
|
42
|
+
...m,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
if (title) {
|
|
49
|
+
resultMeta.push(title);
|
|
50
|
+
}
|
|
51
|
+
resultMeta.reverse();
|
|
52
|
+
return resultMeta;
|
|
53
|
+
}, [routeMeta]);
|
|
54
|
+
const links = useRouterState({
|
|
55
|
+
select: (state) => state.matches
|
|
56
|
+
.map((match) => match.links)
|
|
57
|
+
.filter(Boolean)
|
|
58
|
+
.flat(1)
|
|
59
|
+
.map((link) => ({
|
|
60
|
+
tag: 'link',
|
|
61
|
+
attrs: {
|
|
62
|
+
...link,
|
|
63
|
+
},
|
|
64
|
+
})),
|
|
65
|
+
});
|
|
66
|
+
const preloadMeta = useRouterState({
|
|
67
|
+
select: (state) => {
|
|
68
|
+
const preloadMeta = [];
|
|
69
|
+
state.matches
|
|
70
|
+
.map((match) => router.looseRoutesById[match.routeId])
|
|
71
|
+
.forEach((route) => router.ssr?.manifest?.routes[route.id]?.preloads
|
|
72
|
+
?.filter(Boolean)
|
|
73
|
+
.forEach((preload) => {
|
|
74
|
+
preloadMeta.push({
|
|
75
|
+
tag: 'link',
|
|
76
|
+
attrs: {
|
|
77
|
+
rel: 'modulepreload',
|
|
78
|
+
href: preload,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}));
|
|
82
|
+
return preloadMeta;
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
const headScripts = useRouterState({
|
|
86
|
+
select: (state) => state.matches
|
|
87
|
+
.map((match) => match.headScripts)
|
|
88
|
+
.flat(1)
|
|
89
|
+
.filter(Boolean).map(({ children, ...script }) => ({
|
|
90
|
+
tag: 'script',
|
|
91
|
+
attrs: {
|
|
92
|
+
...script,
|
|
93
|
+
},
|
|
94
|
+
children,
|
|
95
|
+
})),
|
|
96
|
+
});
|
|
97
|
+
return uniqBy([
|
|
98
|
+
...meta(),
|
|
99
|
+
...preloadMeta(),
|
|
100
|
+
...links(),
|
|
101
|
+
...headScripts(),
|
|
102
|
+
], (d) => {
|
|
103
|
+
return JSON.stringify(d);
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
|
|
108
|
+
* It should be rendered in the `<head>` of your document.
|
|
109
|
+
*/
|
|
110
|
+
export function HeadContent() {
|
|
111
|
+
const tags = useTags();
|
|
112
|
+
return tags.map((tag) => <Asset {...tag}/>);
|
|
113
|
+
}
|
|
114
|
+
function uniqBy(arr, fn) {
|
|
115
|
+
const seen = new Set();
|
|
116
|
+
return arr.filter((item) => {
|
|
117
|
+
const key = fn(item);
|
|
118
|
+
if (seen.has(key)) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
seen.add(key);
|
|
122
|
+
return true;
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=HeadContent.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"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"}
|