diff --git a/packages/router-generator/src/generator.ts b/packages/router-generator/src/generator.ts index afb42941d1d..f16f953edcb 100644 --- a/packages/router-generator/src/generator.ts +++ b/packages/router-generator/src/generator.ts @@ -1447,9 +1447,12 @@ ${acc.routeTree.map((child) => `${child.variableName}Route: typeof ${getResolved const candidate = acc.routeNodesByPath.get(searchPath) if (candidate && !candidate.isVirtual && candidate.path !== '/') { node.parent = candidate - node.path = node.routePath + node.path = + node.routePath?.replace(candidate.routePath ?? '', '') || '/' + const pathRelativeToParent = + immediateParentPath.replace(candidate.routePath ?? '', '') || '/' node.cleanedPath = removeGroups( - removeUnderscores(removeLayoutSegments(immediateParentPath)) ?? '', + removeUnderscores(removeLayoutSegments(pathRelativeToParent)) ?? '', ) break } diff --git a/packages/router-generator/tests/generator/flat-route-group/routeTree.nonnested.snapshot.ts b/packages/router-generator/tests/generator/flat-route-group/routeTree.nonnested.snapshot.ts new file mode 100644 index 00000000000..b0f4031474d --- /dev/null +++ b/packages/router-generator/tests/generator/flat-route-group/routeTree.nonnested.snapshot.ts @@ -0,0 +1,145 @@ +/* eslint-disable */ + +// @ts-nocheck + +// noinspection JSUnusedGlobalSymbols + +// This file was automatically generated by TanStack Router. +// You should NOT make any changes in this file as it will be overwritten. +// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. + +import { Route as rootRouteImport } from './routes/__root' +import { Route as AppRouteImport } from './routes/app' +import { Route as AppcomprasComprasOrdenesRouteImport } from './routes/app.(compras)/compras_.ordenes' +import { Route as AppcomprasComprasMasRouteImport } from './routes/app.(compras)/compras_._mas' +import { Route as AppcomprasComprasMasDivisionesRouteImport } from './routes/app.(compras)/compras_._mas.divisiones' + +const AppRoute = AppRouteImport.update({ + id: '/app', + path: '/app', + getParentRoute: () => rootRouteImport, +} as any) +const AppcomprasComprasOrdenesRoute = + AppcomprasComprasOrdenesRouteImport.update({ + id: '/app/(compras)/compras/ordenes', + path: '/app/compras/ordenes', + getParentRoute: () => rootRouteImport, + } as any) +const AppcomprasComprasMasRoute = AppcomprasComprasMasRouteImport.update({ + id: '/(compras)/compras/_mas', + path: '/compras', + getParentRoute: () => AppRoute, +} as any) +const AppcomprasComprasMasDivisionesRoute = + AppcomprasComprasMasDivisionesRouteImport.update({ + id: '/divisiones', + path: '/divisiones', + getParentRoute: () => AppcomprasComprasMasRoute, + } as any) + +export interface FileRoutesByFullPath { + '/app': typeof AppRouteWithChildren + '/app/compras': typeof AppcomprasComprasMasRouteWithChildren + '/app/compras/ordenes': typeof AppcomprasComprasOrdenesRoute + '/app/compras/divisiones': typeof AppcomprasComprasMasDivisionesRoute +} +export interface FileRoutesByTo { + '/app': typeof AppRouteWithChildren + '/app/compras': typeof AppcomprasComprasMasRouteWithChildren + '/app/compras/ordenes': typeof AppcomprasComprasOrdenesRoute + '/app/compras/divisiones': typeof AppcomprasComprasMasDivisionesRoute +} +export interface FileRoutesById { + __root__: typeof rootRouteImport + '/app': typeof AppRouteWithChildren + '/app/(compras)/compras/_mas': typeof AppcomprasComprasMasRouteWithChildren + '/app/(compras)/compras/ordenes': typeof AppcomprasComprasOrdenesRoute + '/app/(compras)/compras/_mas/divisiones': typeof AppcomprasComprasMasDivisionesRoute +} +export interface FileRouteTypes { + fileRoutesByFullPath: FileRoutesByFullPath + fullPaths: + | '/app' + | '/app/compras' + | '/app/compras/ordenes' + | '/app/compras/divisiones' + fileRoutesByTo: FileRoutesByTo + to: + | '/app' + | '/app/compras' + | '/app/compras/ordenes' + | '/app/compras/divisiones' + id: + | '__root__' + | '/app' + | '/app/(compras)/compras/_mas' + | '/app/(compras)/compras/ordenes' + | '/app/(compras)/compras/_mas/divisiones' + fileRoutesById: FileRoutesById +} +export interface RootRouteChildren { + AppRoute: typeof AppRouteWithChildren + AppcomprasComprasOrdenesRoute: typeof AppcomprasComprasOrdenesRoute +} + +declare module '@tanstack/react-router' { + interface FileRoutesByPath { + '/app': { + id: '/app' + path: '/app' + fullPath: '/app' + preLoaderRoute: typeof AppRouteImport + parentRoute: typeof rootRouteImport + } + '/app/(compras)/compras/ordenes': { + id: '/app/(compras)/compras/ordenes' + path: '/app/compras/ordenes' + fullPath: '/app/compras/ordenes' + preLoaderRoute: typeof AppcomprasComprasOrdenesRouteImport + parentRoute: typeof rootRouteImport + } + '/app/(compras)/compras/_mas': { + id: '/app/(compras)/compras/_mas' + path: '/compras' + fullPath: '/app/compras' + preLoaderRoute: typeof AppcomprasComprasMasRouteImport + parentRoute: typeof AppRoute + } + '/app/(compras)/compras/_mas/divisiones': { + id: '/app/(compras)/compras/_mas/divisiones' + path: '/divisiones' + fullPath: '/app/compras/divisiones' + preLoaderRoute: typeof AppcomprasComprasMasDivisionesRouteImport + parentRoute: typeof AppcomprasComprasMasRoute + } + } +} + +interface AppcomprasComprasMasRouteChildren { + AppcomprasComprasMasDivisionesRoute: typeof AppcomprasComprasMasDivisionesRoute +} + +const AppcomprasComprasMasRouteChildren: AppcomprasComprasMasRouteChildren = { + AppcomprasComprasMasDivisionesRoute: AppcomprasComprasMasDivisionesRoute, +} + +const AppcomprasComprasMasRouteWithChildren = + AppcomprasComprasMasRoute._addFileChildren(AppcomprasComprasMasRouteChildren) + +interface AppRouteChildren { + AppcomprasComprasMasRoute: typeof AppcomprasComprasMasRouteWithChildren +} + +const AppRouteChildren: AppRouteChildren = { + AppcomprasComprasMasRoute: AppcomprasComprasMasRouteWithChildren, +} + +const AppRouteWithChildren = AppRoute._addFileChildren(AppRouteChildren) + +const rootRouteChildren: RootRouteChildren = { + AppRoute: AppRouteWithChildren, + AppcomprasComprasOrdenesRoute: AppcomprasComprasOrdenesRoute, +} +export const routeTree = rootRouteImport + ._addFileChildren(rootRouteChildren) + ._addFileTypes() diff --git a/packages/router-generator/tests/generator/flat-route-group/routeTree.snapshot.ts b/packages/router-generator/tests/generator/flat-route-group/routeTree.snapshot.ts new file mode 100644 index 00000000000..7f7990e7870 --- /dev/null +++ b/packages/router-generator/tests/generator/flat-route-group/routeTree.snapshot.ts @@ -0,0 +1,147 @@ +/* eslint-disable */ + +// @ts-nocheck + +// noinspection JSUnusedGlobalSymbols + +// This file was automatically generated by TanStack Router. +// You should NOT make any changes in this file as it will be overwritten. +// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. + +import { Route as rootRouteImport } from './routes/__root' +import { Route as AppRouteImport } from './routes/app' +import { Route as AppcomprasComprasOrdenesRouteImport } from './routes/app.(compras)/compras_.ordenes' +import { Route as AppcomprasCompras_masRouteImport } from './routes/app.(compras)/compras_._mas' +import { Route as AppcomprasCompras_masDivisionesRouteImport } from './routes/app.(compras)/compras_._mas.divisiones' + +const AppRoute = AppRouteImport.update({ + id: '/app', + path: '/app', + getParentRoute: () => rootRouteImport, +} as any) +const AppcomprasComprasOrdenesRoute = + AppcomprasComprasOrdenesRouteImport.update({ + id: '/(compras)/compras_/ordenes', + path: '/compras/ordenes', + getParentRoute: () => AppRoute, + } as any) +const AppcomprasCompras_masRoute = AppcomprasCompras_masRouteImport.update({ + id: '/(compras)/compras_/_mas', + path: '/compras', + getParentRoute: () => AppRoute, +} as any) +const AppcomprasCompras_masDivisionesRoute = + AppcomprasCompras_masDivisionesRouteImport.update({ + id: '/divisiones', + path: '/divisiones', + getParentRoute: () => AppcomprasCompras_masRoute, + } as any) + +export interface FileRoutesByFullPath { + '/app': typeof AppRouteWithChildren + '/app/compras': typeof AppcomprasCompras_masRouteWithChildren + '/app/compras/ordenes': typeof AppcomprasComprasOrdenesRoute + '/app/compras/divisiones': typeof AppcomprasCompras_masDivisionesRoute +} +export interface FileRoutesByTo { + '/app': typeof AppRouteWithChildren + '/app/compras': typeof AppcomprasCompras_masRouteWithChildren + '/app/compras/ordenes': typeof AppcomprasComprasOrdenesRoute + '/app/compras/divisiones': typeof AppcomprasCompras_masDivisionesRoute +} +export interface FileRoutesById { + __root__: typeof rootRouteImport + '/app': typeof AppRouteWithChildren + '/app/(compras)/compras_/_mas': typeof AppcomprasCompras_masRouteWithChildren + '/app/(compras)/compras_/ordenes': typeof AppcomprasComprasOrdenesRoute + '/app/(compras)/compras_/_mas/divisiones': typeof AppcomprasCompras_masDivisionesRoute +} +export interface FileRouteTypes { + fileRoutesByFullPath: FileRoutesByFullPath + fullPaths: + | '/app' + | '/app/compras' + | '/app/compras/ordenes' + | '/app/compras/divisiones' + fileRoutesByTo: FileRoutesByTo + to: + | '/app' + | '/app/compras' + | '/app/compras/ordenes' + | '/app/compras/divisiones' + id: + | '__root__' + | '/app' + | '/app/(compras)/compras_/_mas' + | '/app/(compras)/compras_/ordenes' + | '/app/(compras)/compras_/_mas/divisiones' + fileRoutesById: FileRoutesById +} +export interface RootRouteChildren { + AppRoute: typeof AppRouteWithChildren +} + +declare module '@tanstack/react-router' { + interface FileRoutesByPath { + '/app': { + id: '/app' + path: '/app' + fullPath: '/app' + preLoaderRoute: typeof AppRouteImport + parentRoute: typeof rootRouteImport + } + '/app/(compras)/compras_/ordenes': { + id: '/app/(compras)/compras_/ordenes' + path: '/compras/ordenes' + fullPath: '/app/compras/ordenes' + preLoaderRoute: typeof AppcomprasComprasOrdenesRouteImport + parentRoute: typeof AppRoute + } + '/app/(compras)/compras_/_mas': { + id: '/app/(compras)/compras_/_mas' + path: '/compras' + fullPath: '/app/compras' + preLoaderRoute: typeof AppcomprasCompras_masRouteImport + parentRoute: typeof AppRoute + } + '/app/(compras)/compras_/_mas/divisiones': { + id: '/app/(compras)/compras_/_mas/divisiones' + path: '/divisiones' + fullPath: '/app/compras/divisiones' + preLoaderRoute: typeof AppcomprasCompras_masDivisionesRouteImport + parentRoute: typeof AppcomprasCompras_masRoute + } + } +} + +interface AppcomprasCompras_masRouteChildren { + AppcomprasCompras_masDivisionesRoute: typeof AppcomprasCompras_masDivisionesRoute +} + +const AppcomprasCompras_masRouteChildren: AppcomprasCompras_masRouteChildren = { + AppcomprasCompras_masDivisionesRoute: AppcomprasCompras_masDivisionesRoute, +} + +const AppcomprasCompras_masRouteWithChildren = + AppcomprasCompras_masRoute._addFileChildren( + AppcomprasCompras_masRouteChildren, + ) + +interface AppRouteChildren { + AppcomprasCompras_masRoute: typeof AppcomprasCompras_masRouteWithChildren + AppcomprasComprasOrdenesRoute: typeof AppcomprasComprasOrdenesRoute +} + +const AppRouteChildren: AppRouteChildren = { + AppcomprasCompras_masRoute: AppcomprasCompras_masRouteWithChildren, + AppcomprasComprasOrdenesRoute: AppcomprasComprasOrdenesRoute, +} + +const AppRouteWithChildren = AppRoute._addFileChildren(AppRouteChildren) + +const rootRouteChildren: RootRouteChildren = { + AppRoute: AppRouteWithChildren, +} +export const routeTree = rootRouteImport + ._addFileChildren(rootRouteChildren) + ._addFileTypes() diff --git a/packages/router-generator/tests/generator/flat-route-group/routes/__root.tsx b/packages/router-generator/tests/generator/flat-route-group/routes/__root.tsx new file mode 100644 index 00000000000..a8c4d4c8938 --- /dev/null +++ b/packages/router-generator/tests/generator/flat-route-group/routes/__root.tsx @@ -0,0 +1,2 @@ +// @ts-nocheck +export const Route = createFileRoute() diff --git a/packages/router-generator/tests/generator/flat-route-group/routes/app.(compras)/compras_._mas.divisiones.tsx b/packages/router-generator/tests/generator/flat-route-group/routes/app.(compras)/compras_._mas.divisiones.tsx new file mode 100644 index 00000000000..ebec0274136 --- /dev/null +++ b/packages/router-generator/tests/generator/flat-route-group/routes/app.(compras)/compras_._mas.divisiones.tsx @@ -0,0 +1,11 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/app/(compras)/compras_/_mas/divisiones')( + { + component: RouteComponent, + }, +) + +function RouteComponent() { + return
Hello "/app/(compras)/compras/_mas/divisiones"!
+} diff --git a/packages/router-generator/tests/generator/flat-route-group/routes/app.(compras)/compras_._mas.tsx b/packages/router-generator/tests/generator/flat-route-group/routes/app.(compras)/compras_._mas.tsx new file mode 100644 index 00000000000..a10276884a6 --- /dev/null +++ b/packages/router-generator/tests/generator/flat-route-group/routes/app.(compras)/compras_._mas.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/app/(compras)/compras_/_mas')({ + component: RouteComponent, +}) + +function RouteComponent() { + return
Hello "/app/(compras)/compras/mas"!
+} diff --git a/packages/router-generator/tests/generator/flat-route-group/routes/app.(compras)/compras_.ordenes.tsx b/packages/router-generator/tests/generator/flat-route-group/routes/app.(compras)/compras_.ordenes.tsx new file mode 100644 index 00000000000..ce1a19c9add --- /dev/null +++ b/packages/router-generator/tests/generator/flat-route-group/routes/app.(compras)/compras_.ordenes.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/app/(compras)/compras_/ordenes')({ + component: RouteComponent, +}) + +function RouteComponent() { + return
Hello "/app/(compras)/compras/mas/divisiones"!
+} diff --git a/packages/router-generator/tests/generator/flat-route-group/routes/app.tsx b/packages/router-generator/tests/generator/flat-route-group/routes/app.tsx new file mode 100644 index 00000000000..fdc75fcb17f --- /dev/null +++ b/packages/router-generator/tests/generator/flat-route-group/routes/app.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/app')({ + component: RouteComponent, +}) + +function RouteComponent() { + return
Hello "/app"!
+}