@tanstack/solid-router 2.0.0-alpha.2 → 2.0.0-alpha.4
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 +124 -167
- package/dist/cjs/Asset.cjs.map +1 -1
- package/dist/cjs/CatchBoundary.cjs +52 -68
- package/dist/cjs/CatchBoundary.cjs.map +1 -1
- package/dist/cjs/ClientOnly.cjs +61 -39
- package/dist/cjs/ClientOnly.cjs.map +1 -1
- package/dist/cjs/HeadContent.cjs +35 -27
- package/dist/cjs/HeadContent.cjs.map +1 -1
- package/dist/cjs/HeadContent.dev.cjs +48 -41
- package/dist/cjs/HeadContent.dev.cjs.map +1 -1
- package/dist/cjs/Match.cjs +367 -442
- package/dist/cjs/Match.cjs.map +1 -1
- package/dist/cjs/Matches.cjs +114 -158
- package/dist/cjs/Matches.cjs.map +1 -1
- package/dist/cjs/RouterProvider.cjs +29 -41
- package/dist/cjs/RouterProvider.cjs.map +1 -1
- package/dist/cjs/SafeFragment.cjs +7 -5
- package/dist/cjs/SafeFragment.cjs.map +1 -1
- package/dist/cjs/ScriptOnce.cjs +20 -22
- package/dist/cjs/ScriptOnce.cjs.map +1 -1
- package/dist/cjs/Scripts.cjs +43 -58
- package/dist/cjs/Scripts.cjs.map +1 -1
- package/dist/cjs/ScrollRestoration.cjs +26 -28
- package/dist/cjs/ScrollRestoration.cjs.map +1 -1
- package/dist/cjs/Transitioner.cjs +91 -124
- package/dist/cjs/Transitioner.cjs.map +1 -1
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/cjs/awaited.cjs +31 -53
- package/dist/cjs/awaited.cjs.map +1 -1
- package/dist/cjs/fileRoute.cjs +96 -91
- package/dist/cjs/fileRoute.cjs.map +1 -1
- package/dist/cjs/fileRoute.d.cts +2 -2
- package/dist/cjs/headContentUtils.cjs +132 -170
- package/dist/cjs/headContentUtils.cjs.map +1 -1
- package/dist/cjs/index.cjs +245 -176
- package/dist/cjs/index.dev.cjs +245 -176
- package/dist/cjs/lazyRouteComponent.cjs +48 -54
- package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
- package/dist/cjs/link.cjs +310 -345
- package/dist/cjs/link.cjs.map +1 -1
- package/dist/cjs/matchContext.cjs +9 -23
- package/dist/cjs/matchContext.cjs.map +1 -1
- package/dist/cjs/not-found.cjs +26 -34
- package/dist/cjs/not-found.cjs.map +1 -1
- package/dist/cjs/renderRouteNotFound.cjs +23 -16
- package/dist/cjs/renderRouteNotFound.cjs.map +1 -1
- package/dist/cjs/route.cjs +200 -215
- package/dist/cjs/route.cjs.map +1 -1
- package/dist/cjs/router.cjs +18 -16
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/cjs/routerContext.cjs +8 -22
- package/dist/cjs/routerContext.cjs.map +1 -1
- package/dist/cjs/scroll-restoration.cjs +25 -35
- package/dist/cjs/scroll-restoration.cjs.map +1 -1
- package/dist/cjs/ssr/RouterClient.cjs +18 -23
- package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
- package/dist/cjs/ssr/RouterServer.cjs +10 -10
- package/dist/cjs/ssr/RouterServer.cjs.map +1 -1
- package/dist/cjs/ssr/client.cjs +2 -4
- package/dist/cjs/ssr/defaultRenderHandler.cjs +12 -16
- package/dist/cjs/ssr/defaultRenderHandler.cjs.map +1 -1
- package/dist/cjs/ssr/defaultStreamHandler.cjs +13 -18
- package/dist/cjs/ssr/defaultStreamHandler.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToStream.cjs +26 -54
- package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
- package/dist/cjs/ssr/renderRouterToString.cjs +33 -57
- package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
- package/dist/cjs/ssr/server.cjs +18 -18
- package/dist/cjs/useBlocker.cjs +140 -177
- package/dist/cjs/useBlocker.cjs.map +1 -1
- package/dist/cjs/useBlocker.d.cts +8 -5
- package/dist/cjs/useCanGoBack.cjs +6 -5
- package/dist/cjs/useCanGoBack.cjs.map +1 -1
- package/dist/cjs/useLoaderData.cjs +12 -11
- package/dist/cjs/useLoaderData.cjs.map +1 -1
- package/dist/cjs/useLoaderDeps.cjs +12 -14
- package/dist/cjs/useLoaderDeps.cjs.map +1 -1
- package/dist/cjs/useLocation.cjs +6 -7
- package/dist/cjs/useLocation.cjs.map +1 -1
- package/dist/cjs/useMatch.cjs +25 -46
- package/dist/cjs/useMatch.cjs.map +1 -1
- package/dist/cjs/useNavigate.cjs +20 -38
- package/dist/cjs/useNavigate.cjs.map +1 -1
- package/dist/cjs/useParams.cjs +14 -13
- package/dist/cjs/useParams.cjs.map +1 -1
- package/dist/cjs/useRouteContext.cjs +9 -8
- package/dist/cjs/useRouteContext.cjs.map +1 -1
- package/dist/cjs/useRouter.cjs +13 -26
- package/dist/cjs/useRouter.cjs.map +1 -1
- package/dist/cjs/useRouterState.cjs +38 -45
- package/dist/cjs/useRouterState.cjs.map +1 -1
- package/dist/cjs/useSearch.cjs +13 -12
- package/dist/cjs/useSearch.cjs.map +1 -1
- package/dist/cjs/utils.cjs +57 -49
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/esm/Asset.js +122 -166
- package/dist/esm/Asset.js.map +1 -1
- package/dist/esm/CatchBoundary.js +48 -50
- package/dist/esm/CatchBoundary.js.map +1 -1
- package/dist/esm/ClientOnly.js +58 -22
- package/dist/esm/ClientOnly.js.map +1 -1
- package/dist/esm/HeadContent.dev.js +46 -40
- package/dist/esm/HeadContent.dev.js.map +1 -1
- package/dist/esm/HeadContent.js +33 -26
- package/dist/esm/HeadContent.js.map +1 -1
- package/dist/esm/Match.js +359 -422
- package/dist/esm/Match.js.map +1 -1
- package/dist/esm/Matches.js +107 -142
- package/dist/esm/Matches.js.map +1 -1
- package/dist/esm/RouterProvider.js +26 -40
- package/dist/esm/RouterProvider.js.map +1 -1
- package/dist/esm/SafeFragment.js +6 -5
- package/dist/esm/SafeFragment.js.map +1 -1
- package/dist/esm/ScriptOnce.js +18 -21
- package/dist/esm/ScriptOnce.js.map +1 -1
- package/dist/esm/Scripts.js +42 -58
- package/dist/esm/Scripts.js.map +1 -1
- package/dist/esm/ScrollRestoration.js +25 -29
- package/dist/esm/ScrollRestoration.js.map +1 -1
- package/dist/esm/Transitioner.js +87 -105
- package/dist/esm/Transitioner.js.map +1 -1
- package/dist/esm/awaited.js +28 -36
- package/dist/esm/awaited.js.map +1 -1
- package/dist/esm/fileRoute.d.ts +2 -2
- package/dist/esm/fileRoute.js +90 -92
- package/dist/esm/fileRoute.js.map +1 -1
- package/dist/esm/headContentUtils.js +129 -152
- package/dist/esm/headContentUtils.js.map +1 -1
- package/dist/esm/index.dev.js +15 -115
- package/dist/esm/index.js +17 -116
- package/dist/esm/lazyRouteComponent.js +46 -53
- package/dist/esm/lazyRouteComponent.js.map +1 -1
- package/dist/esm/link.js +306 -329
- package/dist/esm/link.js.map +1 -1
- package/dist/esm/matchContext.js +7 -7
- package/dist/esm/matchContext.js.map +1 -1
- package/dist/esm/not-found.js +23 -33
- package/dist/esm/not-found.js.map +1 -1
- package/dist/esm/renderRouteNotFound.js +20 -15
- package/dist/esm/renderRouteNotFound.js.map +1 -1
- package/dist/esm/route.js +193 -218
- package/dist/esm/route.js.map +1 -1
- package/dist/esm/router.js +17 -17
- package/dist/esm/router.js.map +1 -1
- package/dist/esm/routerContext.js +6 -5
- package/dist/esm/routerContext.js.map +1 -1
- package/dist/esm/scroll-restoration.js +23 -34
- package/dist/esm/scroll-restoration.js.map +1 -1
- package/dist/esm/ssr/RouterClient.js +16 -22
- package/dist/esm/ssr/RouterClient.js.map +1 -1
- package/dist/esm/ssr/RouterServer.js +9 -10
- package/dist/esm/ssr/RouterServer.js.map +1 -1
- package/dist/esm/ssr/client.js +1 -4
- package/dist/esm/ssr/defaultRenderHandler.js +11 -15
- package/dist/esm/ssr/defaultRenderHandler.js.map +1 -1
- package/dist/esm/ssr/defaultStreamHandler.js +12 -17
- package/dist/esm/ssr/defaultStreamHandler.js.map +1 -1
- package/dist/esm/ssr/renderRouterToStream.js +23 -36
- package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
- package/dist/esm/ssr/renderRouterToString.js +31 -40
- package/dist/esm/ssr/renderRouterToString.js.map +1 -1
- package/dist/esm/ssr/server.js +3 -10
- package/dist/esm/useBlocker.d.ts +8 -5
- package/dist/esm/useBlocker.js +136 -159
- package/dist/esm/useBlocker.js.map +1 -1
- package/dist/esm/useCanGoBack.js +6 -5
- package/dist/esm/useCanGoBack.js.map +1 -1
- package/dist/esm/useLoaderData.js +12 -11
- package/dist/esm/useLoaderData.js.map +1 -1
- package/dist/esm/useLoaderDeps.js +12 -14
- package/dist/esm/useLoaderDeps.js.map +1 -1
- package/dist/esm/useLocation.js +6 -7
- package/dist/esm/useLocation.js.map +1 -1
- package/dist/esm/useMatch.js +21 -28
- package/dist/esm/useMatch.js.map +1 -1
- package/dist/esm/useNavigate.js +18 -22
- package/dist/esm/useNavigate.js.map +1 -1
- package/dist/esm/useParams.js +14 -13
- package/dist/esm/useParams.js.map +1 -1
- package/dist/esm/useRouteContext.js +9 -8
- package/dist/esm/useRouteContext.js.map +1 -1
- package/dist/esm/useRouter.js +9 -8
- package/dist/esm/useRouter.js.map +1 -1
- package/dist/esm/useRouterState.js +36 -44
- package/dist/esm/useRouterState.js.map +1 -1
- package/dist/esm/useSearch.js +13 -12
- package/dist/esm/useSearch.js.map +1 -1
- package/dist/esm/utils.js +55 -33
- package/dist/esm/utils.js.map +1 -1
- package/dist/source/fileRoute.d.ts +2 -2
- package/dist/source/useBlocker.d.ts +8 -5
- package/dist/source/useBlocker.jsx +2 -2
- package/dist/source/useBlocker.jsx.map +1 -1
- package/package.json +8 -8
- package/src/fileRoute.ts +2 -2
- package/src/useBlocker.tsx +15 -10
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/index.dev.cjs.map +0 -1
- package/dist/cjs/ssr/client.cjs.map +0 -1
- package/dist/cjs/ssr/server.cjs.map +0 -1
- package/dist/esm/index.dev.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/ssr/client.js.map +0 -1
- package/dist/esm/ssr/server.js.map +0 -1
package/dist/esm/ScriptOnce.js
CHANGED
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
import { template, effect, setAttribute } from "@solidjs/web";
|
|
2
|
-
import { isServer } from "@tanstack/router-core/isServer";
|
|
3
1
|
import { useRouter } from "./useRouter.js";
|
|
2
|
+
import { effect, setAttribute, template } from "@solidjs/web";
|
|
3
|
+
import { isServer } from "@tanstack/router-core/isServer";
|
|
4
|
+
//#region src/ScriptOnce.tsx
|
|
4
5
|
var _tmpl$ = /* @__PURE__ */ template(`<script class=$tsr>`);
|
|
5
|
-
function ScriptOnce({
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
setAttribute(_el$, "nonce", _v$);
|
|
17
|
-
});
|
|
18
|
-
return _el$;
|
|
19
|
-
})();
|
|
6
|
+
function ScriptOnce({ children }) {
|
|
7
|
+
const router = useRouter();
|
|
8
|
+
if (!(isServer ?? router.isServer)) return null;
|
|
9
|
+
return (() => {
|
|
10
|
+
var _el$ = _tmpl$();
|
|
11
|
+
_el$.innerHTML = children + ";document.currentScript.remove()";
|
|
12
|
+
effect(() => router.options.ssr?.nonce, (_v$) => {
|
|
13
|
+
setAttribute(_el$, "nonce", _v$);
|
|
14
|
+
});
|
|
15
|
+
return _el$;
|
|
16
|
+
})();
|
|
20
17
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=ScriptOnce.js.map
|
|
18
|
+
//#endregion
|
|
19
|
+
export { ScriptOnce };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=ScriptOnce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptOnce.js","sources":["../../src/ScriptOnce.tsx"],"sourcesContent":["import { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\n\nexport function ScriptOnce({\n children,\n}: {\n children: string\n log?: boolean\n sync?: boolean\n}) {\n const router = useRouter()\n if (!(isServer ?? router.isServer)) {\n return null\n }\n return (\n <script\n nonce={router.options.ssr?.nonce}\n class=\"$tsr\"\n innerHTML={children + ';document.currentScript.remove()'}\n />\n )\n}\n"],"
|
|
1
|
+
{"version":3,"file":"ScriptOnce.js","names":["isServer","useRouter","ScriptOnce","children","log","sync","router","_el$","_tmpl$","innerHTML","_$effect","options","ssr","nonce","_v$","_$setAttribute"],"sources":["../../src/ScriptOnce.tsx"],"sourcesContent":["import { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\n\nexport function ScriptOnce({\n children,\n}: {\n children: string\n log?: boolean\n sync?: boolean\n}) {\n const router = useRouter()\n if (!(isServer ?? router.isServer)) {\n return null\n }\n return (\n <script\n nonce={router.options.ssr?.nonce}\n class=\"$tsr\"\n innerHTML={children + ';document.currentScript.remove()'}\n />\n )\n}\n"],"mappings":";;;;;AAGA,SAAgBE,WAAW,EACzBC,YAKC;CACD,MAAMG,SAASL,WAAW;AAC1B,KAAI,EAAED,YAAYM,OAAON,UACvB,QAAO;AAET,eAAA;EAAA,IAAAO,OAAAC,QAAA;AAAAD,OAAAE,YAIeN,WAAW;AAAkCO,eAFjDJ,OAAOK,QAAQC,KAAKC,QAAKC,QAAA;AAAAC,gBAAAR,MAAA,SAAAO,IAAA;IAAA;AAAA,SAAAP;KAAA"}
|
package/dist/esm/Scripts.js
CHANGED
|
@@ -1,60 +1,44 @@
|
|
|
1
|
-
import { createComponent, NoHydration } from "@solidjs/web";
|
|
2
|
-
import { Asset } from "./Asset.js";
|
|
3
|
-
import { useRouterState } from "./useRouterState.js";
|
|
4
1
|
import { useRouter } from "./useRouter.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
let serverBufferedScript = void 0;
|
|
44
|
-
if (router.serverSsr) {
|
|
45
|
-
serverBufferedScript = router.serverSsr.takeBufferedScripts();
|
|
46
|
-
}
|
|
47
|
-
const allScripts = [...scripts().scripts, ...assetScripts()];
|
|
48
|
-
if (serverBufferedScript) {
|
|
49
|
-
allScripts.unshift(serverBufferedScript);
|
|
50
|
-
}
|
|
51
|
-
return createComponent(NoHydration, {
|
|
52
|
-
get children() {
|
|
53
|
-
return allScripts.map((asset, _i) => createComponent(Asset, asset));
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
};
|
|
57
|
-
export {
|
|
58
|
-
Scripts
|
|
2
|
+
import { useRouterState } from "./useRouterState.js";
|
|
3
|
+
import { Asset } from "./Asset.js";
|
|
4
|
+
import { NoHydration, createComponent } from "@solidjs/web";
|
|
5
|
+
//#region src/Scripts.tsx
|
|
6
|
+
var Scripts = () => {
|
|
7
|
+
const router = useRouter();
|
|
8
|
+
const nonce = router.options.ssr?.nonce;
|
|
9
|
+
const assetScripts = useRouterState({ select: (state) => {
|
|
10
|
+
const assetScripts = [];
|
|
11
|
+
const manifest = router.ssr?.manifest;
|
|
12
|
+
if (!manifest) return [];
|
|
13
|
+
state.matches.map((match) => router.looseRoutesById[match.routeId]).forEach((route) => manifest.routes[route.id]?.assets?.filter((d) => d.tag === "script").forEach((asset) => {
|
|
14
|
+
assetScripts.push({
|
|
15
|
+
tag: "script",
|
|
16
|
+
attrs: {
|
|
17
|
+
...asset.attrs,
|
|
18
|
+
nonce
|
|
19
|
+
},
|
|
20
|
+
children: asset.children
|
|
21
|
+
});
|
|
22
|
+
}));
|
|
23
|
+
return assetScripts;
|
|
24
|
+
} });
|
|
25
|
+
const scripts = useRouterState({ select: (state) => ({ scripts: state.matches.map((match) => match.scripts).flat(1).filter(Boolean).map(({ children, ...script }) => ({
|
|
26
|
+
tag: "script",
|
|
27
|
+
attrs: {
|
|
28
|
+
...script,
|
|
29
|
+
nonce
|
|
30
|
+
},
|
|
31
|
+
children
|
|
32
|
+
})) }) });
|
|
33
|
+
let serverBufferedScript = void 0;
|
|
34
|
+
if (router.serverSsr) serverBufferedScript = router.serverSsr.takeBufferedScripts();
|
|
35
|
+
const allScripts = [...scripts().scripts, ...assetScripts()];
|
|
36
|
+
if (serverBufferedScript) allScripts.unshift(serverBufferedScript);
|
|
37
|
+
return createComponent(NoHydration, { get children() {
|
|
38
|
+
return allScripts.map((asset, _i) => createComponent(Asset, asset));
|
|
39
|
+
} });
|
|
59
40
|
};
|
|
60
|
-
//#
|
|
41
|
+
//#endregion
|
|
42
|
+
export { Scripts };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=Scripts.js.map
|
package/dist/esm/Scripts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scripts.js","sources":["../../src/Scripts.tsx"],"sourcesContent":["import { NoHydration } from '@solidjs/web'\nimport { Asset } from './Asset'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const Scripts = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const assetScripts = useRouterState({\n select: (state) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: { ...asset.attrs, nonce },\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n },\n })\n\n const scripts = useRouterState({\n select: (state) => ({\n scripts: (\n state.matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n }),\n })\n\n let serverBufferedScript: RouterManagedTag | undefined = undefined\n\n if (router.serverSsr) {\n serverBufferedScript = router.serverSsr.takeBufferedScripts()\n }\n\n const allScripts = [\n ...scripts().scripts,\n ...assetScripts(),\n ] as Array<RouterManagedTag>\n\n if (serverBufferedScript) {\n allScripts.unshift(serverBufferedScript)\n }\n\n return (\n <NoHydration>\n {allScripts.map((asset, _i) => (\n <Asset {...asset} />\n ))}\n </NoHydration>\n )\n}\n"],"
|
|
1
|
+
{"version":3,"file":"Scripts.js","names":["NoHydration","Asset","useRouterState","useRouter","RouterManagedTag","Scripts","router","nonce","options","ssr","assetScripts","select","state","Array","manifest","matches","map","match","looseRoutesById","routeId","forEach","route","routes","id","assets","filter","d","tag","asset","push","attrs","children","scripts","flat","Boolean","script","serverBufferedScript","undefined","serverSsr","takeBufferedScripts","allScripts","unshift","_$createComponent","_i"],"sources":["../../src/Scripts.tsx"],"sourcesContent":["import { NoHydration } from '@solidjs/web'\nimport { Asset } from './Asset'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const Scripts = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const assetScripts = useRouterState({\n select: (state) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: { ...asset.attrs, nonce },\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n },\n })\n\n const scripts = useRouterState({\n select: (state) => ({\n scripts: (\n state.matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n }),\n })\n\n let serverBufferedScript: RouterManagedTag | undefined = undefined\n\n if (router.serverSsr) {\n serverBufferedScript = router.serverSsr.takeBufferedScripts()\n }\n\n const allScripts = [\n ...scripts().scripts,\n ...assetScripts(),\n ] as Array<RouterManagedTag>\n\n if (serverBufferedScript) {\n allScripts.unshift(serverBufferedScript)\n }\n\n return (\n <NoHydration>\n {allScripts.map((asset, _i) => (\n <Asset {...asset} />\n ))}\n </NoHydration>\n )\n}\n"],"mappings":";;;;;AAMA,IAAaK,gBAAgB;CAC3B,MAAMC,SAASH,WAAW;CAC1B,MAAMI,QAAQD,OAAOE,QAAQC,KAAKF;CAClC,MAAMG,eAAeR,eAAe,EAClCS,SAASC,UAAU;EACjB,MAAMF,eAAwC,EAAE;EAChD,MAAMI,WAAWR,OAAOG,KAAKK;AAE7B,MAAI,CAACA,SACH,QAAO,EAAE;AAGXF,QAAMG,QACHC,KAAKC,UAAUX,OAAOY,gBAAgBD,MAAME,SAAU,CACtDC,SAASC,UACRP,SAASQ,OAAOD,MAAME,KAAKC,QACvBC,QAAQC,MAAMA,EAAEC,QAAQ,SAAS,CAClCP,SAASQ,UAAU;AAClBlB,gBAAamB,KAAK;IAChBF,KAAK;IACLG,OAAO;KAAE,GAAGF,MAAME;KAAOvB;KAAO;IAChCwB,UAAUH,MAAMG;IACjB,CAAQ;IAEf,CAAC;AAEH,SAAOrB;IAEV,CAAC;CAEF,MAAMsB,UAAU9B,eAAe,EAC7BS,SAASC,WAAW,EAClBoB,SACEpB,MAAMG,QACHC,KAAKC,UAAUA,MAAMe,QAAS,CAC9BC,KAAK,EAAE,CACPR,OAAOS,QAAQ,CAClBlB,KAAK,EAAEe,UAAU,GAAGI,cAAc;EAClCR,KAAK;EACLG,OAAO;GACL,GAAGK;GACH5B;GACD;EACDwB;EACD,EAAC,EACH,GACF,CAAC;CAEF,IAAIK,uBAAqDC,KAAAA;AAEzD,KAAI/B,OAAOgC,UACTF,wBAAuB9B,OAAOgC,UAAUC,qBAAqB;CAG/D,MAAMC,aAAa,CACjB,GAAGR,SAAS,CAACA,SACb,GAAGtB,cAAc,CAClB;AAED,KAAI0B,qBACFI,YAAWC,QAAQL,qBAAqB;AAG1C,QAAAM,gBACG1C,aAAW,EAAA,IAAA+B,WAAA;AAAA,SACTS,WAAWxB,KAAKY,OAAOe,OAAED,gBACvBzC,OAAU2B,MACZ,CAAC;IAAA,CAAA"}
|
|
@@ -1,36 +1,32 @@
|
|
|
1
|
-
import { defaultGetScrollRestorationKey, getCssSelector, scrollRestorationCache, setupScrollRestoration } from "@tanstack/router-core";
|
|
2
1
|
import { useRouter } from "./useRouter.js";
|
|
2
|
+
import { defaultGetScrollRestorationKey, getCssSelector, scrollRestorationCache, setupScrollRestoration } from "@tanstack/router-core";
|
|
3
|
+
//#region src/ScrollRestoration.tsx
|
|
3
4
|
function useScrollRestoration() {
|
|
4
|
-
|
|
5
|
-
setupScrollRestoration(router, true);
|
|
5
|
+
setupScrollRestoration(useRouter(), true);
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated use createRouter's `scrollRestoration` option instead
|
|
9
|
+
*/
|
|
7
10
|
function ScrollRestoration(_props) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
return null;
|
|
11
|
+
useScrollRestoration();
|
|
12
|
+
if (process.env.NODE_ENV === "development") console.warn("The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.");
|
|
13
|
+
return null;
|
|
13
14
|
}
|
|
14
15
|
function useElementScrollRestoration(options) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
const restoreKey = getKey(router.latestLocation);
|
|
29
|
-
const byKey = scrollRestorationCache?.state[restoreKey];
|
|
30
|
-
return byKey?.[elementSelector];
|
|
16
|
+
useScrollRestoration();
|
|
17
|
+
const router = useRouter();
|
|
18
|
+
const getKey = options.getKey || defaultGetScrollRestorationKey;
|
|
19
|
+
let elementSelector = "";
|
|
20
|
+
if (options.id) elementSelector = `[data-scroll-restoration-id="${options.id}"]`;
|
|
21
|
+
else {
|
|
22
|
+
const element = options.getElement?.();
|
|
23
|
+
if (!element) return;
|
|
24
|
+
elementSelector = element instanceof Window ? "window" : getCssSelector(element);
|
|
25
|
+
}
|
|
26
|
+
const restoreKey = getKey(router.latestLocation);
|
|
27
|
+
return (scrollRestorationCache?.state[restoreKey])?.[elementSelector];
|
|
31
28
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=ScrollRestoration.js.map
|
|
29
|
+
//#endregion
|
|
30
|
+
export { ScrollRestoration, useElementScrollRestoration };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=ScrollRestoration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollRestoration.js","sources":["../../src/ScrollRestoration.tsx"],"sourcesContent":["import {\n defaultGetScrollRestorationKey,\n getCssSelector,\n scrollRestorationCache,\n setupScrollRestoration,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n ParsedLocation,\n ScrollRestorationEntry,\n ScrollRestorationOptions,\n} from '@tanstack/router-core'\n\nfunction useScrollRestoration() {\n const router = useRouter()\n setupScrollRestoration(router, true)\n}\n\n/**\n * @deprecated use createRouter's `scrollRestoration` option instead\n */\nexport function ScrollRestoration(_props: ScrollRestorationOptions) {\n useScrollRestoration()\n\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n \"The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.\",\n )\n }\n\n return null\n}\n\nexport function useElementScrollRestoration(\n options: (\n | {\n id: string\n getElement?: () => Window | Element | undefined | null\n }\n | {\n id?: string\n getElement: () => Window | Element | undefined | null\n }\n ) & {\n getKey?: (location: ParsedLocation) => string\n },\n): ScrollRestorationEntry | undefined {\n useScrollRestoration()\n\n const router = useRouter()\n const getKey = options.getKey || defaultGetScrollRestorationKey\n\n let elementSelector = ''\n\n if (options.id) {\n elementSelector = `[data-scroll-restoration-id=\"${options.id}\"]`\n } else {\n const element = options.getElement?.()\n if (!element) {\n return\n }\n elementSelector =\n element instanceof Window ? 'window' : getCssSelector(element)\n }\n\n const restoreKey = getKey(router.latestLocation)\n const byKey = scrollRestorationCache?.state[restoreKey]\n return byKey?.[elementSelector]\n}\n"],"
|
|
1
|
+
{"version":3,"file":"ScrollRestoration.js","names":["defaultGetScrollRestorationKey","getCssSelector","scrollRestorationCache","setupScrollRestoration","useRouter","ParsedLocation","ScrollRestorationEntry","ScrollRestorationOptions","useScrollRestoration","router","ScrollRestoration","_props","process","env","NODE_ENV","console","warn","useElementScrollRestoration","options","id","getElement","Window","Element","getKey","location","elementSelector","element","restoreKey","latestLocation","byKey","state"],"sources":["../../src/ScrollRestoration.tsx"],"sourcesContent":["import {\n defaultGetScrollRestorationKey,\n getCssSelector,\n scrollRestorationCache,\n setupScrollRestoration,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport type {\n ParsedLocation,\n ScrollRestorationEntry,\n ScrollRestorationOptions,\n} from '@tanstack/router-core'\n\nfunction useScrollRestoration() {\n const router = useRouter()\n setupScrollRestoration(router, true)\n}\n\n/**\n * @deprecated use createRouter's `scrollRestoration` option instead\n */\nexport function ScrollRestoration(_props: ScrollRestorationOptions) {\n useScrollRestoration()\n\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n \"The ScrollRestoration component is deprecated. Use createRouter's `scrollRestoration` option instead.\",\n )\n }\n\n return null\n}\n\nexport function useElementScrollRestoration(\n options: (\n | {\n id: string\n getElement?: () => Window | Element | undefined | null\n }\n | {\n id?: string\n getElement: () => Window | Element | undefined | null\n }\n ) & {\n getKey?: (location: ParsedLocation) => string\n },\n): ScrollRestorationEntry | undefined {\n useScrollRestoration()\n\n const router = useRouter()\n const getKey = options.getKey || defaultGetScrollRestorationKey\n\n let elementSelector = ''\n\n if (options.id) {\n elementSelector = `[data-scroll-restoration-id=\"${options.id}\"]`\n } else {\n const element = options.getElement?.()\n if (!element) {\n return\n }\n elementSelector =\n element instanceof Window ? 'window' : getCssSelector(element)\n }\n\n const restoreKey = getKey(router.latestLocation)\n const byKey = scrollRestorationCache?.state[restoreKey]\n return byKey?.[elementSelector]\n}\n"],"mappings":";;;AAaA,SAASQ,uBAAuB;AAE9BL,wBADeC,WAAW,EACK,KAAK;;;;;AAMtC,SAAgBM,kBAAkBC,QAAkC;AAClEH,uBAAsB;AAEtB,KAAA,QAAA,IAAA,aAA6B,cAC3BO,SAAQC,KACN,wGACD;AAGH,QAAO;;AAGT,SAAgBC,4BACdC,SAYoC;AACpCV,uBAAsB;CAEtB,MAAMC,SAASL,WAAW;CAC1B,MAAMmB,SAASL,QAAQK,UAAUvB;CAEjC,IAAIyB,kBAAkB;AAEtB,KAAIP,QAAQC,GACVM,mBAAkB,gCAAgCP,QAAQC,GAAE;MACvD;EACL,MAAMO,UAAUR,QAAQE,cAAc;AACtC,MAAI,CAACM,QACH;AAEFD,oBACEC,mBAAmBL,SAAS,WAAWpB,eAAeyB,QAAQ;;CAGlE,MAAMC,aAAaJ,OAAOd,OAAOmB,eAAe;AAEhD,SADc1B,wBAAwB4B,MAAMH,eAC7BF"}
|
package/dist/esm/Transitioner.js
CHANGED
|
@@ -1,110 +1,92 @@
|
|
|
1
|
-
import * as Solid from "solid-js";
|
|
2
|
-
import { trimPathRight, getLocationChangeInfo, handleHashScroll } from "@tanstack/router-core";
|
|
3
1
|
import { useRouter } from "./useRouter.js";
|
|
4
2
|
import { useRouterState } from "./useRouterState.js";
|
|
5
3
|
import { usePrevious } from "./utils.js";
|
|
4
|
+
import { getLocationChangeInfo, handleHashScroll, trimPathRight } from "@tanstack/router-core";
|
|
5
|
+
import * as Solid from "solid-js";
|
|
6
|
+
//#region src/Transitioner.tsx
|
|
6
7
|
function Transitioner() {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
});
|
|
88
|
-
Solid.createEffect(() => [isAnyPending(), previousIsAnyPending()], ([isAnyPending2, previousIsAnyPending2]) => {
|
|
89
|
-
if (previousIsAnyPending2.previous && !isAnyPending2) {
|
|
90
|
-
const changeInfo = getLocationChangeInfo(router.state);
|
|
91
|
-
router.emit({
|
|
92
|
-
type: "onResolved",
|
|
93
|
-
...changeInfo
|
|
94
|
-
});
|
|
95
|
-
router.__store.setState((s) => ({
|
|
96
|
-
...s,
|
|
97
|
-
status: "idle",
|
|
98
|
-
resolvedLocation: s.location
|
|
99
|
-
}));
|
|
100
|
-
if (changeInfo.hrefChanged) {
|
|
101
|
-
handleHashScroll(router);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
return null;
|
|
8
|
+
const router = useRouter();
|
|
9
|
+
let mountLoadForRouter = {
|
|
10
|
+
router,
|
|
11
|
+
mounted: false
|
|
12
|
+
};
|
|
13
|
+
const isLoading = useRouterState({ select: ({ isLoading }) => isLoading });
|
|
14
|
+
const [isSolidTransitioning] = [() => false];
|
|
15
|
+
const hasPendingMatches = useRouterState({ select: (s) => s.matches.some((d) => d.status === "pending") });
|
|
16
|
+
const previousIsLoading = usePrevious(isLoading);
|
|
17
|
+
const isAnyPending = () => isLoading() || isSolidTransitioning() || hasPendingMatches();
|
|
18
|
+
const previousIsAnyPending = usePrevious(isAnyPending);
|
|
19
|
+
const isPagePending = () => isLoading() || hasPendingMatches();
|
|
20
|
+
const previousIsPagePending = usePrevious(isPagePending);
|
|
21
|
+
router.startTransition = (fn) => {
|
|
22
|
+
Solid.runWithOwner(null, fn);
|
|
23
|
+
};
|
|
24
|
+
Solid.onSettled(() => {
|
|
25
|
+
const unsub = router.history.subscribe(router.load);
|
|
26
|
+
router.updateLatestLocation();
|
|
27
|
+
const nextLocation = router.buildLocation({
|
|
28
|
+
to: router.latestLocation.pathname,
|
|
29
|
+
search: true,
|
|
30
|
+
params: true,
|
|
31
|
+
hash: true,
|
|
32
|
+
state: true,
|
|
33
|
+
_includeValidateSearch: true
|
|
34
|
+
});
|
|
35
|
+
if (trimPathRight(router.latestLocation.publicHref) !== trimPathRight(nextLocation.publicHref)) router.commitLocation({
|
|
36
|
+
...nextLocation,
|
|
37
|
+
replace: true
|
|
38
|
+
});
|
|
39
|
+
Solid.onCleanup(() => {
|
|
40
|
+
unsub();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
Solid.createTrackedEffect(() => {
|
|
44
|
+
Solid.untrack(() => {
|
|
45
|
+
if (typeof window !== "undefined" && router.ssr || mountLoadForRouter.router === router && mountLoadForRouter.mounted) return;
|
|
46
|
+
mountLoadForRouter = {
|
|
47
|
+
router,
|
|
48
|
+
mounted: true
|
|
49
|
+
};
|
|
50
|
+
const tryLoad = async () => {
|
|
51
|
+
try {
|
|
52
|
+
await router.load();
|
|
53
|
+
} catch (err) {
|
|
54
|
+
console.error(err);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
tryLoad();
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
Solid.createEffect(() => [previousIsLoading(), isLoading()], ([previousIsLoading, isLoading]) => {
|
|
61
|
+
if (previousIsLoading.previous && !isLoading) router.emit({
|
|
62
|
+
type: "onLoad",
|
|
63
|
+
...getLocationChangeInfo(router.state)
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
Solid.createEffect(() => [isPagePending(), previousIsPagePending()], ([isPagePending, previousIsPagePending]) => {
|
|
67
|
+
if (previousIsPagePending.previous && !isPagePending) router.emit({
|
|
68
|
+
type: "onBeforeRouteMount",
|
|
69
|
+
...getLocationChangeInfo(router.state)
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
Solid.createEffect(() => [isAnyPending(), previousIsAnyPending()], ([isAnyPending, previousIsAnyPending]) => {
|
|
73
|
+
if (previousIsAnyPending.previous && !isAnyPending) {
|
|
74
|
+
const changeInfo = getLocationChangeInfo(router.state);
|
|
75
|
+
router.emit({
|
|
76
|
+
type: "onResolved",
|
|
77
|
+
...changeInfo
|
|
78
|
+
});
|
|
79
|
+
router.__store.setState((s) => ({
|
|
80
|
+
...s,
|
|
81
|
+
status: "idle",
|
|
82
|
+
resolvedLocation: s.location
|
|
83
|
+
}));
|
|
84
|
+
if (changeInfo.hrefChanged) handleHashScroll(router);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
return null;
|
|
106
88
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
//# sourceMappingURL=Transitioner.js.map
|
|
89
|
+
//#endregion
|
|
90
|
+
export { Transitioner };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=Transitioner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transitioner.js","sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n getLocationChangeInfo,\n handleHashScroll,\n trimPathRight,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport { usePrevious } from './utils'\n\nexport function Transitioner() {\n const router = useRouter()\n let mountLoadForRouter = { router, mounted: false }\n const isLoading = useRouterState({\n select: ({ isLoading }) => isLoading,\n })\n\n const [isSolidTransitioning] = [() => false]\n\n // Track pending state changes\n const hasPendingMatches = useRouterState({\n select: (s) => s.matches.some((d) => d.status === 'pending'),\n })\n\n const previousIsLoading = usePrevious(isLoading)\n\n const isAnyPending = () =>\n isLoading() || isSolidTransitioning() || hasPendingMatches()\n const previousIsAnyPending = usePrevious(isAnyPending)\n\n const isPagePending = () => isLoading() || hasPendingMatches()\n const previousIsPagePending = usePrevious(isPagePending)\n\n router.startTransition = (fn: () => void | Promise<void>) => {\n Solid.runWithOwner(null, fn)\n }\n\n // Subscribe to location changes\n // and try to load the new location\n Solid.onSettled(() => {\n const unsub = router.history.subscribe(router.load)\n\n // Refresh latestLocation from the current browser URL before comparing.\n // The URL may have been changed synchronously (e.g. via replaceState) after\n // render() but before this effect ran, so we must not use the stale\n // render-time location here.\n router.updateLatestLocation()\n\n const nextLocation = router.buildLocation({\n to: router.latestLocation.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n\n // Check if the current URL matches the canonical form.\n // Compare publicHref (browser-facing URL) for consistency with\n // the server-side redirect check in router.beforeLoad.\n if (\n trimPathRight(router.latestLocation.publicHref) !==\n trimPathRight(nextLocation.publicHref)\n ) {\n router.commitLocation({ ...nextLocation, replace: true })\n }\n\n Solid.onCleanup(() => {\n unsub()\n })\n })\n\n // Try to load the initial location\n Solid.createTrackedEffect(() => {\n Solid.untrack(() => {\n if (\n // if we are hydrating from SSR, loading is triggered in ssr-client\n (typeof window !== 'undefined' && router.ssr) ||\n (mountLoadForRouter.router === router && mountLoadForRouter.mounted)\n ) {\n return\n }\n mountLoadForRouter = { router, mounted: true }\n const tryLoad = async () => {\n try {\n await router.load()\n } catch (err) {\n console.error(err)\n }\n }\n tryLoad()\n })\n })\n\n Solid.createEffect(\n () => [previousIsLoading(), isLoading()] as const,\n ([previousIsLoading, isLoading]) => {\n if (previousIsLoading.previous && !isLoading) {\n router.emit({\n type: 'onLoad',\n ...getLocationChangeInfo(router.state),\n })\n }\n },\n )\n\n Solid.createEffect(\n () => [isPagePending(), previousIsPagePending()] as const,\n ([isPagePending, previousIsPagePending]) => {\n // emit onBeforeRouteMount\n if (previousIsPagePending.previous && !isPagePending) {\n router.emit({\n type: 'onBeforeRouteMount',\n ...getLocationChangeInfo(router.state),\n })\n }\n },\n )\n\n Solid.createEffect(\n () => [isAnyPending(), previousIsAnyPending()] as const,\n ([isAnyPending, previousIsAnyPending]) => {\n if (previousIsAnyPending.previous && !isAnyPending) {\n const changeInfo = getLocationChangeInfo(router.state)\n router.emit({\n type: 'onResolved',\n ...changeInfo,\n })\n\n router.__store.setState((s) => ({\n ...s,\n status: 'idle',\n resolvedLocation: s.location,\n }))\n\n if (changeInfo.hrefChanged) {\n handleHashScroll(router)\n }\n }\n },\n )\n\n return null\n}\n"],"
|
|
1
|
+
{"version":3,"file":"Transitioner.js","names":["Solid","getLocationChangeInfo","handleHashScroll","trimPathRight","useRouter","useRouterState","usePrevious","Transitioner","router","mountLoadForRouter","mounted","isLoading","select","isSolidTransitioning","hasPendingMatches","s","matches","some","d","status","previousIsLoading","isAnyPending","previousIsAnyPending","isPagePending","previousIsPagePending","startTransition","fn","Promise","runWithOwner","onSettled","unsub","history","subscribe","load","updateLatestLocation","nextLocation","buildLocation","to","latestLocation","pathname","search","params","hash","state","_includeValidateSearch","publicHref","commitLocation","replace","onCleanup","createTrackedEffect","untrack","window","ssr","tryLoad","err","console","error","createEffect","const","previous","emit","type","changeInfo","__store","setState","resolvedLocation","location","hrefChanged"],"sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n getLocationChangeInfo,\n handleHashScroll,\n trimPathRight,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport { usePrevious } from './utils'\n\nexport function Transitioner() {\n const router = useRouter()\n let mountLoadForRouter = { router, mounted: false }\n const isLoading = useRouterState({\n select: ({ isLoading }) => isLoading,\n })\n\n const [isSolidTransitioning] = [() => false]\n\n // Track pending state changes\n const hasPendingMatches = useRouterState({\n select: (s) => s.matches.some((d) => d.status === 'pending'),\n })\n\n const previousIsLoading = usePrevious(isLoading)\n\n const isAnyPending = () =>\n isLoading() || isSolidTransitioning() || hasPendingMatches()\n const previousIsAnyPending = usePrevious(isAnyPending)\n\n const isPagePending = () => isLoading() || hasPendingMatches()\n const previousIsPagePending = usePrevious(isPagePending)\n\n router.startTransition = (fn: () => void | Promise<void>) => {\n Solid.runWithOwner(null, fn)\n }\n\n // Subscribe to location changes\n // and try to load the new location\n Solid.onSettled(() => {\n const unsub = router.history.subscribe(router.load)\n\n // Refresh latestLocation from the current browser URL before comparing.\n // The URL may have been changed synchronously (e.g. via replaceState) after\n // render() but before this effect ran, so we must not use the stale\n // render-time location here.\n router.updateLatestLocation()\n\n const nextLocation = router.buildLocation({\n to: router.latestLocation.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n\n // Check if the current URL matches the canonical form.\n // Compare publicHref (browser-facing URL) for consistency with\n // the server-side redirect check in router.beforeLoad.\n if (\n trimPathRight(router.latestLocation.publicHref) !==\n trimPathRight(nextLocation.publicHref)\n ) {\n router.commitLocation({ ...nextLocation, replace: true })\n }\n\n Solid.onCleanup(() => {\n unsub()\n })\n })\n\n // Try to load the initial location\n Solid.createTrackedEffect(() => {\n Solid.untrack(() => {\n if (\n // if we are hydrating from SSR, loading is triggered in ssr-client\n (typeof window !== 'undefined' && router.ssr) ||\n (mountLoadForRouter.router === router && mountLoadForRouter.mounted)\n ) {\n return\n }\n mountLoadForRouter = { router, mounted: true }\n const tryLoad = async () => {\n try {\n await router.load()\n } catch (err) {\n console.error(err)\n }\n }\n tryLoad()\n })\n })\n\n Solid.createEffect(\n () => [previousIsLoading(), isLoading()] as const,\n ([previousIsLoading, isLoading]) => {\n if (previousIsLoading.previous && !isLoading) {\n router.emit({\n type: 'onLoad',\n ...getLocationChangeInfo(router.state),\n })\n }\n },\n )\n\n Solid.createEffect(\n () => [isPagePending(), previousIsPagePending()] as const,\n ([isPagePending, previousIsPagePending]) => {\n // emit onBeforeRouteMount\n if (previousIsPagePending.previous && !isPagePending) {\n router.emit({\n type: 'onBeforeRouteMount',\n ...getLocationChangeInfo(router.state),\n })\n }\n },\n )\n\n Solid.createEffect(\n () => [isAnyPending(), previousIsAnyPending()] as const,\n ([isAnyPending, previousIsAnyPending]) => {\n if (previousIsAnyPending.previous && !isAnyPending) {\n const changeInfo = getLocationChangeInfo(router.state)\n router.emit({\n type: 'onResolved',\n ...changeInfo,\n })\n\n router.__store.setState((s) => ({\n ...s,\n status: 'idle',\n resolvedLocation: s.location,\n }))\n\n if (changeInfo.hrefChanged) {\n handleHashScroll(router)\n }\n }\n },\n )\n\n return null\n}\n"],"mappings":";;;;;;AAUA,SAAgBO,eAAe;CAC7B,MAAMC,SAASJ,WAAW;CAC1B,IAAIK,qBAAqB;EAAED;EAAQE,SAAS;EAAO;CACnD,MAAMC,YAAYN,eAAe,EAC/BO,SAAS,EAAED,gBAAgBA,WAC5B,CAAC;CAEF,MAAM,CAACE,wBAAwB,OAAO,MAAM;CAG5C,MAAMC,oBAAoBT,eAAe,EACvCO,SAASG,MAAMA,EAAEC,QAAQC,MAAMC,MAAMA,EAAEC,WAAW,UAAS,EAC5D,CAAC;CAEF,MAAMC,oBAAoBd,YAAYK,UAAU;CAEhD,MAAMU,qBACJV,WAAW,IAAIE,sBAAsB,IAAIC,mBAAmB;CAC9D,MAAMQ,uBAAuBhB,YAAYe,aAAa;CAEtD,MAAME,sBAAsBZ,WAAW,IAAIG,mBAAmB;CAC9D,MAAMU,wBAAwBlB,YAAYiB,cAAc;AAExDf,QAAOiB,mBAAmBC,OAAmC;AAC3D1B,QAAM4B,aAAa,MAAMF,GAAG;;AAK9B1B,OAAM6B,gBAAgB;EACpB,MAAMC,QAAQtB,OAAOuB,QAAQC,UAAUxB,OAAOyB,KAAK;AAMnDzB,SAAO0B,sBAAsB;EAE7B,MAAMC,eAAe3B,OAAO4B,cAAc;GACxCC,IAAI7B,OAAO8B,eAAeC;GAC1BC,QAAQ;GACRC,QAAQ;GACRC,MAAM;GACNC,OAAO;GACPC,wBAAwB;GACzB,CAAC;AAKF,MACEzC,cAAcK,OAAO8B,eAAeO,WAAW,KAC/C1C,cAAcgC,aAAaU,WAAW,CAEtCrC,QAAOsC,eAAe;GAAE,GAAGX;GAAcY,SAAS;GAAM,CAAC;AAG3D/C,QAAMgD,gBAAgB;AACpBlB,UAAO;IACP;GACF;AAGF9B,OAAMiD,0BAA0B;AAC9BjD,QAAMkD,cAAc;AAClB,OAEG,OAAOC,WAAW,eAAe3C,OAAO4C,OACxC3C,mBAAmBD,WAAWA,UAAUC,mBAAmBC,QAE5D;AAEFD,wBAAqB;IAAED;IAAQE,SAAS;IAAM;GAC9C,MAAM2C,UAAU,YAAY;AAC1B,QAAI;AACF,WAAM7C,OAAOyB,MAAM;aACZqB,KAAK;AACZC,aAAQC,MAAMF,IAAI;;;AAGtBD,YAAS;IACT;GACF;AAEFrD,OAAMyD,mBACE,CAACrC,mBAAmB,EAAET,WAAW,CAAC,GACvC,CAACS,mBAAmBT,eAAe;AAClC,MAAIS,kBAAkBuC,YAAY,CAAChD,UACjCH,QAAOoD,KAAK;GACVC,MAAM;GACN,GAAG5D,sBAAsBO,OAAOmC,MAAK;GACtC,CAAC;GAGP;AAED3C,OAAMyD,mBACE,CAAClC,eAAe,EAAEC,uBAAuB,CAAC,GAC/C,CAACD,eAAeC,2BAA2B;AAE1C,MAAIA,sBAAsBmC,YAAY,CAACpC,cACrCf,QAAOoD,KAAK;GACVC,MAAM;GACN,GAAG5D,sBAAsBO,OAAOmC,MAAK;GACtC,CAAC;GAGP;AAED3C,OAAMyD,mBACE,CAACpC,cAAc,EAAEC,sBAAsB,CAAC,GAC7C,CAACD,cAAcC,0BAA0B;AACxC,MAAIA,qBAAqBqC,YAAY,CAACtC,cAAc;GAClD,MAAMyC,aAAa7D,sBAAsBO,OAAOmC,MAAM;AACtDnC,UAAOoD,KAAK;IACVC,MAAM;IACN,GAAGC;IACJ,CAAC;AAEFtD,UAAOuD,QAAQC,UAAUjD,OAAO;IAC9B,GAAGA;IACHI,QAAQ;IACR8C,kBAAkBlD,EAAEmD;IACrB,EAAE;AAEH,OAAIJ,WAAWK,YACbjE,kBAAiBM,OAAO;;GAI/B;AAED,QAAO"}
|
package/dist/esm/awaited.js
CHANGED
|
@@ -1,43 +1,35 @@
|
|
|
1
|
+
import { TSR_DEFERRED_PROMISE, defer } from "@tanstack/router-core";
|
|
1
2
|
import { createComponent } from "@solidjs/web";
|
|
2
3
|
import * as Solid from "solid-js";
|
|
3
|
-
|
|
4
|
-
function useAwaited({
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
throw promise;
|
|
10
|
-
}
|
|
11
|
-
if (promise[TSR_DEFERRED_PROMISE].status === "error") {
|
|
12
|
-
throw promise[TSR_DEFERRED_PROMISE].error;
|
|
13
|
-
}
|
|
14
|
-
return [promise[TSR_DEFERRED_PROMISE].data, promise];
|
|
4
|
+
//#region src/awaited.tsx
|
|
5
|
+
function useAwaited({ promise: _promise }) {
|
|
6
|
+
const promise = defer(_promise);
|
|
7
|
+
if (promise[TSR_DEFERRED_PROMISE].status === "pending") throw promise;
|
|
8
|
+
if (promise[TSR_DEFERRED_PROMISE].status === "error") throw promise[TSR_DEFERRED_PROMISE].error;
|
|
9
|
+
return [promise[TSR_DEFERRED_PROMISE].data, promise];
|
|
15
10
|
}
|
|
16
11
|
function InnerAwait(props) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
});
|
|
20
|
-
return props.children(data);
|
|
12
|
+
const [data] = useAwaited({ promise: props.promise });
|
|
13
|
+
return props.children(data);
|
|
21
14
|
}
|
|
22
15
|
function Await(props) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
16
|
+
return createComponent(Solid.Loading, {
|
|
17
|
+
get fallback() {
|
|
18
|
+
return props.fallback;
|
|
19
|
+
},
|
|
20
|
+
get children() {
|
|
21
|
+
return createComponent(InnerAwait, {
|
|
22
|
+
get promise() {
|
|
23
|
+
return props.promise;
|
|
24
|
+
},
|
|
25
|
+
get children() {
|
|
26
|
+
return props.children;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
});
|
|
38
31
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=awaited.js.map
|
|
32
|
+
//#endregion
|
|
33
|
+
export { Await, useAwaited };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=awaited.js.map
|
package/dist/esm/awaited.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awaited.js","sources":["../../src/awaited.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { TSR_DEFERRED_PROMISE, defer } from '@tanstack/router-core'\nimport type { DeferredPromise } from '@tanstack/router-core'\nimport type { SolidNode } from './route'\n\nexport type AwaitOptions<T> = {\n promise: Promise<T>\n}\n\nexport function useAwaited<T>({\n promise: _promise,\n}: AwaitOptions<T>): [T, DeferredPromise<T>] {\n const promise = defer(_promise)\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'pending') {\n throw promise\n }\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'error') {\n throw promise[TSR_DEFERRED_PROMISE].error\n }\n\n return [promise[TSR_DEFERRED_PROMISE].data, promise]\n}\n\nfunction InnerAwait<T>(props: {\n promise: Promise<T>\n children: (res: T) => SolidNode\n}) {\n const [data] = useAwaited({ promise: props.promise })\n return props.children(data) as any\n}\n\nexport function Await<T>(\n props: AwaitOptions<T> & {\n fallback?: SolidNode\n children: (result: T) => SolidNode\n },\n) {\n return (\n <Solid.Loading fallback={props.fallback as any}>\n <InnerAwait promise={props.promise}>{props.children}</InnerAwait>\n </Solid.Loading>\n )\n}\n"],"
|
|
1
|
+
{"version":3,"file":"awaited.js","names":["Solid","TSR_DEFERRED_PROMISE","defer","DeferredPromise","SolidNode","AwaitOptions","promise","Promise","T","useAwaited","_promise","status","error","data","InnerAwait","props","children","res","Await","fallback","result","_$createComponent","Loading"],"sources":["../../src/awaited.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { TSR_DEFERRED_PROMISE, defer } from '@tanstack/router-core'\nimport type { DeferredPromise } from '@tanstack/router-core'\nimport type { SolidNode } from './route'\n\nexport type AwaitOptions<T> = {\n promise: Promise<T>\n}\n\nexport function useAwaited<T>({\n promise: _promise,\n}: AwaitOptions<T>): [T, DeferredPromise<T>] {\n const promise = defer(_promise)\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'pending') {\n throw promise\n }\n\n if (promise[TSR_DEFERRED_PROMISE].status === 'error') {\n throw promise[TSR_DEFERRED_PROMISE].error\n }\n\n return [promise[TSR_DEFERRED_PROMISE].data, promise]\n}\n\nfunction InnerAwait<T>(props: {\n promise: Promise<T>\n children: (res: T) => SolidNode\n}) {\n const [data] = useAwaited({ promise: props.promise })\n return props.children(data) as any\n}\n\nexport function Await<T>(\n props: AwaitOptions<T> & {\n fallback?: SolidNode\n children: (result: T) => SolidNode\n },\n) {\n return (\n <Solid.Loading fallback={props.fallback as any}>\n <InnerAwait promise={props.promise}>{props.children}</InnerAwait>\n </Solid.Loading>\n )\n}\n"],"mappings":";;;;AAUA,SAAgBS,WAAc,EAC5BH,SAASI,YACkC;CAC3C,MAAMJ,UAAUJ,MAAMQ,SAAS;AAE/B,KAAIJ,QAAQL,sBAAsBU,WAAW,UAC3C,OAAML;AAGR,KAAIA,QAAQL,sBAAsBU,WAAW,QAC3C,OAAML,QAAQL,sBAAsBW;AAGtC,QAAO,CAACN,QAAQL,sBAAsBY,MAAMP,QAAQ;;AAGtD,SAASQ,WAAcC,OAGpB;CACD,MAAM,CAACF,QAAQJ,WAAW,EAAEH,SAASS,MAAMT,SAAS,CAAC;AACrD,QAAOS,MAAMC,SAASH,KAAK;;AAG7B,SAAgBK,MACdH,OAIA;AACA,QAAAM,gBACGrB,MAAMsB,SAAO;EAAA,IAACH,WAAQ;AAAA,UAAEJ,MAAMI;;EAAe,IAAAH,WAAA;AAAA,UAAAK,gBAC3CP,YAAU;IAAA,IAACR,UAAO;AAAA,YAAES,MAAMT;;IAAO,IAAAU,WAAA;AAAA,YAAGD,MAAMC;;IAAQ,CAAA;;EAAA,CAAA"}
|