Skip to content

Commit 4526461

Browse files
committed
fix: add the modified middleware headers to the request, not response
update the related tests
1 parent 124d15b commit 4526461

File tree

2 files changed

+33
-27
lines changed

2 files changed

+33
-27
lines changed

packages/runtime/src/templates/edge-shared/utils.test.ts

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,23 @@ describe('updateModifiedHeaders', () => {
99
// been modified with 'x-middleware-request' added to it, this is more to confirm the test case
1010
mockHeaders.set('x-middleware-request-foo', 'bar')
1111

12-
const mockResult: FetchEventResult = {
13-
response: new Response('', { headers: mockHeaders }),
14-
waitUntil: Promise.resolve(),
12+
const mockResponse = {
13+
headers: mockHeaders
1514
}
1615

17-
mockResult.response = updateModifiedHeaders(mockResult.response)
16+
const mockRequest = {
17+
headers: new Headers()
18+
}
19+
20+
updateModifiedHeaders(mockRequest.headers, mockResponse.headers)
1821

19-
assertEquals(mockResult.response.headers.get('x-middleware-request-foo'), 'bar')
22+
assertEquals(mockRequest.headers.get('x-middleware-request-foo'), null)
2023
})
2124

2225
describe("when the 'x-middleware-override-headers' headers is present", () => {
2326
let mockHeaders
24-
let mockResult: FetchEventResult
27+
let mockRequest: { headers: Headers }
28+
let mockResponse: { headers: Headers }
2529

2630
beforeEach(() => {
2731
mockHeaders = new Headers()
@@ -30,28 +34,31 @@ describe('updateModifiedHeaders', () => {
3034
mockHeaders.set('x-middleware-request-test', '123')
3135
mockHeaders.set('x-middleware-override-headers', 'hello,test')
3236

33-
mockResult = {
34-
response: new Response('', { headers: mockHeaders }),
35-
waitUntil: Promise.resolve(),
37+
mockRequest = {
38+
headers: new Headers()
39+
}
40+
41+
mockResponse = {
42+
headers: mockHeaders
3643
}
3744

38-
mockResult.response = updateModifiedHeaders(mockResult.response)
45+
updateModifiedHeaders(mockRequest.headers, mockResponse.headers)
3946
})
4047

41-
it("does not modify headers that are missing 'x-middleware-request' in the name", () => {
42-
assertEquals(mockResult.response.headers.get('foo'), 'bar')
48+
it("does not modify or add headers that are missing 'x-middleware-request' in the name", () => {
49+
assertEquals(mockRequest.headers.get('foo'), null)
4350
})
4451

4552
it("removes 'x-middleware-request-' from headers", () => {
46-
assertEquals(mockResult.response.headers.get('x-middleware-request-hello'), null)
47-
assertEquals(mockResult.response.headers.get('x-middleware-request-test'), null)
53+
assertEquals(mockRequest.headers.get('x-middleware-request-hello'), null)
54+
assertEquals(mockRequest.headers.get('x-middleware-request-test'), null)
4855

49-
assertEquals(mockResult.response.headers.get('hello'), 'world')
50-
assertEquals(mockResult.response.headers.get('test'), '123')
56+
assertEquals(mockRequest.headers.get('hello'), 'world')
57+
assertEquals(mockRequest.headers.get('test'), '123')
5158
})
5259

5360
it("removes 'x-middleware-override-headers' after cleaning headers", () => {
54-
assertEquals(mockResult.response.headers.get('x-middleware-override-headers'), null)
61+
assertEquals(mockRequest.headers.get('x-middleware-override-headers'), null)
5562
})
5663
})
5764
})

packages/runtime/src/templates/edge-shared/utils.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,25 +66,23 @@ function isMiddlewareResponse(response: Response | MiddlewareResponse): response
6666
// Related Next.js code:
6767
// * https://github.com/vercel/next.js/blob/68d06fe015b28d8f81da52ca107a5f4bd72ab37c/packages/next/server/next-server.ts#L1918-L1928
6868
// * https://github.com/vercel/next.js/blob/43c9d8940dc42337dd2f7d66aa90e6abf952278e/packages/next/server/web/spec-extension/response.ts#L10-L27
69-
export function updateModifiedHeaders(response: Response) {
70-
const overriddenHeaders = response.headers.get('x-middleware-override-headers')
69+
export function updateModifiedHeaders(requestHeaders: Headers, responseHeaders: Headers) {
70+
const overriddenHeaders = responseHeaders.get('x-middleware-override-headers')
7171

7272
if (!overriddenHeaders) {
73-
return response
73+
return
7474
}
7575

7676
const headersToUpdate = overriddenHeaders.split(',').map((header) => header.trim())
7777

7878
for (const header of headersToUpdate) {
7979
const oldHeaderKey = 'x-middleware-request-' + header
80-
const headerValue = response.headers.get(oldHeaderKey) || ''
80+
const headerValue = responseHeaders.get(oldHeaderKey) || ''
8181

82-
response.headers.set(header, headerValue)
83-
response.headers.delete(oldHeaderKey)
82+
requestHeaders.set(header, headerValue)
83+
responseHeaders.delete(oldHeaderKey)
8484
}
85-
response.headers.delete('x-middleware-override-headers')
86-
87-
return response
85+
responseHeaders.delete('x-middleware-override-headers')
8886
}
8987

9088
export const buildResponse = async ({
@@ -96,7 +94,8 @@ export const buildResponse = async ({
9694
request: Request
9795
context: Context
9896
}) => {
99-
result.response = updateModifiedHeaders(result.response)
97+
debugger
98+
updateModifiedHeaders(request.headers, result.response.headers)
10099

101100
// They've returned the MiddlewareRequest directly, so we'll call `next()` for them.
102101
if (isMiddlewareRequest(result.response)) {

0 commit comments

Comments
 (0)