@depup/tanstack__react-router 1.166.4-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +32 -0
- package/dist/cjs/Asset.cjs +177 -0
- package/dist/cjs/Asset.cjs.map +1 -0
- package/dist/cjs/Asset.d.cts +5 -0
- package/dist/cjs/CatchBoundary.cjs +114 -0
- package/dist/cjs/CatchBoundary.cjs.map +1 -0
- package/dist/cjs/CatchBoundary.d.cts +12 -0
- package/dist/cjs/ClientOnly.cjs +21 -0
- package/dist/cjs/ClientOnly.cjs.map +1 -0
- package/dist/cjs/ClientOnly.d.cts +49 -0
- package/dist/cjs/HeadContent.cjs +15 -0
- package/dist/cjs/HeadContent.cjs.map +1 -0
- package/dist/cjs/HeadContent.d.cts +6 -0
- package/dist/cjs/HeadContent.dev.cjs +41 -0
- package/dist/cjs/HeadContent.dev.cjs.map +1 -0
- package/dist/cjs/HeadContent.dev.d.cts +10 -0
- package/dist/cjs/Match.cjs +255 -0
- package/dist/cjs/Match.cjs.map +1 -0
- package/dist/cjs/Match.d.cts +14 -0
- package/dist/cjs/Matches.cjs +138 -0
- package/dist/cjs/Matches.cjs.map +1 -0
- package/dist/cjs/Matches.d.cts +68 -0
- package/dist/cjs/RouterProvider.cjs +32 -0
- package/dist/cjs/RouterProvider.cjs.map +1 -0
- package/dist/cjs/RouterProvider.d.cts +23 -0
- package/dist/cjs/SafeFragment.cjs +8 -0
- package/dist/cjs/SafeFragment.cjs.map +1 -0
- package/dist/cjs/SafeFragment.d.cts +1 -0
- package/dist/cjs/ScriptOnce.cjs +22 -0
- package/dist/cjs/ScriptOnce.cjs.map +1 -0
- package/dist/cjs/ScriptOnce.d.cts +6 -0
- package/dist/cjs/Scripts.cjs +56 -0
- package/dist/cjs/Scripts.cjs.map +1 -0
- package/dist/cjs/Scripts.d.cts +5 -0
- package/dist/cjs/ScrollRestoration.cjs +38 -0
- package/dist/cjs/ScrollRestoration.cjs.map +1 -0
- package/dist/cjs/ScrollRestoration.d.cts +14 -0
- package/dist/cjs/Transitioner.cjs +119 -0
- package/dist/cjs/Transitioner.cjs.map +1 -0
- package/dist/cjs/Transitioner.d.cts +1 -0
- package/dist/cjs/awaited.cjs +51 -0
- package/dist/cjs/awaited.cjs.map +1 -0
- package/dist/cjs/awaited.d.cts +14 -0
- package/dist/cjs/fileRoute.cjs +109 -0
- package/dist/cjs/fileRoute.cjs.map +1 -0
- package/dist/cjs/fileRoute.d.cts +87 -0
- package/dist/cjs/headContentUtils.cjs +185 -0
- package/dist/cjs/headContentUtils.cjs.map +1 -0
- package/dist/cjs/headContentUtils.d.cts +7 -0
- package/dist/cjs/history.d.cts +8 -0
- package/dist/cjs/index.cjs +241 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/cjs/index.d.cts +51 -0
- package/dist/cjs/index.dev.cjs +241 -0
- package/dist/cjs/index.dev.cjs.map +1 -0
- package/dist/cjs/index.dev.d.cts +2 -0
- package/dist/cjs/lazyRouteComponent.cjs +70 -0
- package/dist/cjs/lazyRouteComponent.cjs.map +1 -0
- package/dist/cjs/lazyRouteComponent.d.cts +11 -0
- package/dist/cjs/link.cjs +573 -0
- package/dist/cjs/link.cjs.map +1 -0
- package/dist/cjs/link.d.cts +98 -0
- package/dist/cjs/matchContext.cjs +27 -0
- package/dist/cjs/matchContext.cjs.map +1 -0
- package/dist/cjs/matchContext.d.cts +3 -0
- package/dist/cjs/not-found.cjs +38 -0
- package/dist/cjs/not-found.cjs.map +1 -0
- package/dist/cjs/not-found.d.cts +9 -0
- package/dist/cjs/renderRouteNotFound.cjs +22 -0
- package/dist/cjs/renderRouteNotFound.cjs.map +1 -0
- package/dist/cjs/renderRouteNotFound.d.cts +10 -0
- package/dist/cjs/route.cjs +198 -0
- package/dist/cjs/route.cjs.map +1 -0
- package/dist/cjs/route.d.cts +142 -0
- package/dist/cjs/router.cjs +22 -0
- package/dist/cjs/router.cjs.map +1 -0
- package/dist/cjs/router.d.cts +83 -0
- package/dist/cjs/routerContext.cjs +23 -0
- package/dist/cjs/routerContext.cjs.map +1 -0
- package/dist/cjs/routerContext.d.cts +3 -0
- package/dist/cjs/scroll-restoration.cjs +39 -0
- package/dist/cjs/scroll-restoration.cjs.map +1 -0
- package/dist/cjs/scroll-restoration.d.cts +1 -0
- package/dist/cjs/ssr/RouterClient.cjs +25 -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 +9 -0
- package/dist/cjs/ssr/RouterServer.cjs.map +1 -0
- package/dist/cjs/ssr/RouterServer.d.cts +4 -0
- package/dist/cjs/ssr/client.cjs +12 -0
- package/dist/cjs/ssr/client.cjs.map +1 -0
- package/dist/cjs/ssr/client.d.cts +2 -0
- package/dist/cjs/ssr/defaultRenderHandler.cjs +15 -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 +16 -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 +73 -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 +31 -0
- package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -0
- package/dist/cjs/ssr/renderRouterToString.d.cts +7 -0
- package/dist/cjs/ssr/serializer.d.cts +6 -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/structuralSharing.d.cts +8 -0
- package/dist/cjs/typePrimitives.d.cts +16 -0
- package/dist/cjs/useBlocker.cjs +171 -0
- package/dist/cjs/useBlocker.cjs.map +1 -0
- package/dist/cjs/useBlocker.d.cts +66 -0
- package/dist/cjs/useCanGoBack.cjs +8 -0
- package/dist/cjs/useCanGoBack.cjs.map +1 -0
- package/dist/cjs/useCanGoBack.d.cts +1 -0
- package/dist/cjs/useLoaderData.cjs +15 -0
- package/dist/cjs/useLoaderData.cjs.map +1 -0
- package/dist/cjs/useLoaderData.d.cts +19 -0
- package/dist/cjs/useLoaderDeps.cjs +14 -0
- package/dist/cjs/useLoaderDeps.cjs.map +1 -0
- package/dist/cjs/useLoaderDeps.d.cts +19 -0
- package/dist/cjs/useLocation.cjs +10 -0
- package/dist/cjs/useLocation.cjs.map +1 -0
- package/dist/cjs/useLocation.d.cts +18 -0
- package/dist/cjs/useMatch.cjs +47 -0
- package/dist/cjs/useMatch.cjs.map +1 -0
- package/dist/cjs/useMatch.d.cts +14 -0
- package/dist/cjs/useNavigate.cjs +49 -0
- package/dist/cjs/useNavigate.cjs.map +1 -0
- package/dist/cjs/useNavigate.d.cts +28 -0
- package/dist/cjs/useParams.cjs +17 -0
- package/dist/cjs/useParams.cjs.map +1 -0
- package/dist/cjs/useParams.d.cts +21 -0
- package/dist/cjs/useRouteContext.cjs +11 -0
- package/dist/cjs/useRouteContext.cjs.map +1 -0
- package/dist/cjs/useRouteContext.d.cts +3 -0
- package/dist/cjs/useRouter.cjs +32 -0
- package/dist/cjs/useRouter.cjs.map +1 -0
- package/dist/cjs/useRouter.d.cts +14 -0
- package/dist/cjs/useRouterState.cjs +38 -0
- package/dist/cjs/useRouterState.cjs.map +1 -0
- package/dist/cjs/useRouterState.d.cts +20 -0
- package/dist/cjs/useSearch.cjs +16 -0
- package/dist/cjs/useSearch.cjs.map +1 -0
- package/dist/cjs/useSearch.d.cts +21 -0
- package/dist/cjs/utils.cjs +62 -0
- package/dist/cjs/utils.cjs.map +1 -0
- package/dist/cjs/utils.d.cts +54 -0
- package/dist/esm/Asset.d.ts +5 -0
- package/dist/esm/Asset.js +160 -0
- package/dist/esm/Asset.js.map +1 -0
- package/dist/esm/CatchBoundary.d.ts +12 -0
- package/dist/esm/CatchBoundary.js +97 -0
- package/dist/esm/CatchBoundary.js.map +1 -0
- package/dist/esm/ClientOnly.d.ts +49 -0
- package/dist/esm/ClientOnly.js +21 -0
- package/dist/esm/ClientOnly.js.map +1 -0
- package/dist/esm/HeadContent.d.ts +6 -0
- package/dist/esm/HeadContent.dev.d.ts +10 -0
- package/dist/esm/HeadContent.dev.js +25 -0
- package/dist/esm/HeadContent.dev.js.map +1 -0
- package/dist/esm/HeadContent.js +15 -0
- package/dist/esm/HeadContent.js.map +1 -0
- package/dist/esm/Match.d.ts +14 -0
- package/dist/esm/Match.js +238 -0
- package/dist/esm/Match.js.map +1 -0
- package/dist/esm/Matches.d.ts +68 -0
- package/dist/esm/Matches.js +121 -0
- package/dist/esm/Matches.js.map +1 -0
- package/dist/esm/RouterProvider.d.ts +23 -0
- package/dist/esm/RouterProvider.js +32 -0
- package/dist/esm/RouterProvider.js.map +1 -0
- package/dist/esm/SafeFragment.d.ts +1 -0
- package/dist/esm/SafeFragment.js +8 -0
- package/dist/esm/SafeFragment.js.map +1 -0
- package/dist/esm/ScriptOnce.d.ts +6 -0
- package/dist/esm/ScriptOnce.js +22 -0
- package/dist/esm/ScriptOnce.js.map +1 -0
- package/dist/esm/Scripts.d.ts +5 -0
- package/dist/esm/Scripts.js +56 -0
- package/dist/esm/Scripts.js.map +1 -0
- package/dist/esm/ScrollRestoration.d.ts +14 -0
- package/dist/esm/ScrollRestoration.js +38 -0
- package/dist/esm/ScrollRestoration.js.map +1 -0
- package/dist/esm/Transitioner.d.ts +1 -0
- package/dist/esm/Transitioner.js +102 -0
- package/dist/esm/Transitioner.js.map +1 -0
- package/dist/esm/awaited.d.ts +14 -0
- package/dist/esm/awaited.js +34 -0
- package/dist/esm/awaited.js.map +1 -0
- package/dist/esm/fileRoute.d.ts +87 -0
- package/dist/esm/fileRoute.js +109 -0
- package/dist/esm/fileRoute.js.map +1 -0
- package/dist/esm/headContentUtils.d.ts +7 -0
- package/dist/esm/headContentUtils.js +168 -0
- package/dist/esm/headContentUtils.js.map +1 -0
- package/dist/esm/history.d.ts +8 -0
- package/dist/esm/index.d.ts +51 -0
- package/dist/esm/index.dev.d.ts +2 -0
- package/dist/esm/index.dev.js +133 -0
- package/dist/esm/index.dev.js.map +1 -0
- package/dist/esm/index.js +133 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lazyRouteComponent.d.ts +11 -0
- package/dist/esm/lazyRouteComponent.js +53 -0
- package/dist/esm/lazyRouteComponent.js.map +1 -0
- package/dist/esm/link.d.ts +98 -0
- package/dist/esm/link.js +556 -0
- package/dist/esm/link.js.map +1 -0
- package/dist/esm/matchContext.d.ts +3 -0
- package/dist/esm/matchContext.js +10 -0
- package/dist/esm/matchContext.js.map +1 -0
- package/dist/esm/not-found.d.ts +9 -0
- package/dist/esm/not-found.js +38 -0
- package/dist/esm/not-found.js.map +1 -0
- package/dist/esm/renderRouteNotFound.d.ts +10 -0
- package/dist/esm/renderRouteNotFound.js +22 -0
- package/dist/esm/renderRouteNotFound.js.map +1 -0
- package/dist/esm/route.d.ts +142 -0
- package/dist/esm/route.js +198 -0
- package/dist/esm/route.js.map +1 -0
- package/dist/esm/router.d.ts +83 -0
- package/dist/esm/router.js +22 -0
- package/dist/esm/router.js.map +1 -0
- package/dist/esm/routerContext.d.ts +3 -0
- package/dist/esm/routerContext.js +6 -0
- package/dist/esm/routerContext.js.map +1 -0
- package/dist/esm/scroll-restoration.d.ts +1 -0
- package/dist/esm/scroll-restoration.js +39 -0
- package/dist/esm/scroll-restoration.js.map +1 -0
- package/dist/esm/ssr/RouterClient.d.ts +4 -0
- package/dist/esm/ssr/RouterClient.js +25 -0
- package/dist/esm/ssr/RouterClient.js.map +1 -0
- package/dist/esm/ssr/RouterServer.d.ts +4 -0
- package/dist/esm/ssr/RouterServer.js +9 -0
- package/dist/esm/ssr/RouterServer.js.map +1 -0
- package/dist/esm/ssr/client.d.ts +2 -0
- package/dist/esm/ssr/client.js +6 -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 +15 -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 +16 -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 +73 -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 +31 -0
- package/dist/esm/ssr/renderRouterToString.js.map +1 -0
- package/dist/esm/ssr/serializer.d.ts +6 -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/structuralSharing.d.ts +8 -0
- package/dist/esm/typePrimitives.d.ts +16 -0
- package/dist/esm/useBlocker.d.ts +66 -0
- package/dist/esm/useBlocker.js +154 -0
- package/dist/esm/useBlocker.js.map +1 -0
- package/dist/esm/useCanGoBack.d.ts +1 -0
- package/dist/esm/useCanGoBack.js +8 -0
- package/dist/esm/useCanGoBack.js.map +1 -0
- package/dist/esm/useLoaderData.d.ts +19 -0
- package/dist/esm/useLoaderData.js +15 -0
- package/dist/esm/useLoaderData.js.map +1 -0
- package/dist/esm/useLoaderDeps.d.ts +19 -0
- package/dist/esm/useLoaderDeps.js +14 -0
- package/dist/esm/useLoaderDeps.js.map +1 -0
- package/dist/esm/useLocation.d.ts +18 -0
- package/dist/esm/useLocation.js +10 -0
- package/dist/esm/useLocation.js.map +1 -0
- package/dist/esm/useMatch.d.ts +14 -0
- package/dist/esm/useMatch.js +30 -0
- package/dist/esm/useMatch.js.map +1 -0
- package/dist/esm/useNavigate.d.ts +28 -0
- package/dist/esm/useNavigate.js +32 -0
- package/dist/esm/useNavigate.js.map +1 -0
- package/dist/esm/useParams.d.ts +21 -0
- package/dist/esm/useParams.js +17 -0
- package/dist/esm/useParams.js.map +1 -0
- package/dist/esm/useRouteContext.d.ts +3 -0
- package/dist/esm/useRouteContext.js +11 -0
- package/dist/esm/useRouteContext.js.map +1 -0
- package/dist/esm/useRouter.d.ts +14 -0
- package/dist/esm/useRouter.js +15 -0
- package/dist/esm/useRouter.js.map +1 -0
- package/dist/esm/useRouterState.d.ts +20 -0
- package/dist/esm/useRouterState.js +38 -0
- package/dist/esm/useRouterState.js.map +1 -0
- package/dist/esm/useSearch.d.ts +21 -0
- package/dist/esm/useSearch.js +16 -0
- package/dist/esm/useSearch.js.map +1 -0
- package/dist/esm/utils.d.ts +54 -0
- package/dist/esm/utils.js +45 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/llms/index.d.ts +3 -0
- package/dist/llms/index.js +43 -0
- package/dist/llms/rules/api.d.ts +2 -0
- package/dist/llms/rules/api.js +4612 -0
- package/dist/llms/rules/guide.d.ts +2 -0
- package/dist/llms/rules/guide.js +10690 -0
- package/dist/llms/rules/installation.d.ts +2 -0
- package/dist/llms/rules/installation.js +1285 -0
- package/dist/llms/rules/routing.d.ts +2 -0
- package/dist/llms/rules/routing.js +1984 -0
- package/dist/llms/rules/setup-and-architecture.d.ts +2 -0
- package/dist/llms/rules/setup-and-architecture.js +920 -0
- package/package.json +142 -0
- package/src/Asset.tsx +219 -0
- package/src/CatchBoundary.tsx +120 -0
- package/src/ClientOnly.tsx +68 -0
- package/src/HeadContent.dev.tsx +46 -0
- package/src/HeadContent.tsx +22 -0
- package/src/Match.tsx +360 -0
- package/src/Matches.tsx +313 -0
- package/src/RouterProvider.tsx +92 -0
- package/src/SafeFragment.tsx +5 -0
- package/src/ScriptOnce.tsx +21 -0
- package/src/Scripts.tsx +80 -0
- package/src/ScrollRestoration.tsx +69 -0
- package/src/Transitioner.tsx +134 -0
- package/src/awaited.tsx +55 -0
- package/src/fileRoute.ts +313 -0
- package/src/headContentUtils.tsx +217 -0
- package/src/history.ts +9 -0
- package/src/index.dev.tsx +6 -0
- package/src/index.tsx +341 -0
- package/src/lazyRouteComponent.tsx +96 -0
- package/src/link.tsx +984 -0
- package/src/matchContext.tsx +8 -0
- package/src/not-found.tsx +43 -0
- package/src/renderRouteNotFound.tsx +35 -0
- package/src/route.tsx +740 -0
- package/src/router.ts +127 -0
- package/src/routerContext.tsx +4 -0
- package/src/scroll-restoration.tsx +45 -0
- package/src/ssr/RouterClient.tsx +22 -0
- package/src/ssr/RouterServer.tsx +9 -0
- package/src/ssr/client.ts +2 -0
- package/src/ssr/defaultRenderHandler.tsx +12 -0
- package/src/ssr/defaultStreamHandler.tsx +13 -0
- package/src/ssr/renderRouterToStream.tsx +90 -0
- package/src/ssr/renderRouterToString.tsx +36 -0
- package/src/ssr/serializer.ts +7 -0
- package/src/ssr/server.ts +6 -0
- package/src/structuralSharing.ts +47 -0
- package/src/typePrimitives.ts +84 -0
- package/src/useBlocker.tsx +320 -0
- package/src/useCanGoBack.ts +5 -0
- package/src/useLoaderData.tsx +91 -0
- package/src/useLoaderDeps.tsx +69 -0
- package/src/useLocation.tsx +52 -0
- package/src/useMatch.tsx +123 -0
- package/src/useNavigate.tsx +78 -0
- package/src/useParams.tsx +107 -0
- package/src/useRouteContext.ts +30 -0
- package/src/useRouter.tsx +25 -0
- package/src/useRouterState.tsx +86 -0
- package/src/useSearch.tsx +105 -0
- package/src/utils.ts +125 -0
package/package.json
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@depup/tanstack__react-router",
|
|
3
|
+
"version": "1.166.4-depup.0",
|
|
4
|
+
"description": "[DepUp] Modern and scalable routing for React applications",
|
|
5
|
+
"author": "Tanner Linsley",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/TanStack/router.git",
|
|
10
|
+
"directory": "packages/react-router"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://tanstack.com/router",
|
|
13
|
+
"funding": {
|
|
14
|
+
"type": "github",
|
|
15
|
+
"url": "https://github.com/sponsors/tannerlinsley"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"depup",
|
|
19
|
+
"dependency-bumped",
|
|
20
|
+
"updated-deps",
|
|
21
|
+
"@tanstack/react-router",
|
|
22
|
+
"react",
|
|
23
|
+
"location",
|
|
24
|
+
"router",
|
|
25
|
+
"routing",
|
|
26
|
+
"async",
|
|
27
|
+
"async router",
|
|
28
|
+
"typescript"
|
|
29
|
+
],
|
|
30
|
+
"type": "module",
|
|
31
|
+
"types": "dist/esm/index.d.ts",
|
|
32
|
+
"main": "dist/cjs/index.cjs",
|
|
33
|
+
"module": "dist/esm/index.js",
|
|
34
|
+
"exports": {
|
|
35
|
+
".": {
|
|
36
|
+
"import": {
|
|
37
|
+
"types": "./dist/esm/index.d.ts",
|
|
38
|
+
"development": "./dist/esm/index.dev.js",
|
|
39
|
+
"default": "./dist/esm/index.js"
|
|
40
|
+
},
|
|
41
|
+
"require": {
|
|
42
|
+
"types": "./dist/cjs/index.d.cts",
|
|
43
|
+
"development": "./dist/cjs/index.dev.cjs",
|
|
44
|
+
"default": "./dist/cjs/index.cjs"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"./ssr/server": {
|
|
48
|
+
"import": {
|
|
49
|
+
"types": "./dist/esm/ssr/server.d.ts",
|
|
50
|
+
"default": "./dist/esm/ssr/server.js"
|
|
51
|
+
},
|
|
52
|
+
"require": {
|
|
53
|
+
"types": "./dist/cjs/ssr/server.d.cts",
|
|
54
|
+
"default": "./dist/cjs/ssr/server.cjs"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"./ssr/client": {
|
|
58
|
+
"import": {
|
|
59
|
+
"types": "./dist/esm/ssr/client.d.ts",
|
|
60
|
+
"default": "./dist/esm/ssr/client.js"
|
|
61
|
+
},
|
|
62
|
+
"require": {
|
|
63
|
+
"types": "./dist/cjs/ssr/client.d.cts",
|
|
64
|
+
"default": "./dist/cjs/ssr/client.cjs"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"./package.json": "./package.json",
|
|
68
|
+
"./llms": {
|
|
69
|
+
"import": {
|
|
70
|
+
"types": "./dist/llms/index.d.ts",
|
|
71
|
+
"default": "./dist/llms/index.js"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"sideEffects": false,
|
|
76
|
+
"files": [
|
|
77
|
+
"dist",
|
|
78
|
+
"src"
|
|
79
|
+
],
|
|
80
|
+
"engines": {
|
|
81
|
+
"node": ">=20.19"
|
|
82
|
+
},
|
|
83
|
+
"dependencies": {
|
|
84
|
+
"@tanstack/react-store": "^0.9.2",
|
|
85
|
+
"isbot": "^5.1.35",
|
|
86
|
+
"tiny-invariant": "^1.3.3",
|
|
87
|
+
"tiny-warning": "^1.0.3",
|
|
88
|
+
"@tanstack/history": "1.161.4",
|
|
89
|
+
"@tanstack/router-core": "1.166.4"
|
|
90
|
+
},
|
|
91
|
+
"devDependencies": {
|
|
92
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
93
|
+
"@testing-library/react": "^16.2.0",
|
|
94
|
+
"@vitejs/plugin-react": "^4.3.4",
|
|
95
|
+
"combinate": "^1.1.11",
|
|
96
|
+
"react": "^19.0.0",
|
|
97
|
+
"react-dom": "^19.0.0",
|
|
98
|
+
"vibe-rules": "^0.2.57",
|
|
99
|
+
"vite": "*",
|
|
100
|
+
"zod": "^3.24.2"
|
|
101
|
+
},
|
|
102
|
+
"peerDependencies": {
|
|
103
|
+
"react": ">=18.0.0 || >=19.0.0",
|
|
104
|
+
"react-dom": ">=18.0.0 || >=19.0.0"
|
|
105
|
+
},
|
|
106
|
+
"scripts": {
|
|
107
|
+
"clean": "rimraf ./dist && rimraf ./coverage",
|
|
108
|
+
"test:eslint": "eslint",
|
|
109
|
+
"test:types": "pnpm run \"/^test:types:ts[0-9]{2}$/\"",
|
|
110
|
+
"test:types:ts54": "node ../../node_modules/typescript54/lib/tsc.js -p tsconfig.legacy.json",
|
|
111
|
+
"test:types:ts55": "node ../../node_modules/typescript55/lib/tsc.js -p tsconfig.legacy.json",
|
|
112
|
+
"test:types:ts56": "node ../../node_modules/typescript56/lib/tsc.js -p tsconfig.legacy.json",
|
|
113
|
+
"test:types:ts57": "node ../../node_modules/typescript57/lib/tsc.js -p tsconfig.legacy.json",
|
|
114
|
+
"test:types:ts58": "node ../../node_modules/typescript58/lib/tsc.js -p tsconfig.legacy.json",
|
|
115
|
+
"test:types:ts59": "tsc -p tsconfig.legacy.json",
|
|
116
|
+
"test:unit": "vitest",
|
|
117
|
+
"test:unit:dev": "pnpm run test:unit --watch --hideSkippedTests",
|
|
118
|
+
"test:perf": "vitest bench",
|
|
119
|
+
"test:perf:dev": "pnpm run test:perf --watch --hideSkippedTests",
|
|
120
|
+
"test:build": "publint --strict && attw --ignore-rules no-resolution --pack .",
|
|
121
|
+
"build": "pnpm run build:lib && pnpm run build:llm",
|
|
122
|
+
"build:lib": "vite build",
|
|
123
|
+
"build:llm": "node ../../scripts/llms-generate.mjs react-router && tsc -p ./llms/tsconfig.json"
|
|
124
|
+
},
|
|
125
|
+
"depup": {
|
|
126
|
+
"changes": {
|
|
127
|
+
"@tanstack/react-store": {
|
|
128
|
+
"from": "^0.9.1",
|
|
129
|
+
"to": "^0.9.2"
|
|
130
|
+
},
|
|
131
|
+
"isbot": {
|
|
132
|
+
"from": "^5.1.22",
|
|
133
|
+
"to": "^5.1.35"
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"depsUpdated": 2,
|
|
137
|
+
"originalPackage": "@tanstack/react-router",
|
|
138
|
+
"originalVersion": "1.166.4",
|
|
139
|
+
"processedAt": "2026-03-09T20:26:17.368Z",
|
|
140
|
+
"smokeTest": "passed"
|
|
141
|
+
}
|
|
142
|
+
}
|
package/src/Asset.tsx
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import { isServer } from '@tanstack/router-core/isServer'
|
|
3
|
+
import { useRouter } from './useRouter'
|
|
4
|
+
import { useHydrated } from './ClientOnly'
|
|
5
|
+
import type { RouterManagedTag } from '@tanstack/router-core'
|
|
6
|
+
|
|
7
|
+
interface ScriptAttrs {
|
|
8
|
+
[key: string]: string | boolean | undefined
|
|
9
|
+
src?: string
|
|
10
|
+
suppressHydrationWarning?: boolean
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function Asset({
|
|
14
|
+
tag,
|
|
15
|
+
attrs,
|
|
16
|
+
children,
|
|
17
|
+
nonce,
|
|
18
|
+
}: RouterManagedTag & { nonce?: string }): React.ReactElement | null {
|
|
19
|
+
switch (tag) {
|
|
20
|
+
case 'title':
|
|
21
|
+
return (
|
|
22
|
+
<title {...attrs} suppressHydrationWarning>
|
|
23
|
+
{children}
|
|
24
|
+
</title>
|
|
25
|
+
)
|
|
26
|
+
case 'meta':
|
|
27
|
+
return <meta {...attrs} suppressHydrationWarning />
|
|
28
|
+
case 'link':
|
|
29
|
+
return <link {...attrs} nonce={nonce} suppressHydrationWarning />
|
|
30
|
+
case 'style':
|
|
31
|
+
return (
|
|
32
|
+
<style
|
|
33
|
+
{...attrs}
|
|
34
|
+
dangerouslySetInnerHTML={{ __html: children as string }}
|
|
35
|
+
nonce={nonce}
|
|
36
|
+
/>
|
|
37
|
+
)
|
|
38
|
+
case 'script':
|
|
39
|
+
return <Script attrs={attrs}>{children}</Script>
|
|
40
|
+
default:
|
|
41
|
+
return null
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function Script({
|
|
46
|
+
attrs,
|
|
47
|
+
children,
|
|
48
|
+
}: {
|
|
49
|
+
attrs?: ScriptAttrs
|
|
50
|
+
children?: string
|
|
51
|
+
}) {
|
|
52
|
+
const router = useRouter()
|
|
53
|
+
const hydrated = useHydrated()
|
|
54
|
+
const dataScript =
|
|
55
|
+
typeof attrs?.type === 'string' &&
|
|
56
|
+
attrs.type !== '' &&
|
|
57
|
+
attrs.type !== 'text/javascript' &&
|
|
58
|
+
attrs.type !== 'module'
|
|
59
|
+
|
|
60
|
+
if (
|
|
61
|
+
process.env.NODE_ENV !== 'production' &&
|
|
62
|
+
attrs?.src &&
|
|
63
|
+
typeof children === 'string' &&
|
|
64
|
+
children.trim().length
|
|
65
|
+
) {
|
|
66
|
+
console.warn(
|
|
67
|
+
'[TanStack Router] <Script> received both `src` and `children`. The `children` content will be ignored. Remove `children` or remove `src`.',
|
|
68
|
+
)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
React.useEffect(() => {
|
|
72
|
+
if (dataScript) return
|
|
73
|
+
|
|
74
|
+
if (attrs?.src) {
|
|
75
|
+
const normSrc = (() => {
|
|
76
|
+
try {
|
|
77
|
+
const base = document.baseURI || window.location.href
|
|
78
|
+
return new URL(attrs.src, base).href
|
|
79
|
+
} catch {
|
|
80
|
+
return attrs.src
|
|
81
|
+
}
|
|
82
|
+
})()
|
|
83
|
+
const existingScript = Array.from(
|
|
84
|
+
document.querySelectorAll('script[src]'),
|
|
85
|
+
).find((el) => (el as HTMLScriptElement).src === normSrc)
|
|
86
|
+
|
|
87
|
+
if (existingScript) {
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const script = document.createElement('script')
|
|
92
|
+
|
|
93
|
+
for (const [key, value] of Object.entries(attrs)) {
|
|
94
|
+
if (
|
|
95
|
+
key !== 'suppressHydrationWarning' &&
|
|
96
|
+
value !== undefined &&
|
|
97
|
+
value !== false
|
|
98
|
+
) {
|
|
99
|
+
script.setAttribute(
|
|
100
|
+
key,
|
|
101
|
+
typeof value === 'boolean' ? '' : String(value),
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
document.head.appendChild(script)
|
|
107
|
+
|
|
108
|
+
return () => {
|
|
109
|
+
if (script.parentNode) {
|
|
110
|
+
script.parentNode.removeChild(script)
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (typeof children === 'string') {
|
|
116
|
+
const typeAttr =
|
|
117
|
+
typeof attrs?.type === 'string' ? attrs.type : 'text/javascript'
|
|
118
|
+
const nonceAttr =
|
|
119
|
+
typeof attrs?.nonce === 'string' ? attrs.nonce : undefined
|
|
120
|
+
const existingScript = Array.from(
|
|
121
|
+
document.querySelectorAll('script:not([src])'),
|
|
122
|
+
).find((el) => {
|
|
123
|
+
if (!(el instanceof HTMLScriptElement)) return false
|
|
124
|
+
const sType = el.getAttribute('type') ?? 'text/javascript'
|
|
125
|
+
const sNonce = el.getAttribute('nonce') ?? undefined
|
|
126
|
+
return (
|
|
127
|
+
el.textContent === children &&
|
|
128
|
+
sType === typeAttr &&
|
|
129
|
+
sNonce === nonceAttr
|
|
130
|
+
)
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
if (existingScript) {
|
|
134
|
+
return
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const script = document.createElement('script')
|
|
138
|
+
script.textContent = children
|
|
139
|
+
|
|
140
|
+
if (attrs) {
|
|
141
|
+
for (const [key, value] of Object.entries(attrs)) {
|
|
142
|
+
if (
|
|
143
|
+
key !== 'suppressHydrationWarning' &&
|
|
144
|
+
value !== undefined &&
|
|
145
|
+
value !== false
|
|
146
|
+
) {
|
|
147
|
+
script.setAttribute(
|
|
148
|
+
key,
|
|
149
|
+
typeof value === 'boolean' ? '' : String(value),
|
|
150
|
+
)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
document.head.appendChild(script)
|
|
156
|
+
|
|
157
|
+
return () => {
|
|
158
|
+
if (script.parentNode) {
|
|
159
|
+
script.parentNode.removeChild(script)
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return undefined
|
|
165
|
+
}, [attrs, children, dataScript])
|
|
166
|
+
|
|
167
|
+
// --- Server rendering ---
|
|
168
|
+
if (isServer ?? router.isServer) {
|
|
169
|
+
if (attrs?.src) {
|
|
170
|
+
return <script {...attrs} suppressHydrationWarning />
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (typeof children === 'string') {
|
|
174
|
+
return (
|
|
175
|
+
<script
|
|
176
|
+
{...attrs}
|
|
177
|
+
dangerouslySetInnerHTML={{ __html: children }}
|
|
178
|
+
suppressHydrationWarning
|
|
179
|
+
/>
|
|
180
|
+
)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return null
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// --- Client rendering ---
|
|
187
|
+
|
|
188
|
+
// Data scripts (e.g. application/ld+json) are rendered in the tree;
|
|
189
|
+
// the useEffect intentionally skips them.
|
|
190
|
+
if (dataScript && typeof children === 'string') {
|
|
191
|
+
return (
|
|
192
|
+
<script
|
|
193
|
+
{...attrs}
|
|
194
|
+
suppressHydrationWarning
|
|
195
|
+
dangerouslySetInnerHTML={{ __html: children }}
|
|
196
|
+
/>
|
|
197
|
+
)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// During hydration (before useEffect has fired), render the script element
|
|
201
|
+
// to match the server-rendered HTML and avoid structural hydration mismatches.
|
|
202
|
+
// After hydration, return null — the useEffect handles imperative injection.
|
|
203
|
+
if (!hydrated) {
|
|
204
|
+
if (attrs?.src) {
|
|
205
|
+
return <script {...attrs} suppressHydrationWarning />
|
|
206
|
+
}
|
|
207
|
+
if (typeof children === 'string') {
|
|
208
|
+
return (
|
|
209
|
+
<script
|
|
210
|
+
{...attrs}
|
|
211
|
+
dangerouslySetInnerHTML={{ __html: children }}
|
|
212
|
+
suppressHydrationWarning
|
|
213
|
+
/>
|
|
214
|
+
)
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return null
|
|
219
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import type { ErrorRouteComponent } from './route'
|
|
3
|
+
import type { ErrorInfo } from 'react'
|
|
4
|
+
|
|
5
|
+
export function CatchBoundary(props: {
|
|
6
|
+
getResetKey: () => number | string
|
|
7
|
+
children: React.ReactNode
|
|
8
|
+
errorComponent?: ErrorRouteComponent
|
|
9
|
+
onCatch?: (error: Error, errorInfo: ErrorInfo) => void
|
|
10
|
+
}) {
|
|
11
|
+
const errorComponent = props.errorComponent ?? ErrorComponent
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<CatchBoundaryImpl
|
|
15
|
+
getResetKey={props.getResetKey}
|
|
16
|
+
onCatch={props.onCatch}
|
|
17
|
+
children={({ error, reset }) => {
|
|
18
|
+
if (error) {
|
|
19
|
+
return React.createElement(errorComponent, {
|
|
20
|
+
error,
|
|
21
|
+
reset,
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return props.children
|
|
26
|
+
}}
|
|
27
|
+
/>
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
class CatchBoundaryImpl extends React.Component<{
|
|
32
|
+
getResetKey: () => number | string
|
|
33
|
+
children: (props: {
|
|
34
|
+
error: Error | null
|
|
35
|
+
reset: () => void
|
|
36
|
+
}) => React.ReactNode
|
|
37
|
+
onCatch?: (error: Error, errorInfo: ErrorInfo) => void
|
|
38
|
+
}> {
|
|
39
|
+
state = { error: null } as { error: Error | null; resetKey: string }
|
|
40
|
+
static getDerivedStateFromProps(props: any) {
|
|
41
|
+
return { resetKey: props.getResetKey() }
|
|
42
|
+
}
|
|
43
|
+
static getDerivedStateFromError(error: Error) {
|
|
44
|
+
return { error }
|
|
45
|
+
}
|
|
46
|
+
reset() {
|
|
47
|
+
this.setState({ error: null })
|
|
48
|
+
}
|
|
49
|
+
componentDidUpdate(
|
|
50
|
+
prevProps: Readonly<{
|
|
51
|
+
getResetKey: () => string
|
|
52
|
+
children: (props: { error: any; reset: () => void }) => any
|
|
53
|
+
onCatch?: ((error: any, info: any) => void) | undefined
|
|
54
|
+
}>,
|
|
55
|
+
prevState: any,
|
|
56
|
+
): void {
|
|
57
|
+
if (prevState.error && prevState.resetKey !== this.state.resetKey) {
|
|
58
|
+
this.reset()
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo) {
|
|
62
|
+
if (this.props.onCatch) {
|
|
63
|
+
this.props.onCatch(error, errorInfo)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
render() {
|
|
67
|
+
// If the resetKey has changed, don't render the error
|
|
68
|
+
return this.props.children({
|
|
69
|
+
error:
|
|
70
|
+
this.state.resetKey !== this.props.getResetKey()
|
|
71
|
+
? null
|
|
72
|
+
: this.state.error,
|
|
73
|
+
reset: () => {
|
|
74
|
+
this.reset()
|
|
75
|
+
},
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function ErrorComponent({ error }: { error: any }) {
|
|
81
|
+
const [show, setShow] = React.useState(process.env.NODE_ENV !== 'production')
|
|
82
|
+
|
|
83
|
+
return (
|
|
84
|
+
<div style={{ padding: '.5rem', maxWidth: '100%' }}>
|
|
85
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: '.5rem' }}>
|
|
86
|
+
<strong style={{ fontSize: '1rem' }}>Something went wrong!</strong>
|
|
87
|
+
<button
|
|
88
|
+
style={{
|
|
89
|
+
appearance: 'none',
|
|
90
|
+
fontSize: '.6em',
|
|
91
|
+
border: '1px solid currentColor',
|
|
92
|
+
padding: '.1rem .2rem',
|
|
93
|
+
fontWeight: 'bold',
|
|
94
|
+
borderRadius: '.25rem',
|
|
95
|
+
}}
|
|
96
|
+
onClick={() => setShow((d) => !d)}
|
|
97
|
+
>
|
|
98
|
+
{show ? 'Hide Error' : 'Show Error'}
|
|
99
|
+
</button>
|
|
100
|
+
</div>
|
|
101
|
+
<div style={{ height: '.25rem' }} />
|
|
102
|
+
{show ? (
|
|
103
|
+
<div>
|
|
104
|
+
<pre
|
|
105
|
+
style={{
|
|
106
|
+
fontSize: '.7em',
|
|
107
|
+
border: '1px solid red',
|
|
108
|
+
borderRadius: '.25rem',
|
|
109
|
+
padding: '.3rem',
|
|
110
|
+
color: 'red',
|
|
111
|
+
overflow: 'auto',
|
|
112
|
+
}}
|
|
113
|
+
>
|
|
114
|
+
{error.message ? <code>{error.message}</code> : null}
|
|
115
|
+
</pre>
|
|
116
|
+
</div>
|
|
117
|
+
) : null}
|
|
118
|
+
</div>
|
|
119
|
+
)
|
|
120
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
|
|
3
|
+
export interface ClientOnlyProps {
|
|
4
|
+
/**
|
|
5
|
+
* The children to render when the JS is loaded.
|
|
6
|
+
*/
|
|
7
|
+
children: React.ReactNode
|
|
8
|
+
/**
|
|
9
|
+
* The fallback component to render if the JS is not yet loaded.
|
|
10
|
+
*/
|
|
11
|
+
fallback?: React.ReactNode
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Render the children only after the JS has loaded client-side. Use an optional
|
|
16
|
+
* fallback component if the JS is not yet loaded.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* Render a Chart component if JS loads, renders a simple FakeChart
|
|
20
|
+
* component server-side or if there is no JS. The FakeChart can have only the
|
|
21
|
+
* UI without the behavior or be a loading spinner or skeleton.
|
|
22
|
+
*
|
|
23
|
+
* ```tsx
|
|
24
|
+
* return (
|
|
25
|
+
* <ClientOnly fallback={<FakeChart />}>
|
|
26
|
+
* <Chart />
|
|
27
|
+
* </ClientOnly>
|
|
28
|
+
* )
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export function ClientOnly({ children, fallback = null }: ClientOnlyProps) {
|
|
32
|
+
return useHydrated() ? (
|
|
33
|
+
<React.Fragment>{children}</React.Fragment>
|
|
34
|
+
) : (
|
|
35
|
+
<React.Fragment>{fallback}</React.Fragment>
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Return a boolean indicating if the JS has been hydrated already.
|
|
41
|
+
* When doing Server-Side Rendering, the result will always be false.
|
|
42
|
+
* When doing Client-Side Rendering, the result will always be false on the
|
|
43
|
+
* first render and true from then on. Even if a new component renders it will
|
|
44
|
+
* always start with true.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```tsx
|
|
48
|
+
* // Disable a button that needs JS to work.
|
|
49
|
+
* let hydrated = useHydrated()
|
|
50
|
+
* return (
|
|
51
|
+
* <button type="button" disabled={!hydrated} onClick={doSomethingCustom}>
|
|
52
|
+
* Click me
|
|
53
|
+
* </button>
|
|
54
|
+
* )
|
|
55
|
+
* ```
|
|
56
|
+
* @returns True if the JS has been hydrated already, false otherwise.
|
|
57
|
+
*/
|
|
58
|
+
export function useHydrated(): boolean {
|
|
59
|
+
return React.useSyncExternalStore(
|
|
60
|
+
subscribe,
|
|
61
|
+
() => true,
|
|
62
|
+
() => false,
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function subscribe() {
|
|
67
|
+
return () => {}
|
|
68
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import { Asset } from './Asset'
|
|
3
|
+
import { useRouter } from './useRouter'
|
|
4
|
+
import { useHydrated } from './ClientOnly'
|
|
5
|
+
import { useTags } from './headContentUtils'
|
|
6
|
+
|
|
7
|
+
const DEV_STYLES_ATTR = 'data-tanstack-router-dev-styles'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Render route-managed head tags (title, meta, links, styles, head scripts).
|
|
11
|
+
* Place inside the document head of your app shell.
|
|
12
|
+
*
|
|
13
|
+
* Development version: filters out dev styles link after hydration and
|
|
14
|
+
* includes a fallback cleanup effect for hydration mismatch cases.
|
|
15
|
+
*
|
|
16
|
+
* @link https://tanstack.com/router/latest/docs/framework/react/guide/document-head-management
|
|
17
|
+
*/
|
|
18
|
+
export function HeadContent() {
|
|
19
|
+
const tags = useTags()
|
|
20
|
+
const router = useRouter()
|
|
21
|
+
const nonce = router.options.ssr?.nonce
|
|
22
|
+
const hydrated = useHydrated()
|
|
23
|
+
|
|
24
|
+
// Fallback cleanup for hydration mismatch cases
|
|
25
|
+
// Runs when hydration completes to remove any orphaned dev styles links from DOM
|
|
26
|
+
React.useEffect(() => {
|
|
27
|
+
if (hydrated) {
|
|
28
|
+
document
|
|
29
|
+
.querySelectorAll(`link[${DEV_STYLES_ATTR}]`)
|
|
30
|
+
.forEach((el) => el.remove())
|
|
31
|
+
}
|
|
32
|
+
}, [hydrated])
|
|
33
|
+
|
|
34
|
+
// Filter out dev styles after hydration
|
|
35
|
+
const filteredTags = hydrated
|
|
36
|
+
? tags.filter((tag) => !tag.attrs?.[DEV_STYLES_ATTR])
|
|
37
|
+
: tags
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<>
|
|
41
|
+
{filteredTags.map((tag) => (
|
|
42
|
+
<Asset {...tag} key={`tsr-meta-${JSON.stringify(tag)}`} nonce={nonce} />
|
|
43
|
+
))}
|
|
44
|
+
</>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import { Asset } from './Asset'
|
|
3
|
+
import { useRouter } from './useRouter'
|
|
4
|
+
import { useTags } from './headContentUtils'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Render route-managed head tags (title, meta, links, styles, head scripts).
|
|
8
|
+
* Place inside the document head of your app shell.
|
|
9
|
+
* @link https://tanstack.com/router/latest/docs/framework/react/guide/document-head-management
|
|
10
|
+
*/
|
|
11
|
+
export function HeadContent() {
|
|
12
|
+
const tags = useTags()
|
|
13
|
+
const router = useRouter()
|
|
14
|
+
const nonce = router.options.ssr?.nonce
|
|
15
|
+
return (
|
|
16
|
+
<>
|
|
17
|
+
{tags.map((tag) => (
|
|
18
|
+
<Asset {...tag} key={`tsr-meta-${JSON.stringify(tag)}`} nonce={nonce} />
|
|
19
|
+
))}
|
|
20
|
+
</>
|
|
21
|
+
)
|
|
22
|
+
}
|