diff --git a/e2e/react-router/basic-file-based/src/routeTree.gen.ts b/e2e/react-router/basic-file-based/src/routeTree.gen.ts index a84b234638b..efa8b81d76c 100644 --- a/e2e/react-router/basic-file-based/src/routeTree.gen.ts +++ b/e2e/react-router/basic-file-based/src/routeTree.gen.ts @@ -42,6 +42,7 @@ import { Route as NonNestedSuffixRouteRouteImport } from './routes/non-nested/su import { Route as NonNestedPrefixRouteRouteImport } from './routes/non-nested/prefix/route' import { Route as NonNestedPathRouteRouteImport } from './routes/non-nested/path/route' import { Route as NonNestedNamedRouteRouteImport } from './routes/non-nested/named/route' +import { Route as NonNestedDeepRouteRouteImport } from './routes/non-nested/deep/route' import { Route as RedirectTargetIndexRouteImport } from './routes/redirect/$target/index' import { Route as ParamsPsWildcardIndexRouteImport } from './routes/params-ps/wildcard/index' import { Route as ParamsPsNamedIndexRouteImport } from './routes/params-ps/named/index' @@ -75,6 +76,7 @@ import { Route as NonNestedSuffixChar123bazChar125suffixRouteRouteImport } from import { Route as NonNestedPrefixPrefixChar123bazChar125RouteRouteImport } from './routes/non-nested/prefix/prefix{$baz}.route' import { Route as NonNestedPathBazRouteRouteImport } from './routes/non-nested/path/baz.route' import { Route as NonNestedNamedBazRouteRouteImport } from './routes/non-nested/named/$baz.route' +import { Route as NonNestedDeepBazRouteRouteImport } from './routes/non-nested/deep/$baz.route' import { Route as RelativeUseNavigateWithSearchIndexRouteImport } from './routes/relative/useNavigate/with-search/index' import { Route as RelativeUseNavigatePathIndexRouteImport } from './routes/relative/useNavigate/path/index' import { Route as RelativeUseNavigateNestedIndexRouteImport } from './routes/relative/useNavigate/nested/index' @@ -85,6 +87,7 @@ import { Route as NonNestedSuffixChar123bazChar125suffixIndexRouteImport } from import { Route as NonNestedPrefixPrefixChar123bazChar125IndexRouteImport } from './routes/non-nested/prefix/prefix{$baz}.index' import { Route as NonNestedPathBazIndexRouteImport } from './routes/non-nested/path/baz.index' import { Route as NonNestedNamedBazIndexRouteImport } from './routes/non-nested/named/$baz.index' +import { Route as NonNestedDeepBazIndexRouteImport } from './routes/non-nested/deep/$baz.index' import { Route as ParamsPsNonNestedFooBarRouteImport } from './routes/params-ps/non-nested/$foo_/$bar' import { Route as NonNestedSuffixChar123bazChar125suffixBarRouteImport } from './routes/non-nested/suffix/{$baz}suffix_.bar' import { Route as NonNestedSuffixChar123bazChar125suffixFooRouteImport } from './routes/non-nested/suffix/{$baz}suffix.foo' @@ -95,11 +98,17 @@ import { Route as NonNestedPathBazFooRouteImport } from './routes/non-nested/pat import { Route as NonNestedNamedBazBarRouteImport } from './routes/non-nested/named/$baz_.bar' import { Route as NonNestedNamedBazFooRouteImport } from './routes/non-nested/named/$baz.foo' import { Route as ParamsPsNamedFooBarRouteRouteImport } from './routes/params-ps/named/$foo/$bar.route' +import { Route as NonNestedDeepBazBarRouteRouteImport } from './routes/non-nested/deep/$baz_.bar.route' import { Route as RelativeUseNavigatePathPathIndexRouteImport } from './routes/relative/useNavigate/path/$path/index' import { Route as RelativeUseNavigateNestedDeepIndexRouteImport } from './routes/relative/useNavigate/nested/deep/index' import { Route as RelativeLinkPathPathIndexRouteImport } from './routes/relative/link/path/$path/index' import { Route as RelativeLinkNestedDeepIndexRouteImport } from './routes/relative/link/nested/deep/index' +import { Route as NonNestedDeepBazBarIndexRouteImport } from './routes/non-nested/deep/$baz_.bar.index' import { Route as ParamsPsNamedFooBarBazRouteImport } from './routes/params-ps/named/$foo/$bar.$baz' +import { Route as NonNestedDeepBazBarQuxRouteImport } from './routes/non-nested/deep/$baz_.bar_.qux' +import { Route as NonNestedDeepBazBarFooRouteRouteImport } from './routes/non-nested/deep/$baz_.bar.$foo.route' +import { Route as NonNestedDeepBazBarFooIndexRouteImport } from './routes/non-nested/deep/$baz_.bar.$foo.index' +import { Route as NonNestedDeepBazBarFooQuxRouteImport } from './routes/non-nested/deep/$baz_.bar.$foo_.qux' const RemountDepsRoute = RemountDepsRouteImport.update({ id: '/remountDeps', @@ -269,6 +278,11 @@ const NonNestedNamedRouteRoute = NonNestedNamedRouteRouteImport.update({ path: '/named', getParentRoute: () => NonNestedRouteRoute, } as any) +const NonNestedDeepRouteRoute = NonNestedDeepRouteRouteImport.update({ + id: '/deep', + path: '/deep', + getParentRoute: () => NonNestedRouteRoute, +} as any) const RedirectTargetIndexRoute = RedirectTargetIndexRouteImport.update({ id: '/', path: '/', @@ -450,6 +464,11 @@ const NonNestedNamedBazRouteRoute = NonNestedNamedBazRouteRouteImport.update({ path: '/$baz', getParentRoute: () => NonNestedNamedRouteRoute, } as any) +const NonNestedDeepBazRouteRoute = NonNestedDeepBazRouteRouteImport.update({ + id: '/$baz', + path: '/$baz', + getParentRoute: () => NonNestedDeepRouteRoute, +} as any) const RelativeUseNavigateWithSearchIndexRoute = RelativeUseNavigateWithSearchIndexRouteImport.update({ id: '/with-search/', @@ -506,6 +525,11 @@ const NonNestedNamedBazIndexRoute = NonNestedNamedBazIndexRouteImport.update({ path: '/', getParentRoute: () => NonNestedNamedBazRouteRoute, } as any) +const NonNestedDeepBazIndexRoute = NonNestedDeepBazIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => NonNestedDeepBazRouteRoute, +} as any) const ParamsPsNonNestedFooBarRoute = ParamsPsNonNestedFooBarRouteImport.update({ id: '/$bar', path: '/$bar', @@ -561,6 +585,12 @@ const ParamsPsNamedFooBarRouteRoute = path: '/$bar', getParentRoute: () => ParamsPsNamedFooRouteRoute, } as any) +const NonNestedDeepBazBarRouteRoute = + NonNestedDeepBazBarRouteRouteImport.update({ + id: '/$baz_/bar', + path: '/$baz/bar', + getParentRoute: () => NonNestedDeepRouteRoute, + } as any) const RelativeUseNavigatePathPathIndexRoute = RelativeUseNavigatePathPathIndexRouteImport.update({ id: '/path/$path/', @@ -585,11 +615,40 @@ const RelativeLinkNestedDeepIndexRoute = path: '/nested/deep/', getParentRoute: () => RelativeLinkRouteRoute, } as any) +const NonNestedDeepBazBarIndexRoute = + NonNestedDeepBazBarIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => NonNestedDeepBazBarRouteRoute, + } as any) const ParamsPsNamedFooBarBazRoute = ParamsPsNamedFooBarBazRouteImport.update({ id: '/$baz', path: '/$baz', getParentRoute: () => ParamsPsNamedFooBarRouteRoute, } as any) +const NonNestedDeepBazBarQuxRoute = NonNestedDeepBazBarQuxRouteImport.update({ + id: '/$baz_/bar_/qux', + path: '/$baz/bar/qux', + getParentRoute: () => NonNestedDeepRouteRoute, +} as any) +const NonNestedDeepBazBarFooRouteRoute = + NonNestedDeepBazBarFooRouteRouteImport.update({ + id: '/$foo', + path: '/$foo', + getParentRoute: () => NonNestedDeepBazBarRouteRoute, + } as any) +const NonNestedDeepBazBarFooIndexRoute = + NonNestedDeepBazBarFooIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => NonNestedDeepBazBarFooRouteRoute, + } as any) +const NonNestedDeepBazBarFooQuxRoute = + NonNestedDeepBazBarFooQuxRouteImport.update({ + id: '/$foo_/qux', + path: '/$foo/qux', + getParentRoute: () => NonNestedDeepBazBarRouteRoute, + } as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute @@ -603,6 +662,7 @@ export interface FileRoutesByFullPath { '/notRemountDeps': typeof NotRemountDepsRoute '/posts': typeof PostsRouteWithChildren '/remountDeps': typeof RemountDepsRoute + '/non-nested/deep': typeof NonNestedDeepRouteRouteWithChildren '/non-nested/named': typeof NonNestedNamedRouteRouteWithChildren '/non-nested/path': typeof NonNestedPathRouteRouteWithChildren '/non-nested/prefix': typeof NonNestedPrefixRouteRouteWithChildren @@ -622,6 +682,7 @@ export interface FileRoutesByFullPath { '/redirect': typeof RedirectIndexRoute '/relative': typeof RelativeIndexRoute '/search-params/': typeof SearchParamsIndexRoute + '/non-nested/deep/$baz': typeof NonNestedDeepBazRouteRouteWithChildren '/non-nested/named/$baz': typeof NonNestedNamedBazRouteRouteWithChildren '/non-nested/path/baz': typeof NonNestedPathBazRouteRouteWithChildren '/non-nested/prefix/prefix{$baz}': typeof NonNestedPrefixPrefixChar123bazChar125RouteRouteWithChildren @@ -655,6 +716,7 @@ export interface FileRoutesByFullPath { '/params-ps/named': typeof ParamsPsNamedIndexRoute '/params-ps/wildcard': typeof ParamsPsWildcardIndexRoute '/redirect/$target/': typeof RedirectTargetIndexRoute + '/non-nested/deep/$baz/bar': typeof NonNestedDeepBazBarRouteRouteWithChildren '/params-ps/named/$foo/$bar': typeof ParamsPsNamedFooBarRouteRouteWithChildren '/non-nested/named/$baz/foo': typeof NonNestedNamedBazFooRoute '/non-nested/named/$baz/bar': typeof NonNestedNamedBazBarRoute @@ -665,6 +727,7 @@ export interface FileRoutesByFullPath { '/non-nested/suffix/{$baz}suffix/foo': typeof NonNestedSuffixChar123bazChar125suffixFooRoute '/non-nested/suffix/{$baz}suffix/bar': typeof NonNestedSuffixChar123bazChar125suffixBarRoute '/params-ps/non-nested/$foo/$bar': typeof ParamsPsNonNestedFooBarRoute + '/non-nested/deep/$baz/': typeof NonNestedDeepBazIndexRoute '/non-nested/named/$baz/': typeof NonNestedNamedBazIndexRoute '/non-nested/path/baz/': typeof NonNestedPathBazIndexRoute '/non-nested/prefix/prefix{$baz}/': typeof NonNestedPrefixPrefixChar123bazChar125IndexRoute @@ -675,11 +738,16 @@ export interface FileRoutesByFullPath { '/relative/useNavigate/nested': typeof RelativeUseNavigateNestedIndexRoute '/relative/useNavigate/path': typeof RelativeUseNavigatePathIndexRoute '/relative/useNavigate/with-search': typeof RelativeUseNavigateWithSearchIndexRoute + '/non-nested/deep/$baz/bar/$foo': typeof NonNestedDeepBazBarFooRouteRouteWithChildren + '/non-nested/deep/$baz/bar/qux': typeof NonNestedDeepBazBarQuxRoute '/params-ps/named/$foo/$bar/$baz': typeof ParamsPsNamedFooBarBazRoute + '/non-nested/deep/$baz/bar/': typeof NonNestedDeepBazBarIndexRoute '/relative/link/nested/deep': typeof RelativeLinkNestedDeepIndexRoute '/relative/link/path/$path': typeof RelativeLinkPathPathIndexRoute '/relative/useNavigate/nested/deep': typeof RelativeUseNavigateNestedDeepIndexRoute '/relative/useNavigate/path/$path': typeof RelativeUseNavigatePathPathIndexRoute + '/non-nested/deep/$baz/bar/$foo/qux': typeof NonNestedDeepBazBarFooQuxRoute + '/non-nested/deep/$baz/bar/$foo/': typeof NonNestedDeepBazBarFooIndexRoute } export interface FileRoutesByTo { '/': typeof IndexRoute @@ -691,6 +759,7 @@ export interface FileRoutesByTo { '/editing-b': typeof EditingBRoute '/notRemountDeps': typeof NotRemountDepsRoute '/remountDeps': typeof RemountDepsRoute + '/non-nested/deep': typeof NonNestedDeepRouteRouteWithChildren '/non-nested/named': typeof NonNestedNamedRouteRouteWithChildren '/non-nested/path': typeof NonNestedPathRouteRouteWithChildren '/non-nested/prefix': typeof NonNestedPrefixRouteRouteWithChildren @@ -748,6 +817,7 @@ export interface FileRoutesByTo { '/non-nested/suffix/{$baz}suffix/foo': typeof NonNestedSuffixChar123bazChar125suffixFooRoute '/non-nested/suffix/{$baz}suffix/bar': typeof NonNestedSuffixChar123bazChar125suffixBarRoute '/params-ps/non-nested/$foo/$bar': typeof ParamsPsNonNestedFooBarRoute + '/non-nested/deep/$baz': typeof NonNestedDeepBazIndexRoute '/non-nested/named/$baz': typeof NonNestedNamedBazIndexRoute '/non-nested/path/baz': typeof NonNestedPathBazIndexRoute '/non-nested/prefix/prefix{$baz}': typeof NonNestedPrefixPrefixChar123bazChar125IndexRoute @@ -758,11 +828,15 @@ export interface FileRoutesByTo { '/relative/useNavigate/nested': typeof RelativeUseNavigateNestedIndexRoute '/relative/useNavigate/path': typeof RelativeUseNavigatePathIndexRoute '/relative/useNavigate/with-search': typeof RelativeUseNavigateWithSearchIndexRoute + '/non-nested/deep/$baz/bar/qux': typeof NonNestedDeepBazBarQuxRoute '/params-ps/named/$foo/$bar/$baz': typeof ParamsPsNamedFooBarBazRoute + '/non-nested/deep/$baz/bar': typeof NonNestedDeepBazBarIndexRoute '/relative/link/nested/deep': typeof RelativeLinkNestedDeepIndexRoute '/relative/link/path/$path': typeof RelativeLinkPathPathIndexRoute '/relative/useNavigate/nested/deep': typeof RelativeUseNavigateNestedDeepIndexRoute '/relative/useNavigate/path/$path': typeof RelativeUseNavigatePathPathIndexRoute + '/non-nested/deep/$baz/bar/$foo/qux': typeof NonNestedDeepBazBarFooQuxRoute + '/non-nested/deep/$baz/bar/$foo': typeof NonNestedDeepBazBarFooIndexRoute } export interface FileRoutesById { __root__: typeof rootRouteImport @@ -778,6 +852,7 @@ export interface FileRoutesById { '/notRemountDeps': typeof NotRemountDepsRoute '/posts': typeof PostsRouteWithChildren '/remountDeps': typeof RemountDepsRoute + '/non-nested/deep': typeof NonNestedDeepRouteRouteWithChildren '/non-nested/named': typeof NonNestedNamedRouteRouteWithChildren '/non-nested/path': typeof NonNestedPathRouteRouteWithChildren '/non-nested/prefix': typeof NonNestedPrefixRouteRouteWithChildren @@ -799,6 +874,7 @@ export interface FileRoutesById { '/redirect/': typeof RedirectIndexRoute '/relative/': typeof RelativeIndexRoute '/search-params/': typeof SearchParamsIndexRoute + '/non-nested/deep/$baz': typeof NonNestedDeepBazRouteRouteWithChildren '/non-nested/named/$baz': typeof NonNestedNamedBazRouteRouteWithChildren '/non-nested/path/baz': typeof NonNestedPathBazRouteRouteWithChildren '/non-nested/prefix/prefix{$baz}': typeof NonNestedPrefixPrefixChar123bazChar125RouteRouteWithChildren @@ -832,6 +908,7 @@ export interface FileRoutesById { '/params-ps/named/': typeof ParamsPsNamedIndexRoute '/params-ps/wildcard/': typeof ParamsPsWildcardIndexRoute '/redirect/$target/': typeof RedirectTargetIndexRoute + '/non-nested/deep/$baz_/bar': typeof NonNestedDeepBazBarRouteRouteWithChildren '/params-ps/named/$foo/$bar': typeof ParamsPsNamedFooBarRouteRouteWithChildren '/non-nested/named/$baz/foo': typeof NonNestedNamedBazFooRoute '/non-nested/named/$baz_/bar': typeof NonNestedNamedBazBarRoute @@ -842,6 +919,7 @@ export interface FileRoutesById { '/non-nested/suffix/{$baz}suffix/foo': typeof NonNestedSuffixChar123bazChar125suffixFooRoute '/non-nested/suffix/{$baz}suffix_/bar': typeof NonNestedSuffixChar123bazChar125suffixBarRoute '/params-ps/non-nested/$foo_/$bar': typeof ParamsPsNonNestedFooBarRoute + '/non-nested/deep/$baz/': typeof NonNestedDeepBazIndexRoute '/non-nested/named/$baz/': typeof NonNestedNamedBazIndexRoute '/non-nested/path/baz/': typeof NonNestedPathBazIndexRoute '/non-nested/prefix/prefix{$baz}/': typeof NonNestedPrefixPrefixChar123bazChar125IndexRoute @@ -852,11 +930,16 @@ export interface FileRoutesById { '/relative/useNavigate/nested/': typeof RelativeUseNavigateNestedIndexRoute '/relative/useNavigate/path/': typeof RelativeUseNavigatePathIndexRoute '/relative/useNavigate/with-search/': typeof RelativeUseNavigateWithSearchIndexRoute + '/non-nested/deep/$baz_/bar/$foo': typeof NonNestedDeepBazBarFooRouteRouteWithChildren + '/non-nested/deep/$baz_/bar_/qux': typeof NonNestedDeepBazBarQuxRoute '/params-ps/named/$foo/$bar/$baz': typeof ParamsPsNamedFooBarBazRoute + '/non-nested/deep/$baz_/bar/': typeof NonNestedDeepBazBarIndexRoute '/relative/link/nested/deep/': typeof RelativeLinkNestedDeepIndexRoute '/relative/link/path/$path/': typeof RelativeLinkPathPathIndexRoute '/relative/useNavigate/nested/deep/': typeof RelativeUseNavigateNestedDeepIndexRoute '/relative/useNavigate/path/$path/': typeof RelativeUseNavigatePathPathIndexRoute + '/non-nested/deep/$baz_/bar/$foo_/qux': typeof NonNestedDeepBazBarFooQuxRoute + '/non-nested/deep/$baz_/bar/$foo/': typeof NonNestedDeepBazBarFooIndexRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath @@ -872,6 +955,7 @@ export interface FileRouteTypes { | '/notRemountDeps' | '/posts' | '/remountDeps' + | '/non-nested/deep' | '/non-nested/named' | '/non-nested/path' | '/non-nested/prefix' @@ -891,6 +975,7 @@ export interface FileRouteTypes { | '/redirect' | '/relative' | '/search-params/' + | '/non-nested/deep/$baz' | '/non-nested/named/$baz' | '/non-nested/path/baz' | '/non-nested/prefix/prefix{$baz}' @@ -924,6 +1009,7 @@ export interface FileRouteTypes { | '/params-ps/named' | '/params-ps/wildcard' | '/redirect/$target/' + | '/non-nested/deep/$baz/bar' | '/params-ps/named/$foo/$bar' | '/non-nested/named/$baz/foo' | '/non-nested/named/$baz/bar' @@ -934,6 +1020,7 @@ export interface FileRouteTypes { | '/non-nested/suffix/{$baz}suffix/foo' | '/non-nested/suffix/{$baz}suffix/bar' | '/params-ps/non-nested/$foo/$bar' + | '/non-nested/deep/$baz/' | '/non-nested/named/$baz/' | '/non-nested/path/baz/' | '/non-nested/prefix/prefix{$baz}/' @@ -944,11 +1031,16 @@ export interface FileRouteTypes { | '/relative/useNavigate/nested' | '/relative/useNavigate/path' | '/relative/useNavigate/with-search' + | '/non-nested/deep/$baz/bar/$foo' + | '/non-nested/deep/$baz/bar/qux' | '/params-ps/named/$foo/$bar/$baz' + | '/non-nested/deep/$baz/bar/' | '/relative/link/nested/deep' | '/relative/link/path/$path' | '/relative/useNavigate/nested/deep' | '/relative/useNavigate/path/$path' + | '/non-nested/deep/$baz/bar/$foo/qux' + | '/non-nested/deep/$baz/bar/$foo/' fileRoutesByTo: FileRoutesByTo to: | '/' @@ -960,6 +1052,7 @@ export interface FileRouteTypes { | '/editing-b' | '/notRemountDeps' | '/remountDeps' + | '/non-nested/deep' | '/non-nested/named' | '/non-nested/path' | '/non-nested/prefix' @@ -1017,6 +1110,7 @@ export interface FileRouteTypes { | '/non-nested/suffix/{$baz}suffix/foo' | '/non-nested/suffix/{$baz}suffix/bar' | '/params-ps/non-nested/$foo/$bar' + | '/non-nested/deep/$baz' | '/non-nested/named/$baz' | '/non-nested/path/baz' | '/non-nested/prefix/prefix{$baz}' @@ -1027,11 +1121,15 @@ export interface FileRouteTypes { | '/relative/useNavigate/nested' | '/relative/useNavigate/path' | '/relative/useNavigate/with-search' + | '/non-nested/deep/$baz/bar/qux' | '/params-ps/named/$foo/$bar/$baz' + | '/non-nested/deep/$baz/bar' | '/relative/link/nested/deep' | '/relative/link/path/$path' | '/relative/useNavigate/nested/deep' | '/relative/useNavigate/path/$path' + | '/non-nested/deep/$baz/bar/$foo/qux' + | '/non-nested/deep/$baz/bar/$foo' id: | '__root__' | '/' @@ -1046,6 +1144,7 @@ export interface FileRouteTypes { | '/notRemountDeps' | '/posts' | '/remountDeps' + | '/non-nested/deep' | '/non-nested/named' | '/non-nested/path' | '/non-nested/prefix' @@ -1067,6 +1166,7 @@ export interface FileRouteTypes { | '/redirect/' | '/relative/' | '/search-params/' + | '/non-nested/deep/$baz' | '/non-nested/named/$baz' | '/non-nested/path/baz' | '/non-nested/prefix/prefix{$baz}' @@ -1100,6 +1200,7 @@ export interface FileRouteTypes { | '/params-ps/named/' | '/params-ps/wildcard/' | '/redirect/$target/' + | '/non-nested/deep/$baz_/bar' | '/params-ps/named/$foo/$bar' | '/non-nested/named/$baz/foo' | '/non-nested/named/$baz_/bar' @@ -1110,6 +1211,7 @@ export interface FileRouteTypes { | '/non-nested/suffix/{$baz}suffix/foo' | '/non-nested/suffix/{$baz}suffix_/bar' | '/params-ps/non-nested/$foo_/$bar' + | '/non-nested/deep/$baz/' | '/non-nested/named/$baz/' | '/non-nested/path/baz/' | '/non-nested/prefix/prefix{$baz}/' @@ -1120,11 +1222,16 @@ export interface FileRouteTypes { | '/relative/useNavigate/nested/' | '/relative/useNavigate/path/' | '/relative/useNavigate/with-search/' + | '/non-nested/deep/$baz_/bar/$foo' + | '/non-nested/deep/$baz_/bar_/qux' | '/params-ps/named/$foo/$bar/$baz' + | '/non-nested/deep/$baz_/bar/' | '/relative/link/nested/deep/' | '/relative/link/path/$path/' | '/relative/useNavigate/nested/deep/' | '/relative/useNavigate/path/$path/' + | '/non-nested/deep/$baz_/bar/$foo_/qux' + | '/non-nested/deep/$baz_/bar/$foo/' fileRoutesById: FileRoutesById } export interface RootRouteChildren { @@ -1403,6 +1510,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof NonNestedNamedRouteRouteImport parentRoute: typeof NonNestedRouteRoute } + '/non-nested/deep': { + id: '/non-nested/deep' + path: '/deep' + fullPath: '/non-nested/deep' + preLoaderRoute: typeof NonNestedDeepRouteRouteImport + parentRoute: typeof NonNestedRouteRoute + } '/redirect/$target/': { id: '/redirect/$target/' path: '/' @@ -1634,6 +1748,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof NonNestedNamedBazRouteRouteImport parentRoute: typeof NonNestedNamedRouteRoute } + '/non-nested/deep/$baz': { + id: '/non-nested/deep/$baz' + path: '/$baz' + fullPath: '/non-nested/deep/$baz' + preLoaderRoute: typeof NonNestedDeepBazRouteRouteImport + parentRoute: typeof NonNestedDeepRouteRoute + } '/relative/useNavigate/with-search/': { id: '/relative/useNavigate/with-search/' path: '/with-search' @@ -1704,6 +1825,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof NonNestedNamedBazIndexRouteImport parentRoute: typeof NonNestedNamedBazRouteRoute } + '/non-nested/deep/$baz/': { + id: '/non-nested/deep/$baz/' + path: '/' + fullPath: '/non-nested/deep/$baz/' + preLoaderRoute: typeof NonNestedDeepBazIndexRouteImport + parentRoute: typeof NonNestedDeepBazRouteRoute + } '/params-ps/non-nested/$foo_/$bar': { id: '/params-ps/non-nested/$foo_/$bar' path: '/$bar' @@ -1774,6 +1902,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ParamsPsNamedFooBarRouteRouteImport parentRoute: typeof ParamsPsNamedFooRouteRoute } + '/non-nested/deep/$baz_/bar': { + id: '/non-nested/deep/$baz_/bar' + path: '/$baz/bar' + fullPath: '/non-nested/deep/$baz/bar' + preLoaderRoute: typeof NonNestedDeepBazBarRouteRouteImport + parentRoute: typeof NonNestedDeepRouteRoute + } '/relative/useNavigate/path/$path/': { id: '/relative/useNavigate/path/$path/' path: '/path/$path' @@ -1802,6 +1937,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof RelativeLinkNestedDeepIndexRouteImport parentRoute: typeof RelativeLinkRouteRoute } + '/non-nested/deep/$baz_/bar/': { + id: '/non-nested/deep/$baz_/bar/' + path: '/' + fullPath: '/non-nested/deep/$baz/bar/' + preLoaderRoute: typeof NonNestedDeepBazBarIndexRouteImport + parentRoute: typeof NonNestedDeepBazBarRouteRoute + } '/params-ps/named/$foo/$bar/$baz': { id: '/params-ps/named/$foo/$bar/$baz' path: '/$baz' @@ -1809,9 +1951,98 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ParamsPsNamedFooBarBazRouteImport parentRoute: typeof ParamsPsNamedFooBarRouteRoute } + '/non-nested/deep/$baz_/bar_/qux': { + id: '/non-nested/deep/$baz_/bar_/qux' + path: '/$baz/bar/qux' + fullPath: '/non-nested/deep/$baz/bar/qux' + preLoaderRoute: typeof NonNestedDeepBazBarQuxRouteImport + parentRoute: typeof NonNestedDeepRouteRoute + } + '/non-nested/deep/$baz_/bar/$foo': { + id: '/non-nested/deep/$baz_/bar/$foo' + path: '/$foo' + fullPath: '/non-nested/deep/$baz/bar/$foo' + preLoaderRoute: typeof NonNestedDeepBazBarFooRouteRouteImport + parentRoute: typeof NonNestedDeepBazBarRouteRoute + } + '/non-nested/deep/$baz_/bar/$foo/': { + id: '/non-nested/deep/$baz_/bar/$foo/' + path: '/' + fullPath: '/non-nested/deep/$baz/bar/$foo/' + preLoaderRoute: typeof NonNestedDeepBazBarFooIndexRouteImport + parentRoute: typeof NonNestedDeepBazBarFooRouteRoute + } + '/non-nested/deep/$baz_/bar/$foo_/qux': { + id: '/non-nested/deep/$baz_/bar/$foo_/qux' + path: '/$foo/qux' + fullPath: '/non-nested/deep/$baz/bar/$foo/qux' + preLoaderRoute: typeof NonNestedDeepBazBarFooQuxRouteImport + parentRoute: typeof NonNestedDeepBazBarRouteRoute + } + } +} + +interface NonNestedDeepBazRouteRouteChildren { + NonNestedDeepBazIndexRoute: typeof NonNestedDeepBazIndexRoute +} + +const NonNestedDeepBazRouteRouteChildren: NonNestedDeepBazRouteRouteChildren = { + NonNestedDeepBazIndexRoute: NonNestedDeepBazIndexRoute, +} + +const NonNestedDeepBazRouteRouteWithChildren = + NonNestedDeepBazRouteRoute._addFileChildren( + NonNestedDeepBazRouteRouteChildren, + ) + +interface NonNestedDeepBazBarFooRouteRouteChildren { + NonNestedDeepBazBarFooIndexRoute: typeof NonNestedDeepBazBarFooIndexRoute +} + +const NonNestedDeepBazBarFooRouteRouteChildren: NonNestedDeepBazBarFooRouteRouteChildren = + { + NonNestedDeepBazBarFooIndexRoute: NonNestedDeepBazBarFooIndexRoute, } + +const NonNestedDeepBazBarFooRouteRouteWithChildren = + NonNestedDeepBazBarFooRouteRoute._addFileChildren( + NonNestedDeepBazBarFooRouteRouteChildren, + ) + +interface NonNestedDeepBazBarRouteRouteChildren { + NonNestedDeepBazBarFooRouteRoute: typeof NonNestedDeepBazBarFooRouteRouteWithChildren + NonNestedDeepBazBarIndexRoute: typeof NonNestedDeepBazBarIndexRoute + NonNestedDeepBazBarFooQuxRoute: typeof NonNestedDeepBazBarFooQuxRoute } +const NonNestedDeepBazBarRouteRouteChildren: NonNestedDeepBazBarRouteRouteChildren = + { + NonNestedDeepBazBarFooRouteRoute: + NonNestedDeepBazBarFooRouteRouteWithChildren, + NonNestedDeepBazBarIndexRoute: NonNestedDeepBazBarIndexRoute, + NonNestedDeepBazBarFooQuxRoute: NonNestedDeepBazBarFooQuxRoute, + } + +const NonNestedDeepBazBarRouteRouteWithChildren = + NonNestedDeepBazBarRouteRoute._addFileChildren( + NonNestedDeepBazBarRouteRouteChildren, + ) + +interface NonNestedDeepRouteRouteChildren { + NonNestedDeepBazRouteRoute: typeof NonNestedDeepBazRouteRouteWithChildren + NonNestedDeepBazBarRouteRoute: typeof NonNestedDeepBazBarRouteRouteWithChildren + NonNestedDeepBazBarQuxRoute: typeof NonNestedDeepBazBarQuxRoute +} + +const NonNestedDeepRouteRouteChildren: NonNestedDeepRouteRouteChildren = { + NonNestedDeepBazRouteRoute: NonNestedDeepBazRouteRouteWithChildren, + NonNestedDeepBazBarRouteRoute: NonNestedDeepBazBarRouteRouteWithChildren, + NonNestedDeepBazBarQuxRoute: NonNestedDeepBazBarQuxRoute, +} + +const NonNestedDeepRouteRouteWithChildren = + NonNestedDeepRouteRoute._addFileChildren(NonNestedDeepRouteRouteChildren) + interface NonNestedNamedBazRouteRouteChildren { NonNestedNamedBazFooRoute: typeof NonNestedNamedBazFooRoute NonNestedNamedBazIndexRoute: typeof NonNestedNamedBazIndexRoute @@ -1936,6 +2167,7 @@ const NonNestedSuffixRouteRouteWithChildren = NonNestedSuffixRouteRoute._addFileChildren(NonNestedSuffixRouteRouteChildren) interface NonNestedRouteRouteChildren { + NonNestedDeepRouteRoute: typeof NonNestedDeepRouteRouteWithChildren NonNestedNamedRouteRoute: typeof NonNestedNamedRouteRouteWithChildren NonNestedPathRouteRoute: typeof NonNestedPathRouteRouteWithChildren NonNestedPrefixRouteRoute: typeof NonNestedPrefixRouteRouteWithChildren @@ -1943,6 +2175,7 @@ interface NonNestedRouteRouteChildren { } const NonNestedRouteRouteChildren: NonNestedRouteRouteChildren = { + NonNestedDeepRouteRoute: NonNestedDeepRouteRouteWithChildren, NonNestedNamedRouteRoute: NonNestedNamedRouteRouteWithChildren, NonNestedPathRouteRoute: NonNestedPathRouteRouteWithChildren, NonNestedPrefixRouteRoute: NonNestedPrefixRouteRouteWithChildren, diff --git a/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz.index.tsx b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz.index.tsx new file mode 100644 index 00000000000..2c02a8f54a5 --- /dev/null +++ b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz.index.tsx @@ -0,0 +1,19 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/non-nested/deep/$baz/')({ + component: RouteComponent, +}) + +function RouteComponent() { + const params = Route.useParams() + return ( +
+
+ Hello deeply nested baz index +
+
+ {JSON.stringify(params)} +
+
+ ) +} diff --git a/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz.route.tsx b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz.route.tsx new file mode 100644 index 00000000000..22955de3bbc --- /dev/null +++ b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz.route.tsx @@ -0,0 +1,16 @@ +import { Outlet, createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/non-nested/deep/$baz')({ + component: RouteComponent, +}) + +function RouteComponent() { + return ( +
+
+ Hello non-nested named baz route layout +
+ +
+ ) +} diff --git a/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.index.tsx b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.index.tsx new file mode 100644 index 00000000000..cbfe5cb72f6 --- /dev/null +++ b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.index.tsx @@ -0,0 +1,19 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar/$foo/')({ + component: RouteComponent, +}) + +function RouteComponent() { + const params = Route.useParams() + return ( +
+
+ Hello deeply nested baz/bar/foo index +
+
+ {JSON.stringify(params)} +
+
+ ) +} diff --git a/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.route.tsx b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.route.tsx new file mode 100644 index 00000000000..0e87a46ec5a --- /dev/null +++ b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.route.tsx @@ -0,0 +1,16 @@ +import { Outlet, createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar/$foo')({ + component: RouteComponent, +}) + +function RouteComponent() { + return ( +
+
+ Hello deeply nested named baz/bar/foo route layout +
+ +
+ ) +} diff --git a/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo_.qux.tsx b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo_.qux.tsx new file mode 100644 index 00000000000..7668c77d3d1 --- /dev/null +++ b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo_.qux.tsx @@ -0,0 +1,19 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar/$foo_/qux')({ + component: RouteComponent, +}) + +function RouteComponent() { + const params = Route.useParams() + return ( +
+
+ Hello deeply nested baz/bar/foo/qux +
+
+ {JSON.stringify(params)} +
+
+ ) +} diff --git a/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.index.tsx b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.index.tsx new file mode 100644 index 00000000000..723dc0a6e24 --- /dev/null +++ b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.index.tsx @@ -0,0 +1,19 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar/')({ + component: RouteComponent, +}) + +function RouteComponent() { + const params = Route.useParams() + return ( +
+
+ Hello deeply nested baz/bar index +
+
+ {JSON.stringify(params)} +
+
+ ) +} diff --git a/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.route.tsx b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.route.tsx new file mode 100644 index 00000000000..a9299e9f433 --- /dev/null +++ b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.route.tsx @@ -0,0 +1,16 @@ +import { Outlet, createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar')({ + component: RouteComponent, +}) + +function RouteComponent() { + return ( +
+
+ Hello deeply nested baz/bar route layout +
+ +
+ ) +} diff --git a/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar_.qux.tsx b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar_.qux.tsx new file mode 100644 index 00000000000..7b38d5373ed --- /dev/null +++ b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar_.qux.tsx @@ -0,0 +1,19 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar_/qux')({ + component: RouteComponent, +}) + +function RouteComponent() { + const params = Route.useParams() + return ( +
+
+ Hello deeply nested baz/bar/qux +
+
+ {JSON.stringify(params)} +
+
+ ) +} diff --git a/e2e/react-router/basic-file-based/src/routes/non-nested/deep/route.tsx b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/route.tsx new file mode 100644 index 00000000000..8db1457fef6 --- /dev/null +++ b/e2e/react-router/basic-file-based/src/routes/non-nested/deep/route.tsx @@ -0,0 +1,58 @@ +import { Link, Outlet, createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/non-nested/deep')({ + component: RouteComponent, +}) + +function RouteComponent() { + return ( +
+
+ Hello non-nested deep layout +
+
+ + To Baz + + + To named baz/bar + + + To named baz/bar/foo + + + To named baz/bar/foo/qux + + + To named baz/bar/qux + +
+ +
+ ) +} diff --git a/e2e/react-router/basic-file-based/tests/non-nested-paths.spec.ts b/e2e/react-router/basic-file-based/tests/non-nested-paths.spec.ts index 9682eb84885..8c0e0e1a1ec 100644 --- a/e2e/react-router/basic-file-based/tests/non-nested-paths.spec.ts +++ b/e2e/react-router/basic-file-based/tests/non-nested-paths.spec.ts @@ -197,3 +197,170 @@ test.describe('Non-nested paths', () => { }, ) }) + +test.describe('Deeply nested non-nested paths', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/non-nested/deep') + await page.waitForURL('/non-nested/deep') + }) + + test('It should nest nested paths 1 level deep', async ({ page }) => { + const rootRouteHeading = page.getByTestId( + `non-nested-deep-root-route-heading`, + ) + + await expect(rootRouteHeading).toBeVisible() + + const bazLink = page.getByTestId('to-deep-baz') + await bazLink.click() + await page.waitForURL('/non-nested/deep/baz') + const bazRouteHeading = page.getByTestId( + 'non-nested-deep-baz-route-heading', + ) + const bazIndexHeading = page.getByTestId( + 'non-nested-deep-baz-index-heading', + ) + const bazIndexParams = page.getByTestId('non-nested-deep-baz-index-param') + + await expect(bazRouteHeading).toBeVisible() + await expect(bazIndexHeading).toBeVisible() + expect(await bazIndexParams.innerText()).toBe( + JSON.stringify({ baz: 'baz' }), + ) + }) + + test('It should not nest non-nested paths 1 level deep', async ({ page }) => { + const rootRouteHeading = page.getByTestId( + `non-nested-deep-root-route-heading`, + ) + + await expect(rootRouteHeading).toBeVisible() + const bazBarLink = page.getByTestId('to-deep-baz-bar') + + await bazBarLink.click() + await page.waitForURL('/non-nested/deep/baz-bar/bar') + const bazRouteHeading = page.getByTestId( + 'non-nested-deep-baz-route-heading', + ) + const bazBarRouteHeading = page.getByTestId( + 'non-nested-deep-baz-bar-route-heading', + ) + const bazBarIndexHeading = page.getByTestId( + 'non-nested-deep-baz-bar-index-heading', + ) + const bazBarIndexParams = page.getByTestId( + 'non-nested-deep-baz-bar-index-param', + ) + + await expect(bazRouteHeading).not.toBeVisible() + await expect(bazBarRouteHeading).toBeVisible() + await expect(bazBarIndexHeading).toBeVisible() + expect(await bazBarIndexParams.innerText()).toBe( + JSON.stringify({ baz: 'baz-bar' }), + ) + }) + + test('It should not nest non-nested paths 2 levels deep', async ({ + page, + }) => { + const rootRouteHeading = page.getByTestId( + `non-nested-deep-root-route-heading`, + ) + + await expect(rootRouteHeading).toBeVisible() + + const bazBarQuxLink = page.getByTestId('to-deep-baz-bar-qux') + await bazBarQuxLink.click() + + await page.waitForURL('/non-nested/deep/baz-bar-qux/bar/qux') + const bazRouteHeading = page.getByTestId( + 'non-nested-deep-baz-route-heading', + ) + const bazBarRouteHeading = page.getByTestId( + 'non-nested-deep-baz-bar-route-heading', + ) + const bazBarQuxHeading = page.getByTestId( + 'non-nested-deep-baz-bar-qux-heading', + ) + const bazBarQuxParams = page.getByTestId( + 'non-nested-deep-baz-bar-qux-param', + ) + + await expect(bazRouteHeading).not.toBeVisible() + await expect(bazBarRouteHeading).not.toBeVisible() + await expect(bazBarQuxHeading).toBeVisible() + await expect(bazBarQuxParams).toBeVisible() + expect(await bazBarQuxParams.innerText()).toBe( + JSON.stringify({ baz: 'baz-bar-qux' }), + ) + }) + + test('It should nest and un-nest non-nested across paths multiple levels deep', async ({ + page, + }) => { + const rootRouteHeading = page.getByTestId( + `non-nested-deep-root-route-heading`, + ) + + await expect(rootRouteHeading).toBeVisible() + + const bazBarFooLink = page.getByTestId('to-deep-baz-bar-foo') + await bazBarFooLink.click() + + await page.waitForURL('/non-nested/deep/baz-bar/bar/foo') + + const bazRouteHeading = page.getByTestId( + 'non-nested-deep-baz-route-heading', + ) + const bazBarRouteHeading = page.getByTestId( + 'non-nested-deep-baz-bar-route-heading', + ) + const bazBarFooRouteHeading = page.getByTestId( + 'non-nested-deep-baz-bar-foo-route-heading', + ) + const bazBarFooIndexHeading = page.getByTestId( + 'non-nested-deep-baz-bar-foo-index-heading', + ) + const bazBarFooIndexParams = page.getByTestId( + 'non-nested-deep-baz-bar-foo-index-param', + ) + + await expect(bazRouteHeading).not.toBeVisible() + await expect(bazBarRouteHeading).toBeVisible() + await expect(bazBarFooRouteHeading).toBeVisible() + await expect(bazBarFooIndexHeading).toBeVisible() + await expect(bazBarFooIndexParams).toBeVisible() + expect(await bazBarFooIndexParams.innerText()).toBe( + JSON.stringify({ baz: 'baz-bar', foo: 'foo' }), + ) + + const bazBarFooQuxLink = page.getByTestId('to-deep-baz-bar-foo-qux') + await bazBarFooQuxLink.click() + await page.waitForURL('/non-nested/deep/baz-bar-qux/bar/foo/qux') + + const bazBarFooQuxHeading = page.getByTestId( + 'non-nested-deep-baz-bar-foo-qux-heading', + ) + const bazBarFooQuxParams = page.getByTestId( + 'non-nested-deep-baz-bar-foo-qux-param', + ) + + await expect(bazRouteHeading).not.toBeVisible() + await expect(bazBarRouteHeading).toBeVisible() + await expect(bazBarFooRouteHeading).not.toBeVisible() + await expect(bazBarFooQuxHeading).toBeVisible() + await expect(bazBarFooQuxParams).toBeVisible() + + if (useExperimentalNonNestedRoutes) { + expect(await bazBarFooQuxParams.innerText()).toBe( + JSON.stringify({ baz: 'baz-bar-qux', foo: 'foo' }), + ) + } else { + // this is a bug with named path params and non-nested paths + // that is resolved in the new experimental flag + expect(await bazBarFooQuxParams.innerText()).toBe( + JSON.stringify({ baz: 'baz-bar', foo: 'foo' }), + ) + } + }) +}) diff --git a/e2e/solid-router/basic-file-based/src/routeTree.gen.ts b/e2e/solid-router/basic-file-based/src/routeTree.gen.ts index bfa9054cffe..97e236578c3 100644 --- a/e2e/solid-router/basic-file-based/src/routeTree.gen.ts +++ b/e2e/solid-router/basic-file-based/src/routeTree.gen.ts @@ -42,6 +42,7 @@ import { Route as NonNestedSuffixRouteRouteImport } from './routes/non-nested/su import { Route as NonNestedPrefixRouteRouteImport } from './routes/non-nested/prefix/route' import { Route as NonNestedPathRouteRouteImport } from './routes/non-nested/path/route' import { Route as NonNestedNamedRouteRouteImport } from './routes/non-nested/named/route' +import { Route as NonNestedDeepRouteRouteImport } from './routes/non-nested/deep/route' import { Route as RedirectTargetIndexRouteImport } from './routes/redirect/$target/index' import { Route as ParamsPsWildcardIndexRouteImport } from './routes/params-ps/wildcard/index' import { Route as ParamsPsNamedIndexRouteImport } from './routes/params-ps/named/index' @@ -75,6 +76,7 @@ import { Route as NonNestedSuffixChar123bazChar125suffixRouteRouteImport } from import { Route as NonNestedPrefixPrefixChar123bazChar125RouteRouteImport } from './routes/non-nested/prefix/prefix{$baz}.route' import { Route as NonNestedPathBazRouteRouteImport } from './routes/non-nested/path/baz.route' import { Route as NonNestedNamedBazRouteRouteImport } from './routes/non-nested/named/$baz.route' +import { Route as NonNestedDeepBazRouteRouteImport } from './routes/non-nested/deep/$baz.route' import { Route as RelativeUseNavigateWithSearchIndexRouteImport } from './routes/relative/useNavigate/with-search/index' import { Route as RelativeUseNavigatePathIndexRouteImport } from './routes/relative/useNavigate/path/index' import { Route as RelativeUseNavigateNestedIndexRouteImport } from './routes/relative/useNavigate/nested/index' @@ -85,6 +87,7 @@ import { Route as NonNestedSuffixChar123bazChar125suffixIndexRouteImport } from import { Route as NonNestedPrefixPrefixChar123bazChar125IndexRouteImport } from './routes/non-nested/prefix/prefix{$baz}.index' import { Route as NonNestedPathBazIndexRouteImport } from './routes/non-nested/path/baz.index' import { Route as NonNestedNamedBazIndexRouteImport } from './routes/non-nested/named/$baz.index' +import { Route as NonNestedDeepBazIndexRouteImport } from './routes/non-nested/deep/$baz.index' import { Route as ParamsPsNonNestedFooBarRouteImport } from './routes/params-ps/non-nested/$foo_/$bar' import { Route as NonNestedSuffixChar123bazChar125suffixBarRouteImport } from './routes/non-nested/suffix/{$baz}suffix_.bar' import { Route as NonNestedSuffixChar123bazChar125suffixFooRouteImport } from './routes/non-nested/suffix/{$baz}suffix.foo' @@ -95,11 +98,17 @@ import { Route as NonNestedPathBazFooRouteImport } from './routes/non-nested/pat import { Route as NonNestedNamedBazBarRouteImport } from './routes/non-nested/named/$baz_.bar' import { Route as NonNestedNamedBazFooRouteImport } from './routes/non-nested/named/$baz.foo' import { Route as ParamsPsNamedFooBarRouteRouteImport } from './routes/params-ps/named/$foo/$bar.route' +import { Route as NonNestedDeepBazBarRouteRouteImport } from './routes/non-nested/deep/$baz_.bar.route' import { Route as RelativeUseNavigatePathPathIndexRouteImport } from './routes/relative/useNavigate/path/$path/index' import { Route as RelativeUseNavigateNestedDeepIndexRouteImport } from './routes/relative/useNavigate/nested/deep/index' import { Route as RelativeLinkPathPathIndexRouteImport } from './routes/relative/link/path/$path/index' import { Route as RelativeLinkNestedDeepIndexRouteImport } from './routes/relative/link/nested/deep/index' +import { Route as NonNestedDeepBazBarIndexRouteImport } from './routes/non-nested/deep/$baz_.bar.index' import { Route as ParamsPsNamedFooBarBazRouteImport } from './routes/params-ps/named/$foo/$bar.$baz' +import { Route as NonNestedDeepBazBarQuxRouteImport } from './routes/non-nested/deep/$baz_.bar_.qux' +import { Route as NonNestedDeepBazBarFooRouteRouteImport } from './routes/non-nested/deep/$baz_.bar.$foo.route' +import { Route as NonNestedDeepBazBarFooIndexRouteImport } from './routes/non-nested/deep/$baz_.bar.$foo.index' +import { Route as NonNestedDeepBazBarFooQuxRouteImport } from './routes/non-nested/deep/$baz_.bar.$foo_.qux' const RemountDepsRoute = RemountDepsRouteImport.update({ id: '/remountDeps', @@ -268,6 +277,11 @@ const NonNestedNamedRouteRoute = NonNestedNamedRouteRouteImport.update({ path: '/named', getParentRoute: () => NonNestedRouteRoute, } as any) +const NonNestedDeepRouteRoute = NonNestedDeepRouteRouteImport.update({ + id: '/deep', + path: '/deep', + getParentRoute: () => NonNestedRouteRoute, +} as any) const RedirectTargetIndexRoute = RedirectTargetIndexRouteImport.update({ id: '/', path: '/', @@ -449,6 +463,11 @@ const NonNestedNamedBazRouteRoute = NonNestedNamedBazRouteRouteImport.update({ path: '/$baz', getParentRoute: () => NonNestedNamedRouteRoute, } as any) +const NonNestedDeepBazRouteRoute = NonNestedDeepBazRouteRouteImport.update({ + id: '/$baz', + path: '/$baz', + getParentRoute: () => NonNestedDeepRouteRoute, +} as any) const RelativeUseNavigateWithSearchIndexRoute = RelativeUseNavigateWithSearchIndexRouteImport.update({ id: '/with-search/', @@ -505,6 +524,11 @@ const NonNestedNamedBazIndexRoute = NonNestedNamedBazIndexRouteImport.update({ path: '/', getParentRoute: () => NonNestedNamedBazRouteRoute, } as any) +const NonNestedDeepBazIndexRoute = NonNestedDeepBazIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => NonNestedDeepBazRouteRoute, +} as any) const ParamsPsNonNestedFooBarRoute = ParamsPsNonNestedFooBarRouteImport.update({ id: '/$bar', path: '/$bar', @@ -560,6 +584,12 @@ const ParamsPsNamedFooBarRouteRoute = path: '/$bar', getParentRoute: () => ParamsPsNamedFooRouteRoute, } as any) +const NonNestedDeepBazBarRouteRoute = + NonNestedDeepBazBarRouteRouteImport.update({ + id: '/$baz_/bar', + path: '/$baz/bar', + getParentRoute: () => NonNestedDeepRouteRoute, + } as any) const RelativeUseNavigatePathPathIndexRoute = RelativeUseNavigatePathPathIndexRouteImport.update({ id: '/path/$path/', @@ -584,11 +614,40 @@ const RelativeLinkNestedDeepIndexRoute = path: '/nested/deep/', getParentRoute: () => RelativeLinkRouteRoute, } as any) +const NonNestedDeepBazBarIndexRoute = + NonNestedDeepBazBarIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => NonNestedDeepBazBarRouteRoute, + } as any) const ParamsPsNamedFooBarBazRoute = ParamsPsNamedFooBarBazRouteImport.update({ id: '/$baz', path: '/$baz', getParentRoute: () => ParamsPsNamedFooBarRouteRoute, } as any) +const NonNestedDeepBazBarQuxRoute = NonNestedDeepBazBarQuxRouteImport.update({ + id: '/$baz_/bar_/qux', + path: '/$baz/bar/qux', + getParentRoute: () => NonNestedDeepRouteRoute, +} as any) +const NonNestedDeepBazBarFooRouteRoute = + NonNestedDeepBazBarFooRouteRouteImport.update({ + id: '/$foo', + path: '/$foo', + getParentRoute: () => NonNestedDeepBazBarRouteRoute, + } as any) +const NonNestedDeepBazBarFooIndexRoute = + NonNestedDeepBazBarFooIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => NonNestedDeepBazBarFooRouteRoute, + } as any) +const NonNestedDeepBazBarFooQuxRoute = + NonNestedDeepBazBarFooQuxRouteImport.update({ + id: '/$foo_/qux', + path: '/$foo/qux', + getParentRoute: () => NonNestedDeepBazBarRouteRoute, + } as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute @@ -602,6 +661,7 @@ export interface FileRoutesByFullPath { '/notRemountDeps': typeof NotRemountDepsRoute '/posts': typeof PostsRouteWithChildren '/remountDeps': typeof RemountDepsRoute + '/non-nested/deep': typeof NonNestedDeepRouteRouteWithChildren '/non-nested/named': typeof NonNestedNamedRouteRouteWithChildren '/non-nested/path': typeof NonNestedPathRouteRouteWithChildren '/non-nested/prefix': typeof NonNestedPrefixRouteRouteWithChildren @@ -621,6 +681,7 @@ export interface FileRoutesByFullPath { '/relative': typeof RelativeIndexRoute '/search-params/': typeof SearchParamsIndexRoute '/transition': typeof TransitionIndexRoute + '/non-nested/deep/$baz': typeof NonNestedDeepBazRouteRouteWithChildren '/non-nested/named/$baz': typeof NonNestedNamedBazRouteRouteWithChildren '/non-nested/path/baz': typeof NonNestedPathBazRouteRouteWithChildren '/non-nested/prefix/prefix{$baz}': typeof NonNestedPrefixPrefixChar123bazChar125RouteRouteWithChildren @@ -654,6 +715,7 @@ export interface FileRoutesByFullPath { '/params-ps/named': typeof ParamsPsNamedIndexRoute '/params-ps/wildcard': typeof ParamsPsWildcardIndexRoute '/redirect/$target/': typeof RedirectTargetIndexRoute + '/non-nested/deep/$baz/bar': typeof NonNestedDeepBazBarRouteRouteWithChildren '/params-ps/named/$foo/$bar': typeof ParamsPsNamedFooBarRouteRouteWithChildren '/non-nested/named/$baz/foo': typeof NonNestedNamedBazFooRoute '/non-nested/named/$baz/bar': typeof NonNestedNamedBazBarRoute @@ -664,6 +726,7 @@ export interface FileRoutesByFullPath { '/non-nested/suffix/{$baz}suffix/foo': typeof NonNestedSuffixChar123bazChar125suffixFooRoute '/non-nested/suffix/{$baz}suffix/bar': typeof NonNestedSuffixChar123bazChar125suffixBarRoute '/params-ps/non-nested/$foo/$bar': typeof ParamsPsNonNestedFooBarRoute + '/non-nested/deep/$baz/': typeof NonNestedDeepBazIndexRoute '/non-nested/named/$baz/': typeof NonNestedNamedBazIndexRoute '/non-nested/path/baz/': typeof NonNestedPathBazIndexRoute '/non-nested/prefix/prefix{$baz}/': typeof NonNestedPrefixPrefixChar123bazChar125IndexRoute @@ -674,11 +737,16 @@ export interface FileRoutesByFullPath { '/relative/useNavigate/nested': typeof RelativeUseNavigateNestedIndexRoute '/relative/useNavigate/path': typeof RelativeUseNavigatePathIndexRoute '/relative/useNavigate/with-search': typeof RelativeUseNavigateWithSearchIndexRoute + '/non-nested/deep/$baz/bar/$foo': typeof NonNestedDeepBazBarFooRouteRouteWithChildren + '/non-nested/deep/$baz/bar/qux': typeof NonNestedDeepBazBarQuxRoute '/params-ps/named/$foo/$bar/$baz': typeof ParamsPsNamedFooBarBazRoute + '/non-nested/deep/$baz/bar/': typeof NonNestedDeepBazBarIndexRoute '/relative/link/nested/deep': typeof RelativeLinkNestedDeepIndexRoute '/relative/link/path/$path': typeof RelativeLinkPathPathIndexRoute '/relative/useNavigate/nested/deep': typeof RelativeUseNavigateNestedDeepIndexRoute '/relative/useNavigate/path/$path': typeof RelativeUseNavigatePathPathIndexRoute + '/non-nested/deep/$baz/bar/$foo/qux': typeof NonNestedDeepBazBarFooQuxRoute + '/non-nested/deep/$baz/bar/$foo/': typeof NonNestedDeepBazBarFooIndexRoute } export interface FileRoutesByTo { '/': typeof IndexRoute @@ -690,6 +758,7 @@ export interface FileRoutesByTo { '/editing-b': typeof EditingBRoute '/notRemountDeps': typeof NotRemountDepsRoute '/remountDeps': typeof RemountDepsRoute + '/non-nested/deep': typeof NonNestedDeepRouteRouteWithChildren '/non-nested/named': typeof NonNestedNamedRouteRouteWithChildren '/non-nested/path': typeof NonNestedPathRouteRouteWithChildren '/non-nested/prefix': typeof NonNestedPrefixRouteRouteWithChildren @@ -747,6 +816,7 @@ export interface FileRoutesByTo { '/non-nested/suffix/{$baz}suffix/foo': typeof NonNestedSuffixChar123bazChar125suffixFooRoute '/non-nested/suffix/{$baz}suffix/bar': typeof NonNestedSuffixChar123bazChar125suffixBarRoute '/params-ps/non-nested/$foo/$bar': typeof ParamsPsNonNestedFooBarRoute + '/non-nested/deep/$baz': typeof NonNestedDeepBazIndexRoute '/non-nested/named/$baz': typeof NonNestedNamedBazIndexRoute '/non-nested/path/baz': typeof NonNestedPathBazIndexRoute '/non-nested/prefix/prefix{$baz}': typeof NonNestedPrefixPrefixChar123bazChar125IndexRoute @@ -757,11 +827,15 @@ export interface FileRoutesByTo { '/relative/useNavigate/nested': typeof RelativeUseNavigateNestedIndexRoute '/relative/useNavigate/path': typeof RelativeUseNavigatePathIndexRoute '/relative/useNavigate/with-search': typeof RelativeUseNavigateWithSearchIndexRoute + '/non-nested/deep/$baz/bar/qux': typeof NonNestedDeepBazBarQuxRoute '/params-ps/named/$foo/$bar/$baz': typeof ParamsPsNamedFooBarBazRoute + '/non-nested/deep/$baz/bar': typeof NonNestedDeepBazBarIndexRoute '/relative/link/nested/deep': typeof RelativeLinkNestedDeepIndexRoute '/relative/link/path/$path': typeof RelativeLinkPathPathIndexRoute '/relative/useNavigate/nested/deep': typeof RelativeUseNavigateNestedDeepIndexRoute '/relative/useNavigate/path/$path': typeof RelativeUseNavigatePathPathIndexRoute + '/non-nested/deep/$baz/bar/$foo/qux': typeof NonNestedDeepBazBarFooQuxRoute + '/non-nested/deep/$baz/bar/$foo': typeof NonNestedDeepBazBarFooIndexRoute } export interface FileRoutesById { __root__: typeof rootRouteImport @@ -777,6 +851,7 @@ export interface FileRoutesById { '/notRemountDeps': typeof NotRemountDepsRoute '/posts': typeof PostsRouteWithChildren '/remountDeps': typeof RemountDepsRoute + '/non-nested/deep': typeof NonNestedDeepRouteRouteWithChildren '/non-nested/named': typeof NonNestedNamedRouteRouteWithChildren '/non-nested/path': typeof NonNestedPathRouteRouteWithChildren '/non-nested/prefix': typeof NonNestedPrefixRouteRouteWithChildren @@ -798,6 +873,7 @@ export interface FileRoutesById { '/relative/': typeof RelativeIndexRoute '/search-params/': typeof SearchParamsIndexRoute '/transition/': typeof TransitionIndexRoute + '/non-nested/deep/$baz': typeof NonNestedDeepBazRouteRouteWithChildren '/non-nested/named/$baz': typeof NonNestedNamedBazRouteRouteWithChildren '/non-nested/path/baz': typeof NonNestedPathBazRouteRouteWithChildren '/non-nested/prefix/prefix{$baz}': typeof NonNestedPrefixPrefixChar123bazChar125RouteRouteWithChildren @@ -831,6 +907,7 @@ export interface FileRoutesById { '/params-ps/named/': typeof ParamsPsNamedIndexRoute '/params-ps/wildcard/': typeof ParamsPsWildcardIndexRoute '/redirect/$target/': typeof RedirectTargetIndexRoute + '/non-nested/deep/$baz_/bar': typeof NonNestedDeepBazBarRouteRouteWithChildren '/params-ps/named/$foo/$bar': typeof ParamsPsNamedFooBarRouteRouteWithChildren '/non-nested/named/$baz/foo': typeof NonNestedNamedBazFooRoute '/non-nested/named/$baz_/bar': typeof NonNestedNamedBazBarRoute @@ -841,6 +918,7 @@ export interface FileRoutesById { '/non-nested/suffix/{$baz}suffix/foo': typeof NonNestedSuffixChar123bazChar125suffixFooRoute '/non-nested/suffix/{$baz}suffix_/bar': typeof NonNestedSuffixChar123bazChar125suffixBarRoute '/params-ps/non-nested/$foo_/$bar': typeof ParamsPsNonNestedFooBarRoute + '/non-nested/deep/$baz/': typeof NonNestedDeepBazIndexRoute '/non-nested/named/$baz/': typeof NonNestedNamedBazIndexRoute '/non-nested/path/baz/': typeof NonNestedPathBazIndexRoute '/non-nested/prefix/prefix{$baz}/': typeof NonNestedPrefixPrefixChar123bazChar125IndexRoute @@ -851,11 +929,16 @@ export interface FileRoutesById { '/relative/useNavigate/nested/': typeof RelativeUseNavigateNestedIndexRoute '/relative/useNavigate/path/': typeof RelativeUseNavigatePathIndexRoute '/relative/useNavigate/with-search/': typeof RelativeUseNavigateWithSearchIndexRoute + '/non-nested/deep/$baz_/bar/$foo': typeof NonNestedDeepBazBarFooRouteRouteWithChildren + '/non-nested/deep/$baz_/bar_/qux': typeof NonNestedDeepBazBarQuxRoute '/params-ps/named/$foo/$bar/$baz': typeof ParamsPsNamedFooBarBazRoute + '/non-nested/deep/$baz_/bar/': typeof NonNestedDeepBazBarIndexRoute '/relative/link/nested/deep/': typeof RelativeLinkNestedDeepIndexRoute '/relative/link/path/$path/': typeof RelativeLinkPathPathIndexRoute '/relative/useNavigate/nested/deep/': typeof RelativeUseNavigateNestedDeepIndexRoute '/relative/useNavigate/path/$path/': typeof RelativeUseNavigatePathPathIndexRoute + '/non-nested/deep/$baz_/bar/$foo_/qux': typeof NonNestedDeepBazBarFooQuxRoute + '/non-nested/deep/$baz_/bar/$foo/': typeof NonNestedDeepBazBarFooIndexRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath @@ -871,6 +954,7 @@ export interface FileRouteTypes { | '/notRemountDeps' | '/posts' | '/remountDeps' + | '/non-nested/deep' | '/non-nested/named' | '/non-nested/path' | '/non-nested/prefix' @@ -890,6 +974,7 @@ export interface FileRouteTypes { | '/relative' | '/search-params/' | '/transition' + | '/non-nested/deep/$baz' | '/non-nested/named/$baz' | '/non-nested/path/baz' | '/non-nested/prefix/prefix{$baz}' @@ -923,6 +1008,7 @@ export interface FileRouteTypes { | '/params-ps/named' | '/params-ps/wildcard' | '/redirect/$target/' + | '/non-nested/deep/$baz/bar' | '/params-ps/named/$foo/$bar' | '/non-nested/named/$baz/foo' | '/non-nested/named/$baz/bar' @@ -933,6 +1019,7 @@ export interface FileRouteTypes { | '/non-nested/suffix/{$baz}suffix/foo' | '/non-nested/suffix/{$baz}suffix/bar' | '/params-ps/non-nested/$foo/$bar' + | '/non-nested/deep/$baz/' | '/non-nested/named/$baz/' | '/non-nested/path/baz/' | '/non-nested/prefix/prefix{$baz}/' @@ -943,11 +1030,16 @@ export interface FileRouteTypes { | '/relative/useNavigate/nested' | '/relative/useNavigate/path' | '/relative/useNavigate/with-search' + | '/non-nested/deep/$baz/bar/$foo' + | '/non-nested/deep/$baz/bar/qux' | '/params-ps/named/$foo/$bar/$baz' + | '/non-nested/deep/$baz/bar/' | '/relative/link/nested/deep' | '/relative/link/path/$path' | '/relative/useNavigate/nested/deep' | '/relative/useNavigate/path/$path' + | '/non-nested/deep/$baz/bar/$foo/qux' + | '/non-nested/deep/$baz/bar/$foo/' fileRoutesByTo: FileRoutesByTo to: | '/' @@ -959,6 +1051,7 @@ export interface FileRouteTypes { | '/editing-b' | '/notRemountDeps' | '/remountDeps' + | '/non-nested/deep' | '/non-nested/named' | '/non-nested/path' | '/non-nested/prefix' @@ -1016,6 +1109,7 @@ export interface FileRouteTypes { | '/non-nested/suffix/{$baz}suffix/foo' | '/non-nested/suffix/{$baz}suffix/bar' | '/params-ps/non-nested/$foo/$bar' + | '/non-nested/deep/$baz' | '/non-nested/named/$baz' | '/non-nested/path/baz' | '/non-nested/prefix/prefix{$baz}' @@ -1026,11 +1120,15 @@ export interface FileRouteTypes { | '/relative/useNavigate/nested' | '/relative/useNavigate/path' | '/relative/useNavigate/with-search' + | '/non-nested/deep/$baz/bar/qux' | '/params-ps/named/$foo/$bar/$baz' + | '/non-nested/deep/$baz/bar' | '/relative/link/nested/deep' | '/relative/link/path/$path' | '/relative/useNavigate/nested/deep' | '/relative/useNavigate/path/$path' + | '/non-nested/deep/$baz/bar/$foo/qux' + | '/non-nested/deep/$baz/bar/$foo' id: | '__root__' | '/' @@ -1045,6 +1143,7 @@ export interface FileRouteTypes { | '/notRemountDeps' | '/posts' | '/remountDeps' + | '/non-nested/deep' | '/non-nested/named' | '/non-nested/path' | '/non-nested/prefix' @@ -1066,6 +1165,7 @@ export interface FileRouteTypes { | '/relative/' | '/search-params/' | '/transition/' + | '/non-nested/deep/$baz' | '/non-nested/named/$baz' | '/non-nested/path/baz' | '/non-nested/prefix/prefix{$baz}' @@ -1099,6 +1199,7 @@ export interface FileRouteTypes { | '/params-ps/named/' | '/params-ps/wildcard/' | '/redirect/$target/' + | '/non-nested/deep/$baz_/bar' | '/params-ps/named/$foo/$bar' | '/non-nested/named/$baz/foo' | '/non-nested/named/$baz_/bar' @@ -1109,6 +1210,7 @@ export interface FileRouteTypes { | '/non-nested/suffix/{$baz}suffix/foo' | '/non-nested/suffix/{$baz}suffix_/bar' | '/params-ps/non-nested/$foo_/$bar' + | '/non-nested/deep/$baz/' | '/non-nested/named/$baz/' | '/non-nested/path/baz/' | '/non-nested/prefix/prefix{$baz}/' @@ -1119,11 +1221,16 @@ export interface FileRouteTypes { | '/relative/useNavigate/nested/' | '/relative/useNavigate/path/' | '/relative/useNavigate/with-search/' + | '/non-nested/deep/$baz_/bar/$foo' + | '/non-nested/deep/$baz_/bar_/qux' | '/params-ps/named/$foo/$bar/$baz' + | '/non-nested/deep/$baz_/bar/' | '/relative/link/nested/deep/' | '/relative/link/path/$path/' | '/relative/useNavigate/nested/deep/' | '/relative/useNavigate/path/$path/' + | '/non-nested/deep/$baz_/bar/$foo_/qux' + | '/non-nested/deep/$baz_/bar/$foo/' fileRoutesById: FileRoutesById } export interface RootRouteChildren { @@ -1402,6 +1509,13 @@ declare module '@tanstack/solid-router' { preLoaderRoute: typeof NonNestedNamedRouteRouteImport parentRoute: typeof NonNestedRouteRoute } + '/non-nested/deep': { + id: '/non-nested/deep' + path: '/deep' + fullPath: '/non-nested/deep' + preLoaderRoute: typeof NonNestedDeepRouteRouteImport + parentRoute: typeof NonNestedRouteRoute + } '/redirect/$target/': { id: '/redirect/$target/' path: '/' @@ -1633,6 +1747,13 @@ declare module '@tanstack/solid-router' { preLoaderRoute: typeof NonNestedNamedBazRouteRouteImport parentRoute: typeof NonNestedNamedRouteRoute } + '/non-nested/deep/$baz': { + id: '/non-nested/deep/$baz' + path: '/$baz' + fullPath: '/non-nested/deep/$baz' + preLoaderRoute: typeof NonNestedDeepBazRouteRouteImport + parentRoute: typeof NonNestedDeepRouteRoute + } '/relative/useNavigate/with-search/': { id: '/relative/useNavigate/with-search/' path: '/with-search' @@ -1703,6 +1824,13 @@ declare module '@tanstack/solid-router' { preLoaderRoute: typeof NonNestedNamedBazIndexRouteImport parentRoute: typeof NonNestedNamedBazRouteRoute } + '/non-nested/deep/$baz/': { + id: '/non-nested/deep/$baz/' + path: '/' + fullPath: '/non-nested/deep/$baz/' + preLoaderRoute: typeof NonNestedDeepBazIndexRouteImport + parentRoute: typeof NonNestedDeepBazRouteRoute + } '/params-ps/non-nested/$foo_/$bar': { id: '/params-ps/non-nested/$foo_/$bar' path: '/$bar' @@ -1773,6 +1901,13 @@ declare module '@tanstack/solid-router' { preLoaderRoute: typeof ParamsPsNamedFooBarRouteRouteImport parentRoute: typeof ParamsPsNamedFooRouteRoute } + '/non-nested/deep/$baz_/bar': { + id: '/non-nested/deep/$baz_/bar' + path: '/$baz/bar' + fullPath: '/non-nested/deep/$baz/bar' + preLoaderRoute: typeof NonNestedDeepBazBarRouteRouteImport + parentRoute: typeof NonNestedDeepRouteRoute + } '/relative/useNavigate/path/$path/': { id: '/relative/useNavigate/path/$path/' path: '/path/$path' @@ -1801,6 +1936,13 @@ declare module '@tanstack/solid-router' { preLoaderRoute: typeof RelativeLinkNestedDeepIndexRouteImport parentRoute: typeof RelativeLinkRouteRoute } + '/non-nested/deep/$baz_/bar/': { + id: '/non-nested/deep/$baz_/bar/' + path: '/' + fullPath: '/non-nested/deep/$baz/bar/' + preLoaderRoute: typeof NonNestedDeepBazBarIndexRouteImport + parentRoute: typeof NonNestedDeepBazBarRouteRoute + } '/params-ps/named/$foo/$bar/$baz': { id: '/params-ps/named/$foo/$bar/$baz' path: '/$baz' @@ -1808,9 +1950,98 @@ declare module '@tanstack/solid-router' { preLoaderRoute: typeof ParamsPsNamedFooBarBazRouteImport parentRoute: typeof ParamsPsNamedFooBarRouteRoute } + '/non-nested/deep/$baz_/bar_/qux': { + id: '/non-nested/deep/$baz_/bar_/qux' + path: '/$baz/bar/qux' + fullPath: '/non-nested/deep/$baz/bar/qux' + preLoaderRoute: typeof NonNestedDeepBazBarQuxRouteImport + parentRoute: typeof NonNestedDeepRouteRoute + } + '/non-nested/deep/$baz_/bar/$foo': { + id: '/non-nested/deep/$baz_/bar/$foo' + path: '/$foo' + fullPath: '/non-nested/deep/$baz/bar/$foo' + preLoaderRoute: typeof NonNestedDeepBazBarFooRouteRouteImport + parentRoute: typeof NonNestedDeepBazBarRouteRoute + } + '/non-nested/deep/$baz_/bar/$foo/': { + id: '/non-nested/deep/$baz_/bar/$foo/' + path: '/' + fullPath: '/non-nested/deep/$baz/bar/$foo/' + preLoaderRoute: typeof NonNestedDeepBazBarFooIndexRouteImport + parentRoute: typeof NonNestedDeepBazBarFooRouteRoute + } + '/non-nested/deep/$baz_/bar/$foo_/qux': { + id: '/non-nested/deep/$baz_/bar/$foo_/qux' + path: '/$foo/qux' + fullPath: '/non-nested/deep/$baz/bar/$foo/qux' + preLoaderRoute: typeof NonNestedDeepBazBarFooQuxRouteImport + parentRoute: typeof NonNestedDeepBazBarRouteRoute + } + } +} + +interface NonNestedDeepBazRouteRouteChildren { + NonNestedDeepBazIndexRoute: typeof NonNestedDeepBazIndexRoute +} + +const NonNestedDeepBazRouteRouteChildren: NonNestedDeepBazRouteRouteChildren = { + NonNestedDeepBazIndexRoute: NonNestedDeepBazIndexRoute, +} + +const NonNestedDeepBazRouteRouteWithChildren = + NonNestedDeepBazRouteRoute._addFileChildren( + NonNestedDeepBazRouteRouteChildren, + ) + +interface NonNestedDeepBazBarFooRouteRouteChildren { + NonNestedDeepBazBarFooIndexRoute: typeof NonNestedDeepBazBarFooIndexRoute +} + +const NonNestedDeepBazBarFooRouteRouteChildren: NonNestedDeepBazBarFooRouteRouteChildren = + { + NonNestedDeepBazBarFooIndexRoute: NonNestedDeepBazBarFooIndexRoute, } + +const NonNestedDeepBazBarFooRouteRouteWithChildren = + NonNestedDeepBazBarFooRouteRoute._addFileChildren( + NonNestedDeepBazBarFooRouteRouteChildren, + ) + +interface NonNestedDeepBazBarRouteRouteChildren { + NonNestedDeepBazBarFooRouteRoute: typeof NonNestedDeepBazBarFooRouteRouteWithChildren + NonNestedDeepBazBarIndexRoute: typeof NonNestedDeepBazBarIndexRoute + NonNestedDeepBazBarFooQuxRoute: typeof NonNestedDeepBazBarFooQuxRoute } +const NonNestedDeepBazBarRouteRouteChildren: NonNestedDeepBazBarRouteRouteChildren = + { + NonNestedDeepBazBarFooRouteRoute: + NonNestedDeepBazBarFooRouteRouteWithChildren, + NonNestedDeepBazBarIndexRoute: NonNestedDeepBazBarIndexRoute, + NonNestedDeepBazBarFooQuxRoute: NonNestedDeepBazBarFooQuxRoute, + } + +const NonNestedDeepBazBarRouteRouteWithChildren = + NonNestedDeepBazBarRouteRoute._addFileChildren( + NonNestedDeepBazBarRouteRouteChildren, + ) + +interface NonNestedDeepRouteRouteChildren { + NonNestedDeepBazRouteRoute: typeof NonNestedDeepBazRouteRouteWithChildren + NonNestedDeepBazBarRouteRoute: typeof NonNestedDeepBazBarRouteRouteWithChildren + NonNestedDeepBazBarQuxRoute: typeof NonNestedDeepBazBarQuxRoute +} + +const NonNestedDeepRouteRouteChildren: NonNestedDeepRouteRouteChildren = { + NonNestedDeepBazRouteRoute: NonNestedDeepBazRouteRouteWithChildren, + NonNestedDeepBazBarRouteRoute: NonNestedDeepBazBarRouteRouteWithChildren, + NonNestedDeepBazBarQuxRoute: NonNestedDeepBazBarQuxRoute, +} + +const NonNestedDeepRouteRouteWithChildren = + NonNestedDeepRouteRoute._addFileChildren(NonNestedDeepRouteRouteChildren) + interface NonNestedNamedBazRouteRouteChildren { NonNestedNamedBazFooRoute: typeof NonNestedNamedBazFooRoute NonNestedNamedBazIndexRoute: typeof NonNestedNamedBazIndexRoute @@ -1935,6 +2166,7 @@ const NonNestedSuffixRouteRouteWithChildren = NonNestedSuffixRouteRoute._addFileChildren(NonNestedSuffixRouteRouteChildren) interface NonNestedRouteRouteChildren { + NonNestedDeepRouteRoute: typeof NonNestedDeepRouteRouteWithChildren NonNestedNamedRouteRoute: typeof NonNestedNamedRouteRouteWithChildren NonNestedPathRouteRoute: typeof NonNestedPathRouteRouteWithChildren NonNestedPrefixRouteRoute: typeof NonNestedPrefixRouteRouteWithChildren @@ -1942,6 +2174,7 @@ interface NonNestedRouteRouteChildren { } const NonNestedRouteRouteChildren: NonNestedRouteRouteChildren = { + NonNestedDeepRouteRoute: NonNestedDeepRouteRouteWithChildren, NonNestedNamedRouteRoute: NonNestedNamedRouteRouteWithChildren, NonNestedPathRouteRoute: NonNestedPathRouteRouteWithChildren, NonNestedPrefixRouteRoute: NonNestedPrefixRouteRouteWithChildren, diff --git a/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz.index.tsx b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz.index.tsx new file mode 100644 index 00000000000..9f2a1a9d456 --- /dev/null +++ b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz.index.tsx @@ -0,0 +1,19 @@ +import { createFileRoute } from '@tanstack/solid-router' + +export const Route = createFileRoute('/non-nested/deep/$baz/')({ + component: RouteComponent, +}) + +function RouteComponent() { + const params = Route.useParams() + return ( +
+
+ Hello deeply nested baz index +
+
+ {JSON.stringify(params())} +
+
+ ) +} diff --git a/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz.route.tsx b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz.route.tsx new file mode 100644 index 00000000000..152a12147e1 --- /dev/null +++ b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz.route.tsx @@ -0,0 +1,16 @@ +import { Outlet, createFileRoute } from '@tanstack/solid-router' + +export const Route = createFileRoute('/non-nested/deep/$baz')({ + component: RouteComponent, +}) + +function RouteComponent() { + return ( +
+
+ Hello non-nested named baz route layout +
+ +
+ ) +} diff --git a/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.index.tsx b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.index.tsx new file mode 100644 index 00000000000..cb5dda58bfc --- /dev/null +++ b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.index.tsx @@ -0,0 +1,19 @@ +import { createFileRoute } from '@tanstack/solid-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar/$foo/')({ + component: RouteComponent, +}) + +function RouteComponent() { + const params = Route.useParams() + return ( +
+
+ Hello deeply nested baz/bar/foo index +
+
+ {JSON.stringify(params())} +
+
+ ) +} diff --git a/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.route.tsx b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.route.tsx new file mode 100644 index 00000000000..7822e408e7d --- /dev/null +++ b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo.route.tsx @@ -0,0 +1,16 @@ +import { Outlet, createFileRoute } from '@tanstack/solid-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar/$foo')({ + component: RouteComponent, +}) + +function RouteComponent() { + return ( +
+
+ Hello deeply nested named baz/bar/foo route layout +
+ +
+ ) +} diff --git a/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo_.qux.tsx b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo_.qux.tsx new file mode 100644 index 00000000000..7ecdbd8c8e2 --- /dev/null +++ b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.$foo_.qux.tsx @@ -0,0 +1,19 @@ +import { createFileRoute } from '@tanstack/solid-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar/$foo_/qux')({ + component: RouteComponent, +}) + +function RouteComponent() { + const params = Route.useParams() + return ( +
+
+ Hello deeply nested baz/bar/foo/qux +
+
+ {JSON.stringify(params())} +
+
+ ) +} diff --git a/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.index.tsx b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.index.tsx new file mode 100644 index 00000000000..ee2483e3673 --- /dev/null +++ b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.index.tsx @@ -0,0 +1,19 @@ +import { createFileRoute } from '@tanstack/solid-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar/')({ + component: RouteComponent, +}) + +function RouteComponent() { + const params = Route.useParams() + return ( +
+
+ Hello deeply nested baz/bar index +
+
+ {JSON.stringify(params())} +
+
+ ) +} diff --git a/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.route.tsx b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.route.tsx new file mode 100644 index 00000000000..3c3dd5f386e --- /dev/null +++ b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar.route.tsx @@ -0,0 +1,16 @@ +import { Outlet, createFileRoute } from '@tanstack/solid-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar')({ + component: RouteComponent, +}) + +function RouteComponent() { + return ( +
+
+ Hello deeply nested baz/bar route layout +
+ +
+ ) +} diff --git a/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar_.qux.tsx b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar_.qux.tsx new file mode 100644 index 00000000000..d172a31e5ef --- /dev/null +++ b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/$baz_.bar_.qux.tsx @@ -0,0 +1,19 @@ +import { createFileRoute } from '@tanstack/solid-router' + +export const Route = createFileRoute('/non-nested/deep/$baz_/bar_/qux')({ + component: RouteComponent, +}) + +function RouteComponent() { + const params = Route.useParams() + return ( +
+
+ Hello deeply nested baz/bar/qux +
+
+ {JSON.stringify(params())} +
+
+ ) +} diff --git a/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/route.tsx b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/route.tsx new file mode 100644 index 00000000000..164236388ce --- /dev/null +++ b/e2e/solid-router/basic-file-based/src/routes/non-nested/deep/route.tsx @@ -0,0 +1,58 @@ +import { Link, Outlet, createFileRoute } from '@tanstack/solid-router' + +export const Route = createFileRoute('/non-nested/deep')({ + component: RouteComponent, +}) + +function RouteComponent() { + return ( +
+
+ Hello non-nested deep layout +
+
+ + To Baz + + + To named baz/bar + + + To named baz/bar/foo + + + To named baz/bar/foo/qux + + + To named baz/bar/qux + +
+ +
+ ) +} diff --git a/e2e/solid-router/basic-file-based/tests/non-nested-paths.spec.ts b/e2e/solid-router/basic-file-based/tests/non-nested-paths.spec.ts index 9682eb84885..8c0e0e1a1ec 100644 --- a/e2e/solid-router/basic-file-based/tests/non-nested-paths.spec.ts +++ b/e2e/solid-router/basic-file-based/tests/non-nested-paths.spec.ts @@ -197,3 +197,170 @@ test.describe('Non-nested paths', () => { }, ) }) + +test.describe('Deeply nested non-nested paths', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/non-nested/deep') + await page.waitForURL('/non-nested/deep') + }) + + test('It should nest nested paths 1 level deep', async ({ page }) => { + const rootRouteHeading = page.getByTestId( + `non-nested-deep-root-route-heading`, + ) + + await expect(rootRouteHeading).toBeVisible() + + const bazLink = page.getByTestId('to-deep-baz') + await bazLink.click() + await page.waitForURL('/non-nested/deep/baz') + const bazRouteHeading = page.getByTestId( + 'non-nested-deep-baz-route-heading', + ) + const bazIndexHeading = page.getByTestId( + 'non-nested-deep-baz-index-heading', + ) + const bazIndexParams = page.getByTestId('non-nested-deep-baz-index-param') + + await expect(bazRouteHeading).toBeVisible() + await expect(bazIndexHeading).toBeVisible() + expect(await bazIndexParams.innerText()).toBe( + JSON.stringify({ baz: 'baz' }), + ) + }) + + test('It should not nest non-nested paths 1 level deep', async ({ page }) => { + const rootRouteHeading = page.getByTestId( + `non-nested-deep-root-route-heading`, + ) + + await expect(rootRouteHeading).toBeVisible() + const bazBarLink = page.getByTestId('to-deep-baz-bar') + + await bazBarLink.click() + await page.waitForURL('/non-nested/deep/baz-bar/bar') + const bazRouteHeading = page.getByTestId( + 'non-nested-deep-baz-route-heading', + ) + const bazBarRouteHeading = page.getByTestId( + 'non-nested-deep-baz-bar-route-heading', + ) + const bazBarIndexHeading = page.getByTestId( + 'non-nested-deep-baz-bar-index-heading', + ) + const bazBarIndexParams = page.getByTestId( + 'non-nested-deep-baz-bar-index-param', + ) + + await expect(bazRouteHeading).not.toBeVisible() + await expect(bazBarRouteHeading).toBeVisible() + await expect(bazBarIndexHeading).toBeVisible() + expect(await bazBarIndexParams.innerText()).toBe( + JSON.stringify({ baz: 'baz-bar' }), + ) + }) + + test('It should not nest non-nested paths 2 levels deep', async ({ + page, + }) => { + const rootRouteHeading = page.getByTestId( + `non-nested-deep-root-route-heading`, + ) + + await expect(rootRouteHeading).toBeVisible() + + const bazBarQuxLink = page.getByTestId('to-deep-baz-bar-qux') + await bazBarQuxLink.click() + + await page.waitForURL('/non-nested/deep/baz-bar-qux/bar/qux') + const bazRouteHeading = page.getByTestId( + 'non-nested-deep-baz-route-heading', + ) + const bazBarRouteHeading = page.getByTestId( + 'non-nested-deep-baz-bar-route-heading', + ) + const bazBarQuxHeading = page.getByTestId( + 'non-nested-deep-baz-bar-qux-heading', + ) + const bazBarQuxParams = page.getByTestId( + 'non-nested-deep-baz-bar-qux-param', + ) + + await expect(bazRouteHeading).not.toBeVisible() + await expect(bazBarRouteHeading).not.toBeVisible() + await expect(bazBarQuxHeading).toBeVisible() + await expect(bazBarQuxParams).toBeVisible() + expect(await bazBarQuxParams.innerText()).toBe( + JSON.stringify({ baz: 'baz-bar-qux' }), + ) + }) + + test('It should nest and un-nest non-nested across paths multiple levels deep', async ({ + page, + }) => { + const rootRouteHeading = page.getByTestId( + `non-nested-deep-root-route-heading`, + ) + + await expect(rootRouteHeading).toBeVisible() + + const bazBarFooLink = page.getByTestId('to-deep-baz-bar-foo') + await bazBarFooLink.click() + + await page.waitForURL('/non-nested/deep/baz-bar/bar/foo') + + const bazRouteHeading = page.getByTestId( + 'non-nested-deep-baz-route-heading', + ) + const bazBarRouteHeading = page.getByTestId( + 'non-nested-deep-baz-bar-route-heading', + ) + const bazBarFooRouteHeading = page.getByTestId( + 'non-nested-deep-baz-bar-foo-route-heading', + ) + const bazBarFooIndexHeading = page.getByTestId( + 'non-nested-deep-baz-bar-foo-index-heading', + ) + const bazBarFooIndexParams = page.getByTestId( + 'non-nested-deep-baz-bar-foo-index-param', + ) + + await expect(bazRouteHeading).not.toBeVisible() + await expect(bazBarRouteHeading).toBeVisible() + await expect(bazBarFooRouteHeading).toBeVisible() + await expect(bazBarFooIndexHeading).toBeVisible() + await expect(bazBarFooIndexParams).toBeVisible() + expect(await bazBarFooIndexParams.innerText()).toBe( + JSON.stringify({ baz: 'baz-bar', foo: 'foo' }), + ) + + const bazBarFooQuxLink = page.getByTestId('to-deep-baz-bar-foo-qux') + await bazBarFooQuxLink.click() + await page.waitForURL('/non-nested/deep/baz-bar-qux/bar/foo/qux') + + const bazBarFooQuxHeading = page.getByTestId( + 'non-nested-deep-baz-bar-foo-qux-heading', + ) + const bazBarFooQuxParams = page.getByTestId( + 'non-nested-deep-baz-bar-foo-qux-param', + ) + + await expect(bazRouteHeading).not.toBeVisible() + await expect(bazBarRouteHeading).toBeVisible() + await expect(bazBarFooRouteHeading).not.toBeVisible() + await expect(bazBarFooQuxHeading).toBeVisible() + await expect(bazBarFooQuxParams).toBeVisible() + + if (useExperimentalNonNestedRoutes) { + expect(await bazBarFooQuxParams.innerText()).toBe( + JSON.stringify({ baz: 'baz-bar-qux', foo: 'foo' }), + ) + } else { + // this is a bug with named path params and non-nested paths + // that is resolved in the new experimental flag + expect(await bazBarFooQuxParams.innerText()).toBe( + JSON.stringify({ baz: 'baz-bar', foo: 'foo' }), + ) + } + }) +}) diff --git a/packages/router-generator/src/filesystem/physical/getRouteNodes.ts b/packages/router-generator/src/filesystem/physical/getRouteNodes.ts index 949c93302e1..892e0095347 100644 --- a/packages/router-generator/src/filesystem/physical/getRouteNodes.ts +++ b/packages/router-generator/src/filesystem/physical/getRouteNodes.ts @@ -134,14 +134,19 @@ export async function getRouteNodes( const filePathNoExt = removeExt(filePath) const { routePath: initialRoutePath, - originalRoutePath, + originalRoutePath: initialOriginalRoutePath, isExperimentalNonNestedRoute, } = determineInitialRoutePath(filePathNoExt, config) let routePath = initialRoutePath + let originalRoutePath = initialOriginalRoutePath if (routeFilePrefix) { routePath = routePath.replaceAll(routeFilePrefix, '') + originalRoutePath = originalRoutePath.replaceAll( + routeFilePrefix, + '', + ) } if (disallowedRouteGroupConfiguration.test(dirent.name)) { @@ -156,6 +161,7 @@ export async function getRouteNodes( if (routeType === 'lazy') { routePath = routePath.replace(/\/lazy$/, '') + originalRoutePath = originalRoutePath.replace(/\/lazy$/, '') } // this check needs to happen after the lazy route has been cleaned up @@ -186,13 +192,30 @@ export async function getRouteNodes( '', ) + originalRoutePath = originalRoutePath.replace( + new RegExp( + `/(component|errorComponent|pendingComponent|loader|${config.routeToken}|lazy)$`, + ), + '', + ) + if (routePath === config.indexToken) { routePath = '/' } + if (originalRoutePath === config.indexToken) { + originalRoutePath = '/' + } + routePath = routePath.replace(new RegExp(`/${config.indexToken}$`), '/') || '/' + originalRoutePath = + originalRoutePath.replace( + new RegExp(`/${config.indexToken}$`), + '/', + ) || '/' + routeNodes.push({ filePath, fullPath, diff --git a/packages/router-generator/src/utils.ts b/packages/router-generator/src/utils.ts index 455941ec463..5f497c85440 100644 --- a/packages/router-generator/src/utils.ts +++ b/packages/router-generator/src/utils.ts @@ -365,7 +365,7 @@ export function hasParentRoute( routes: Array, node: RouteNode, routePathToCheck: string | undefined, - originalRoutePathToCheck?: string, + originalRoutePathToCheck: string | undefined, ): RouteNode | null { const getNonNestedSegments = (routePath: string) => { const regex = /_(?=\/|$)/g @@ -394,24 +394,24 @@ export function hasParentRoute( ? [] : [...sortedNodes] - if (node._isExperimentalNonNestedRoute) { - const nonNestedSegments = getNonNestedSegments( - originalRoutePathToCheck ?? '', - ) + if (node._isExperimentalNonNestedRoute && originalRoutePathToCheck) { + const nonNestedSegments = getNonNestedSegments(originalRoutePathToCheck) for (const route of sortedNodes) { if (route.routePath === '/') continue if ( - routePathToCheck.startsWith(`${route.routePath}/`) && route._isExperimentalNonNestedRoute && - route.routePath !== routePathToCheck + route.routePath !== routePathToCheck && + originalRoutePathToCheck.startsWith(`${route.originalRoutePath}/`) ) { return route } if ( - nonNestedSegments.find((seg) => seg === `${route.routePath}_`) || + nonNestedSegments.find( + (seg) => seg === `${route.originalRoutePath}_`, + ) || !( route._fsRouteType === 'pathless_layout' || route._fsRouteType === 'layout' || diff --git a/packages/router-generator/tests/generator/flat/routeTree.nonnested.snapshot.ts b/packages/router-generator/tests/generator/flat/routeTree.nonnested.snapshot.ts index e908079785d..880dddeaf80 100644 --- a/packages/router-generator/tests/generator/flat/routeTree.nonnested.snapshot.ts +++ b/packages/router-generator/tests/generator/flat/routeTree.nonnested.snapshot.ts @@ -15,9 +15,13 @@ import { Route as IndexRouteImport } from './routes/index' import { Route as PostsIndexRouteImport } from './routes/posts.index' import { Route as BlogIndexRouteImport } from './routes/blog.index' import { Route as BlogStatsRouteImport } from './routes/blog_.stats' +import { Route as BlogBlogIdRouteRouteImport } from './routes/blog_.$blogId.route' import { Route as PostsPostIdIndexRouteImport } from './routes/posts.$postId.index' import { Route as BlogSlugIndexRouteImport } from './routes/blog.$slug.index' import { Route as PostsPostIdDeepRouteImport } from './routes/posts.$postId.deep' +import { Route as BlogBlogIdEditRouteImport } from './routes/blog_.$blogId_.edit' +import { Route as BlogBlogIdSlugRouteRouteImport } from './routes/blog_.$blogId.$slug.route' +import { Route as BlogBlogIdSlugBarRouteImport } from './routes/blog_.$blogId.$slug_.bar' const PostsRouteRoute = PostsRouteRouteImport.update({ id: '/posts', @@ -49,6 +53,11 @@ const BlogStatsRoute = BlogStatsRouteImport.update({ path: '/blog/stats', getParentRoute: () => rootRouteImport, } as any) +const BlogBlogIdRouteRoute = BlogBlogIdRouteRouteImport.update({ + id: '/blog/$blogId', + path: '/blog/$blogId', + getParentRoute: () => rootRouteImport, +} as any) const PostsPostIdIndexRoute = PostsPostIdIndexRouteImport.update({ id: '/$postId/', path: '/$postId/', @@ -64,38 +73,65 @@ const PostsPostIdDeepRoute = PostsPostIdDeepRouteImport.update({ path: '/$postId/deep', getParentRoute: () => PostsRouteRoute, } as any) +const BlogBlogIdEditRoute = BlogBlogIdEditRouteImport.update({ + id: '/blog/$blogId/edit', + path: '/blog/$blogId/edit', + getParentRoute: () => rootRouteImport, +} as any) +const BlogBlogIdSlugRouteRoute = BlogBlogIdSlugRouteRouteImport.update({ + id: '/$slug', + path: '/$slug', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) +const BlogBlogIdSlugBarRoute = BlogBlogIdSlugBarRouteImport.update({ + id: '/$slug/bar', + path: '/$slug/bar', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/blog/$slug': typeof BlogSlugIndexRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesByTo { '/': typeof IndexRoute + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/stats': typeof BlogStatsRoute '/blog': typeof BlogIndexRoute '/posts': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/blog/$slug': typeof BlogSlugIndexRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/blog/$slug/': typeof BlogSlugIndexRoute '/posts/$postId/': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath @@ -103,39 +139,53 @@ export interface FileRouteTypes { | '/' | '/blog' | '/posts' + | '/blog/$blogId' | '/blog/stats' | '/blog/' | '/posts/' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/blog/$slug' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' fileRoutesByTo: FileRoutesByTo to: | '/' + | '/blog/$blogId' | '/blog/stats' | '/blog' | '/posts' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/blog/$slug' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' id: | '__root__' | '/' | '/blog' | '/posts' + | '/blog/$blogId' | '/blog/stats' | '/blog/' | '/posts/' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/blog/$slug/' | '/posts/$postId/' + | '/blog/$blogId/$slug/bar' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute BlogRouteRoute: typeof BlogRouteRouteWithChildren PostsRouteRoute: typeof PostsRouteRouteWithChildren + BlogBlogIdRouteRoute: typeof BlogBlogIdRouteRouteWithChildren BlogStatsRoute: typeof BlogStatsRoute + BlogBlogIdEditRoute: typeof BlogBlogIdEditRoute } declare module '@tanstack/react-router' { @@ -182,6 +232,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof BlogStatsRouteImport parentRoute: typeof rootRouteImport } + '/blog/$blogId': { + id: '/blog/$blogId' + path: '/blog/$blogId' + fullPath: '/blog/$blogId' + preLoaderRoute: typeof BlogBlogIdRouteRouteImport + parentRoute: typeof rootRouteImport + } '/posts/$postId/': { id: '/posts/$postId/' path: '/$postId' @@ -203,6 +260,27 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof PostsPostIdDeepRouteImport parentRoute: typeof PostsRouteRoute } + '/blog/$blogId/edit': { + id: '/blog/$blogId/edit' + path: '/blog/$blogId/edit' + fullPath: '/blog/$blogId/edit' + preLoaderRoute: typeof BlogBlogIdEditRouteImport + parentRoute: typeof rootRouteImport + } + '/blog/$blogId/$slug': { + id: '/blog/$blogId/$slug' + path: '/$slug' + fullPath: '/blog/$blogId/$slug' + preLoaderRoute: typeof BlogBlogIdSlugRouteRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } + '/blog/$blogId/$slug/bar': { + id: '/blog/$blogId/$slug/bar' + path: '/$slug/bar' + fullPath: '/blog/$blogId/$slug/bar' + preLoaderRoute: typeof BlogBlogIdSlugBarRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } } } @@ -236,11 +314,27 @@ const PostsRouteRouteWithChildren = PostsRouteRoute._addFileChildren( PostsRouteRouteChildren, ) +interface BlogBlogIdRouteRouteChildren { + BlogBlogIdSlugRouteRoute: typeof BlogBlogIdSlugRouteRoute + BlogBlogIdSlugBarRoute: typeof BlogBlogIdSlugBarRoute +} + +const BlogBlogIdRouteRouteChildren: BlogBlogIdRouteRouteChildren = { + BlogBlogIdSlugRouteRoute: BlogBlogIdSlugRouteRoute, + BlogBlogIdSlugBarRoute: BlogBlogIdSlugBarRoute, +} + +const BlogBlogIdRouteRouteWithChildren = BlogBlogIdRouteRoute._addFileChildren( + BlogBlogIdRouteRouteChildren, +) + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, BlogRouteRoute: BlogRouteRouteWithChildren, PostsRouteRoute: PostsRouteRouteWithChildren, + BlogBlogIdRouteRoute: BlogBlogIdRouteRouteWithChildren, BlogStatsRoute: BlogStatsRoute, + BlogBlogIdEditRoute: BlogBlogIdEditRoute, } export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/packages/router-generator/tests/generator/flat/routeTree.snapshot.ts b/packages/router-generator/tests/generator/flat/routeTree.snapshot.ts index e0c0365aa56..abfa5604c96 100644 --- a/packages/router-generator/tests/generator/flat/routeTree.snapshot.ts +++ b/packages/router-generator/tests/generator/flat/routeTree.snapshot.ts @@ -15,9 +15,13 @@ import { Route as IndexRouteImport } from './routes/index' import { Route as PostsIndexRouteImport } from './routes/posts.index' import { Route as BlogIndexRouteImport } from './routes/blog.index' import { Route as BlogStatsRouteImport } from './routes/blog_.stats' +import { Route as BlogBlogIdRouteRouteImport } from './routes/blog_.$blogId.route' import { Route as PostsPostIdIndexRouteImport } from './routes/posts.$postId.index' import { Route as BlogSlugIndexRouteImport } from './routes/blog.$slug.index' import { Route as PostsPostIdDeepRouteImport } from './routes/posts.$postId.deep' +import { Route as BlogBlogIdEditRouteImport } from './routes/blog_.$blogId_.edit' +import { Route as BlogBlogIdSlugRouteRouteImport } from './routes/blog_.$blogId.$slug.route' +import { Route as BlogBlogIdSlugBarRouteImport } from './routes/blog_.$blogId.$slug_.bar' const PostsRouteRoute = PostsRouteRouteImport.update({ id: '/posts', @@ -49,6 +53,11 @@ const BlogStatsRoute = BlogStatsRouteImport.update({ path: '/blog/stats', getParentRoute: () => rootRouteImport, } as any) +const BlogBlogIdRouteRoute = BlogBlogIdRouteRouteImport.update({ + id: '/blog_/$blogId', + path: '/blog/$blogId', + getParentRoute: () => rootRouteImport, +} as any) const PostsPostIdIndexRoute = PostsPostIdIndexRouteImport.update({ id: '/$postId/', path: '/$postId/', @@ -64,38 +73,65 @@ const PostsPostIdDeepRoute = PostsPostIdDeepRouteImport.update({ path: '/$postId/deep', getParentRoute: () => PostsRouteRoute, } as any) +const BlogBlogIdEditRoute = BlogBlogIdEditRouteImport.update({ + id: '/blog_/$blogId_/edit', + path: '/blog/$blogId/edit', + getParentRoute: () => rootRouteImport, +} as any) +const BlogBlogIdSlugRouteRoute = BlogBlogIdSlugRouteRouteImport.update({ + id: '/$slug', + path: '/$slug', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) +const BlogBlogIdSlugBarRoute = BlogBlogIdSlugBarRouteImport.update({ + id: '/$slug_/bar', + path: '/$slug/bar', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/blog/$slug': typeof BlogSlugIndexRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesByTo { '/': typeof IndexRoute + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/stats': typeof BlogStatsRoute '/blog': typeof BlogIndexRoute '/posts': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/blog/$slug': typeof BlogSlugIndexRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog_/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog_/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog_/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog_/$blogId_/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/blog/$slug/': typeof BlogSlugIndexRoute '/posts/$postId/': typeof PostsPostIdIndexRoute + '/blog_/$blogId/$slug_/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath @@ -103,39 +139,53 @@ export interface FileRouteTypes { | '/' | '/blog' | '/posts' + | '/blog/$blogId' | '/blog/stats' | '/blog/' | '/posts/' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/blog/$slug' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' fileRoutesByTo: FileRoutesByTo to: | '/' + | '/blog/$blogId' | '/blog/stats' | '/blog' | '/posts' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/blog/$slug' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' id: | '__root__' | '/' | '/blog' | '/posts' + | '/blog_/$blogId' | '/blog_/stats' | '/blog/' | '/posts/' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId_/edit' | '/posts/$postId/deep' | '/blog/$slug/' | '/posts/$postId/' + | '/blog_/$blogId/$slug_/bar' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute BlogRouteRoute: typeof BlogRouteRouteWithChildren PostsRouteRoute: typeof PostsRouteRouteWithChildren + BlogBlogIdRouteRoute: typeof BlogBlogIdRouteRouteWithChildren BlogStatsRoute: typeof BlogStatsRoute + BlogBlogIdEditRoute: typeof BlogBlogIdEditRoute } declare module '@tanstack/react-router' { @@ -182,6 +232,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof BlogStatsRouteImport parentRoute: typeof rootRouteImport } + '/blog_/$blogId': { + id: '/blog_/$blogId' + path: '/blog/$blogId' + fullPath: '/blog/$blogId' + preLoaderRoute: typeof BlogBlogIdRouteRouteImport + parentRoute: typeof rootRouteImport + } '/posts/$postId/': { id: '/posts/$postId/' path: '/$postId' @@ -203,6 +260,27 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof PostsPostIdDeepRouteImport parentRoute: typeof PostsRouteRoute } + '/blog_/$blogId_/edit': { + id: '/blog_/$blogId_/edit' + path: '/blog/$blogId/edit' + fullPath: '/blog/$blogId/edit' + preLoaderRoute: typeof BlogBlogIdEditRouteImport + parentRoute: typeof rootRouteImport + } + '/blog_/$blogId/$slug': { + id: '/blog_/$blogId/$slug' + path: '/$slug' + fullPath: '/blog/$blogId/$slug' + preLoaderRoute: typeof BlogBlogIdSlugRouteRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } + '/blog_/$blogId/$slug_/bar': { + id: '/blog_/$blogId/$slug_/bar' + path: '/$slug/bar' + fullPath: '/blog/$blogId/$slug/bar' + preLoaderRoute: typeof BlogBlogIdSlugBarRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } } } @@ -236,11 +314,27 @@ const PostsRouteRouteWithChildren = PostsRouteRoute._addFileChildren( PostsRouteRouteChildren, ) +interface BlogBlogIdRouteRouteChildren { + BlogBlogIdSlugRouteRoute: typeof BlogBlogIdSlugRouteRoute + BlogBlogIdSlugBarRoute: typeof BlogBlogIdSlugBarRoute +} + +const BlogBlogIdRouteRouteChildren: BlogBlogIdRouteRouteChildren = { + BlogBlogIdSlugRouteRoute: BlogBlogIdSlugRouteRoute, + BlogBlogIdSlugBarRoute: BlogBlogIdSlugBarRoute, +} + +const BlogBlogIdRouteRouteWithChildren = BlogBlogIdRouteRoute._addFileChildren( + BlogBlogIdRouteRouteChildren, +) + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, BlogRouteRoute: BlogRouteRouteWithChildren, PostsRouteRoute: PostsRouteRouteWithChildren, + BlogBlogIdRouteRoute: BlogBlogIdRouteRouteWithChildren, BlogStatsRoute: BlogStatsRoute, + BlogBlogIdEditRoute: BlogBlogIdEditRoute, } export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/packages/router-generator/tests/generator/flat/routes/blog_.$blogId.$slug.route.tsx b/packages/router-generator/tests/generator/flat/routes/blog_.$blogId.$slug.route.tsx new file mode 100644 index 00000000000..b8f5b794a45 --- /dev/null +++ b/packages/router-generator/tests/generator/flat/routes/blog_.$blogId.$slug.route.tsx @@ -0,0 +1,3 @@ +import { createFileRoute } from '@tanstack/react-router' +// @ts-nocheck +export const Route = createFileRoute('/blog_/$blogId/$slug')() diff --git a/packages/router-generator/tests/generator/flat/routes/blog_.$blogId.$slug_.bar.tsx b/packages/router-generator/tests/generator/flat/routes/blog_.$blogId.$slug_.bar.tsx new file mode 100644 index 00000000000..7006a4d7f60 --- /dev/null +++ b/packages/router-generator/tests/generator/flat/routes/blog_.$blogId.$slug_.bar.tsx @@ -0,0 +1,3 @@ +import { createFileRoute } from '@tanstack/react-router' +// @ts-nocheck +export const Route = createFileRoute('/blog_/$blogId/$slug_/bar')() diff --git a/packages/router-generator/tests/generator/flat/routes/blog_.$blogId.route.tsx b/packages/router-generator/tests/generator/flat/routes/blog_.$blogId.route.tsx new file mode 100644 index 00000000000..408ad5d3a0c --- /dev/null +++ b/packages/router-generator/tests/generator/flat/routes/blog_.$blogId.route.tsx @@ -0,0 +1,3 @@ +import { createFileRoute } from '@tanstack/react-router' +// @ts-nocheck +export const Route = createFileRoute('/blog_/$blogId')() diff --git a/packages/router-generator/tests/generator/flat/routes/blog_.$blogId_.edit.tsx b/packages/router-generator/tests/generator/flat/routes/blog_.$blogId_.edit.tsx new file mode 100644 index 00000000000..922613bfca7 --- /dev/null +++ b/packages/router-generator/tests/generator/flat/routes/blog_.$blogId_.edit.tsx @@ -0,0 +1,3 @@ +import { createFileRoute } from '@tanstack/react-router' +// @ts-nocheck +export const Route = createFileRoute('/blog_/$blogId_/edit')() diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routeTree.nonnested.snapshot.ts b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routeTree.nonnested.snapshot.ts index fa3545870a9..6d0d5ac00ba 100644 --- a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routeTree.nonnested.snapshot.ts +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routeTree.nonnested.snapshot.ts @@ -18,8 +18,12 @@ import { Route as PostsIndexRouteImport } from './routes/posts/index' import { Route as BlogIndexRouteImport } from './routes/blog/index' import { Route as BlogStatsRouteImport } from './routes/blog_/stats' import { Route as BlogSlugRouteImport } from './routes/blog/$slug' +import { Route as BlogBlogIdRouteRouteImport } from './routes/blog_/$blogId/route' import { Route as PostsPostIdIndexRouteImport } from './routes/posts/$postId/index' import { Route as PostsPostIdDeepRouteImport } from './routes/posts/$postId/deep' +import { Route as BlogBlogIdEditRouteImport } from './routes/blog_/$blogId_/edit' +import { Route as BlogBlogIdSlugRouteRouteImport } from './routes/blog_/$blogId/$slug/route' +import { Route as BlogBlogIdSlugBarRouteImport } from './routes/blog_/$blogId/$slug_/bar' const PostsRouteRoute = PostsRouteRouteImport.update({ id: '/posts', @@ -56,6 +60,11 @@ const BlogSlugRoute = BlogSlugRouteImport.update({ path: '/$slug', getParentRoute: () => BlogRouteRoute, } as any) +const BlogBlogIdRouteRoute = BlogBlogIdRouteRouteImport.update({ + id: '/blog/$blogId', + path: '/blog/$blogId', + getParentRoute: () => rootRouteImport, +} as any) const PostsPostIdIndexRoute = PostsPostIdIndexRouteImport.update({ id: '/$postId/', path: '/$postId/', @@ -66,38 +75,65 @@ const PostsPostIdDeepRoute = PostsPostIdDeepRouteImport.update({ path: '/$postId/deep', getParentRoute: () => PostsRouteRoute, } as any) +const BlogBlogIdEditRoute = BlogBlogIdEditRouteImport.update({ + id: '/blog/$blogId/edit', + path: '/blog/$blogId/edit', + getParentRoute: () => rootRouteImport, +} as any) +const BlogBlogIdSlugRouteRoute = BlogBlogIdSlugRouteRouteImport.update({ + id: '/$slug', + path: '/$slug', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) +const BlogBlogIdSlugBarRoute = BlogBlogIdSlugBarRouteImport.update({ + id: '/$slug/bar', + path: '/$slug/bar', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesByTo { '/': typeof IndexRoute + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog/stats': typeof BlogStatsRoute '/blog': typeof BlogIndexRoute '/posts': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId/': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath @@ -105,39 +141,53 @@ export interface FileRouteTypes { | '/' | '/blog' | '/posts' + | '/blog/$blogId' | '/blog/$slug' | '/blog/stats' | '/blog/' | '/posts/' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' fileRoutesByTo: FileRoutesByTo to: | '/' + | '/blog/$blogId' | '/blog/$slug' | '/blog/stats' | '/blog' | '/posts' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' id: | '__root__' | '/' | '/blog' | '/posts' + | '/blog/$blogId' | '/blog/$slug' | '/blog/stats' | '/blog/' | '/posts/' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/posts/$postId/' + | '/blog/$blogId/$slug/bar' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute BlogRouteRoute: typeof BlogRouteRouteWithChildren PostsRouteRoute: typeof PostsRouteRouteWithChildren + BlogBlogIdRouteRoute: typeof BlogBlogIdRouteRouteWithChildren BlogStatsRoute: typeof BlogStatsRoute + BlogBlogIdEditRoute: typeof BlogBlogIdEditRoute } declare module '@tanstack/react-router' { @@ -191,6 +241,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof BlogSlugRouteImport parentRoute: typeof BlogRouteRoute } + '/blog/$blogId': { + id: '/blog/$blogId' + path: '/blog/$blogId' + fullPath: '/blog/$blogId' + preLoaderRoute: typeof BlogBlogIdRouteRouteImport + parentRoute: typeof rootRouteImport + } '/posts/$postId/': { id: '/posts/$postId/' path: '/$postId' @@ -205,6 +262,27 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof PostsPostIdDeepRouteImport parentRoute: typeof PostsRouteRoute } + '/blog/$blogId/edit': { + id: '/blog/$blogId/edit' + path: '/blog/$blogId/edit' + fullPath: '/blog/$blogId/edit' + preLoaderRoute: typeof BlogBlogIdEditRouteImport + parentRoute: typeof rootRouteImport + } + '/blog/$blogId/$slug': { + id: '/blog/$blogId/$slug' + path: '/$slug' + fullPath: '/blog/$blogId/$slug' + preLoaderRoute: typeof BlogBlogIdSlugRouteRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } + '/blog/$blogId/$slug/bar': { + id: '/blog/$blogId/$slug/bar' + path: '/$slug/bar' + fullPath: '/blog/$blogId/$slug/bar' + preLoaderRoute: typeof BlogBlogIdSlugBarRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } } } @@ -235,6 +313,15 @@ declare module './routes/posts/route' { FileRoutesByPath['/posts']['fullPath'] > } +declare module './routes/blog_/$blogId/route' { + const createFileRoute: CreateFileRoute< + '/blog/$blogId', + FileRoutesByPath['/blog/$blogId']['parentRoute'], + FileRoutesByPath['/blog/$blogId']['id'], + FileRoutesByPath['/blog/$blogId']['path'], + FileRoutesByPath['/blog/$blogId']['fullPath'] + > +} declare module './routes/blog/$slug' { const createFileRoute: CreateFileRoute< '/blog/$slug', @@ -271,6 +358,24 @@ declare module './routes/posts/index' { FileRoutesByPath['/posts/']['fullPath'] > } +declare module './routes/blog_/$blogId/$slug/route' { + const createFileRoute: CreateFileRoute< + '/blog/$blogId/$slug', + FileRoutesByPath['/blog/$blogId/$slug']['parentRoute'], + FileRoutesByPath['/blog/$blogId/$slug']['id'], + FileRoutesByPath['/blog/$blogId/$slug']['path'], + FileRoutesByPath['/blog/$blogId/$slug']['fullPath'] + > +} +declare module './routes/blog_/$blogId_/edit' { + const createFileRoute: CreateFileRoute< + '/blog/$blogId/edit', + FileRoutesByPath['/blog/$blogId/edit']['parentRoute'], + FileRoutesByPath['/blog/$blogId/edit']['id'], + FileRoutesByPath['/blog/$blogId/edit']['path'], + FileRoutesByPath['/blog/$blogId/edit']['fullPath'] + > +} declare module './routes/posts/$postId/deep' { const createFileRoute: CreateFileRoute< '/posts/$postId/deep', @@ -289,6 +394,15 @@ declare module './routes/posts/$postId/index' { FileRoutesByPath['/posts/$postId/']['fullPath'] > } +declare module './routes/blog_/$blogId/$slug_/bar' { + const createFileRoute: CreateFileRoute< + '/blog/$blogId/$slug/bar', + FileRoutesByPath['/blog/$blogId/$slug/bar']['parentRoute'], + FileRoutesByPath['/blog/$blogId/$slug/bar']['id'], + FileRoutesByPath['/blog/$blogId/$slug/bar']['path'], + FileRoutesByPath['/blog/$blogId/$slug/bar']['fullPath'] + > +} interface BlogRouteRouteChildren { BlogSlugRoute: typeof BlogSlugRoute @@ -320,11 +434,27 @@ const PostsRouteRouteWithChildren = PostsRouteRoute._addFileChildren( PostsRouteRouteChildren, ) +interface BlogBlogIdRouteRouteChildren { + BlogBlogIdSlugRouteRoute: typeof BlogBlogIdSlugRouteRoute + BlogBlogIdSlugBarRoute: typeof BlogBlogIdSlugBarRoute +} + +const BlogBlogIdRouteRouteChildren: BlogBlogIdRouteRouteChildren = { + BlogBlogIdSlugRouteRoute: BlogBlogIdSlugRouteRoute, + BlogBlogIdSlugBarRoute: BlogBlogIdSlugBarRoute, +} + +const BlogBlogIdRouteRouteWithChildren = BlogBlogIdRouteRoute._addFileChildren( + BlogBlogIdRouteRouteChildren, +) + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, BlogRouteRoute: BlogRouteRouteWithChildren, PostsRouteRoute: PostsRouteRouteWithChildren, + BlogBlogIdRouteRoute: BlogBlogIdRouteRouteWithChildren, BlogStatsRoute: BlogStatsRoute, + BlogBlogIdEditRoute: BlogBlogIdEditRoute, } export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routeTree.snapshot.ts b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routeTree.snapshot.ts index cfd2094de3d..b7094626b90 100644 --- a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routeTree.snapshot.ts +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routeTree.snapshot.ts @@ -18,8 +18,12 @@ import { Route as PostsIndexRouteImport } from './routes/posts/index' import { Route as BlogIndexRouteImport } from './routes/blog/index' import { Route as BlogStatsRouteImport } from './routes/blog_/stats' import { Route as BlogSlugRouteImport } from './routes/blog/$slug' +import { Route as BlogBlogIdRouteRouteImport } from './routes/blog_/$blogId/route' import { Route as PostsPostIdIndexRouteImport } from './routes/posts/$postId/index' import { Route as PostsPostIdDeepRouteImport } from './routes/posts/$postId/deep' +import { Route as BlogBlogIdEditRouteImport } from './routes/blog_/$blogId_/edit' +import { Route as BlogBlogIdSlugRouteRouteImport } from './routes/blog_/$blogId/$slug/route' +import { Route as BlogBlogIdSlugBarRouteImport } from './routes/blog_/$blogId/$slug_/bar' const PostsRouteRoute = PostsRouteRouteImport.update({ id: '/posts', @@ -56,6 +60,11 @@ const BlogSlugRoute = BlogSlugRouteImport.update({ path: '/$slug', getParentRoute: () => BlogRouteRoute, } as any) +const BlogBlogIdRouteRoute = BlogBlogIdRouteRouteImport.update({ + id: '/blog_/$blogId', + path: '/blog/$blogId', + getParentRoute: () => rootRouteImport, +} as any) const PostsPostIdIndexRoute = PostsPostIdIndexRouteImport.update({ id: '/$postId/', path: '/$postId/', @@ -66,38 +75,65 @@ const PostsPostIdDeepRoute = PostsPostIdDeepRouteImport.update({ path: '/$postId/deep', getParentRoute: () => PostsRouteRoute, } as any) +const BlogBlogIdEditRoute = BlogBlogIdEditRouteImport.update({ + id: '/blog_/$blogId_/edit', + path: '/blog/$blogId/edit', + getParentRoute: () => rootRouteImport, +} as any) +const BlogBlogIdSlugRouteRoute = BlogBlogIdSlugRouteRouteImport.update({ + id: '/$slug', + path: '/$slug', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) +const BlogBlogIdSlugBarRoute = BlogBlogIdSlugBarRouteImport.update({ + id: '/$slug_/bar', + path: '/$slug/bar', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesByTo { '/': typeof IndexRoute + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog/stats': typeof BlogStatsRoute '/blog': typeof BlogIndexRoute '/posts': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog_/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog_/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog_/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog_/$blogId_/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId/': typeof PostsPostIdIndexRoute + '/blog_/$blogId/$slug_/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath @@ -105,39 +141,53 @@ export interface FileRouteTypes { | '/' | '/blog' | '/posts' + | '/blog/$blogId' | '/blog/$slug' | '/blog/stats' | '/blog/' | '/posts/' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' fileRoutesByTo: FileRoutesByTo to: | '/' + | '/blog/$blogId' | '/blog/$slug' | '/blog/stats' | '/blog' | '/posts' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' id: | '__root__' | '/' | '/blog' | '/posts' + | '/blog_/$blogId' | '/blog/$slug' | '/blog_/stats' | '/blog/' | '/posts/' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId_/edit' | '/posts/$postId/deep' | '/posts/$postId/' + | '/blog_/$blogId/$slug_/bar' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute BlogRouteRoute: typeof BlogRouteRouteWithChildren PostsRouteRoute: typeof PostsRouteRouteWithChildren + BlogBlogIdRouteRoute: typeof BlogBlogIdRouteRouteWithChildren BlogStatsRoute: typeof BlogStatsRoute + BlogBlogIdEditRoute: typeof BlogBlogIdEditRoute } declare module '@tanstack/react-router' { @@ -191,6 +241,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof BlogSlugRouteImport parentRoute: typeof BlogRouteRoute } + '/blog_/$blogId': { + id: '/blog_/$blogId' + path: '/blog/$blogId' + fullPath: '/blog/$blogId' + preLoaderRoute: typeof BlogBlogIdRouteRouteImport + parentRoute: typeof rootRouteImport + } '/posts/$postId/': { id: '/posts/$postId/' path: '/$postId' @@ -205,6 +262,27 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof PostsPostIdDeepRouteImport parentRoute: typeof PostsRouteRoute } + '/blog_/$blogId_/edit': { + id: '/blog_/$blogId_/edit' + path: '/blog/$blogId/edit' + fullPath: '/blog/$blogId/edit' + preLoaderRoute: typeof BlogBlogIdEditRouteImport + parentRoute: typeof rootRouteImport + } + '/blog_/$blogId/$slug': { + id: '/blog_/$blogId/$slug' + path: '/$slug' + fullPath: '/blog/$blogId/$slug' + preLoaderRoute: typeof BlogBlogIdSlugRouteRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } + '/blog_/$blogId/$slug_/bar': { + id: '/blog_/$blogId/$slug_/bar' + path: '/$slug/bar' + fullPath: '/blog/$blogId/$slug/bar' + preLoaderRoute: typeof BlogBlogIdSlugBarRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } } } @@ -235,6 +313,15 @@ declare module './routes/posts/route' { FileRoutesByPath['/posts']['fullPath'] > } +declare module './routes/blog_/$blogId/route' { + const createFileRoute: CreateFileRoute< + '/blog_/$blogId', + FileRoutesByPath['/blog_/$blogId']['parentRoute'], + FileRoutesByPath['/blog_/$blogId']['id'], + FileRoutesByPath['/blog_/$blogId']['path'], + FileRoutesByPath['/blog_/$blogId']['fullPath'] + > +} declare module './routes/blog/$slug' { const createFileRoute: CreateFileRoute< '/blog/$slug', @@ -271,6 +358,24 @@ declare module './routes/posts/index' { FileRoutesByPath['/posts/']['fullPath'] > } +declare module './routes/blog_/$blogId/$slug/route' { + const createFileRoute: CreateFileRoute< + '/blog_/$blogId/$slug', + FileRoutesByPath['/blog_/$blogId/$slug']['parentRoute'], + FileRoutesByPath['/blog_/$blogId/$slug']['id'], + FileRoutesByPath['/blog_/$blogId/$slug']['path'], + FileRoutesByPath['/blog_/$blogId/$slug']['fullPath'] + > +} +declare module './routes/blog_/$blogId_/edit' { + const createFileRoute: CreateFileRoute< + '/blog_/$blogId_/edit', + FileRoutesByPath['/blog_/$blogId_/edit']['parentRoute'], + FileRoutesByPath['/blog_/$blogId_/edit']['id'], + FileRoutesByPath['/blog_/$blogId_/edit']['path'], + FileRoutesByPath['/blog_/$blogId_/edit']['fullPath'] + > +} declare module './routes/posts/$postId/deep' { const createFileRoute: CreateFileRoute< '/posts/$postId/deep', @@ -289,6 +394,15 @@ declare module './routes/posts/$postId/index' { FileRoutesByPath['/posts/$postId/']['fullPath'] > } +declare module './routes/blog_/$blogId/$slug_/bar' { + const createFileRoute: CreateFileRoute< + '/blog_/$blogId/$slug_/bar', + FileRoutesByPath['/blog_/$blogId/$slug_/bar']['parentRoute'], + FileRoutesByPath['/blog_/$blogId/$slug_/bar']['id'], + FileRoutesByPath['/blog_/$blogId/$slug_/bar']['path'], + FileRoutesByPath['/blog_/$blogId/$slug_/bar']['fullPath'] + > +} interface BlogRouteRouteChildren { BlogSlugRoute: typeof BlogSlugRoute @@ -320,11 +434,27 @@ const PostsRouteRouteWithChildren = PostsRouteRoute._addFileChildren( PostsRouteRouteChildren, ) +interface BlogBlogIdRouteRouteChildren { + BlogBlogIdSlugRouteRoute: typeof BlogBlogIdSlugRouteRoute + BlogBlogIdSlugBarRoute: typeof BlogBlogIdSlugBarRoute +} + +const BlogBlogIdRouteRouteChildren: BlogBlogIdRouteRouteChildren = { + BlogBlogIdSlugRouteRoute: BlogBlogIdSlugRouteRoute, + BlogBlogIdSlugBarRoute: BlogBlogIdSlugBarRoute, +} + +const BlogBlogIdRouteRouteWithChildren = BlogBlogIdRouteRoute._addFileChildren( + BlogBlogIdRouteRouteChildren, +) + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, BlogRouteRoute: BlogRouteRouteWithChildren, PostsRouteRoute: PostsRouteRouteWithChildren, + BlogBlogIdRouteRoute: BlogBlogIdRouteRouteWithChildren, BlogStatsRoute: BlogStatsRoute, + BlogBlogIdEditRoute: BlogBlogIdEditRoute, } export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId/$slug/route.tsx b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId/$slug/route.tsx new file mode 100644 index 00000000000..3411fd0b37f --- /dev/null +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId/$slug/route.tsx @@ -0,0 +1,3 @@ +export const Route = createFileRoute({ + component: () =>
Hello /blog_/$blogId/$slug/route!
, +}) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId/$slug_/bar.tsx b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId/$slug_/bar.tsx new file mode 100644 index 00000000000..c39dd91dfeb --- /dev/null +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId/$slug_/bar.tsx @@ -0,0 +1,3 @@ +export const Route = createFileRoute({ + component: () =>
Hello /blog_/$blogId/$slug_/bar!
, +}) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId/route.tsx b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId/route.tsx new file mode 100644 index 00000000000..e1d6f6524fa --- /dev/null +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId/route.tsx @@ -0,0 +1,3 @@ +export const Route = createFileRoute({ + component: () =>
Hello /blog_/$blogId/route!
, +}) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId_/edit.tsx b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId_/edit.tsx new file mode 100644 index 00000000000..1337ddd18b0 --- /dev/null +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/routes/blog_/$blogId_/edit.tsx @@ -0,0 +1,3 @@ +export const Route = createFileRoute({ + component: () =>
Hello /blog_/$blogId_/edit!
, +}) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/tests.nonnested.test-d.ts b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/tests.nonnested.test-d.ts index 8a6b9948f97..4cf84c78ecf 100644 --- a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/tests.nonnested.test-d.ts +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/tests.nonnested.test-d.ts @@ -43,6 +43,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -57,6 +61,10 @@ test('when navigating to the root', () => { | '/' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -71,6 +79,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -85,12 +97,20 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' | '/posts/$postId' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -105,6 +125,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -149,6 +173,10 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -166,6 +194,10 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -177,9 +209,12 @@ test('when navigating a index route with search and params', () => { .toHaveProperty('to') .toEqualTypeOf< | '/' - | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -201,12 +236,20 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' | '/posts/$postId' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -221,6 +264,10 @@ test('when navigating a index route with search and params', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -327,6 +374,10 @@ test('when navigating from a index route with search and params', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -354,6 +405,10 @@ test('when using useNavigate', () => { | '..' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -370,6 +425,10 @@ test('when using redirect', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -387,9 +446,12 @@ test('when using useSearch from a route with no search', () => { | '/blog' | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -408,9 +470,12 @@ test('when using useSearch from a route with search', () => { | '/blog' | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -431,9 +496,12 @@ test('when using useLoaderData from a route with loaderData', () => { | '/blog' | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -454,9 +522,12 @@ test('when using useLoaderDeps from a route with loaderDeps', () => { | '/blog' | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -477,9 +548,12 @@ test('when using useMatch from a route', () => { | '/blog' | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -502,9 +576,12 @@ test('when using useParams from a route', () => { | '/blog' | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -525,9 +602,12 @@ test('when using useRouteContext from a route', () => { | '/blog' | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/tests.test-d.ts b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/tests.test-d.ts index a349a48c5e5..adfb3ae535e 100644 --- a/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/tests.test-d.ts +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-false/tests.test-d.ts @@ -1,7 +1,6 @@ import { - createRouter, Link, - MakeRouteMatch, + createRouter, redirect, useLoaderData, useLoaderDeps, @@ -11,8 +10,9 @@ import { useRouteContext, useSearch, } from '@tanstack/react-router' -import { test, expectTypeOf } from 'vitest' +import { expectTypeOf, test } from 'vitest' import { routeTree } from './routeTree.gen' +import type { MakeRouteMatch } from '@tanstack/react-router' const defaultRouter = createRouter({ routeTree, @@ -43,6 +43,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -57,6 +61,10 @@ test('when navigating to the root', () => { | '/' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -71,6 +79,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -85,12 +97,20 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' | '/posts/$postId' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -105,6 +125,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -149,6 +173,10 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -166,6 +194,10 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -177,9 +209,12 @@ test('when navigating a index route with search and params', () => { .toHaveProperty('to') .toEqualTypeOf< | '/' - | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -201,12 +236,20 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' | '/posts/$postId' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -221,6 +264,10 @@ test('when navigating a index route with search and params', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -327,6 +374,10 @@ test('when navigating from a index route with search and params', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -354,6 +405,10 @@ test('when using useNavigate', () => { | '..' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -370,6 +425,10 @@ test('when using redirect', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -388,8 +447,11 @@ test('when using useSearch from a route with no search', () => { | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -409,8 +471,11 @@ test('when using useSearch from a route with search', () => { | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -431,9 +496,12 @@ test('when using useLoaderData from a route with loaderData', () => { | '/blog' | '/blog/' | '/posts' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog/$slug' | '/blog_/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -455,8 +523,11 @@ test('when using useLoaderDeps from a route with loaderDeps', () => { | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -478,8 +549,11 @@ test('when using useMatch from a route', () => { | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -503,8 +577,11 @@ test('when using useParams from a route', () => { | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' @@ -526,8 +603,11 @@ test('when using useRouteContext from a route', () => { | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' - | '/blog/' | '/posts/' | '/posts/$postId/deep' | '/posts/$postId/' diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routeTree.nonnested.snapshot.ts b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routeTree.nonnested.snapshot.ts index a7f314ecc87..5760ba59b43 100644 --- a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routeTree.nonnested.snapshot.ts +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routeTree.nonnested.snapshot.ts @@ -16,8 +16,12 @@ import { Route as PostsIndexRouteImport } from './routes/posts/index' import { Route as BlogIndexRouteImport } from './routes/blog/index' import { Route as BlogStatsRouteImport } from './routes/blog_/stats' import { Route as BlogSlugRouteImport } from './routes/blog/$slug' +import { Route as BlogBlogIdRouteRouteImport } from './routes/blog_/$blogId/route' import { Route as PostsPostIdIndexRouteImport } from './routes/posts/$postId/index' import { Route as PostsPostIdDeepRouteImport } from './routes/posts/$postId/deep' +import { Route as BlogBlogIdEditRouteImport } from './routes/blog_/$blogId_/edit' +import { Route as BlogBlogIdSlugRouteRouteImport } from './routes/blog_/$blogId/$slug/route' +import { Route as BlogBlogIdSlugBarRouteImport } from './routes/blog_/$blogId/$slug_/bar' const PostsRouteRoute = PostsRouteRouteImport.update({ id: '/posts', @@ -54,6 +58,11 @@ const BlogSlugRoute = BlogSlugRouteImport.update({ path: '/$slug', getParentRoute: () => BlogRouteRoute, } as any) +const BlogBlogIdRouteRoute = BlogBlogIdRouteRouteImport.update({ + id: '/blog/$blogId', + path: '/blog/$blogId', + getParentRoute: () => rootRouteImport, +} as any) const PostsPostIdIndexRoute = PostsPostIdIndexRouteImport.update({ id: '/$postId/', path: '/$postId/', @@ -64,38 +73,65 @@ const PostsPostIdDeepRoute = PostsPostIdDeepRouteImport.update({ path: '/$postId/deep', getParentRoute: () => PostsRouteRoute, } as any) +const BlogBlogIdEditRoute = BlogBlogIdEditRouteImport.update({ + id: '/blog/$blogId/edit', + path: '/blog/$blogId/edit', + getParentRoute: () => rootRouteImport, +} as any) +const BlogBlogIdSlugRouteRoute = BlogBlogIdSlugRouteRouteImport.update({ + id: '/$slug', + path: '/$slug', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) +const BlogBlogIdSlugBarRoute = BlogBlogIdSlugBarRouteImport.update({ + id: '/$slug/bar', + path: '/$slug/bar', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesByTo { '/': typeof IndexRoute + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog/stats': typeof BlogStatsRoute '/blog': typeof BlogIndexRoute '/posts': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId/': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath @@ -103,39 +139,53 @@ export interface FileRouteTypes { | '/' | '/blog' | '/posts' + | '/blog/$blogId' | '/blog/$slug' | '/blog/stats' | '/blog/' | '/posts/' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' fileRoutesByTo: FileRoutesByTo to: | '/' + | '/blog/$blogId' | '/blog/$slug' | '/blog/stats' | '/blog' | '/posts' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' id: | '__root__' | '/' | '/blog' | '/posts' + | '/blog/$blogId' | '/blog/$slug' | '/blog/stats' | '/blog/' | '/posts/' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/posts/$postId/' + | '/blog/$blogId/$slug/bar' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute BlogRouteRoute: typeof BlogRouteRouteWithChildren PostsRouteRoute: typeof PostsRouteRouteWithChildren + BlogBlogIdRouteRoute: typeof BlogBlogIdRouteRouteWithChildren BlogStatsRoute: typeof BlogStatsRoute + BlogBlogIdEditRoute: typeof BlogBlogIdEditRoute } declare module '@tanstack/react-router' { @@ -189,6 +239,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof BlogSlugRouteImport parentRoute: typeof BlogRouteRoute } + '/blog/$blogId': { + id: '/blog/$blogId' + path: '/blog/$blogId' + fullPath: '/blog/$blogId' + preLoaderRoute: typeof BlogBlogIdRouteRouteImport + parentRoute: typeof rootRouteImport + } '/posts/$postId/': { id: '/posts/$postId/' path: '/$postId' @@ -203,6 +260,27 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof PostsPostIdDeepRouteImport parentRoute: typeof PostsRouteRoute } + '/blog/$blogId/edit': { + id: '/blog/$blogId/edit' + path: '/blog/$blogId/edit' + fullPath: '/blog/$blogId/edit' + preLoaderRoute: typeof BlogBlogIdEditRouteImport + parentRoute: typeof rootRouteImport + } + '/blog/$blogId/$slug': { + id: '/blog/$blogId/$slug' + path: '/$slug' + fullPath: '/blog/$blogId/$slug' + preLoaderRoute: typeof BlogBlogIdSlugRouteRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } + '/blog/$blogId/$slug/bar': { + id: '/blog/$blogId/$slug/bar' + path: '/$slug/bar' + fullPath: '/blog/$blogId/$slug/bar' + preLoaderRoute: typeof BlogBlogIdSlugBarRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } } } @@ -236,11 +314,27 @@ const PostsRouteRouteWithChildren = PostsRouteRoute._addFileChildren( PostsRouteRouteChildren, ) +interface BlogBlogIdRouteRouteChildren { + BlogBlogIdSlugRouteRoute: typeof BlogBlogIdSlugRouteRoute + BlogBlogIdSlugBarRoute: typeof BlogBlogIdSlugBarRoute +} + +const BlogBlogIdRouteRouteChildren: BlogBlogIdRouteRouteChildren = { + BlogBlogIdSlugRouteRoute: BlogBlogIdSlugRouteRoute, + BlogBlogIdSlugBarRoute: BlogBlogIdSlugBarRoute, +} + +const BlogBlogIdRouteRouteWithChildren = BlogBlogIdRouteRoute._addFileChildren( + BlogBlogIdRouteRouteChildren, +) + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, BlogRouteRoute: BlogRouteRouteWithChildren, PostsRouteRoute: PostsRouteRouteWithChildren, + BlogBlogIdRouteRoute: BlogBlogIdRouteRouteWithChildren, BlogStatsRoute: BlogStatsRoute, + BlogBlogIdEditRoute: BlogBlogIdEditRoute, } export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routeTree.snapshot.ts b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routeTree.snapshot.ts index a1283ded235..3cb8036f7c3 100644 --- a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routeTree.snapshot.ts +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routeTree.snapshot.ts @@ -16,8 +16,12 @@ import { Route as PostsIndexRouteImport } from './routes/posts/index' import { Route as BlogIndexRouteImport } from './routes/blog/index' import { Route as BlogStatsRouteImport } from './routes/blog_/stats' import { Route as BlogSlugRouteImport } from './routes/blog/$slug' +import { Route as BlogBlogIdRouteRouteImport } from './routes/blog_/$blogId/route' import { Route as PostsPostIdIndexRouteImport } from './routes/posts/$postId/index' import { Route as PostsPostIdDeepRouteImport } from './routes/posts/$postId/deep' +import { Route as BlogBlogIdEditRouteImport } from './routes/blog_/$blogId_/edit' +import { Route as BlogBlogIdSlugRouteRouteImport } from './routes/blog_/$blogId/$slug/route' +import { Route as BlogBlogIdSlugBarRouteImport } from './routes/blog_/$blogId/$slug_/bar' const PostsRouteRoute = PostsRouteRouteImport.update({ id: '/posts', @@ -54,6 +58,11 @@ const BlogSlugRoute = BlogSlugRouteImport.update({ path: '/$slug', getParentRoute: () => BlogRouteRoute, } as any) +const BlogBlogIdRouteRoute = BlogBlogIdRouteRouteImport.update({ + id: '/blog_/$blogId', + path: '/blog/$blogId', + getParentRoute: () => rootRouteImport, +} as any) const PostsPostIdIndexRoute = PostsPostIdIndexRouteImport.update({ id: '/$postId/', path: '/$postId/', @@ -64,38 +73,65 @@ const PostsPostIdDeepRoute = PostsPostIdDeepRouteImport.update({ path: '/$postId/deep', getParentRoute: () => PostsRouteRoute, } as any) +const BlogBlogIdEditRoute = BlogBlogIdEditRouteImport.update({ + id: '/blog_/$blogId_/edit', + path: '/blog/$blogId/edit', + getParentRoute: () => rootRouteImport, +} as any) +const BlogBlogIdSlugRouteRoute = BlogBlogIdSlugRouteRouteImport.update({ + id: '/$slug', + path: '/$slug', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) +const BlogBlogIdSlugBarRoute = BlogBlogIdSlugBarRouteImport.update({ + id: '/$slug_/bar', + path: '/$slug/bar', + getParentRoute: () => BlogBlogIdRouteRoute, +} as any) export interface FileRoutesByFullPath { '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesByTo { '/': typeof IndexRoute + '/blog/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog/stats': typeof BlogStatsRoute '/blog': typeof BlogIndexRoute '/posts': typeof PostsIndexRoute + '/blog/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog/$blogId/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId': typeof PostsPostIdIndexRoute + '/blog/$blogId/$slug/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRoutesById { __root__: typeof rootRouteImport '/': typeof IndexRoute '/blog': typeof BlogRouteRouteWithChildren '/posts': typeof PostsRouteRouteWithChildren + '/blog_/$blogId': typeof BlogBlogIdRouteRouteWithChildren '/blog/$slug': typeof BlogSlugRoute '/blog_/stats': typeof BlogStatsRoute '/blog/': typeof BlogIndexRoute '/posts/': typeof PostsIndexRoute + '/blog_/$blogId/$slug': typeof BlogBlogIdSlugRouteRoute + '/blog_/$blogId_/edit': typeof BlogBlogIdEditRoute '/posts/$postId/deep': typeof PostsPostIdDeepRoute '/posts/$postId/': typeof PostsPostIdIndexRoute + '/blog_/$blogId/$slug_/bar': typeof BlogBlogIdSlugBarRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath @@ -103,39 +139,53 @@ export interface FileRouteTypes { | '/' | '/blog' | '/posts' + | '/blog/$blogId' | '/blog/$slug' | '/blog/stats' | '/blog/' | '/posts/' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' fileRoutesByTo: FileRoutesByTo to: | '/' + | '/blog/$blogId' | '/blog/$slug' | '/blog/stats' | '/blog' | '/posts' + | '/blog/$blogId/$slug' + | '/blog/$blogId/edit' | '/posts/$postId/deep' | '/posts/$postId' + | '/blog/$blogId/$slug/bar' id: | '__root__' | '/' | '/blog' | '/posts' + | '/blog_/$blogId' | '/blog/$slug' | '/blog_/stats' | '/blog/' | '/posts/' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId_/edit' | '/posts/$postId/deep' | '/posts/$postId/' + | '/blog_/$blogId/$slug_/bar' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute BlogRouteRoute: typeof BlogRouteRouteWithChildren PostsRouteRoute: typeof PostsRouteRouteWithChildren + BlogBlogIdRouteRoute: typeof BlogBlogIdRouteRouteWithChildren BlogStatsRoute: typeof BlogStatsRoute + BlogBlogIdEditRoute: typeof BlogBlogIdEditRoute } declare module '@tanstack/react-router' { @@ -189,6 +239,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof BlogSlugRouteImport parentRoute: typeof BlogRouteRoute } + '/blog_/$blogId': { + id: '/blog_/$blogId' + path: '/blog/$blogId' + fullPath: '/blog/$blogId' + preLoaderRoute: typeof BlogBlogIdRouteRouteImport + parentRoute: typeof rootRouteImport + } '/posts/$postId/': { id: '/posts/$postId/' path: '/$postId' @@ -203,6 +260,27 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof PostsPostIdDeepRouteImport parentRoute: typeof PostsRouteRoute } + '/blog_/$blogId_/edit': { + id: '/blog_/$blogId_/edit' + path: '/blog/$blogId/edit' + fullPath: '/blog/$blogId/edit' + preLoaderRoute: typeof BlogBlogIdEditRouteImport + parentRoute: typeof rootRouteImport + } + '/blog_/$blogId/$slug': { + id: '/blog_/$blogId/$slug' + path: '/$slug' + fullPath: '/blog/$blogId/$slug' + preLoaderRoute: typeof BlogBlogIdSlugRouteRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } + '/blog_/$blogId/$slug_/bar': { + id: '/blog_/$blogId/$slug_/bar' + path: '/$slug/bar' + fullPath: '/blog/$blogId/$slug/bar' + preLoaderRoute: typeof BlogBlogIdSlugBarRouteImport + parentRoute: typeof BlogBlogIdRouteRoute + } } } @@ -236,11 +314,27 @@ const PostsRouteRouteWithChildren = PostsRouteRoute._addFileChildren( PostsRouteRouteChildren, ) +interface BlogBlogIdRouteRouteChildren { + BlogBlogIdSlugRouteRoute: typeof BlogBlogIdSlugRouteRoute + BlogBlogIdSlugBarRoute: typeof BlogBlogIdSlugBarRoute +} + +const BlogBlogIdRouteRouteChildren: BlogBlogIdRouteRouteChildren = { + BlogBlogIdSlugRouteRoute: BlogBlogIdSlugRouteRoute, + BlogBlogIdSlugBarRoute: BlogBlogIdSlugBarRoute, +} + +const BlogBlogIdRouteRouteWithChildren = BlogBlogIdRouteRoute._addFileChildren( + BlogBlogIdRouteRouteChildren, +) + const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, BlogRouteRoute: BlogRouteRouteWithChildren, PostsRouteRoute: PostsRouteRouteWithChildren, + BlogBlogIdRouteRoute: BlogBlogIdRouteRouteWithChildren, BlogStatsRoute: BlogStatsRoute, + BlogBlogIdEditRoute: BlogBlogIdEditRoute, } export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId/$slug/route.tsx b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId/$slug/route.tsx new file mode 100644 index 00000000000..c8f91b6d9b3 --- /dev/null +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId/$slug/route.tsx @@ -0,0 +1,5 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/blog_/$blogId/$slug')({ + component: () =>
Hello /blog_/$blogId/$slug/route!
, +}) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId/$slug_/bar.tsx b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId/$slug_/bar.tsx new file mode 100644 index 00000000000..9d44dc5f21d --- /dev/null +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId/$slug_/bar.tsx @@ -0,0 +1,4 @@ +import { createFileRoute } from '@tanstack/react-router' +export const Route = createFileRoute('/blog_/$blogId/$slug_/bar')({ + component: () =>
Hello /blog_/$blogId/$slug_/bar!
, +}) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId/route.tsx b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId/route.tsx new file mode 100644 index 00000000000..95a56a67fb5 --- /dev/null +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId/route.tsx @@ -0,0 +1,5 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/blog_/$blogId')({ + component: () =>
Hello /blog_/$blogId/route!
, +}) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId_/edit.tsx b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId_/edit.tsx new file mode 100644 index 00000000000..9968c7f1dd0 --- /dev/null +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/routes/blog_/$blogId_/edit.tsx @@ -0,0 +1,5 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/blog_/$blogId_/edit')({ + component: () =>
Hello /blog_/$blogId_/edit!
, +}) diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/tests.nonnested.test-d.ts b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/tests.nonnested.test-d.ts index 8a6b9948f97..5ef92510c05 100644 --- a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/tests.nonnested.test-d.ts +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/tests.nonnested.test-d.ts @@ -43,6 +43,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -57,6 +61,10 @@ test('when navigating to the root', () => { | '/' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -71,6 +79,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -85,12 +97,20 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' | '/posts/$postId' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -105,6 +125,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -149,6 +173,10 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -166,6 +194,10 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -177,9 +209,12 @@ test('when navigating a index route with search and params', () => { .toHaveProperty('to') .toEqualTypeOf< | '/' - | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -201,12 +236,20 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' | '/posts/$postId' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -221,6 +264,10 @@ test('when navigating a index route with search and params', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -327,6 +374,10 @@ test('when navigating from a index route with search and params', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -354,6 +405,10 @@ test('when using useNavigate', () => { | '..' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -370,6 +425,10 @@ test('when using redirect', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -385,8 +444,11 @@ test('when using useSearch from a route with no search', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -406,8 +468,11 @@ test('when using useSearch from a route with search', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -429,8 +494,11 @@ test('when using useLoaderData from a route with loaderData', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -452,8 +520,11 @@ test('when using useLoaderDeps from a route with loaderDeps', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -475,8 +546,11 @@ test('when using useMatch from a route', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -500,8 +574,11 @@ test('when using useParams from a route', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -523,8 +600,11 @@ test('when using useRouteContext from a route', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' diff --git a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/tests.test-d.ts b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/tests.test-d.ts index a349a48c5e5..2e991843d59 100644 --- a/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/tests.test-d.ts +++ b/packages/router-generator/tests/generator/nested-verboseFileRoutes-true/tests.test-d.ts @@ -1,7 +1,6 @@ import { - createRouter, Link, - MakeRouteMatch, + createRouter, redirect, useLoaderData, useLoaderDeps, @@ -11,8 +10,9 @@ import { useRouteContext, useSearch, } from '@tanstack/react-router' -import { test, expectTypeOf } from 'vitest' +import { expectTypeOf, test } from 'vitest' import { routeTree } from './routeTree.gen' +import type { MakeRouteMatch } from '@tanstack/react-router' const defaultRouter = createRouter({ routeTree, @@ -43,6 +43,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -57,6 +61,10 @@ test('when navigating to the root', () => { | '/' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -71,6 +79,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -85,12 +97,20 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' | '/posts/$postId' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -105,6 +125,10 @@ test('when navigating to the root', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -149,6 +173,10 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -166,6 +194,10 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -177,9 +209,12 @@ test('when navigating a index route with search and params', () => { .toHaveProperty('to') .toEqualTypeOf< | '/' - | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -201,12 +236,20 @@ test('when navigating a index route with search and params', () => { | '/' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' | '/posts/$postId' | '/blog/' | '/posts/' + | '/blog/$blogId/' + | '/blog/$blogId/edit/' + | '/blog/$blogId/$slug/' + | '/blog/$blogId/$slug/bar/' | '/blog/$slug/' | '/blog/stats/' | '/posts/$postId/deep/' @@ -221,6 +264,10 @@ test('when navigating a index route with search and params', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -327,6 +374,10 @@ test('when navigating from a index route with search and params', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/blog/' @@ -354,6 +405,10 @@ test('when using useNavigate', () => { | '..' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -370,6 +425,10 @@ test('when using redirect', () => { | '/posts/$postId' | '/blog' | '/posts' + | '/blog/$blogId' + | '/blog/$blogId/edit' + | '/blog/$blogId/$slug' + | '/blog/$blogId/$slug/bar' | '/blog/$slug' | '/blog/stats' | '/posts/$postId/deep' @@ -385,9 +444,12 @@ test('when using useSearch from a route with no search', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' | '/blog/' | '/posts/' @@ -406,9 +468,12 @@ test('when using useSearch from a route with search', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' | '/blog/' | '/posts/' @@ -429,9 +494,12 @@ test('when using useLoaderData from a route with loaderData', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' | '/blog/' | '/posts/' @@ -452,9 +520,12 @@ test('when using useLoaderDeps from a route with loaderDeps', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' | '/blog/' | '/posts/' @@ -475,9 +546,12 @@ test('when using useMatch from a route', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' | '/blog/' | '/posts/' @@ -500,9 +574,12 @@ test('when using useParams from a route', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' | '/blog/' | '/posts/' @@ -523,9 +600,12 @@ test('when using useRouteContext from a route', () => { | '__root__' | '/' | '/blog' - | '/blog/' | '/posts' | '/blog/$slug' + | '/blog_/$blogId' + | '/blog_/$blogId_/edit' + | '/blog_/$blogId/$slug' + | '/blog_/$blogId/$slug_/bar' | '/blog_/stats' | '/blog/' | '/posts/'