From 5369c26778445fd35b856af076217c58bad9752e Mon Sep 17 00:00:00 2001 From: taty2010 Date: Mon, 26 Jun 2023 16:51:56 -0500 Subject: [PATCH 1/2] fix: adding headers fix --- cypress/e2e/middleware/enhanced.cy.ts | 6 ++++++ demos/middleware/middleware.ts | 8 +++++++- packages/next/src/middleware/response.ts | 7 ++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/middleware/enhanced.cy.ts b/cypress/e2e/middleware/enhanced.cy.ts index 60445f3140..f757d44a3e 100644 --- a/cypress/e2e/middleware/enhanced.cy.ts +++ b/cypress/e2e/middleware/enhanced.cy.ts @@ -13,6 +13,12 @@ describe('Enhanced middleware', () => { }) }) + it.skip('passes in headers within request.rewrite()', () => { + cy.request('/request-rewrite').then((response) => { + expect(response.headers).to.have.property('x-rewrite-test', 'hello') + }) + }) + it('rewrites the response body using request.next()', () => { cy.visit('/static') cy.get('#message').contains('This was static (& escaping test &) but has been transformed in') diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index d93e5fa9b6..c41bf7ac9e 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -38,7 +38,13 @@ export async function middleware(req: NextRequest) { if (pathname.startsWith('/request-rewrite')) { // request.rewrite() should return the MiddlewareResponse object instead of the Response object. - const res = await request.rewrite('/static-rewrite') + const res = await request.rewrite('/static-rewrite', + { + headers: { + 'x-rewrite-test': 'hello', + 'x-rewrite-test-2': 'hello-2' + } + }) const message = `This was static (& escaping test &) but has been transformed in ${req.geo?.city}` // Transform the response HTML and props diff --git a/packages/next/src/middleware/response.ts b/packages/next/src/middleware/response.ts index 90b9a9244a..2f96c4877f 100644 --- a/packages/next/src/middleware/response.ts +++ b/packages/next/src/middleware/response.ts @@ -11,7 +11,6 @@ export class MiddlewareResponse extends NextResponse { private readonly dataTransforms: NextDataTransform[] private readonly elementHandlers: Array<[selector: string, handlers: ElementHandlers]> - // eslint-disable-next-line @typescript-eslint/no-unused-vars constructor(public originResponse: Response, init?: ResponseInit) { // we need to propagate the set-cookie header, so response.cookies.get works correctly const initHeaders = new Headers() @@ -23,6 +22,12 @@ export class MiddlewareResponse extends NextResponse { headers: initHeaders, }) + if (init?.headers) { + Object.entries(init.headers).forEach(([key, value]) => { + this.headers.set(key, value) + }) + } + // These are private in Node when compiling, but we access them in Deno at runtime Object.defineProperty(this, 'dataTransforms', { value: [], From a0bbac6177d094c3c0a945d510727ca1a75967c1 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Wed, 28 Jun 2023 09:52:30 -0500 Subject: [PATCH 2/2] chore: remove skip --- cypress/e2e/middleware/enhanced.cy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/e2e/middleware/enhanced.cy.ts b/cypress/e2e/middleware/enhanced.cy.ts index f757d44a3e..2a05e6ee16 100644 --- a/cypress/e2e/middleware/enhanced.cy.ts +++ b/cypress/e2e/middleware/enhanced.cy.ts @@ -13,7 +13,7 @@ describe('Enhanced middleware', () => { }) }) - it.skip('passes in headers within request.rewrite()', () => { + it('passes in headers within request.rewrite()', () => { cy.request('/request-rewrite').then((response) => { expect(response.headers).to.have.property('x-rewrite-test', 'hello') })