MCPcopy
hub / github.com/vercel/next.js / responseToMiddlewareResult

Function responseToMiddlewareResult

packages/next-routing/src/middleware.ts:13–204  ·  view source on GitHub ↗
(
  response: Response,
  requestHeaders: Headers,
  url: URL
)

Source from the content-addressed store, hash-verified

11 * @returns A MiddlewareResult object with processed headers and routing information
12 */
13export function responseToMiddlewareResult(
14 response: Response,
15 requestHeaders: Headers,
16 url: URL
17): MiddlewareResult {
18 const result: MiddlewareResult = {}
19
20 // Convert response headers to a mutable record
21 const middlewareHeaders: Record<string, string | string[] | undefined> = {}
22 response.headers.forEach((value, key) => {
23 if (middlewareHeaders[key]) {
24 // If header already exists, convert to array
25 const existing = middlewareHeaders[key]
26 if (Array.isArray(existing)) {
27 existing.push(value)
28 } else {
29 middlewareHeaders[key] = [existing as string, value]
30 }
31 } else {
32 middlewareHeaders[key] = value
33 }
34 })
35
36 // Handle x-middleware-override-headers
37 // This special header contains a comma-separated list of header keys that should be overridden
38 if (middlewareHeaders['x-middleware-override-headers']) {
39 const overriddenHeaders: Set<string> = new Set()
40 let overrideHeaders: string | string[] =
41 middlewareHeaders['x-middleware-override-headers']
42
43 if (typeof overrideHeaders === 'string') {
44 overrideHeaders = overrideHeaders.split(',')
45 }
46
47 for (const key of overrideHeaders) {
48 overriddenHeaders.add(key.trim())
49 }
50 delete middlewareHeaders['x-middleware-override-headers']
51
52 // Delete headers not in the override list
53 const headersToDelete: string[] = []
54 requestHeaders.forEach((_, key) => {
55 if (!overriddenHeaders.has(key)) {
56 headersToDelete.push(key)
57 }
58 })
59 for (const key of headersToDelete) {
60 requestHeaders.delete(key)
61 }
62
63 // Update or add headers from the override list
64 for (const key of overriddenHeaders.keys()) {
65 const valueKey = 'x-middleware-request-' + key
66 const newValue = middlewareHeaders[valueKey]
67
68 if (newValue === undefined || newValue === null) {
69 // If no value provided, delete the header
70 requestHeaders.delete(key)

Callers 1

middleware.test.tsFile · 0.90

Calls 15

isArrayMethod · 0.80
splitMethod · 0.80
trimMethod · 0.80
includesMethod · 0.80
getRelativeURLFunction · 0.70
pushMethod · 0.65
keysMethod · 0.65
setMethod · 0.65
forEachMethod · 0.45
addMethod · 0.45
hasMethod · 0.45
deleteMethod · 0.45

Tested by

no test coverage detected