From 2b3cd97013dbc3fa7b0fead130fa2d4e3891a057 Mon Sep 17 00:00:00 2001 From: Martin Sonnberger Date: Tue, 27 Oct 2026 16:59:55 +0100 Subject: [PATCH] fix(react): Avoid double slashes in manifest route names Co-Authored-By: GPT-6 --- .../react/src/reactrouter-compat-utils/utils.ts | 2 +- .../test/reactrouter-compat-utils/utils.test.ts | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/react/src/reactrouter-compat-utils/utils.ts b/packages/react/src/reactrouter-compat-utils/utils.ts index b243ad4bf421..d0ca8ab36e33 100644 --- a/packages/react/src/reactrouter-compat-utils/utils.ts +++ b/packages/react/src/reactrouter-compat-utils/utils.ts @@ -369,7 +369,7 @@ export function resolveRouteNameAndSource( if (enableAsyncRouteHandlers && lazyRouteManifest && lazyRouteManifest.length > 0) { const manifestMatch = matchRouteManifest(location.pathname, lazyRouteManifest, basename); if (manifestMatch) { - return [(stripBasename ? '' : basename) + manifestMatch, 'route']; + return [(stripBasename ? '' : trimSlash(basename)) + manifestMatch, 'route']; } } diff --git a/packages/react/test/reactrouter-compat-utils/utils.test.ts b/packages/react/test/reactrouter-compat-utils/utils.test.ts index a5cca4030fac..905562ba8cff 100644 --- a/packages/react/test/reactrouter-compat-utils/utils.test.ts +++ b/packages/react/test/reactrouter-compat-utils/utils.test.ts @@ -673,6 +673,21 @@ describe('reactrouter-compat-utils/utils', () => { }); describe('resolveRouteNameAndSource', () => { + it.each([ + { basename: '/app/', pathname: '/app/users/42', expected: '/app/users/:id' }, + { basename: '/', pathname: '/users/42', expected: '/users/:id' }, + ])('avoids double slashes in manifest route names with basename $basename', ({ basename, pathname, expected }) => { + const config = makeConfig({ + enableAsyncRouteHandlers: true, + lazyRouteManifest: ['/users/:id'], + basename, + }); + + const result = resolveRouteNameAndSource({ pathname }, [], [], [], config); + + expect(result).toEqual([expected, 'route']); + }); + it('should use descendant route when location is inside one', () => { const location: Location = { pathname: '/users/123/profile' }; const routes: RouteObject[] = [{ path: '/users', element: null }];