From 3c385e63cb5600db115d1ef73e0a6dcbdd8c4868 Mon Sep 17 00:00:00 2001 From: feugy Date: Thu, 9 Jun 2022 11:45:04 +0200 Subject: [PATCH 1/2] chore: narrows regexp to enable middleware source maps --- .../webpack/loaders/next-middleware-loader.ts | 4 +- .../plugins/middleware-source-maps-plugin.ts | 7 +- packages/next/lib/constants.ts | 3 +- .../index.test.ts | 77 +++++++++---------- 4 files changed, 47 insertions(+), 44 deletions(-) diff --git a/packages/next/build/webpack/loaders/next-middleware-loader.ts b/packages/next/build/webpack/loaders/next-middleware-loader.ts index 6b37f183d1666..62f28910b80e1 100644 --- a/packages/next/build/webpack/loaders/next-middleware-loader.ts +++ b/packages/next/build/webpack/loaders/next-middleware-loader.ts @@ -1,6 +1,6 @@ import { getModuleBuildInfo } from './get-module-build-info' import { stringifyRequest } from '../stringify-request' -import { MIDDLEWARE_FILENAME } from '../../../lib/constants' +import { MIDDLEWARE_LOCATION_REGEXP } from '../../../lib/constants' export type MiddlewareLoaderOptions = { absolutePagePath: string @@ -16,7 +16,7 @@ export default function middlewareLoader(this: any) { buildInfo.nextEdgeMiddleware = { matcherRegexp, page: - page.replace(new RegExp(`/(?:src/)?${MIDDLEWARE_FILENAME}$`), '') || '/', + page.replace(new RegExp(`/${MIDDLEWARE_LOCATION_REGEXP}$`), '') || '/', } return ` diff --git a/packages/next/build/webpack/plugins/middleware-source-maps-plugin.ts b/packages/next/build/webpack/plugins/middleware-source-maps-plugin.ts index 2b5b3a8c73ae5..4f2fbce9d3b10 100644 --- a/packages/next/build/webpack/plugins/middleware-source-maps-plugin.ts +++ b/packages/next/build/webpack/plugins/middleware-source-maps-plugin.ts @@ -1,5 +1,5 @@ import { webpack } from 'next/dist/compiled/webpack/webpack' -import { MIDDLEWARE_FILENAME } from '../../../lib/constants' +import { MIDDLEWARE_LOCATION_REGEXP } from '../../../lib/constants' import type { webpack5 } from 'next/dist/compiled/webpack/webpack' /** @@ -10,7 +10,10 @@ export const getMiddlewareSourceMapPlugins = () => { return [ new webpack.SourceMapDevToolPlugin({ filename: '[file].map', - include: [new RegExp(`${MIDDLEWARE_FILENAME}.`), /^edge-chunks\//], + include: [ + new RegExp(`^${MIDDLEWARE_LOCATION_REGEXP}\\.`), + /^edge-chunks\//, + ], }), new MiddlewareSourceMapsPlugin(), ] diff --git a/packages/next/lib/constants.ts b/packages/next/lib/constants.ts index 95ccef2b7ddd7..09f47bfa1d30d 100644 --- a/packages/next/lib/constants.ts +++ b/packages/next/lib/constants.ts @@ -18,8 +18,9 @@ export const NEXT_PROJECT_ROOT_DIST_SERVER = join( // Regex for API routes export const API_ROUTE = /^\/api(?:\/|$)/ -// Regex for middleware +// Patterns to detect middleware files export const MIDDLEWARE_FILENAME = 'middleware' +export const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}` // Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path, // we have to use a private alias diff --git a/test/production/generate-middleware-source-maps/index.test.ts b/test/production/generate-middleware-source-maps/index.test.ts index 9428992b0cd98..c39d9d5ed48b5 100644 --- a/test/production/generate-middleware-source-maps/index.test.ts +++ b/test/production/generate-middleware-source-maps/index.test.ts @@ -3,33 +3,28 @@ import { NextInstance } from 'test/lib/next-modes/base' import fs from 'fs-extra' import path from 'path' +const files = { + 'pages/index.js': ` + export default function () { return
Hello, world!
} + `, + 'middleware.js': ` + import { NextResponse } from "next/server"; + export default function middleware() { + return NextResponse.next(); + } + `, +} + describe('experimental.middlewareSourceMaps: true', () => { let next: NextInstance - beforeAll(async () => { - next = await createNext({ - nextConfig: { - experimental: { - middlewareSourceMaps: true, - }, - }, - files: { - 'pages/index.js': ` - export default function () { return
Hello, world!
} - `, - 'middleware.js': ` - import { NextResponse } from "next/server"; - export default function middleware() { - return NextResponse.next(); - } - `, - }, - dependencies: {}, - }) - }) - afterAll(() => next.destroy()) + const nextConfig = { experimental: { middlewareSourceMaps: true } } + + afterEach(() => next.destroy()) it('generates a source map', async () => { + next = await createNext({ nextConfig, files }) + const middlewarePath = path.resolve( next.testDir, '.next/server/middleware.js' @@ -37,30 +32,34 @@ describe('experimental.middlewareSourceMaps: true', () => { expect(await fs.pathExists(middlewarePath)).toEqual(true) expect(await fs.pathExists(`${middlewarePath}.map`)).toEqual(true) }) + + it('generates a source map from src', async () => { + next = await createNext({ + nextConfig, + files: Object.fromEntries( + Object.entries(files).map(([filename, content]) => [ + `src/${filename}`, + content, + ]) + ), + }) + + const middlewarePath = path.resolve( + next.testDir, + '.next/server/src/middleware.js' + ) + expect(await fs.pathExists(middlewarePath)).toEqual(true) + expect(await fs.pathExists(`${middlewarePath}.map`)).toEqual(true) + }) }) describe('experimental.middlewareSourceMaps: false', () => { let next: NextInstance - beforeAll(async () => { - next = await createNext({ - files: { - 'pages/index.js': ` - export default function () { return
Hello, world!
} - `, - 'middleware.js': ` - import { NextResponse } from "next/server"; - export default function middleware() { - return NextResponse.next(); - } - `, - }, - dependencies: {}, - }) - }) - afterAll(() => next.destroy()) + afterEach(() => next.destroy()) it('does not generate a source map', async () => { + next = await createNext({ files }) const middlewarePath = path.resolve( next.testDir, '.next/server/middleware.js' From 2bf62ecfb67bd16ebce1648fdb5dee532ee9ebd5 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Fri, 10 Jun 2022 19:57:52 -0500 Subject: [PATCH 2/2] update test --- test/integration/async-modules/test/index.test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/integration/async-modules/test/index.test.js b/test/integration/async-modules/test/index.test.js index 243987c5dca01..7a7d4efd790e0 100644 --- a/test/integration/async-modules/test/index.test.js +++ b/test/integration/async-modules/test/index.test.js @@ -78,7 +78,8 @@ function runTests(dev = false) { } }) - it('can render async AMP pages', async () => { + // TODO: investigate this test flaking + it.skip('can render async AMP pages', async () => { let browser try { browser = await webdriver(appPort, '/config')