@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/Matches.ts
ADDED
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import type { AnyRoute, StaticDataRouteOption } from './route'
|
|
2
|
+
import type {
|
|
3
|
+
AllContext,
|
|
4
|
+
AllLoaderData,
|
|
5
|
+
AllParams,
|
|
6
|
+
FullSearchSchema,
|
|
7
|
+
ParseRoute,
|
|
8
|
+
RouteById,
|
|
9
|
+
RouteIds,
|
|
10
|
+
} from './routeInfo'
|
|
11
|
+
import type { AnyRouter, RegisteredRouter, SSROption } from './router'
|
|
12
|
+
import type { Constrain, ControlledPromise } from './utils'
|
|
13
|
+
|
|
14
|
+
export type AnyMatchAndValue = { match: any; value: any }
|
|
15
|
+
|
|
16
|
+
export type FindValueByIndex<
|
|
17
|
+
TKey,
|
|
18
|
+
TValue extends ReadonlyArray<any>,
|
|
19
|
+
> = TKey extends `${infer TIndex extends number}` ? TValue[TIndex] : never
|
|
20
|
+
|
|
21
|
+
export type FindValueByKey<TKey, TValue> =
|
|
22
|
+
TValue extends ReadonlyArray<any>
|
|
23
|
+
? FindValueByIndex<TKey, TValue>
|
|
24
|
+
: TValue[TKey & keyof TValue]
|
|
25
|
+
|
|
26
|
+
export type CreateMatchAndValue<TMatch, TValue> = TValue extends any
|
|
27
|
+
? {
|
|
28
|
+
match: TMatch
|
|
29
|
+
value: TValue
|
|
30
|
+
}
|
|
31
|
+
: never
|
|
32
|
+
|
|
33
|
+
export type NextMatchAndValue<
|
|
34
|
+
TKey,
|
|
35
|
+
TMatchAndValue extends AnyMatchAndValue,
|
|
36
|
+
> = TMatchAndValue extends any
|
|
37
|
+
? CreateMatchAndValue<
|
|
38
|
+
TMatchAndValue['match'],
|
|
39
|
+
FindValueByKey<TKey, TMatchAndValue['value']>
|
|
40
|
+
>
|
|
41
|
+
: never
|
|
42
|
+
|
|
43
|
+
export type IsMatchKeyOf<TValue> =
|
|
44
|
+
TValue extends ReadonlyArray<any>
|
|
45
|
+
? number extends TValue['length']
|
|
46
|
+
? `${number}`
|
|
47
|
+
: keyof TValue & `${number}`
|
|
48
|
+
: TValue extends object
|
|
49
|
+
? keyof TValue & string
|
|
50
|
+
: never
|
|
51
|
+
|
|
52
|
+
export type IsMatchPath<
|
|
53
|
+
TParentPath extends string,
|
|
54
|
+
TMatchAndValue extends AnyMatchAndValue,
|
|
55
|
+
> = `${TParentPath}${IsMatchKeyOf<TMatchAndValue['value']>}`
|
|
56
|
+
|
|
57
|
+
export type IsMatchResult<
|
|
58
|
+
TKey,
|
|
59
|
+
TMatchAndValue extends AnyMatchAndValue,
|
|
60
|
+
> = TMatchAndValue extends any
|
|
61
|
+
? TKey extends keyof TMatchAndValue['value']
|
|
62
|
+
? TMatchAndValue['match']
|
|
63
|
+
: never
|
|
64
|
+
: never
|
|
65
|
+
|
|
66
|
+
export type IsMatchParse<
|
|
67
|
+
TPath,
|
|
68
|
+
TMatchAndValue extends AnyMatchAndValue,
|
|
69
|
+
TParentPath extends string = '',
|
|
70
|
+
> = TPath extends `${string}.${string}`
|
|
71
|
+
? TPath extends `${infer TFirst}.${infer TRest}`
|
|
72
|
+
? IsMatchParse<
|
|
73
|
+
TRest,
|
|
74
|
+
NextMatchAndValue<TFirst, TMatchAndValue>,
|
|
75
|
+
`${TParentPath}${TFirst}.`
|
|
76
|
+
>
|
|
77
|
+
: never
|
|
78
|
+
: {
|
|
79
|
+
path: IsMatchPath<TParentPath, TMatchAndValue>
|
|
80
|
+
result: IsMatchResult<TPath, TMatchAndValue>
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export type IsMatch<TMatch, TPath> = IsMatchParse<
|
|
84
|
+
TPath,
|
|
85
|
+
TMatch extends any ? { match: TMatch; value: TMatch } : never
|
|
86
|
+
>
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Narrows matches based on a path
|
|
90
|
+
* @experimental
|
|
91
|
+
*/
|
|
92
|
+
export const isMatch = <TMatch, TPath extends string>(
|
|
93
|
+
match: TMatch,
|
|
94
|
+
path: Constrain<TPath, IsMatch<TMatch, TPath>['path']>,
|
|
95
|
+
): match is IsMatch<TMatch, TPath>['result'] => {
|
|
96
|
+
const parts = (path as string).split('.')
|
|
97
|
+
let part
|
|
98
|
+
let i = 0
|
|
99
|
+
let value: any = match
|
|
100
|
+
|
|
101
|
+
while ((part = parts[i++]) != null && value != null) {
|
|
102
|
+
value = value[part]
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return value != null
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface DefaultRouteMatchExtensions {
|
|
109
|
+
scripts?: unknown
|
|
110
|
+
links?: unknown
|
|
111
|
+
headScripts?: unknown
|
|
112
|
+
meta?: unknown
|
|
113
|
+
styles?: unknown
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface RouteMatchExtensions extends DefaultRouteMatchExtensions {}
|
|
117
|
+
|
|
118
|
+
export interface RouteMatch<
|
|
119
|
+
out TRouteId,
|
|
120
|
+
out TFullPath,
|
|
121
|
+
out TAllParams,
|
|
122
|
+
out TFullSearchSchema,
|
|
123
|
+
out TLoaderData,
|
|
124
|
+
out TAllContext,
|
|
125
|
+
out TLoaderDeps,
|
|
126
|
+
> extends RouteMatchExtensions {
|
|
127
|
+
id: string
|
|
128
|
+
routeId: TRouteId
|
|
129
|
+
fullPath: TFullPath
|
|
130
|
+
index: number
|
|
131
|
+
pathname: string
|
|
132
|
+
params: TAllParams
|
|
133
|
+
_strictParams: TAllParams
|
|
134
|
+
status: 'pending' | 'success' | 'error' | 'redirected' | 'notFound'
|
|
135
|
+
isFetching: false | 'beforeLoad' | 'loader'
|
|
136
|
+
error: unknown
|
|
137
|
+
paramsError: unknown
|
|
138
|
+
searchError: unknown
|
|
139
|
+
updatedAt: number
|
|
140
|
+
_nonReactive: {
|
|
141
|
+
/** @internal */
|
|
142
|
+
beforeLoadPromise?: ControlledPromise<void>
|
|
143
|
+
/** @internal */
|
|
144
|
+
loaderPromise?: ControlledPromise<void>
|
|
145
|
+
/** @internal */
|
|
146
|
+
pendingTimeout?: ReturnType<typeof setTimeout>
|
|
147
|
+
loadPromise?: ControlledPromise<void>
|
|
148
|
+
displayPendingPromise?: Promise<void>
|
|
149
|
+
minPendingPromise?: ControlledPromise<void>
|
|
150
|
+
dehydrated?: boolean
|
|
151
|
+
/** @internal */
|
|
152
|
+
error?: unknown
|
|
153
|
+
}
|
|
154
|
+
loaderData?: TLoaderData
|
|
155
|
+
/** @internal */
|
|
156
|
+
__routeContext?: Record<string, unknown>
|
|
157
|
+
/** @internal */
|
|
158
|
+
__beforeLoadContext?: Record<string, unknown>
|
|
159
|
+
context: TAllContext
|
|
160
|
+
search: TFullSearchSchema
|
|
161
|
+
_strictSearch: TFullSearchSchema
|
|
162
|
+
fetchCount: number
|
|
163
|
+
abortController: AbortController
|
|
164
|
+
cause: 'preload' | 'enter' | 'stay'
|
|
165
|
+
loaderDeps: TLoaderDeps
|
|
166
|
+
preload: boolean
|
|
167
|
+
invalid: boolean
|
|
168
|
+
headers?: Record<string, string>
|
|
169
|
+
globalNotFound?: boolean
|
|
170
|
+
staticData: StaticDataRouteOption
|
|
171
|
+
/** This attribute is not reactive */
|
|
172
|
+
ssr?: SSROption
|
|
173
|
+
_forcePending?: boolean
|
|
174
|
+
_displayPending?: boolean
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export interface PreValidationErrorHandlingRouteMatch<
|
|
178
|
+
TRouteId,
|
|
179
|
+
TFullPath,
|
|
180
|
+
TAllParams,
|
|
181
|
+
TFullSearchSchema,
|
|
182
|
+
> {
|
|
183
|
+
id: string
|
|
184
|
+
routeId: TRouteId
|
|
185
|
+
fullPath: TFullPath
|
|
186
|
+
index: number
|
|
187
|
+
pathname: string
|
|
188
|
+
search:
|
|
189
|
+
| { status: 'success'; value: TFullSearchSchema }
|
|
190
|
+
| { status: 'error'; error: unknown }
|
|
191
|
+
params:
|
|
192
|
+
| { status: 'success'; value: TAllParams }
|
|
193
|
+
| { status: 'error'; error: unknown }
|
|
194
|
+
staticData: StaticDataRouteOption
|
|
195
|
+
ssr?: boolean | 'data-only'
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export type MakePreValidationErrorHandlingRouteMatchUnion<
|
|
199
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
200
|
+
TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,
|
|
201
|
+
> = TRoute extends any
|
|
202
|
+
? PreValidationErrorHandlingRouteMatch<
|
|
203
|
+
TRoute['id'],
|
|
204
|
+
TRoute['fullPath'],
|
|
205
|
+
TRoute['types']['allParams'],
|
|
206
|
+
TRoute['types']['fullSearchSchema']
|
|
207
|
+
>
|
|
208
|
+
: never
|
|
209
|
+
|
|
210
|
+
export type MakeRouteMatchFromRoute<TRoute extends AnyRoute> = RouteMatch<
|
|
211
|
+
TRoute['types']['id'],
|
|
212
|
+
TRoute['types']['fullPath'],
|
|
213
|
+
TRoute['types']['allParams'],
|
|
214
|
+
TRoute['types']['fullSearchSchema'],
|
|
215
|
+
TRoute['types']['loaderData'],
|
|
216
|
+
TRoute['types']['allContext'],
|
|
217
|
+
TRoute['types']['loaderDeps']
|
|
218
|
+
>
|
|
219
|
+
|
|
220
|
+
export type MakeRouteMatch<
|
|
221
|
+
TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],
|
|
222
|
+
TRouteId = RouteIds<TRouteTree>,
|
|
223
|
+
TStrict extends boolean = true,
|
|
224
|
+
> = RouteMatch<
|
|
225
|
+
TRouteId,
|
|
226
|
+
RouteById<TRouteTree, TRouteId>['types']['fullPath'],
|
|
227
|
+
TStrict extends false
|
|
228
|
+
? AllParams<TRouteTree>
|
|
229
|
+
: RouteById<TRouteTree, TRouteId>['types']['allParams'],
|
|
230
|
+
TStrict extends false
|
|
231
|
+
? FullSearchSchema<TRouteTree>
|
|
232
|
+
: RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema'],
|
|
233
|
+
TStrict extends false
|
|
234
|
+
? AllLoaderData<TRouteTree>
|
|
235
|
+
: RouteById<TRouteTree, TRouteId>['types']['loaderData'],
|
|
236
|
+
TStrict extends false
|
|
237
|
+
? AllContext<TRouteTree>
|
|
238
|
+
: RouteById<TRouteTree, TRouteId>['types']['allContext'],
|
|
239
|
+
RouteById<TRouteTree, TRouteId>['types']['loaderDeps']
|
|
240
|
+
>
|
|
241
|
+
|
|
242
|
+
export type AnyRouteMatch = RouteMatch<any, any, any, any, any, any, any>
|
|
243
|
+
|
|
244
|
+
export type MakeRouteMatchUnion<
|
|
245
|
+
TRouter extends AnyRouter = RegisteredRouter,
|
|
246
|
+
TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,
|
|
247
|
+
> = TRoute extends any
|
|
248
|
+
? RouteMatch<
|
|
249
|
+
TRoute['id'],
|
|
250
|
+
TRoute['fullPath'],
|
|
251
|
+
TRoute['types']['allParams'],
|
|
252
|
+
TRoute['types']['fullSearchSchema'],
|
|
253
|
+
TRoute['types']['loaderData'],
|
|
254
|
+
TRoute['types']['allContext'],
|
|
255
|
+
TRoute['types']['loaderDeps']
|
|
256
|
+
>
|
|
257
|
+
: never
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* The `MatchRouteOptions` type is used to describe the options that can be used when matching a route.
|
|
261
|
+
*
|
|
262
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/MatchRouteOptionsType#matchrouteoptions-type)
|
|
263
|
+
*/
|
|
264
|
+
export interface MatchRouteOptions {
|
|
265
|
+
/**
|
|
266
|
+
* If `true`, will match against pending location instead of the current location.
|
|
267
|
+
*
|
|
268
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/MatchRouteOptionsType#pending-property)
|
|
269
|
+
*/
|
|
270
|
+
pending?: boolean
|
|
271
|
+
/**
|
|
272
|
+
* If `true`, will match against the current location with case sensitivity.
|
|
273
|
+
*
|
|
274
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/MatchRouteOptionsType#casesensitive-property)
|
|
275
|
+
*
|
|
276
|
+
* @deprecated Declare case sensitivity in the route definition instead, or globally for all routes using the `caseSensitive` option on the router.
|
|
277
|
+
*/
|
|
278
|
+
caseSensitive?: boolean
|
|
279
|
+
/**
|
|
280
|
+
* If `true`, will match against the current location's search params using a deep inclusive check. e.g. `{ a: 1 }` will match for a current location of `{ a: 1, b: 2 }`.
|
|
281
|
+
*
|
|
282
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/MatchRouteOptionsType#includesearch-property)
|
|
283
|
+
*/
|
|
284
|
+
includeSearch?: boolean
|
|
285
|
+
/**
|
|
286
|
+
* If `true`, will match against the current location using a fuzzy match. e.g. `/posts` will match for a current location of `/posts/123`.
|
|
287
|
+
*
|
|
288
|
+
* @link [API Docs](https://tanstack.com/router/latest/docs/framework/react/api/router/MatchRouteOptionsType#fuzzy-property)
|
|
289
|
+
*/
|
|
290
|
+
fuzzy?: boolean
|
|
291
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { NavigateOptions, ToOptions } from './link'
|
|
2
|
+
import type { ParsedLocation } from './location'
|
|
3
|
+
import type { RoutePaths } from './routeInfo'
|
|
4
|
+
import type { RegisteredRouter, ViewTransitionOptions } from './router'
|
|
5
|
+
|
|
6
|
+
export interface MatchLocation {
|
|
7
|
+
to?: string | number | null
|
|
8
|
+
fuzzy?: boolean
|
|
9
|
+
caseSensitive?: boolean
|
|
10
|
+
from?: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface CommitLocationOptions {
|
|
14
|
+
replace?: boolean
|
|
15
|
+
resetScroll?: boolean
|
|
16
|
+
hashScrollIntoView?: boolean | ScrollIntoViewOptions
|
|
17
|
+
viewTransition?: boolean | ViewTransitionOptions
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated All navigations use transitions under the hood now
|
|
20
|
+
**/
|
|
21
|
+
startTransition?: boolean
|
|
22
|
+
ignoreBlocker?: boolean
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type NavigateFn = <
|
|
26
|
+
TRouter extends RegisteredRouter,
|
|
27
|
+
TTo extends string | undefined,
|
|
28
|
+
TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
|
|
29
|
+
TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
|
|
30
|
+
TMaskTo extends string = '',
|
|
31
|
+
>(
|
|
32
|
+
opts: NavigateOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
|
|
33
|
+
) => Promise<void>
|
|
34
|
+
|
|
35
|
+
export type BuildLocationFn = <
|
|
36
|
+
TRouter extends RegisteredRouter,
|
|
37
|
+
TTo extends string | undefined,
|
|
38
|
+
TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
|
|
39
|
+
TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
|
|
40
|
+
TMaskTo extends string = '',
|
|
41
|
+
>(
|
|
42
|
+
opts: ToOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {
|
|
43
|
+
leaveParams?: boolean
|
|
44
|
+
_includeValidateSearch?: boolean
|
|
45
|
+
_isNavigate?: boolean
|
|
46
|
+
},
|
|
47
|
+
) => ParsedLocation
|
package/src/config.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { SSROption } from './router'
|
|
2
|
+
import type { AnySerializationAdapter } from './ssr/serializer/transformer'
|
|
3
|
+
|
|
4
|
+
export interface RouterConfigOptions<
|
|
5
|
+
in out TSerializationAdapters,
|
|
6
|
+
in out TDefaultSsr,
|
|
7
|
+
> {
|
|
8
|
+
serializationAdapters?: TSerializationAdapters
|
|
9
|
+
defaultSsr?: TDefaultSsr
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface RouterConfig<
|
|
13
|
+
in out TSerializationAdapters,
|
|
14
|
+
in out TDefaultSsr,
|
|
15
|
+
> {
|
|
16
|
+
'~types': RouterConfigTypes<TSerializationAdapters, TDefaultSsr>
|
|
17
|
+
serializationAdapters: TSerializationAdapters
|
|
18
|
+
defaultSsr: TDefaultSsr | undefined
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface RouterConfigTypes<
|
|
22
|
+
in out TSerializationAdapters,
|
|
23
|
+
in out TDefaultSsr,
|
|
24
|
+
> {
|
|
25
|
+
serializationAdapters: TSerializationAdapters
|
|
26
|
+
defaultSsr: TDefaultSsr
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const createRouterConfig = <
|
|
30
|
+
const TSerializationAdapters extends ReadonlyArray<AnySerializationAdapter> =
|
|
31
|
+
[],
|
|
32
|
+
TDefaultSsr extends SSROption = SSROption,
|
|
33
|
+
>(
|
|
34
|
+
options: RouterConfigOptions<TSerializationAdapters, TDefaultSsr>,
|
|
35
|
+
): RouterConfig<TSerializationAdapters, TDefaultSsr> => {
|
|
36
|
+
return {
|
|
37
|
+
serializationAdapters: options.serializationAdapters,
|
|
38
|
+
defaultSsr: options.defaultSsr,
|
|
39
|
+
} as RouterConfig<TSerializationAdapters, TDefaultSsr>
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export type AnyRouterConfig = RouterConfig<any, any>
|
package/src/defer.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { defaultSerializeError } from './router'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Well-known symbol used by {@link defer} to tag a promise with
|
|
5
|
+
* its deferred state. Consumers can read `promise[TSR_DEFERRED_PROMISE]`
|
|
6
|
+
* to access `status`, `data`, or `error`.
|
|
7
|
+
*/
|
|
8
|
+
export const TSR_DEFERRED_PROMISE = Symbol.for('TSR_DEFERRED_PROMISE')
|
|
9
|
+
|
|
10
|
+
export type DeferredPromiseState<T> =
|
|
11
|
+
| {
|
|
12
|
+
status: 'pending'
|
|
13
|
+
data?: T
|
|
14
|
+
error?: unknown
|
|
15
|
+
}
|
|
16
|
+
| {
|
|
17
|
+
status: 'success'
|
|
18
|
+
data: T
|
|
19
|
+
}
|
|
20
|
+
| {
|
|
21
|
+
status: 'error'
|
|
22
|
+
data?: T
|
|
23
|
+
error: unknown
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type DeferredPromise<T> = Promise<T> & {
|
|
27
|
+
[TSR_DEFERRED_PROMISE]: DeferredPromiseState<T>
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Wrap a promise with a deferred state for use with `<Await>` and `useAwaited`.
|
|
32
|
+
*
|
|
33
|
+
* The returned promise is augmented with internal state (status/data/error)
|
|
34
|
+
* so UI can read progress or suspend until it settles.
|
|
35
|
+
*
|
|
36
|
+
* @param _promise The promise to wrap.
|
|
37
|
+
* @param options Optional config. Provide `serializeError` to customize how
|
|
38
|
+
* errors are serialized for transfer.
|
|
39
|
+
* @returns The same promise with attached deferred metadata.
|
|
40
|
+
* @link https://tanstack.com/router/latest/docs/framework/react/api/router/deferFunction
|
|
41
|
+
*/
|
|
42
|
+
export function defer<T>(
|
|
43
|
+
_promise: Promise<T>,
|
|
44
|
+
options?: {
|
|
45
|
+
serializeError?: typeof defaultSerializeError
|
|
46
|
+
},
|
|
47
|
+
) {
|
|
48
|
+
const promise = _promise as DeferredPromise<T>
|
|
49
|
+
// this is already deferred promise
|
|
50
|
+
if ((promise as any)[TSR_DEFERRED_PROMISE]) {
|
|
51
|
+
return promise
|
|
52
|
+
}
|
|
53
|
+
promise[TSR_DEFERRED_PROMISE] = { status: 'pending' }
|
|
54
|
+
|
|
55
|
+
promise
|
|
56
|
+
.then((data) => {
|
|
57
|
+
promise[TSR_DEFERRED_PROMISE].status = 'success'
|
|
58
|
+
promise[TSR_DEFERRED_PROMISE].data = data
|
|
59
|
+
})
|
|
60
|
+
.catch((error) => {
|
|
61
|
+
promise[TSR_DEFERRED_PROMISE].status = 'error'
|
|
62
|
+
;(promise[TSR_DEFERRED_PROMISE] as any).error = {
|
|
63
|
+
data: (options?.serializeError ?? defaultSerializeError)(error),
|
|
64
|
+
__isServerError: true,
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
return promise
|
|
69
|
+
}
|
package/src/fileRoute.ts
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import type { Register } from './router'
|
|
2
|
+
import type {
|
|
3
|
+
AnyContext,
|
|
4
|
+
AnyPathParams,
|
|
5
|
+
AnyRoute,
|
|
6
|
+
FileBaseRouteOptions,
|
|
7
|
+
ResolveParams,
|
|
8
|
+
Route,
|
|
9
|
+
RouteConstraints,
|
|
10
|
+
UpdatableRouteOptions,
|
|
11
|
+
} from './route'
|
|
12
|
+
import type { AnyValidator } from './validators'
|
|
13
|
+
|
|
14
|
+
export interface FileRouteTypes {
|
|
15
|
+
fileRoutesByFullPath: any
|
|
16
|
+
fullPaths: any
|
|
17
|
+
to: any
|
|
18
|
+
fileRoutesByTo: any
|
|
19
|
+
id: any
|
|
20
|
+
fileRoutesById: any
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type InferFileRouteTypes<TRouteTree extends AnyRoute> =
|
|
24
|
+
unknown extends TRouteTree['types']['fileRouteTypes']
|
|
25
|
+
? never
|
|
26
|
+
: TRouteTree['types']['fileRouteTypes'] extends FileRouteTypes
|
|
27
|
+
? TRouteTree['types']['fileRouteTypes']
|
|
28
|
+
: never
|
|
29
|
+
|
|
30
|
+
export interface FileRoutesByPath {
|
|
31
|
+
// '/': {
|
|
32
|
+
// parentRoute: typeof rootRoute
|
|
33
|
+
// }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface FileRouteOptions<
|
|
37
|
+
TRegister,
|
|
38
|
+
TFilePath extends string,
|
|
39
|
+
TParentRoute extends AnyRoute,
|
|
40
|
+
TId extends RouteConstraints['TId'],
|
|
41
|
+
TPath extends RouteConstraints['TPath'],
|
|
42
|
+
TFullPath extends RouteConstraints['TFullPath'],
|
|
43
|
+
TSearchValidator = undefined,
|
|
44
|
+
TParams = ResolveParams<TPath>,
|
|
45
|
+
TRouteContextFn = AnyContext,
|
|
46
|
+
TBeforeLoadFn = AnyContext,
|
|
47
|
+
TLoaderDeps extends Record<string, any> = {},
|
|
48
|
+
TLoaderFn = undefined,
|
|
49
|
+
TSSR = unknown,
|
|
50
|
+
TServerMiddlewares = unknown,
|
|
51
|
+
THandlers = undefined,
|
|
52
|
+
>
|
|
53
|
+
extends
|
|
54
|
+
FileBaseRouteOptions<
|
|
55
|
+
TRegister,
|
|
56
|
+
TParentRoute,
|
|
57
|
+
TId,
|
|
58
|
+
TPath,
|
|
59
|
+
TSearchValidator,
|
|
60
|
+
TParams,
|
|
61
|
+
TLoaderDeps,
|
|
62
|
+
TLoaderFn,
|
|
63
|
+
AnyContext,
|
|
64
|
+
TRouteContextFn,
|
|
65
|
+
TBeforeLoadFn,
|
|
66
|
+
AnyContext,
|
|
67
|
+
TSSR,
|
|
68
|
+
TServerMiddlewares,
|
|
69
|
+
THandlers
|
|
70
|
+
>,
|
|
71
|
+
UpdatableRouteOptions<
|
|
72
|
+
TParentRoute,
|
|
73
|
+
TId,
|
|
74
|
+
TFullPath,
|
|
75
|
+
TParams,
|
|
76
|
+
TSearchValidator,
|
|
77
|
+
TLoaderFn,
|
|
78
|
+
TLoaderDeps,
|
|
79
|
+
AnyContext,
|
|
80
|
+
TRouteContextFn,
|
|
81
|
+
TBeforeLoadFn
|
|
82
|
+
> {}
|
|
83
|
+
|
|
84
|
+
export type CreateFileRoute<
|
|
85
|
+
TFilePath extends string,
|
|
86
|
+
TParentRoute extends AnyRoute,
|
|
87
|
+
TId extends RouteConstraints['TId'],
|
|
88
|
+
TPath extends RouteConstraints['TPath'],
|
|
89
|
+
TFullPath extends RouteConstraints['TFullPath'],
|
|
90
|
+
> = <
|
|
91
|
+
TRegister = Register,
|
|
92
|
+
TSearchValidator = undefined,
|
|
93
|
+
TParams = ResolveParams<TPath>,
|
|
94
|
+
TRouteContextFn = AnyContext,
|
|
95
|
+
TBeforeLoadFn = AnyContext,
|
|
96
|
+
TLoaderDeps extends Record<string, any> = {},
|
|
97
|
+
TLoaderFn = undefined,
|
|
98
|
+
TSSR = unknown,
|
|
99
|
+
TServerMiddlewares = unknown,
|
|
100
|
+
THandlers = undefined,
|
|
101
|
+
>(
|
|
102
|
+
options?: FileRouteOptions<
|
|
103
|
+
TRegister,
|
|
104
|
+
TFilePath,
|
|
105
|
+
TParentRoute,
|
|
106
|
+
TId,
|
|
107
|
+
TPath,
|
|
108
|
+
TFullPath,
|
|
109
|
+
TSearchValidator,
|
|
110
|
+
TParams,
|
|
111
|
+
TRouteContextFn,
|
|
112
|
+
TBeforeLoadFn,
|
|
113
|
+
TLoaderDeps,
|
|
114
|
+
TLoaderFn,
|
|
115
|
+
TSSR,
|
|
116
|
+
TServerMiddlewares,
|
|
117
|
+
THandlers
|
|
118
|
+
>,
|
|
119
|
+
) => Route<
|
|
120
|
+
TRegister,
|
|
121
|
+
TParentRoute,
|
|
122
|
+
TPath,
|
|
123
|
+
TFullPath,
|
|
124
|
+
TFilePath,
|
|
125
|
+
TId,
|
|
126
|
+
TSearchValidator,
|
|
127
|
+
TParams,
|
|
128
|
+
AnyContext,
|
|
129
|
+
TRouteContextFn,
|
|
130
|
+
TBeforeLoadFn,
|
|
131
|
+
TLoaderDeps,
|
|
132
|
+
TLoaderFn,
|
|
133
|
+
unknown,
|
|
134
|
+
unknown,
|
|
135
|
+
TSSR,
|
|
136
|
+
TServerMiddlewares,
|
|
137
|
+
THandlers
|
|
138
|
+
>
|
|
139
|
+
|
|
140
|
+
export type LazyRouteOptions = Pick<
|
|
141
|
+
UpdatableRouteOptions<
|
|
142
|
+
AnyRoute,
|
|
143
|
+
string,
|
|
144
|
+
string,
|
|
145
|
+
AnyPathParams,
|
|
146
|
+
AnyValidator,
|
|
147
|
+
{},
|
|
148
|
+
AnyContext,
|
|
149
|
+
AnyContext,
|
|
150
|
+
AnyContext,
|
|
151
|
+
AnyContext
|
|
152
|
+
>,
|
|
153
|
+
'component' | 'errorComponent' | 'pendingComponent' | 'notFoundComponent'
|
|
154
|
+
>
|
|
155
|
+
|
|
156
|
+
export interface LazyRoute<in out TRoute extends AnyRoute> {
|
|
157
|
+
options: {
|
|
158
|
+
id: string
|
|
159
|
+
} & LazyRouteOptions
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export type CreateLazyFileRoute<TRoute extends AnyRoute> = (
|
|
163
|
+
opts: LazyRouteOptions,
|
|
164
|
+
) => LazyRoute<TRoute>
|
package/src/global.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AnyRouter } from './router'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @private
|
|
5
|
+
* Handles hash-based scrolling after navigation completes.
|
|
6
|
+
* To be used in framework-specific <Transitioner> components during the onResolved event.
|
|
7
|
+
*/
|
|
8
|
+
export function handleHashScroll(router: AnyRouter) {
|
|
9
|
+
if (typeof document !== 'undefined' && (document as any).querySelector) {
|
|
10
|
+
const location = router.stores.location.state
|
|
11
|
+
const hashScrollIntoViewOptions =
|
|
12
|
+
location.state.__hashScrollIntoViewOptions ?? true
|
|
13
|
+
|
|
14
|
+
if (hashScrollIntoViewOptions && location.hash !== '') {
|
|
15
|
+
const el = document.getElementById(location.hash)
|
|
16
|
+
if (el) {
|
|
17
|
+
el.scrollIntoView(hashScrollIntoViewOptions)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
package/src/history.ts
ADDED