diff --git a/src/run/handlers/server.ts b/src/run/handlers/server.ts index 436411c812..51cfb0290d 100644 --- a/src/run/handlers/server.ts +++ b/src/run/handlers/server.ts @@ -83,6 +83,15 @@ export default async (request: Request) => { }, }) + if (new URL(request.url).searchParams.get('__nextDataReq')) { + const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta') + // @ts-expect-error NEXT_REQUEST_META doesn't exist in IncomingMessage type + const meta = req[NEXT_REQUEST_META] ?? {} + meta.isNextDataReq = true + // @ts-expect-error NEXT_REQUEST_META doesn't exist in IncomingMessage type + req[NEXT_REQUEST_META] = meta + } + disableFaultyTransferEncodingHandling(res as unknown as ComputeJsOutgoingMessage) const requestContext = getRequestContext() ?? createRequestContext() diff --git a/tests/e2e/edge-middleware.test.ts b/tests/e2e/edge-middleware.test.ts index 0eda11b710..998eb8aff4 100644 --- a/tests/e2e/edge-middleware.test.ts +++ b/tests/e2e/edge-middleware.test.ts @@ -52,3 +52,23 @@ test('it should render OpenGraph image meta tag correctly', async ({ page, middl const size = await getImageSize(Buffer.from(imageBuffer), 'png') expect([size.width, size.height]).toEqual([1200, 630]) }) + +test('json data rewrite works', async ({ middlewarePages }) => { + const response = await fetch( + `${middlewarePages.url}/_next/data/build-id/sha.json?__nextDataReq=1`, + { + headers: { + 'x-nextjs-data': '1', + }, + }, + ) + + expect(response.ok).toBe(true) + const body = await response.text() + + expect(body).toMatch(/^{"pageProps":/) + + const data = JSON.parse(body) + + expect(data.pageProps.message).toBeDefined() +}) diff --git a/tests/utils/create-e2e-fixture.ts b/tests/utils/create-e2e-fixture.ts index 097bd4ac0d..31cf3496e1 100644 --- a/tests/utils/create-e2e-fixture.ts +++ b/tests/utils/create-e2e-fixture.ts @@ -325,6 +325,7 @@ export const fixtureFactories = { bun: () => createE2EFixture('simple', { packageManger: 'bun' }), middleware: () => createE2EFixture('middleware'), middlewareOg: () => createE2EFixture('middleware-og'), + middlewarePages: () => createE2EFixture('middleware-pages'), pageRouter: () => createE2EFixture('page-router'), pageRouterBasePathI18n: () => createE2EFixture('page-router-base-path-i18n'), turborepo: () =>