diff --git a/packages/astro/test/units/routing/trailing-slash.test.js b/packages/astro/test/units/routing/trailing-slash.test.js index 751bce0fe126..73e73713e1eb 100644 --- a/packages/astro/test/units/routing/trailing-slash.test.js +++ b/packages/astro/test/units/routing/trailing-slash.test.js @@ -12,6 +12,8 @@ import { const fileSystem = { '/src/pages/api.ts': `export const GET = () => Response.json({ success: true })`, '/src/pages/dot.json.ts': `export const GET = () => Response.json({ success: true })`, + '/src/pages/index.ts': `export const GET = ({ request }) => + Response.json({ pathname: new URL(request.url).pathname });`, }; describe('trailingSlash', () => { @@ -65,7 +67,7 @@ describe('trailingSlash', () => { 'astro:config:setup': ({ injectRoute }) => { injectRoute({ pattern: '/', - entrypoint: './src/pages/api.ts', + entrypoint: './src/pages/index.ts', }); injectRoute({ pattern: '/injected', @@ -167,8 +169,8 @@ describe('trailingSlash', () => { url: '/base', }); baseContainer.handle(req, res); - const json = await text(); - assert.equal(json, '{"success":true}'); + const { pathname } = JSON.parse(await text()); + assert.equal(pathname, '/base'); }); it('should not match root path with trailing slash when base is set and trailingSlash is never', async () => { diff --git a/packages/internal-helpers/src/path.ts b/packages/internal-helpers/src/path.ts index c7dda9d89017..4e7813707b6f 100644 --- a/packages/internal-helpers/src/path.ts +++ b/packages/internal-helpers/src/path.ts @@ -29,7 +29,10 @@ export function collapseDuplicateTrailingSlashes(path: string, trailingSlash: bo } export function removeTrailingForwardSlash(path: string) { - return path.endsWith('/') ? path.slice(0, path.length - 1) : path; + if (path.endsWith('/') && path !== '/' && path.lastIndexOf('/') === 0) { + return path.slice(0, -1); + } + return path.length > 1 && path.endsWith('/') ? path.slice(0, -1) : path; } export function removeLeadingForwardSlash(path: string) {