@bleedingdev/modern-js-plugin-tanstack 3.9.0-ultramodern.3 → 3.9.0-ultramodern.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli/index.js +9 -0
- package/dist/cjs/cli/tanstackTypes/source.js +3 -1
- package/dist/cjs/runtime/basepathRewrite.js +13 -6
- package/dist/cjs/runtime/lifecycle.js +7 -7
- package/dist/cjs/runtime/plugin.js +1 -1
- package/dist/cjs/runtime/plugin.node.js +5 -1
- package/dist/cjs/runtime/prefetchLink.js +2 -7
- package/dist/cjs/runtime/register.js +2 -2
- package/dist/cjs/runtime/routeTree/construction.js +2 -0
- package/dist/cjs/runtime/router.js +25 -9
- package/dist/cjs/runtime/state.js +2 -2
- package/dist/cjs/runtime/utils.js +2 -0
- package/dist/esm/cli/index.mjs +9 -0
- package/dist/esm/cli/tanstackTypes/source.mjs +3 -1
- package/dist/esm/runtime/basepathRewrite.mjs +10 -3
- package/dist/esm/runtime/lifecycle.mjs +1 -1
- package/dist/esm/runtime/plugin.mjs +1 -1
- package/dist/esm/runtime/plugin.node.mjs +5 -1
- package/dist/esm/runtime/prefetchLink.mjs +1 -6
- package/dist/esm/runtime/register.mjs +1 -1
- package/dist/esm/runtime/routeTree/construction.mjs +2 -0
- package/dist/esm/runtime/router.mjs +27 -11
- package/dist/esm/runtime/state.mjs +1 -1
- package/dist/esm/runtime/utils.mjs +2 -0
- package/dist/esm-node/cli/index.mjs +9 -0
- package/dist/esm-node/cli/tanstackTypes/source.mjs +3 -1
- package/dist/esm-node/runtime/basepathRewrite.mjs +10 -3
- package/dist/esm-node/runtime/lifecycle.mjs +1 -1
- package/dist/esm-node/runtime/plugin.mjs +1 -1
- package/dist/esm-node/runtime/plugin.node.mjs +5 -1
- package/dist/esm-node/runtime/prefetchLink.mjs +1 -6
- package/dist/esm-node/runtime/register.mjs +1 -1
- package/dist/esm-node/runtime/routeTree/construction.mjs +2 -0
- package/dist/esm-node/runtime/router.mjs +27 -11
- package/dist/esm-node/runtime/state.mjs +1 -1
- package/dist/esm-node/runtime/utils.mjs +2 -0
- package/dist/types/runtime/basepathRewrite.d.ts +2 -1
- package/dist/types/runtime/lifecycle.d.ts +9 -2
- package/dist/types/runtime/register.d.ts +1 -1
- package/dist/types/runtime/router.d.ts +2 -13
- package/dist/types/runtime/state.d.ts +1 -1
- package/dist/types/runtime/types.d.ts +2 -1
- package/package.json +12 -9
- package/rstest.config.mts +1 -6
- package/src/cli/index.ts +10 -0
- package/src/cli/tanstackTypes/source.ts +3 -1
- package/src/runtime/basepathRewrite.ts +11 -2
- package/src/runtime/lifecycle.ts +14 -3
- package/src/runtime/plugin.node.tsx +9 -2
- package/src/runtime/plugin.tsx +5 -1
- package/src/runtime/prefetchLink.tsx +1 -23
- package/src/runtime/register.ts +1 -1
- package/src/runtime/routeTree/construction.ts +2 -0
- package/src/runtime/router.ts +25 -40
- package/src/runtime/state.ts +1 -1
- package/src/runtime/types.ts +2 -2
- package/src/runtime/utils.tsx +3 -1
- package/tests/realm-isolation.test.ts +8 -2
- package/tests/router/cli.test.ts +108 -9
- package/tests/router/dataMutation.test.tsx +17 -121
- package/tests/router/flightSerialization.roundtrip.test.tsx +9 -6
- package/tests/router/generateRouteArtifacts.test.ts +69 -29
- package/tests/router/hooks.test.ts +1 -18
- package/tests/router/loaderBridge.test.ts +0 -77
- package/tests/router/localisedIdentity.test.tsx +95 -0
- package/tests/router/prefetchLink.test.tsx +28 -16
- package/tests/router/prefetchLinkPreload.test.tsx +21 -28
- package/tests/router/register.test.ts +1 -1
- package/tests/router/routeHooks.test.ts +41 -105
- package/tests/router/routeTree.test.ts +0 -212
- package/tests/router/routerCompatibility.test.ts +32 -9
- package/tests/router/rsc.test.tsx +118 -136
- package/tests/router/rscDecoderSecurity.test.ts +24 -53
- package/tests/router/serverPlugin.test.ts +43 -1
- package/tests/router/tanstackTypes.test.ts +24 -364
- package/tests/router/fastDefaults.test.ts +0 -32
- package/tests/router/hydrationBoundary.test.tsx +0 -23
- package/tests/router/packageSurface.test.ts +0 -24
- package/tests/router/preloadRedirect.test.ts +0 -64
- package/tests/router/rscPayloadRouterMatrix.test.ts +0 -197
package/dist/cjs/cli/index.js
CHANGED
|
@@ -91,6 +91,15 @@ var __webpack_exports__ = {};
|
|
|
91
91
|
'@modern-js/runtime'
|
|
92
92
|
],
|
|
93
93
|
setup: (api)=>{
|
|
94
|
+
const { srcDirectory, serverCompileExcludedFiles = [] } = api.getAppContext();
|
|
95
|
+
api.updateAppContext({
|
|
96
|
+
serverCompileExcludedFiles: [
|
|
97
|
+
...new Set([
|
|
98
|
+
...serverCompileExcludedFiles,
|
|
99
|
+
external_node_path_default().join(srcDirectory, generatedDirName, 'register.gen.d.ts')
|
|
100
|
+
])
|
|
101
|
+
]
|
|
102
|
+
});
|
|
94
103
|
const nestedRoutesForServer = {};
|
|
95
104
|
const isTanstackEntrypoint = (entrypoint)=>{
|
|
96
105
|
const { getEntrypointRoutesDir } = getRuntimeRouterCli();
|
|
@@ -30,11 +30,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
generateTanstackRouterTypesSourceForEntry: ()=>generateTanstackRouterTypesSourceForEntry
|
|
32
32
|
});
|
|
33
|
+
const i18n_runtime_extensions_namespaceObject = require("@modern-js/i18n-runtime-extensions");
|
|
33
34
|
const cli_namespaceObject = require("@modern-js/runtime/cli");
|
|
34
35
|
const utils_namespaceObject = require("@modern-js/utils");
|
|
35
36
|
const external_shared_js_namespaceObject = require("./shared.js");
|
|
36
37
|
async function generateTanstackRouterTypesSourceForEntry(opts) {
|
|
37
|
-
const { appContext, entryName, generatedDirName = 'modern-tanstack', routes } = opts;
|
|
38
|
+
const { appContext, entryName, generatedDirName = 'modern-tanstack', routes: rawRoutes } = opts;
|
|
39
|
+
const routes = (0, i18n_runtime_extensions_namespaceObject.canonicaliseLocalisedRoutes)(rawRoutes);
|
|
38
40
|
const outDir = utils_namespaceObject.upath.join(appContext.srcDirectory, generatedDirName, entryName);
|
|
39
41
|
const rootModern = routes.find((r)=>{
|
|
40
42
|
const extras = r;
|
|
@@ -27,19 +27,25 @@ var __webpack_require__ = {};
|
|
|
27
27
|
})();
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
+
createModernBasepathRewrite: ()=>createModernBasepathRewrite
|
|
32
|
+
});
|
|
33
|
+
const i18n_runtime_extensions_namespaceObject = require("@modern-js/i18n-runtime-extensions");
|
|
34
|
+
const react_router_namespaceObject = require("@tanstack/react-router");
|
|
30
35
|
function normalizeBasepath(basepath) {
|
|
31
36
|
if (!basepath) return '/';
|
|
32
37
|
let normalized = basepath.startsWith('/') ? basepath : `/${basepath}`;
|
|
33
38
|
if (normalized.length > 1 && normalized.endsWith('/')) normalized = normalized.slice(0, -1);
|
|
34
39
|
return normalized || '/';
|
|
35
40
|
}
|
|
36
|
-
function createModernBasepathRewrite(basepath, caseSensitive = false) {
|
|
41
|
+
function createModernBasepathRewrite(basepath, caseSensitive = false, routes = []) {
|
|
42
|
+
const localisedRewrite = (0, i18n_runtime_extensions_namespaceObject.createLocalisedRouteRewrite)(routes);
|
|
37
43
|
const normalizedBasepath = normalizeBasepath(basepath);
|
|
38
|
-
if ('/' === normalizedBasepath) return;
|
|
44
|
+
if ('/' === normalizedBasepath) return localisedRewrite;
|
|
39
45
|
const normalizedBasepathWithSlash = `${normalizedBasepath}/`;
|
|
40
46
|
const checkBasepath = caseSensitive ? normalizedBasepath : normalizedBasepath.toLowerCase();
|
|
41
47
|
const checkBasepathWithSlash = caseSensitive ? normalizedBasepathWithSlash : normalizedBasepathWithSlash.toLowerCase();
|
|
42
|
-
|
|
48
|
+
const basepathRewrite = {
|
|
43
49
|
input: ({ url })=>{
|
|
44
50
|
const pathname = caseSensitive ? url.pathname : url.pathname.toLowerCase();
|
|
45
51
|
if (pathname === checkBasepath) url.pathname = '/';
|
|
@@ -53,10 +59,11 @@ function createModernBasepathRewrite(basepath, caseSensitive = false) {
|
|
|
53
59
|
return url;
|
|
54
60
|
}
|
|
55
61
|
};
|
|
62
|
+
return localisedRewrite ? (0, react_router_namespaceObject.composeRewrites)([
|
|
63
|
+
basepathRewrite,
|
|
64
|
+
localisedRewrite
|
|
65
|
+
]) : basepathRewrite;
|
|
56
66
|
}
|
|
57
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
58
|
-
createModernBasepathRewrite: ()=>createModernBasepathRewrite
|
|
59
|
-
});
|
|
60
67
|
exports.createModernBasepathRewrite = __webpack_exports__.createModernBasepathRewrite;
|
|
61
68
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
62
69
|
"createModernBasepathRewrite"
|
|
@@ -28,14 +28,14 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
-
applyRouterRuntimeState: ()=>
|
|
32
|
-
applyRouterServerPrepareResult: ()=>
|
|
33
|
-
createRouterRuntimeState: ()=>
|
|
34
|
-
createRouterServerSnapshot: ()=>
|
|
35
|
-
getRouterRuntimeState: ()=>
|
|
36
|
-
getRouterServerSnapshot: ()=>
|
|
31
|
+
applyRouterRuntimeState: ()=>router_state_namespaceObject.applyRouterRuntimeState,
|
|
32
|
+
applyRouterServerPrepareResult: ()=>router_state_namespaceObject.applyRouterServerPrepareResult,
|
|
33
|
+
createRouterRuntimeState: ()=>router_state_namespaceObject.createRouterRuntimeState,
|
|
34
|
+
createRouterServerSnapshot: ()=>router_state_namespaceObject.createRouterServerSnapshot,
|
|
35
|
+
getRouterRuntimeState: ()=>router_state_namespaceObject.getRouterRuntimeState,
|
|
36
|
+
getRouterServerSnapshot: ()=>router_state_namespaceObject.getRouterServerSnapshot
|
|
37
37
|
});
|
|
38
|
-
const
|
|
38
|
+
const router_state_namespaceObject = require("@modern-js/runtime-extensions/router-state");
|
|
39
39
|
exports.applyRouterRuntimeState = __webpack_exports__.applyRouterRuntimeState;
|
|
40
40
|
exports.applyRouterServerPrepareResult = __webpack_exports__.applyRouterServerPrepareResult;
|
|
41
41
|
exports.createRouterRuntimeState = __webpack_exports__.createRouterRuntimeState;
|
|
@@ -110,7 +110,7 @@ const tanstackRouterPlugin = (userConfig = {})=>{
|
|
|
110
110
|
const mergedConfig = getMergedConfig();
|
|
111
111
|
const { supportHtml5History = true } = mergedConfig;
|
|
112
112
|
const history = supportHtml5History ? (0, react_router_namespaceObject.createBrowserHistory)() : (0, react_router_namespaceObject.createHashHistory)();
|
|
113
|
-
const rewrite = (0, external_basepathRewrite_js_namespaceObject.createModernBasepathRewrite)(_basename);
|
|
113
|
+
const rewrite = (0, external_basepathRewrite_js_namespaceObject.createModernBasepathRewrite)(_basename, false, getRouteObjects());
|
|
114
114
|
const serializationAdapters = (0, context_namespaceObject.getGlobalEnableRsc)() ? (0, client_js_namespaceObject.getTanstackRscSerializationAdapters)() : void 0;
|
|
115
115
|
const routerFastDefaults = (0, external_types_js_namespaceObject.getModernTanstackRouterFastDefaults)(mergedConfig);
|
|
116
116
|
cachedRouter = (0, react_router_namespaceObject.createRouter)({
|
|
@@ -43,6 +43,7 @@ const external_hooks_js_namespaceObject = require("./hooks.js");
|
|
|
43
43
|
const external_hydrationBoundary_js_namespaceObject = require("./hydrationBoundary.js");
|
|
44
44
|
const external_lifecycle_js_namespaceObject = require("./lifecycle.js");
|
|
45
45
|
const external_pluginShared_js_namespaceObject = require("./pluginShared.js");
|
|
46
|
+
const external_prefetchLink_js_namespaceObject = require("./prefetchLink.js");
|
|
46
47
|
const index_js_namespaceObject = require("./routeTree/index.js");
|
|
47
48
|
const payloadRouter_js_namespaceObject = require("./rsc/payloadRouter.js");
|
|
48
49
|
const payloadStorage_js_namespaceObject = require("./rsc/payloadStorage.js");
|
|
@@ -68,6 +69,9 @@ const tanstackRouterPlugin = (userConfig = {})=>{
|
|
|
68
69
|
routeConfig
|
|
69
70
|
});
|
|
70
71
|
if (!modifiedRouteObjects.length) return;
|
|
72
|
+
context.router = {
|
|
73
|
+
Link: external_prefetchLink_js_namespaceObject.Link
|
|
74
|
+
};
|
|
71
75
|
const { request, nonce, baseUrl, loaderFailureMode = 'errorBoundary' } = context.ssrContext;
|
|
72
76
|
const _basename = '/' === baseUrl ? (0, external_pluginShared_js_namespaceObject.joinBasename)(baseUrl, basename || '') : baseUrl;
|
|
73
77
|
const rawRequest = request.raw;
|
|
@@ -90,7 +94,7 @@ const tanstackRouterPlugin = (userConfig = {})=>{
|
|
|
90
94
|
initialHref
|
|
91
95
|
]
|
|
92
96
|
});
|
|
93
|
-
const rewrite = (0, external_basepathRewrite_js_namespaceObject.createModernBasepathRewrite)(_basename);
|
|
97
|
+
const rewrite = (0, external_basepathRewrite_js_namespaceObject.createModernBasepathRewrite)(_basename, false, modifiedRouteObjects);
|
|
94
98
|
const routerLifecycleContext = {
|
|
95
99
|
framework: 'tanstack',
|
|
96
100
|
phase: 'ssr-prepare',
|
|
@@ -32,19 +32,14 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
32
32
|
NavLink: ()=>NavLink
|
|
33
33
|
});
|
|
34
34
|
const jsx_runtime_namespaceObject = require("react/jsx-runtime");
|
|
35
|
+
const runtime_extensions_namespaceObject = require("@modern-js/runtime-extensions");
|
|
35
36
|
const react_router_namespaceObject = require("@tanstack/react-router");
|
|
36
|
-
function resolvePreloadFromPrefetch(prefetch, preload) {
|
|
37
|
-
if (void 0 !== preload) return preload;
|
|
38
|
-
if ('none' === prefetch) return false;
|
|
39
|
-
if ('intent' === prefetch || 'render' === prefetch || 'viewport' === prefetch) return prefetch;
|
|
40
|
-
return 'viewport';
|
|
41
|
-
}
|
|
42
37
|
const LinkComponentImpl = (props)=>{
|
|
43
38
|
const { prefetch, preload, 'aria-current': ariaCurrentProp, ref, children, ...rest } = props;
|
|
44
39
|
const hasAriaCurrentOverride = 'aria-current' in props;
|
|
45
40
|
const linkOptions = {
|
|
46
41
|
...rest,
|
|
47
|
-
preload: resolvePreloadFromPrefetch(prefetch, preload)
|
|
42
|
+
preload: (0, runtime_extensions_namespaceObject.resolvePreloadFromPrefetch)(prefetch, preload)
|
|
48
43
|
};
|
|
49
44
|
const linkProps = (0, react_router_namespaceObject.useLinkProps)(linkOptions, ref);
|
|
50
45
|
const { disabled: _disabled, type: _type, ...anchorProps } = linkProps;
|
|
@@ -30,10 +30,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
tanstackRouterProviderFactory: ()=>tanstackRouterProviderFactory
|
|
32
32
|
});
|
|
33
|
-
const
|
|
33
|
+
const router_provider_namespaceObject = require("@modern-js/runtime-extensions/router-provider");
|
|
34
34
|
const external_plugin_js_namespaceObject = require("./plugin.js");
|
|
35
35
|
const tanstackRouterProviderFactory = (userConfig)=>(0, external_plugin_js_namespaceObject.tanstackRouterPlugin)(userConfig);
|
|
36
|
-
(0,
|
|
36
|
+
(0, router_provider_namespaceObject.registerRouterProvider)('tanstack', tanstackRouterProviderFactory);
|
|
37
37
|
exports.tanstackRouterProviderFactory = __webpack_exports__.tanstackRouterProviderFactory;
|
|
38
38
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
39
39
|
"tanstackRouterProviderFactory"
|
|
@@ -31,6 +31,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
31
31
|
createRouteTreeFromRouteObjects: ()=>createRouteTreeFromRouteObjects,
|
|
32
32
|
getModernRouteIdsFromMatches: ()=>getModernRouteIdsFromMatches
|
|
33
33
|
});
|
|
34
|
+
const i18n_runtime_extensions_namespaceObject = require("@modern-js/i18n-runtime-extensions");
|
|
34
35
|
const context_namespaceObject = require("@modern-js/runtime/context");
|
|
35
36
|
const react_router_namespaceObject = require("@tanstack/react-router");
|
|
36
37
|
const routeStaticData_js_namespaceObject = require("../../shared/routeStaticData.js");
|
|
@@ -90,6 +91,7 @@ function getRootLikeRouteObject(routes) {
|
|
|
90
91
|
return routes.find((route)=>'/' === route.path && !route.index);
|
|
91
92
|
}
|
|
92
93
|
function createRouteTreeFromRouteObjects(routes, options = {}) {
|
|
94
|
+
routes = (0, i18n_runtime_extensions_namespaceObject.canonicaliseLocalisedRoutes)(routes);
|
|
93
95
|
const rootLikeRoute = getRootLikeRouteObject(routes);
|
|
94
96
|
const rootRevalidationState = {};
|
|
95
97
|
const rootShouldRevalidate = rootLikeRoute?.shouldRevalidate;
|
|
@@ -30,21 +30,37 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
routerPlugin: ()=>routerPlugin
|
|
32
32
|
});
|
|
33
|
+
const context_namespaceObject = require("@modern-js/runtime/context");
|
|
33
34
|
const internal_namespaceObject = require("@modern-js/runtime/router/internal");
|
|
35
|
+
const router_provider_namespaceObject = require("@modern-js/runtime-extensions/router-provider");
|
|
36
|
+
const router_state_plugin_namespaceObject = require("@modern-js/runtime-extensions/router-state-plugin");
|
|
34
37
|
const external_register_js_namespaceObject = require("./register.js");
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
const createProviderPlugin = (0, router_provider_namespaceObject.createRouterPlugin)({
|
|
39
|
+
defaultProvider: {
|
|
40
|
+
name: 'react-router',
|
|
41
|
+
factory: internal_namespaceObject.routerPlugin
|
|
42
|
+
},
|
|
43
|
+
registryHooks: context_namespaceObject.routerProviderRegistryHooks,
|
|
44
|
+
localProviders: [
|
|
38
45
|
{
|
|
39
46
|
name: 'tanstack',
|
|
40
47
|
factory: external_register_js_namespaceObject.tanstackRouterProviderFactory
|
|
41
48
|
}
|
|
42
|
-
]
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
const routerPlugin =
|
|
49
|
+
]
|
|
50
|
+
});
|
|
51
|
+
const statePlugin = (0, router_state_plugin_namespaceObject.createRouterStatePlugin)({
|
|
52
|
+
registryHooks: context_namespaceObject.routerProviderRegistryHooks
|
|
53
|
+
});
|
|
54
|
+
const routerPlugin = (userConfig = {})=>{
|
|
55
|
+
const providerPlugin = createProviderPlugin(userConfig);
|
|
56
|
+
return {
|
|
57
|
+
...providerPlugin,
|
|
58
|
+
setup (api) {
|
|
59
|
+
statePlugin.setup(api);
|
|
60
|
+
providerPlugin.setup(api);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
};
|
|
48
64
|
exports.routerPlugin = __webpack_exports__.routerPlugin;
|
|
49
65
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
50
66
|
"routerPlugin"
|
|
@@ -30,9 +30,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
getTanstackRouterState: ()=>getTanstackRouterState
|
|
32
32
|
});
|
|
33
|
-
const
|
|
33
|
+
const router_state_namespaceObject = require("@modern-js/runtime-extensions/router-state");
|
|
34
34
|
function getTanstackRouterState(context) {
|
|
35
|
-
const state = (0,
|
|
35
|
+
const state = (0, router_state_namespaceObject.getRouterRuntimeState)(context);
|
|
36
36
|
if (void 0 === state || 'tanstack' !== state.framework || void 0 === state.instance) return;
|
|
37
37
|
return state;
|
|
38
38
|
}
|
|
@@ -55,6 +55,7 @@ function withGlobalLayout(Component, globalApp) {
|
|
|
55
55
|
}
|
|
56
56
|
function toTanstackRouteObject(route, globalApp) {
|
|
57
57
|
if ('nested' === route.type) return {
|
|
58
|
+
modernLocalisedRoute: Reflect.get(route, 'modernLocalisedRoute'),
|
|
58
59
|
path: route.path,
|
|
59
60
|
id: route.id,
|
|
60
61
|
loader: route.loader,
|
|
@@ -79,6 +80,7 @@ function toTanstackRouteObject(route, globalApp) {
|
|
|
79
80
|
if ('function' != typeof route.component && 'object' != typeof route.component) return null;
|
|
80
81
|
const LayoutComponent = withGlobalLayout(route.component, globalApp);
|
|
81
82
|
return {
|
|
83
|
+
modernLocalisedRoute: Reflect.get(route, 'modernLocalisedRoute'),
|
|
82
84
|
path: route.path,
|
|
83
85
|
element: /*#__PURE__*/ (external_react_default()).createElement(LayoutComponent)
|
|
84
86
|
};
|
package/dist/esm/cli/index.mjs
CHANGED
|
@@ -31,6 +31,15 @@ function tanstackRouterPlugin(options = {}) {
|
|
|
31
31
|
'@modern-js/runtime'
|
|
32
32
|
],
|
|
33
33
|
setup: (api)=>{
|
|
34
|
+
const { srcDirectory, serverCompileExcludedFiles = [] } = api.getAppContext();
|
|
35
|
+
api.updateAppContext({
|
|
36
|
+
serverCompileExcludedFiles: [
|
|
37
|
+
...new Set([
|
|
38
|
+
...serverCompileExcludedFiles,
|
|
39
|
+
node_path.join(srcDirectory, generatedDirName, 'register.gen.d.ts')
|
|
40
|
+
])
|
|
41
|
+
]
|
|
42
|
+
});
|
|
34
43
|
const nestedRoutesForServer = {};
|
|
35
44
|
const isTanstackEntrypoint = (entrypoint)=>{
|
|
36
45
|
const { getEntrypointRoutesDir } = getRuntimeRouterCli();
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { canonicaliseLocalisedRoutes } from "@modern-js/i18n-runtime-extensions";
|
|
1
2
|
import { makeLegalIdentifier } from "@modern-js/runtime/cli";
|
|
2
3
|
import { upath } from "@modern-js/utils";
|
|
3
4
|
import { createRouteStaticDataSnippet, isIndexRoute, isPathlessLayout, normalizeRelativeImport, pickModernLoaderModule, pickRouteSearchContractModules, quote, resolveFileNoExt, toTanstackPath } from "./shared.mjs";
|
|
4
5
|
async function generateTanstackRouterTypesSourceForEntry(opts) {
|
|
5
|
-
const { appContext, entryName, generatedDirName = 'modern-tanstack', routes } = opts;
|
|
6
|
+
const { appContext, entryName, generatedDirName = 'modern-tanstack', routes: rawRoutes } = opts;
|
|
7
|
+
const routes = canonicaliseLocalisedRoutes(rawRoutes);
|
|
6
8
|
const outDir = upath.join(appContext.srcDirectory, generatedDirName, entryName);
|
|
7
9
|
const rootModern = routes.find((r)=>{
|
|
8
10
|
const extras = r;
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
+
import { createLocalisedRouteRewrite } from "@modern-js/i18n-runtime-extensions";
|
|
2
|
+
import { composeRewrites } from "@tanstack/react-router";
|
|
1
3
|
function normalizeBasepath(basepath) {
|
|
2
4
|
if (!basepath) return '/';
|
|
3
5
|
let normalized = basepath.startsWith('/') ? basepath : `/${basepath}`;
|
|
4
6
|
if (normalized.length > 1 && normalized.endsWith('/')) normalized = normalized.slice(0, -1);
|
|
5
7
|
return normalized || '/';
|
|
6
8
|
}
|
|
7
|
-
function createModernBasepathRewrite(basepath, caseSensitive = false) {
|
|
9
|
+
function createModernBasepathRewrite(basepath, caseSensitive = false, routes = []) {
|
|
10
|
+
const localisedRewrite = createLocalisedRouteRewrite(routes);
|
|
8
11
|
const normalizedBasepath = normalizeBasepath(basepath);
|
|
9
|
-
if ('/' === normalizedBasepath) return;
|
|
12
|
+
if ('/' === normalizedBasepath) return localisedRewrite;
|
|
10
13
|
const normalizedBasepathWithSlash = `${normalizedBasepath}/`;
|
|
11
14
|
const checkBasepath = caseSensitive ? normalizedBasepath : normalizedBasepath.toLowerCase();
|
|
12
15
|
const checkBasepathWithSlash = caseSensitive ? normalizedBasepathWithSlash : normalizedBasepathWithSlash.toLowerCase();
|
|
13
|
-
|
|
16
|
+
const basepathRewrite = {
|
|
14
17
|
input: ({ url })=>{
|
|
15
18
|
const pathname = caseSensitive ? url.pathname : url.pathname.toLowerCase();
|
|
16
19
|
if (pathname === checkBasepath) url.pathname = '/';
|
|
@@ -24,5 +27,9 @@ function createModernBasepathRewrite(basepath, caseSensitive = false) {
|
|
|
24
27
|
return url;
|
|
25
28
|
}
|
|
26
29
|
};
|
|
30
|
+
return localisedRewrite ? composeRewrites([
|
|
31
|
+
basepathRewrite,
|
|
32
|
+
localisedRewrite
|
|
33
|
+
]) : basepathRewrite;
|
|
27
34
|
}
|
|
28
35
|
export { createModernBasepathRewrite };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { applyRouterRuntimeState, applyRouterServerPrepareResult, createRouterRuntimeState, createRouterServerSnapshot, getRouterRuntimeState, getRouterServerSnapshot } from "@modern-js/runtime/
|
|
1
|
+
export { applyRouterRuntimeState, applyRouterServerPrepareResult, createRouterRuntimeState, createRouterServerSnapshot, getRouterRuntimeState, getRouterServerSnapshot } from "@modern-js/runtime-extensions/router-state";
|
|
@@ -77,7 +77,7 @@ const tanstackRouterPlugin = (userConfig = {})=>{
|
|
|
77
77
|
const mergedConfig = getMergedConfig();
|
|
78
78
|
const { supportHtml5History = true } = mergedConfig;
|
|
79
79
|
const history = supportHtml5History ? createBrowserHistory() : createHashHistory();
|
|
80
|
-
const rewrite = createModernBasepathRewrite(_basename);
|
|
80
|
+
const rewrite = createModernBasepathRewrite(_basename, false, getRouteObjects());
|
|
81
81
|
const serializationAdapters = getGlobalEnableRsc() ? getTanstackRscSerializationAdapters() : void 0;
|
|
82
82
|
const routerFastDefaults = getModernTanstackRouterFastDefaults(mergedConfig);
|
|
83
83
|
cachedRouter = createRouter({
|
|
@@ -10,6 +10,7 @@ import { routerProviderRegistryHooks } from "./hooks.mjs";
|
|
|
10
10
|
import { wrapTanstackSsrHydrationBoundary } from "./hydrationBoundary.mjs";
|
|
11
11
|
import { applyRouterServerPrepareResult, createRouterServerSnapshot, getRouterRuntimeState } from "./lifecycle.mjs";
|
|
12
12
|
import { createTanstackRouteObjects, getTanstackRouteConfig, joinBasename } from "./pluginShared.mjs";
|
|
13
|
+
import { Link } from "./prefetchLink.mjs";
|
|
13
14
|
import { createRouteTreeFromRouteObjects, getModernRouteIdsFromMatches } from "./routeTree/index.mjs";
|
|
14
15
|
import { createTanstackRscServerPayload, handleTanstackRscRedirect } from "./rsc/payloadRouter.mjs";
|
|
15
16
|
import { getTanstackRscRouter, setTanstackRscRouter, setTanstackRscServerPayload } from "./rsc/payloadStorage.mjs";
|
|
@@ -35,6 +36,9 @@ const tanstackRouterPlugin = (userConfig = {})=>{
|
|
|
35
36
|
routeConfig
|
|
36
37
|
});
|
|
37
38
|
if (!modifiedRouteObjects.length) return;
|
|
39
|
+
context.router = {
|
|
40
|
+
Link: Link
|
|
41
|
+
};
|
|
38
42
|
const { request, nonce, baseUrl, loaderFailureMode = 'errorBoundary' } = context.ssrContext;
|
|
39
43
|
const _basename = '/' === baseUrl ? joinBasename(baseUrl, basename || '') : baseUrl;
|
|
40
44
|
const rawRequest = request.raw;
|
|
@@ -57,7 +61,7 @@ const tanstackRouterPlugin = (userConfig = {})=>{
|
|
|
57
61
|
initialHref
|
|
58
62
|
]
|
|
59
63
|
});
|
|
60
|
-
const rewrite = createModernBasepathRewrite(_basename);
|
|
64
|
+
const rewrite = createModernBasepathRewrite(_basename, false, modifiedRouteObjects);
|
|
61
65
|
const routerLifecycleContext = {
|
|
62
66
|
framework: 'tanstack',
|
|
63
67
|
phase: 'ssr-prepare',
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { resolvePreloadFromPrefetch } from "@modern-js/runtime-extensions";
|
|
2
3
|
import { useLinkProps } from "@tanstack/react-router";
|
|
3
|
-
function resolvePreloadFromPrefetch(prefetch, preload) {
|
|
4
|
-
if (void 0 !== preload) return preload;
|
|
5
|
-
if ('none' === prefetch) return false;
|
|
6
|
-
if ('intent' === prefetch || 'render' === prefetch || 'viewport' === prefetch) return prefetch;
|
|
7
|
-
return 'viewport';
|
|
8
|
-
}
|
|
9
4
|
const LinkComponentImpl = (props)=>{
|
|
10
5
|
const { prefetch, preload, 'aria-current': ariaCurrentProp, ref, children, ...rest } = props;
|
|
11
6
|
const hasAriaCurrentOverride = 'aria-current' in props;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { registerRouterProvider } from "@modern-js/runtime/
|
|
1
|
+
import { registerRouterProvider } from "@modern-js/runtime-extensions/router-provider";
|
|
2
2
|
import { tanstackRouterPlugin } from "./plugin.mjs";
|
|
3
3
|
const tanstackRouterProviderFactory = (userConfig)=>tanstackRouterPlugin(userConfig);
|
|
4
4
|
registerRouterProvider('tanstack', tanstackRouterProviderFactory);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { canonicaliseLocalisedRoutes } from "@modern-js/i18n-runtime-extensions";
|
|
1
2
|
import { DefaultNotFound } from "@modern-js/runtime/context";
|
|
2
3
|
import { rootRouteId } from "@tanstack/react-router";
|
|
3
4
|
import { createRouteStaticData } from "../../shared/routeStaticData.mjs";
|
|
@@ -57,6 +58,7 @@ function getRootLikeRouteObject(routes) {
|
|
|
57
58
|
return routes.find((route)=>'/' === route.path && !route.index);
|
|
58
59
|
}
|
|
59
60
|
function createRouteTreeFromRouteObjects(routes, options = {}) {
|
|
61
|
+
routes = canonicaliseLocalisedRoutes(routes);
|
|
60
62
|
const rootLikeRoute = getRootLikeRouteObject(routes);
|
|
61
63
|
const rootRevalidationState = {};
|
|
62
64
|
const rootShouldRevalidate = rootLikeRoute?.shouldRevalidate;
|
|
@@ -1,16 +1,32 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { routerProviderRegistryHooks } from "@modern-js/runtime/context";
|
|
2
|
+
import { routerPlugin } from "@modern-js/runtime/router/internal";
|
|
3
|
+
import { createRouterPlugin } from "@modern-js/runtime-extensions/router-provider";
|
|
4
|
+
import { createRouterStatePlugin } from "@modern-js/runtime-extensions/router-state-plugin";
|
|
2
5
|
import { tanstackRouterProviderFactory } from "./register.mjs";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
const createProviderPlugin = createRouterPlugin({
|
|
7
|
+
defaultProvider: {
|
|
8
|
+
name: 'react-router',
|
|
9
|
+
factory: routerPlugin
|
|
10
|
+
},
|
|
11
|
+
registryHooks: routerProviderRegistryHooks,
|
|
12
|
+
localProviders: [
|
|
6
13
|
{
|
|
7
14
|
name: 'tanstack',
|
|
8
15
|
factory: tanstackRouterProviderFactory
|
|
9
16
|
}
|
|
10
|
-
]
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
+
]
|
|
18
|
+
});
|
|
19
|
+
const statePlugin = createRouterStatePlugin({
|
|
20
|
+
registryHooks: routerProviderRegistryHooks
|
|
21
|
+
});
|
|
22
|
+
const router_routerPlugin = (userConfig = {})=>{
|
|
23
|
+
const providerPlugin = createProviderPlugin(userConfig);
|
|
24
|
+
return {
|
|
25
|
+
...providerPlugin,
|
|
26
|
+
setup (api) {
|
|
27
|
+
statePlugin.setup(api);
|
|
28
|
+
providerPlugin.setup(api);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export { router_routerPlugin as routerPlugin };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getRouterRuntimeState } from "@modern-js/runtime/
|
|
1
|
+
import { getRouterRuntimeState } from "@modern-js/runtime-extensions/router-state";
|
|
2
2
|
function getTanstackRouterState(context) {
|
|
3
3
|
const state = getRouterRuntimeState(context);
|
|
4
4
|
if (void 0 === state || 'tanstack' !== state.framework || void 0 === state.instance) return;
|
|
@@ -13,6 +13,7 @@ function withGlobalLayout(Component, globalApp) {
|
|
|
13
13
|
}
|
|
14
14
|
function toTanstackRouteObject(route, globalApp) {
|
|
15
15
|
if ('nested' === route.type) return {
|
|
16
|
+
modernLocalisedRoute: Reflect.get(route, 'modernLocalisedRoute'),
|
|
16
17
|
path: route.path,
|
|
17
18
|
id: route.id,
|
|
18
19
|
loader: route.loader,
|
|
@@ -37,6 +38,7 @@ function toTanstackRouteObject(route, globalApp) {
|
|
|
37
38
|
if ('function' != typeof route.component && 'object' != typeof route.component) return null;
|
|
38
39
|
const LayoutComponent = withGlobalLayout(route.component, globalApp);
|
|
39
40
|
return {
|
|
41
|
+
modernLocalisedRoute: Reflect.get(route, 'modernLocalisedRoute'),
|
|
40
42
|
path: route.path,
|
|
41
43
|
element: /*#__PURE__*/ react.createElement(LayoutComponent)
|
|
42
44
|
};
|
|
@@ -37,6 +37,15 @@ function tanstackRouterPlugin(options = {}) {
|
|
|
37
37
|
'@modern-js/runtime'
|
|
38
38
|
],
|
|
39
39
|
setup: (api)=>{
|
|
40
|
+
const { srcDirectory, serverCompileExcludedFiles = [] } = api.getAppContext();
|
|
41
|
+
api.updateAppContext({
|
|
42
|
+
serverCompileExcludedFiles: [
|
|
43
|
+
...new Set([
|
|
44
|
+
...serverCompileExcludedFiles,
|
|
45
|
+
node_path.join(srcDirectory, generatedDirName, 'register.gen.d.ts')
|
|
46
|
+
])
|
|
47
|
+
]
|
|
48
|
+
});
|
|
40
49
|
const nestedRoutesForServer = {};
|
|
41
50
|
const isTanstackEntrypoint = (entrypoint)=>{
|
|
42
51
|
const { getEntrypointRoutesDir } = getRuntimeRouterCli();
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
+
import { canonicaliseLocalisedRoutes } from "@modern-js/i18n-runtime-extensions";
|
|
2
3
|
import { makeLegalIdentifier } from "@modern-js/runtime/cli";
|
|
3
4
|
import { upath } from "@modern-js/utils";
|
|
4
5
|
import { createRouteStaticDataSnippet, isIndexRoute, isPathlessLayout, normalizeRelativeImport, pickModernLoaderModule, pickRouteSearchContractModules, quote, resolveFileNoExt, toTanstackPath } from "./shared.mjs";
|
|
5
6
|
async function generateTanstackRouterTypesSourceForEntry(opts) {
|
|
6
|
-
const { appContext, entryName, generatedDirName = 'modern-tanstack', routes } = opts;
|
|
7
|
+
const { appContext, entryName, generatedDirName = 'modern-tanstack', routes: rawRoutes } = opts;
|
|
8
|
+
const routes = canonicaliseLocalisedRoutes(rawRoutes);
|
|
7
9
|
const outDir = upath.join(appContext.srcDirectory, generatedDirName, entryName);
|
|
8
10
|
const rootModern = routes.find((r)=>{
|
|
9
11
|
const extras = r;
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
+
import { createLocalisedRouteRewrite } from "@modern-js/i18n-runtime-extensions";
|
|
3
|
+
import { composeRewrites } from "@tanstack/react-router";
|
|
2
4
|
function normalizeBasepath(basepath) {
|
|
3
5
|
if (!basepath) return '/';
|
|
4
6
|
let normalized = basepath.startsWith('/') ? basepath : `/${basepath}`;
|
|
5
7
|
if (normalized.length > 1 && normalized.endsWith('/')) normalized = normalized.slice(0, -1);
|
|
6
8
|
return normalized || '/';
|
|
7
9
|
}
|
|
8
|
-
function createModernBasepathRewrite(basepath, caseSensitive = false) {
|
|
10
|
+
function createModernBasepathRewrite(basepath, caseSensitive = false, routes = []) {
|
|
11
|
+
const localisedRewrite = createLocalisedRouteRewrite(routes);
|
|
9
12
|
const normalizedBasepath = normalizeBasepath(basepath);
|
|
10
|
-
if ('/' === normalizedBasepath) return;
|
|
13
|
+
if ('/' === normalizedBasepath) return localisedRewrite;
|
|
11
14
|
const normalizedBasepathWithSlash = `${normalizedBasepath}/`;
|
|
12
15
|
const checkBasepath = caseSensitive ? normalizedBasepath : normalizedBasepath.toLowerCase();
|
|
13
16
|
const checkBasepathWithSlash = caseSensitive ? normalizedBasepathWithSlash : normalizedBasepathWithSlash.toLowerCase();
|
|
14
|
-
|
|
17
|
+
const basepathRewrite = {
|
|
15
18
|
input: ({ url })=>{
|
|
16
19
|
const pathname = caseSensitive ? url.pathname : url.pathname.toLowerCase();
|
|
17
20
|
if (pathname === checkBasepath) url.pathname = '/';
|
|
@@ -25,5 +28,9 @@ function createModernBasepathRewrite(basepath, caseSensitive = false) {
|
|
|
25
28
|
return url;
|
|
26
29
|
}
|
|
27
30
|
};
|
|
31
|
+
return localisedRewrite ? composeRewrites([
|
|
32
|
+
basepathRewrite,
|
|
33
|
+
localisedRewrite
|
|
34
|
+
]) : basepathRewrite;
|
|
28
35
|
}
|
|
29
36
|
export { createModernBasepathRewrite };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
-
export { applyRouterRuntimeState, applyRouterServerPrepareResult, createRouterRuntimeState, createRouterServerSnapshot, getRouterRuntimeState, getRouterServerSnapshot } from "@modern-js/runtime/
|
|
2
|
+
export { applyRouterRuntimeState, applyRouterServerPrepareResult, createRouterRuntimeState, createRouterServerSnapshot, getRouterRuntimeState, getRouterServerSnapshot } from "@modern-js/runtime-extensions/router-state";
|
|
@@ -78,7 +78,7 @@ const tanstackRouterPlugin = (userConfig = {})=>{
|
|
|
78
78
|
const mergedConfig = getMergedConfig();
|
|
79
79
|
const { supportHtml5History = true } = mergedConfig;
|
|
80
80
|
const history = supportHtml5History ? createBrowserHistory() : createHashHistory();
|
|
81
|
-
const rewrite = createModernBasepathRewrite(_basename);
|
|
81
|
+
const rewrite = createModernBasepathRewrite(_basename, false, getRouteObjects());
|
|
82
82
|
const serializationAdapters = getGlobalEnableRsc() ? getTanstackRscSerializationAdapters() : void 0;
|
|
83
83
|
const routerFastDefaults = getModernTanstackRouterFastDefaults(mergedConfig);
|
|
84
84
|
cachedRouter = createRouter({
|
|
@@ -11,6 +11,7 @@ import { routerProviderRegistryHooks } from "./hooks.mjs";
|
|
|
11
11
|
import { wrapTanstackSsrHydrationBoundary } from "./hydrationBoundary.mjs";
|
|
12
12
|
import { applyRouterServerPrepareResult, createRouterServerSnapshot, getRouterRuntimeState } from "./lifecycle.mjs";
|
|
13
13
|
import { createTanstackRouteObjects, getTanstackRouteConfig, joinBasename } from "./pluginShared.mjs";
|
|
14
|
+
import { Link } from "./prefetchLink.mjs";
|
|
14
15
|
import { createRouteTreeFromRouteObjects, getModernRouteIdsFromMatches } from "./routeTree/index.mjs";
|
|
15
16
|
import { createTanstackRscServerPayload, handleTanstackRscRedirect } from "./rsc/payloadRouter.mjs";
|
|
16
17
|
import { getTanstackRscRouter, setTanstackRscRouter, setTanstackRscServerPayload } from "./rsc/payloadStorage.mjs";
|
|
@@ -36,6 +37,9 @@ const tanstackRouterPlugin = (userConfig = {})=>{
|
|
|
36
37
|
routeConfig
|
|
37
38
|
});
|
|
38
39
|
if (!modifiedRouteObjects.length) return;
|
|
40
|
+
context.router = {
|
|
41
|
+
Link: Link
|
|
42
|
+
};
|
|
39
43
|
const { request, nonce, baseUrl, loaderFailureMode = 'errorBoundary' } = context.ssrContext;
|
|
40
44
|
const _basename = '/' === baseUrl ? joinBasename(baseUrl, basename || '') : baseUrl;
|
|
41
45
|
const rawRequest = request.raw;
|
|
@@ -58,7 +62,7 @@ const tanstackRouterPlugin = (userConfig = {})=>{
|
|
|
58
62
|
initialHref
|
|
59
63
|
]
|
|
60
64
|
});
|
|
61
|
-
const rewrite = createModernBasepathRewrite(_basename);
|
|
65
|
+
const rewrite = createModernBasepathRewrite(_basename, false, modifiedRouteObjects);
|
|
62
66
|
const routerLifecycleContext = {
|
|
63
67
|
framework: 'tanstack',
|
|
64
68
|
phase: 'ssr-prepare',
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import "node:module";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { resolvePreloadFromPrefetch } from "@modern-js/runtime-extensions";
|
|
3
4
|
import { useLinkProps } from "@tanstack/react-router";
|
|
4
|
-
function resolvePreloadFromPrefetch(prefetch, preload) {
|
|
5
|
-
if (void 0 !== preload) return preload;
|
|
6
|
-
if ('none' === prefetch) return false;
|
|
7
|
-
if ('intent' === prefetch || 'render' === prefetch || 'viewport' === prefetch) return prefetch;
|
|
8
|
-
return 'viewport';
|
|
9
|
-
}
|
|
10
5
|
const LinkComponentImpl = (props)=>{
|
|
11
6
|
const { prefetch, preload, 'aria-current': ariaCurrentProp, ref, children, ...rest } = props;
|
|
12
7
|
const hasAriaCurrentOverride = 'aria-current' in props;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
-
import { registerRouterProvider } from "@modern-js/runtime/
|
|
2
|
+
import { registerRouterProvider } from "@modern-js/runtime-extensions/router-provider";
|
|
3
3
|
import { tanstackRouterPlugin } from "./plugin.mjs";
|
|
4
4
|
const tanstackRouterProviderFactory = (userConfig)=>tanstackRouterPlugin(userConfig);
|
|
5
5
|
registerRouterProvider('tanstack', tanstackRouterProviderFactory);
|