Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[tests] Deprecate check #65874

Draft
wants to merge 2 commits into
base: canary
Choose a base branch
from
Draft

[tests] Deprecate check #65874

wants to merge 2 commits into from

Conversation

wyattjoh
Copy link
Member

This deprecates the check test, replaced by using retry. This enhances the error messages presented during test failures, and brings us closer to a native jest testing experience.

The refactor was completed with the following codemod: https://github.com/wyattjoh/retry-codemod

@ijjk ijjk added created-by: Next.js team PRs by the Next.js team tests labels May 17, 2024
@wyattjoh wyattjoh marked this pull request as ready for review May 17, 2024 02:34
@wyattjoh wyattjoh requested review from manovotny and delbaoliveira and removed request for a team May 17, 2024 02:34
@wyattjoh wyattjoh marked this pull request as draft May 17, 2024 02:35
@ijjk
Copy link
Member

ijjk commented May 17, 2024

Failing test suites

Commit: ab76978

TURBOPACK=1 pnpm test test/integration/client-404/test/index.test.js (turbopack)

  • Client 404 > development mode > Client Navigation 404 > should hard navigate to URL on failing to load bundle
Expand output

● Client 404 › development mode › Client Navigation 404 › should hard navigate to URL on failing to load bundle

TypeError: (0 , _nexttestutils.check) is not a function

  29 |       await browser.eval(() => (window.beforeNav = 'hi'))
  30 |       await browser.elementByCss('#to-nonexistent').click()
> 31 |       await check(() => browser.elementByCss('#errorStatusCode').text(), /404/)
     |                  ^
  32 |       expect(await browser.eval(() => window.beforeNav)).not.toBe('hi')
  33 |     })
  34 |

  at Object.<anonymous> (integration/client-404/test/client-navigation.js:31:18)

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

TURBOPACK=1 pnpm test test/integration/jsconfig-baseurl/test/index.test.js (turbopack)

  • jsconfig.json baseurl > default behavior > should have correct module not found error
Expand output

● jsconfig.json baseurl › default behavior › should have correct module not found error

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

Expected: true
Received: undefined

  61 |           )
  62 |         })
> 63 |         expect(found).toBe(true)
     |                       ^
  64 |       } finally {
  65 |         await fs.writeFile(basicPage, contents)
  66 |       }

  at Object.toBe (integration/jsconfig-baseurl/test/index.test.js:63:23)

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

TURBOPACK=1 pnpm test test/integration/app-document/test/index.test.js (turbopack)

  • Document and App > Client side > should detect the changes to pages/_app.js and display it
  • Document and App > Client side > should detect the changes to pages/_document.js and display it
  • Document and App > Rendering via HTTP > _app > It should show valid error when thrown in _app getInitialProps
Expand output

● Document and App › Rendering via HTTP › _app › It should show valid error when thrown in _app getInitialProps

TypeError: (0 , _nexttestutils.check) is not a function

  135 |           _app.restore()
  136 |           // Make sure _app is restored
> 137 |           await check(() => render('/'), /page-index/)
      |                      ^
  138 |           expect(foundErr).toBeTruthy()
  139 |         }
  140 |       })

  at Object.<anonymous> (integration/app-document/test/rendering.js:137:22)

● Document and App › Client side › should detect the changes to pages/_app.js and display it

TypeError: (0 , _nexttestutils.check) is not a function

  20 |         writeFileSync(appPath, editedContent, 'utf8')
  21 |
> 22 |         await check(() => browser.elementByCss('body').text(), /Hi HMR/)
     |                    ^
  23 |
  24 |         // add the original content
  25 |         writeFileSync(appPath, originalContent, 'utf8')

  at Object.<anonymous> (integration/app-document/test/client.js:22:20)

● Document and App › Client side › should detect the changes to pages/_document.js and display it

TypeError: (0 , _nexttestutils.check) is not a function

  51 |         writeFileSync(appPath, editedContent, 'utf8')
  52 |
> 53 |         await check(
     |                    ^
  54 |           () => browser.elementByCss('body').text(),
  55 |           /Hi Document HMR/
  56 |         )

  at Object.<anonymous> (integration/app-document/test/client.js:53:20)

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

TURBOPACK=1 pnpm test-start test/e2e/app-dir/app-prefetch-false-loading/app-prefetch-false-loading.test.ts (turbopack)

  • app-prefetch-false-loading > should not re-trigger loading state when navigating between pages that share a dynamic layout
Expand output

● app-prefetch-false-loading › should not re-trigger loading state when navigating between pages that share a dynamic layout

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  23 |       expect(
  24 |         await browser.hasElementByCssSelector('#nested-testing-page')
> 25 |       ).toMatch(true)
     |         ^
  26 |     })
  27 |
  28 |     const newRandomNumber = await browser.elementById('random-number').text()

  at toMatch (e2e/app-dir/app-prefetch-false-loading/app-prefetch-false-loading.test.ts:25:9)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (e2e/app-dir/app-prefetch-false-loading/app-prefetch-false-loading.test.ts:22:5)

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

pnpm test test/integration/config-devtool-dev/test/index.test.js

  • devtool set in development mode in next config > should warn and revert when a devtool is set in development mode
Expand output

● devtool set in development mode in next config › should warn and revert when a devtool is set in development mode

expect(received).toBeTruthy()

Received: undefined

  53 |
  54 |       await killApp(app)
> 55 |       expect(found).toBeTruthy()
     |                     ^
  56 |     })
  57 |   }
  58 | )

  at Object.toBeTruthy (integration/config-devtool-dev/test/index.test.js:55:21)

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-dev test/development/app-hmr/hmr.test.ts (PPR)

  • app-dir-hmr > filesystem changes > should update server components pages when env files is changed (edge)
Expand output

● app-dir-hmr › filesystem changes › should update server components pages when env files is changed (edge)

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

Expected: "ipad"
Received: "mac"

  78 |       try {
  79 |         await retry(async () => {
> 80 |           expect(await browser.elementByCss('p').text()).toBe('ipad')
     |                                                          ^
  81 |         })
  82 |       } finally {
  83 |         await next.patchFile(envFile, envContent)

  at toBe (development/app-hmr/hmr.test.ts:80:58)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (development/app-hmr/hmr.test.ts:79:9)

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

pnpm test-dev test/development/watch-config-file/index.test.ts

  • watch-config-file > should output config file change
Expand output

● watch-config-file › should output config file change

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

Expected: 200
Received: {}

  38 |
  39 |     await retry(() => {
> 40 |       expect(next.fetch('/about').then((res) => res.status)).toBe(200)
     |                                                              ^
  41 |     })
  42 |   })
  43 | })

  at toBe (development/watch-config-file/index.test.ts:40:62)
  at fn (lib/next-test-utils.ts:731:20)
  at Object.<anonymous> (development/watch-config-file/index.test.ts:39:5)

● Test suite failed to run

FetchError: request to http://localhost:33941/ failed, reason: socket hang up

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● Test suite failed to run

FetchError: request to http://localhost:33941/ failed, reason: socket hang up

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● Test suite failed to run

FetchError: request to http://localhost:33941/ failed, reason: socket hang up

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● Test suite failed to run

FetchError: request to http://localhost:33941/ failed, reason: socket hang up

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● Test suite failed to run

FetchError: request to http://localhost:33941/ failed, reason: socket hang up

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● Test suite failed to run

FetchError: request to http://localhost:33941/ failed, reason: socket hang up

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

● Test suite failed to run

FetchError: request to http://localhost:33941/ failed, reason: socket hang up

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7/node_modules/node-fetch/lib/index.js:1491:11)

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

TURBOPACK=1 pnpm test test/integration/scroll-forward-restoration/test/index.test.js (turbopack)

  • Scroll Forward Restoration Support > development mode > should restore the scroll position on navigating forward
Expand output

● Scroll Forward Restoration Support › development mode › should restore the scroll position on navigating forward

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  54 |
  55 |     await retry(async () => {
> 56 |       expect(await browser.eval(() => window.didHydrate)).toMatch({
     |                                                           ^
  57 |         test(content) {
  58 |           return content
  59 |         },

  at toMatch (integration/scroll-forward-restoration/test/index.test.js:56:59)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/scroll-forward-restoration/test/index.test.js:55:5)

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-start test/e2e/app-dir/css-client-side-nav-parallel-routes/css-client-side-nav-parallel-routes.test.ts (PPR)

  • css-client-side-nav-parallel-routes > should apply styles after navigation
Expand output

● css-client-side-nav-parallel-routes › should apply styles after navigation

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

Expected: "rgb(0, 255, 0)"
Received: "rgba(0, 0, 0, 0)"

  12 |     expect(
  13 |       await browser.elementByCss('#global').getComputedCss('background-color')
> 14 |     ).toBe('rgb(0, 255, 0)')
     |       ^
  15 |     expect(
  16 |       await browser.elementByCss('#module').getComputedCss('background-color')
  17 |     ).toBe('rgb(0, 255, 0)')

  at Object.toBe (e2e/app-dir/css-client-side-nav-parallel-routes/css-client-side-nav-parallel-routes.test.ts:14:7)

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

TURBOPACK=1 pnpm test-start test/e2e/app-dir/parallel-route-not-found-params/parallel-route-not-found-params.test.ts (turbopack)

  • parallel-route-not-found > should behave correctly without any errors
  • parallel-route-not-found > should handle the not found case correctly without any errors
Expand output

● parallel-route-not-found › should behave correctly without any errors

expect(received).toBeTruthy()

Received: false

  13 |         next.cliOutput.includes('TypeError') ||
  14 |           next.cliOutput.includes('Warning')
> 15 |       ).toBeTruthy()
     |         ^
  16 |     })
  17 |
  18 |     expect(await browser.elementByCss('body').text()).not.toContain(

  at toBeTruthy (e2e/app-dir/parallel-route-not-found-params/parallel-route-not-found-params.test.ts:15:9)
  at fn (lib/next-test-utils.ts:731:20)
  at Object.<anonymous> (e2e/app-dir/parallel-route-not-found-params/parallel-route-not-found-params.test.ts:11:5)

● parallel-route-not-found › should handle the not found case correctly without any errors

expect(received).toBeTruthy()

Received: false

  56 |         next.cliOutput.includes('TypeError') ||
  57 |           next.cliOutput.includes('Warning')
> 58 |       ).toBeTruthy()
     |         ^
  59 |     })
  60 |
  61 |     expect(await browser.elementByCss('body').text()).toContain(

  at toBeTruthy (e2e/app-dir/parallel-route-not-found-params/parallel-route-not-found-params.test.ts:58:9)
  at fn (lib/next-test-utils.ts:731:20)
  at Object.<anonymous> (e2e/app-dir/parallel-route-not-found-params/parallel-route-not-found-params.test.ts:54:5)

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

TURBOPACK=1 pnpm test test/integration/i18n-support-catchall/test/index.test.js (turbopack)

  • i18n Support Root Catch-all > production mode > should navigate to other locale index and back
  • i18n Support Root Catch-all > production mode > should navigate to other locale page and back
Expand output

● i18n Support Root Catch-all › production mode › should navigate to other locale index and back

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

Expected: "/nl-NL"
Received: "/"

  86 |
  87 |     await retry(async () => {
> 88 |       expect(await browser.eval('window.location.pathname')).toEqual('/nl-NL')
     |                                                              ^
  89 |     })
  90 |
  91 |     expect(await browser.elementByCss('#router-locale').text()).toBe('nl-NL')

  at toEqual (integration/i18n-support-catchall/test/index.test.js:88:62)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/i18n-support-catchall/test/index.test.js:87:5)

● i18n Support Root Catch-all › production mode › should navigate to other locale page and back

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

Expected: "/nl-NL/another"
Received: "/"

  140 |
  141 |     await retry(async () => {
> 142 |       expect(await browser.eval('window.location.pathname')).toEqual(
      |                                                              ^
  143 |         '/nl-NL/another'
  144 |       )
  145 |     })

  at toEqual (integration/i18n-support-catchall/test/index.test.js:142:62)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/i18n-support-catchall/test/index.test.js:141:5)

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

pnpm test test/integration/next-image-legacy/no-intersection-observer-fallback/test/index.test.ts

  • Image Component No IntersectionObserver test > production mode > Client-side Lazy Loading Tests > should automatically load images if observer does not exist
  • Image Component No IntersectionObserver test > production mode > SSR Lazy Loading Tests > should automatically load images if observer does not exist
Expand output

● Image Component No IntersectionObserver test › production mode › SSR Lazy Loading Tests › should automatically load images if observer does not exist

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has value: null

  32 |           // Make sure the IntersectionObserver is mocked to null during the test
  33 |           await retry(async () => {
> 34 |             expect(await browser.eval('IntersectionObserver')).toMatch(/null/)
     |                                                                ^
  35 |           })
  36 |
  37 |           expect(

  at toMatch (integration/next-image-legacy/no-intersection-observer-fallback/test/index.test.ts:34:64)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/next-image-legacy/no-intersection-observer-fallback/test/index.test.ts:33:11)

● Image Component No IntersectionObserver test › production mode › Client-side Lazy Loading Tests › should automatically load images if observer does not exist

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has value: null

  54 |           // Make sure the IntersectionObserver is mocked to null during the test
  55 |           await retry(async () => {
> 56 |             expect(await browser.eval('IntersectionObserver')).toMatch(/null/)
     |                                                                ^
  57 |           })
  58 |
  59 |           await browser.waitForElementByCss('#link-no-observer').click()

  at toMatch (integration/next-image-legacy/no-intersection-observer-fallback/test/index.test.ts:56:64)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/next-image-legacy/no-intersection-observer-fallback/test/index.test.ts:55:11)

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

pnpm test-start test/e2e/app-dir/app-prefetch/prefetching.test.ts

  • app dir - prefetching > should not fetch again when a static page was prefetched
  • app dir - prefetching > should not fetch again when a static page was prefetched when navigating to it twice
  • app dir - prefetching > should calculate _rsc query based on Next-Url
  • app dir - prefetching > dynamic rendering > /force-dynamic > should not re-render layout when navigating between sub-pages
  • app dir - prefetching > dynamic rendering > /revalidate-0 > should not re-render layout when navigating between sub-pages
Expand output

● app dir - prefetching › should not fetch again when a static page was prefetched

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

Expected: 1
Received: 2

  112 |     expect(
  113 |       requests.filter((request) => request === '/static-page').length
> 114 |     ).toBe(1)
      |       ^
  115 |   })
  116 |
  117 |   it('should not fetch again when a static page was prefetched when navigating to it twice', async () => {

  at Object.toBe (e2e/app-dir/app-prefetch/prefetching.test.ts:114:7)

● app dir - prefetching › should not fetch again when a static page was prefetched when navigating to it twice

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

Expected: 1
Received: 2

  157 |           request === '/static-page' || request.includes(NEXT_RSC_UNION_QUERY)
  158 |       ).length
> 159 |     ).toBe(1)
      |       ^
  160 |   })
  161 |
  162 |   it('should calculate `_rsc` query based on `Next-Url`', async () => {

  at Object.toBe (e2e/app-dir/app-prefetch/prefetching.test.ts:159:7)

● app dir - prefetching › should calculate _rsc query based on Next-Url

expect(received).toBeTruthy()

Received: false

  175 |     )
  176 |     await retry(() => {
> 177 |       expect(staticPageRequests.length === 1).toBeTruthy()
      |                                               ^
  178 |     })
  179 |
  180 |     // Unable to clear router cache so mpa navigation

  at toBeTruthy (e2e/app-dir/app-prefetch/prefetching.test.ts:177:47)
  at fn (lib/next-test-utils.ts:731:20)
  at Object.<anonymous> (e2e/app-dir/app-prefetch/prefetching.test.ts:176:5)

● app dir - prefetching › dynamic rendering › /force-dynamic › should not re-render layout when navigating between sub-pages

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  331 |
  332 |         await retry(async () => {
> 333 |           expect(await browser.hasElementByCssSelector('#sub-page')).toMatch(
      |                                                                      ^
  334 |             true
  335 |           )
  336 |         })

  at toMatch (e2e/app-dir/app-prefetch/prefetching.test.ts:333:70)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (e2e/app-dir/app-prefetch/prefetching.test.ts:332:9)

● app dir - prefetching › dynamic rendering › /revalidate-0 › should not re-render layout when navigating between sub-pages

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  331 |
  332 |         await retry(async () => {
> 333 |           expect(await browser.hasElementByCssSelector('#sub-page')).toMatch(
      |                                                                      ^
  334 |             true
  335 |           )
  336 |         })

  at toMatch (e2e/app-dir/app-prefetch/prefetching.test.ts:333:70)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (e2e/app-dir/app-prefetch/prefetching.test.ts:332:9)

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

pnpm test test/integration/link-with-encoding/test/index.test.js

  • Link Component with Encoding > colon > should have correct query on Router#push
  • Link Component with Encoding > colon > should have correct query on simple client-side
  • Link Component with Encoding > double quote > should have correct query on Router#push
  • Link Component with Encoding > double quote > should have correct query on simple client-side
  • Link Component with Encoding > forward slash > should have correct query on Router#push
  • Link Component with Encoding > forward slash > should have correct query on simple client-side
  • Link Component with Encoding > percent > should have correct query on Router#push
  • Link Component with Encoding > percent > should have correct query on simple client-side
  • Link Component with Encoding > spaces > should have correct query on Router#push
  • Link Component with Encoding > spaces > should have correct query on simple client-side
Expand output

● Link Component with Encoding › spaces › should have correct query on Router#push

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  44 |           expect(
  45 |             await browser.hasElementByCssSelector('#query-content')
> 46 |           ).toMatch({
     |             ^
  47 |             test(val) {
  48 |               return Boolean(val)
  49 |             },

  at toMatch (integration/link-with-encoding/test/index.test.js:46:13)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/link-with-encoding/test/index.test.js:43:9)

● Link Component with Encoding › spaces › should have correct query on simple client-side

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  65 |           expect(
  66 |             await browser.hasElementByCssSelector('#query-content')
> 67 |           ).toMatch({
     |             ^
  68 |             test(val) {
  69 |               return Boolean(val)
  70 |             },

  at toMatch (integration/link-with-encoding/test/index.test.js:67:13)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/link-with-encoding/test/index.test.js:64:9)

● Link Component with Encoding › percent › should have correct query on Router#push

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  103 |           expect(
  104 |             await browser.hasElementByCssSelector('#query-content')
> 105 |           ).toMatch({
      |             ^
  106 |             test(val) {
  107 |               return Boolean(val)
  108 |             },

  at toMatch (integration/link-with-encoding/test/index.test.js:105:13)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/link-with-encoding/test/index.test.js:102:9)

● Link Component with Encoding › percent › should have correct query on simple client-side

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  124 |           expect(
  125 |             await browser.hasElementByCssSelector('#query-content')
> 126 |           ).toMatch({
      |             ^
  127 |             test(val) {
  128 |               return Boolean(val)
  129 |             },

  at toMatch (integration/link-with-encoding/test/index.test.js:126:13)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/link-with-encoding/test/index.test.js:123:9)

● Link Component with Encoding › forward slash › should have correct query on Router#push

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  165 |           expect(
  166 |             await browser.hasElementByCssSelector('#query-content')
> 167 |           ).toMatch({
      |             ^
  168 |             test(val) {
  169 |               return Boolean(val)
  170 |             },

  at toMatch (integration/link-with-encoding/test/index.test.js:167:13)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/link-with-encoding/test/index.test.js:164:9)

● Link Component with Encoding › forward slash › should have correct query on simple client-side

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  186 |           expect(
  187 |             await browser.hasElementByCssSelector('#query-content')
> 188 |           ).toMatch({
      |             ^
  189 |             test(val) {
  190 |               return Boolean(val)
  191 |             },

  at toMatch (integration/link-with-encoding/test/index.test.js:188:13)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/link-with-encoding/test/index.test.js:185:9)

● Link Component with Encoding › double quote › should have correct query on Router#push

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  231 |           expect(
  232 |             await browser.hasElementByCssSelector('#query-content')
> 233 |           ).toMatch({
      |             ^
  234 |             test(val) {
  235 |               return Boolean(val)
  236 |             },

  at toMatch (integration/link-with-encoding/test/index.test.js:233:13)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/link-with-encoding/test/index.test.js:230:9)

● Link Component with Encoding › double quote › should have correct query on simple client-side

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  256 |           expect(
  257 |             await browser.hasElementByCssSelector('#query-content')
> 258 |           ).toMatch({
      |             ^
  259 |             test(val) {
  260 |               return Boolean(val)
  261 |             },

  at toMatch (integration/link-with-encoding/test/index.test.js:258:13)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/link-with-encoding/test/index.test.js:255:9)

● Link Component with Encoding › colon › should have correct query on Router#push

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  301 |           expect(
  302 |             await browser.hasElementByCssSelector('#query-content')
> 303 |           ).toMatch({
      |             ^
  304 |             test(val) {
  305 |               return Boolean(val)
  306 |             },

  at toMatch (integration/link-with-encoding/test/index.test.js:303:13)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/link-with-encoding/test/index.test.js:300:9)

● Link Component with Encoding › colon › should have correct query on simple client-side

expect(received).toMatch(expected)

Matcher error: received value must be a string

Received has type:  boolean
Received has value: true

  322 |           expect(
  323 |             await browser.hasElementByCssSelector('#query-content')
> 324 |           ).toMatch({
      |             ^
  325 |             test(val) {
  326 |               return Boolean(val)
  327 |             },

  at toMatch (integration/link-with-encoding/test/index.test.js:324:13)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/link-with-encoding/test/index.test.js:321:9)

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

TURBOPACK=1 pnpm test test/integration/jsconfig-paths/test/index.test.js (turbopack)

  • jsconfig paths > default behavior > should have correct module not found error
  • jsconfig paths without baseurl > default behavior > should have correct module not found error
Expand output

● jsconfig paths › default behavior › should have correct module not found error

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

Expected: true
Received: undefined

  76 |           )
  77 |         })
> 78 |         expect(found).toBe(true)
     |                       ^
  79 |       } finally {
  80 |         await fs.writeFile(basicPage, contents)
  81 |       }

  at Object.toBe (integration/jsconfig-paths/test/index.test.js:78:23)

● jsconfig paths without baseurl › default behavior › should have correct module not found error

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

Expected: true
Received: undefined

  76 |           )
  77 |         })
> 78 |         expect(found).toBe(true)
     |                       ^
  79 |       } finally {
  80 |         await fs.writeFile(basicPage, contents)
  81 |       }

  at Object.toBe (integration/jsconfig-paths/test/index.test.js:78:23)

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

pnpm test test/integration/typescript-hmr/test/index.test.js

  • TypeScript HMR > should ignore type errors in development
Expand output

● TypeScript HMR › should ignore type errors in development

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

Expected: true
Received: undefined

  116 |       })
  117 |
> 118 |       expect(res).toBe(true)
      |                   ^
  119 |     } finally {
  120 |       if (browser) browser.close()
  121 |       await fs.writeFile(pagePath, origContent)

  at Object.toBe (integration/typescript-hmr/test/index.test.js:118:19)

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

pnpm test test/integration/image-optimizer/test/minimum-cache-ttl.test.ts

  • with minimumCacheTTL of 5 sec > Production Mode Server support with next.config.js > should use cache and stale-while-revalidate when query is the same for external image
  • with minimumCacheTTL of 5 sec > dev support with next.config.js > should use cache and stale-while-revalidate when query is the same for external image
  • with minimumCacheTTL of 5 sec > dev support with next.config.js > should use cache and stale-while-revalidate when query is the same for internal image
Expand output

● with minimumCacheTTL of 5 sec › dev support with next.config.js › should use cache and stale-while-revalidate when query is the same for external image

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

Expected: "HIT"
Received: "STALE"

  955 |         expect(five.duration).toBeLessThan(one.duration)
  956 |         expect(five.res.status).toBe(200)
> 957 |         expect(five.res.headers.get('X-Nextjs-Cache')).toBe('HIT')
      |                                                        ^
  958 |         expect(five.res.headers.get('Content-Type')).toBe('image/webp')
  959 |         expect(five.res.headers.get('Content-Disposition')).toBe(
  960 |           `${contentDispositionType}; filename="slow.webp"`

  at Object.toBe (integration/image-optimizer/test/util.ts:957:56)

● with minimumCacheTTL of 5 sec › dev support with next.config.js › should use cache and stale-while-revalidate when query is the same for internal image

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

Expected: "HIT"
Received: "STALE"

  1126 |       expect(five.duration).toBeLessThan(one.duration)
  1127 |       expect(five.res.status).toBe(200)
> 1128 |       expect(five.res.headers.get('X-Nextjs-Cache')).toBe('HIT')
       |                                                      ^
  1129 |       expect(five.res.headers.get('Content-Type')).toBe('image/webp')
  1130 |       expect(five.res.headers.get('Content-Disposition')).toBe(
  1131 |         `${contentDispositionType}; filename="test.webp"`

  at Object.toBe (integration/image-optimizer/test/util.ts:1128:54)

● with minimumCacheTTL of 5 sec › Production Mode Server support with next.config.js › should use cache and stale-while-revalidate when query is the same for external image

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

Expected: "HIT"
Received: "STALE"

  955 |         expect(five.duration).toBeLessThan(one.duration)
  956 |         expect(five.res.status).toBe(200)
> 957 |         expect(five.res.headers.get('X-Nextjs-Cache')).toBe('HIT')
      |                                                        ^
  958 |         expect(five.res.headers.get('Content-Type')).toBe('image/webp')
  959 |         expect(five.res.headers.get('Content-Disposition')).toBe(
  960 |           `${contentDispositionType}; filename="slow.webp"`

  at Object.toBe (integration/image-optimizer/test/util.ts:957:56)

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

pnpm test-start test/e2e/app-dir/router-autoscroll/router-autoscroll.test.ts

  • router autoscrolling on navigation > bugs > Should scroll to the top of the layout when the first child is display none
  • router autoscrolling on navigation > bugs > Should scroll to the top of the layout when the first child is position fixed
  • router autoscrolling on navigation > bugs > Should scroll to the top of the layout when the first child is position sticky
  • router autoscrolling on navigation > bugs > Should apply scroll when loading.js is used
Expand output

● router autoscrolling on navigation › bugs › Should scroll to the top of the layout when the first child is display none

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

Expected: 0
Received: {}

  171 |         .waitForElementByCss('#content-that-is-visible')
  172 |       await retry(() => {
> 173 |         expect(browser.eval('window.scrollY')).toBe(0)
      |                                                ^
  174 |       })
  175 |     })
  176 |

  at toBe (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:173:48)
  at fn (lib/next-test-utils.ts:731:20)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:172:7)

● router autoscrolling on navigation › bugs › Should scroll to the top of the layout when the first child is position fixed

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

Expected: 0
Received: {}

  183 |         .waitForElementByCss('#content-that-is-visible')
  184 |       await retry(() => {
> 185 |         expect(browser.eval('window.scrollY')).toBe(0)
      |                                                ^
  186 |       })
  187 |
  188 |       if (isNextDev) {

  at toBe (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:185:48)
  at fn (lib/next-test-utils.ts:731:20)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:184:7)

● router autoscrolling on navigation › bugs › Should scroll to the top of the layout when the first child is position sticky

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

Expected: 0
Received: {}

  210 |         .waitForElementByCss('#content-that-is-visible')
  211 |       await retry(() => {
> 212 |         expect(browser.eval('window.scrollY')).toBe(0)
      |                                                ^
  213 |       })
  214 |
  215 |       if (isNextDev) {

  at toBe (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:212:48)
  at fn (lib/next-test-utils.ts:731:20)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:211:7)

● router autoscrolling on navigation › bugs › Should apply scroll when loading.js is used

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

Expected: 0
Received: {}

  237 |         .waitForElementByCss('#loading-component')
  238 |       await retry(() => {
> 239 |         expect(browser.eval('window.scrollY')).toBe(0)
      |                                                ^
  240 |       })
  241 |       await browser.waitForElementByCss('#content-that-is-visible')
  242 |       await retry(() => {

  at toBe (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:239:48)
  at fn (lib/next-test-utils.ts:731:20)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:238:7)

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

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

  • Dynamic Routing > development mode > should resolve dynamic route href for page added later
Expand output

● Dynamic Routing › development mode › should resolve dynamic route href for page added later

expect(received).toBeTruthy()

Received: false

  1172 |
  1173 |         // Check if the response was successful (status code in the range 200-299)
> 1174 |         expect(!response.ok).toBeTruthy()
       |                              ^
  1175 |
  1176 |         const contents = await response.text()
  1177 |         const containsAddedLater = contents.includes('added-later')

  at toBeTruthy (integration/dynamic-routing/test/index.test.js:1174:30)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (integration/dynamic-routing/test/index.test.js:1163:7)

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

TURBOPACK=1 pnpm test-start test/e2e/app-dir/ppr-full/ppr-full.test.ts (turbopack)

  • ppr-full > HTML Response > for /dynamic/force-static > should have correct headers
  • ppr-full > HTML Response > for /static > should have correct headers
  • ppr-full > Navigation Signals > notFound() > for /navigation/not-found > should have correct headers
  • ppr-full > Navigation Signals > notFound() > for /navigation/not-found/dynamic > should have correct headers
  • ppr-full > Navigation Signals > redirect() > for /navigation/redirect > should have correct headers
  • ppr-full > Navigation Signals > redirect() > for /navigation/redirect/dynamic > should have correct headers
  • ppr-full > Prefetch RSC Response > for / > should have correct headers
  • ppr-full > Prefetch RSC Response > for /dynamic/force-dynamic > should have correct headers
  • ppr-full > Prefetch RSC Response > for /dynamic/force-dynamic/nested/a > should have correct headers
  • ppr-full > Prefetch RSC Response > for /dynamic/force-dynamic/nested/b > should have correct headers
  • ppr-full > Prefetch RSC Response > for /dynamic/force-dynamic/nested/c > should have correct headers
  • ppr-full > Prefetch RSC Response > for /dynamic/force-static > should have correct headers
  • ppr-full > Prefetch RSC Response > for /loading/a > should have correct headers
  • ppr-full > Prefetch RSC Response > for /loading/b > should have correct headers
  • ppr-full > Prefetch RSC Response > for /loading/c > should have correct headers
  • ppr-full > Prefetch RSC Response > for /metadata > should have correct headers
  • ppr-full > Prefetch RSC Response > for /nested/a > should have correct headers
  • ppr-full > Prefetch RSC Response > for /nested/b > should have correct headers
  • ppr-full > Prefetch RSC Response > for /nested/c > should have correct headers
  • ppr-full > Prefetch RSC Response > for /no-suspense > should have correct headers
  • ppr-full > Prefetch RSC Response > for /no-suspense/nested/a > should have correct headers
  • ppr-full > Prefetch RSC Response > for /no-suspense/nested/b > should have correct headers
  • ppr-full > Prefetch RSC Response > for /no-suspense/nested/c > should have correct headers
  • ppr-full > Prefetch RSC Response > for /on-demand/a > should have correct headers
  • ppr-full > Prefetch RSC Response > for /on-demand/b > should have correct headers
  • ppr-full > Prefetch RSC Response > for /on-demand/c > should have correct headers
  • ppr-full > Prefetch RSC Response > for /static > should have correct headers
Expand output

● ppr-full › HTML Response › for /static › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  164 |             expect(cacheControl).toEqual('no-store, must-revalidate')
  165 |           } else if (dynamic === false || dynamic === 'force-static') {
> 166 |             expect(cacheControl).toEqual(
      |                                  ^
  167 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  168 |             )
  169 |           } else {

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:166:34)

● ppr-full › HTML Response › for /dynamic/force-static › should have correct headers

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

Expected: "s-maxage=60, stale-while-revalidate"
Received: "s-maxage=60, stale-while-revalidate=31536000"

  164 |             expect(cacheControl).toEqual('no-store, must-revalidate')
  165 |           } else if (dynamic === false || dynamic === 'force-static') {
> 166 |             expect(cacheControl).toEqual(
      |                                  ^
  167 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  168 |             )
  169 |           } else {

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:166:34)

● ppr-full › Navigation Signals › notFound() › for /navigation/not-found › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  305 |
  306 |           if (isNextStart) {
> 307 |             expect(res.headers.get('cache-control')).toEqual(
      |                                                      ^
  308 |               's-maxage=31536000, stale-while-revalidate'
  309 |             )
  310 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:307:54)

● ppr-full › Navigation Signals › notFound() › for /navigation/not-found/dynamic › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  305 |
  306 |           if (isNextStart) {
> 307 |             expect(res.headers.get('cache-control')).toEqual(
      |                                                      ^
  308 |               's-maxage=31536000, stale-while-revalidate'
  309 |             )
  310 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:307:54)

● ppr-full › Navigation Signals › redirect() › for /navigation/redirect › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  305 |
  306 |           if (isNextStart) {
> 307 |             expect(res.headers.get('cache-control')).toEqual(
      |                                                      ^
  308 |               's-maxage=31536000, stale-while-revalidate'
  309 |             )
  310 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:307:54)

● ppr-full › Navigation Signals › redirect() › for /navigation/redirect/dynamic › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  305 |
  306 |           if (isNextStart) {
> 307 |             expect(res.headers.get('cache-control')).toEqual(
      |                                                      ^
  308 |               's-maxage=31536000, stale-while-revalidate'
  309 |             )
  310 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:307:54)

● ppr-full › Prefetch RSC Response › for / › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /nested/a › should have correct headers

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

Expected: "s-maxage=60, stale-while-revalidate"
Received: "s-maxage=60, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /nested/b › should have correct headers

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

Expected: "s-maxage=60, stale-while-revalidate"
Received: "s-maxage=60, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /nested/c › should have correct headers

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

Expected: "s-maxage=60, stale-while-revalidate"
Received: "s-maxage=60, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /metadata › should have correct headers

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

Expected: "s-maxage=60, stale-while-revalidate"
Received: "s-maxage=60, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /on-demand/a › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /on-demand/b › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /on-demand/c › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /loading/a › should have correct headers

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

Expected: "s-maxage=60, stale-while-revalidate"
Received: "s-maxage=60, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /loading/b › should have correct headers

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

Expected: "s-maxage=60, stale-while-revalidate"
Received: "s-maxage=60, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /loading/c › should have correct headers

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

Expected: "s-maxage=60, stale-while-revalidate"
Received: "s-maxage=60, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /static › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /no-suspense › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /no-suspense/nested/a › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /no-suspense/nested/b › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /no-suspense/nested/c › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /dynamic/force-dynamic › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /dynamic/force-dynamic/nested/a › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /dynamic/force-dynamic/nested/b › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /dynamic/force-dynamic/nested/c › should have correct headers

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

Expected: "s-maxage=31536000, stale-while-revalidate"
Received: "s-maxage=31536000, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

● ppr-full › Prefetch RSC Response › for /dynamic/force-static › should have correct headers

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

Expected: "s-maxage=60, stale-while-revalidate"
Received: "s-maxage=60, stale-while-revalidate=31536000"

  369 |             expect(cache).toEqual('public, max-age=0, must-revalidate')
  370 |           } else {
> 371 |             expect(cache).toEqual(
      |                           ^
  372 |               `s-maxage=${revalidate || '31536000'}, stale-while-revalidate`
  373 |             )
  374 |           }

  at Object.toEqual (e2e/app-dir/ppr-full/ppr-full.test.ts:371:27)

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-dev test/e2e/getserversideprops/test/index.test.ts (PPR)

  • getServerSideProps > should load a fast refresh page
  • getServerSideProps > should reload page on failed data request
Expand output

● getServerSideProps › should load a fast refresh page

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

Expected: true
Received: undefined

  588 |         expect(await browser.elementByCss('p').text()).toMatch(/client loaded/)
  589 |       })
> 590 |     ).toBe(true)
      |       ^
  591 |   })
  592 |
  593 |   it('should provide correct query value for dynamic page', async () => {

  at Object.toBe (e2e/getserversideprops/test/index.test.ts:590:7)

● getServerSideProps › should reload page on failed data request

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

Expected: true
Received: undefined

  634 |         })
  635 |       })
> 636 |     ).toBe(true)
      |       ^
  637 |   })
  638 |
  639 |   it('should always call getServerSideProps without caching', async () => {

  at Object.toBe (e2e/getserversideprops/test/index.test.ts:636:7)

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

pnpm test test/integration/i18n-support-base-path/test/index.test.js

  • i18n Support basePath > development mode > should navigate through history with query correctly
  • i18n Support basePath > production mode > should navigate through history with query correctly
  • i18n Support basePath > production mode > should use default locale when no locale is in href with locale false
  • i18n Support basePath > production mode > should preload all locales data correctly
  • i18n Support basePath > production mode > should navigate with locale prop correctly
  • i18n Support basePath > production mode > should navigate with locale false correctly
Expand output

● i18n Support basePath › development mode › should navigate through history with query correctly

TypeError: (0 , _nexttestutils.check) is not a function

  533 |     })()`)
  534 |
> 535 |     await check(() => browser.elementByCss('#router-locale').text(), 'nl')
      |                ^
  536 |     expect(await browser.eval('window.beforeNav')).toBe(1)
  537 |
  538 |     await browser.eval(`(function() {

  at Object.<anonymous> (integration/i18n-support/test/shared.js:535:16)

● i18n Support basePath › production mode › should navigate through history with query correctly

TypeError: (0 , _nexttestutils.check) is not a function

  533 |     })()`)
  534 |
> 535 |     await check(() => browser.elementByCss('#router-locale').text(), 'nl')
      |                ^
  536 |     expect(await browser.eval('window.beforeNav')).toBe(1)
  537 |
  538 |     await browser.eval(`(function() {

  at Object.<anonymous> (integration/i18n-support/test/shared.js:535:16)

● i18n Support basePath › production mode › should use default locale when no locale is in href with locale false

TypeError: (0 , _nexttestutils.check) is not a function

  619 |       })()`)
  620 |
> 621 |       await check(async () => {
      |                  ^
  622 |         const hrefs = await browser.eval(`Object.keys(window.next.router.sdc)`)
  623 |         hrefs.sort()
  624 |

  at Object.<anonymous> (integration/i18n-support/test/shared.js:621:18)

● i18n Support basePath › production mode › should preload all locales data correctly

TypeError: (0 , _nexttestutils.check) is not a function

  664 |       })()`)
  665 |
> 666 |       await check(async () => {
      |                  ^
  667 |         const hrefs = await browser.eval(`Object.keys(window.next.router.sdc)`)
  668 |         hrefs.sort()
  669 |

  at Object.<anonymous> (integration/i18n-support/test/shared.js:666:18)

● i18n Support basePath › production mode › should navigate with locale prop correctly

TypeError: (0 , _nexttestutils.check) is not a function

  1520 |       })()`)
  1521 |
> 1522 |       await check(async () => {
       |                  ^
  1523 |         const hrefs = await browser.eval(`Object.keys(window.next.router.sdc)`)
  1524 |         hrefs.sort()
  1525 |

  at Object.<anonymous> (integration/i18n-support/test/shared.js:1522:18)

● i18n Support basePath › production mode › should navigate with locale false correctly

TypeError: (0 , _nexttestutils.check) is not a function

  1731 |       })()`)
  1732 |
> 1733 |       await check(async () => {
       |                  ^
  1734 |         const hrefs = await browser.eval(`Object.keys(window.next.router.sdc)`)
  1735 |         hrefs.sort()
  1736 |

  at Object.<anonymous> (integration/i18n-support/test/shared.js:1733:18)

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

pnpm test-dev test/e2e/app-dir/actions/app-action.test.ts

  • app-dir action handling > fetch actions > should handle redirects to routes that provide an invalid RSC response
Expand output

● app-dir action handling › fetch actions › should handle redirects to routes that provide an invalid RSC response

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

Expected substring: "Hello from a pages route"
Received string:    "0.37087120972889975
Client
Server
Client and Server
0
+1+1 (Slow)-1*2
redirect
redirect external
redirect internal with domain
redirect to a pages route
submit
test"

  962 |
  963 |       await retry(async () => {
> 964 |         expect(await browser.elementByCss('body').text()).toContain(
      |                                                           ^
  965 |           'Hello from a pages route'
  966 |         )
  967 |         expect(await browser.url()).toBe(`${next.url}/pages-dir`)

  at toContain (e2e/app-dir/actions/app-action.test.ts:964:59)
  at retry (lib/next-test-utils.ts:731:14)
  at Object.<anonymous> (e2e/app-dir/actions/app-action.test.ts:963:7)

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

@ijjk
Copy link
Member

ijjk commented May 17, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary vercel/next.js wyattjoh/deprecate-check Change
buildDuration 16.9s 14.3s N/A
buildDurationCached 8s 7.2s N/A
nodeModulesSize 346 MB 346 MB
nextStartRea..uration (ms) 410ms 409ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js wyattjoh/deprecate-check Change
2141-HASH.js gzip 33.6 kB 33.6 kB N/A
2592-HASH.js gzip 5.06 kB 5.06 kB N/A
48cf7de5-HASH.js gzip 51 kB 51 kB N/A
6539.HASH.js gzip 169 B 169 B
framework-HASH.js gzip 56 kB 56 kB N/A
main-app-HASH.js gzip 220 B 220 B
main-HASH.js gzip 32.3 kB 32.3 kB N/A
webpack-HASH.js gzip 1.7 kB 1.7 kB N/A
Overall change 389 B 389 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js wyattjoh/deprecate-check Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary vercel/next.js wyattjoh/deprecate-check Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 191 B 192 B N/A
amp-HASH.js gzip 511 B 510 B N/A
css-HASH.js gzip 341 B 341 B
dynamic-HASH.js gzip 2.52 kB 2.53 kB N/A
edge-ssr-HASH.js gzip 265 B 266 B N/A
head-HASH.js gzip 363 B 365 B N/A
hooks-HASH.js gzip 392 B 392 B
image-HASH.js gzip 4.27 kB 4.27 kB N/A
index-HASH.js gzip 268 B 266 B N/A
link-HASH.js gzip 2.69 kB 2.69 kB N/A
routerDirect..HASH.js gzip 328 B 326 B N/A
script-HASH.js gzip 396 B 395 B N/A
withRouter-HASH.js gzip 325 B 321 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 wyattjoh/deprecate-check Change
_buildManifest.js gzip 483 B 483 B
Overall change 483 B 483 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js wyattjoh/deprecate-check Change
index.html gzip 522 B 520 B N/A
link.html gzip 536 B 536 B
withRouter.html gzip 518 B 518 B
Overall change 1.05 kB 1.05 kB
Edge SSR bundle Size
vercel/next.js canary vercel/next.js wyattjoh/deprecate-check Change
edge-ssr.js gzip 121 kB 121 kB N/A
page.js gzip 179 kB 179 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js wyattjoh/deprecate-check Change
middleware-b..fest.js gzip 661 B 660 B N/A
middleware-r..fest.js gzip 156 B 155 B N/A
middleware.js gzip 25.8 kB 25.8 kB N/A
edge-runtime..pack.js gzip 839 B 839 B
Overall change 839 B 839 B
Next Runtimes
vercel/next.js canary vercel/next.js wyattjoh/deprecate-check Change
app-page-exp...dev.js gzip 177 kB 177 kB
app-page-exp..prod.js gzip 108 kB 108 kB
app-page-tur..prod.js gzip 117 kB 117 kB
app-page-tur..prod.js gzip 94.7 kB 94.7 kB
app-page.run...dev.js gzip 160 kB 160 kB
app-page.run..prod.js gzip 93.3 kB 93.3 kB
app-route-ex...dev.js gzip 21.1 kB 21.1 kB
app-route-ex..prod.js gzip 15 kB 15 kB
app-route-tu..prod.js gzip 15 kB 15 kB
app-route-tu..prod.js gzip 14.8 kB 14.8 kB
app-route.ru...dev.js gzip 20.9 kB 20.9 kB
app-route.ru..prod.js gzip 14.8 kB 14.8 kB
pages-api-tu..prod.js gzip 9.55 kB 9.55 kB
pages-api.ru...dev.js gzip 9.82 kB 9.82 kB
pages-api.ru..prod.js gzip 9.55 kB 9.55 kB
pages-turbo...prod.js gzip 21.5 kB 21.5 kB
pages.runtim...dev.js gzip 22.1 kB 22.1 kB
pages.runtim..prod.js gzip 21.5 kB 21.5 kB
server.runti..prod.js gzip 52.2 kB 52.2 kB
Overall change 998 kB 998 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js wyattjoh/deprecate-check Change
0.pack gzip 1.65 MB 1.65 MB N/A
index.pack gzip 127 kB 127 kB ⚠️ +353 B
Overall change 127 kB 127 kB ⚠️ +353 B
Diff details
Diff for page.js
@@ -15,7 +15,7 @@
       /***/
     },
 
-    /***/ 6131: /***/ (
+    /***/ 8343: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -30,7 +30,7 @@
         default: () => /* binding */ nHandler,
       });
 
-      // NAMESPACE OBJECT: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statsoh8In2%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
+      // NAMESPACE OBJECT: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statsoh8In2%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
       var page_next_edge_ssr_entry_namespaceObject = {};
       __webpack_require__.r(page_next_edge_ssr_entry_namespaceObject);
       __webpack_require__.d(page_next_edge_ssr_entry_namespaceObject, {
@@ -68,24 +68,24 @@
         tree: () => tree,
       });
 
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/server/web/globals.js
-      var globals = __webpack_require__(324);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/server/web/adapter.js + 3 modules
-      var adapter = __webpack_require__(6254);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render.js + 87 modules
-      var render = __webpack_require__(3204);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/server/lib/incremental-cache/index.js + 3 modules
-      var incremental_cache = __webpack_require__(6676);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/server/app-render/app-render.js + 52 modules
-      var app_render = __webpack_require__(5306);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/server/future/route-modules/app-page/module.compiled.js
-      var module_compiled = __webpack_require__(5474);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/server/future/route-kind.js
-      var route_kind = __webpack_require__(7884);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/client/components/error-boundary.js
-      var error_boundary = __webpack_require__(4280);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/server/app-render/entry-base.js + 9 modules
-      var entry_base = __webpack_require__(487); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statsoh8In2%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/server/web/globals.js
+      var globals = __webpack_require__(9325);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/server/web/adapter.js + 3 modules
+      var adapter = __webpack_require__(718);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render.js + 87 modules
+      var render = __webpack_require__(6937);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/server/lib/incremental-cache/index.js + 3 modules
+      var incremental_cache = __webpack_require__(4895);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/server/app-render/app-render.js + 52 modules
+      var app_render = __webpack_require__(9177);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/server/future/route-modules/app-page/module.compiled.js
+      var module_compiled = __webpack_require__(6527);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/server/future/route-kind.js
+      var route_kind = __webpack_require__(6569);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/client/components/error-boundary.js
+      var error_boundary = __webpack_require__(1177);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/server/app-render/entry-base.js + 9 modules
+      var entry_base = __webpack_require__(2082); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statsoh8In2%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
       // We inject the tree and pages here so that we can use them in the route
       // module.
       const tree = {
@@ -102,7 +102,7 @@
                     page: [
                       () =>
                         Promise.resolve(/* import() eager */).then(
-                          __webpack_require__.bind(__webpack_require__, 7916)
+                          __webpack_require__.bind(__webpack_require__, 5885)
                         ),
                       "/tmp/next-statsoh8In2/stats-app/app/app-edge-ssr/page.js",
                     ],
@@ -116,14 +116,14 @@
             layout: [
               () =>
                 Promise.resolve(/* import() eager */).then(
-                  __webpack_require__.bind(__webpack_require__, 129)
+                  __webpack_require__.bind(__webpack_require__, 1703)
                 ),
               "/tmp/next-statsoh8In2/stats-app/app/layout.js",
             ],
             "not-found": [
               () =>
                 Promise.resolve(/* import() eager */).then(
-                  __webpack_require__.bind(__webpack_require__, 3205)
+                  __webpack_require__.bind(__webpack_require__, 2958)
                 ),
               "next/dist/client/components/not-found-error",
             ],
@@ -159,12 +159,12 @@
       });
 
       //# sourceMappingURL=app-page.js.map
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/lib/page-types.js
-      var page_types = __webpack_require__(7782);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/server/app-render/encryption-utils.js
-      var encryption_utils = __webpack_require__(6641);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/esm/server/app-render/action-utils.js
-      var action_utils = __webpack_require__(3302); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js?{"absolute500Path":"","absoluteAppPath":"next/dist/pages/_app","absoluteDocumentPath":"next/dist/pages/_document","absoluteErrorPath":"next/dist/pages/_error","absolutePagePath":"private-next-app-dir/app-edge-ssr/page.js","dev":false,"isServerComponent":true,"page":"/app-edge-ssr/page","stringifiedConfig":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImJ1aWxkQWN0aXZpdHkiOnRydWUsImJ1aWxkQWN0aXZpdHlQb3NpdGlvbiI6ImJvdHRvbS1yaWdodCJ9LCJvbkRlbWFuZEVudHJpZXMiOnsibWF4SW5hY3RpdmVBZ2UiOjYwMDAwLCJwYWdlc0J1ZmZlckxlbmd0aCI6NX0sImFtcCI6eyJjYW5vbmljYWxCYXNlIjoiIn0sImJhc2VQYXRoIjoiIiwic2Fzc09wdGlvbnMiOnt9LCJ0cmFpbGluZ1NsYXNoIjpmYWxzZSwiaTE4biI6bnVsbCwicHJvZHVjdGlvbkJyb3dzZXJTb3VyY2VNYXBzIjpmYWxzZSwib3B0aW1pemVGb250cyI6dHJ1ZSwiZXhjbHVkZURlZmF1bHRNb21lbnRMb2NhbGVzIjp0cnVlLCJzZXJ2ZXJSdW50aW1lQ29uZmlnIjp7fSwicHVibGljUnVudGltZUNvbmZpZyI6e30sInJlYWN0UHJvZHVjdGlvblByb2ZpbGluZyI6ZmFsc2UsInJlYWN0U3RyaWN0TW9kZSI6bnVsbCwiaHR0cEFnZW50T3B0aW9ucyI6eyJrZWVwQWxpdmUiOnRydWV9LCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sImV4cGVyaW1lbnRhbCI6eyJmbHlpbmdTaHV0dGxlIjpmYWxzZSwicHJlcmVuZGVyRWFybHlFeGl0IjpmYWxzZSwic2VydmVyTWluaWZpY2F0aW9uIjp0cnVlLCJzZXJ2ZXJTb3VyY2VNYXBzIjpmYWxzZSwibGlua05vVG91Y2hTdGFydCI6ZmFsc2UsImNhc2VTZW5zaXRpdmVSb3V0ZXMiOmZhbHNlLCJwcmVsb2FkRW50cmllc09uU3RhcnQiOnRydWUsImNsaWVudFJvdXRlckZpbHRlciI6dHJ1ZSwiY2xpZW50Um91dGVyRmlsdGVyUmVkaXJlY3RzIjpmYWxzZSwiZmV0Y2hDYWNoZUtleVByZWZpeCI6IiIsIm1pZGRsZXdhcmVQcmVmZXRjaCI6ImZsZXhpYmxlIiwib3B0aW1pc3RpY0NsaWVudENhY2hlIjp0cnVlLCJtYW51YWxDbGllbnRCYXNlUGF0aCI6ZmFsc2UsImNwdXMiOjE5LCJtZW1vcnlCYXNlZFdvcmtlcnNDb3VudCI6ZmFsc2UsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwib3V0cHV0RmlsZVRyYWNpbmdSb290IjoiL3RtcC9uZXh0LXN0YXRzb2g4SW4yL3N0YXRzLWFwcCIsInN3Y1RyYWNlUHJvZmlsaW5nIjpmYWxzZSwiZm9yY2VTd2NUcmFuc2Zvcm1zIjpmYWxzZSwibGFyZ2VQYWdlRGF0YUJ5dGVzIjoxMjgwMDAsImFkanVzdEZvbnRGYWxsYmFja3MiOmZhbHNlLCJhZGp1c3RGb250RmFsbGJhY2tzV2l0aFNpemVBZGp1c3QiOmZhbHNlLCJ0eXBlZFJvdXRlcyI6ZmFsc2UsImluc3RydW1lbnRhdGlvbkhvb2siOmZhbHNlLCJwYXJhbGxlbFNlcnZlckNvbXBpbGVzIjpmYWxzZSwicGFyYWxsZWxTZXJ2ZXJCdWlsZFRyYWNlcyI6ZmFsc2UsInBwciI6ZmFsc2UsIm9wdGltaXplU2VydmVyUmVhY3QiOnRydWUsInVzZUVhcmx5SW1wb3J0IjpmYWxzZSwic3RhbGVUaW1lcyI6eyJkeW5hbWljIjozMCwic3RhdGljIjozMDB9LCJvcHRpbWl6ZVBhY2thZ2VJbXBvcnRzIjpbImx1Y2lkZS1yZWFjdCIsImRhdGUtZm5zIiwibG9kYXNoLWVzIiwicmFtZGEiLCJhbnRkIiwicmVhY3QtYm9vdHN0cmFwIiwiYWhvb2tzIiwiQGFudC1kZXNpZ24vaWNvbnMiLCJAaGVhZGxlc3N1aS9yZWFjdCIsIkBoZWFkbGVzc3VpLWZsb2F0L3JlYWN0IiwiQGhlcm9pY29ucy9yZWFjdC8yMC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvc29saWQiLCJAaGVyb2ljb25zL3JlYWN0LzI0L291dGxpbmUiLCJAdmlzeC92aXN4IiwiQHRyZW1vci9yZWFjdCIsInJ4anMiLCJAbXVpL21hdGVyaWFsIiwiQG11aS9pY29ucy1tYXRlcmlhbCIsInJlY2hhcnRzIiwicmVhY3QtdXNlIiwiZWZmZWN0IiwiQGVmZmVjdC9zY2hlbWEiLCJAZWZmZWN0L3BsYXRmb3JtIiwiQGVmZmVjdC9wbGF0Zm9ybS1ub2RlIiwiQGVmZmVjdC9wbGF0Zm9ybS1icm93c2VyIiwiQGVmZmVjdC9wbGF0Zm9ybS1idW4iLCJAZWZmZWN0L3NxbCIsIkBlZmZlY3Qvc3FsLW1zc3FsIiwiQGVmZmVjdC9zcWwtbXlzcWwyIiwiQGVmZmVjdC9zcWwtcGciLCJAZWZmZWN0L3NxbC1zcXVsaXRlLW5vZGUiLCJAZWZmZWN0L3NxbC1zcXVsaXRlLWJ1biIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtd2FzbSIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtcmVhY3QtbmF0aXZlIiwiQGVmZmVjdC9ycGMiLCJAZWZmZWN0L3JwYy1odHRwIiwiQGVmZmVjdC90eXBlY2xhc3MiLCJAZWZmZWN0L2V4cGVyaW1lbnRhbCIsIkBlZmZlY3Qvb3BlbnRlbGVtZXRyeSIsIkBtYXRlcmlhbC11aS9jb3JlIiwiQG1hdGVyaWFsLXVpL2ljb25zIiwiQHRhYmxlci9pY29ucy1yZWFjdCIsIm11aS1jb3JlIiwicmVhY3QtaWNvbnMvYWkiLCJyZWFjdC1pY29ucy9iaSIsInJlYWN0LWljb25zL2JzIiwicmVhY3QtaWNvbnMvY2ciLCJyZWFjdC1pY29ucy9jaSIsInJlYWN0LWljb25zL2RpIiwicmVhY3QtaWNvbnMvZmEiLCJyZWFjdC1pY29ucy9mYTYiLCJyZWFjdC1pY29ucy9mYyIsInJlYWN0LWljb25zL2ZpIiwicmVhY3QtaWNvbnMvZ2kiLCJyZWFjdC1pY29ucy9nbyIsInJlYWN0LWljb25zL2dyIiwicmVhY3QtaWNvbnMvaGkiLCJyZWFjdC1pY29ucy9oaTIiLCJyZWFjdC1pY29ucy9pbSIsInJlYWN0LWljb25zL2lvIiwicmVhY3QtaWNvbnMvaW81IiwicmVhY3QtaWNvbnMvbGlhIiwicmVhY3QtaWNvbnMvbGliIiwicmVhY3QtaWNvbnMvbHUiLCJyZWFjdC1pY29ucy9tZCIsInJlYWN0LWljb25zL3BpIiwicmVhY3QtaWNvbnMvcmkiLCJyZWFjdC1pY29ucy9yeCIsInJlYWN0LWljb25zL3NpIiwicmVhY3QtaWNvbnMvc2wiLCJyZWFjdC1pY29ucy90YiIsInJlYWN0LWljb25zL3RmaSIsInJlYWN0LWljb25zL3RpIiwicmVhY3QtaWNvbnMvdnNjIiwicmVhY3QtaWNvbnMvd2kiXX0sImJ1bmRsZVBhZ2VzUm91dGVyRGVwZW5kZW5jaWVzIjpmYWxzZSwiY29uZmlnRmlsZSI6Ii90bXAvbmV4dC1zdGF0c29oOEluMi9zdGF0cy1hcHAvbmV4dC5jb25maWcuanMiLCJjb25maWdGaWxlTmFtZSI6Im5leHQuY29uZmlnLmpzIn0=","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzb2g4SW4yJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0Qh","sriEnabled":false,"middlewareConfig":"e30="}!
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/lib/page-types.js
+      var page_types = __webpack_require__(2086);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/server/app-render/encryption-utils.js
+      var encryption_utils = __webpack_require__(5069);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/esm/server/app-render/action-utils.js
+      var action_utils = __webpack_require__(2009); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js?{"absolute500Path":"","absoluteAppPath":"next/dist/pages/_app","absoluteDocumentPath":"next/dist/pages/_document","absoluteErrorPath":"next/dist/pages/_error","absolutePagePath":"private-next-app-dir/app-edge-ssr/page.js","dev":false,"isServerComponent":true,"page":"/app-edge-ssr/page","stringifiedConfig":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImJ1aWxkQWN0aXZpdHkiOnRydWUsImJ1aWxkQWN0aXZpdHlQb3NpdGlvbiI6ImJvdHRvbS1yaWdodCJ9LCJvbkRlbWFuZEVudHJpZXMiOnsibWF4SW5hY3RpdmVBZ2UiOjYwMDAwLCJwYWdlc0J1ZmZlckxlbmd0aCI6NX0sImFtcCI6eyJjYW5vbmljYWxCYXNlIjoiIn0sImJhc2VQYXRoIjoiIiwic2Fzc09wdGlvbnMiOnt9LCJ0cmFpbGluZ1NsYXNoIjpmYWxzZSwiaTE4biI6bnVsbCwicHJvZHVjdGlvbkJyb3dzZXJTb3VyY2VNYXBzIjpmYWxzZSwib3B0aW1pemVGb250cyI6dHJ1ZSwiZXhjbHVkZURlZmF1bHRNb21lbnRMb2NhbGVzIjp0cnVlLCJzZXJ2ZXJSdW50aW1lQ29uZmlnIjp7fSwicHVibGljUnVudGltZUNvbmZpZyI6e30sInJlYWN0UHJvZHVjdGlvblByb2ZpbGluZyI6ZmFsc2UsInJlYWN0U3RyaWN0TW9kZSI6bnVsbCwiaHR0cEFnZW50T3B0aW9ucyI6eyJrZWVwQWxpdmUiOnRydWV9LCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sImV4cGVyaW1lbnRhbCI6eyJmbHlpbmdTaHV0dGxlIjpmYWxzZSwicHJlcmVuZGVyRWFybHlFeGl0IjpmYWxzZSwic2VydmVyTWluaWZpY2F0aW9uIjp0cnVlLCJzZXJ2ZXJTb3VyY2VNYXBzIjpmYWxzZSwibGlua05vVG91Y2hTdGFydCI6ZmFsc2UsImNhc2VTZW5zaXRpdmVSb3V0ZXMiOmZhbHNlLCJwcmVsb2FkRW50cmllc09uU3RhcnQiOnRydWUsImNsaWVudFJvdXRlckZpbHRlciI6dHJ1ZSwiY2xpZW50Um91dGVyRmlsdGVyUmVkaXJlY3RzIjpmYWxzZSwiZmV0Y2hDYWNoZUtleVByZWZpeCI6IiIsIm1pZGRsZXdhcmVQcmVmZXRjaCI6ImZsZXhpYmxlIiwib3B0aW1pc3RpY0NsaWVudENhY2hlIjp0cnVlLCJtYW51YWxDbGllbnRCYXNlUGF0aCI6ZmFsc2UsImNwdXMiOjE5LCJtZW1vcnlCYXNlZFdvcmtlcnNDb3VudCI6ZmFsc2UsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwib3V0cHV0RmlsZVRyYWNpbmdSb290IjoiL3RtcC9uZXh0LXN0YXRzb2g4SW4yL3N0YXRzLWFwcCIsInN3Y1RyYWNlUHJvZmlsaW5nIjpmYWxzZSwiZm9yY2VTd2NUcmFuc2Zvcm1zIjpmYWxzZSwibGFyZ2VQYWdlRGF0YUJ5dGVzIjoxMjgwMDAsImFkanVzdEZvbnRGYWxsYmFja3MiOmZhbHNlLCJhZGp1c3RGb250RmFsbGJhY2tzV2l0aFNpemVBZGp1c3QiOmZhbHNlLCJ0eXBlZFJvdXRlcyI6ZmFsc2UsImluc3RydW1lbnRhdGlvbkhvb2siOmZhbHNlLCJwYXJhbGxlbFNlcnZlckNvbXBpbGVzIjpmYWxzZSwicGFyYWxsZWxTZXJ2ZXJCdWlsZFRyYWNlcyI6ZmFsc2UsInBwciI6ZmFsc2UsIm9wdGltaXplU2VydmVyUmVhY3QiOnRydWUsInVzZUVhcmx5SW1wb3J0IjpmYWxzZSwic3RhbGVUaW1lcyI6eyJkeW5hbWljIjozMCwic3RhdGljIjozMDB9LCJvcHRpbWl6ZVBhY2thZ2VJbXBvcnRzIjpbImx1Y2lkZS1yZWFjdCIsImRhdGUtZm5zIiwibG9kYXNoLWVzIiwicmFtZGEiLCJhbnRkIiwicmVhY3QtYm9vdHN0cmFwIiwiYWhvb2tzIiwiQGFudC1kZXNpZ24vaWNvbnMiLCJAaGVhZGxlc3N1aS9yZWFjdCIsIkBoZWFkbGVzc3VpLWZsb2F0L3JlYWN0IiwiQGhlcm9pY29ucy9yZWFjdC8yMC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvc29saWQiLCJAaGVyb2ljb25zL3JlYWN0LzI0L291dGxpbmUiLCJAdmlzeC92aXN4IiwiQHRyZW1vci9yZWFjdCIsInJ4anMiLCJAbXVpL21hdGVyaWFsIiwiQG11aS9pY29ucy1tYXRlcmlhbCIsInJlY2hhcnRzIiwicmVhY3QtdXNlIiwiZWZmZWN0IiwiQGVmZmVjdC9zY2hlbWEiLCJAZWZmZWN0L3BsYXRmb3JtIiwiQGVmZmVjdC9wbGF0Zm9ybS1ub2RlIiwiQGVmZmVjdC9wbGF0Zm9ybS1icm93c2VyIiwiQGVmZmVjdC9wbGF0Zm9ybS1idW4iLCJAZWZmZWN0L3NxbCIsIkBlZmZlY3Qvc3FsLW1zc3FsIiwiQGVmZmVjdC9zcWwtbXlzcWwyIiwiQGVmZmVjdC9zcWwtcGciLCJAZWZmZWN0L3NxbC1zcXVsaXRlLW5vZGUiLCJAZWZmZWN0L3NxbC1zcXVsaXRlLWJ1biIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtd2FzbSIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtcmVhY3QtbmF0aXZlIiwiQGVmZmVjdC9ycGMiLCJAZWZmZWN0L3JwYy1odHRwIiwiQGVmZmVjdC90eXBlY2xhc3MiLCJAZWZmZWN0L2V4cGVyaW1lbnRhbCIsIkBlZmZlY3Qvb3BlbnRlbGVtZXRyeSIsIkBtYXRlcmlhbC11aS9jb3JlIiwiQG1hdGVyaWFsLXVpL2ljb25zIiwiQHRhYmxlci9pY29ucy1yZWFjdCIsIm11aS1jb3JlIiwicmVhY3QtaWNvbnMvYWkiLCJyZWFjdC1pY29ucy9iaSIsInJlYWN0LWljb25zL2JzIiwicmVhY3QtaWNvbnMvY2ciLCJyZWFjdC1pY29ucy9jaSIsInJlYWN0LWljb25zL2RpIiwicmVhY3QtaWNvbnMvZmEiLCJyZWFjdC1pY29ucy9mYTYiLCJyZWFjdC1pY29ucy9mYyIsInJlYWN0LWljb25zL2ZpIiwicmVhY3QtaWNvbnMvZ2kiLCJyZWFjdC1pY29ucy9nbyIsInJlYWN0LWljb25zL2dyIiwicmVhY3QtaWNvbnMvaGkiLCJyZWFjdC1pY29ucy9oaTIiLCJyZWFjdC1pY29ucy9pbSIsInJlYWN0LWljb25zL2lvIiwicmVhY3QtaWNvbnMvaW81IiwicmVhY3QtaWNvbnMvbGlhIiwicmVhY3QtaWNvbnMvbGliIiwicmVhY3QtaWNvbnMvbHUiLCJyZWFjdC1pY29ucy9tZCIsInJlYWN0LWljb25zL3BpIiwicmVhY3QtaWNvbnMvcmkiLCJyZWFjdC1pY29ucy9yeCIsInJlYWN0LWljb25zL3NpIiwicmVhY3QtaWNvbnMvc2wiLCJyZWFjdC1pY29ucy90YiIsInJlYWN0LWljb25zL3RmaSIsInJlYWN0LWljb25zL3RpIiwicmVhY3QtaWNvbnMvdnNjIiwicmVhY3QtaWNvbnMvd2kiXX0sImJ1bmRsZVBhZ2VzUm91dGVyRGVwZW5kZW5jaWVzIjpmYWxzZSwiY29uZmlnRmlsZSI6Ii90bXAvbmV4dC1zdGF0c29oOEluMi9zdGF0cy1hcHAvbmV4dC5jb25maWcuanMiLCJjb25maWdGaWxlTmFtZSI6Im5leHQuY29uZmlnLmpzIn0=","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzb2g4SW4yJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0Qh","sriEnabled":false,"middlewareConfig":"e30="}!
       var _self___RSC_MANIFEST;
 
       const incrementalCacheHandler = null;
@@ -421,47 +421,47 @@
       /***/
     },
 
-    /***/ 4328: /***/ (
+    /***/ 261: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 4935)
+        __webpack_require__.bind(__webpack_require__, 1378)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 552)
+        __webpack_require__.bind(__webpack_require__, 2527)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 966)
+        __webpack_require__.bind(__webpack_require__, 961)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 6813)
+        __webpack_require__.bind(__webpack_require__, 1667)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 5371)
+        __webpack_require__.bind(__webpack_require__, 3963)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 4430)
+        __webpack_require__.bind(__webpack_require__, 1399)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 934)
+        __webpack_require__.bind(__webpack_require__, 8559)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 6248)
+        __webpack_require__.bind(__webpack_require__, 6180)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 2038)
+        __webpack_require__.bind(__webpack_require__, 5413)
       );
 
       /***/
     },
 
-    /***/ 7799: /***/ () => {
+    /***/ 7698: /***/ () => {
       /***/
     },
 
-    /***/ 7916: /***/ (
+    /***/ 5885: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -481,7 +481,7 @@
       /***/
     },
 
-    /***/ 129: /***/ (
+    /***/ 1703: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -493,7 +493,7 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(5433);
+        __webpack_require__(982);
 
       function RootLayout({ children }) {
         return /*#__PURE__*/ (0,
@@ -512,7 +512,7 @@
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
-    /******/ __webpack_require__.O(0, [636, 450], () => __webpack_exec__(6131));
+    /******/ __webpack_require__.O(0, [781, 429], () => __webpack_exec__(8343));
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ (_ENTRIES = typeof _ENTRIES === "undefined" ? {} : _ENTRIES)[
       "middleware_app/app-edge-ssr/page"
Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for image-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [8358],
   {
-    /***/ 5498: /***/ (
+    /***/ 8536: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/image",
         function () {
-          return __webpack_require__(8082);
+          return __webpack_require__(3672);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 771: /***/ (module, exports, __webpack_require__) => {
+    /***/ 400: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -40,15 +40,15 @@
         __webpack_require__(5614)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(1549)
+        __webpack_require__(2537)
       );
-      const _getimgprops = __webpack_require__(6472);
-      const _imageconfig = __webpack_require__(6915);
-      const _imageconfigcontextsharedruntime = __webpack_require__(3993);
-      const _warnonce = __webpack_require__(3260);
-      const _routercontextsharedruntime = __webpack_require__(4781);
+      const _getimgprops = __webpack_require__(4031);
+      const _imageconfig = __webpack_require__(8267);
+      const _imageconfigcontextsharedruntime = __webpack_require__(6469);
+      const _warnonce = __webpack_require__(5240);
+      const _routercontextsharedruntime = __webpack_require__(5635);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(933)
+        __webpack_require__(271)
       );
       // This is replaced by webpack define plugin
       const configEnv = {
@@ -376,7 +376,7 @@
       /***/
     },
 
-    /***/ 6472: /***/ (
+    /***/ 4031: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -392,9 +392,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(3260);
-      const _imageblursvg = __webpack_require__(7851);
-      const _imageconfig = __webpack_require__(6915);
+      const _warnonce = __webpack_require__(5240);
+      const _imageblursvg = __webpack_require__(2682);
+      const _imageconfig = __webpack_require__(8267);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -769,7 +769,7 @@
       /***/
     },
 
-    /***/ 7851: /***/ (__unused_webpack_module, exports) => {
+    /***/ 2682: /***/ (__unused_webpack_module, exports) => {
       "use strict";
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
@@ -824,7 +824,7 @@
       /***/
     },
 
-    /***/ 4770: /***/ (
+    /***/ 3669: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -851,10 +851,10 @@
         },
       });
       const _interop_require_default = __webpack_require__(1478);
-      const _getimgprops = __webpack_require__(6472);
-      const _imagecomponent = __webpack_require__(771);
+      const _getimgprops = __webpack_require__(4031);
+      const _imagecomponent = __webpack_require__(400);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(933)
+        __webpack_require__(271)
       );
       function getImageProps(imgProps) {
         const { props } = (0, _getimgprops.getImgProps)(imgProps, {
@@ -886,7 +886,7 @@
       /***/
     },
 
-    /***/ 933: /***/ (__unused_webpack_module, exports) => {
+    /***/ 271: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -921,7 +921,7 @@
       /***/
     },
 
-    /***/ 8082: /***/ (
+    /***/ 3672: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -938,8 +938,8 @@
 
       // EXTERNAL MODULE: ./node_modules/.pnpm/react@19.0.0-beta-04b058868c-20240508/node_modules/react/jsx-runtime.js
       var jsx_runtime = __webpack_require__(1847);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_x6nrtfoohwvncerarvzrfulp2u/node_modules/next/image.js
-      var next_image = __webpack_require__(5945);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-04b058868c-20240508_rea_dbavudu66yewnjanau4b4qzpou/node_modules/next/image.js
+      var next_image = __webpack_require__(7037);
       var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // CONCATENATED MODULE: ./pages/nextjs.png
       /* harmony default export */ const nextjs = {
         src: "/_next/static/media/nextjs.cae0b805.png",
@@ -969,12 +969,12 @@
       /***/
     },
 
-    /***/ 5945: /***/ (
+    /***/ 7037: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4770);
+      module.exports = __webpack_require__(3669);
 
       /***/
     },
@@ -984,7 +984,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [2888, 9774, 179], () =>
-      __webpack_exec__(5498)
+      __webpack_exec__(8536)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for main-HASH.js

Diff too large to display

Commit: ab76978

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
created-by: Next.js team PRs by the Next.js team tests
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants