@tanstack/solid-router 1.121.0-alpha.27 → 1.121.0-alpha.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Asset.cjs +65 -21
- package/dist/cjs/Asset.cjs.map +1 -1
- package/dist/cjs/Asset.d.cts +2 -1
- package/dist/cjs/CatchBoundary.cjs +14 -15
- package/dist/cjs/CatchBoundary.cjs.map +1 -1
- package/dist/cjs/ClientOnly.cjs +12 -14
- package/dist/cjs/ClientOnly.cjs.map +1 -1
- package/dist/cjs/ClientOnly.d.cts +0 -20
- package/dist/cjs/HeadContent.cjs +28 -23
- package/dist/cjs/HeadContent.cjs.map +1 -1
- package/dist/cjs/Match.cjs +167 -141
- package/dist/cjs/Match.cjs.map +1 -1
- package/dist/cjs/Matches.cjs +26 -24
- package/dist/cjs/Matches.cjs.map +1 -1
- package/dist/cjs/Matches.d.cts +1 -0
- package/dist/cjs/RouterProvider.cjs +5 -5
- package/dist/cjs/RouterProvider.cjs.map +1 -1
- package/dist/cjs/SafeFragment.cjs +2 -2
- package/dist/cjs/SafeFragment.cjs.map +1 -1
- package/dist/cjs/ScriptOnce.cjs +4 -9
- package/dist/cjs/ScriptOnce.cjs.map +1 -1
- package/dist/cjs/ScriptOnce.d.cts +1 -1
- package/dist/cjs/Scripts.cjs +9 -13
- package/dist/cjs/Scripts.cjs.map +1 -1
- package/dist/cjs/ScrollRestoration.cjs +3 -4
- package/dist/cjs/ScrollRestoration.cjs.map +1 -1
- package/dist/cjs/Transitioner.cjs +9 -8
- package/dist/cjs/Transitioner.cjs.map +1 -1
- package/dist/cjs/awaited.cjs +2 -2
- package/dist/cjs/awaited.cjs.map +1 -1
- package/dist/cjs/fileRoute.cjs +5 -5
- package/dist/cjs/fileRoute.cjs.map +1 -1
- package/dist/cjs/index.cjs +0 -12
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +3 -6
- package/dist/cjs/lazyRouteComponent.cjs +6 -26
- package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
- package/dist/cjs/lazyRouteComponent.d.cts +1 -1
- package/dist/cjs/link.cjs +37 -31
- package/dist/cjs/link.cjs.map +1 -1
- package/dist/cjs/not-found.cjs +5 -7
- package/dist/cjs/not-found.cjs.map +1 -1
- package/dist/cjs/renderRouteNotFound.cjs +4 -4
- package/dist/cjs/renderRouteNotFound.cjs.map +1 -1
- package/dist/cjs/route.cjs +16 -16
- package/dist/cjs/route.cjs.map +1 -1
- package/dist/cjs/route.d.cts +14 -5
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/cjs/routerContext.cjs.map +1 -1
- package/dist/cjs/scroll-restoration.cjs +12 -6
- package/dist/cjs/scroll-restoration.cjs.map +1 -1
- package/dist/cjs/ssr/RouterClient.cjs +45 -0
- package/dist/cjs/ssr/RouterClient.cjs.map +1 -0
- package/dist/cjs/ssr/RouterClient.d.cts +4 -0
- package/dist/cjs/ssr/RouterServer.cjs +56 -0
- package/dist/cjs/ssr/RouterServer.cjs.map +1 -0
- package/dist/cjs/ssr/RouterServer.d.cts +5 -0
- package/dist/cjs/ssr/client.cjs +5 -0
- package/dist/cjs/ssr/client.cjs.map +1 -0
- package/dist/cjs/ssr/client.d.cts +1 -0
- package/dist/cjs/ssr/defaultRenderHandler.cjs +18 -0
- package/dist/cjs/ssr/defaultRenderHandler.cjs.map +1 -0
- package/dist/cjs/ssr/defaultRenderHandler.d.cts +1 -0
- package/dist/cjs/ssr/defaultStreamHandler.cjs +20 -0
- package/dist/cjs/ssr/defaultStreamHandler.cjs.map +1 -0
- package/dist/cjs/ssr/defaultStreamHandler.d.cts +1 -0
- package/dist/cjs/ssr/renderRouterToStream.cjs +45 -0
- package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -0
- package/dist/cjs/ssr/renderRouterToStream.d.cts +8 -0
- package/dist/cjs/ssr/renderRouterToString.cjs +43 -0
- package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -0
- package/dist/cjs/ssr/renderRouterToString.d.cts +7 -0
- package/dist/cjs/ssr/server.cjs +20 -0
- package/dist/cjs/ssr/server.cjs.map +1 -0
- package/dist/cjs/ssr/server.d.cts +6 -0
- package/dist/cjs/useBlocker.cjs +41 -35
- package/dist/cjs/useBlocker.cjs.map +1 -1
- package/dist/cjs/useCanGoBack.cjs.map +1 -1
- package/dist/cjs/useLoaderData.cjs.map +1 -1
- package/dist/cjs/useLoaderDeps.cjs.map +1 -1
- package/dist/cjs/useLocation.cjs +1 -1
- package/dist/cjs/useLocation.cjs.map +1 -1
- package/dist/cjs/useMatch.cjs.map +1 -1
- package/dist/cjs/useNavigate.cjs +9 -3
- package/dist/cjs/useNavigate.cjs.map +1 -1
- package/dist/cjs/useParams.cjs.map +1 -1
- package/dist/cjs/useRouter.cjs +1 -1
- package/dist/cjs/useRouter.cjs.map +1 -1
- package/dist/cjs/useRouterState.cjs +3 -3
- package/dist/cjs/useRouterState.cjs.map +1 -1
- package/dist/cjs/useSearch.cjs.map +1 -1
- package/dist/cjs/utils.cjs +1 -1
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/esm/Asset.d.ts +2 -1
- package/dist/esm/Asset.js +60 -16
- package/dist/esm/Asset.js.map +1 -1
- package/dist/esm/CatchBoundary.js +1 -2
- package/dist/esm/CatchBoundary.js.map +1 -1
- package/dist/esm/ClientOnly.d.ts +0 -20
- package/dist/esm/ClientOnly.js +11 -13
- package/dist/esm/ClientOnly.js.map +1 -1
- package/dist/esm/HeadContent.js +23 -18
- package/dist/esm/HeadContent.js.map +1 -1
- package/dist/esm/Match.js +148 -122
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Matches.d.ts +1 -0
- package/dist/esm/Matches.js +18 -16
- package/dist/esm/Matches.js.map +1 -1
- package/dist/esm/RouterProvider.js.map +1 -1
- package/dist/esm/SafeFragment.js.map +1 -1
- package/dist/esm/ScriptOnce.d.ts +1 -1
- package/dist/esm/ScriptOnce.js +2 -7
- package/dist/esm/ScriptOnce.js.map +1 -1
- package/dist/esm/Scripts.js +7 -11
- package/dist/esm/Scripts.js.map +1 -1
- package/dist/esm/ScrollRestoration.js +3 -4
- package/dist/esm/ScrollRestoration.js.map +1 -1
- package/dist/esm/Transitioner.js +9 -8
- package/dist/esm/Transitioner.js.map +1 -1
- package/dist/esm/awaited.js.map +1 -1
- package/dist/esm/fileRoute.js +5 -5
- package/dist/esm/fileRoute.js.map +1 -1
- package/dist/esm/index.d.ts +3 -6
- package/dist/esm/index.js +2 -8
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lazyRouteComponent.d.ts +1 -1
- package/dist/esm/lazyRouteComponent.js +2 -22
- package/dist/esm/lazyRouteComponent.js.map +1 -1
- package/dist/esm/link.js +34 -28
- package/dist/esm/link.js.map +1 -1
- package/dist/esm/not-found.js +2 -4
- package/dist/esm/not-found.js.map +1 -1
- package/dist/esm/renderRouteNotFound.js.map +1 -1
- package/dist/esm/route.d.ts +14 -5
- package/dist/esm/route.js +12 -12
- package/dist/esm/route.js.map +1 -1
- package/dist/esm/router.js.map +1 -1
- package/dist/esm/routerContext.js.map +1 -1
- package/dist/esm/scroll-restoration.js +10 -4
- package/dist/esm/scroll-restoration.js.map +1 -1
- package/dist/esm/ssr/RouterClient.d.ts +4 -0
- package/dist/esm/ssr/RouterClient.js +45 -0
- package/dist/esm/ssr/RouterClient.js.map +1 -0
- package/dist/esm/ssr/RouterServer.d.ts +5 -0
- package/dist/esm/ssr/RouterServer.js +56 -0
- package/dist/esm/ssr/RouterServer.js.map +1 -0
- package/dist/esm/ssr/client.d.ts +1 -0
- package/dist/esm/ssr/client.js +5 -0
- package/dist/esm/ssr/client.js.map +1 -0
- package/dist/esm/ssr/defaultRenderHandler.d.ts +1 -0
- package/dist/esm/ssr/defaultRenderHandler.js +18 -0
- package/dist/esm/ssr/defaultRenderHandler.js.map +1 -0
- package/dist/esm/ssr/defaultStreamHandler.d.ts +1 -0
- package/dist/esm/ssr/defaultStreamHandler.js +20 -0
- package/dist/esm/ssr/defaultStreamHandler.js.map +1 -0
- package/dist/esm/ssr/renderRouterToStream.d.ts +8 -0
- package/dist/esm/ssr/renderRouterToStream.js +28 -0
- package/dist/esm/ssr/renderRouterToStream.js.map +1 -0
- package/dist/esm/ssr/renderRouterToString.d.ts +7 -0
- package/dist/esm/ssr/renderRouterToString.js +26 -0
- package/dist/esm/ssr/renderRouterToString.js.map +1 -0
- package/dist/esm/ssr/server.d.ts +6 -0
- package/dist/esm/ssr/server.js +14 -0
- package/dist/esm/ssr/server.js.map +1 -0
- package/dist/esm/useBlocker.js +41 -35
- package/dist/esm/useBlocker.js.map +1 -1
- package/dist/esm/useCanGoBack.js.map +1 -1
- package/dist/esm/useLoaderData.js.map +1 -1
- package/dist/esm/useLoaderDeps.js.map +1 -1
- package/dist/esm/useLocation.js +1 -1
- package/dist/esm/useLocation.js.map +1 -1
- package/dist/esm/useMatch.js.map +1 -1
- package/dist/esm/useNavigate.js +9 -3
- package/dist/esm/useNavigate.js.map +1 -1
- package/dist/esm/useParams.js.map +1 -1
- package/dist/esm/useRouter.js +1 -1
- package/dist/esm/useRouter.js.map +1 -1
- package/dist/esm/useRouterState.js +3 -3
- package/dist/esm/useRouterState.js.map +1 -1
- package/dist/esm/useSearch.js.map +1 -1
- package/dist/esm/utils.js +1 -1
- package/dist/esm/utils.js.map +1 -1
- package/dist/source/Asset.d.ts +2 -1
- package/dist/source/Asset.jsx +45 -7
- package/dist/source/Asset.jsx.map +1 -1
- package/dist/source/ClientOnly.d.ts +0 -20
- package/dist/source/ClientOnly.jsx +3 -29
- package/dist/source/ClientOnly.jsx.map +1 -1
- package/dist/source/HeadContent.jsx +13 -0
- package/dist/source/HeadContent.jsx.map +1 -1
- package/dist/source/Match.jsx +74 -61
- package/dist/source/Match.jsx.map +1 -1
- package/dist/source/Matches.d.ts +1 -0
- package/dist/source/Matches.jsx +14 -11
- package/dist/source/Matches.jsx.map +1 -1
- package/dist/source/ScriptOnce.d.ts +1 -1
- package/dist/source/ScriptOnce.jsx +2 -12
- package/dist/source/ScriptOnce.jsx.map +1 -1
- package/dist/source/Transitioner.jsx +8 -8
- package/dist/source/Transitioner.jsx.map +1 -1
- package/dist/source/index.d.ts +3 -6
- package/dist/source/index.jsx +1 -4
- package/dist/source/index.jsx.map +1 -1
- package/dist/source/lazyRouteComponent.d.ts +1 -1
- package/dist/source/lazyRouteComponent.jsx +7 -21
- package/dist/source/lazyRouteComponent.jsx.map +1 -1
- package/dist/source/link.jsx +22 -17
- package/dist/source/link.jsx.map +1 -1
- package/dist/source/not-found.jsx.map +1 -1
- package/dist/source/route.d.ts +14 -5
- package/dist/source/route.jsx.map +1 -1
- package/dist/source/scroll-restoration.jsx +9 -2
- package/dist/source/scroll-restoration.jsx.map +1 -1
- package/dist/source/ssr/RouterClient.d.ts +4 -0
- package/dist/source/ssr/RouterClient.jsx +28 -0
- package/dist/source/ssr/RouterClient.jsx.map +1 -0
- package/dist/source/ssr/RouterServer.d.ts +5 -0
- package/dist/source/ssr/RouterServer.jsx +38 -0
- package/dist/source/ssr/RouterServer.jsx.map +1 -0
- package/dist/source/ssr/client.d.ts +1 -0
- package/dist/source/ssr/client.js +2 -0
- package/dist/source/ssr/client.js.map +1 -0
- package/dist/source/ssr/defaultRenderHandler.d.ts +1 -0
- package/dist/source/ssr/defaultRenderHandler.jsx +9 -0
- package/dist/source/ssr/defaultRenderHandler.jsx.map +1 -0
- package/dist/source/ssr/defaultStreamHandler.d.ts +1 -0
- package/dist/source/ssr/defaultStreamHandler.jsx +10 -0
- package/dist/source/ssr/defaultStreamHandler.jsx.map +1 -0
- package/dist/source/ssr/renderRouterToStream.d.ts +8 -0
- package/dist/source/ssr/renderRouterToStream.jsx +17 -0
- package/dist/source/ssr/renderRouterToStream.jsx.map +1 -0
- package/dist/source/ssr/renderRouterToString.d.ts +7 -0
- package/dist/source/ssr/renderRouterToString.jsx +20 -0
- package/dist/source/ssr/renderRouterToString.jsx.map +1 -0
- package/dist/source/ssr/server.d.ts +6 -0
- package/dist/source/ssr/server.js +7 -0
- package/dist/source/ssr/server.js.map +1 -0
- package/dist/source/useBlocker.jsx +44 -27
- package/dist/source/useBlocker.jsx.map +1 -1
- package/dist/source/useNavigate.jsx +12 -2
- package/dist/source/useNavigate.jsx.map +1 -1
- package/package.json +34 -7
- package/src/Asset.tsx +76 -7
- package/src/ClientOnly.tsx +5 -32
- package/src/HeadContent.tsx +17 -0
- package/src/Match.tsx +103 -81
- package/src/Matches.tsx +28 -19
- package/src/ScriptOnce.tsx +1 -13
- package/src/Transitioner.tsx +7 -7
- package/src/index.tsx +1 -18
- package/src/lazyRouteComponent.tsx +6 -26
- package/src/link.tsx +29 -21
- package/src/not-found.tsx +1 -1
- package/src/route.tsx +16 -5
- package/src/scroll-restoration.tsx +10 -3
- package/src/ssr/RouterClient.tsx +43 -0
- package/src/ssr/RouterServer.tsx +60 -0
- package/src/ssr/client.ts +1 -0
- package/src/ssr/defaultRenderHandler.tsx +12 -0
- package/src/ssr/defaultStreamHandler.tsx +13 -0
- package/src/ssr/renderRouterToStream.tsx +36 -0
- package/src/ssr/renderRouterToString.tsx +31 -0
- package/src/ssr/server.ts +6 -0
- package/src/useBlocker.tsx +48 -32
- package/src/useNavigate.tsx +14 -2
|
@@ -6,15 +6,21 @@ function ScrollRestoration() {
|
|
|
6
6
|
const router = useRouter();
|
|
7
7
|
const getKey = router.options.getScrollRestorationKey || defaultGetScrollRestorationKey;
|
|
8
8
|
const userKey = getKey(router.latestLocation);
|
|
9
|
-
const resolvedKey = userKey !== defaultGetScrollRestorationKey(router.latestLocation) ? userKey :
|
|
9
|
+
const resolvedKey = userKey !== defaultGetScrollRestorationKey(router.latestLocation) ? userKey : void 0;
|
|
10
10
|
if (!router.isScrollRestoring || !router.isServer) {
|
|
11
11
|
return null;
|
|
12
12
|
}
|
|
13
|
+
const restoreScrollOptions = {
|
|
14
|
+
storageKey,
|
|
15
|
+
shouldScrollRestoration: true
|
|
16
|
+
};
|
|
17
|
+
if (resolvedKey) {
|
|
18
|
+
restoreScrollOptions.key = resolvedKey;
|
|
19
|
+
}
|
|
13
20
|
return createComponent(ScriptOnce, {
|
|
14
21
|
get children() {
|
|
15
|
-
return `(${restoreScroll.toString()})(${JSON.stringify(
|
|
16
|
-
}
|
|
17
|
-
log: false
|
|
22
|
+
return `(${restoreScroll.toString()})(${JSON.stringify(restoreScrollOptions)})`;
|
|
23
|
+
}
|
|
18
24
|
});
|
|
19
25
|
}
|
|
20
26
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-restoration.js","sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import {\n defaultGetScrollRestorationKey,\n restoreScroll,\n storageKey,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { ScriptOnce } from './ScriptOnce'\n\nexport function ScrollRestoration() {\n const router = useRouter()\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n const userKey = getKey(router.latestLocation)\n const resolvedKey =\n userKey !== defaultGetScrollRestorationKey(router.latestLocation)\n ? userKey\n :
|
|
1
|
+
{"version":3,"file":"scroll-restoration.js","sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import {\n defaultGetScrollRestorationKey,\n restoreScroll,\n storageKey,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { ScriptOnce } from './ScriptOnce'\n\nexport function ScrollRestoration() {\n const router = useRouter()\n const getKey =\n router.options.getScrollRestorationKey || defaultGetScrollRestorationKey\n const userKey = getKey(router.latestLocation)\n const resolvedKey =\n userKey !== defaultGetScrollRestorationKey(router.latestLocation)\n ? userKey\n : undefined\n\n if (!router.isScrollRestoring || !router.isServer) {\n return null\n }\n\n const restoreScrollOptions: Parameters<typeof restoreScroll>[0] = {\n storageKey,\n shouldScrollRestoration: true,\n }\n if (resolvedKey) {\n restoreScrollOptions.key = resolvedKey\n }\n\n return (\n <ScriptOnce\n children={`(${restoreScroll.toString()})(${JSON.stringify(restoreScrollOptions)})`}\n />\n )\n}\n"],"names":["ScrollRestoration","router","useRouter","getKey","options","getScrollRestorationKey","defaultGetScrollRestorationKey","userKey","latestLocation","resolvedKey","undefined","isScrollRestoring","isServer","restoreScrollOptions","storageKey","shouldScrollRestoration","key","_$createComponent","ScriptOnce","children","restoreScroll","toString","JSON","stringify"],"mappings":";;;;AAQO,SAASA,oBAAoB;AAClC,QAAMC,SAASC,UAAAA;AACf,QAAMC,SACJF,OAAOG,QAAQC,2BAA2BC;AAC5C,QAAMC,UAAUJ,OAAOF,OAAOO,cAAc;AAC5C,QAAMC,cACJF,YAAYD,+BAA+BL,OAAOO,cAAc,IAC5DD,UACAG;AAEN,MAAI,CAACT,OAAOU,qBAAqB,CAACV,OAAOW,UAAU;AACjD,WAAO;AAAA,EACT;AAEA,QAAMC,uBAA4D;AAAA,IAChEC;AAAAA,IACAC,yBAAyB;AAAA,EAAA;AAE3B,MAAIN,aAAa;AACfI,yBAAqBG,MAAMP;AAAAA,EAC7B;AAEA,SAAAQ,gBACGC,YAAU;AAAA,IAAA,IACTC,WAAQ;AAAA,aAAE,IAAIC,cAAcC,SAAAA,CAAU,KAAKC,KAAKC,UAAUV,oBAAoB,CAAC;AAAA,IAAG;AAAA,EAAA,CAAA;AAGxF;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { createComponent, memo } from "solid-js/web";
|
|
2
|
+
import { hydrate } from "@tanstack/router-core/ssr/client";
|
|
3
|
+
import { Await } from "../awaited.js";
|
|
4
|
+
import { HeadContent } from "../HeadContent.js";
|
|
5
|
+
import { RouterProvider } from "../RouterProvider.js";
|
|
6
|
+
let hydrationPromise;
|
|
7
|
+
const Dummy = (props) => memo(() => props.children);
|
|
8
|
+
function RouterClient(props) {
|
|
9
|
+
if (!hydrationPromise) {
|
|
10
|
+
if (!props.router.state.matches.length) {
|
|
11
|
+
hydrationPromise = hydrate(props.router);
|
|
12
|
+
} else {
|
|
13
|
+
hydrationPromise = Promise.resolve();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return createComponent(Await, {
|
|
17
|
+
promise: hydrationPromise,
|
|
18
|
+
children: () => createComponent(Dummy, {
|
|
19
|
+
get children() {
|
|
20
|
+
return createComponent(Dummy, {
|
|
21
|
+
get children() {
|
|
22
|
+
return createComponent(RouterProvider, {
|
|
23
|
+
get router() {
|
|
24
|
+
return props.router;
|
|
25
|
+
},
|
|
26
|
+
InnerWrap: (props2) => createComponent(Dummy, {
|
|
27
|
+
get children() {
|
|
28
|
+
return [createComponent(Dummy, {
|
|
29
|
+
get children() {
|
|
30
|
+
return [createComponent(HeadContent, {}), memo(() => props2.children)];
|
|
31
|
+
}
|
|
32
|
+
}), createComponent(Dummy, {})];
|
|
33
|
+
}
|
|
34
|
+
})
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
})
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
RouterClient
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=RouterClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouterClient.js","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.state.matches.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"],"names":["hydrationPromise","Dummy","props","_$memo","children","RouterClient","router","state","matches","length","hydrate","Promise","resolve","_$createComponent","Await","promise","RouterProvider","InnerWrap","HeadContent"],"mappings":";;;;;AAOA,IAAIA;AAEJ,MAAMC,QAAQA,CAACC,UAAgCC,KAAA,MAAQD,MAAME,QAAQ;AAE9D,SAASC,aAAaH,OAA8B;AACzD,MAAI,CAACF,kBAAkB;AACrB,QAAI,CAACE,MAAMI,OAAOC,MAAMC,QAAQC,QAAQ;AACtCT,yBAAmBU,QAAQR,MAAMI,MAAM;AAAA,IACzC,OAAO;AACLN,yBAAmBW,QAAQC,QAAAA;AAAAA,IAC7B;AAAA,EACF;AACA,SAAAC,gBACGC,OAAK;AAAA,IACJC,SAASf;AAAAA,IACTI,UAAUA,MAAAS,gBACPZ,OAAK;AAAA,MAAA,IAAAG,WAAA;AAAA,eAAAS,gBACHZ,OAAK;AAAA,UAAA,IAAAG,WAAA;AAAA,mBAAAS,gBACHG,gBAAc;AAAA,cAAA,IACbV,SAAM;AAAA,uBAAEJ,MAAMI;AAAAA,cAAM;AAAA,cACpBW,WAAYf,CAAAA,WAAKW,gBACdZ,OAAK;AAAA,gBAAA,IAAAG,WAAA;AAAA,yBAAA,CAAAS,gBACHZ,OAAK;AAAA,oBAAA,IAAAG,WAAA;AAAA,6BAAA,CAAAS,gBACHK,aAAW,CAAA,CAAA,GAAAf,KAAA,MACXD,OAAME,QAAQ,CAAA;AAAA,oBAAA;AAAA,kBAAA,CAAA,GAAAS,gBAEhBZ,OAAK,CAAA,CAAA,CAAA;AAAA,gBAAA;AAAA,cAAA,CAAA;AAAA,YAAA,CAET;AAAA,UAAA;AAAA,QAAA,CAAA;AAAA,MAAA;AAAA,IAAA,CAAA;AAAA,EAAA,CAIR;AAGP;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { createComponent, NoHydration, ssr, template, insert, Hydration, useAssets } from "solid-js/web";
|
|
2
|
+
import { MetaProvider } from "@solidjs/meta";
|
|
3
|
+
import { Asset } from "../Asset.js";
|
|
4
|
+
import { useTags } from "../HeadContent.js";
|
|
5
|
+
import { RouterProvider } from "../RouterProvider.js";
|
|
6
|
+
import { Scripts } from "../Scripts.js";
|
|
7
|
+
var _tmpl$ = /* @__PURE__ */ template(`<html><head></head><body>`);
|
|
8
|
+
function ServerHeadContent() {
|
|
9
|
+
const tags = useTags();
|
|
10
|
+
useAssets(() => {
|
|
11
|
+
return createComponent(MetaProvider, {
|
|
12
|
+
get children() {
|
|
13
|
+
return tags().map((tag) => createComponent(Asset, tag));
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const docType = ssr("<!DOCTYPE html>");
|
|
20
|
+
function RouterServer(props) {
|
|
21
|
+
return createComponent(NoHydration, {
|
|
22
|
+
get children() {
|
|
23
|
+
return [docType, (() => {
|
|
24
|
+
var _el$ = _tmpl$(), _el$3 = _el$.firstChild;
|
|
25
|
+
insert(_el$3, createComponent(Hydration, {
|
|
26
|
+
get children() {
|
|
27
|
+
return createComponent(RouterProvider, {
|
|
28
|
+
get router() {
|
|
29
|
+
return props.router;
|
|
30
|
+
},
|
|
31
|
+
InnerWrap: (props2) => createComponent(NoHydration, {
|
|
32
|
+
get children() {
|
|
33
|
+
return createComponent(MetaProvider, {
|
|
34
|
+
get children() {
|
|
35
|
+
return [createComponent(ServerHeadContent, {}), createComponent(Hydration, {
|
|
36
|
+
get children() {
|
|
37
|
+
return props2.children;
|
|
38
|
+
}
|
|
39
|
+
}), createComponent(Scripts, {})];
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}));
|
|
47
|
+
return _el$;
|
|
48
|
+
})()];
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
export {
|
|
53
|
+
RouterServer,
|
|
54
|
+
ServerHeadContent
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=RouterServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouterServer.js","sources":["../../../src/ssr/RouterServer.tsx"],"sourcesContent":["import {\n Hydration,\n HydrationScript,\n NoHydration,\n ssr,\n useAssets,\n} from 'solid-js/web'\nimport { MetaProvider } from '@solidjs/meta'\nimport { Asset } from '../Asset'\nimport { useTags } from '../HeadContent'\nimport { RouterProvider } from '../RouterProvider'\nimport { Scripts } from '../Scripts'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport function ServerHeadContent() {\n const tags = useTags()\n useAssets(() => {\n return (\n <MetaProvider>\n {tags().map((tag) => (\n <Asset {...tag} />\n ))}\n </MetaProvider>\n )\n })\n return null\n}\n\nconst docType = ssr('<!DOCTYPE html>')\n\nexport function RouterServer<TRouter extends AnyRouter>(props: {\n router: TRouter\n}) {\n return (\n <NoHydration>\n {docType as any}\n <html>\n <head>\n <HydrationScript />\n </head>\n <body>\n <Hydration>\n <RouterProvider\n router={props.router}\n InnerWrap={(props) => (\n <NoHydration>\n <MetaProvider>\n <ServerHeadContent />\n <Hydration>{props.children}</Hydration>\n <Scripts />\n </MetaProvider>\n </NoHydration>\n )}\n />\n </Hydration>\n </body>\n </html>\n </NoHydration>\n )\n}\n"],"names":["ServerHeadContent","tags","useTags","useAssets","_$createComponent","MetaProvider","children","map","tag","Asset","docType","ssr","RouterServer","props","NoHydration","_el$","_tmpl$","_el$3","firstChild","_$insert","Hydration","RouterProvider","router","InnerWrap","Scripts"],"mappings":";;;;;;;AAcO,SAASA,oBAAoB;AAClC,QAAMC,OAAOC,QAAAA;AACbC,YAAU,MAAM;AACd,WAAAC,gBACGC,cAAY;AAAA,MAAA,IAAAC,WAAA;AAAA,eACVL,OAAOM,IAAKC,SAAGJ,gBACbK,OAAUD,GAAG,CACf;AAAA,MAAC;AAAA,IAAA,CAAA;AAAA,EAGR,CAAC;AACD,SAAO;AACT;AAEA,MAAME,UAAUC,IAAI,iBAAiB;AAE9B,SAASC,aAAwCC,OAErD;AACD,SAAAT,gBACGU,aAAW;AAAA,IAAA,IAAAR,WAAA;AAAA,aAAA,CACTI,UAAc,MAAA;AAAA,YAAAK,OAAAC,OAAAA,GAAAC,QAAAF,KAAAG;AAAAC,eAAAF,OAAAb,gBAMVgB,WAAS;AAAA,UAAA,IAAAd,WAAA;AAAA,mBAAAF,gBACPiB,gBAAc;AAAA,cAAA,IACbC,SAAM;AAAA,uBAAET,MAAMS;AAAAA,cAAM;AAAA,cACpBC,WAAYV,CAAAA,WAAKT,gBACdU,aAAW;AAAA,gBAAA,IAAAR,WAAA;AAAA,yBAAAF,gBACTC,cAAY;AAAA,oBAAA,IAAAC,WAAA;AAAA,6BAAA,CAAAF,gBACVJ,mBAAiB,CAAA,CAAA,GAAAI,gBACjBgB,WAAS;AAAA,wBAAA,IAAAd,WAAA;AAAA,iCAAEO,OAAMP;AAAAA,wBAAQ;AAAA,sBAAA,CAAA,GAAAF,gBACzBoB,SAAO,CAAA,CAAA,CAAA;AAAA,oBAAA;AAAA,kBAAA,CAAA;AAAA,gBAAA;AAAA,cAAA,CAAA;AAAA,YAAA,CAGb;AAAA,UAAA;AAAA,QAAA,CAAA,CAAA;AAAA,eAAAT;AAAAA,MAAA,IAAA;AAAA,IAAA;AAAA,EAAA,CAAA;AAOf;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { RouterClient } from './RouterClient.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const defaultRenderHandler: import('@tanstack/router-core/ssr/server').HandlerCallback<import('@tanstack/router-core').AnyRouter>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createComponent } from "solid-js/web";
|
|
2
|
+
import { defineHandlerCallback } from "@tanstack/router-core/ssr/server";
|
|
3
|
+
import { RouterServer } from "./RouterServer.js";
|
|
4
|
+
import { renderRouterToString } from "./renderRouterToString.js";
|
|
5
|
+
const defaultRenderHandler = defineHandlerCallback(({
|
|
6
|
+
router,
|
|
7
|
+
responseHeaders
|
|
8
|
+
}) => renderRouterToString({
|
|
9
|
+
router,
|
|
10
|
+
responseHeaders,
|
|
11
|
+
children: () => createComponent(RouterServer, {
|
|
12
|
+
router
|
|
13
|
+
})
|
|
14
|
+
}));
|
|
15
|
+
export {
|
|
16
|
+
defaultRenderHandler
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=defaultRenderHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultRenderHandler.js","sources":["../../../src/ssr/defaultRenderHandler.tsx"],"sourcesContent":["import { defineHandlerCallback } from '@tanstack/router-core/ssr/server'\nimport { RouterServer } from './RouterServer'\nimport { renderRouterToString } from './renderRouterToString'\n\nexport const defaultRenderHandler = defineHandlerCallback(\n ({ router, responseHeaders }) =>\n renderRouterToString({\n router,\n responseHeaders,\n children: () => <RouterServer router={router} />,\n }),\n)\n"],"names":["defaultRenderHandler","defineHandlerCallback","router","responseHeaders","renderRouterToString","children","_$createComponent","RouterServer"],"mappings":";;;;AAIO,MAAMA,uBAAuBC,sBAClC,CAAC;AAAA,EAAEC;AAAAA,EAAQC;AAAgB,MACzBC,qBAAqB;AAAA,EACnBF;AAAAA,EACAC;AAAAA,EACAE,UAAUA,MAAAC,gBAAOC,cAAY;AAAA,IAACL;AAAAA,EAAAA,CAAc;AAC9C,CAAC,CACL;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const defaultStreamHandler: import('@tanstack/router-core/ssr/server').HandlerCallback<import('@tanstack/router-core').AnyRouter>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createComponent } from "solid-js/web";
|
|
2
|
+
import { defineHandlerCallback } from "@tanstack/router-core/ssr/server";
|
|
3
|
+
import { RouterServer } from "./RouterServer.js";
|
|
4
|
+
import { renderRouterToStream } from "./renderRouterToStream.js";
|
|
5
|
+
const defaultStreamHandler = defineHandlerCallback(({
|
|
6
|
+
request,
|
|
7
|
+
router,
|
|
8
|
+
responseHeaders
|
|
9
|
+
}) => renderRouterToStream({
|
|
10
|
+
request,
|
|
11
|
+
router,
|
|
12
|
+
responseHeaders,
|
|
13
|
+
children: () => createComponent(RouterServer, {
|
|
14
|
+
router
|
|
15
|
+
})
|
|
16
|
+
}));
|
|
17
|
+
export {
|
|
18
|
+
defaultStreamHandler
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=defaultStreamHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultStreamHandler.js","sources":["../../../src/ssr/defaultStreamHandler.tsx"],"sourcesContent":["import { defineHandlerCallback } from '@tanstack/router-core/ssr/server'\nimport { RouterServer } from './RouterServer'\nimport { renderRouterToStream } from './renderRouterToStream'\n\nexport const defaultStreamHandler = defineHandlerCallback(\n ({ request, router, responseHeaders }) =>\n renderRouterToStream({\n request,\n router,\n responseHeaders,\n children: () => <RouterServer router={router} />,\n }),\n)\n"],"names":["defaultStreamHandler","defineHandlerCallback","request","router","responseHeaders","renderRouterToStream","children","_$createComponent","RouterServer"],"mappings":";;;;AAIO,MAAMA,uBAAuBC,sBAClC,CAAC;AAAA,EAAEC;AAAAA,EAASC;AAAAA,EAAQC;AAAgB,MAClCC,qBAAqB;AAAA,EACnBH;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAE,UAAUA,MAAAC,gBAAOC,cAAY;AAAA,IAACL;AAAAA,EAAAA,CAAc;AAC9C,CAAC,CACL;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JSXElement } from 'solid-js';
|
|
2
|
+
import { AnyRouter } from '@tanstack/router-core';
|
|
3
|
+
export declare const renderRouterToStream: ({ request, router, responseHeaders, children, }: {
|
|
4
|
+
request: Request;
|
|
5
|
+
router: AnyRouter;
|
|
6
|
+
responseHeaders: Headers;
|
|
7
|
+
children: () => JSXElement;
|
|
8
|
+
}) => Promise<Response>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as Solid from "solid-js/web";
|
|
2
|
+
import { isbot } from "isbot";
|
|
3
|
+
import { transformReadableStreamWithRouter } from "@tanstack/router-core/ssr/server";
|
|
4
|
+
const renderRouterToStream = async ({
|
|
5
|
+
request,
|
|
6
|
+
router,
|
|
7
|
+
responseHeaders,
|
|
8
|
+
children
|
|
9
|
+
}) => {
|
|
10
|
+
const {
|
|
11
|
+
writable,
|
|
12
|
+
readable
|
|
13
|
+
} = new TransformStream();
|
|
14
|
+
const stream = Solid.renderToStream(children);
|
|
15
|
+
if (isbot(request.headers.get("User-Agent"))) {
|
|
16
|
+
await stream;
|
|
17
|
+
}
|
|
18
|
+
stream.pipeTo(writable);
|
|
19
|
+
const responseStream = transformReadableStreamWithRouter(router, readable);
|
|
20
|
+
return new Response(responseStream, {
|
|
21
|
+
status: router.state.statusCode,
|
|
22
|
+
headers: responseHeaders
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
export {
|
|
26
|
+
renderRouterToStream
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=renderRouterToStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderRouterToStream.js","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 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 stream = Solid.renderToStream(children)\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.state.statusCode,\n headers: responseHeaders,\n })\n}\n"],"names":["renderRouterToStream","request","router","responseHeaders","children","writable","readable","TransformStream","stream","Solid","renderToStream","isbot","headers","get","pipeTo","responseStream","transformReadableStreamWithRouter","Response","status","state","statusCode"],"mappings":";;;AAOO,MAAMA,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAMF,MAAM;AACJ,QAAM;AAAA,IAAEC;AAAAA,IAAUC;AAAAA,EAAAA,IAAa,IAAIC,gBAAAA;AAEnC,QAAMC,SAASC,MAAMC,eAAeN,QAAQ;AAE5C,MAAIO,MAAMV,QAAQW,QAAQC,IAAI,YAAY,CAAC,GAAG;AAC5C,UAAML;AAAAA,EACR;AACAA,SAAOM,OAAOT,QAAQ;AAEtB,QAAMU,iBAAiBC,kCACrBd,QACAI,QACF;AACA,SAAO,IAAIW,SAASF,gBAAuB;AAAA,IACzCG,QAAQhB,OAAOiB,MAAMC;AAAAA,IACrBR,SAAST;AAAAA,EAAAA,CACV;AACH;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { JSXElement } from 'solid-js';
|
|
2
|
+
import { AnyRouter } from '@tanstack/router-core';
|
|
3
|
+
export declare const renderRouterToString: ({ router, responseHeaders, children, }: {
|
|
4
|
+
router: AnyRouter;
|
|
5
|
+
responseHeaders: Headers;
|
|
6
|
+
children: () => JSXElement;
|
|
7
|
+
}) => Promise<Response>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as Solid from "solid-js/web";
|
|
2
|
+
const renderRouterToString = async ({
|
|
3
|
+
router,
|
|
4
|
+
responseHeaders,
|
|
5
|
+
children
|
|
6
|
+
}) => {
|
|
7
|
+
try {
|
|
8
|
+
let html = Solid.renderToString(children);
|
|
9
|
+
const injectedHtml = await Promise.all(router.serverSsr.injectedHtml).then((htmls) => htmls.join(""));
|
|
10
|
+
html = html.replace(`</body>`, `${injectedHtml}</body>`);
|
|
11
|
+
return new Response(html, {
|
|
12
|
+
status: router.state.statusCode,
|
|
13
|
+
headers: responseHeaders
|
|
14
|
+
});
|
|
15
|
+
} catch (error) {
|
|
16
|
+
console.error("Render to string error:", error);
|
|
17
|
+
return new Response("Internal Server Error", {
|
|
18
|
+
status: 500,
|
|
19
|
+
headers: responseHeaders
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
export {
|
|
24
|
+
renderRouterToString
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=renderRouterToString.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderRouterToString.js","sources":["../../../src/ssr/renderRouterToString.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport type { JSXElement } from 'solid-js'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport const renderRouterToString = async ({\n router,\n responseHeaders,\n children,\n}: {\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n try {\n let html = Solid.renderToString(children)\n const injectedHtml = await Promise.all(router.serverSsr!.injectedHtml).then(\n (htmls) => htmls.join(''),\n )\n html = html.replace(`</body>`, `${injectedHtml}</body>`)\n return new Response(html, {\n status: router.state.statusCode,\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 }\n}\n"],"names":["renderRouterToString","router","responseHeaders","children","html","Solid","renderToString","injectedHtml","Promise","all","serverSsr","then","htmls","join","replace","Response","status","state","statusCode","headers","error","console"],"mappings":";AAIO,MAAMA,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAKF,MAAM;AACJ,MAAI;AACF,QAAIC,OAAOC,MAAMC,eAAeH,QAAQ;AACxC,UAAMI,eAAe,MAAMC,QAAQC,IAAIR,OAAOS,UAAWH,YAAY,EAAEI,KACpEC,CAAAA,UAAUA,MAAMC,KAAK,EAAE,CAC1B;AACAT,WAAOA,KAAKU,QAAQ,WAAW,GAAGP,YAAY,SAAS;AACvD,WAAO,IAAIQ,SAASX,MAAM;AAAA,MACxBY,QAAQf,OAAOgB,MAAMC;AAAAA,MACrBC,SAASjB;AAAAA,IAAAA,CACV;AAAA,EACH,SAASkB,OAAO;AACdC,YAAQD,MAAM,2BAA2BA,KAAK;AAC9C,WAAO,IAAIL,SAAS,yBAAyB;AAAA,MAC3CC,QAAQ;AAAA,MACRG,SAASjB;AAAAA,IAAAA,CACV;AAAA,EACH;AACF;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { RouterServer } from './RouterServer.js';
|
|
2
|
+
export { defaultRenderHandler } from './defaultRenderHandler.js';
|
|
3
|
+
export { defaultStreamHandler } from './defaultStreamHandler.js';
|
|
4
|
+
export { renderRouterToStream } from './renderRouterToStream.js';
|
|
5
|
+
export { renderRouterToString } from './renderRouterToString.js';
|
|
6
|
+
export * from '@tanstack/router-core/ssr/server';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RouterServer } from "./RouterServer.js";
|
|
2
|
+
import { defaultRenderHandler } from "./defaultRenderHandler.js";
|
|
3
|
+
import { defaultStreamHandler } from "./defaultStreamHandler.js";
|
|
4
|
+
import { renderRouterToStream } from "./renderRouterToStream.js";
|
|
5
|
+
import { renderRouterToString } from "./renderRouterToString.js";
|
|
6
|
+
export * from "@tanstack/router-core/ssr/server";
|
|
7
|
+
export {
|
|
8
|
+
RouterServer,
|
|
9
|
+
defaultRenderHandler,
|
|
10
|
+
defaultStreamHandler,
|
|
11
|
+
renderRouterToStream,
|
|
12
|
+
renderRouterToString
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
package/dist/esm/useBlocker.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { memo } from "solid-js/web";
|
|
1
2
|
import * as Solid from "solid-js";
|
|
2
3
|
import { useRouter } from "./useRouter.js";
|
|
3
4
|
function _resolveBlockerOpts(opts, condition) {
|
|
@@ -22,31 +23,32 @@ function _resolveBlockerOpts(opts, condition) {
|
|
|
22
23
|
withResolver: false
|
|
23
24
|
};
|
|
24
25
|
}
|
|
25
|
-
const shouldBlock = Boolean(opts.condition ?? true);
|
|
26
|
-
const fn = opts.blockerFn;
|
|
26
|
+
const shouldBlock = Solid.createMemo(() => Boolean(opts.condition ?? true));
|
|
27
27
|
const _customBlockerFn = async () => {
|
|
28
|
-
if (shouldBlock &&
|
|
29
|
-
return await
|
|
28
|
+
if (shouldBlock() && opts.blockerFn !== void 0) {
|
|
29
|
+
return await opts.blockerFn();
|
|
30
30
|
}
|
|
31
|
-
return shouldBlock;
|
|
31
|
+
return shouldBlock();
|
|
32
32
|
};
|
|
33
33
|
return {
|
|
34
|
-
shouldBlockFn
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
get shouldBlockFn() {
|
|
35
|
+
return _customBlockerFn;
|
|
36
|
+
},
|
|
37
|
+
get enableBeforeUnload() {
|
|
38
|
+
return shouldBlock();
|
|
39
|
+
},
|
|
40
|
+
get withResolver() {
|
|
41
|
+
return opts.blockerFn === void 0;
|
|
42
|
+
}
|
|
37
43
|
};
|
|
38
44
|
}
|
|
39
45
|
function useBlocker(opts, condition) {
|
|
40
|
-
const {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
} = _resolveBlockerOpts(opts, condition);
|
|
46
|
+
const props = Solid.mergeProps({
|
|
47
|
+
enableBeforeUnload: true,
|
|
48
|
+
disabled: false,
|
|
49
|
+
withResolver: false
|
|
50
|
+
}, _resolveBlockerOpts(opts, condition));
|
|
46
51
|
const router = useRouter();
|
|
47
|
-
const {
|
|
48
|
-
history
|
|
49
|
-
} = router;
|
|
50
52
|
const [resolver, setResolver] = Solid.createSignal({
|
|
51
53
|
status: "idle",
|
|
52
54
|
current: void 0,
|
|
@@ -73,12 +75,12 @@ function useBlocker(opts, condition) {
|
|
|
73
75
|
}
|
|
74
76
|
const current = getLocation(blockerFnArgs.currentLocation);
|
|
75
77
|
const next = getLocation(blockerFnArgs.nextLocation);
|
|
76
|
-
const shouldBlock = await shouldBlockFn({
|
|
78
|
+
const shouldBlock = await props.shouldBlockFn({
|
|
77
79
|
action: blockerFnArgs.action,
|
|
78
80
|
current,
|
|
79
81
|
next
|
|
80
82
|
});
|
|
81
|
-
if (!withResolver) {
|
|
83
|
+
if (!props.withResolver) {
|
|
82
84
|
return shouldBlock;
|
|
83
85
|
}
|
|
84
86
|
if (!shouldBlock) {
|
|
@@ -105,41 +107,45 @@ function useBlocker(opts, condition) {
|
|
|
105
107
|
});
|
|
106
108
|
return canNavigateAsync;
|
|
107
109
|
};
|
|
108
|
-
|
|
110
|
+
const disposeBlock = props.disabled ? void 0 : router.history.block({
|
|
109
111
|
blockerFn: blockerFnComposed,
|
|
110
|
-
enableBeforeUnload
|
|
112
|
+
enableBeforeUnload: props.enableBeforeUnload
|
|
111
113
|
});
|
|
114
|
+
Solid.onCleanup(() => disposeBlock?.());
|
|
112
115
|
});
|
|
113
116
|
return resolver;
|
|
114
117
|
}
|
|
115
118
|
const _resolvePromptBlockerArgs = (props) => {
|
|
116
119
|
if ("shouldBlockFn" in props) {
|
|
117
|
-
return
|
|
118
|
-
...props
|
|
119
|
-
};
|
|
120
|
+
return props;
|
|
120
121
|
}
|
|
121
|
-
const shouldBlock = Boolean(props.condition ?? true);
|
|
122
|
-
const fn = props.blockerFn;
|
|
122
|
+
const shouldBlock = Solid.createMemo(() => Boolean(props.condition ?? true));
|
|
123
123
|
const _customBlockerFn = async () => {
|
|
124
|
-
if (shouldBlock &&
|
|
125
|
-
return await
|
|
124
|
+
if (shouldBlock() && props.blockerFn !== void 0) {
|
|
125
|
+
return await props.blockerFn();
|
|
126
126
|
}
|
|
127
127
|
return shouldBlock;
|
|
128
128
|
};
|
|
129
129
|
return {
|
|
130
130
|
shouldBlockFn: _customBlockerFn,
|
|
131
|
-
enableBeforeUnload
|
|
132
|
-
|
|
131
|
+
get enableBeforeUnload() {
|
|
132
|
+
return shouldBlock();
|
|
133
|
+
},
|
|
134
|
+
get withResolver() {
|
|
135
|
+
return props.blockerFn === void 0;
|
|
136
|
+
}
|
|
133
137
|
};
|
|
134
138
|
};
|
|
135
139
|
function Block(opts) {
|
|
136
|
-
const
|
|
137
|
-
children,
|
|
138
|
-
...rest
|
|
139
|
-
} = opts;
|
|
140
|
+
const [propsWithChildren, rest] = Solid.splitProps(opts, ["children"]);
|
|
140
141
|
const args = _resolvePromptBlockerArgs(rest);
|
|
141
142
|
const resolver = useBlocker(args);
|
|
142
|
-
|
|
143
|
+
const children = Solid.createMemo(() => {
|
|
144
|
+
const child = propsWithChildren.children;
|
|
145
|
+
if (resolver && typeof child === "function") return child(resolver());
|
|
146
|
+
return child;
|
|
147
|
+
});
|
|
148
|
+
return memo(children);
|
|
143
149
|
}
|
|
144
150
|
export {
|
|
145
151
|
Block,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBlocker.js","sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type { SolidNode } from './route'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ninterface ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Boolean(opts.condition ?? true)\n const fn = opts.blockerFn\n\n const _customBlockerFn = async () => {\n if (shouldBlock && fn !== undefined) {\n return await fn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: fn === undefined,\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Solid.Accessor<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver> | void {\n const {\n shouldBlockFn,\n enableBeforeUnload = true,\n disabled = false,\n withResolver = false,\n } = _resolveBlockerOpts(opts, condition)\n\n const router = useRouter()\n const { history } = router\n\n const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Solid.createEffect(() => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(undefined, location)\n const matchedRoutes = router.getMatchedRoutes(\n parsedLocation.pathname,\n undefined,\n )\n if (matchedRoutes.foundRoute === undefined) {\n throw new Error(`No route found for location ${location.href}`)\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n const shouldBlock = await shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n setResolver({\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n })\n })\n\n const canNavigateAsync = await promise\n setResolver({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n return canNavigateAsync\n }\n\n return disabled\n ? undefined\n : history.block({ blockerFn: blockerFnComposed, enableBeforeUnload })\n })\n\n return resolver\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return { ...props }\n }\n\n const shouldBlock = Boolean(props.condition ?? true)\n const fn = props.blockerFn\n\n const _customBlockerFn = async () => {\n if (shouldBlock && fn !== undefined) {\n return await fn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: fn === undefined,\n }\n}\n\nexport function Block<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n>(opts: PromptProps<TRouter, TWithResolver>): SolidNode\n\n/**\n * @deprecated Use the UseBlockerOpts property instead\n */\nexport function Block(opts: LegacyPromptProps): SolidNode\n\nexport function Block(opts: PromptProps | LegacyPromptProps): SolidNode {\n const { children, ...rest } = opts\n const args = _resolvePromptBlockerArgs(rest)\n\n const resolver = useBlocker(args)\n return children\n ? typeof children === 'function'\n ? children(resolver as any)\n : children\n : null\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: SolidNode | ((params: BlockerResolver) => SolidNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: SolidNode | ((params: TParams) => SolidNode)\n}\n"],"names":["_resolveBlockerOpts","opts","condition","undefined","shouldBlockFn","withResolver","shouldBlock","Boolean","_customBlockerFn","enableBeforeUnload","fn","blockerFn","useBlocker","disabled","router","useRouter","history","resolver","setResolver","Solid","createSignal","status","current","next","action","proceed","reset","createEffect","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","pathname","foundRoute","Error","href","routeId","id","fullPath","params","routeParams","search","currentLocation","nextLocation","promise","Promise","resolve","canNavigateAsync","block","_resolvePromptBlockerArgs","props","Block","children","rest","args"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useBlocker.js","sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type { SolidNode } from './route'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ninterface ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(opts.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && opts.blockerFn !== undefined) {\n return await opts.blockerFn()\n }\n return shouldBlock()\n }\n\n return {\n get shouldBlockFn() {\n return _customBlockerFn\n },\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return opts.blockerFn === undefined\n },\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Solid.Accessor<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver> | void {\n const props = Solid.mergeProps(\n {\n enableBeforeUnload: true,\n disabled: false,\n withResolver: false,\n },\n _resolveBlockerOpts(opts, condition),\n )\n\n const router = useRouter()\n\n const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Solid.createEffect(() => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(undefined, location)\n const matchedRoutes = router.getMatchedRoutes(\n parsedLocation.pathname,\n undefined,\n )\n if (matchedRoutes.foundRoute === undefined) {\n throw new Error(`No route found for location ${location.href}`)\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n const shouldBlock = await props.shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!props.withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n setResolver({\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n })\n })\n\n const canNavigateAsync = await promise\n setResolver({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n return canNavigateAsync\n }\n\n const disposeBlock = props.disabled\n ? undefined\n : router.history.block({\n blockerFn: blockerFnComposed,\n enableBeforeUnload: props.enableBeforeUnload,\n })\n\n Solid.onCleanup(() => disposeBlock?.())\n })\n\n return resolver\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return props\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(props.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && props.blockerFn !== undefined) {\n return await props.blockerFn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return props.blockerFn === undefined\n },\n }\n}\n\nexport function Block<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n>(opts: PromptProps<TRouter, TWithResolver>): SolidNode\n\n/**\n * @deprecated Use the UseBlockerOpts property instead\n */\nexport function Block(opts: LegacyPromptProps): SolidNode\n\nexport function Block(opts: PromptProps | LegacyPromptProps): SolidNode {\n const [propsWithChildren, rest] = Solid.splitProps(opts, ['children'])\n const args = _resolvePromptBlockerArgs(rest)\n\n const resolver = useBlocker(args)\n const children = Solid.createMemo(() => {\n const child = propsWithChildren.children\n if (resolver && typeof child === 'function') return child(resolver())\n return child\n })\n\n return <>{children()}</>\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: SolidNode | ((params: BlockerResolver) => SolidNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: SolidNode | ((params: TParams) => SolidNode)\n}\n"],"names":["_resolveBlockerOpts","opts","condition","undefined","shouldBlockFn","withResolver","shouldBlock","Boolean","_customBlockerFn","enableBeforeUnload","Solid","createMemo","blockerFn","useBlocker","props","mergeProps","disabled","router","useRouter","resolver","setResolver","createSignal","status","current","next","action","proceed","reset","createEffect","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","pathname","foundRoute","Error","href","routeId","id","fullPath","params","routeParams","search","currentLocation","nextLocation","promise","Promise","resolve","canNavigateAsync","disposeBlock","history","block","onCleanup","_resolvePromptBlockerArgs","Block","propsWithChildren","rest","splitProps","args","children","child","_$memo"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCanGoBack.js","sources":["../../src/useCanGoBack.ts"],"sourcesContent":["import { useRouterState } from './useRouterState'\n\nexport function useCanGoBack() {\n return useRouterState({ select: (s) => s.location.state.__TSR_index !== 0 })\n}\n"],"names":[],"mappings":";AAEO,SAAS,eAAe;
|
|
1
|
+
{"version":3,"file":"useCanGoBack.js","sources":["../../src/useCanGoBack.ts"],"sourcesContent":["import { useRouterState } from './useRouterState'\n\nexport function useCanGoBack() {\n return useRouterState({ select: (s) => s.location.state.__TSR_index !== 0 })\n}\n"],"names":[],"mappings":";AAEO,SAAS,eAAe;AAC7B,SAAO,eAAe,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,gBAAgB,GAAG;AAC7E;"}
|
|
@@ -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 {\n AnyRouter,\n RegisteredRouter,\n ResolveUseLoaderData,\n StrictOrFrom,\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":";AAkCO,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,
|
|
1
|
+
{"version":3,"file":"useLoaderData.js","sources":["../../src/useLoaderData.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\nimport type { Accessor } from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n ResolveUseLoaderData,\n StrictOrFrom,\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":";AAkCO,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,IACrD;AAAA,EAAA,CACM;AACV;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLoaderDeps.js","sources":["../../src/useLoaderDeps.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\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) => 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":";AA+BO,SAASA,cAKdC,MACgD;
|
|
1
|
+
{"version":3,"file":"useLoaderDeps.js","sources":["../../src/useLoaderDeps.tsx"],"sourcesContent":["import { useMatch } from './useMatch'\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) => 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":";AA+BO,SAASA,cAKdC,MACgD;AAChD,QAAM;AAAA,IAAEC;AAAAA,IAAQ,GAAGC;AAAAA,EAAAA,IAASF;AAC5B,SAAOG,SAAS;AAAA,IACd,GAAGD;AAAAA,IACHD,QAASG,CAAAA,MAAM;AACb,aAAOH,SAASA,OAAOG,EAAEC,UAAU,IAAID,EAAEC;AAAAA,IAC3C;AAAA,EAAA,CACD;AACH;"}
|
package/dist/esm/useLocation.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useRouterState } from "./useRouterState.js";
|
|
2
2
|
function useLocation(opts) {
|
|
3
3
|
return useRouterState({
|
|
4
|
-
select: (state) =>
|
|
4
|
+
select: (state) => opts?.select ? opts.select(state.location) : state.location
|
|
5
5
|
});
|
|
6
6
|
}
|
|
7
7
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLocation.js","sources":["../../src/useLocation.tsx"],"sourcesContent":["import { useRouterState } from './useRouterState'\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 return useRouterState({\n select: (state: any) =>\n opts?.select ? opts.select(state.location) : state.location,\n } as any) as Accessor<UseLocationResult<TRouter, TSelected>>\n}\n"],"names":["useLocation","opts","useRouterState","select","state","location"],"mappings":";AAmBO,SAASA,YAIdC,MACiD;AACjD,SAAOC,eAAe;AAAA,IACpBC,QAAQA,CAACC,
|
|
1
|
+
{"version":3,"file":"useLocation.js","sources":["../../src/useLocation.tsx"],"sourcesContent":["import { useRouterState } from './useRouterState'\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 return useRouterState({\n select: (state: any) =>\n opts?.select ? opts.select(state.location) : state.location,\n } as any) as Accessor<UseLocationResult<TRouter, TSelected>>\n}\n"],"names":["useLocation","opts","useRouterState","select","state","location"],"mappings":";AAmBO,SAASA,YAIdC,MACiD;AACjD,SAAOC,eAAe;AAAA,IACpBC,QAAQA,CAACC,UACPH,MAAME,SAASF,KAAKE,OAAOC,MAAMC,QAAQ,IAAID,MAAMC;AAAAA,EAAAA,CAC/C;AACV;"}
|