From 0b62f9b0986528434547726e8d825d5097623d2e Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Mon, 6 Jun 2022 16:21:02 -0500 Subject: [PATCH] Fix invalid middleware regexp in manifest --- .../build/webpack/plugins/middleware-plugin.ts | 2 +- packages/next/server/next-server.ts | 6 ++++++ .../middleware-general/test/index.test.js | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/next/build/webpack/plugins/middleware-plugin.ts b/packages/next/build/webpack/plugins/middleware-plugin.ts index 8b7f8c9ae0346..5d30089055bfe 100644 --- a/packages/next/build/webpack/plugins/middleware-plugin.ts +++ b/packages/next/build/webpack/plugins/middleware-plugin.ts @@ -394,7 +394,7 @@ function getCreateAssets(params: { const { namedRegex } = getNamedMiddlewareRegex(page, { catchAll: !metadata.edgeSSR, }) - const regexp = metadata?.edgeMiddleware?.matcherRegexp ?? namedRegex + const regexp = metadata?.edgeMiddleware?.matcherRegexp || namedRegex middlewareManifest.middleware[page] = { env: Array.from(metadata.env), diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index 087db35ed90ae..b02128487ae05 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -1431,6 +1431,12 @@ function getMiddlewareMatcher( return stored } + if (typeof info.regexp !== 'string' || !info.regexp) { + throw new Error( + `Invariant: invalid regexp for middleware ${JSON.stringify(info)}` + ) + } + const matcher = getRouteMatcher({ re: new RegExp(info.regexp), groups: {} }) MiddlewareMatcherCache.set(info, matcher) return matcher diff --git a/test/integration/middleware-general/test/index.test.js b/test/integration/middleware-general/test/index.test.js index 501850cfabbc1..e300cf910ff5b 100644 --- a/test/integration/middleware-general/test/index.test.js +++ b/test/integration/middleware-general/test/index.test.js @@ -113,6 +113,22 @@ describe('Middleware Runtime', () => { }) }) + it('should have valid middleware field in manifest', async () => { + const manifest = await fs.readJSON( + join(context.appDir, '.next/server/middleware-manifest.json') + ) + expect(manifest.middleware).toEqual({ + '/': { + env: ['MIDDLEWARE_TEST'], + files: ['server/edge-runtime-webpack.js', 'server/middleware.js'], + name: 'middleware', + page: '/', + regexp: '^/.*$', + wasm: [], + }, + }) + }) + it('should have middleware warning during build', () => { expect(context.buildLogs.output).toContain(middlewareWarning) })