@benjavicente/router-core 1.168.9
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 +5 -0
- package/bin/intent.js +25 -0
- package/dist/cjs/Matches.cjs +17 -0
- package/dist/cjs/Matches.cjs.map +1 -0
- package/dist/cjs/Matches.d.cts +139 -0
- package/dist/cjs/RouterProvider.d.cts +27 -0
- package/dist/cjs/config.cjs +11 -0
- package/dist/cjs/config.cjs.map +1 -0
- package/dist/cjs/config.d.cts +17 -0
- package/dist/cjs/defer.cjs +41 -0
- package/dist/cjs/defer.cjs.map +1 -0
- package/dist/cjs/defer.d.cts +37 -0
- package/dist/cjs/fileRoute.d.cts +24 -0
- package/dist/cjs/global.d.cts +7 -0
- package/dist/cjs/hash-scroll.cjs +20 -0
- package/dist/cjs/hash-scroll.cjs.map +1 -0
- package/dist/cjs/hash-scroll.d.cts +7 -0
- package/dist/cjs/history.d.cts +8 -0
- package/dist/cjs/index.cjs +96 -0
- package/dist/cjs/index.d.cts +53 -0
- package/dist/cjs/invariant.cjs +8 -0
- package/dist/cjs/invariant.cjs.map +1 -0
- package/dist/cjs/invariant.d.cts +1 -0
- package/dist/cjs/isServer/client.cjs +7 -0
- package/dist/cjs/isServer/client.cjs.map +1 -0
- package/dist/cjs/isServer/client.d.cts +1 -0
- package/dist/cjs/isServer/development.cjs +7 -0
- package/dist/cjs/isServer/development.cjs.map +1 -0
- package/dist/cjs/isServer/development.d.cts +1 -0
- package/dist/cjs/isServer/server.cjs +7 -0
- package/dist/cjs/isServer/server.cjs.map +1 -0
- package/dist/cjs/isServer/server.d.cts +1 -0
- package/dist/cjs/link.cjs +6 -0
- package/dist/cjs/link.cjs.map +1 -0
- package/dist/cjs/link.d.cts +221 -0
- package/dist/cjs/load-matches.cjs +659 -0
- package/dist/cjs/load-matches.cjs.map +1 -0
- package/dist/cjs/load-matches.d.cts +18 -0
- package/dist/cjs/location.d.cts +50 -0
- package/dist/cjs/lru-cache.cjs +70 -0
- package/dist/cjs/lru-cache.cjs.map +1 -0
- package/dist/cjs/lru-cache.d.cts +6 -0
- package/dist/cjs/manifest.cjs +18 -0
- package/dist/cjs/manifest.cjs.map +1 -0
- package/dist/cjs/manifest.d.cts +35 -0
- package/dist/cjs/new-process-route-tree.cjs +754 -0
- package/dist/cjs/new-process-route-tree.cjs.map +1 -0
- package/dist/cjs/new-process-route-tree.d.cts +236 -0
- package/dist/cjs/not-found.cjs +26 -0
- package/dist/cjs/not-found.cjs.map +1 -0
- package/dist/cjs/not-found.d.cts +32 -0
- package/dist/cjs/path.cjs +252 -0
- package/dist/cjs/path.cjs.map +1 -0
- package/dist/cjs/path.d.cts +56 -0
- package/dist/cjs/qss.cjs +70 -0
- package/dist/cjs/qss.cjs.map +1 -0
- package/dist/cjs/qss.d.cts +33 -0
- package/dist/cjs/redirect.cjs +56 -0
- package/dist/cjs/redirect.cjs.map +1 -0
- package/dist/cjs/redirect.d.cts +77 -0
- package/dist/cjs/rewrite.cjs +68 -0
- package/dist/cjs/rewrite.cjs.map +1 -0
- package/dist/cjs/rewrite.d.cts +30 -0
- package/dist/cjs/root.cjs +7 -0
- package/dist/cjs/root.cjs.map +1 -0
- package/dist/cjs/root.d.cts +3 -0
- package/dist/cjs/route.cjs +100 -0
- package/dist/cjs/route.cjs.map +1 -0
- package/dist/cjs/route.d.cts +552 -0
- package/dist/cjs/routeInfo.d.cts +54 -0
- package/dist/cjs/router.cjs +1173 -0
- package/dist/cjs/router.cjs.map +1 -0
- package/dist/cjs/router.d.cts +734 -0
- package/dist/cjs/scroll-restoration-inline.cjs +6 -0
- package/dist/cjs/scroll-restoration-inline.cjs.map +1 -0
- package/dist/cjs/scroll-restoration-inline.d.cts +6 -0
- package/dist/cjs/scroll-restoration-script/client.cjs +9 -0
- package/dist/cjs/scroll-restoration-script/client.cjs.map +1 -0
- package/dist/cjs/scroll-restoration-script/client.d.cts +2 -0
- package/dist/cjs/scroll-restoration-script/server.cjs +30 -0
- package/dist/cjs/scroll-restoration-script/server.cjs.map +1 -0
- package/dist/cjs/scroll-restoration-script/server.d.cts +2 -0
- package/dist/cjs/scroll-restoration.cjs +191 -0
- package/dist/cjs/scroll-restoration.cjs.map +1 -0
- package/dist/cjs/scroll-restoration.d.cts +38 -0
- package/dist/cjs/searchMiddleware.cjs +55 -0
- package/dist/cjs/searchMiddleware.cjs.map +1 -0
- package/dist/cjs/searchMiddleware.d.cts +25 -0
- package/dist/cjs/searchParams.cjs +65 -0
- package/dist/cjs/searchParams.cjs.map +1 -0
- package/dist/cjs/searchParams.d.cts +31 -0
- package/dist/cjs/ssr/client.cjs +7 -0
- package/dist/cjs/ssr/client.d.cts +6 -0
- package/dist/cjs/ssr/constants.cjs +8 -0
- package/dist/cjs/ssr/constants.cjs.map +1 -0
- package/dist/cjs/ssr/constants.d.cts +3 -0
- package/dist/cjs/ssr/createRequestHandler.cjs +44 -0
- package/dist/cjs/ssr/createRequestHandler.cjs.map +1 -0
- package/dist/cjs/ssr/createRequestHandler.d.cts +9 -0
- package/dist/cjs/ssr/handlerCallback.cjs +8 -0
- package/dist/cjs/ssr/handlerCallback.cjs.map +1 -0
- package/dist/cjs/ssr/handlerCallback.d.cts +9 -0
- package/dist/cjs/ssr/headers.cjs +21 -0
- package/dist/cjs/ssr/headers.cjs.map +1 -0
- package/dist/cjs/ssr/headers.d.cts +3 -0
- package/dist/cjs/ssr/json.cjs +11 -0
- package/dist/cjs/ssr/json.cjs.map +1 -0
- package/dist/cjs/ssr/json.d.cts +10 -0
- package/dist/cjs/ssr/serializer/RawStream.cjs +287 -0
- package/dist/cjs/ssr/serializer/RawStream.cjs.map +1 -0
- package/dist/cjs/ssr/serializer/RawStream.d.cts +64 -0
- package/dist/cjs/ssr/serializer/ShallowErrorPlugin.cjs +32 -0
- package/dist/cjs/ssr/serializer/ShallowErrorPlugin.cjs.map +1 -0
- package/dist/cjs/ssr/serializer/ShallowErrorPlugin.d.cts +9 -0
- package/dist/cjs/ssr/serializer/seroval-plugins.cjs +13 -0
- package/dist/cjs/ssr/serializer/seroval-plugins.cjs.map +1 -0
- package/dist/cjs/ssr/serializer/seroval-plugins.d.cts +2 -0
- package/dist/cjs/ssr/serializer/transformer.cjs +53 -0
- package/dist/cjs/ssr/serializer/transformer.cjs.map +1 -0
- package/dist/cjs/ssr/serializer/transformer.d.cts +91 -0
- package/dist/cjs/ssr/server.cjs +13 -0
- package/dist/cjs/ssr/server.d.cts +6 -0
- package/dist/cjs/ssr/ssr-client.cjs +183 -0
- package/dist/cjs/ssr/ssr-client.cjs.map +1 -0
- package/dist/cjs/ssr/ssr-client.d.cts +10 -0
- package/dist/cjs/ssr/ssr-match-id.cjs +12 -0
- package/dist/cjs/ssr/ssr-match-id.cjs.map +1 -0
- package/dist/cjs/ssr/ssr-match-id.d.cts +2 -0
- package/dist/cjs/ssr/ssr-server.cjs +279 -0
- package/dist/cjs/ssr/ssr-server.cjs.map +1 -0
- package/dist/cjs/ssr/ssr-server.d.cts +42 -0
- package/dist/cjs/ssr/transformStreamWithRouter.cjs +327 -0
- package/dist/cjs/ssr/transformStreamWithRouter.cjs.map +1 -0
- package/dist/cjs/ssr/transformStreamWithRouter.d.cts +11 -0
- package/dist/cjs/ssr/tsrScript.cjs +6 -0
- package/dist/cjs/ssr/tsrScript.cjs.map +1 -0
- package/dist/cjs/ssr/tsrScript.d.cts +1 -0
- package/dist/cjs/ssr/types.d.cts +30 -0
- package/dist/cjs/stores.cjs +148 -0
- package/dist/cjs/stores.cjs.map +1 -0
- package/dist/cjs/stores.d.cts +70 -0
- package/dist/cjs/structuralSharing.d.cts +4 -0
- package/dist/cjs/typePrimitives.d.cts +65 -0
- package/dist/cjs/useLoaderData.d.cts +5 -0
- package/dist/cjs/useLoaderDeps.d.cts +5 -0
- package/dist/cjs/useNavigate.d.cts +3 -0
- package/dist/cjs/useParams.d.cts +5 -0
- package/dist/cjs/useRouteContext.d.cts +9 -0
- package/dist/cjs/useSearch.d.cts +5 -0
- package/dist/cjs/utils.cjs +339 -0
- package/dist/cjs/utils.cjs.map +1 -0
- package/dist/cjs/utils.d.cts +178 -0
- package/dist/cjs/validators.d.cts +51 -0
- package/dist/esm/Matches.d.ts +139 -0
- package/dist/esm/Matches.js +17 -0
- package/dist/esm/Matches.js.map +1 -0
- package/dist/esm/RouterProvider.d.ts +27 -0
- package/dist/esm/config.d.ts +17 -0
- package/dist/esm/config.js +11 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/defer.d.ts +37 -0
- package/dist/esm/defer.js +40 -0
- package/dist/esm/defer.js.map +1 -0
- package/dist/esm/fileRoute.d.ts +24 -0
- package/dist/esm/global.d.ts +7 -0
- package/dist/esm/hash-scroll.d.ts +7 -0
- package/dist/esm/hash-scroll.js +20 -0
- package/dist/esm/hash-scroll.js.map +1 -0
- package/dist/esm/history.d.ts +8 -0
- package/dist/esm/index.d.ts +53 -0
- package/dist/esm/index.js +24 -0
- package/dist/esm/invariant.d.ts +1 -0
- package/dist/esm/invariant.js +8 -0
- package/dist/esm/invariant.js.map +1 -0
- package/dist/esm/isServer/client.d.ts +1 -0
- package/dist/esm/isServer/client.js +6 -0
- package/dist/esm/isServer/client.js.map +1 -0
- package/dist/esm/isServer/development.d.ts +1 -0
- package/dist/esm/isServer/development.js +6 -0
- package/dist/esm/isServer/development.js.map +1 -0
- package/dist/esm/isServer/server.d.ts +1 -0
- package/dist/esm/isServer/server.js +6 -0
- package/dist/esm/isServer/server.js.map +1 -0
- package/dist/esm/link.d.ts +221 -0
- package/dist/esm/link.js +6 -0
- package/dist/esm/link.js.map +1 -0
- package/dist/esm/load-matches.d.ts +18 -0
- package/dist/esm/load-matches.js +657 -0
- package/dist/esm/load-matches.js.map +1 -0
- package/dist/esm/location.d.ts +50 -0
- package/dist/esm/lru-cache.d.ts +6 -0
- package/dist/esm/lru-cache.js +70 -0
- package/dist/esm/lru-cache.js.map +1 -0
- package/dist/esm/manifest.d.ts +35 -0
- package/dist/esm/manifest.js +17 -0
- package/dist/esm/manifest.js.map +1 -0
- package/dist/esm/new-process-route-tree.d.ts +236 -0
- package/dist/esm/new-process-route-tree.js +749 -0
- package/dist/esm/new-process-route-tree.js.map +1 -0
- package/dist/esm/not-found.d.ts +32 -0
- package/dist/esm/not-found.js +25 -0
- package/dist/esm/not-found.js.map +1 -0
- package/dist/esm/path.d.ts +56 -0
- package/dist/esm/path.js +243 -0
- package/dist/esm/path.js.map +1 -0
- package/dist/esm/qss.d.ts +33 -0
- package/dist/esm/qss.js +69 -0
- package/dist/esm/qss.js.map +1 -0
- package/dist/esm/redirect.d.ts +77 -0
- package/dist/esm/redirect.js +53 -0
- package/dist/esm/redirect.js.map +1 -0
- package/dist/esm/rewrite.d.ts +30 -0
- package/dist/esm/rewrite.js +65 -0
- package/dist/esm/rewrite.js.map +1 -0
- package/dist/esm/root.d.ts +3 -0
- package/dist/esm/root.js +7 -0
- package/dist/esm/root.js.map +1 -0
- package/dist/esm/route.d.ts +552 -0
- package/dist/esm/route.js +98 -0
- package/dist/esm/route.js.map +1 -0
- package/dist/esm/routeInfo.d.ts +54 -0
- package/dist/esm/router.d.ts +734 -0
- package/dist/esm/router.js +1165 -0
- package/dist/esm/router.js.map +1 -0
- package/dist/esm/scroll-restoration-inline.d.ts +6 -0
- package/dist/esm/scroll-restoration-inline.js +6 -0
- package/dist/esm/scroll-restoration-inline.js.map +1 -0
- package/dist/esm/scroll-restoration-script/client.d.ts +2 -0
- package/dist/esm/scroll-restoration-script/client.js +8 -0
- package/dist/esm/scroll-restoration-script/client.js.map +1 -0
- package/dist/esm/scroll-restoration-script/server.d.ts +2 -0
- package/dist/esm/scroll-restoration-script/server.js +29 -0
- package/dist/esm/scroll-restoration-script/server.js.map +1 -0
- package/dist/esm/scroll-restoration.d.ts +38 -0
- package/dist/esm/scroll-restoration.js +187 -0
- package/dist/esm/scroll-restoration.js.map +1 -0
- package/dist/esm/searchMiddleware.d.ts +25 -0
- package/dist/esm/searchMiddleware.js +54 -0
- package/dist/esm/searchMiddleware.js.map +1 -0
- package/dist/esm/searchParams.d.ts +31 -0
- package/dist/esm/searchParams.js +62 -0
- package/dist/esm/searchParams.js.map +1 -0
- package/dist/esm/ssr/client.d.ts +6 -0
- package/dist/esm/ssr/client.js +4 -0
- package/dist/esm/ssr/constants.d.ts +3 -0
- package/dist/esm/ssr/constants.js +7 -0
- package/dist/esm/ssr/constants.js.map +1 -0
- package/dist/esm/ssr/createRequestHandler.d.ts +9 -0
- package/dist/esm/ssr/createRequestHandler.js +44 -0
- package/dist/esm/ssr/createRequestHandler.js.map +1 -0
- package/dist/esm/ssr/handlerCallback.d.ts +9 -0
- package/dist/esm/ssr/handlerCallback.js +8 -0
- package/dist/esm/ssr/handlerCallback.js.map +1 -0
- package/dist/esm/ssr/headers.d.ts +3 -0
- package/dist/esm/ssr/headers.js +21 -0
- package/dist/esm/ssr/headers.js.map +1 -0
- package/dist/esm/ssr/json.d.ts +10 -0
- package/dist/esm/ssr/json.js +11 -0
- package/dist/esm/ssr/json.js.map +1 -0
- package/dist/esm/ssr/serializer/RawStream.d.ts +64 -0
- package/dist/esm/ssr/serializer/RawStream.js +282 -0
- package/dist/esm/ssr/serializer/RawStream.js.map +1 -0
- package/dist/esm/ssr/serializer/ShallowErrorPlugin.d.ts +9 -0
- package/dist/esm/ssr/serializer/ShallowErrorPlugin.js +33 -0
- package/dist/esm/ssr/serializer/ShallowErrorPlugin.js.map +1 -0
- package/dist/esm/ssr/serializer/seroval-plugins.d.ts +2 -0
- package/dist/esm/ssr/serializer/seroval-plugins.js +13 -0
- package/dist/esm/ssr/serializer/seroval-plugins.js.map +1 -0
- package/dist/esm/ssr/serializer/transformer.d.ts +91 -0
- package/dist/esm/ssr/serializer/transformer.js +51 -0
- package/dist/esm/ssr/serializer/transformer.js.map +1 -0
- package/dist/esm/ssr/server.d.ts +6 -0
- package/dist/esm/ssr/server.js +5 -0
- package/dist/esm/ssr/ssr-client.d.ts +10 -0
- package/dist/esm/ssr/ssr-client.js +183 -0
- package/dist/esm/ssr/ssr-client.js.map +1 -0
- package/dist/esm/ssr/ssr-match-id.d.ts +2 -0
- package/dist/esm/ssr/ssr-match-id.js +11 -0
- package/dist/esm/ssr/ssr-match-id.js.map +1 -0
- package/dist/esm/ssr/ssr-server.d.ts +42 -0
- package/dist/esm/ssr/ssr-server.js +277 -0
- package/dist/esm/ssr/ssr-server.js.map +1 -0
- package/dist/esm/ssr/transformStreamWithRouter.d.ts +11 -0
- package/dist/esm/ssr/transformStreamWithRouter.js +325 -0
- package/dist/esm/ssr/transformStreamWithRouter.js.map +1 -0
- package/dist/esm/ssr/tsrScript.d.ts +0 -0
- package/dist/esm/ssr/tsrScript.js +6 -0
- package/dist/esm/ssr/tsrScript.js.map +1 -0
- package/dist/esm/ssr/types.d.ts +30 -0
- package/dist/esm/stores.d.ts +70 -0
- package/dist/esm/stores.js +146 -0
- package/dist/esm/stores.js.map +1 -0
- package/dist/esm/structuralSharing.d.ts +4 -0
- package/dist/esm/typePrimitives.d.ts +65 -0
- package/dist/esm/useLoaderData.d.ts +5 -0
- package/dist/esm/useLoaderDeps.d.ts +5 -0
- package/dist/esm/useNavigate.d.ts +3 -0
- package/dist/esm/useParams.d.ts +5 -0
- package/dist/esm/useRouteContext.d.ts +9 -0
- package/dist/esm/useSearch.d.ts +5 -0
- package/dist/esm/utils.d.ts +178 -0
- package/dist/esm/utils.js +322 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/validators.d.ts +51 -0
- package/package.json +200 -0
- package/skills/router-core/SKILL.md +139 -0
- package/skills/router-core/auth-and-guards/SKILL.md +458 -0
- package/skills/router-core/code-splitting/SKILL.md +322 -0
- package/skills/router-core/data-loading/SKILL.md +485 -0
- package/skills/router-core/navigation/SKILL.md +448 -0
- package/skills/router-core/not-found-and-errors/SKILL.md +435 -0
- package/skills/router-core/path-params/SKILL.md +382 -0
- package/skills/router-core/search-params/SKILL.md +349 -0
- package/skills/router-core/search-params/references/validation-patterns.md +379 -0
- package/skills/router-core/ssr/SKILL.md +437 -0
- package/skills/router-core/type-safety/SKILL.md +497 -0
- package/src/Matches.ts +291 -0
- package/src/RouterProvider.ts +47 -0
- package/src/config.ts +42 -0
- package/src/defer.ts +69 -0
- package/src/fileRoute.ts +164 -0
- package/src/global.ts +9 -0
- package/src/hash-scroll.ts +21 -0
- package/src/history.ts +9 -0
- package/src/index.ts +471 -0
- package/src/invariant.ts +3 -0
- package/src/isServer/client.ts +1 -0
- package/src/isServer/development.ts +2 -0
- package/src/isServer/server.ts +1 -0
- package/src/link.ts +704 -0
- package/src/load-matches.ts +1281 -0
- package/src/location.ts +51 -0
- package/src/lru-cache.ts +74 -0
- package/src/manifest.ts +68 -0
- package/src/new-process-route-tree.ts +1387 -0
- package/src/not-found.ts +41 -0
- package/src/path.ts +436 -0
- package/src/qss.ts +81 -0
- package/src/redirect.ts +179 -0
- package/src/rewrite.ts +93 -0
- package/src/root.ts +3 -0
- package/src/route.ts +2235 -0
- package/src/routeInfo.ts +235 -0
- package/src/router.ts +3207 -0
- package/src/scroll-restoration-inline.ts +81 -0
- package/src/scroll-restoration-script/client.ts +5 -0
- package/src/scroll-restoration-script/server.ts +64 -0
- package/src/scroll-restoration.ts +357 -0
- package/src/searchMiddleware.ts +76 -0
- package/src/searchParams.ts +90 -0
- package/src/ssr/client.ts +6 -0
- package/src/ssr/constants.ts +3 -0
- package/src/ssr/createRequestHandler.ts +98 -0
- package/src/ssr/handlerCallback.ts +15 -0
- package/src/ssr/headers.ts +40 -0
- package/src/ssr/json.ts +16 -0
- package/src/ssr/serializer/RawStream.ts +464 -0
- package/src/ssr/serializer/ShallowErrorPlugin.ts +43 -0
- package/src/ssr/serializer/seroval-plugins.ts +12 -0
- package/src/ssr/serializer/transformer.ts +312 -0
- package/src/ssr/server.ts +14 -0
- package/src/ssr/ssr-client.ts +313 -0
- package/src/ssr/ssr-match-id.ts +7 -0
- package/src/ssr/ssr-server.ts +425 -0
- package/src/ssr/transformStreamWithRouter.ts +493 -0
- package/src/ssr/tsrScript.ts +20 -0
- package/src/ssr/types.ts +41 -0
- package/src/stores.ts +342 -0
- package/src/structuralSharing.ts +7 -0
- package/src/typePrimitives.ts +181 -0
- package/src/useLoaderData.ts +20 -0
- package/src/useLoaderDeps.ts +13 -0
- package/src/useNavigate.ts +13 -0
- package/src/useParams.ts +20 -0
- package/src/useRouteContext.ts +39 -0
- package/src/useSearch.ts +20 -0
- package/src/utils.ts +708 -0
- package/src/validators.ts +121 -0
- package/src/vite-env.d.ts +4 -0
package/src/redirect.ts
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import type { NavigateOptions } from './link'
|
|
2
|
+
import type { AnyRouter, RegisteredRouter } from './router'
|
|
3
|
+
import type { ParsedLocation } from './location'
|
|
4
|
+
|
|
5
|
+
export type AnyRedirect = Redirect<any, any, any, any, any>
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RedirectType)
|
|
9
|
+
*/
|
|
10
|
+
export type Redirect<
|
|
11
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
12
|
+
TFrom extends string = string,
|
|
13
|
+
TTo extends string | undefined = undefined,
|
|
14
|
+
TMaskFrom extends string = TFrom,
|
|
15
|
+
TMaskTo extends string = '.',
|
|
16
|
+
> = Response & {
|
|
17
|
+
options: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
* A **trusted** built location that can be used to redirect to.
|
|
21
|
+
*/
|
|
22
|
+
_builtLocation?: ParsedLocation
|
|
23
|
+
}
|
|
24
|
+
redirectHandled?: boolean
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type RedirectOptions<
|
|
28
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
29
|
+
TFrom extends string = string,
|
|
30
|
+
TTo extends string | undefined = undefined,
|
|
31
|
+
TMaskFrom extends string = TFrom,
|
|
32
|
+
TMaskTo extends string = '.',
|
|
33
|
+
> = {
|
|
34
|
+
href?: string
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated Use `statusCode` instead
|
|
37
|
+
**/
|
|
38
|
+
code?: number
|
|
39
|
+
/**
|
|
40
|
+
* The HTTP status code to use when redirecting.
|
|
41
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RedirectType#statuscode-property)
|
|
42
|
+
*/
|
|
43
|
+
statusCode?: number
|
|
44
|
+
/**
|
|
45
|
+
* If provided, will throw the redirect object instead of returning it. This can be useful in places where `throwing` in a function might cause it to have a return type of `never`. In that case, you can use `redirect({ throw: true })` to throw the redirect object instead of returning it.
|
|
46
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RedirectType#throw-property)
|
|
47
|
+
*/
|
|
48
|
+
throw?: any
|
|
49
|
+
/**
|
|
50
|
+
* The HTTP headers to use when redirecting.
|
|
51
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RedirectType#headers-property)
|
|
52
|
+
*/
|
|
53
|
+
headers?: HeadersInit
|
|
54
|
+
/**
|
|
55
|
+
* @internal
|
|
56
|
+
* A **trusted** built location that can be used to redirect to.
|
|
57
|
+
*/
|
|
58
|
+
_builtLocation?: ParsedLocation
|
|
59
|
+
} & NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>
|
|
60
|
+
|
|
61
|
+
export type ResolvedRedirect<
|
|
62
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
63
|
+
TFrom extends string = string,
|
|
64
|
+
TTo extends string = '',
|
|
65
|
+
TMaskFrom extends string = TFrom,
|
|
66
|
+
TMaskTo extends string = '',
|
|
67
|
+
> = Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Options for route-bound redirect, where 'from' is automatically set.
|
|
71
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RedirectType)
|
|
72
|
+
*/
|
|
73
|
+
export type RedirectOptionsRoute<
|
|
74
|
+
TDefaultFrom extends string = string,
|
|
75
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
76
|
+
TTo extends string | undefined = undefined,
|
|
77
|
+
TMaskTo extends string = '',
|
|
78
|
+
> = Omit<
|
|
79
|
+
RedirectOptions<TRouter, TDefaultFrom, TTo, TDefaultFrom, TMaskTo>,
|
|
80
|
+
'from'
|
|
81
|
+
>
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* A redirect function bound to a specific route, with 'from' pre-set to the route's fullPath.
|
|
85
|
+
* This enables relative redirects like `Route.redirect({ to: './overview' })`.
|
|
86
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/RedirectType)
|
|
87
|
+
*/
|
|
88
|
+
export interface RedirectFnRoute<in out TDefaultFrom extends string = string> {
|
|
89
|
+
<
|
|
90
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
91
|
+
const TTo extends string | undefined = undefined,
|
|
92
|
+
const TMaskTo extends string = '',
|
|
93
|
+
>(
|
|
94
|
+
opts: RedirectOptionsRoute<TDefaultFrom, TRouter, TTo, TMaskTo>,
|
|
95
|
+
): Redirect<TRouter, TDefaultFrom, TTo, TDefaultFrom, TMaskTo>
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Create a redirect Response understood by TanStack Router.
|
|
100
|
+
*
|
|
101
|
+
* Use from route `loader`/`beforeLoad` or server functions to trigger a
|
|
102
|
+
* navigation. If `throw: true` is set, the redirect is thrown instead of
|
|
103
|
+
* returned. When an absolute `href` is supplied and `reloadDocument` is not
|
|
104
|
+
* set, a full-document navigation is inferred.
|
|
105
|
+
*
|
|
106
|
+
* @param opts Options for the redirect. Common fields:
|
|
107
|
+
* - `href`: absolute URL for external redirects; infers `reloadDocument`.
|
|
108
|
+
* - `statusCode`: HTTP status code to use (defaults to 307).
|
|
109
|
+
* - `headers`: additional headers to include on the Response.
|
|
110
|
+
* - Standard navigation options like `to`, `params`, `search`, `replace`,
|
|
111
|
+
* and `reloadDocument` for internal redirects.
|
|
112
|
+
* @returns A Response augmented with router navigation options.
|
|
113
|
+
* @link https://tanstack.com/router/latest/docs/framework/react/api/router/redirectFunction
|
|
114
|
+
*/
|
|
115
|
+
export function redirect<
|
|
116
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
117
|
+
const TTo extends string | undefined = '.',
|
|
118
|
+
const TFrom extends string = string,
|
|
119
|
+
const TMaskFrom extends string = TFrom,
|
|
120
|
+
const TMaskTo extends string = '',
|
|
121
|
+
>(
|
|
122
|
+
opts: RedirectOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
|
|
123
|
+
): Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> {
|
|
124
|
+
opts.statusCode = opts.statusCode || opts.code || 307
|
|
125
|
+
|
|
126
|
+
if (
|
|
127
|
+
!opts._builtLocation &&
|
|
128
|
+
!opts.reloadDocument &&
|
|
129
|
+
typeof opts.href === 'string'
|
|
130
|
+
) {
|
|
131
|
+
try {
|
|
132
|
+
new URL(opts.href)
|
|
133
|
+
opts.reloadDocument = true
|
|
134
|
+
} catch {}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const headers = new Headers(opts.headers)
|
|
138
|
+
if (opts.href && headers.get('Location') === null) {
|
|
139
|
+
headers.set('Location', opts.href)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const response = new Response(null, {
|
|
143
|
+
status: opts.statusCode,
|
|
144
|
+
headers,
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
;(response as Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>).options =
|
|
148
|
+
opts
|
|
149
|
+
|
|
150
|
+
if (opts.throw) {
|
|
151
|
+
throw response
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return response as Redirect<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/** Check whether a value is a TanStack Router redirect Response. */
|
|
158
|
+
/** Check whether a value is a TanStack Router redirect Response. */
|
|
159
|
+
export function isRedirect(obj: any): obj is AnyRedirect {
|
|
160
|
+
return obj instanceof Response && !!(obj as any).options
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** True if value is a redirect with a resolved `href` location. */
|
|
164
|
+
/** True if value is a redirect with a resolved `href` location. */
|
|
165
|
+
export function isResolvedRedirect(
|
|
166
|
+
obj: any,
|
|
167
|
+
): obj is AnyRedirect & { options: { href: string } } {
|
|
168
|
+
return isRedirect(obj) && !!obj.options.href
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** Parse a serialized redirect object back into a redirect Response. */
|
|
172
|
+
/** Parse a serialized redirect object back into a redirect Response. */
|
|
173
|
+
export function parseRedirect(obj: any) {
|
|
174
|
+
if (obj !== null && typeof obj === 'object' && obj.isSerializedRedirect) {
|
|
175
|
+
return redirect(obj)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return undefined
|
|
179
|
+
}
|
package/src/rewrite.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { joinPaths, trimPath } from './path'
|
|
2
|
+
import type { LocationRewrite } from './router'
|
|
3
|
+
|
|
4
|
+
/** Compose multiple rewrite pairs into a single in/out rewrite. */
|
|
5
|
+
/** Compose multiple rewrite pairs into a single in/out rewrite. */
|
|
6
|
+
export function composeRewrites(rewrites: Array<LocationRewrite>) {
|
|
7
|
+
return {
|
|
8
|
+
input: ({ url }) => {
|
|
9
|
+
for (const rewrite of rewrites) {
|
|
10
|
+
url = executeRewriteInput(rewrite, url)
|
|
11
|
+
}
|
|
12
|
+
return url
|
|
13
|
+
},
|
|
14
|
+
output: ({ url }) => {
|
|
15
|
+
for (let i = rewrites.length - 1; i >= 0; i--) {
|
|
16
|
+
url = executeRewriteOutput(rewrites[i], url)
|
|
17
|
+
}
|
|
18
|
+
return url
|
|
19
|
+
},
|
|
20
|
+
} satisfies LocationRewrite
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Create a rewrite pair that strips/adds a basepath on input/output. */
|
|
24
|
+
/** Create a rewrite pair that strips/adds a basepath on input/output. */
|
|
25
|
+
export function rewriteBasepath(opts: {
|
|
26
|
+
basepath: string
|
|
27
|
+
caseSensitive?: boolean
|
|
28
|
+
}) {
|
|
29
|
+
const trimmedBasepath = trimPath(opts.basepath)
|
|
30
|
+
const normalizedBasepath = `/${trimmedBasepath}`
|
|
31
|
+
const normalizedBasepathWithSlash = `${normalizedBasepath}/`
|
|
32
|
+
const checkBasepath = opts.caseSensitive
|
|
33
|
+
? normalizedBasepath
|
|
34
|
+
: normalizedBasepath.toLowerCase()
|
|
35
|
+
const checkBasepathWithSlash = opts.caseSensitive
|
|
36
|
+
? normalizedBasepathWithSlash
|
|
37
|
+
: normalizedBasepathWithSlash.toLowerCase()
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
input: ({ url }) => {
|
|
41
|
+
const pathname = opts.caseSensitive
|
|
42
|
+
? url.pathname
|
|
43
|
+
: url.pathname.toLowerCase()
|
|
44
|
+
|
|
45
|
+
// Handle exact basepath match (e.g., /my-app -> /)
|
|
46
|
+
if (pathname === checkBasepath) {
|
|
47
|
+
url.pathname = '/'
|
|
48
|
+
} else if (pathname.startsWith(checkBasepathWithSlash)) {
|
|
49
|
+
// Handle basepath with trailing content (e.g., /my-app/users -> /users)
|
|
50
|
+
url.pathname = url.pathname.slice(normalizedBasepath.length)
|
|
51
|
+
}
|
|
52
|
+
return url
|
|
53
|
+
},
|
|
54
|
+
output: ({ url }) => {
|
|
55
|
+
url.pathname = joinPaths(['/', trimmedBasepath, url.pathname])
|
|
56
|
+
return url
|
|
57
|
+
},
|
|
58
|
+
} satisfies LocationRewrite
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Execute a location input rewrite if provided. */
|
|
62
|
+
/** Execute a location input rewrite if provided. */
|
|
63
|
+
export function executeRewriteInput(
|
|
64
|
+
rewrite: LocationRewrite | undefined,
|
|
65
|
+
url: URL,
|
|
66
|
+
): URL {
|
|
67
|
+
const res = rewrite?.input?.({ url })
|
|
68
|
+
if (res) {
|
|
69
|
+
if (typeof res === 'string') {
|
|
70
|
+
return new URL(res)
|
|
71
|
+
} else if (res instanceof URL) {
|
|
72
|
+
return res
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return url
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Execute a location output rewrite if provided. */
|
|
79
|
+
/** Execute a location output rewrite if provided. */
|
|
80
|
+
export function executeRewriteOutput(
|
|
81
|
+
rewrite: LocationRewrite | undefined,
|
|
82
|
+
url: URL,
|
|
83
|
+
): URL {
|
|
84
|
+
const res = rewrite?.output?.({ url })
|
|
85
|
+
if (res) {
|
|
86
|
+
if (typeof res === 'string') {
|
|
87
|
+
return new URL(res)
|
|
88
|
+
} else if (res instanceof URL) {
|
|
89
|
+
return res
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return url
|
|
93
|
+
}
|
package/src/root.ts
ADDED