Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add node middleware handling for turbopack #76360

Draft
wants to merge 1 commit into
base: canary
Choose a base branch
from

Conversation

ijjk
Copy link
Member

@ijjk ijjk commented Feb 22, 2025

No description provided.

@ijjk ijjk added created-by: Next.js team PRs by the Next.js team. tests Turbopack Related to Turbopack with Next.js. type: next labels Feb 22, 2025
@ijjk
Copy link
Member Author

ijjk commented Feb 22, 2025

Failing test suites

Commit: c4bdb8c

pnpm test-start-turbo test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts (turbopack)

  • dynamic-io > should produce dynamic pages when using async or sync cookies
  • dynamic-io > should be able to access cookie properties asynchronously
  • dynamic-io > should be able to access cookie properties synchronously
Expand output

● dynamic-io › should produce dynamic pages when using async or sync cookies

expect(received).toBe(expected) // Object.is equality

Expected: "hello"
Received: ""

  49 |         expect($('#layout').text()).toBe('at runtime')
  50 |         expect($('#page').text()).toBe('at runtime')
> 51 |         expect($('#x-sentinel').text()).toBe('hello')
     |                                         ^
  52 |       }
  53 |
  54 |       $ = await next.render$('/cookies/static-behavior/async', {})

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts:51:41)

● dynamic-io › should be able to access cookie properties asynchronously

expect(received).toContain(expected) // indexOf

Expected substring: "hello"
Received string:    ""

  89 |
  90 |     // For...of iteration
> 91 |     expect($('#for-of-x-sentinel').text()).toContain('hello')
     |                                            ^
  92 |     expect($('#for-of-x-sentinel-path').text()).toContain(
  93 |       '/cookies/exercise/async'
  94 |     )

  at Object.toContain (e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts:91:44)

● dynamic-io › should be able to access cookie properties synchronously

expect(received).toContain(expected) // indexOf

Expected substring: "hello"
Received string:    ""

  152 |
  153 |     // For...of iteration
> 154 |     expect($('#for-of-x-sentinel').text()).toContain('hello')
      |                                            ^
  155 |     expect($('#for-of-x-sentinel-path').text()).toContain(
  156 |       '/cookies/exercise/sync'
  157 |     )

  at Object.toContain (e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts:154:44)

Read more about building and testing Next.js in contributing.md.

pnpm test-start-turbo test/e2e/app-dir/hooks/hooks.test.ts (turbopack)

  • app dir - hooks > useSelectedLayoutSegments > should have the correct layout segments at /hooks/use-selected-layout-segment/rewritten-middleware
Expand output

● app dir - hooks › useSelectedLayoutSegments › should have the correct layout segments at /hooks/use-selected-layout-segment/rewritten-middleware

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  140 |         const $ = await next.render$(path)
  141 |
> 142 |         expect(JSON.parse($('#outer-layout').text())).toEqual(outerLayout)
      |                     ^
  143 |         expect(JSON.parse($('#inner-layout').text())).toEqual(innerLayout)
  144 |       }
  145 |     )

  at parse (e2e/app-dir/hooks/hooks.test.ts:142:21)

Read more about building and testing Next.js in contributing.md.

pnpm test-dev-turbo test/e2e/app-dir/dynamic-io/dynamic-io.date.test.ts (turbopack)

  • dynamic-io > should prerender pages with cached Date.now() calls
  • dynamic-io > should not prerender pages with uncached Date.now() calls
  • dynamic-io > should prerender pages with cached Date() calls
  • dynamic-io > should not prerender pages with uncached Date() calls
  • dynamic-io > should prerender pages with cached new Date() calls
  • dynamic-io > should not prerender pages with uncached new Date() calls
  • dynamic-io > should prerender pages with cached static Date instances like new Date(0)
  • dynamic-io > should not prerender pages with uncached static Date instances like new Date(0)
Expand output

● dynamic-io › should prerender pages with cached Date.now() calls

expect(received).toBe(expected) // Object.is equality

Expected: "at runtime"
Received: ""

  21 |     let $ = await next.render$('/date/now/cached', {})
  22 |     if (isNextDev) {
> 23 |       expect($('#layout').text()).toBe('at runtime')
     |                                   ^
  24 |       expect($('#page').text()).toBe('at runtime')
  25 |       expect($('#value').text()).toMatch(/^\d+$/)
  26 |     } else {

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.date.test.ts:23:35)

● dynamic-io › should not prerender pages with uncached Date.now() calls

expect(received).toBe(expected) // Object.is equality

Expected: "at runtime"
Received: ""

  34 |     let $ = await next.render$('/date/now/uncached', {})
  35 |     if (isNextDev) {
> 36 |       expect($('#layout').text()).toBe('at runtime')
     |                                   ^
  37 |       expect($('#page').text()).toBe('at runtime')
  38 |       expect($('#value').text()).toMatch(/^\d+$/)
  39 |     } else if (WITH_PPR) {

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.date.test.ts:36:35)

● dynamic-io › should prerender pages with cached Date() calls

expect(received).toBe(expected) // Object.is equality

Expected: "at runtime"
Received: ""

  51 |     let $ = await next.render$('/date/date/cached', {})
  52 |     if (isNextDev) {
> 53 |       expect($('#layout').text()).toBe('at runtime')
     |                                   ^
  54 |       expect($('#page').text()).toBe('at runtime')
  55 |       expect($('#value').text()).toContain('GMT')
  56 |     } else {

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.date.test.ts:53:35)

● dynamic-io › should not prerender pages with uncached Date() calls

expect(received).toBe(expected) // Object.is equality

Expected: "at runtime"
Received: ""

  64 |     let $ = await next.render$('/date/date/uncached', {})
  65 |     if (isNextDev) {
> 66 |       expect($('#layout').text()).toBe('at runtime')
     |                                   ^
  67 |       expect($('#page').text()).toBe('at runtime')
  68 |       expect($('#value').text()).toContain('GMT')
  69 |     } else if (WITH_PPR) {

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.date.test.ts:66:35)

● dynamic-io › should prerender pages with cached new Date() calls

expect(received).toBe(expected) // Object.is equality

Expected: "at runtime"
Received: ""

  81 |     let $ = await next.render$('/date/new-date/cached', {})
  82 |     if (isNextDev) {
> 83 |       expect($('#layout').text()).toBe('at runtime')
     |                                   ^
  84 |       expect($('#page').text()).toBe('at runtime')
  85 |       expect($('#value').text()).toContain('GMT')
  86 |     } else {

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.date.test.ts:83:35)

● dynamic-io › should not prerender pages with uncached new Date() calls

expect(received).toBe(expected) // Object.is equality

Expected: "at runtime"
Received: ""

  94 |     let $ = await next.render$('/date/new-date/uncached', {})
  95 |     if (isNextDev) {
> 96 |       expect($('#layout').text()).toBe('at runtime')
     |                                   ^
  97 |       expect($('#page').text()).toBe('at runtime')
  98 |       expect($('#value').text()).toContain('GMT')
  99 |     } else if (WITH_PPR) {

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.date.test.ts:96:35)

● dynamic-io › should prerender pages with cached static Date instances like new Date(0)

expect(received).toBe(expected) // Object.is equality

Expected: "at runtime"
Received: ""

  111 |     let $ = await next.render$('/date/static-date/cached', {})
  112 |     if (isNextDev) {
> 113 |       expect($('#layout').text()).toBe('at runtime')
      |                                   ^
  114 |       expect($('#page').text()).toBe('at runtime')
  115 |       expect($('#value').text()).toContain('GMT')
  116 |     } else {

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.date.test.ts:113:35)

● dynamic-io › should not prerender pages with uncached static Date instances like new Date(0)

expect(received).toBe(expected) // Object.is equality

Expected: "at runtime"
Received: ""

  124 |     let $ = await next.render$('/date/static-date/uncached', {})
  125 |     if (isNextDev) {
> 126 |       expect($('#layout').text()).toBe('at runtime')
      |                                   ^
  127 |       expect($('#page').text()).toBe('at runtime')
  128 |       expect($('#value').text()).toContain('GMT')
  129 |     } else {

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.date.test.ts:126:35)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/next-image-new/middleware/test/middleware-intercept-next-image.test.ts (turbopack)

  • Image is intercepted by Middleware > development mode > should find log from _next/image intercept
Expand output

● Image is intercepted by Middleware › development mode › should find log from _next/image intercept

expect(received).toContain(expected) // indexOf

Expected substring: "x-_next-image: /small.jpg"
Received string:    "   No config file found
   No config file found
   ▲ Next.js 15.2.0-canary.69 (Turbopack)
   - Local:        http://[::1]:43565
   - Network:      http://[::]:43565·
 ✓ Starting...
   No config file found
Creating turbopack project {
  dir: '/root/actions-runner/_work/next.js/next.js/test/integration/next-image-new/middleware',
  testMode: true
}
 ✓ Compiled in 168ms
   No config file found
 ✓ Ready in 870ms
   No config file found
 ○ Compiling /_error ...
 ✓ Compiled /_error in 909ms
 GET / 404 in 6ms
"

  36 |         await check(() => output, /compiled \//i)
  37 |
> 38 |         expect(output).toContain(`x-_next-image: /small.jpg`)
     |                        ^
  39 |       })
  40 |     }
  41 |   )

  at Object.toContain (integration/next-image-new/middleware/test/middleware-intercept-next-image.test.ts:38:24)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/middleware-basic/test/index.test.js (turbopack)

  • development mode > loads a middleware
Expand output

● development mode › loads a middleware

expect(received).toBe(expected) // Object.is equality

Expected: true
Received: false

  20 |   it('loads a middleware', async () => {
  21 |     const response = await fetchViaHTTP(appPort, '/post-1')
> 22 |     expect(response.headers.has(header)).toBe(true)
     |                                          ^
  23 |   })
  24 | }
  25 |

  at Object.toBe (integration/middleware-basic/test/index.test.js:22:42)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/router-rerender/test/index.test.js (turbopack)

  • router rerender > development mode > with middleware > should not trigger unnecessary rerenders when middleware is used
Expand output

● router rerender › development mode › with middleware › should not trigger unnecessary rerenders when middleware is used

expect(received).toEqual(expected) // deep equality

Expected: [undefined]
Received: undefined

  22 |       await new Promise((resolve) => setTimeout(resolve, 100))
  23 |
> 24 |       expect(await browser.eval('window.__renders')).toEqual([undefined])
     |                                                      ^
  25 |     })
  26 |   })
  27 |

  at Object.toEqual (integration/router-rerender/test/index.test.js:24:54)

Read more about building and testing Next.js in contributing.md.

__NEXT_EXPERIMENTAL_PPR=true pnpm test-dev test/development/app-dir/hydration-error-count/hydration-error-count.test.ts (PPR)

  • hydration-error-count > should display runtime error separately from hydration errors
Expand output

● hydration-error-count › should display runtime error separately from hydration errors

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `hydration-error-count should display runtime error separately from hydration errors 1`

- Snapshot  -  0
+ Received  + 16

@@ -1,6 +1,22 @@
  {
+   "componentStack": "...
+     <OuterLayoutRouter parallelRouterKey="children" template={<RenderFromTemplateContext>}>
+       <RenderFromTemplateContext>
+         <ScrollAndFocusHandler segmentPath={[...]}>
+           <InnerScrollAndFocusHandler segmentPath={[...]} focusAndScrollRef={{apply:false, ...}}>
+             <ErrorBoundary errorComponent={undefined} errorStyles={undefined} errorScripts={undefined}>
+               <LoadingBoundary loading={null}>
+                 <HTTPAccessFallbackBoundary notFound={undefined} forbidden={undefined} unauthorized={undefined}>
+                   <RedirectBoundary>
+                     <RedirectErrorBoundary router={{...}}>
+                       <InnerLayoutRouter url="/hydration..." tree={[...]} cacheNode={{lazyData:null, ...}} ...>
+                         <ClientPageRoot Component={function Page} searchParams={{}} params={{}}>
+                           <Page params={Promise} searchParams={Promise}>
+ >                           <p>
+ >                             <p>
+                         ...",
    "count": 3,
    "description": "In HTML, <p> cannot be a descendant of <p>.
  This will cause a hydration error.",
    "environmentLabel": null,
    "label": "Unhandled Runtime Error",

  141 |     // Move to the last hydration error
  142 |     await goToNextErrorView(browser)
> 143 |     expect(browser).toDisplayRedbox(`
      |                     ^
  144 |      {
  145 |        "count": 3,
  146 |        "description": "In HTML, <p> cannot be a descendant of <p>.

  at Object.toDisplayRedbox (development/app-dir/hydration-error-count/hydration-error-count.test.ts:143:21)

Read more about building and testing Next.js in contributing.md.

pnpm test-dev-turbo test/development/app-dir/server-navigation-error/server-navigation-error.test.ts (turbopack)

  • server-navigation-error > middleware > should error on navigation API redirect
  • server-navigation-error > middleware > should error on navigation API not-found
  • server-navigation-error > pages router > should error on navigation API redirect
  • server-navigation-error > pages router > should error on navigation API notFound
Expand output

● server-navigation-error › pages router › should error on navigation API redirect

expect(received).toMatch(expected)

Expected substring: "Next.js navigation API is not allowed to be used in Pages Router."
Received string:    "Error: Cannot find the middleware module"

  15 |       const browser = await next.browser('/pages/redirect')
  16 |       await assertHasRedbox(browser)
> 17 |       expect(await getRedboxDescription(browser)).toMatch(
     |                                                   ^
  18 |         `Next.js navigation API is not allowed to be used in Pages Router.`
  19 |       )
  20 |       const source = await getRedboxSource(browser)

  at Object.toMatch (development/app-dir/server-navigation-error/server-navigation-error.test.ts:17:51)

● server-navigation-error › pages router › should error on navigation API notFound

expect(received).toMatch(expected)

Expected substring: "Next.js navigation API is not allowed to be used in Pages Router."
Received string:    "Error: Cannot find the middleware module"

  47 |       const browser = await next.browser('/pages/not-found')
  48 |       await assertHasRedbox(browser)
> 49 |       expect(await getRedboxDescription(browser)).toMatch(
     |                                                   ^
  50 |         `Next.js navigation API is not allowed to be used in Pages Router.`
  51 |       )
  52 |       const source = await getRedboxSource(browser)

  at Object.toMatch (development/app-dir/server-navigation-error/server-navigation-error.test.ts:49:51)

● server-navigation-error › middleware › should error on navigation API redirect

expect(received).toMatch(expected)

Expected substring: "Next.js navigation API is not allowed to be used in Middleware."
Received string:    "Error: Cannot find the middleware module"

  83 |       await browser.refresh()
  84 |       await assertHasRedbox(browser)
> 85 |       expect(await getRedboxDescription(browser)).toMatch(
     |                                                   ^
  86 |         `Next.js navigation API is not allowed to be used in Middleware.`
  87 |       )
  88 |       const source = await getRedboxSource(browser)

  at Object.toMatch (development/app-dir/server-navigation-error/server-navigation-error.test.ts:85:51)

● server-navigation-error › middleware › should error on navigation API not-found

expect(received).toMatch(expected)

Expected substring: "Next.js navigation API is not allowed to be used in Middleware."
Received string:    "Error: Cannot find the middleware module"

  117 |       const browser = await next.browser('/middleware/not-found')
  118 |       await assertHasRedbox(browser)
> 119 |       expect(await getRedboxDescription(browser)).toMatch(
      |                                                   ^
  120 |         `Next.js navigation API is not allowed to be used in Middleware.`
  121 |       )
  122 |       const source = await getRedboxSource(browser)

  at Object.toMatch (development/app-dir/server-navigation-error/server-navigation-error.test.ts:119:51)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/edge-runtime-module-errors/test/module-imports.test.js (turbopack)

  • Edge runtime code with imports > Middleware importing unused node.js module > does not throw in dev at runtime
  • Edge runtime code with imports > Middleware statically importing node.js module > throws unsupported module error in dev at runtime and highlights the faulty line
Expand output

● Edge runtime code with imports › Middleware statically importing node.js module › throws unsupported module error in dev at runtime and highlights the faulty line

expect(received).toContain(expected) // indexOf

Expected substring: "The edge runtime does not support Node.js 'fs' module"
Received string:    "   No config file found
   No config file found
   ▲ Next.js 15.2.0-canary.69 (Turbopack)
   - Local:        http://[::1]:42167
   - Network:      http://[::]:42167·
 ✓ Starting...
   No config file found
Creating turbopack project {
  dir: '/root/actions-runner/_work/next.js/next.js/test/integration/edge-runtime-module-errors',
  testMode: true
}
 ✓ Compiled in 228ms
   No config file found
 ✓ Ready in 959ms
   No config file found
 ○ Compiling /_error ...
 ✓ Compiled /_error in 873ms
 GET / 404 in 3ms
 GET / 404 in 1ms
 GET / 404 in 2ms
 GET / 404 in 2ms
 GET / 404 in 2ms
 GET / 404 in 2ms
 GET / 404 in 2ms
"

  44 | ) {
  45 |   const moduleNotSupportedMessage = getUnsupportedModule(moduleName)
> 46 |   expect(output).toContain(moduleNotSupportedMessage)
     |                  ^
  47 |   const moduleNotFoundMessage = getModuleNotFound(moduleName)
  48 |   expect(output).not.toContain(moduleNotFoundMessage)
  49 | }

  at toContain (integration/edge-runtime-module-errors/test/utils.js:46:18)
  at expectUnsupportedModuleProdError (integration/edge-runtime-module-errors/test/utils.js:57:3)
  at integration/edge-runtime-module-errors/test/module-imports.test.js:92:40
  at retry (lib/next-test-utils.ts:810:14)
  at Object.<anonymous> (integration/edge-runtime-module-errors/test/module-imports.test.js:88:7)

● Edge runtime code with imports › Middleware importing unused node.js module › does not throw in dev at runtime

expect(received).toBe(expected) // Object.is equality

Expected: 200
Received: 500

  284 |       await retry(async () => {
  285 |         const res = await fetchViaHTTP(context.appPort, url)
> 286 |         expect(res.status).toBe(200)
      |                            ^
  287 |         expectNoError(moduleName)
  288 |       })
  289 |     })

  at toBe (integration/edge-runtime-module-errors/test/module-imports.test.js:286:28)
  at retry (lib/next-test-utils.ts:810:14)
  at Object.<anonymous> (integration/edge-runtime-module-errors/test/module-imports.test.js:284:7)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/edge-runtime-with-node.js-apis/test/index.test.ts (turbopack)

  • Edge route using Node.js API > development mode > does not throw on using process.arch
  • Edge route using Node.js API > development mode > does not throw on using process.version
  • Edge route using Node.js API > development mode > throws error when using setImmediate
  • Edge route using Node.js API > development mode > throws error when using clearImmediate
  • Edge route using Node.js API > development mode > throws error when using process.cwd
  • Edge route using Node.js API > development mode > throws error when using process.cpuUsage
  • Edge route using Node.js API > development mode > throws error when using process.getuid
  • Edge route using Node.js API > development mode > throws error when using BroadcastChannel
  • Edge route using Node.js API > development mode > throws error when using ByteLengthQueuingStrategy
  • Edge route using Node.js API > development mode > throws error when using CompressionStream
  • Edge route using Node.js API > development mode > throws error when using CountQueuingStrategy
  • Edge route using Node.js API > development mode > throws error when using DecompressionStream
  • Edge route using Node.js API > development mode > throws error when using DomException
  • Edge route using Node.js API > development mode > throws error when using MessageChannel
  • Edge route using Node.js API > development mode > throws error when using MessageEvent
  • Edge route using Node.js API > development mode > throws error when using MessagePort
  • Edge route using Node.js API > development mode > throws error when using ReadableByteStreamController
  • Edge route using Node.js API > development mode > throws error when using ReadableStreamBYOBRequest
  • Edge route using Node.js API > development mode > throws error when using ReadableStreamDefaultController
  • Edge route using Node.js API > development mode > throws error when using TransformStreamDefaultController
  • Edge route using Node.js API > development mode > throws error when using WritableStreamDefaultController
  • Middleware using Node.js API > development mode > does not throw on using process.arch
  • Middleware using Node.js API > development mode > does not throw on using process.version
  • Middleware using Node.js API > development mode > throws error when using setImmediate
  • Middleware using Node.js API > development mode > throws error when using clearImmediate
  • Middleware using Node.js API > development mode > throws error when using process.cwd
  • Middleware using Node.js API > development mode > throws error when using process.cpuUsage
  • Middleware using Node.js API > development mode > throws error when using process.getuid
  • Middleware using Node.js API > development mode > throws error when using BroadcastChannel
  • Middleware using Node.js API > development mode > throws error when using ByteLengthQueuingStrategy
  • Middleware using Node.js API > development mode > throws error when using CompressionStream
  • Middleware using Node.js API > development mode > throws error when using CountQueuingStrategy
  • Middleware using Node.js API > development mode > throws error when using DecompressionStream
  • Middleware using Node.js API > development mode > throws error when using DomException
  • Middleware using Node.js API > development mode > throws error when using MessageChannel
  • Middleware using Node.js API > development mode > throws error when using MessageEvent
  • Middleware using Node.js API > development mode > throws error when using MessagePort
  • Middleware using Node.js API > development mode > throws error when using ReadableByteStreamController
  • Middleware using Node.js API > development mode > throws error when using ReadableStreamBYOBRequest
  • Middleware using Node.js API > development mode > throws error when using ReadableStreamDefaultController
  • Middleware using Node.js API > development mode > throws error when using TransformStreamDefaultController
  • Middleware using Node.js API > development mode > throws error when using WritableStreamDefaultController
Expand output

● Middleware using Node.js API › development mode › does not throw on using process.arch

expect(received).toBe(expected) // Object.is equality

Expected: 200
Received: 500

  92 |         async ({ api }) => {
  93 |           const res = await fetchViaHTTP(appPort, computeRoute(api))
> 94 |           expect(res.status).toBe(200)
     |                              ^
  95 |           await waitFor(500)
  96 |           expect(output).not.toInclude(`A Node.js API is used (${api})`)
  97 |         }

  at toBe (integration/edge-runtime-with-node.js-apis/test/index.test.ts:94:30)

● Middleware using Node.js API › development mode › does not throw on using process.version

expect(received).toBe(expected) // Object.is equality

Expected: 200
Received: 500

  92 |         async ({ api }) => {
  93 |           const res = await fetchViaHTTP(appPort, computeRoute(api))
> 94 |           expect(res.status).toBe(200)
     |                              ^
  95 |           await waitFor(500)
  96 |           expect(output).not.toInclude(`A Node.js API is used (${api})`)
  97 |         }

  at toBe (integration/edge-runtime-with-node.js-apis/test/index.test.ts:94:30)

● Middleware using Node.js API › development mode › throws error when using setImmediate

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (setImmediate) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /process.version 404 in 3ms
 GET /setImmediate 404 in 2ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using clearImmediate

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (clearImmediate) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /clearImmediate 404 in 4ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using process.cwd

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (process.cwd) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /process.cwd 404 in 2ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using process.cpuUsage

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (process.cpuUsage) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /process.cpuUsage 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using process.getuid

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (process.getuid) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /process.getuid 404 in 3ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using BroadcastChannel

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (BroadcastChannel) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /BroadcastChannel 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using ByteLengthQueuingStrategy

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (ByteLengthQueuingStrategy) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /ByteLengthQueuingStrategy 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using CompressionStream

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (CompressionStream) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /CompressionStream 404 in 2ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using CountQueuingStrategy

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (CountQueuingStrategy) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /CountQueuingStrategy 404 in 3ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using DecompressionStream

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (DecompressionStream) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /DecompressionStream 404 in 2ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using DomException

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (DomException) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /DomException 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using MessageChannel

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (MessageChannel) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /MessageChannel 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using MessageEvent

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (MessageEvent) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /MessageEvent 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using MessagePort

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (MessagePort) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /MessagePort 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using ReadableByteStreamController

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (ReadableByteStreamController) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /ReadableByteStreamController 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using ReadableStreamBYOBRequest

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (ReadableStreamBYOBRequest) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /ReadableStreamBYOBRequest 404 in 2ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using ReadableStreamDefaultController

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (ReadableStreamDefaultController) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /ReadableStreamDefaultController 404 in 2ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using TransformStreamDefaultController

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (TransformStreamDefaultController) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /TransformStreamDefaultController 404 in 3ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Middleware using Node.js API › development mode › throws error when using WritableStreamDefaultController

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (WritableStreamDefaultController) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /WritableStreamDefaultController 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › does not throw on using process.arch

expect(received).toBe(expected) // Object.is equality

Expected: 200
Received: 500

  92 |         async ({ api }) => {
  93 |           const res = await fetchViaHTTP(appPort, computeRoute(api))
> 94 |           expect(res.status).toBe(200)
     |                              ^
  95 |           await waitFor(500)
  96 |           expect(output).not.toInclude(`A Node.js API is used (${api})`)
  97 |         }

  at toBe (integration/edge-runtime-with-node.js-apis/test/index.test.ts:94:30)

● Edge route using Node.js API › development mode › does not throw on using process.version

expect(received).toBe(expected) // Object.is equality

Expected: 200
Received: 500

  92 |         async ({ api }) => {
  93 |           const res = await fetchViaHTTP(appPort, computeRoute(api))
> 94 |           expect(res.status).toBe(200)
     |                              ^
  95 |           await waitFor(500)
  96 |           expect(output).not.toInclude(`A Node.js API is used (${api})`)
  97 |         }

  at toBe (integration/edge-runtime-with-node.js-apis/test/index.test.ts:94:30)

● Edge route using Node.js API › development mode › throws error when using setImmediate

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (setImmediate) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=process.version 404 in 2ms
 GET /api/route?case=setImmediate 404 in 2ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using clearImmediate

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (clearImmediate) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=clearImmediate 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using process.cwd

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (process.cwd) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=process.cwd 404 in 2ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using process.cpuUsage

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (process.cpuUsage) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=process.cpuUsage 404 in 2ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using process.getuid

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (process.getuid) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=process.getuid 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using BroadcastChannel

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (BroadcastChannel) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=BroadcastChannel 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using ByteLengthQueuingStrategy

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (ByteLengthQueuingStrategy) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=ByteLengthQueuingStrategy 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using CompressionStream

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (CompressionStream) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=CompressionStream 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using CountQueuingStrategy

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (CountQueuingStrategy) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=CountQueuingStrategy 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using DecompressionStream

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (DecompressionStream) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=DecompressionStream 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using DomException

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (DomException) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=DomException 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using MessageChannel

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (MessageChannel) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=MessageChannel 404 in 3ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using MessageEvent

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (MessageEvent) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=MessageEvent 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using MessagePort

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (MessagePort) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=MessagePort 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using ReadableByteStreamController

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (ReadableByteStreamController) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=ReadableByteStreamController 404 in 2ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using ReadableStreamBYOBRequest

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (ReadableStreamBYOBRequest) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=ReadableStreamBYOBRequest 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using ReadableStreamDefaultController

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (ReadableStreamDefaultController) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=ReadableStreamDefaultController 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using TransformStreamDefaultController

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (TransformStreamDefaultController) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=TransformStreamDefaultController 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

● Edge route using Node.js API › development mode › throws error when using WritableStreamDefaultController

expect(received).toInclude(expected)

Expected string to include:
  "A Node.js API is used (WritableStreamDefaultController) which is not supported in the Edge Runtime.
Learn more: https://nextjs.org/docs/api-reference/edge-runtime"
Received:
  " GET /api/route?case=WritableStreamDefaultController 404 in 1ms
"

  112 |         await waitFor(500)
  113 |         expect(output)
> 114 |           .toInclude(`A Node.js API is used (${api}) which is not supported in the Edge Runtime.
      |            ^
  115 | Learn more: https://nextjs.org/docs/api-reference/edge-runtime`)
  116 |         if (isTurbopack) {
  117 |           expect(stripAnsi(output)).toInclude(errorHighlight)

  at toInclude (integration/edge-runtime-with-node.js-apis/test/index.test.ts:114:12)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/edge-runtime-configurable-guards/test/index.test.js (turbopack)

  • Edge runtime configurable guards > Middleware with use of Function as a type > does not warn in dev at runtime
Expand output

● Edge runtime configurable guards › Middleware with use of Function as a type › does not warn in dev at runtime

expect(received).toBe(expected) // Object.is equality

Expected: 200
Received: 500

  479 |       const res = await fetchViaHTTP(context.appPort, url)
  480 |       await waitFor(500)
> 481 |       expect(res.status).toBe(200)
      |                          ^
  482 |       expect(context.logs.output).not.toContain(
  483 |         `Dynamic Code Evaluation (e. g. 'eval', 'new Function') not allowed in Edge Runtime`
  484 |       )

  at Object.toBe (integration/edge-runtime-configurable-guards/test/index.test.js:481:26)

Read more about building and testing Next.js in contributing.md.

pnpm test-start-turbo test/e2e/app-dir/middleware-sitemap/no-matcher/index.test.ts (turbopack)

  • middleware-sitemap > should be affected by middleware for sitemap.xml if there is no matcher
Expand output

● middleware-sitemap › should be affected by middleware for sitemap.xml if there is no matcher

expect(received).toContain(expected) // indexOf

Expected substring: "redirected"
Received string:    "<!DOCTYPE html><html><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"preload\" as=\"script\" fetchPriority=\"low\" href=\"/_next/static/chunks/node_modules__pnpm_922df7ef._.js\"/><script src=\"/_next/static/chunks/node_modules__pnpm_92ef809e._.js\" async=\"\"></script><script src=\"/_next/static/chunks/_ed4d8ac7._.js\" async=\"\"></script><script src=\"/_next/static/chunks/29b11_next_dist_695af4f8._.js\" async=\"\"></script><script src=\"/_next/static/chunks/29b11_next_dist_build_polyfills_polyfill-nomodule.js\" noModule=\"\"></script></head><body><p>hello world</p><script src=\"/_next/static/chunks/node_modules__pnpm_922df7ef._.js\" async=\"\"></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,\"1:\\\"$Sreact.fragment\\\"\\n2:I[68469,[\\\"static/chunks/29b11_next_dist_695af4f8._.js\\\"],\\\"default\\\"]\\n3:I[84634,[\\\"static/chunks/29b11_next_dist_695af4f8._.js\\\"],\\\"default\\\"]\\n4:I[59246,[\\\"static/chunks/29b11_next_dist_695af4f8._.js\\\"],\\\"OutletBoundary\\\"]\\n7:I[59246,[\\\"static/chunks/29b11_next_dist_695af4f8._.js\\\"],\\\"ViewportBoundary\\\"]\\n9:I[59246,[\\\"static/chunks/29b11_next_dist_695af4f8._.js\\\"],\\\"MetadataBoundary\\\"]\\nb:I[61053,[\\\"static/chunks/29b11_next_dist_695af4f8._.js\\\"],\\\"default\\\"]\\n\"])</script><script>self.__next_f.push([1,\"0:{\\\"P\\\":null,\\\"b\\\":\\\"WviSRXpHA2cZld2B86jh0\\\",\\\"p\\\":\\\"\\\",\\\"c\\\":[\\\"\\\",\\\"\\\"],\\\"i\\\":false,\\\"f\\\":[[[\\\"\\\",{\\\"children\\\":[\\\"__PAGE__\\\",{}]},\\\"$undefined\\\",\\\"$undefined\\\",true],[\\\"\\\",[\\\"$\\\",\\\"$1\\\",\\\"c\\\",{\\\"children\\\":[[[\\\"$\\\",\\\"script\\\",\\\"script-0\\\",{\\\"src\\\":\\\"/_next/static/chunks/29b11_next_dist_695af4f8._.js\\\",\\\"async\\\":true,\\\"nonce\\\":\\\"$undefined\\\"}]],[\\\"$\\\",\\\"html\\\",null,{\\\"children\\\":[\\\"$\\\",\\\"body\\\",null,{\\\"children\\\":[\\\"$\\\",\\\"$L2\\\",null,{\\\"parallelRouterKey\\\":\\\"children\\\",\\\"error\\\":\\\"$undefined\\\",\\\"errorStyles\\\":\\\"$undefined\\\",\\\"errorScripts\\\":\\\"$undefined\\\",\\\"template\\\":[\\\"$\\\",\\\"$L3\\\",null,{}],\\\"templateStyles\\\":\\\"$undefined\\\",\\\"templateScripts\\\":\\\"$undefined\\\",\\\"notFound\\\":[[[\\\"$\\\",\\\"title\\\",null,{\\\"children\\\":\\\"404: This page could not be found.\\\"}],[\\\"$\\\",\\\"div\\\",null,{\\\"style\\\":{\\\"fontFamily\\\":\\\"system-ui,\\\\\\\"Segoe UI\\\\\\\",Roboto,Helvetica,Arial,sans-serif,\\\\\\\"Apple Color Emoji\\\\\\\",\\\\\\\"Segoe UI Emoji\\\\\\\"\\\",\\\"height\\\":\\\"100vh\\\",\\\"textAlign\\\":\\\"center\\\",\\\"display\\\":\\\"flex\\\",\\\"flexDirection\\\":\\\"column\\\",\\\"alignItems\\\":\\\"center\\\",\\\"justifyContent\\\":\\\"center\\\"},\\\"children\\\":[\\\"$\\\",\\\"div\\\",null,{\\\"children\\\":[[\\\"$\\\",\\\"style\\\",null,{\\\"dangerouslySetInnerHTML\\\":{\\\"__html\\\":\\\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\\\"}}],[\\\"$\\\",\\\"h1\\\",null,{\\\"className\\\":\\\"next-error-h1\\\",\\\"style\\\":{\\\"display\\\":\\\"inline-block\\\",\\\"margin\\\":\\\"0 20px 0 0\\\",\\\"padding\\\":\\\"0 23px 0 0\\\",\\\"fontSize\\\":24,\\\"fontWeight\\\":500,\\\"verticalAlign\\\":\\\"top\\\",\\\"lineHeight\\\":\\\"49px\\\"},\\\"children\\\":404}],[\\\"$\\\",\\\"div\\\",null,{\\\"style\\\":{\\\"display\\\":\\\"inline-block\\\"},\\\"children\\\":[\\\"$\\\",\\\"h2\\\",null,{\\\"style\\\":{\\\"fontSize\\\":14,\\\"fontWeight\\\":400,\\\"lineHeight\\\":\\\"49px\\\",\\\"margin\\\":0},\\\"children\\\":\\\"This page could not be found.\\\"}]}]]}]}]],\\\"$undefined\\\",[]],\\\"forbidden\\\":\\\"$undefined\\\",\\\"unauthorized\\\":\\\"$undefined\\\"}]}]}]]}],{\\\"children\\\":[\\\"__PAGE__\\\",[\\\"$\\\",\\\"$1\\\",\\\"c\\\",{\\\"children\\\":[[\\\"$\\\",\\\"p\\\",null,{\\\"children\\\":\\\"hello world\\\"}],\\\"$undefined\\\",null,[\\\"$\\\",\\\"$L4\\\",null,{\\\"children\\\":[\\\"$L5\\\",\\\"$L6\\\",null]}]]}],{},null,false]},null,false],[\\\"$\\\",\\\"$1\\\",\\\"h\\\",{\\\"children\\\":[null,[\\\"$\\\",\\\"$1\\\",\\\"FZTPcQxFYTny-1H3ZQ9rd\\\",{\\\"children\\\":[[\\\"$\\\",\\\"$L7\\\",null,{\\\"children\\\":\\\"$L8\\\"}],null]}],[\\\"$\\\",\\\"$L9\\\",null,{\\\"children\\\":\\\"$La\\\"}]]}],false]],\\\"m\\\":\\\"$undefined\\\",\\\"G\\\":[\\\"$b\\\",\\\"$undefined\\\"],\\\"s\\\":false,\\\"S\\\":true}\\n\"])</script><script>self.__next_f.push([1,\"8:[[\\\"$\\\",\\\"meta\\\",\\\"0\\\",{\\\"charSet\\\":\\\"utf-8\\\"}],[\\\"$\\\",\\\"meta\\\",\\\"1\\\",{\\\"name\\\":\\\"viewport\\\",\\\"content\\\":\\\"width=device-width, initial-scale=1\\\"}]]\\n5:null\\n\"])</script><script>self.__next_f.push([1,\"6:null\\na:[]\\n\"])</script></body></html>"

   8 |   it('should be affected by middleware for sitemap.xml if there is no matcher', async () => {
   9 |     let html = await next.render('/')
> 10 |     expect(html).toContain('redirected')
     |                  ^
  11 |
  12 |     html = await next.render('/sitemap.xml')
  13 |     expect(html).toContain('redirected')

  at Object.toContain (e2e/app-dir/middleware-sitemap/no-matcher/index.test.ts:10:18)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/app-dir-export/test/config.test.ts (turbopack)

  • app dir - with output export (next dev / next build) > production mode > should correctly emit exported assets to config.distDir
Expand output

● app dir - with output export (next dev / next build) › production mode › should correctly emit exported assets to config.distDir

expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 0

@@ -2,11 +2,10 @@
    "404.html",
    "404/index.html",
    StringMatching /_next\/static\/media\/favicon\.[0-9a-f]+\.ico/,
    StringMatching /_next\/static\/media\/test\.[0-9a-f]+\.png/,
    "_next/static/test-build-id/_buildManifest.js",
-   "_next/static/test-build-id/_clientMiddlewareManifest.json",
    "_next/static/test-build-id/_ssgManifest.js",
    "another/first/index.html",
    "another/first/index.txt",
    "another/index.html",
    "another/index.txt",

  81 |         try {
  82 |           await nextBuild(appDir)
> 83 |           expect(await getFiles(outputDir)).toEqual(
     |                                             ^
  84 |             expectedWhenTrailingSlashTrue
  85 |           )
  86 |         } finally {

  at Object.toEqual (integration/app-dir-export/test/config.test.ts:83:45)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/app-dir-export/test/dynamicpage-prod.test.ts (turbopack)

  • app dir - with output export - dynamic api route prod > production mode > should work in prod with dynamicPage undefined
  • app dir - with output export - dynamic api route prod > production mode > should work in prod with dynamicPage 'error'
  • app dir - with output export - dynamic api route prod > production mode > should work in prod with dynamicPage 'force-static'
Expand output

● app dir - with output export - dynamic api route prod › production mode › should work in prod with dynamicPage undefined

expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 0

@@ -2,11 +2,10 @@
    "404.html",
    "404/index.html",
    StringMatching /_next\/static\/media\/favicon\.[0-9a-f]+\.ico/,
    StringMatching /_next\/static\/media\/test\.[0-9a-f]+\.png/,
    "_next/static/test-build-id/_buildManifest.js",
-   "_next/static/test-build-id/_clientMiddlewareManifest.json",
    "_next/static/test-build-id/_ssgManifest.js",
    "another/first/index.html",
    "another/first/index.txt",
    "another/index.html",
    "another/index.txt",

  248 |       if (!isDev) {
  249 |         if (trailingSlash) {
> 250 |           expect(await getFiles()).toEqual(expectedWhenTrailingSlashTrue)
      |                                    ^
  251 |         } else {
  252 |           expect(await getFiles()).toEqual(expectedWhenTrailingSlashFalse)
  253 |         }

  at toEqual (integration/app-dir-export/test/utils.ts:250:36)
  at integration/app-dir-export/test/dynamicpage-prod.test.ts:19:11

● app dir - with output export - dynamic api route prod › production mode › should work in prod with dynamicPage 'error'

expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 0

@@ -2,11 +2,10 @@
    "404.html",
    "404/index.html",
    StringMatching /_next\/static\/media\/favicon\.[0-9a-f]+\.ico/,
    StringMatching /_next\/static\/media\/test\.[0-9a-f]+\.png/,
    "_next/static/test-build-id/_buildManifest.js",
-   "_next/static/test-build-id/_clientMiddlewareManifest.json",
    "_next/static/test-build-id/_ssgManifest.js",
    "another/first/index.html",
    "another/first/index.txt",
    "another/index.html",
    "another/index.txt",

  248 |       if (!isDev) {
  249 |         if (trailingSlash) {
> 250 |           expect(await getFiles()).toEqual(expectedWhenTrailingSlashTrue)
      |                                    ^
  251 |         } else {
  252 |           expect(await getFiles()).toEqual(expectedWhenTrailingSlashFalse)
  253 |         }

  at toEqual (integration/app-dir-export/test/utils.ts:250:36)
  at integration/app-dir-export/test/dynamicpage-prod.test.ts:19:11

● app dir - with output export - dynamic api route prod › production mode › should work in prod with dynamicPage 'force-static'

expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 0

@@ -2,11 +2,10 @@
    "404.html",
    "404/index.html",
    StringMatching /_next\/static\/media\/favicon\.[0-9a-f]+\.ico/,
    StringMatching /_next\/static\/media\/test\.[0-9a-f]+\.png/,
    "_next/static/test-build-id/_buildManifest.js",
-   "_next/static/test-build-id/_clientMiddlewareManifest.json",
    "_next/static/test-build-id/_ssgManifest.js",
    "another/first/index.html",
    "another/first/index.txt",
    "another/index.html",
    "another/index.txt",

  248 |       if (!isDev) {
  249 |         if (trailingSlash) {
> 250 |           expect(await getFiles()).toEqual(expectedWhenTrailingSlashTrue)
      |                                    ^
  251 |         } else {
  252 |           expect(await getFiles()).toEqual(expectedWhenTrailingSlashFalse)
  253 |         }

  at toEqual (integration/app-dir-export/test/utils.ts:250:36)
  at integration/app-dir-export/test/dynamicpage-prod.test.ts:19:11

Read more about building and testing Next.js in contributing.md.

pnpm test-start-turbo test/e2e/app-dir/no-duplicate-headers-middleware/no-duplicate-headers-middleware.test.ts (turbopack)

  • no-duplicate-headers-next-config > should prioritise headers in middleware for static assets
Expand output

● no-duplicate-headers-next-config › should prioritise headers in middleware for static assets

expect(received).toBe(expected) // Object.is equality

Expected: "max-age=1234"
Received: "public, max-age=0, must-revalidate"

   9 |     const res = await next.fetch('favicon.ico')
  10 |     expect(res.status).toBe(200)
> 11 |     expect(res.headers.get('cache-control')).toBe('max-age=1234')
     |                                              ^
  12 |   })
  13 | })
  14 |

  at Object.toBe (e2e/app-dir/no-duplicate-headers-middleware/no-duplicate-headers-middleware.test.ts:11:46)

Read more about building and testing Next.js in contributing.md.

pnpm test-dev-turbo test/e2e/app-dir/navigation-redirect-import/navigation-redirect-import.test.ts (turbopack)

  • navigation-redirect-import > should work using fetch
Expand output

● navigation-redirect-import › should work using fetch

expect(received).toBe(expected) // Object.is equality

Expected: 200
Received: 500

   8 |   it('should work using fetch', async () => {
   9 |     const res = await next.fetch('/route-handler')
> 10 |     expect(res.status).toBe(200)
     |                        ^
  11 |     expect(await res.text()).toBe('hello world')
  12 |   })
  13 | })

  at Object.toBe (e2e/app-dir/navigation-redirect-import/navigation-redirect-import.test.ts:10:24)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/dynamic-routing/test/middleware.test.js (turbopack)

  • Dynamic Routing > production mode > should have correct cache entries on prefetch
  • Dynamic Routing > production mode > should handle only query on dynamic route
  • Dynamic Routing > production mode > should navigate with hash to dynamic route with link
  • Dynamic Routing > production mode > should navigate with hash to dynamic route with router
  • Dynamic Routing > production mode > should navigate to a dynamic page successfully
  • Dynamic Routing > production mode > should navigate to a dynamic page with href with differing query and as correctly
  • Dynamic Routing > production mode > should navigate to a dynamic page successfully no as
  • Dynamic Routing > production mode > should navigate to a dynamic page successfully interpolated
  • Dynamic Routing > production mode > should navigate to a dynamic page successfully interpolated with additional query values
  • Dynamic Routing > production mode > should navigate to a nested dynamic page successfully
  • Dynamic Routing > production mode > should navigate to a nested dynamic page successfully no as
  • Dynamic Routing > production mode > should navigate to a nested dynamic page successfully interpolated
Expand output

● Dynamic Routing › production mode › should have correct cache entries on prefetch

expect(received).toEqual(expected) // deep equality

- Expected  - 10
+ Received  +  0

  Array [
-   "/_next/data/BUILD_ID/[name].json?another=value&name=%5Bname%5D",
-   "/_next/data/BUILD_ID/added-later/first.json?name=added-later&comment=first",
    "/_next/data/BUILD_ID/blog/321/comment/123.json?name=321&id=123",
-   "/_next/data/BUILD_ID/d/dynamic-1.json?id=dynamic-1",
-   "/_next/data/BUILD_ID/on-mount/test-w-hash.json?post=test-w-hash",
    "/_next/data/BUILD_ID/p1/p2/all-ssg/hello.json?rest=hello",
    "/_next/data/BUILD_ID/p1/p2/all-ssg/hello1/hello2.json?rest=hello1&rest=hello2",
    "/_next/data/BUILD_ID/p1/p2/all-ssr/:42.json?rest=%3A42",
    "/_next/data/BUILD_ID/p1/p2/all-ssr/hello.json?rest=hello",
    "/_next/data/BUILD_ID/p1/p2/all-ssr/hello1%2F/he%2Fllo2.json?rest=hello1%2F&rest=he%2Fllo2",
    "/_next/data/BUILD_ID/p1/p2/all-ssr/hello1/hello2.json?rest=hello1&rest=hello2",
    "/_next/data/BUILD_ID/p1/p2/nested-all-ssg/hello.json?rest=hello",
    "/_next/data/BUILD_ID/p1/p2/nested-all-ssg/hello1/hello2.json?rest=hello1&rest=hello2",
-   "/_next/data/BUILD_ID/post-1.json?fromHome=true&name=post-1",
-   "/_next/data/BUILD_ID/post-1.json?hidden=value&name=post-1",
-   "/_next/data/BUILD_ID/post-1.json?name=post-1",
-   "/_next/data/BUILD_ID/post-1.json?name=post-1&another=value",
-   "/_next/data/BUILD_ID/post-1/comment-1.json?name=post-1&comment=comment-1",
-   "/_next/data/BUILD_ID/post-1/comments.json?name=post-1",
  ]

  47 |
  48 |       const cacheKeys = await getCacheKeys()
> 49 |       expect(cacheKeys).toEqual(
     |                         ^
  50 |         process.env.__MIDDLEWARE_TEST
  51 |           ? [
  52 |               '/_next/data/BUILD_ID/[name].json?another=value&name=%5Bname%5D',

  at Object.toEqual (integration/dynamic-routing/test/index.test.js:49:25)

● Dynamic Routing › production mode › should handle only query on dynamic route

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  257 |         )
  258 |       ).toEqual(query)
> 259 |       expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                      ^
  260 |     }
  261 |   })
  262 |

  at Object.toBe (integration/dynamic-routing/test/index.test.js:259:54)

● Dynamic Routing › production mode › should navigate with hash to dynamic route with link

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  301 |       .waitForElementByCss('#asdf')
  302 |
> 303 |     expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                    ^
  304 |     expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({
  305 |       name: 'post-1',
  306 |     })

  at Object.toBe (integration/dynamic-routing/test/index.test.js:303:52)

● Dynamic Routing › production mode › should navigate with hash to dynamic route with router

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  352 |     await browser.waitForElementByCss('#asdf')
  353 |
> 354 |     expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                    ^
  355 |     expect(JSON.parse(await browser.elementByCss('#query').text())).toEqual({
  356 |       name: 'post-1',
  357 |     })

  at Object.toBe (integration/dynamic-routing/test/index.test.js:354:52)

● Dynamic Routing › production mode › should navigate to a dynamic page successfully

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  491 |       await browser.waitForElementByCss('#asdf')
  492 |
> 493 |       expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                      ^
  494 |
  495 |       const text = await browser.elementByCss('#asdf').text()
  496 |       expect(text).toMatch(/this is.*?post-1/i)

  at Object.toBe (integration/dynamic-routing/test/index.test.js:493:54)

● Dynamic Routing › production mode › should navigate to a dynamic page with href with differing query and as correctly

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  508 |       await browser.waitForElementByCss('#asdf')
  509 |
> 510 |       expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                      ^
  511 |
  512 |       const text = await browser.elementByCss('#asdf').text()
  513 |       expect(text).toMatch(/this is.*?post-1/i)

  at Object.toBe (integration/dynamic-routing/test/index.test.js:510:54)

● Dynamic Routing › production mode › should navigate to a dynamic page successfully no as

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  525 |       await browser.waitForElementByCss('#asdf')
  526 |
> 527 |       expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                      ^
  528 |
  529 |       const text = await browser.elementByCss('#asdf').text()
  530 |       expect(text).toMatch(/this is.*?post-1/i)

  at Object.toBe (integration/dynamic-routing/test/index.test.js:527:54)

● Dynamic Routing › production mode › should navigate to a dynamic page successfully interpolated

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  551 |       await browser.waitForElementByCss('#asdf')
  552 |
> 553 |       expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                      ^
  554 |
  555 |       const text = await browser.elementByCss('#asdf').text()
  556 |       expect(text).toMatch(/this is.*?post-1/i)

  at Object.toBe (integration/dynamic-routing/test/index.test.js:553:54)

● Dynamic Routing › production mode › should navigate to a dynamic page successfully interpolated with additional query values

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  577 |       await browser.waitForElementByCss('#asdf')
  578 |
> 579 |       expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                      ^
  580 |
  581 |       const text = await browser.elementByCss('#asdf').text()
  582 |       expect(text).toMatch(/this is.*?post-1/i)

  at Object.toBe (integration/dynamic-routing/test/index.test.js:579:54)

● Dynamic Routing › production mode › should navigate to a nested dynamic page successfully

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  637 |       await browser.waitForElementByCss('#asdf')
  638 |
> 639 |       expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                      ^
  640 |
  641 |       const text = await browser.elementByCss('#asdf').text()
  642 |       expect(text).toMatch(/i am.*comment-1.*on.*post-1/i)

  at Object.toBe (integration/dynamic-routing/test/index.test.js:639:54)

● Dynamic Routing › production mode › should navigate to a nested dynamic page successfully no as

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  654 |       await browser.waitForElementByCss('#asdf')
  655 |
> 656 |       expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                      ^
  657 |
  658 |       const text = await browser.elementByCss('#asdf').text()
  659 |       expect(text).toMatch(/i am.*comment-1.*on.*post-1/i)

  at Object.toBe (integration/dynamic-routing/test/index.test.js:656:54)

● Dynamic Routing › production mode › should navigate to a nested dynamic page successfully interpolated

expect(received).toBe(expected) // Object.is equality

Expected: 1
Received: undefined

  678 |       await browser.waitForElementByCss('#asdf')
  679 |
> 680 |       expect(await browser.eval('window.beforeNav')).toBe(1)
      |                                                      ^
  681 |
  682 |       const text = await browser.elementByCss('#asdf').text()
  683 |       expect(text).toMatch(/i am.*comment-1.*on.*post-1/i)

  at Object.toBe (integration/dynamic-routing/test/index.test.js:680:54)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/middleware-src-node/test/index.test.js (turbopack)

  • Middleware in src/ and / folders > production mode > should warn about middleware on export
Expand output

● Middleware in src/ and / folders › production mode › should warn about middleware on export

expect(received).toContain(expected) // indexOf

Expected substring: "Statically exporting a Next.js application via `next export` disables API routes and middleware."
Received string:    " ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/middleware-src-node/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/middleware-src-node/next.config.js
   ▲ Next.js 15.2.0-canary.69 (Turbopack)·
   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/middleware-src-node/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/middleware-src-node/next.config.js
   Building (0/2) ...
 ✓ Building (2/2)
 ✓ Compiled successfully in 1208ms
   Collecting page data ...
   Generating static pages (0/3) ...
 ✓ Generating static pages (3/3)
   Finalizing page optimization ...
   Collecting build traces ...
   Exporting (0/3) ...
 ✓ Exporting (3/3)·
Route (pages)                    Size     First Load JS
┌ ○ /                            8.81 kB         107 kB
└ ○ /404                         10.9 kB         109 kB
+ First Load JS shared by all    98.6 kB
  └ chunks/_e42d3d8d._.js        89.7 kB
  └ other shared chunks (total)  8.93 kB·
○  (Static)  prerendered as static content·
"

  122 |
  123 |       it('should warn about middleware on export', async () => {
> 124 |         expect(exportOutput).toContain(
      |                              ^
  125 |           'Statically exporting a Next.js application via `next export` disables API routes and middleware.'
  126 |         )
  127 |       })

  at Object.toContain (integration/middleware-src-node/test/index.test.js:124:30)

Read more about building and testing Next.js in contributing.md.

pnpm test-start-turbo test/e2e/app-dir/dynamic-io/dynamic-io.test.ts (turbopack)

  • dynamic-io > should not prerender pages that use cookies()
  • dynamic-io > should not prerender pages that use headers()
Expand output

● dynamic-io › should not prerender pages that use cookies()

expect(received).toBe(expected) // Object.is equality

Expected: "hello"
Received: "~not-found~"

  343 |         expect($('#page').text()).toBe('at runtime')
  344 |         expect($('#inner').text()).toBe('at runtime')
> 345 |         expect($('#value').text()).toBe('hello')
      |                                    ^
  346 |       }
  347 |     })
  348 |   }

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.test.ts:345:36)

● dynamic-io › should not prerender pages that use headers()

expect(received).toBe(expected) // Object.is equality

Expected: "hello"
Received: "~not-found~"

  375 |         expect($('#page').text()).toBe('at runtime')
  376 |         expect($('#inner').text()).toBe('at runtime')
> 377 |         expect($('#value').text()).toBe('hello')
      |                                    ^
  378 |       }
  379 |     })
  380 |   }

  at Object.toBe (e2e/app-dir/dynamic-io/dynamic-io.test.ts:377:36)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/next-image-new/default/test/index.test.ts (turbopack)

  • Image Component Default Tests > production mode > should render as unoptimized with missing src prop
  • Image Component Default Tests > production mode > should render as unoptimized with empty string src prop
Expand output

● Image Component Default Tests › production mode › should render as unoptimized with missing src prop

expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 6

- Array []
+ Array [
+   Object {
+     "message": "Failed to load resource: the server responded with a status of 404 (Not Found)",
+     "source": "error",
+   },
+ ]

  1194 |       )
  1195 |
> 1196 |       expect(warnings).toEqual([])
       |                        ^
  1197 |
  1198 |       expect(await browser.elementById('img').getAttribute('src')).toBe(
  1199 |         isReact18 ? '' : null

  at Object.toEqual (integration/next-image-new/default/test/index.test.ts:1196:24)

● Image Component Default Tests › production mode › should render as unoptimized with empty string src prop

expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 6

- Array []
+ Array [
+   Object {
+     "message": "Failed to load resource: the server responded with a status of 404 (Not Found)",
+     "source": "error",
+   },
+ ]

  1211 |         (log) => log.source === 'error'
  1212 |       )
> 1213 |       expect(warnings).toEqual([])
       |                        ^
  1214 |
  1215 |       expect(await browser.elementById('img').getAttribute('src')).toBe(
  1216 |         isReact18 ? '' : null

  at Object.toEqual (integration/next-image-new/default/test/index.test.ts:1213:24)

Read more about building and testing Next.js in contributing.md.

pnpm test-start-turbo test/e2e/edge-compiler-module-exports-preference/index.test.ts (turbopack)

  • Edge compiler module exports preference > favors the browser export
Expand output

● Edge compiler module exports preference › favors the browser export

expect(received).toMatchObject(expected)

- Expected  - 1
+ Received  + 8

  Object {
-   "x-imported": "Browser",
+   "connection": "close",
+   "content-encoding": "gzip",
+   "content-type": "text/html; charset=utf-8",
+   "date": "Sat, 22 Feb 2025 01:22:10 GMT",
+   "etag": "\"dt7qta3zw7tn\"",
+   "transfer-encoding": "chunked",
+   "vary": "Accept-Encoding",
+   "x-powered-by": "Next.js",
  }

  59 |   it('favors the browser export', async () => {
  60 |     const response = await fetchViaHTTP(next.url, '/')
> 61 |     expect(Object.fromEntries(response.headers)).toMatchObject({
     |                                                  ^
  62 |       'x-imported': 'Browser',
  63 |     })
  64 |   })

  at Object.toMatchObject (e2e/edge-compiler-module-exports-preference/index.test.ts:61:50)

Read more about building and testing Next.js in contributing.md.

pnpm test-start-turbo test/e2e/edge-can-read-request-body/index.test.ts (turbopack)

  • Edge can read request body > middleware > reads a JSON body
  • Edge can read request body > middleware > reads an URL encoded form data
  • Edge can read request body > middleware > reads a multipart form data
Expand output

● Edge can read request body › middleware › reads a JSON body

expect(received).toMatchObject(expected)

- Expected  - 2
+ Received  + 4

  Object {
    "headers": Object {
-     "x-req-type": "json",
-     "x-serialized": "{\"hello\":\"world\"}",
+     "connection": "close",
+     "content-length": "2",
+     "date": "Sat, 22 Feb 2025 01:22:23 GMT",
+     "etag": "\"109abcqmas2\"",
    },
    "status": 200,
    "text": StringContaining "ok",
  }

  40 |         }
  41 |       )
> 42 |       expect(await serialize(response)).toMatchObject({
     |                                         ^
  43 |         text: expect.stringContaining('ok'),
  44 |         status: 200,
  45 |         headers: {

  at Object.toMatchObject (e2e/edge-can-read-request-body/index.test.ts:42:41)

● Edge can read request body › middleware › reads an URL encoded form data

expect(received).toMatchObject(expected)

- Expected  - 2
+ Received  + 4

  Object {
    "headers": Object {
-     "x-req-type": "formData",
-     "x-serialized": "{\"hello\":\"world\"}",
+     "connection": "close",
+     "content-length": "2",
+     "date": "Sat, 22 Feb 2025 01:22:23 GMT",
+     "etag": "\"109abcqmas2\"",
    },
    "status": 200,
    "text": StringContaining "ok",
  }

  88 |         }
  89 |       )
> 90 |       expect(await serialize(response)).toMatchObject({
     |                                         ^
  91 |         text: expect.stringContaining('ok'),
  92 |         status: 200,
  93 |         headers: {

  at Object.toMatchObject (e2e/edge-can-read-request-body/index.test.ts:90:41)

● Edge can read request body › middleware › reads a multipart form data

expect(received).toMatchObject(expected)

- Expected  - 2
+ Received  + 5

  Object {
    "headers": Object {
-     "x-req-type": "formData",
-     "x-serialized": "{\"hello\":\"world\"}",
+     "connection": "keep-alive",
+     "content-length": "2",
+     "date": "Sat, 22 Feb 2025 01:22:23 GMT",
+     "etag": "\"109abcqmas2\"",
+     "keep-alive": "timeout=5",
    },
    "status": 200,
    "text": StringContaining "ok",
  }

  108 |       )
  109 |
> 110 |       expect(await serialize(response)).toMatchObject({
      |                                         ^
  111 |         text: expect.stringContaining('ok'),
  112 |         status: 200,
  113 |         headers: {

  at Object.toMatchObject (e2e/edge-can-read-request-body/index.test.ts:110:41)

Read more about building and testing Next.js in contributing.md.

@ijjk
Copy link
Member Author

ijjk commented Feb 22, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js ijjk/turbopack-node-middleware Change
buildDuration 16.8s 14.1s N/A
buildDurationCached 13.3s 11.1s N/A
nodeModulesSize 389 MB 389 MB N/A
nextStartRea..uration (ms) 409ms 416ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary vercel/next.js ijjk/turbopack-node-middleware Change
5306-HASH.js gzip 58.6 kB 59 kB ⚠️ +356 B
7048.HASH.js gzip 168 B 168 B
8377-HASH.js gzip 5.48 kB 5.44 kB N/A
bccd1874-HASH.js gzip 53 kB 53 kB N/A
framework-HASH.js gzip 57.3 kB 57.3 kB
main-app-HASH.js gzip 242 B 245 B N/A
main-HASH.js gzip 33.9 kB 33.9 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB
Overall change 118 kB 118 kB ⚠️ +356 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js ijjk/turbopack-node-middleware Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages
vercel/next.js canary vercel/next.js ijjk/turbopack-node-middleware Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 193 B 192 B N/A
amp-HASH.js gzip 516 B 512 B N/A
css-HASH.js gzip 342 B 342 B
dynamic-HASH.js gzip 1.84 kB 1.84 kB N/A
edge-ssr-HASH.js gzip 265 B 264 B N/A
head-HASH.js gzip 359 B 360 B N/A
hooks-HASH.js gzip 392 B 392 B
image-HASH.js gzip 4.58 kB 4.59 kB N/A
index-HASH.js gzip 267 B 265 B N/A
link-HASH.js gzip 2.37 kB 2.37 kB N/A
routerDirect..HASH.js gzip 328 B 327 B N/A
script-HASH.js gzip 396 B 397 B N/A
withRouter-HASH.js gzip 324 B 325 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 1.03 kB 1.03 kB
Client Build Manifests
vercel/next.js canary vercel/next.js ijjk/turbopack-node-middleware Change
_buildManifest.js gzip 753 B 750 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js ijjk/turbopack-node-middleware Change
index.html gzip 523 B 522 B N/A
link.html gzip 539 B 535 B N/A
withRouter.html gzip 520 B 517 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary vercel/next.js ijjk/turbopack-node-middleware Change
edge-ssr.js gzip 133 kB 133 kB ⚠️ +281 B
page.js gzip 218 kB 219 kB ⚠️ +726 B
Overall change 351 kB 352 kB ⚠️ +1.01 kB
Middleware size
vercel/next.js canary vercel/next.js ijjk/turbopack-node-middleware Change
middleware-b..fest.js gzip 677 B 675 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 31.6 kB 31.3 kB N/A
edge-runtime..pack.js gzip 844 B 844 B
Overall change 844 B 844 B
Next Runtimes
vercel/next.js canary vercel/next.js ijjk/turbopack-node-middleware Change
app-page-exp...dev.js gzip 371 kB 371 kB
app-page-exp..prod.js gzip 133 kB 133 kB
app-page-tur..prod.js gzip 146 kB 146 kB
app-page-tur..prod.js gzip 142 kB 142 kB
app-page.run...dev.js gzip 360 kB 360 kB
app-page.run..prod.js gzip 130 kB 130 kB
app-route-ex...dev.js gzip 39.5 kB 39.5 kB
app-route-ex..prod.js gzip 25.7 kB 25.7 kB
app-route-tu..prod.js gzip 25.7 kB 25.7 kB
app-route-tu..prod.js gzip 25.5 kB 25.5 kB
app-route.ru...dev.js gzip 39.1 kB 39.1 kB
app-route.ru..prod.js gzip 25.5 kB 25.5 kB
dist_client_...dev.js gzip 356 B 356 B
dist_client_...dev.js gzip 349 B 349 B
pages-api-tu..prod.js gzip 9.74 kB 9.74 kB
pages-api.ru...dev.js gzip 11.8 kB 11.8 kB
pages-api.ru..prod.js gzip 9.74 kB 9.74 kB
pages-turbo...prod.js gzip 22 kB 22 kB
pages.runtim...dev.js gzip 31.6 kB 31.6 kB
pages.runtim..prod.js gzip 22 kB 22 kB
server.runti..prod.js gzip 61.5 kB 61.5 kB
Overall change 1.63 MB 1.63 MB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js ijjk/turbopack-node-middleware Change
0.pack gzip 2.15 MB 2.13 MB N/A
index.pack gzip 75.5 kB 77 kB ⚠️ +1.43 kB
Overall change 75.5 kB 77 kB ⚠️ +1.43 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for amp-HASH.js
@@ -1,7 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5034],
   {
-    /***/ 2220: /***/ (
+    /***/ 3963: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9636);
+
+      /***/
+    },
+
+    /***/ 7931: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/amp",
+        function () {
+          return __webpack_require__(8058);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 8058: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -14,7 +41,7 @@
         /* harmony export */
       });
       /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(5061);
+        __webpack_require__(3963);
       /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_amp__WEBPACK_IMPORTED_MODULE_0__
@@ -32,34 +59,7 @@
       /***/
     },
 
-    /***/ 2705: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/amp",
-        function () {
-          return __webpack_require__(2220);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 5061: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(6188);
-
-      /***/
-    },
-
-    /***/ 6188: /***/ (module, exports, __webpack_require__) => {
+    /***/ 9636: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -75,8 +75,8 @@
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4109)
       );
-      const _ampcontextsharedruntime = __webpack_require__(5852);
-      const _ampmode = __webpack_require__(9140);
+      const _ampcontextsharedruntime = __webpack_require__(7460);
+      const _ampmode = __webpack_require__(6764);
       function useAmp() {
         // Don't assign the context value to a variable to save bytes
         return (0, _ampmode.isInAmpMode)(
@@ -103,7 +103,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2705)
+      __webpack_exec__(7931)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for css-HASH.js
@@ -1,7 +1,14 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9813],
   {
-    /***/ 1487: /***/ (
+    /***/ 408: /***/ (module) => {
+      // extracted by mini-css-extract-plugin
+      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
+
+      /***/
+    },
+
+    /***/ 1313: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +16,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/css",
         function () {
-          return __webpack_require__(8037);
+          return __webpack_require__(9559);
         },
       ]);
       if (false) {
@@ -18,14 +25,7 @@
       /***/
     },
 
-    /***/ 7165: /***/ (module) => {
-      // extracted by mini-css-extract-plugin
-      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
-
-      /***/
-    },
-
-    /***/ 8037: /***/ (
+    /***/ 9559: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -39,7 +39,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(8017);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7165);
+        __webpack_require__(408);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           _css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -64,7 +64,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1487)
+      __webpack_exec__(1313)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for dynamic-HASH.js
@@ -1,24 +1,73 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 71: /***/ (
+    /***/ 2253: /***/ (
       __unused_webpack_module,
+      __webpack_exports__,
+      __webpack_require__
+    ) => {
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(8017);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(3760);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 5758)
+            .then(__webpack_require__.bind(__webpack_require__, 5758))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 5758],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
+
+      /***/
+    },
+
+    /***/ 3760: /***/ (
+      module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(3487);
-        },
-      ]);
-      if (false) {
-      }
+      module.exports = __webpack_require__(6455);
 
       /***/
     },
 
-    /***/ 2719: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6455: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -51,7 +100,7 @@
         __webpack_require__(4109)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(6192)
+        __webpack_require__(9896)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -152,63 +201,7 @@
       /***/
     },
 
-    /***/ 3487: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(8017);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(9330);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 7048)
-            .then(__webpack_require__.bind(__webpack_require__, 7048))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 7048],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
-
-      /***/
-    },
-
-    /***/ 5694: /***/ (
+    /***/ 7814: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -235,7 +228,24 @@
       /***/
     },
 
-    /***/ 6192: /***/ (
+    /***/ 8449: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(2253);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 9896: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -277,7 +287,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4109)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(5694);
+      const _loadablecontextsharedruntime = __webpack_require__(7814);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -511,23 +521,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
-
-    /***/ 9330: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(2719);
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(71)
+      __webpack_exec__(8449)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 1138: /***/ (
+    /***/ 931: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(9972);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 9972: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -20,30 +37,13 @@
 
       /***/
     },
-
-    /***/ 2673: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(1138);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2673)
+      __webpack_exec__(931)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 4528: /***/ (
+    /***/ 803: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(7122);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7122: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -16,7 +33,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(8017);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4891);
+        __webpack_require__(9557);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -50,29 +67,12 @@
       /***/
     },
 
-    /***/ 4891: /***/ (
+    /***/ 9557: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(64);
-
-      /***/
-    },
-
-    /***/ 6889: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4528);
-        },
-      ]);
-      if (false) {
-      }
+      module.exports = __webpack_require__(8040);
 
       /***/
     },
@@ -82,7 +82,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6889)
+      __webpack_exec__(803)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for image-HASH.js
@@ -1,17 +1,96 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2983],
   {
-    /***/ 1442: /***/ (
+    /***/ 1245: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        default: function () {
+          return _default;
+        },
+        getImageProps: function () {
+          return getImageProps;
+        },
+      });
+      const _interop_require_default = __webpack_require__(1532);
+      const _getimgprops = __webpack_require__(6327);
+      const _imagecomponent = __webpack_require__(6003);
+      const _imageloader = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(4865)
+      );
+      function getImageProps(imgProps) {
+        const { props } = (0, _getimgprops.getImgProps)(imgProps, {
+          defaultLoader: _imageloader.default,
+          // This is replaced by webpack define plugin
+          imgConf: {
+            deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
+            imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
+            path: "/_next/image",
+            loader: "default",
+            dangerouslyAllowSVG: false,
+            unoptimized: false,
+          },
+        });
+        // Normally we don't care about undefined props because we pass to JSX,
+        // but this exported function could be used by the end user for anything
+        // so we delete undefined props to clean it up a little.
+        for (const [key, value] of Object.entries(props)) {
+          if (value === undefined) {
+            delete props[key];
+          }
+        }
+        return {
+          props,
+        };
+      }
+      const _default = _imagecomponent.Image; //# sourceMappingURL=image-external.js.map
+
+      /***/
+    },
+
+    /***/ 1468: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4549);
+      module.exports = __webpack_require__(1245);
+
+      /***/
+    },
+
+    /***/ 1989: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/image",
+        function () {
+          return __webpack_require__(8136);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
 
-    /***/ 3582: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3942: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -89,116 +168,7 @@
       /***/
     },
 
-    /***/ 4549: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      0 && 0;
-      function _export(target, all) {
-        for (var name in all)
-          Object.defineProperty(target, name, {
-            enumerable: true,
-            get: all[name],
-          });
-      }
-      _export(exports, {
-        default: function () {
-          return _default;
-        },
-        getImageProps: function () {
-          return getImageProps;
-        },
-      });
-      const _interop_require_default = __webpack_require__(1532);
-      const _getimgprops = __webpack_require__(8831);
-      const _imagecomponent = __webpack_require__(7739);
-      const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(4777)
-      );
-      function getImageProps(imgProps) {
-        const { props } = (0, _getimgprops.getImgProps)(imgProps, {
-          defaultLoader: _imageloader.default,
-          // This is replaced by webpack define plugin
-          imgConf: {
-            deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
-            imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
-            path: "/_next/image",
-            loader: "default",
-            dangerouslyAllowSVG: false,
-            unoptimized: false,
-          },
-        });
-        // Normally we don't care about undefined props because we pass to JSX,
-        // but this exported function could be used by the end user for anything
-        // so we delete undefined props to clean it up a little.
-        for (const [key, value] of Object.entries(props)) {
-          if (value === undefined) {
-            delete props[key];
-          }
-        }
-        return {
-          props,
-        };
-      }
-      const _default = _imagecomponent.Image; //# sourceMappingURL=image-external.js.map
-
-      /***/
-    },
-
-    /***/ 4777: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "default", {
-        enumerable: true,
-        get: function () {
-          return _default;
-        },
-      });
-      const DEFAULT_Q = 75;
-      function defaultLoader(param) {
-        let { config, src, width, quality } = param;
-        var _config_qualities;
-        if (false) {
-        }
-        const q =
-          quality ||
-          ((_config_qualities = config.qualities) == null
-            ? void 0
-            : _config_qualities.reduce((prev, cur) =>
-                Math.abs(cur - DEFAULT_Q) < Math.abs(prev - DEFAULT_Q)
-                  ? cur
-                  : prev
-              )) ||
-          DEFAULT_Q;
-        return (
-          config.path +
-          "?url=" +
-          encodeURIComponent(src) +
-          "&w=" +
-          width +
-          "&q=" +
-          q +
-          (src.startsWith("/_next/static/media/") && false ? 0 : "")
-        );
-      }
-      // We use this to determine if the import is the default loader
-      // or a custom loader defined by the user in next.config.js
-      defaultLoader.__next_img_default = true;
-      const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map
-
-      /***/
-    },
-
-    /***/ 5328: /***/ (__unused_webpack_module, exports) => {
+    /***/ 4328: /***/ (__unused_webpack_module, exports) => {
       "use strict";
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
@@ -253,24 +223,54 @@
       /***/
     },
 
-    /***/ 6923: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/image",
-        function () {
-          return __webpack_require__(8964);
+    /***/ 4865: /***/ (__unused_webpack_module, exports) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "default", {
+        enumerable: true,
+        get: function () {
+          return _default;
         },
-      ]);
-      if (false) {
+      });
+      const DEFAULT_Q = 75;
+      function defaultLoader(param) {
+        let { config, src, width, quality } = param;
+        var _config_qualities;
+        if (false) {
+        }
+        const q =
+          quality ||
+          ((_config_qualities = config.qualities) == null
+            ? void 0
+            : _config_qualities.reduce((prev, cur) =>
+                Math.abs(cur - DEFAULT_Q) < Math.abs(prev - DEFAULT_Q)
+                  ? cur
+                  : prev
+              )) ||
+          DEFAULT_Q;
+        return (
+          config.path +
+          "?url=" +
+          encodeURIComponent(src) +
+          "&w=" +
+          width +
+          "&q=" +
+          q +
+          (src.startsWith("/_next/static/media/") && false ? 0 : "")
+        );
       }
+      // We use this to determine if the import is the default loader
+      // or a custom loader defined by the user in next.config.js
+      defaultLoader.__next_img_default = true;
+      const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map
 
       /***/
     },
 
-    /***/ 7739: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6003: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -292,17 +292,17 @@
         __webpack_require__(5775)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(64)
+        __webpack_require__(8040)
       );
-      const _getimgprops = __webpack_require__(8831);
-      const _imageconfig = __webpack_require__(1839);
-      const _imageconfigcontextsharedruntime = __webpack_require__(1516);
-      const _warnonce = __webpack_require__(4814);
-      const _routercontextsharedruntime = __webpack_require__(3245);
+      const _getimgprops = __webpack_require__(6327);
+      const _imageconfig = __webpack_require__(4740);
+      const _imageconfigcontextsharedruntime = __webpack_require__(9764);
+      const _warnonce = __webpack_require__(8310);
+      const _routercontextsharedruntime = __webpack_require__(3061);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(4777)
+        __webpack_require__(4865)
       );
-      const _usemergedref = __webpack_require__(3582);
+      const _usemergedref = __webpack_require__(3942);
       // This is replaced by webpack define plugin
       const configEnv = {
         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
@@ -629,7 +629,7 @@
       /***/
     },
 
-    /***/ 8831: /***/ (
+    /***/ 6327: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -645,9 +645,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(4814);
-      const _imageblursvg = __webpack_require__(5328);
-      const _imageconfig = __webpack_require__(1839);
+      const _warnonce = __webpack_require__(8310);
+      const _imageblursvg = __webpack_require__(4328);
+      const _imageconfig = __webpack_require__(4740);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -1059,7 +1059,7 @@
       /***/
     },
 
-    /***/ 8964: /***/ (
+    /***/ 8136: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -1076,8 +1076,8 @@
 
       // EXTERNAL MODULE: ./node_modules/.pnpm/react@19.0.0/node_modules/react/jsx-runtime.js
       var jsx_runtime = __webpack_require__(8017);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/image.js
-      var next_image = __webpack_require__(1442);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0_react@19.0.0__react@19.0.0/node_modules/next/image.js
+      var next_image = __webpack_require__(1468);
       var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png
       /* harmony default export */ const nextjs = {
         src: "/_next/static/media/nextjs.cae0b805.png",
@@ -1112,7 +1112,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6923)
+      __webpack_exec__(1989)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,102 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 1368: /***/ (module, exports, __webpack_require__) => {
+    /***/ 1547: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(5944);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 3942: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useMergedRef", {
+        enumerable: true,
+        get: function () {
+          return useMergedRef;
+        },
+      });
+      const _react = __webpack_require__(4109);
+      function useMergedRef(refA, refB) {
+        const cleanupA = (0, _react.useRef)(null);
+        const cleanupB = (0, _react.useRef)(null);
+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
+        // But this can cause us to leak a cleanup-ref into user code (e.g. via `<Link legacyBehavior>`),
+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
+        // (because it hasn't been updated for React 19)
+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
+        return (0, _react.useCallback)(
+          (current) => {
+            if (current === null) {
+              const cleanupFnA = cleanupA.current;
+              if (cleanupFnA) {
+                cleanupA.current = null;
+                cleanupFnA();
+              }
+              const cleanupFnB = cleanupB.current;
+              if (cleanupFnB) {
+                cleanupB.current = null;
+                cleanupFnB();
+              }
+            } else {
+              if (refA) {
+                cleanupA.current = applyRef(refA, current);
+              }
+              if (refB) {
+                cleanupB.current = applyRef(refB, current);
+              }
+            }
+          },
+          [refA, refB]
+        );
+      }
+      function applyRef(refA, current) {
+        if (typeof refA === "function") {
+          const cleanup = refA(current);
+          if (typeof cleanup === "function") {
+            return cleanup;
+          } else {
+            return () => refA(null);
+          }
+        } else {
+          refA.current = current;
+          return () => {
+            refA.current = null;
+          };
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-merged-ref.js.map
+
+      /***/
+    },
+
+    /***/ 4144: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -18,16 +113,16 @@
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4109)
       );
-      const _resolvehref = __webpack_require__(1462);
-      const _islocalurl = __webpack_require__(3876);
-      const _formaturl = __webpack_require__(1389);
-      const _utils = __webpack_require__(3675);
-      const _addlocale = __webpack_require__(4452);
-      const _routercontextsharedruntime = __webpack_require__(3245);
-      const _useintersection = __webpack_require__(8587);
-      const _getdomainlocale = __webpack_require__(2528);
-      const _addbasepath = __webpack_require__(6921);
-      const _usemergedref = __webpack_require__(3582);
+      const _resolvehref = __webpack_require__(3358);
+      const _islocalurl = __webpack_require__(2220);
+      const _formaturl = __webpack_require__(5653);
+      const _utils = __webpack_require__(3699);
+      const _addlocale = __webpack_require__(7980);
+      const _routercontextsharedruntime = __webpack_require__(3061);
+      const _useintersection = __webpack_require__(8835);
+      const _getdomainlocale = __webpack_require__(4552);
+      const _addbasepath = __webpack_require__(8353);
+      const _usemergedref = __webpack_require__(3942);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -380,7 +475,7 @@
       /***/
     },
 
-    /***/ 2528: /***/ (module, exports, __webpack_require__) => {
+    /***/ 4552: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -392,7 +487,7 @@
           return getDomainLocale;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(3894);
+      const _normalizetrailingslash = __webpack_require__(7758);
       const basePath =
         /* unused pure expression or super */ null && (false || "");
       function getDomainLocale(path, locale, locales, domainLocales) {
@@ -416,112 +511,53 @@
       /***/
     },
 
-    /***/ 2665: /***/ (
-      module,
-      __unused_webpack_exports,
+    /***/ 5944: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(1368);
-
-      /***/
-    },
-
-    /***/ 3582: /***/ (module, exports, __webpack_require__) => {
       "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "useMergedRef", {
-        enumerable: true,
-        get: function () {
-          return useMergedRef;
-        },
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
       });
-      const _react = __webpack_require__(4109);
-      function useMergedRef(refA, refB) {
-        const cleanupA = (0, _react.useRef)(null);
-        const cleanupB = (0, _react.useRef)(null);
-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
-        // But this can cause us to leak a cleanup-ref into user code (e.g. via `<Link legacyBehavior>`),
-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
-        // (because it hasn't been updated for React 19)
-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
-        return (0, _react.useCallback)(
-          (current) => {
-            if (current === null) {
-              const cleanupFnA = cleanupA.current;
-              if (cleanupFnA) {
-                cleanupA.current = null;
-                cleanupFnA();
-              }
-              const cleanupFnB = cleanupB.current;
-              if (cleanupFnB) {
-                cleanupB.current = null;
-                cleanupFnB();
-              }
-            } else {
-              if (refA) {
-                cleanupA.current = applyRef(refA, current);
-              }
-              if (refB) {
-                cleanupB.current = applyRef(refB, current);
-              }
-            }
-          },
-          [refA, refB]
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(8017);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(9835);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_link__WEBPACK_IMPORTED_MODULE_1__
         );
-      }
-      function applyRef(refA, current) {
-        if (typeof refA === "function") {
-          const cleanup = refA(current);
-          if (typeof cleanup === "function") {
-            return cleanup;
-          } else {
-            return () => refA(null);
-          }
-        } else {
-          refA.current = current;
-          return () => {
-            refA.current = null;
-          };
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-merged-ref.js.map
-
-      /***/
-    },
 
-    /***/ 5025: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(9718);
-        },
-      ]);
-      if (false) {
+      function aLink(props) {
+        return /*#__PURE__*/ (0,
+        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
+          children: [
+            /*#__PURE__*/ (0,
+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
+              children: "A Link page!",
+            }),
+            /*#__PURE__*/ (0,
+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+              next_link__WEBPACK_IMPORTED_MODULE_1___default(),
+              {
+                href: "/",
+                children: "Go to /",
+              }
+            ),
+          ],
+        });
       }
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
 
       /***/
     },
 
-    /***/ 8587: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8835: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -534,7 +570,7 @@
         },
       });
       const _react = __webpack_require__(4109);
-      const _requestidlecallback = __webpack_require__(902);
+      const _requestidlecallback = __webpack_require__(6190);
       const hasIntersectionObserver =
         typeof IntersectionObserver === "function";
       const observers = new Map();
@@ -647,48 +683,12 @@
       /***/
     },
 
-    /***/ 9718: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
+    /***/ 9835: /***/ (
+      module,
+      __unused_webpack_exports,
       __webpack_require__
     ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(8017);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(2665);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_link__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      function aLink(props) {
-        return /*#__PURE__*/ (0,
-        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
-          children: [
-            /*#__PURE__*/ (0,
-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
-              children: "A Link page!",
-            }),
-            /*#__PURE__*/ (0,
-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-              next_link__WEBPACK_IMPORTED_MODULE_1___default(),
-              {
-                href: "/",
-                children: "Go to /",
-              }
-            ),
-          ],
-        });
-      }
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
+      module.exports = __webpack_require__(4144);
 
       /***/
     },
@@ -698,7 +698,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(5025)
+      __webpack_exec__(1547)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 760: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(1841);
-
-      /***/
-    },
-
-    /***/ 2713: /***/ (
+    /***/ 179: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -19,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(4077);
+          return __webpack_require__(7216);
         },
       ]);
       if (false) {
@@ -28,7 +18,17 @@
       /***/
     },
 
-    /***/ 4077: /***/ (
+    /***/ 3022: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(1177);
+
+      /***/
+    },
+
+    /***/ 7216: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(8017);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(760);
+        __webpack_require__(3022);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -68,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2713)
+      __webpack_exec__(179)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 3254: /***/ (
+    /***/ 1060: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(8807);
+      module.exports = __webpack_require__(9599);
 
       /***/
     },
 
-    /***/ 8745: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(8913);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8913: /***/ (
+    /***/ 1815: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(8017);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(3254);
+        __webpack_require__(1060);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -75,13 +58,30 @@
 
       /***/
     },
+
+    /***/ 5867: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(1815);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(8745)
+      __webpack_exec__(5867)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,17 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 760: /***/ (
+    /***/ 3022: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(1841);
+      module.exports = __webpack_require__(1177);
 
       /***/
     },
 
-    /***/ 2867: /***/ (
+    /***/ 4563: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(6490);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 6490: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(8017);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(760);
+        __webpack_require__(3022);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -44,30 +61,13 @@
 
       /***/
     },
-
-    /***/ 6545: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(2867);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6545)
+      __webpack_exec__(4563)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 5306-HASH.js
failed to diff
Diff for 8377-HASH.js

Diff too large to display

Diff for main-HASH.js

Diff too large to display

Commit: c4bdb8c

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
created-by: Next.js team PRs by the Next.js team. tests Turbopack Related to Turbopack with Next.js. type: next
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant