diff --git a/packages/next/src/build/analysis/get-page-static-info.ts b/packages/next/src/build/analysis/get-page-static-info.ts index e55339b116..7be04221f4 100644 --- a/packages/next/src/build/analysis/get-page-static-info.ts +++ b/packages/next/src/build/analysis/get-page-static-info.ts @@ -30,6 +30,7 @@ export interface MiddlewareMatcher { locale?: false has?: RouteHas[] missing?: RouteHas[] + originalSource: string } export interface PageStaticInfo { @@ -197,6 +198,7 @@ export function getMiddlewareMatchers( return { ...rest, regexp: parsedPage.regexStr, + originalSource: source, } }) } diff --git a/packages/next/src/build/entries.ts b/packages/next/src/build/entries.ts index 192adaaf8d..3f4d01c35e 100644 --- a/packages/next/src/build/entries.ts +++ b/packages/next/src/build/entries.ts @@ -416,7 +416,7 @@ export async function createEntrypoints(params: CreateEntrypointsParams) { if (isMiddlewareFile(page)) { middlewareMatchers = staticInfo.middleware?.matchers ?? [ - { regexp: '.*' }, + { regexp: '.*', originalSource: '/:path*' }, ] } diff --git a/packages/next/src/build/webpack/plugins/middleware-plugin.ts b/packages/next/src/build/webpack/plugins/middleware-plugin.ts index 1464b915e0..97e6eaf00a 100644 --- a/packages/next/src/build/webpack/plugins/middleware-plugin.ts +++ b/packages/next/src/build/webpack/plugins/middleware-plugin.ts @@ -171,14 +171,20 @@ function getCreateAssets(params: { continue } - const { namedRegex } = getNamedMiddlewareRegex( - metadata.edgeSSR?.isAppDir ? normalizeAppPath(page) : page, - { - catchAll: !metadata.edgeSSR && !metadata.edgeApiFunction, - } - ) + const matcherSource = metadata.edgeSSR?.isAppDir + ? normalizeAppPath(page) + : page + + const catchAll = !metadata.edgeSSR && !metadata.edgeApiFunction + + const { namedRegex } = getNamedMiddlewareRegex(matcherSource, { + catchAll, + }) const matchers = metadata?.edgeMiddleware?.matchers ?? [ - { regexp: namedRegex }, + { + regexp: namedRegex, + originalSource: page === '/' && catchAll ? '/:path*' : matcherSource, + }, ] const edgeFunctionDefinition: EdgeFunctionDefinition = { diff --git a/packages/next/src/server/dev/next-dev-server.ts b/packages/next/src/server/dev/next-dev-server.ts index 4d513d258f..0439fd8fff 100644 --- a/packages/next/src/server/dev/next-dev-server.ts +++ b/packages/next/src/server/dev/next-dev-server.ts @@ -497,7 +497,7 @@ export default class DevServer extends Server { } this.actualMiddlewareFile = rootFile middlewareMatchers = staticInfo.middleware?.matchers || [ - { regexp: '.*' }, + { regexp: '.*', originalSource: '/:path*' }, ] continue } diff --git a/packages/next/src/server/lib/route-resolver.ts b/packages/next/src/server/lib/route-resolver.ts index fe66374f8a..1915aa623b 100644 --- a/packages/next/src/server/lib/route-resolver.ts +++ b/packages/next/src/server/lib/route-resolver.ts @@ -88,7 +88,7 @@ export async function makeResolver( if (middleware.files?.length) { const matchers = middleware.matcher ? getMiddlewareMatchers(middleware.matcher, nextConfig) - : [{ regexp: '.*' }] + : [{ regexp: '.*', originalSource: '/:path*' }] // @ts-expect-error devServer.middleware = { page: '/', diff --git a/test/e2e/app-dir/app-edge/app-edge.test.ts b/test/e2e/app-dir/app-edge/app-edge.test.ts index 76b8542a2b..625b496fef 100644 --- a/test/e2e/app-dir/app-edge/app-edge.test.ts +++ b/test/e2e/app-dir/app-edge/app-edge.test.ts @@ -61,6 +61,7 @@ createNextDescribe( expect(manifest.functions['/(group)/group/page'].matchers).toEqual([ { regexp: '^/group$', + originalSource: '/group', }, ]) }) diff --git a/test/e2e/middleware-general/test/index.test.ts b/test/e2e/middleware-general/test/index.test.ts index 4b45cbb5cf..49525f0f9c 100644 --- a/test/e2e/middleware-general/test/index.test.ts +++ b/test/e2e/middleware-general/test/index.test.ts @@ -109,7 +109,7 @@ describe('Middleware Runtime', () => { `/_next/static/${next.buildId}/_devMiddlewareManifest.json` ) const matchers = await res.json() - expect(matchers).toEqual([{ regexp: '.*' }]) + expect(matchers).toEqual([{ regexp: '.*', originalSource: '/:path*' }]) }) } @@ -131,7 +131,7 @@ describe('Middleware Runtime', () => { ]), name: 'middleware', page: '/', - matchers: [{ regexp: '^/.*$' }], + matchers: [{ regexp: '^/.*$', originalSource: '/:path*' }], wasm: [], assets: [], regions: 'auto', diff --git a/test/e2e/middleware-trailing-slash/test/index.test.ts b/test/e2e/middleware-trailing-slash/test/index.test.ts index 189adf5f31..ed60403b7f 100644 --- a/test/e2e/middleware-trailing-slash/test/index.test.ts +++ b/test/e2e/middleware-trailing-slash/test/index.test.ts @@ -115,7 +115,7 @@ describe('Middleware Runtime trailing slash', () => { name: 'middleware', env: [], page: '/', - matchers: [{ regexp: '^/.*$' }], + matchers: [{ regexp: '^/.*$', originalSource: '/:path*' }], wasm: [], assets: [], }, diff --git a/test/e2e/switchable-runtime/index.test.ts b/test/e2e/switchable-runtime/index.test.ts index 3d0b67f872..bbb732d09f 100644 --- a/test/e2e/switchable-runtime/index.test.ts +++ b/test/e2e/switchable-runtime/index.test.ts @@ -194,7 +194,9 @@ describe('Switchable runtime', () => { ], name: 'pages/api/hello', page: '/api/hello', - matchers: [{ regexp: '^/api/hello$' }], + matchers: [ + { regexp: '^/api/hello$', originalSource: '/api/hello' }, + ], wasm: [], }, '/api/edge': { @@ -205,7 +207,9 @@ describe('Switchable runtime', () => { ], name: 'pages/api/edge', page: '/api/edge', - matchers: [{ regexp: '^/api/edge$' }], + matchers: [ + { regexp: '^/api/edge$', originalSource: '/api/edge' }, + ], wasm: [], }, }, @@ -626,7 +630,9 @@ describe('Switchable runtime', () => { ], name: 'pages/api/hello', page: '/api/hello', - matchers: [{ regexp: '^/api/hello$' }], + matchers: [ + { regexp: '^/api/hello$', originalSource: '/api/hello' }, + ], wasm: [], }, '/api/edge': { @@ -637,7 +643,9 @@ describe('Switchable runtime', () => { ], name: 'pages/api/edge', page: '/api/edge', - matchers: [{ regexp: '^/api/edge$' }], + matchers: [ + { regexp: '^/api/edge$', originalSource: '/api/edge' }, + ], wasm: [], }, },