@tanstack/solid-router 1.167.4 → 1.168.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Match.cjs +244 -223
- package/dist/cjs/Match.cjs.map +1 -1
- package/dist/cjs/Match.d.cts +1 -3
- package/dist/cjs/Matches.cjs +32 -31
- package/dist/cjs/Matches.cjs.map +1 -1
- package/dist/cjs/Scripts.cjs +10 -8
- package/dist/cjs/Scripts.cjs.map +1 -1
- package/dist/cjs/Scripts.d.cts +2 -1
- package/dist/cjs/Transitioner.cjs +26 -26
- package/dist/cjs/Transitioner.cjs.map +1 -1
- package/dist/cjs/headContentUtils.cjs +15 -15
- package/dist/cjs/headContentUtils.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.dev.cjs +1 -1
- package/dist/cjs/link.cjs +119 -84
- package/dist/cjs/link.cjs.map +1 -1
- package/dist/cjs/matchContext.cjs +7 -5
- package/dist/cjs/matchContext.cjs.map +1 -1
- package/dist/cjs/matchContext.d.cts +8 -2
- package/dist/cjs/not-found.cjs +8 -4
- package/dist/cjs/not-found.cjs.map +1 -1
- package/dist/cjs/not-found.d.cts +1 -1
- package/dist/cjs/router.cjs +2 -1
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/cjs/routerStores.cjs +67 -0
- package/dist/cjs/routerStores.cjs.map +1 -0
- package/dist/cjs/routerStores.d.cts +10 -0
- package/dist/cjs/ssr/RouterClient.cjs +1 -1
- package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToStream.cjs +1 -1
- package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToString.cjs +2 -2
- package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToString.d.cts +1 -1
- package/dist/cjs/useCanGoBack.cjs +6 -2
- package/dist/cjs/useCanGoBack.cjs.map +1 -1
- package/dist/cjs/useCanGoBack.d.cts +2 -1
- package/dist/cjs/useLoaderDeps.cjs +2 -3
- package/dist/cjs/useLoaderDeps.cjs.map +1 -1
- package/dist/cjs/useLocation.cjs +13 -2
- package/dist/cjs/useLocation.cjs.map +1 -1
- package/dist/cjs/useMatch.cjs +17 -15
- package/dist/cjs/useMatch.cjs.map +1 -1
- package/dist/cjs/useParams.cjs +1 -1
- package/dist/cjs/useParams.cjs.map +1 -1
- package/dist/cjs/useRouterState.cjs +12 -19
- package/dist/cjs/useRouterState.cjs.map +1 -1
- package/dist/cjs/useSearch.cjs +2 -1
- package/dist/cjs/useSearch.cjs.map +1 -1
- package/dist/cjs/utils.cjs +0 -14
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/cjs/utils.d.cts +0 -4
- package/dist/esm/Match.d.ts +1 -3
- package/dist/esm/Match.js +245 -224
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Matches.js +34 -33
- package/dist/esm/Matches.js.map +1 -1
- package/dist/esm/Scripts.d.ts +2 -1
- package/dist/esm/Scripts.js +8 -7
- package/dist/esm/Scripts.js.map +1 -1
- package/dist/esm/Transitioner.js +26 -26
- package/dist/esm/Transitioner.js.map +1 -1
- package/dist/esm/headContentUtils.js +15 -15
- package/dist/esm/headContentUtils.js.map +1 -1
- package/dist/esm/index.dev.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/link.js +120 -85
- package/dist/esm/link.js.map +1 -1
- package/dist/esm/matchContext.d.ts +8 -2
- package/dist/esm/matchContext.js +7 -4
- package/dist/esm/matchContext.js.map +1 -1
- package/dist/esm/not-found.d.ts +1 -1
- package/dist/esm/not-found.js +6 -3
- package/dist/esm/not-found.js.map +1 -1
- package/dist/esm/router.js +2 -1
- package/dist/esm/router.js.map +1 -1
- package/dist/esm/routerStores.d.ts +10 -0
- package/dist/esm/routerStores.js +65 -0
- package/dist/esm/routerStores.js.map +1 -0
- package/dist/esm/ssr/RouterClient.js +1 -1
- package/dist/esm/ssr/RouterClient.js.map +1 -1
- package/dist/esm/ssr/renderRouterToStream.js +1 -1
- package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
- package/dist/esm/ssr/renderRouterToString.d.ts +1 -1
- package/dist/esm/ssr/renderRouterToString.js +2 -2
- package/dist/esm/ssr/renderRouterToString.js.map +1 -1
- package/dist/esm/useCanGoBack.d.ts +2 -1
- package/dist/esm/useCanGoBack.js +4 -2
- package/dist/esm/useCanGoBack.js.map +1 -1
- package/dist/esm/useLoaderDeps.js +2 -3
- package/dist/esm/useLoaderDeps.js.map +1 -1
- package/dist/esm/useLocation.js +11 -2
- package/dist/esm/useLocation.js.map +1 -1
- package/dist/esm/useMatch.js +18 -16
- package/dist/esm/useMatch.js.map +1 -1
- package/dist/esm/useParams.js +1 -1
- package/dist/esm/useParams.js.map +1 -1
- package/dist/esm/useRouterState.js +10 -18
- package/dist/esm/useRouterState.js.map +1 -1
- package/dist/esm/useSearch.js +2 -1
- package/dist/esm/useSearch.js.map +1 -1
- package/dist/esm/utils.d.ts +0 -4
- package/dist/esm/utils.js +1 -14
- package/dist/esm/utils.js.map +1 -1
- package/dist/source/Match.d.ts +1 -3
- package/dist/source/Match.jsx +246 -237
- package/dist/source/Match.jsx.map +1 -1
- package/dist/source/Matches.jsx +42 -44
- package/dist/source/Matches.jsx.map +1 -1
- package/dist/source/Scripts.d.ts +2 -1
- package/dist/source/Scripts.jsx +31 -36
- package/dist/source/Scripts.jsx.map +1 -1
- package/dist/source/Transitioner.jsx +26 -31
- package/dist/source/Transitioner.jsx.map +1 -1
- package/dist/source/headContentUtils.jsx +64 -72
- package/dist/source/headContentUtils.jsx.map +1 -1
- package/dist/source/link.jsx +136 -107
- package/dist/source/link.jsx.map +1 -1
- package/dist/source/matchContext.d.ts +8 -2
- package/dist/source/matchContext.jsx +7 -3
- package/dist/source/matchContext.jsx.map +1 -1
- package/dist/source/not-found.d.ts +1 -1
- package/dist/source/not-found.jsx +6 -5
- package/dist/source/not-found.jsx.map +1 -1
- package/dist/source/router.js +2 -1
- package/dist/source/router.js.map +1 -1
- package/dist/source/routerStores.d.ts +10 -0
- package/dist/source/routerStores.js +71 -0
- package/dist/source/routerStores.js.map +1 -0
- package/dist/source/ssr/RouterClient.jsx +1 -1
- package/dist/source/ssr/RouterClient.jsx.map +1 -1
- package/dist/source/ssr/renderRouterToStream.jsx +1 -1
- package/dist/source/ssr/renderRouterToStream.jsx.map +1 -1
- package/dist/source/ssr/renderRouterToString.d.ts +1 -1
- package/dist/source/ssr/renderRouterToString.jsx +2 -2
- package/dist/source/ssr/renderRouterToString.jsx.map +1 -1
- package/dist/source/useCanGoBack.d.ts +2 -1
- package/dist/source/useCanGoBack.js +4 -2
- package/dist/source/useCanGoBack.js.map +1 -1
- package/dist/source/useLoaderDeps.jsx +2 -3
- package/dist/source/useLoaderDeps.jsx.map +1 -1
- package/dist/source/useLocation.jsx +13 -3
- package/dist/source/useLocation.jsx.map +1 -1
- package/dist/source/useMatch.jsx +30 -27
- package/dist/source/useMatch.jsx.map +1 -1
- package/dist/source/useParams.jsx +1 -1
- package/dist/source/useParams.jsx.map +1 -1
- package/dist/source/useRouterState.jsx +12 -33
- package/dist/source/useRouterState.jsx.map +1 -1
- package/dist/source/useSearch.jsx +2 -1
- package/dist/source/useSearch.jsx.map +1 -1
- package/dist/source/utils.d.ts +0 -4
- package/dist/source/utils.js +0 -13
- package/dist/source/utils.js.map +1 -1
- package/package.json +2 -3
- package/skills/solid-router/SKILL.md +2 -0
- package/src/Match.tsx +351 -304
- package/src/Matches.tsx +49 -52
- package/src/Scripts.tsx +40 -41
- package/src/Transitioner.tsx +67 -66
- package/src/headContentUtils.tsx +89 -91
- package/src/link.tsx +179 -141
- package/src/matchContext.tsx +16 -7
- package/src/not-found.tsx +6 -6
- package/src/router.ts +2 -1
- package/src/routerStores.ts +107 -0
- package/src/ssr/RouterClient.tsx +1 -1
- package/src/ssr/renderRouterToStream.tsx +1 -1
- package/src/ssr/renderRouterToString.tsx +2 -2
- package/src/useCanGoBack.ts +6 -2
- package/src/useLoaderDeps.tsx +2 -3
- package/src/useLocation.tsx +18 -5
- package/src/useMatch.tsx +36 -43
- package/src/useParams.tsx +2 -3
- package/src/useRouterState.tsx +17 -41
- package/src/useSearch.tsx +2 -1
- package/src/utils.ts +0 -20
package/dist/esm/router.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createFileRoute, createLazyFileRoute } from "./fileRoute.js";
|
|
2
|
+
import { getStoreFactory } from "./routerStores.js";
|
|
2
3
|
import { RouterCore } from "@tanstack/router-core";
|
|
3
4
|
//#region src/router.ts
|
|
4
5
|
var createRouter = (options) => {
|
|
@@ -6,7 +7,7 @@ var createRouter = (options) => {
|
|
|
6
7
|
};
|
|
7
8
|
var Router = class extends RouterCore {
|
|
8
9
|
constructor(options) {
|
|
9
|
-
super(options);
|
|
10
|
+
super(options, getStoreFactory);
|
|
10
11
|
}
|
|
11
12
|
};
|
|
12
13
|
if (typeof globalThis !== "undefined") {
|
package/dist/esm/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","names":[],"sources":["../../src/router.ts"],"sourcesContent":["import { RouterCore } from '@tanstack/router-core'\nimport { createFileRoute, createLazyFileRoute } from './fileRoute'\nimport type { RouterHistory } from '@tanstack/history'\nimport type {\n AnyRoute,\n CreateRouterFn,\n RouterConstructorOptions,\n TrailingSlashOption,\n} from '@tanstack/router-core'\nimport type {\n ErrorRouteComponent,\n NotFoundRouteComponent,\n RouteComponent,\n} from './route'\nimport type { JSX } from 'solid-js'\n\ndeclare module '@tanstack/router-core' {\n export interface RouterOptionsExtensions {\n /**\n * The default `component` a route should use if no component is provided.\n *\n * @default Outlet\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultcomponent-property)\n */\n defaultComponent?: RouteComponent\n /**\n * The default `errorComponent` a route should use if no error component is provided.\n *\n * @default ErrorComponent\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaulterrorcomponent-property)\n * @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/data-loading#handling-errors-with-routeoptionserrorcomponent)\n */\n defaultErrorComponent?: ErrorRouteComponent\n /**\n * The default `pendingComponent` a route should use if no pending component is provided.\n *\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultpendingcomponent-property)\n * @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/data-loading#showing-a-pending-component)\n */\n defaultPendingComponent?: RouteComponent\n /**\n * The default `notFoundComponent` a route should use if no notFound component is provided.\n *\n * @default NotFound\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultnotfoundcomponent-property)\n * @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/not-found-errors#default-router-wide-not-found-handling)\n */\n defaultNotFoundComponent?: NotFoundRouteComponent\n /**\n * A component that will be used to wrap the entire router.\n *\n * This is useful for providing a context to the entire router.\n *\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#wrap-property)\n */\n Wrap?: (props: { children: any }) => JSX.Element\n /**\n * A component that will be used to wrap the inner contents of the router.\n *\n * This is useful for providing a context to the inner contents of the router where you also need access to the router context and hooks.\n *\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#innerwrap-property)\n */\n InnerWrap?: (props: { children: any }) => JSX.Element\n\n /**\n * The default `onCatch` handler for errors caught by the Router ErrorBoundary\n *\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RouterOptionsType#defaultoncatch-property)\n * @link [Guide](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#handling-errors-with-routeoptionsoncatch)\n */\n defaultOnCatch?: (error: Error) => void\n }\n}\n\nexport const createRouter: CreateRouterFn = (options) => {\n return new Router(options)\n}\n\nexport class Router<\n in out TRouteTree extends AnyRoute,\n in out TTrailingSlashOption extends TrailingSlashOption = 'never',\n in out TDefaultStructuralSharingOption extends boolean = false,\n in out TRouterHistory extends RouterHistory = RouterHistory,\n in out TDehydrated extends Record<string, any> = Record<string, any>,\n> extends RouterCore<\n TRouteTree,\n TTrailingSlashOption,\n TDefaultStructuralSharingOption,\n TRouterHistory,\n TDehydrated\n> {\n constructor(\n options: RouterConstructorOptions<\n TRouteTree,\n TTrailingSlashOption,\n TDefaultStructuralSharingOption,\n TRouterHistory,\n TDehydrated\n >,\n ) {\n super(options)\n }\n}\n\nif (typeof globalThis !== 'undefined') {\n ;(globalThis as any).createFileRoute = createFileRoute\n ;(globalThis as any).createLazyFileRoute = createLazyFileRoute\n} else if (typeof window !== 'undefined') {\n ;(window as any).createFileRoute = createFileRoute\n ;(window as any).createLazyFileRoute = createLazyFileRoute\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"router.js","names":[],"sources":["../../src/router.ts"],"sourcesContent":["import { RouterCore } from '@tanstack/router-core'\nimport { createFileRoute, createLazyFileRoute } from './fileRoute'\nimport { getStoreFactory } from './routerStores'\nimport type { RouterHistory } from '@tanstack/history'\nimport type {\n AnyRoute,\n CreateRouterFn,\n RouterConstructorOptions,\n TrailingSlashOption,\n} from '@tanstack/router-core'\nimport type {\n ErrorRouteComponent,\n NotFoundRouteComponent,\n RouteComponent,\n} from './route'\nimport type { JSX } from 'solid-js'\n\ndeclare module '@tanstack/router-core' {\n export interface RouterOptionsExtensions {\n /**\n * The default `component` a route should use if no component is provided.\n *\n * @default Outlet\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultcomponent-property)\n */\n defaultComponent?: RouteComponent\n /**\n * The default `errorComponent` a route should use if no error component is provided.\n *\n * @default ErrorComponent\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaulterrorcomponent-property)\n * @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/data-loading#handling-errors-with-routeoptionserrorcomponent)\n */\n defaultErrorComponent?: ErrorRouteComponent\n /**\n * The default `pendingComponent` a route should use if no pending component is provided.\n *\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultpendingcomponent-property)\n * @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/data-loading#showing-a-pending-component)\n */\n defaultPendingComponent?: RouteComponent\n /**\n * The default `notFoundComponent` a route should use if no notFound component is provided.\n *\n * @default NotFound\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#defaultnotfoundcomponent-property)\n * @link [Guide](https://tanstack.com/router/latest/docs/framework/solid/guide/not-found-errors#default-router-wide-not-found-handling)\n */\n defaultNotFoundComponent?: NotFoundRouteComponent\n /**\n * A component that will be used to wrap the entire router.\n *\n * This is useful for providing a context to the entire router.\n *\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#wrap-property)\n */\n Wrap?: (props: { children: any }) => JSX.Element\n /**\n * A component that will be used to wrap the inner contents of the router.\n *\n * This is useful for providing a context to the inner contents of the router where you also need access to the router context and hooks.\n *\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/solid/api/router/RouterOptionsType#innerwrap-property)\n */\n InnerWrap?: (props: { children: any }) => JSX.Element\n\n /**\n * The default `onCatch` handler for errors caught by the Router ErrorBoundary\n *\n * @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RouterOptionsType#defaultoncatch-property)\n * @link [Guide](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#handling-errors-with-routeoptionsoncatch)\n */\n defaultOnCatch?: (error: Error) => void\n }\n}\n\nexport const createRouter: CreateRouterFn = (options) => {\n return new Router(options)\n}\n\nexport class Router<\n in out TRouteTree extends AnyRoute,\n in out TTrailingSlashOption extends TrailingSlashOption = 'never',\n in out TDefaultStructuralSharingOption extends boolean = false,\n in out TRouterHistory extends RouterHistory = RouterHistory,\n in out TDehydrated extends Record<string, any> = Record<string, any>,\n> extends RouterCore<\n TRouteTree,\n TTrailingSlashOption,\n TDefaultStructuralSharingOption,\n TRouterHistory,\n TDehydrated\n> {\n constructor(\n options: RouterConstructorOptions<\n TRouteTree,\n TTrailingSlashOption,\n TDefaultStructuralSharingOption,\n TRouterHistory,\n TDehydrated\n >,\n ) {\n super(options, getStoreFactory)\n }\n}\n\nif (typeof globalThis !== 'undefined') {\n ;(globalThis as any).createFileRoute = createFileRoute\n ;(globalThis as any).createLazyFileRoute = createLazyFileRoute\n} else if (typeof window !== 'undefined') {\n ;(window as any).createFileRoute = createFileRoute\n ;(window as any).createLazyFileRoute = createLazyFileRoute\n}\n"],"mappings":";;;;AA4EA,IAAa,gBAAgC,YAAY;AACvD,QAAO,IAAI,OAAO,QAAQ;;AAG5B,IAAa,SAAb,cAMU,WAMR;CACA,YACE,SAOA;AACA,QAAM,SAAS,gBAAgB;;;AAInC,IAAI,OAAO,eAAe,aAAa;AACnC,YAAmB,kBAAkB;AACrC,YAAmB,sBAAsB;WAClC,OAAO,WAAW,aAAa;AACtC,QAAe,kBAAkB;AACjC,QAAe,sBAAsB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AnyRoute, GetStoreConfig, RouterReadableStore } from '@tanstack/router-core';
|
|
2
|
+
declare module '@tanstack/router-core' {
|
|
3
|
+
interface RouterStores<in out TRouteTree extends AnyRoute> {
|
|
4
|
+
/** Maps each active routeId to the matchId of its child in the match tree. */
|
|
5
|
+
childMatchIdByRouteId: RouterReadableStore<Record<string, string>>;
|
|
6
|
+
/** Maps each pending routeId to true for quick lookup. */
|
|
7
|
+
pendingRouteIds: RouterReadableStore<Record<string, boolean>>;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export declare const getStoreFactory: GetStoreConfig;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { createNonReactiveMutableStore, createNonReactiveReadonlyStore } from "@tanstack/router-core";
|
|
2
|
+
import * as Solid from "solid-js";
|
|
3
|
+
import { isServer } from "@tanstack/router-core/isServer";
|
|
4
|
+
//#region src/routerStores.ts
|
|
5
|
+
function initRouterStores(stores, createReadonlyStore) {
|
|
6
|
+
stores.childMatchIdByRouteId = createReadonlyStore(() => {
|
|
7
|
+
const ids = stores.matchesId.state;
|
|
8
|
+
const obj = {};
|
|
9
|
+
for (let i = 0; i < ids.length - 1; i++) {
|
|
10
|
+
const parentStore = stores.activeMatchStoresById.get(ids[i]);
|
|
11
|
+
if (parentStore?.routeId) obj[parentStore.routeId] = ids[i + 1];
|
|
12
|
+
}
|
|
13
|
+
return obj;
|
|
14
|
+
});
|
|
15
|
+
stores.pendingRouteIds = createReadonlyStore(() => {
|
|
16
|
+
const ids = stores.pendingMatchesId.state;
|
|
17
|
+
const obj = {};
|
|
18
|
+
for (const id of ids) {
|
|
19
|
+
const store = stores.pendingMatchStoresById.get(id);
|
|
20
|
+
if (store?.routeId) obj[store.routeId] = true;
|
|
21
|
+
}
|
|
22
|
+
return obj;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function createSolidMutableStore(initialValue) {
|
|
26
|
+
const [signal, setSignal] = Solid.createSignal(initialValue);
|
|
27
|
+
return {
|
|
28
|
+
get state() {
|
|
29
|
+
return signal();
|
|
30
|
+
},
|
|
31
|
+
setState: setSignal
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
var finalizationRegistry = null;
|
|
35
|
+
if (typeof globalThis !== "undefined" && "FinalizationRegistry" in globalThis) finalizationRegistry = new FinalizationRegistry((cb) => cb());
|
|
36
|
+
function createSolidReadonlyStore(read) {
|
|
37
|
+
let dispose;
|
|
38
|
+
const memo = Solid.createRoot((d) => {
|
|
39
|
+
dispose = d;
|
|
40
|
+
return Solid.createMemo(read);
|
|
41
|
+
});
|
|
42
|
+
const store = { get state() {
|
|
43
|
+
return memo();
|
|
44
|
+
} };
|
|
45
|
+
finalizationRegistry?.register(store, dispose);
|
|
46
|
+
return store;
|
|
47
|
+
}
|
|
48
|
+
var getStoreFactory = (opts) => {
|
|
49
|
+
if (isServer ?? opts.isServer) return {
|
|
50
|
+
createMutableStore: createNonReactiveMutableStore,
|
|
51
|
+
createReadonlyStore: createNonReactiveReadonlyStore,
|
|
52
|
+
batch: (fn) => fn(),
|
|
53
|
+
init: (stores) => initRouterStores(stores, createNonReactiveReadonlyStore)
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
createMutableStore: createSolidMutableStore,
|
|
57
|
+
createReadonlyStore: createSolidReadonlyStore,
|
|
58
|
+
batch: Solid.batch,
|
|
59
|
+
init: (stores) => initRouterStores(stores, createSolidReadonlyStore)
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
//#endregion
|
|
63
|
+
export { getStoreFactory };
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=routerStores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routerStores.js","names":[],"sources":["../../src/routerStores.ts"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n createNonReactiveMutableStore,\n createNonReactiveReadonlyStore,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport type {\n AnyRoute,\n GetStoreConfig,\n RouterReadableStore,\n RouterStores,\n RouterWritableStore,\n} from '@tanstack/router-core'\n\ndeclare module '@tanstack/router-core' {\n export interface RouterStores<in out TRouteTree extends AnyRoute> {\n /** Maps each active routeId to the matchId of its child in the match tree. */\n childMatchIdByRouteId: RouterReadableStore<Record<string, string>>\n /** Maps each pending routeId to true for quick lookup. */\n pendingRouteIds: RouterReadableStore<Record<string, boolean>>\n }\n}\n\nfunction initRouterStores(\n stores: RouterStores<AnyRoute>,\n createReadonlyStore: <TValue>(\n read: () => TValue,\n ) => RouterReadableStore<TValue>,\n) {\n stores.childMatchIdByRouteId = createReadonlyStore(() => {\n const ids = stores.matchesId.state\n const obj: Record<string, string> = {}\n for (let i = 0; i < ids.length - 1; i++) {\n const parentStore = stores.activeMatchStoresById.get(ids[i]!)\n if (parentStore?.routeId) {\n obj[parentStore.routeId] = ids[i + 1]!\n }\n }\n return obj\n })\n\n stores.pendingRouteIds = createReadonlyStore(() => {\n const ids = stores.pendingMatchesId.state\n const obj: Record<string, boolean> = {}\n for (const id of ids) {\n const store = stores.pendingMatchStoresById.get(id)\n if (store?.routeId) {\n obj[store.routeId] = true\n }\n }\n return obj\n })\n}\n\nfunction createSolidMutableStore<TValue>(\n initialValue: TValue,\n): RouterWritableStore<TValue> {\n const [signal, setSignal] = Solid.createSignal(initialValue)\n\n return {\n get state() {\n return signal()\n },\n setState: setSignal,\n }\n}\n\nlet finalizationRegistry: FinalizationRegistry<() => void> | null = null\nif (typeof globalThis !== 'undefined' && 'FinalizationRegistry' in globalThis) {\n finalizationRegistry = new FinalizationRegistry((cb) => cb())\n}\n\nfunction createSolidReadonlyStore<TValue>(\n read: () => TValue,\n): RouterReadableStore<TValue> {\n let dispose!: () => void\n const memo = Solid.createRoot((d) => {\n dispose = d\n return Solid.createMemo(read)\n })\n const store = {\n get state() {\n return memo()\n },\n }\n finalizationRegistry?.register(store, dispose)\n return store\n}\n\nexport const getStoreFactory: GetStoreConfig = (opts) => {\n if (isServer ?? opts.isServer) {\n return {\n createMutableStore: createNonReactiveMutableStore,\n createReadonlyStore: createNonReactiveReadonlyStore,\n batch: (fn) => fn(),\n init: (stores) =>\n initRouterStores(stores, createNonReactiveReadonlyStore),\n }\n }\n\n return {\n createMutableStore: createSolidMutableStore,\n createReadonlyStore: createSolidReadonlyStore,\n batch: Solid.batch,\n init: (stores) => initRouterStores(stores, createSolidReadonlyStore),\n }\n}\n"],"mappings":";;;;AAuBA,SAAS,iBACP,QACA,qBAGA;AACA,QAAO,wBAAwB,0BAA0B;EACvD,MAAM,MAAM,OAAO,UAAU;EAC7B,MAAM,MAA8B,EAAE;AACtC,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,SAAS,GAAG,KAAK;GACvC,MAAM,cAAc,OAAO,sBAAsB,IAAI,IAAI,GAAI;AAC7D,OAAI,aAAa,QACf,KAAI,YAAY,WAAW,IAAI,IAAI;;AAGvC,SAAO;GACP;AAEF,QAAO,kBAAkB,0BAA0B;EACjD,MAAM,MAAM,OAAO,iBAAiB;EACpC,MAAM,MAA+B,EAAE;AACvC,OAAK,MAAM,MAAM,KAAK;GACpB,MAAM,QAAQ,OAAO,uBAAuB,IAAI,GAAG;AACnD,OAAI,OAAO,QACT,KAAI,MAAM,WAAW;;AAGzB,SAAO;GACP;;AAGJ,SAAS,wBACP,cAC6B;CAC7B,MAAM,CAAC,QAAQ,aAAa,MAAM,aAAa,aAAa;AAE5D,QAAO;EACL,IAAI,QAAQ;AACV,UAAO,QAAQ;;EAEjB,UAAU;EACX;;AAGH,IAAI,uBAAgE;AACpE,IAAI,OAAO,eAAe,eAAe,0BAA0B,WACjE,wBAAuB,IAAI,sBAAsB,OAAO,IAAI,CAAC;AAG/D,SAAS,yBACP,MAC6B;CAC7B,IAAI;CACJ,MAAM,OAAO,MAAM,YAAY,MAAM;AACnC,YAAU;AACV,SAAO,MAAM,WAAW,KAAK;GAC7B;CACF,MAAM,QAAQ,EACZ,IAAI,QAAQ;AACV,SAAO,MAAM;IAEhB;AACD,uBAAsB,SAAS,OAAO,QAAQ;AAC9C,QAAO;;AAGT,IAAa,mBAAmC,SAAS;AACvD,KAAI,YAAY,KAAK,SACnB,QAAO;EACL,oBAAoB;EACpB,qBAAqB;EACrB,QAAQ,OAAO,IAAI;EACnB,OAAO,WACL,iBAAiB,QAAQ,+BAA+B;EAC3D;AAGH,QAAO;EACL,oBAAoB;EACpB,qBAAqB;EACrB,OAAO,MAAM;EACb,OAAO,WAAW,iBAAiB,QAAQ,yBAAyB;EACrE"}
|
|
@@ -7,7 +7,7 @@ import { hydrate } from "@tanstack/router-core/ssr/client";
|
|
|
7
7
|
var hydrationPromise;
|
|
8
8
|
var Dummy = (props) => memo(() => props.children);
|
|
9
9
|
function RouterClient(props) {
|
|
10
|
-
if (!hydrationPromise) if (!props.router.state.
|
|
10
|
+
if (!hydrationPromise) if (!props.router.stores.matchesId.state.length) hydrationPromise = hydrate(props.router);
|
|
11
11
|
else hydrationPromise = Promise.resolve();
|
|
12
12
|
return createComponent(Await, {
|
|
13
13
|
promise: hydrationPromise,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouterClient.js","names":["hydrate","Await","HeadContent","RouterProvider","AnyRouter","JSXElement","hydrationPromise","Promise","Array","Dummy","props","children","_$memo","RouterClient","router","
|
|
1
|
+
{"version":3,"file":"RouterClient.js","names":["hydrate","Await","HeadContent","RouterProvider","AnyRouter","JSXElement","hydrationPromise","Promise","Array","Dummy","props","children","_$memo","RouterClient","router","stores","matchesId","state","length","resolve","_$createComponent","promise","InnerWrap"],"sources":["../../../src/ssr/RouterClient.tsx"],"sourcesContent":["import { hydrate } from '@tanstack/router-core/ssr/client'\nimport { Await } from '../awaited'\nimport { HeadContent } from '../HeadContent'\nimport { RouterProvider } from '../RouterProvider'\nimport type { AnyRouter } from '@tanstack/router-core'\nimport type { JSXElement } from 'solid-js'\n\nlet hydrationPromise: Promise<void | Array<Array<void>>> | undefined\n\nconst Dummy = (props: { children?: JSXElement }) => <>{props.children}</>\n\nexport function RouterClient(props: { router: AnyRouter }) {\n if (!hydrationPromise) {\n if (!props.router.stores.matchesId.state.length) {\n hydrationPromise = hydrate(props.router)\n } else {\n hydrationPromise = Promise.resolve()\n }\n }\n return (\n <Await\n promise={hydrationPromise}\n children={() => (\n <Dummy>\n <Dummy>\n <RouterProvider\n router={props.router}\n InnerWrap={(props) => (\n <Dummy>\n <Dummy>\n <HeadContent />\n {props.children}\n </Dummy>\n <Dummy />\n </Dummy>\n )}\n />\n </Dummy>\n </Dummy>\n )}\n />\n )\n}\n"],"mappings":";;;;;;AAOA,IAAIM;AAEJ,IAAMG,SAASC,UAAgCE,WAAQF,MAAMC,SAAY;AAEzE,SAAgBE,aAAaH,OAA8B;AACzD,KAAI,CAACJ,iBACH,KAAI,CAACI,MAAMI,OAAOC,OAAOC,UAAUC,MAAMC,OACvCZ,oBAAmBN,QAAQU,MAAMI,OAAO;KAExCR,oBAAmBC,QAAQY,SAAS;AAGxC,QAAAC,gBACGnB,OAAK;EACJoB,SAASf;EACTK,gBAAUS,gBACPX,OAAK,EAAA,IAAAE,WAAA;AAAA,UAAAS,gBACHX,OAAK,EAAA,IAAAE,WAAA;AAAA,WAAAS,gBACHjB,gBAAc;KAAA,IACbW,SAAM;AAAA,aAAEJ,MAAMI;;KACdQ,YAAYZ,UAAKU,gBACdX,OAAK,EAAA,IAAAE,WAAA;AAAA,aAAA,CAAAS,gBACHX,OAAK,EAAA,IAAAE,WAAA;AAAA,cAAA,CAAAS,gBACHlB,aAAW,EAAA,CAAA,EAAAU,WACXF,MAAMC,SAAQ,CAAA;SAAA,CAAA,EAAAS,gBAEhBX,OAAK,EAAA,CAAA,CAAA;QAAA,CAAA;KAET,CAAA;MAAA,CAAA;KAAA,CAAA;EAIR,CAAA"}
|
|
@@ -18,7 +18,7 @@ var renderRouterToStream = async ({ request, router, responseHeaders, children }
|
|
|
18
18
|
stream.pipeTo(writable);
|
|
19
19
|
const responseStream = transformReadableStreamWithRouter(router, readable);
|
|
20
20
|
return new Response(responseStream, {
|
|
21
|
-
status: router.
|
|
21
|
+
status: router.stores.statusCode.state,
|
|
22
22
|
headers: responseHeaders
|
|
23
23
|
});
|
|
24
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderRouterToStream.js","names":["Solid","isbot","transformReadableStreamWithRouter","makeSsrSerovalPlugin","JSXElement","ReadableStream","AnyRouter","renderRouterToStream","request","router","responseHeaders","children","Request","Headers","writable","readable","TransformStream","docType","ssr","serializationAdapters","options","serovalPlugins","map","adapter","plugin","didRun","stream","renderToStream","_$memo","nonce","plugins","headers","get","pipeTo","responseStream","Response","status","
|
|
1
|
+
{"version":3,"file":"renderRouterToStream.js","names":["Solid","isbot","transformReadableStreamWithRouter","makeSsrSerovalPlugin","JSXElement","ReadableStream","AnyRouter","renderRouterToStream","request","router","responseHeaders","children","Request","Headers","writable","readable","TransformStream","docType","ssr","serializationAdapters","options","serovalPlugins","map","adapter","plugin","didRun","stream","renderToStream","_$memo","nonce","plugins","headers","get","pipeTo","responseStream","Response","status","stores","statusCode","state"],"sources":["../../../src/ssr/renderRouterToStream.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport { isbot } from 'isbot'\nimport { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server'\nimport { makeSsrSerovalPlugin } from '@tanstack/router-core'\nimport type { JSXElement } from 'solid-js'\nimport type { ReadableStream } from 'node:stream/web'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport const renderRouterToStream = async ({\n request,\n router,\n responseHeaders,\n children,\n}: {\n request: Request\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n const { writable, readable } = new TransformStream()\n\n const docType = Solid.ssr('<!DOCTYPE html>')\n\n const serializationAdapters =\n (router.options as any)?.serializationAdapters ||\n (router.options.ssr as any)?.serializationAdapters\n const serovalPlugins = serializationAdapters?.map((adapter: any) => {\n const plugin = makeSsrSerovalPlugin(adapter, { didRun: false })\n return plugin\n })\n\n const stream = Solid.renderToStream(\n () => (\n <>\n {docType}\n {children()}\n </>\n ),\n {\n nonce: router.options.ssr?.nonce,\n plugins: serovalPlugins,\n } as any,\n )\n\n if (isbot(request.headers.get('User-Agent'))) {\n await stream\n }\n stream.pipeTo(writable)\n\n const responseStream = transformReadableStreamWithRouter(\n router,\n readable as unknown as ReadableStream,\n )\n return new Response(responseStream as any, {\n status: router.stores.statusCode.state,\n headers: responseHeaders,\n })\n}\n"],"mappings":";;;;;;AAQA,IAAaO,uBAAuB,OAAO,EACzCC,SACAC,QACAC,iBACAC,eAMI;CACJ,MAAM,EAAEG,UAAUC,aAAa,IAAIC,iBAAiB;CAEpD,MAAMC,UAAUjB,MAAMkB,IAAI,kBAAkB;CAK5C,MAAMG,kBAFHZ,OAAOW,SAAiBD,yBACxBV,OAAOW,QAAQF,KAAaC,wBACeG,KAAKC,YAAiB;AAElE,SADepB,qBAAqBoB,SAAS,EAAEE,QAAQ,OAAO,CAAC;GAE/D;CAEF,MAAMC,SAAS1B,MAAM2B,qBACnB,CAEKV,SAAOW,KACPjB,SAAQ,CAEZ,EACD;EACEkB,OAAOpB,OAAOW,QAAQF,KAAKW;EAC3BC,SAAST;EACV,CACF;AAED,KAAIpB,MAAMO,QAAQuB,QAAQC,IAAI,aAAa,CAAC,CAC1C,OAAMN;AAERA,QAAOO,OAAOnB,SAAS;CAEvB,MAAMoB,iBAAiBhC,kCACrBO,QACAM,SACD;AACD,QAAO,IAAIoB,SAASD,gBAAuB;EACzCE,QAAQ3B,OAAO4B,OAAOC,WAAWC;EACjCR,SAASrB;EACV,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { makeSsrSerovalPlugin } from "@tanstack/router-core";
|
|
2
2
|
import * as Solid from "solid-js/web";
|
|
3
3
|
//#region src/ssr/renderRouterToString.tsx
|
|
4
|
-
var renderRouterToString =
|
|
4
|
+
var renderRouterToString = ({ router, responseHeaders, children }) => {
|
|
5
5
|
try {
|
|
6
6
|
const serovalPlugins = (router.options?.serializationAdapters || router.options.ssr?.serializationAdapters)?.map((adapter) => {
|
|
7
7
|
return makeSsrSerovalPlugin(adapter, { didRun: false });
|
|
@@ -14,7 +14,7 @@ var renderRouterToString = async ({ router, responseHeaders, children }) => {
|
|
|
14
14
|
const injectedHtml = router.serverSsr.takeBufferedHtml();
|
|
15
15
|
if (injectedHtml) html = html.replace(`</body>`, () => `${injectedHtml}</body>`);
|
|
16
16
|
return new Response(`<!DOCTYPE html>${html}`, {
|
|
17
|
-
status: router.
|
|
17
|
+
status: router.stores.statusCode.state,
|
|
18
18
|
headers: responseHeaders
|
|
19
19
|
});
|
|
20
20
|
} catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderRouterToString.js","names":["Solid","makeSsrSerovalPlugin","AnyRouter","JSXElement","renderRouterToString","router","responseHeaders","children","Headers","serializationAdapters","options","ssr","serovalPlugins","map","adapter","plugin","didRun","html","renderToString","nonce","plugins","serverSsr","setRenderFinished","injectedHtml","takeBufferedHtml","replace","Response","status","
|
|
1
|
+
{"version":3,"file":"renderRouterToString.js","names":["Solid","makeSsrSerovalPlugin","AnyRouter","JSXElement","renderRouterToString","router","responseHeaders","children","Headers","serializationAdapters","options","ssr","serovalPlugins","map","adapter","plugin","didRun","html","renderToString","nonce","plugins","serverSsr","setRenderFinished","injectedHtml","takeBufferedHtml","replace","Response","status","stores","statusCode","state","headers","error","console","cleanup"],"sources":["../../../src/ssr/renderRouterToString.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport { makeSsrSerovalPlugin } from '@tanstack/router-core'\nimport type { AnyRouter } from '@tanstack/router-core'\nimport type { JSXElement } from 'solid-js'\n\nexport const renderRouterToString = ({\n router,\n responseHeaders,\n children,\n}: {\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n try {\n const serializationAdapters =\n (router.options as any)?.serializationAdapters ||\n (router.options.ssr as any)?.serializationAdapters\n const serovalPlugins = serializationAdapters?.map((adapter: any) => {\n const plugin = makeSsrSerovalPlugin(adapter, { didRun: false })\n return plugin\n })\n\n let html = Solid.renderToString(children, {\n nonce: router.options.ssr?.nonce,\n plugins: serovalPlugins,\n } as any)\n router.serverSsr!.setRenderFinished()\n\n const injectedHtml = router.serverSsr!.takeBufferedHtml()\n if (injectedHtml) {\n html = html.replace(`</body>`, () => `${injectedHtml}</body>`)\n }\n return new Response(`<!DOCTYPE html>${html}`, {\n status: router.stores.statusCode.state,\n headers: responseHeaders,\n })\n } catch (error) {\n console.error('Render to string error:', error)\n return new Response('Internal Server Error', {\n status: 500,\n headers: responseHeaders,\n })\n } finally {\n router.serverSsr?.cleanup()\n }\n}\n"],"mappings":";;;AAKA,IAAaI,wBAAwB,EACnCC,QACAC,iBACAC,eAKI;AACJ,KAAI;EAIF,MAAMK,kBAFHP,OAAOK,SAAiBD,yBACxBJ,OAAOK,QAAQC,KAAaF,wBACeI,KAAKC,YAAiB;AAElE,UADeb,qBAAqBa,SAAS,EAAEE,QAAQ,OAAO,CAAC;IAE/D;EAEF,IAAIC,OAAOjB,MAAMkB,eAAeX,UAAU;GACxCY,OAAOd,OAAOK,QAAQC,KAAKQ;GAC3BC,SAASR;GACV,CAAQ;AACTP,SAAOgB,UAAWC,mBAAmB;EAErC,MAAMC,eAAelB,OAAOgB,UAAWG,kBAAkB;AACzD,MAAID,aACFN,QAAOA,KAAKQ,QAAQ,iBAAiB,GAAGF,aAAY,SAAU;AAEhE,SAAO,IAAIG,SAAS,kBAAkBT,QAAQ;GAC5CU,QAAQtB,OAAOuB,OAAOC,WAAWC;GACjCC,SAASzB;GACV,CAAC;UACK0B,OAAO;AACdC,UAAQD,MAAM,2BAA2BA,MAAM;AAC/C,SAAO,IAAIN,SAAS,yBAAyB;GAC3CC,QAAQ;GACRI,SAASzB;GACV,CAAC;WACM;AACRD,SAAOgB,WAAWa,SAAS"}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import * as Solid from 'solid-js';
|
|
2
|
+
export declare function useCanGoBack(): Solid.Accessor<boolean>;
|
package/dist/esm/useCanGoBack.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useRouter } from "./useRouter.js";
|
|
2
|
+
import * as Solid from "solid-js";
|
|
2
3
|
//#region src/useCanGoBack.ts
|
|
3
4
|
function useCanGoBack() {
|
|
4
|
-
|
|
5
|
+
const router = useRouter();
|
|
6
|
+
return Solid.createMemo(() => router.stores.location.state.state.__TSR_index !== 0);
|
|
5
7
|
}
|
|
6
8
|
//#endregion
|
|
7
9
|
export { useCanGoBack };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCanGoBack.js","names":[],"sources":["../../src/useCanGoBack.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"useCanGoBack.js","names":[],"sources":["../../src/useCanGoBack.ts"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\n\nexport function useCanGoBack() {\n const router = useRouter()\n return Solid.createMemo(\n () => router.stores.location.state.state.__TSR_index !== 0,\n )\n}\n"],"mappings":";;;AAGA,SAAgB,eAAe;CAC7B,MAAM,SAAS,WAAW;AAC1B,QAAO,MAAM,iBACL,OAAO,OAAO,SAAS,MAAM,MAAM,gBAAgB,EAC1D"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { useMatch } from "./useMatch.js";
|
|
2
2
|
//#region src/useLoaderDeps.tsx
|
|
3
3
|
function useLoaderDeps(opts) {
|
|
4
|
-
const { select, ...rest } = opts;
|
|
5
4
|
return useMatch({
|
|
6
|
-
...
|
|
5
|
+
...opts,
|
|
7
6
|
select: (s) => {
|
|
8
|
-
return select ? select(s.loaderDeps) : s.loaderDeps;
|
|
7
|
+
return opts.select ? opts.select(s.loaderDeps) : s.loaderDeps;
|
|
9
8
|
}
|
|
10
9
|
});
|
|
11
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLoaderDeps.js","names":["useMatch","Accessor","AnyRouter","RegisteredRouter","ResolveUseLoaderDeps","StrictOrFrom","UseLoaderDepsResult","UseLoaderDepsBaseOptions","select","deps","TRouter","TFrom","TSelected","UseLoaderDepsOptions","UseLoaderDepsRoute","opts","TId","useLoaderDeps","
|
|
1
|
+
{"version":3,"file":"useLoaderDeps.js","names":["useMatch","Accessor","AnyRouter","RegisteredRouter","ResolveUseLoaderDeps","StrictOrFrom","UseLoaderDepsResult","UseLoaderDepsBaseOptions","select","deps","TRouter","TFrom","TSelected","UseLoaderDepsOptions","UseLoaderDepsRoute","opts","TId","useLoaderDeps","s","loaderDeps"],"sources":["../../src/useLoaderDeps.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseLoaderDeps,\n StrictOrFrom,\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) => Accessor<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): Accessor<UseLoaderDepsResult<TRouter, TFrom, TSelected>> {\n return useMatch({\n ...opts,\n select: (s) => {\n return opts.select ? opts.select(s.loaderDeps) : s.loaderDeps\n },\n }) as Accessor<UseLoaderDepsResult<TRouter, TFrom, TSelected>>\n}\n"],"mappings":";;AAgCA,SAAgBiB,cAKdF,MAC0D;AAC1D,QAAOf,SAAS;EACd,GAAGe;EACHP,SAASU,MAAM;AACb,UAAOH,KAAKP,SAASO,KAAKP,OAAOU,EAAEC,WAAW,GAAGD,EAAEC;;EAEtD,CAAC"}
|
package/dist/esm/useLocation.js
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useRouter } from "./useRouter.js";
|
|
2
|
+
import { replaceEqualDeep } from "@tanstack/router-core";
|
|
3
|
+
import * as Solid from "solid-js";
|
|
2
4
|
//#region src/useLocation.tsx
|
|
3
5
|
function useLocation(opts) {
|
|
4
|
-
|
|
6
|
+
const router = useRouter();
|
|
7
|
+
if (!opts?.select) return (() => router.stores.location.state);
|
|
8
|
+
const select = opts.select;
|
|
9
|
+
return Solid.createMemo((prev) => {
|
|
10
|
+
const res = select(router.stores.location.state);
|
|
11
|
+
if (prev === void 0) return res;
|
|
12
|
+
return replaceEqualDeep(prev, res);
|
|
13
|
+
});
|
|
5
14
|
}
|
|
6
15
|
//#endregion
|
|
7
16
|
export { useLocation };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocation.js","names":["
|
|
1
|
+
{"version":3,"file":"useLocation.js","names":["Solid","replaceEqualDeep","useRouter","AnyRouter","RegisteredRouter","RouterState","Accessor","UseLocationBaseOptions","select","state","TRouter","TSelected","UseLocationResult","useLocation","opts","router","stores","location","createMemo","prev","res","undefined"],"sources":["../../src/useLocation.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { replaceEqualDeep } from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nexport interface UseLocationBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (state: RouterState<TRouter['routeTree']>['location']) => TSelected\n}\n\nexport type UseLocationResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected\n ? RouterState<TRouter['routeTree']>['location']\n : TSelected\n\nexport function useLocation<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseLocationBaseOptions<TRouter, TSelected>,\n): Accessor<UseLocationResult<TRouter, TSelected>> {\n const router = useRouter<TRouter>()\n\n if (!opts?.select) {\n return (() => router.stores.location.state) as Accessor<\n UseLocationResult<TRouter, TSelected>\n >\n }\n\n const select = opts.select\n\n return Solid.createMemo((prev: TSelected | undefined) => {\n const res = select(router.stores.location.state)\n if (prev === undefined) return res\n return replaceEqualDeep(prev, res)\n }) as Accessor<UseLocationResult<TRouter, TSelected>>\n}\n"],"mappings":";;;;AAqBA,SAAgBa,YAIdC,MACiD;CACjD,MAAMC,SAASb,WAAoB;AAEnC,KAAI,CAACY,MAAMN,OACT,eAAcO,OAAOC,OAAOC,SAASR;CAKvC,MAAMD,SAASM,KAAKN;AAEpB,QAAOR,MAAMkB,YAAYC,SAAgC;EACvD,MAAMC,MAAMZ,OAAOO,OAAOC,OAAOC,SAASR,MAAM;AAChD,MAAIU,SAASE,KAAAA,EAAW,QAAOD;AAC/B,SAAOnB,iBAAiBkB,MAAMC,IAAI;GAClC"}
|
package/dist/esm/useMatch.js
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { useRouter } from "./useRouter.js";
|
|
2
|
+
import { nearestMatchContext } from "./matchContext.js";
|
|
3
|
+
import { replaceEqualDeep } from "@tanstack/router-core";
|
|
3
4
|
import * as Solid from "solid-js";
|
|
4
5
|
import invariant from "tiny-invariant";
|
|
5
6
|
//#region src/useMatch.tsx
|
|
6
7
|
function useMatch(opts) {
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
return {
|
|
15
|
-
match: opts.select ? opts.select(match) : match,
|
|
16
|
-
shouldThrowError: false
|
|
17
|
-
};
|
|
18
|
-
} });
|
|
8
|
+
const router = useRouter();
|
|
9
|
+
const nearestMatch = opts.from ? void 0 : Solid.useContext(nearestMatchContext);
|
|
10
|
+
const match = () => {
|
|
11
|
+
if (opts.from) return router.stores.getMatchStoreByRouteId(opts.from).state;
|
|
12
|
+
return nearestMatch?.match();
|
|
13
|
+
};
|
|
19
14
|
Solid.createEffect(() => {
|
|
20
|
-
if (
|
|
15
|
+
if (match() !== void 0) return;
|
|
16
|
+
invariant(!(!(opts.from ? Boolean(router.stores.pendingRouteIds.state[opts.from]) : nearestMatch?.hasPending() ?? false) && !router.stores.isTransitioning.state && (opts.shouldThrow ?? true)), `Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`);
|
|
17
|
+
});
|
|
18
|
+
return Solid.createMemo((prev) => {
|
|
19
|
+
const selectedMatch = match();
|
|
20
|
+
if (selectedMatch === void 0) return void 0;
|
|
21
|
+
const res = opts.select ? opts.select(selectedMatch) : selectedMatch;
|
|
22
|
+
if (prev === void 0) return res;
|
|
23
|
+
return replaceEqualDeep(prev, res);
|
|
21
24
|
});
|
|
22
|
-
return Solid.createMemo(() => matchState().match);
|
|
23
25
|
}
|
|
24
26
|
//#endregion
|
|
25
27
|
export { useMatch };
|
package/dist/esm/useMatch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMatch.js","names":["Solid","invariant","
|
|
1
|
+
{"version":3,"file":"useMatch.js","names":["Solid","invariant","replaceEqualDeep","nearestMatchContext","useRouter","AnyRouter","MakeRouteMatch","MakeRouteMatchUnion","RegisteredRouter","StrictOrFrom","ThrowConstraint","ThrowOrOptional","UseMatchBaseOptions","select","match","TRouter","TFrom","TStrict","TSelected","shouldThrow","TThrow","UseMatchRoute","opts","Accessor","UseMatchResult","UseMatchOptions","useMatch","router","nearestMatch","from","undefined","useContext","stores","getMatchStoreByRouteId","state","createEffect","hasPendingMatch","Boolean","pendingRouteIds","hasPending","isTransitioning","createMemo","prev","selectedMatch","res"],"sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport { replaceEqualDeep } from '@tanstack/router-core'\nimport { nearestMatchContext } from './matchContext'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n MakeRouteMatch,\n MakeRouteMatchUnion,\n RegisteredRouter,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? TStrict extends true\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : MakeRouteMatchUnion<TRouter>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Solid.Accessor<\n ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n const router = useRouter<TRouter>()\n const nearestMatch = opts.from\n ? undefined\n : Solid.useContext(nearestMatchContext)\n\n const match = () => {\n if (opts.from) {\n return router.stores.getMatchStoreByRouteId(opts.from).state\n }\n\n return nearestMatch?.match()\n }\n\n Solid.createEffect(() => {\n if (match() !== undefined) {\n return\n }\n\n const hasPendingMatch = opts.from\n ? Boolean(router.stores.pendingRouteIds.state[opts.from!])\n : (nearestMatch?.hasPending() ?? false)\n\n invariant(\n !(\n !hasPendingMatch &&\n !router.stores.isTransitioning.state &&\n (opts.shouldThrow ?? true)\n ),\n `Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n })\n\n return Solid.createMemo((prev: TSelected | undefined) => {\n const selectedMatch = match()\n\n if (selectedMatch === undefined) return undefined\n const res = opts.select ? opts.select(selectedMatch as any) : selectedMatch\n if (prev === undefined) return res as TSelected\n return replaceEqualDeep(prev, res) as TSelected\n }) as any\n}\n"],"mappings":";;;;;;AAuDA,SAAgB0B,SAOdJ,MASA;CACA,MAAMK,SAASvB,WAAoB;CACnC,MAAMwB,eAAeN,KAAKO,OACtBC,KAAAA,IACA9B,MAAM+B,WAAW5B,oBAAoB;CAEzC,MAAMW,cAAc;AAClB,MAAIQ,KAAKO,KACP,QAAOF,OAAOK,OAAOC,uBAAuBX,KAAKO,KAAK,CAACK;AAGzD,SAAON,cAAcd,OAAO;;AAG9Bd,OAAMmC,mBAAmB;AACvB,MAAIrB,OAAO,KAAKgB,KAAAA,EACd;AAOF7B,YACE,EACE,EANoBqB,KAAKO,OACzBQ,QAAQV,OAAOK,OAAOM,gBAAgBJ,MAAMZ,KAAKO,MAAO,GACvDD,cAAcW,YAAY,IAAI,UAK/B,CAACZ,OAAOK,OAAOQ,gBAAgBN,UAC9BZ,KAAKH,eAAe,QAEvB,kBAAkBG,KAAKO,OAAO,yBAAyBP,KAAKO,KAAI,KAAM,qBACvE;GACD;AAEF,QAAO7B,MAAMyC,YAAYC,SAAgC;EACvD,MAAMC,gBAAgB7B,OAAO;AAE7B,MAAI6B,kBAAkBb,KAAAA,EAAW,QAAOA,KAAAA;EACxC,MAAMc,MAAMtB,KAAKT,SAASS,KAAKT,OAAO8B,cAAqB,GAAGA;AAC9D,MAAID,SAASZ,KAAAA,EAAW,QAAOc;AAC/B,SAAO1C,iBAAiBwC,MAAME,IAAI;GAClC"}
|
package/dist/esm/useParams.js
CHANGED
|
@@ -3,8 +3,8 @@ import { useMatch } from "./useMatch.js";
|
|
|
3
3
|
function useParams(opts) {
|
|
4
4
|
return useMatch({
|
|
5
5
|
from: opts.from,
|
|
6
|
-
shouldThrow: opts.shouldThrow,
|
|
7
6
|
strict: opts.strict,
|
|
7
|
+
shouldThrow: opts.shouldThrow,
|
|
8
8
|
select: (match) => {
|
|
9
9
|
const params = opts.strict === false ? match.params : match._strictParams;
|
|
10
10
|
return opts.select ? opts.select(params) : params;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useParams.js","names":["useMatch","Accessor","AnyRouter","RegisteredRouter","ResolveUseParams","StrictOrFrom","ThrowConstraint","ThrowOrOptional","UseParamsResult","UseParamsBaseOptions","select","params","TRouter","TFrom","TStrict","TSelected","shouldThrow","TThrow","UseParamsOptions","UseParamsRoute","opts","useParams","from","strict","match","_strictParams"],"sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseParams,\n StrictOrFrom,\n ThrowConstraint,\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
|
|
1
|
+
{"version":3,"file":"useParams.js","names":["useMatch","Accessor","AnyRouter","RegisteredRouter","ResolveUseParams","StrictOrFrom","ThrowConstraint","ThrowOrOptional","UseParamsResult","UseParamsBaseOptions","select","params","TRouter","TFrom","TStrict","TSelected","shouldThrow","TThrow","UseParamsOptions","UseParamsRoute","opts","useParams","from","strict","match","_strictParams"],"sources":["../../src/useParams.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseParams,\n StrictOrFrom,\n ThrowConstraint,\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 const params = opts.strict === false ? match.params : match._strictParams\n return opts.select ? opts.select(params) : params\n },\n }) as Accessor<any>\n}\n"],"mappings":";;AA6CA,SAAgBqB,UAOdD,MASA;AACA,QAAOpB,SAAS;EACdsB,MAAMF,KAAKE;EACXC,QAAQH,KAAKG;EACbP,aAAaI,KAAKJ;EAClBN,SAASc,UAAe;GACtB,MAAMb,SAASS,KAAKG,WAAW,QAAQC,MAAMb,SAASa,MAAMC;AAC5D,UAAOL,KAAKV,SAASU,KAAKV,OAAOC,OAAO,GAAGA;;EAE9C,CAAC"}
|
|
@@ -1,31 +1,23 @@
|
|
|
1
1
|
import { useRouter } from "./useRouter.js";
|
|
2
|
+
import { replaceEqualDeep } from "@tanstack/router-core";
|
|
3
|
+
import * as Solid from "solid-js";
|
|
2
4
|
import { isServer } from "@tanstack/router-core/isServer";
|
|
3
|
-
import { useStore } from "@tanstack/solid-store";
|
|
4
5
|
//#region src/useRouterState.tsx
|
|
5
|
-
function deepEqual(a, b) {
|
|
6
|
-
if (Object.is(a, b)) return true;
|
|
7
|
-
if (typeof a !== "object" || a === null || typeof b !== "object" || b === null) return false;
|
|
8
|
-
const keysA = Object.keys(a);
|
|
9
|
-
const keysB = Object.keys(b);
|
|
10
|
-
if (keysA.length !== keysB.length) return false;
|
|
11
|
-
for (const key of keysA) {
|
|
12
|
-
if (!Object.prototype.hasOwnProperty.call(b, key)) return false;
|
|
13
|
-
if (!deepEqual(a[key], b[key])) return false;
|
|
14
|
-
}
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
6
|
function useRouterState(opts) {
|
|
18
7
|
const contextRouter = useRouter({ warn: opts?.router === void 0 });
|
|
19
8
|
const router = opts?.router || contextRouter;
|
|
20
9
|
if (isServer ?? router.isServer) {
|
|
21
|
-
const state = router.state;
|
|
10
|
+
const state = router.stores.__store.state;
|
|
22
11
|
const selected = opts?.select ? opts.select(state) : state;
|
|
23
12
|
return (() => selected);
|
|
24
13
|
}
|
|
25
|
-
return
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
14
|
+
if (!opts?.select) return (() => router.stores.__store.state);
|
|
15
|
+
const select = opts.select;
|
|
16
|
+
return Solid.createMemo((prev) => {
|
|
17
|
+
const res = select(router.stores.__store.state);
|
|
18
|
+
if (prev === void 0) return res;
|
|
19
|
+
return replaceEqualDeep(prev, res);
|
|
20
|
+
});
|
|
29
21
|
}
|
|
30
22
|
//#endregion
|
|
31
23
|
export { useRouterState };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRouterState.js","names":["
|
|
1
|
+
{"version":3,"file":"useRouterState.js","names":["isServer","Solid","replaceEqualDeep","useRouter","AnyRouter","RegisteredRouter","RouterState","Accessor","UseRouterStateOptions","router","TRouter","select","state","TSelected","UseRouterStateResult","useRouterState","opts","contextRouter","warn","undefined","_isServer","stores","__store","selected","createMemo","prev","res"],"sources":["../../src/useRouterState.tsx"],"sourcesContent":["import { isServer } from '@tanstack/router-core/isServer'\nimport * as Solid from 'solid-js'\nimport { replaceEqualDeep } from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\nexport type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {\n router?: TRouter\n select?: (state: RouterState<TRouter['routeTree']>) => TSelected\n}\n\nexport type UseRouterStateResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouterStateOptions<TRouter, TSelected>,\n): Accessor<UseRouterStateResult<TRouter, TSelected>> {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n const router = opts?.router || contextRouter\n\n // During SSR we render exactly once and do not need reactivity.\n // Avoid subscribing to the store on the server since the server store\n // implementation does not provide subscribe() semantics.\n const _isServer = isServer ?? router.isServer\n if (_isServer) {\n const state = router.stores.__store.state as RouterState<\n TRouter['routeTree']\n >\n const selected = (\n opts?.select ? opts.select(state) : state\n ) as UseRouterStateResult<TRouter, TSelected>\n return (() => selected) as Accessor<\n UseRouterStateResult<TRouter, TSelected>\n >\n }\n\n if (!opts?.select) {\n return (() => router.stores.__store.state) as Accessor<\n UseRouterStateResult<TRouter, TSelected>\n >\n }\n\n const select = opts.select\n\n return Solid.createMemo((prev: TSelected | undefined) => {\n const res = select(router.stores.__store.state)\n if (prev === undefined) return res\n return replaceEqualDeep(prev, res)\n }) as Accessor<UseRouterStateResult<TRouter, TSelected>>\n}\n"],"mappings":";;;;;AAqBA,SAAgBe,eAIdC,MACoD;CACpD,MAAMC,gBAAgBd,UAAmB,EACvCe,MAAMF,MAAMP,WAAWU,KAAAA,GACxB,CAAC;CACF,MAAMV,SAASO,MAAMP,UAAUQ;AAM/B,KADkBjB,YAAYS,OAAOT,UACtB;EACb,MAAMY,QAAQH,OAAOY,OAAOC,QAAQV;EAGpC,MAAMW,WACJP,MAAML,SAASK,KAAKL,OAAOC,MAAM,GAAGA;AAEtC,gBAAcW;;AAKhB,KAAI,CAACP,MAAML,OACT,eAAcF,OAAOY,OAAOC,QAAQV;CAKtC,MAAMD,SAASK,KAAKL;AAEpB,QAAOV,MAAMuB,YAAYC,SAAgC;EACvD,MAAMC,MAAMf,OAAOF,OAAOY,OAAOC,QAAQV,MAAM;AAC/C,MAAIa,SAASN,KAAAA,EAAW,QAAOO;AAC/B,SAAOxB,iBAAiBuB,MAAMC,IAAI;GAClC"}
|
package/dist/esm/useSearch.js
CHANGED
|
@@ -6,7 +6,8 @@ function useSearch(opts) {
|
|
|
6
6
|
strict: opts.strict,
|
|
7
7
|
shouldThrow: opts.shouldThrow,
|
|
8
8
|
select: (match) => {
|
|
9
|
-
|
|
9
|
+
const search = match.search;
|
|
10
|
+
return opts.select ? opts.select(search) : search;
|
|
10
11
|
}
|
|
11
12
|
});
|
|
12
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSearch.js","names":["useMatch","Accessor","AnyRouter","RegisteredRouter","ResolveUseSearch","StrictOrFrom","ThrowConstraint","ThrowOrOptional","UseSearchResult","UseSearchBaseOptions","select","state","TRouter","TFrom","TStrict","TSelected","shouldThrow","TThrow","UseSearchOptions","UseSearchRoute","opts","useSearch","from","strict","match","search"],"sources":["../../src/useSearch.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseSearch,\n StrictOrFrom,\n ThrowConstraint,\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(
|
|
1
|
+
{"version":3,"file":"useSearch.js","names":["useMatch","Accessor","AnyRouter","RegisteredRouter","ResolveUseSearch","StrictOrFrom","ThrowConstraint","ThrowOrOptional","UseSearchResult","UseSearchBaseOptions","select","state","TRouter","TFrom","TStrict","TSelected","shouldThrow","TThrow","UseSearchOptions","UseSearchRoute","opts","useSearch","from","strict","match","search"],"sources":["../../src/useSearch.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseSearch,\n StrictOrFrom,\n ThrowConstraint,\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 const search = match.search\n return opts.select ? opts.select(search) : search\n },\n }) as any\n}\n"],"mappings":";;AA6CA,SAAgBqB,UAOdD,MASA;AACA,QAAOpB,SAAS;EACdsB,MAAMF,KAAKE;EACXC,QAAQH,KAAKG;EACbP,aAAaI,KAAKJ;EAClBN,SAASc,UAAe;GACtB,MAAMC,SAASD,MAAMC;AACrB,UAAOL,KAAKV,SAASU,KAAKV,OAAOe,OAAO,GAAGA;;EAE9C,CAAC"}
|
package/dist/esm/utils.d.ts
CHANGED
package/dist/esm/utils.js
CHANGED
|
@@ -1,18 +1,5 @@
|
|
|
1
1
|
import * as Solid from "solid-js";
|
|
2
2
|
//#region src/utils.ts
|
|
3
|
-
var usePrevious = (fn) => {
|
|
4
|
-
return Solid.createMemo((prev = {
|
|
5
|
-
current: null,
|
|
6
|
-
previous: null
|
|
7
|
-
}) => {
|
|
8
|
-
const current = fn();
|
|
9
|
-
if (prev.current !== current) {
|
|
10
|
-
prev.previous = prev.current;
|
|
11
|
-
prev.current = current;
|
|
12
|
-
}
|
|
13
|
-
return prev;
|
|
14
|
-
});
|
|
15
|
-
};
|
|
16
3
|
/**
|
|
17
4
|
* React hook to wrap `IntersectionObserver`.
|
|
18
5
|
*
|
|
@@ -55,6 +42,6 @@ function useIntersectionObserver(ref, callback, intersectionObserverOptions = {}
|
|
|
55
42
|
return () => observerRef;
|
|
56
43
|
}
|
|
57
44
|
//#endregion
|
|
58
|
-
export { useIntersectionObserver
|
|
45
|
+
export { useIntersectionObserver };
|
|
59
46
|
|
|
60
47
|
//# sourceMappingURL=utils.js.map
|
package/dist/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../src/utils.ts"],"sourcesContent":["import * as Solid from 'solid-js'\n\
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../src/utils.ts"],"sourcesContent":["import * as Solid from 'solid-js'\n\n/**\n * React hook to wrap `IntersectionObserver`.\n *\n * This hook will create an `IntersectionObserver` and observe the ref passed to it.\n *\n * When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.\n *\n * @param ref - The ref to observe\n * @param intersectionObserverOptions - The options to pass to the IntersectionObserver\n * @param options - The options to pass to the hook\n * @param callback - The callback to call when the intersection changes\n * @returns The IntersectionObserver instance\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const ref = React.useRef<HTMLDivElement>(null)\n * useIntersectionObserver(\n * ref,\n * (entry) => { doSomething(entry) },\n * { rootMargin: '10px' },\n * { disabled: false }\n * )\n * return <div ref={ref} />\n * ```\n */\nexport function useIntersectionObserver<T extends Element>(\n ref: Solid.Accessor<T | null>,\n callback: (entry: IntersectionObserverEntry | undefined) => void,\n intersectionObserverOptions: IntersectionObserverInit = {},\n options: { disabled?: boolean } = {},\n): Solid.Accessor<IntersectionObserver | null> {\n const isIntersectionObserverAvailable =\n typeof IntersectionObserver === 'function'\n let observerRef: IntersectionObserver | null = null\n\n Solid.createEffect(() => {\n const r = ref()\n if (!r || !isIntersectionObserverAvailable || options.disabled) {\n return\n }\n\n observerRef = new IntersectionObserver(([entry]) => {\n callback(entry)\n }, intersectionObserverOptions)\n\n observerRef.observe(r)\n\n Solid.onCleanup(() => {\n observerRef?.disconnect()\n })\n })\n\n return () => observerRef\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,wBACd,KACA,UACA,8BAAwD,EAAE,EAC1D,UAAkC,EAAE,EACS;CAC7C,MAAM,kCACJ,OAAO,yBAAyB;CAClC,IAAI,cAA2C;AAE/C,OAAM,mBAAmB;EACvB,MAAM,IAAI,KAAK;AACf,MAAI,CAAC,KAAK,CAAC,mCAAmC,QAAQ,SACpD;AAGF,gBAAc,IAAI,sBAAsB,CAAC,WAAW;AAClD,YAAS,MAAM;KACd,4BAA4B;AAE/B,cAAY,QAAQ,EAAE;AAEtB,QAAM,gBAAgB;AACpB,gBAAa,YAAY;IACzB;GACF;AAEF,cAAa"}
|
package/dist/source/Match.d.ts
CHANGED
|
@@ -2,7 +2,5 @@ import * as Solid from 'solid-js';
|
|
|
2
2
|
export declare const Match: (props: {
|
|
3
3
|
matchId: string;
|
|
4
4
|
}) => Solid.JSX.Element;
|
|
5
|
-
export declare const MatchInner: (
|
|
6
|
-
matchId: string;
|
|
7
|
-
}) => any;
|
|
5
|
+
export declare const MatchInner: () => any;
|
|
8
6
|
export declare const Outlet: () => Solid.JSX.Element;
|