From bf7c0ef8cddda05f784cfd20f1e24ff3df9c76fa Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 11:01:25 +0200 Subject: [PATCH 01/20] fix: try building repro --- .../modified-tests/middleware-general/app/middleware.js | 8 ++++++++ .../modified-tests/middleware-general/test/index.test.ts | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/test/e2e/modified-tests/middleware-general/app/middleware.js b/test/e2e/modified-tests/middleware-general/app/middleware.js index 54e5b196af..8e65c84f34 100644 --- a/test/e2e/modified-tests/middleware-general/app/middleware.js +++ b/test/e2e/modified-tests/middleware-general/app/middleware.js @@ -1,5 +1,6 @@ /* global globalThis */ import { NextRequest, NextResponse, URLPattern } from 'next/server' +import { MiddlewareRequest } from '@netlify/next' import magicValue from 'shared-package' export const config = { regions: 'auto' } @@ -71,6 +72,13 @@ export async function middleware(request) { return NextResponse.rewrite(url) } + if (url.pathname === '/cookie-repro') { + const request = new MiddlewareRequest(nextRequest) + const response = await request.next() + response.cookies.set('foo', 'bar') + return response + } + if (url.pathname.startsWith('/fetch-user-agent-default')) { try { const apiRoute = new URL(url) diff --git a/test/e2e/modified-tests/middleware-general/test/index.test.ts b/test/e2e/modified-tests/middleware-general/test/index.test.ts index 62b3e6bf72..37b8116755 100644 --- a/test/e2e/modified-tests/middleware-general/test/index.test.ts +++ b/test/e2e/modified-tests/middleware-general/test/index.test.ts @@ -465,6 +465,12 @@ describe('Middleware Runtime', () => { expect(readMiddlewareError(response)).toContain(urlsError) }) + // https://github.com/netlify/pillar-support/issues/350 + it('supports setting cookies', async () => { + const response = await fetchViaHTTP(next.url, `/cookie-repro`) + expect(response.headers).toEqual(undefined) + }) + if (!(global as any).isNextDeploy) { // these errors differ on Vercel it('should throw when using Request with a relative URL', async () => { From f079df112a012b8f748c3f794f4964975dc6242b Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 11:21:23 +0200 Subject: [PATCH 02/20] fix: install next middleware before building --- test/e2e/modified-tests/middleware-general/app/next.config.js | 2 +- test/e2e/modified-tests/middleware-general/test/index.test.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/test/e2e/modified-tests/middleware-general/app/next.config.js b/test/e2e/modified-tests/middleware-general/app/next.config.js index 9308df9dcb..a27a91c01c 100644 --- a/test/e2e/modified-tests/middleware-general/app/next.config.js +++ b/test/e2e/modified-tests/middleware-general/app/next.config.js @@ -1,5 +1,5 @@ module.exports = { - i18n: { + __i18n: { locales: ['en', 'fr', 'nl'], defaultLocale: 'en', }, diff --git a/test/e2e/modified-tests/middleware-general/test/index.test.ts b/test/e2e/modified-tests/middleware-general/test/index.test.ts index 37b8116755..54209e5a83 100644 --- a/test/e2e/modified-tests/middleware-general/test/index.test.ts +++ b/test/e2e/modified-tests/middleware-general/test/index.test.ts @@ -44,6 +44,9 @@ describe('Middleware Runtime', () => { start: 'next start', }, }, + dependencies: { + '@netlify/next': '1.4.4', + }, startCommand: (global as any).isNextDev ? 'yarn dev' : 'yarn start', buildCommand: 'yarn build', env: { From 0ff3cf4008fbd393ee1823c62d2195eda4aab540 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 11:24:02 +0200 Subject: [PATCH 03/20] fix: update test expectation --- test/e2e/modified-tests/middleware-general/test/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/modified-tests/middleware-general/test/index.test.ts b/test/e2e/modified-tests/middleware-general/test/index.test.ts index 54209e5a83..4a3a8d0814 100644 --- a/test/e2e/modified-tests/middleware-general/test/index.test.ts +++ b/test/e2e/modified-tests/middleware-general/test/index.test.ts @@ -471,7 +471,7 @@ describe('Middleware Runtime', () => { // https://github.com/netlify/pillar-support/issues/350 it('supports setting cookies', async () => { const response = await fetchViaHTTP(next.url, `/cookie-repro`) - expect(response.headers).toEqual(undefined) + expect(response.headers['set-cookie']).toContain('foo') }) if (!(global as any).isNextDeploy) { From 6b8ae95bd45fbc5dcb8c2a13ba1232b1a2e750e7 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 11:31:14 +0200 Subject: [PATCH 04/20] fix: use local version of utils --- test/e2e/modified-tests/middleware-general/test/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/modified-tests/middleware-general/test/index.test.ts b/test/e2e/modified-tests/middleware-general/test/index.test.ts index 4a3a8d0814..224d91fdb5 100644 --- a/test/e2e/modified-tests/middleware-general/test/index.test.ts +++ b/test/e2e/modified-tests/middleware-general/test/index.test.ts @@ -45,7 +45,7 @@ describe('Middleware Runtime', () => { }, }, dependencies: { - '@netlify/next': '1.4.4', + '@netlify/next': 'file:' + join(__dirname, '../../../../../packages/next'), }, startCommand: (global as any).isNextDev ? 'yarn dev' : 'yarn start', buildCommand: 'yarn build', From 6ce0d371b2a0374eb99626224dffffaa2bcc19f8 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 11:31:29 +0200 Subject: [PATCH 05/20] fix: typo --- test/e2e/modified-tests/middleware-general/app/middleware.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/modified-tests/middleware-general/app/middleware.js b/test/e2e/modified-tests/middleware-general/app/middleware.js index 8e65c84f34..776ad31ea0 100644 --- a/test/e2e/modified-tests/middleware-general/app/middleware.js +++ b/test/e2e/modified-tests/middleware-general/app/middleware.js @@ -73,7 +73,7 @@ export async function middleware(request) { } if (url.pathname === '/cookie-repro') { - const request = new MiddlewareRequest(nextRequest) + const request = new MiddlewareRequest(request) const response = await request.next() response.cookies.set('foo', 'bar') return response From ad127f2dbd8b7bc05c6782f3f49a0a2f519ab10b Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 11:33:14 +0200 Subject: [PATCH 06/20] fix: some more --- .../modified-tests/middleware-general/app/middleware.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/e2e/modified-tests/middleware-general/app/middleware.js b/test/e2e/modified-tests/middleware-general/app/middleware.js index 776ad31ea0..d8bf7e1421 100644 --- a/test/e2e/modified-tests/middleware-general/app/middleware.js +++ b/test/e2e/modified-tests/middleware-general/app/middleware.js @@ -73,10 +73,10 @@ export async function middleware(request) { } if (url.pathname === '/cookie-repro') { - const request = new MiddlewareRequest(request) - const response = await request.next() - response.cookies.set('foo', 'bar') - return response + const mwRequest = new MiddlewareRequest(request) + const mwResponse = await mwRequest.next() + mwResponse.cookies.set('foo', 'bar') + return mwResponse } if (url.pathname.startsWith('/fetch-user-agent-default')) { From 188c283c5167c40c00df399db6616d5503c49c43 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 12:16:49 +0200 Subject: [PATCH 07/20] fix: the bug --- packages/runtime/src/templates/edge-shared/utils.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/runtime/src/templates/edge-shared/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts index c1e5004168..d0bc3a821d 100644 --- a/packages/runtime/src/templates/edge-shared/utils.ts +++ b/packages/runtime/src/templates/edge-shared/utils.ts @@ -184,6 +184,12 @@ export const buildResponse = async ({ if (request.method === 'HEAD' || request.method === 'OPTIONS') { return response.originResponse } + + // NextResponse doesn't set cookies onto the originResponse, so we need to copy them over + if (response.headers.has("set-cookie")) { + response.originResponse.set("set-cookie", response.headers.get("set-cookie")) + } + // If it's JSON we don't need to use the rewriter, we can just parse it if (response.originResponse.headers.get('content-type')?.includes('application/json')) { const props = await response.originResponse.json() From e87c484f944b7da6759ea819a3cb749e854a2192 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 12:21:04 +0200 Subject: [PATCH 08/20] fix: typo --- packages/runtime/src/templates/edge-shared/utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/runtime/src/templates/edge-shared/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts index d0bc3a821d..4dea0f0259 100644 --- a/packages/runtime/src/templates/edge-shared/utils.ts +++ b/packages/runtime/src/templates/edge-shared/utils.ts @@ -186,8 +186,8 @@ export const buildResponse = async ({ } // NextResponse doesn't set cookies onto the originResponse, so we need to copy them over - if (response.headers.has("set-cookie")) { - response.originResponse.set("set-cookie", response.headers.get("set-cookie")) + if (response.headers.has('set-cookie')) { + response.originResponse.set('set-cookie', response.headers.get('set-cookie')) } // If it's JSON we don't need to use the rewriter, we can just parse it From 3395f20001c3233be509585b8418841ee3c76170 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 12:21:18 +0200 Subject: [PATCH 09/20] fix: revert changes to next.config.js --- test/e2e/modified-tests/middleware-general/app/next.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/modified-tests/middleware-general/app/next.config.js b/test/e2e/modified-tests/middleware-general/app/next.config.js index a27a91c01c..9308df9dcb 100644 --- a/test/e2e/modified-tests/middleware-general/app/next.config.js +++ b/test/e2e/modified-tests/middleware-general/app/next.config.js @@ -1,5 +1,5 @@ module.exports = { - __i18n: { + i18n: { locales: ['en', 'fr', 'nl'], defaultLocale: 'en', }, From b93c80ad99596c86f2eb28a75d355a1c99deb44d Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 12:23:17 +0200 Subject: [PATCH 10/20] fix: typo --- packages/runtime/src/templates/edge-shared/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime/src/templates/edge-shared/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts index 4dea0f0259..b5dcc48ff1 100644 --- a/packages/runtime/src/templates/edge-shared/utils.ts +++ b/packages/runtime/src/templates/edge-shared/utils.ts @@ -187,7 +187,7 @@ export const buildResponse = async ({ // NextResponse doesn't set cookies onto the originResponse, so we need to copy them over if (response.headers.has('set-cookie')) { - response.originResponse.set('set-cookie', response.headers.get('set-cookie')) + result.originResponse.headers.set('set-cookie', response.headers.get('set-cookie')) } // If it's JSON we don't need to use the rewriter, we can just parse it From f841be229d1d5382b2e57f3594d6ebb49b141528 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 12:23:47 +0200 Subject: [PATCH 11/20] fix: oops --- packages/runtime/src/templates/edge-shared/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime/src/templates/edge-shared/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts index b5dcc48ff1..87ac2aee4b 100644 --- a/packages/runtime/src/templates/edge-shared/utils.ts +++ b/packages/runtime/src/templates/edge-shared/utils.ts @@ -187,7 +187,7 @@ export const buildResponse = async ({ // NextResponse doesn't set cookies onto the originResponse, so we need to copy them over if (response.headers.has('set-cookie')) { - result.originResponse.headers.set('set-cookie', response.headers.get('set-cookie')) + response.originResponse.headers.set('set-cookie', response.headers.get('set-cookie')) } // If it's JSON we don't need to use the rewriter, we can just parse it From 69047bb9710c97bbc4aaaa8df20c571c05427bed Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 12:25:03 +0200 Subject: [PATCH 12/20] fix: header exists (see .has above) --- packages/runtime/src/templates/edge-shared/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime/src/templates/edge-shared/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts index 87ac2aee4b..9f443ccb0d 100644 --- a/packages/runtime/src/templates/edge-shared/utils.ts +++ b/packages/runtime/src/templates/edge-shared/utils.ts @@ -187,7 +187,7 @@ export const buildResponse = async ({ // NextResponse doesn't set cookies onto the originResponse, so we need to copy them over if (response.headers.has('set-cookie')) { - response.originResponse.headers.set('set-cookie', response.headers.get('set-cookie')) + response.originResponse.headers.set('set-cookie', response.headers.get('set-cookie')!) } // If it's JSON we don't need to use the rewriter, we can just parse it From c9fadfb47db4bdf374d61da1c1fe7ae2568774d1 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 12:35:58 +0200 Subject: [PATCH 13/20] fix: use headers.get --- test/e2e/modified-tests/middleware-general/test/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/modified-tests/middleware-general/test/index.test.ts b/test/e2e/modified-tests/middleware-general/test/index.test.ts index 224d91fdb5..0614126622 100644 --- a/test/e2e/modified-tests/middleware-general/test/index.test.ts +++ b/test/e2e/modified-tests/middleware-general/test/index.test.ts @@ -471,7 +471,7 @@ describe('Middleware Runtime', () => { // https://github.com/netlify/pillar-support/issues/350 it('supports setting cookies', async () => { const response = await fetchViaHTTP(next.url, `/cookie-repro`) - expect(response.headers['set-cookie']).toContain('foo') + expect(response.headers.get('set-cookie')).toContain('foo') }) if (!(global as any).isNextDeploy) { From f4a2f9851a8cb91c5bea36df229178d5d84defb4 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 15:51:50 +0200 Subject: [PATCH 14/20] fix: move test into cypress code --- cypress/integration/middleware/standard.spec.ts | 6 ++++++ demos/middleware/middleware.ts | 7 +++++++ demos/middleware/pages/cookies/middleware.js | 9 +++++++++ packages/next/src/middleware/response.ts | 10 +++++++++- packages/runtime/src/templates/edge-shared/utils.ts | 9 +++++++-- 5 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 demos/middleware/pages/cookies/middleware.js diff --git a/cypress/integration/middleware/standard.spec.ts b/cypress/integration/middleware/standard.spec.ts index 97387b7ca0..d98bd17f34 100644 --- a/cypress/integration/middleware/standard.spec.ts +++ b/cypress/integration/middleware/standard.spec.ts @@ -37,6 +37,12 @@ describe('Standard middleware', () => { cy.getCookie('netlifyCookie').should('have.property', 'value', 'true') }) }) + + it('MiddlewareResponse adds cookies', () => { + cy.request('/cookies/middleware').then(() => { + cy.getCookie('middlewareCookie').should('have.property', 'value', 'true') + }) + }) }) describe('Middleware matchers', () => { diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index d0c7841997..22bbaf4ab0 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -53,6 +53,13 @@ export async function middleware(req: NextRequest) { return request.rewrite('/api/hello') } + if (pathname.startsWith('/cookies/middleware')) { + const response = await new MiddlewareRequest(req).next() + console.log(response.cookies) + response.cookies.set('middlewareCookie', 'true') + return response + } + if (pathname.startsWith('/cookies')) { response = NextResponse.next() response.cookies.set('netlifyCookie', 'true') diff --git a/demos/middleware/pages/cookies/middleware.js b/demos/middleware/pages/cookies/middleware.js new file mode 100644 index 0000000000..15f61a1b36 --- /dev/null +++ b/demos/middleware/pages/cookies/middleware.js @@ -0,0 +1,9 @@ +const Cookies = () => { + return ( +
+

The cookie "middlewareCookie" should be set to true

+
+ ) +} + +export default Cookies diff --git a/packages/next/src/middleware/response.ts b/packages/next/src/middleware/response.ts index 392171bec0..2e3eb519b9 100644 --- a/packages/next/src/middleware/response.ts +++ b/packages/next/src/middleware/response.ts @@ -11,7 +11,15 @@ export class MiddlewareResponse extends NextResponse { private readonly dataTransforms: NextDataTransform[] private readonly elementHandlers: Array<[selector: string, handlers: ElementHandlers]> constructor(public originResponse: Response) { - super() + // we need to propagate the set-cookie header, so response.cookies.get works correctly + const initHeaders = new Headers() + if (originResponse.headers.has('set-cookie')) { + initHeaders.set('set-cookie', originResponse.headers.get('set-cookie')) + } + + super(undefined, { + headers: initHeaders, + }) // These are private in Node when compiling, but we access them in Deno at runtime Object.defineProperty(this, 'dataTransforms', { diff --git a/packages/runtime/src/templates/edge-shared/utils.ts b/packages/runtime/src/templates/edge-shared/utils.ts index 9f443ccb0d..35dbd3bb5a 100644 --- a/packages/runtime/src/templates/edge-shared/utils.ts +++ b/packages/runtime/src/templates/edge-shared/utils.ts @@ -57,10 +57,15 @@ export const addMiddlewareHeaders = async ( return response } +interface ResponseCookies { + readonly _headers: Headers +} + interface MiddlewareResponse extends Response { originResponse: Response dataTransforms: NextDataTransform[] elementHandlers: Array<[selector: string, handlers: ElementHandlers]> + get cookies(): ResponseCookies } interface MiddlewareRequest { @@ -186,8 +191,8 @@ export const buildResponse = async ({ } // NextResponse doesn't set cookies onto the originResponse, so we need to copy them over - if (response.headers.has('set-cookie')) { - response.originResponse.headers.set('set-cookie', response.headers.get('set-cookie')!) + if (response.cookies._headers.has('set-cookie')) { + response.originResponse.headers.set('set-cookie', response.cookies._headers.get('set-cookie')!) } // If it's JSON we don't need to use the rewriter, we can just parse it From ce7d5ad4a54ddbeb63eb951d430abe0da0e6878b Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 15:53:24 +0200 Subject: [PATCH 15/20] fix: revert changes to e2e --- cypress/integration/middleware/standard.spec.ts | 3 ++- .../modified-tests/middleware-general/app/middleware.js | 7 ------- .../modified-tests/middleware-general/test/index.test.ts | 9 --------- 3 files changed, 2 insertions(+), 17 deletions(-) diff --git a/cypress/integration/middleware/standard.spec.ts b/cypress/integration/middleware/standard.spec.ts index d98bd17f34..57adb05bcf 100644 --- a/cypress/integration/middleware/standard.spec.ts +++ b/cypress/integration/middleware/standard.spec.ts @@ -38,7 +38,8 @@ describe('Standard middleware', () => { }) }) - it('MiddlewareResponse adds cookies', () => { + // https://github.com/netlify/pillar-support/issues/350 + it('MiddlewareResponse adds cookies', () => { cy.request('/cookies/middleware').then(() => { cy.getCookie('middlewareCookie').should('have.property', 'value', 'true') }) diff --git a/test/e2e/modified-tests/middleware-general/app/middleware.js b/test/e2e/modified-tests/middleware-general/app/middleware.js index d8bf7e1421..de26f85cca 100644 --- a/test/e2e/modified-tests/middleware-general/app/middleware.js +++ b/test/e2e/modified-tests/middleware-general/app/middleware.js @@ -72,13 +72,6 @@ export async function middleware(request) { return NextResponse.rewrite(url) } - if (url.pathname === '/cookie-repro') { - const mwRequest = new MiddlewareRequest(request) - const mwResponse = await mwRequest.next() - mwResponse.cookies.set('foo', 'bar') - return mwResponse - } - if (url.pathname.startsWith('/fetch-user-agent-default')) { try { const apiRoute = new URL(url) diff --git a/test/e2e/modified-tests/middleware-general/test/index.test.ts b/test/e2e/modified-tests/middleware-general/test/index.test.ts index 0614126622..62b3e6bf72 100644 --- a/test/e2e/modified-tests/middleware-general/test/index.test.ts +++ b/test/e2e/modified-tests/middleware-general/test/index.test.ts @@ -44,9 +44,6 @@ describe('Middleware Runtime', () => { start: 'next start', }, }, - dependencies: { - '@netlify/next': 'file:' + join(__dirname, '../../../../../packages/next'), - }, startCommand: (global as any).isNextDev ? 'yarn dev' : 'yarn start', buildCommand: 'yarn build', env: { @@ -468,12 +465,6 @@ describe('Middleware Runtime', () => { expect(readMiddlewareError(response)).toContain(urlsError) }) - // https://github.com/netlify/pillar-support/issues/350 - it('supports setting cookies', async () => { - const response = await fetchViaHTTP(next.url, `/cookie-repro`) - expect(response.headers.get('set-cookie')).toContain('foo') - }) - if (!(global as any).isNextDeploy) { // these errors differ on Vercel it('should throw when using Request with a relative URL', async () => { From 3d38c55cec8763950b9cbbc4e0fc35114a4116ff Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 15:53:59 +0200 Subject: [PATCH 16/20] fix: remove console.log --- demos/middleware/middleware.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index 22bbaf4ab0..3a2a2b4156 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -55,7 +55,6 @@ export async function middleware(req: NextRequest) { if (pathname.startsWith('/cookies/middleware')) { const response = await new MiddlewareRequest(req).next() - console.log(response.cookies) response.cookies.set('middlewareCookie', 'true') return response } From 2e0f9d4b6665b5064a75f5e3196de3c1ffaba922 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 15:56:42 +0200 Subject: [PATCH 17/20] fix: add another assertion for headers --- cypress/integration/middleware/standard.spec.ts | 5 +++-- demos/middleware/middleware.ts | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cypress/integration/middleware/standard.spec.ts b/cypress/integration/middleware/standard.spec.ts index 57adb05bcf..780f9f0c85 100644 --- a/cypress/integration/middleware/standard.spec.ts +++ b/cypress/integration/middleware/standard.spec.ts @@ -39,9 +39,10 @@ describe('Standard middleware', () => { }) // https://github.com/netlify/pillar-support/issues/350 - it('MiddlewareResponse adds cookies', () => { - cy.request('/cookies/middleware').then(() => { + it('MiddlewareResponse adds cookies', () => { + cy.request('/cookies/middleware').then((response) => { cy.getCookie('middlewareCookie').should('have.property', 'value', 'true') + expect(response.headers).to.have.property('x-foo', 'bar') }) }) }) diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index 3a2a2b4156..eabd7a486d 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -56,6 +56,7 @@ export async function middleware(req: NextRequest) { if (pathname.startsWith('/cookies/middleware')) { const response = await new MiddlewareRequest(req).next() response.cookies.set('middlewareCookie', 'true') + response.headers.set('x-foo', 'bar') return response } From 0fe1289a162f381ada49dd8058aba447f7b063ff Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 4 Apr 2023 15:58:43 +0200 Subject: [PATCH 18/20] revert one more line --- test/e2e/modified-tests/middleware-general/app/middleware.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/e2e/modified-tests/middleware-general/app/middleware.js b/test/e2e/modified-tests/middleware-general/app/middleware.js index de26f85cca..54e5b196af 100644 --- a/test/e2e/modified-tests/middleware-general/app/middleware.js +++ b/test/e2e/modified-tests/middleware-general/app/middleware.js @@ -1,6 +1,5 @@ /* global globalThis */ import { NextRequest, NextResponse, URLPattern } from 'next/server' -import { MiddlewareRequest } from '@netlify/next' import magicValue from 'shared-package' export const config = { regions: 'auto' } From 8ac422a88fd1d2d03aa13a92d59c1f225f678180 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Tue, 4 Apr 2023 12:56:17 -0500 Subject: [PATCH 19/20] chore: trigger build From 8ffb737d0ce7683213f436406373086803be9cb4 Mon Sep 17 00:00:00 2001 From: taty2010 Date: Tue, 4 Apr 2023 14:38:17 -0500 Subject: [PATCH 20/20] chore: updated config to include cookies/middleware --- demos/middleware/middleware.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/middleware/middleware.ts b/demos/middleware/middleware.ts index eabd7a486d..5950c98671 100644 --- a/demos/middleware/middleware.ts +++ b/demos/middleware/middleware.ts @@ -136,8 +136,8 @@ export const config = { matcher: [ '/api/:all*', '/headers', + '/cookies/:path*', { source: '/static' }, - { source: '/cookies' }, { source: '/matcher-cookie'}, { source: '/shows/((?!99|88).*)' }, {