diff --git a/src/build/functions/edge.ts b/src/build/functions/edge.ts index 01c85dd342..75fd3bcef8 100644 --- a/src/build/functions/edge.ts +++ b/src/build/functions/edge.ts @@ -117,7 +117,8 @@ const writeHandlerFile = async ( basePath: nextConfig.basePath, i18n: nextConfig.i18n, trailingSlash: nextConfig.trailingSlash, - skipMiddlewareUrlNormalize: nextConfig.skipMiddlewareUrlNormalize, + skipMiddlewareUrlNormalize: + nextConfig.skipProxyUrlNormalize ?? nextConfig.skipMiddlewareUrlNormalize, } await writeFile( diff --git a/tests/fixtures/middleware-i18n-skip-normalize/middleware-shared.ts b/tests/fixtures/middleware-i18n-skip-normalize/middleware-shared.ts index 976afb54db..145e7e3883 100644 --- a/tests/fixtures/middleware-i18n-skip-normalize/middleware-shared.ts +++ b/tests/fixtures/middleware-i18n-skip-normalize/middleware-shared.ts @@ -23,6 +23,13 @@ const getResponse = (request: NextRequest) => { return NextResponse.next() } + // this is needed for tests to assert next + if (url.pathname.includes('dynamic/test')) { + const response = NextResponse.next() + response.headers.set('x-next-url-pathname', request.nextUrl.pathname) + return response + } + if (url.pathname === '/old-home') { if (url.searchParams.get('override') === 'external') { return NextResponse.redirect('https://example.vercel.sh') diff --git a/tests/fixtures/proxy-i18n-skip-normalize/next.config.js b/tests/fixtures/proxy-i18n-skip-normalize/next.config.js new file mode 100644 index 0000000000..073c862c7b --- /dev/null +++ b/tests/fixtures/proxy-i18n-skip-normalize/next.config.js @@ -0,0 +1,24 @@ +module.exports = { + output: 'standalone', + distDir: '.next', + generateBuildId: () => 'build-id', + i18n: { + locales: ['en', 'fr', 'nl', 'es'], + defaultLocale: 'en', + }, + skipProxyUrlNormalize: true, + experimental: { + clientRouterFilter: true, + clientRouterFilterRedirects: true, + }, + redirects() { + return [ + { + source: '/to-new', + destination: '/dynamic/new', + permanent: false, + }, + ] + }, + outputFileTracingRoot: __dirname, +} diff --git a/tests/fixtures/proxy-i18n-skip-normalize/package.json b/tests/fixtures/proxy-i18n-skip-normalize/package.json new file mode 100644 index 0000000000..5dc69bbb73 --- /dev/null +++ b/tests/fixtures/proxy-i18n-skip-normalize/package.json @@ -0,0 +1,23 @@ +{ + "name": "proxy-i18n-skip-normalize", + "version": "0.1.0", + "private": true, + "scripts": { + "postinstall": "npm run build", + "dev": "next dev", + "build": "next build" + }, + "dependencies": { + "next": "latest", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "@types/react": "18.2.47" + }, + "test": { + "dependencies": { + "next": ">=16.0.0-alpha.0" + } + } +} diff --git a/tests/fixtures/proxy-i18n-skip-normalize/pages/dynamic/[slug].js b/tests/fixtures/proxy-i18n-skip-normalize/pages/dynamic/[slug].js new file mode 100644 index 0000000000..61131835fa --- /dev/null +++ b/tests/fixtures/proxy-i18n-skip-normalize/pages/dynamic/[slug].js @@ -0,0 +1,15 @@ +export default function Account({ slug }) { + return ( +
+ Welcome to a /dynamic/[slug]: {slug} +
+ ) +} + +export function getServerSideProps({ params }) { + return { + props: { + slug: params.slug, + }, + } +} diff --git a/tests/fixtures/proxy-i18n-skip-normalize/proxy.ts b/tests/fixtures/proxy-i18n-skip-normalize/proxy.ts new file mode 100644 index 0000000000..1763ebc933 --- /dev/null +++ b/tests/fixtures/proxy-i18n-skip-normalize/proxy.ts @@ -0,0 +1,22 @@ +import type { NextRequest } from 'next/server' +import { NextResponse } from 'next/server' + +export async function proxy(request: NextRequest) { + const response = NextResponse.next() + + if (response) { + response.headers.append('Deno' in globalThis ? 'x-deno' : 'x-node', Date.now().toString()) + // report Next.js Middleware Runtime (not the execution runtime, but target runtime) + // @ts-expect-error EdgeRuntime global not declared + response.headers.append('x-runtime', typeof EdgeRuntime !== 'undefined' ? EdgeRuntime : 'node') + response.headers.set('x-hello-from-middleware-res', 'hello') + + response.headers.set('x-next-url-pathname', request.nextUrl.pathname) + + return response + } +} + +export const config = { + runtime: 'nodejs', +} diff --git a/tests/integration/middleware.test.ts b/tests/integration/middleware.test.ts index 04153c97de..2ac096082e 100644 --- a/tests/integration/middleware.test.ts +++ b/tests/integration/middleware.test.ts @@ -11,7 +11,7 @@ import { } from '../utils/fixture.js' import { generateRandomObjectID, startMockBlobStore } from '../utils/helpers.js' import { LocalServer } from '../utils/local-server.js' -import { hasNodeMiddlewareSupport } from '../utils/next-version-helpers.mjs' +import { hasNodeMiddlewareSupport, nextVersionSatisfies } from '../utils/next-version-helpers.mjs' beforeEach