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

fix: Narrow down from string | undefined to string #65248

Open
wants to merge 6 commits into
base: canary
Choose a base branch
from

Conversation

icyJoseph
Copy link
Contributor

@icyJoseph icyJoseph commented May 1, 2024

What?

Fixes #64832

Having empty strings in .env, and family of files, causes the variable to be assigned to undefined, rather than an empty string.

Why?

The issue breaks behavior between canaries

How?

The value read from process.env[key], is string | undefined, and we need to narrow down to string, but the current check also filters out ''. A quick way to fix that is to value != null ~

Fixes #64832

Not sure if there's anywhere, where this is tested in the codebase

  • Test that empty value strings are consistent before and after hydration

The root issue here is that the value before hydration is '', but during hydration undefined is used, and using something like, template string interpolations, ${NEXT_PUBLIC_EMPTY_ENV_VAR}, would cause a hydration error. That's what is happening in #64832. For clarity's sake, the error would be that the HTML contained an empty string, but hydration has "undefined" string cast.

@ijjk
Copy link
Member

ijjk commented May 1, 2024

Allow CI Workflow Run

  • approve CI run for commit: 744b530

Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer

Copy link
Member

@eps1lon eps1lon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you. Please add a test here: test/integration/env-config/test/index.test.js

Ideally split the PR in two commits: one commit with just the test asserting the current behavior and another commit with the fix+updated test assertions.

@icyJoseph
Copy link
Contributor Author

Thank you. Please add a test here: test/integration/env-config/test/index.test.js

Ideally split the PR in two commits: one commit with just the test asserting the current behavior and another commit with the fix+updated test assertions.

Yeah I tried to first write a test, but I failed to find that file, but made the fix anyway. Thanks for that! I'll work on a test to prevent further regressions.

@icyJoseph
Copy link
Contributor Author

icyJoseph commented May 1, 2024

While setting up a test, I also got to understand the bug a bit better. The problem is that even though the HTML source has the expected "empty string", it is during hydration, that it is getting replaced by undefined ~ I will continue investigating tomorrow.

Edit: Undoing the first commit changes, using the webdriver, I did manage to create tests that fail, because, undefined is found after hydration. Re-applying the commit fixes the issue. Also tested manually by running an app with my local build.

Edit2: This issue was creating a hydration error as well. Though, I guess the root issue is that people are using the NEXT_PUBLIC env vars, directly in the JSX, with interpolations.

@icyJoseph icyJoseph requested a review from wyattjoh as a code owner May 1, 2024 22:13
@ijjk ijjk added the tests label May 1, 2024
]

export async function getStaticProps() {
const items = {}

variables.forEach((variable) => {
if (process.env[variable]) {
if (typeof process.env[variable] !== 'undefined') {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the other test pages on this integration suite, do the very same check

@eps1lon eps1lon added the CI approved Approve running CI for fork label May 2, 2024
@ijjk
Copy link
Member

ijjk commented May 2, 2024

Failing test suites

Commit: 233e7ac

pnpm test test/integration/not-found-revalidate/test/index.test.js

  • SSG notFound revalidate > production mode > should revalidate after notFound is returned for fallback: blocking
  • SSG notFound revalidate > production mode > should revalidate after notFound is returned for fallback: true
Expand output

● SSG notFound revalidate › production mode › should revalidate after notFound is returned for fallback: blocking

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

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

  101 |
  102 |     const props = JSON.parse($('#props').text())
> 103 |     expect(res.headers.get('cache-control')).toBe(
      |                                              ^
  104 |       's-maxage=1, stale-while-revalidate'
  105 |     )
  106 |     expect(res.status).toBe(200)

  at Object.toBe (integration/not-found-revalidate/test/index.test.js:103:46)

● SSG notFound revalidate › production mode › should revalidate after notFound is returned for fallback: true

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

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

  157 |
  158 |     const props = JSON.parse($('#props').text())
> 159 |     expect(res.headers.get('cache-control')).toBe(
      |                                              ^
  160 |       's-maxage=1, stale-while-revalidate'
  161 |     )
  162 |     expect(res.status).toBe(200)

  at Object.toBe (integration/not-found-revalidate/test/index.test.js:159:46)

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

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

  • 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
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

TIMED OUT: success

["/static-page?_rsc=1wtp7","/static-page?_rsc=1wtp7"]

undefined

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (e2e/app-dir/app-prefetch/prefetching.test.ts:176:5)

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.

TURBOPACK=1 pnpm test-start test/e2e/app-dir/parallel-routes-revalidation/parallel-routes-revalidation.test.ts (turbopack)

  • parallel-routes-revalidation > should submit the action and revalidate the page data
  • parallel-routes-revalidation > should refresh the correct page when a server action triggers a redirect
Expand output

● parallel-routes-revalidation › should submit the action and revalidate the page data

TIMED OUT: 2

1

undefined

  686 |
  687 |   if (hardError) {
> 688 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content + '\n\n' + lastErr)
      |           ^
  689 |   }
  690 |   return false
  691 | }

  at check (lib/next-test-utils.ts:688:11)
  at Object.<anonymous> (e2e/app-dir/parallel-routes-revalidation/parallel-routes-revalidation.test.ts:31:5)

● parallel-routes-revalidation › should refresh the correct page when a server action triggers a redirect

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

Expected: 0
Received: 2

  195 |     await retry(async () => {
  196 |       // confirm there aren't any entries yet
> 197 |       expect((await browser.elementsByCss('#entries li')).length).toBe(0)
      |                                                                   ^
  198 |     })
  199 |
  200 |     await browser.elementById('create-entry').click()

  at toBe (e2e/app-dir/parallel-routes-revalidation/parallel-routes-revalidation.test.ts:197:67)
  at retry (lib/next-test-utils.ts:774:14)
  at Object.<anonymous> (e2e/app-dir/parallel-routes-revalidation/parallel-routes-revalidation.test.ts:195:5)

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-dev test/e2e/react-compiler/react-compiler.test.ts (PPR)

  • react-compiler babelrc > should show an experimental warning
Expand output

● react-compiler babelrc › should show an experimental warning

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

Expected substring: "Experiments (use with caution)"
Received string:    " ⚠ `experimental.ppr` has been defaulted to `true` because `__NEXT_EXPERIMENTAL_PPR` was set to `true` during testing.
 ⚠ `experimental.ppr` has been defaulted to `true` because `__NEXT_EXPERIMENTAL_PPR` was set to `true` during testing.
  ▲ Next.js 14.3.0-canary.68
  - Local:        http://localhost:40421
"

  21 |
  22 |   it('should show an experimental warning', async () => {
> 23 |     expect(next.cliOutput).toContain('Experiments (use with caution)')
     |                            ^
  24 |     expect(next.cliOutput).toContain('reactCompiler')
  25 |   })
  26 |

  at Object.toContain (e2e/react-compiler/react-compiler.test.ts:23:28)

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

pnpm test-start test/e2e/app-dir/parallel-routes-and-interception/parallel-routes-and-interception.test.ts

  • parallel-routes-and-interception with patching > should gracefully handle when two page segments match the children parallel slot
Expand output

● parallel-routes-and-interception with patching › should gracefully handle when two page segments match the children parallel slot

next build failed with code/signal 1

   96 |           if (code || signal)
   97 |             reject(
>  98 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
   99 |             )
  100 |           else resolve()
  101 |         })

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:98:15)

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

pnpm test-start test/production/prerender-prefetch/index.test.ts

  • Prerender prefetch > with optimisticClientCache disabled > should update cache using prefetch with unstable_skipClientCache
  • Prerender prefetch > with optimisticClientCache disabled > should update cache using router.push with unstable_skipClientCache
  • Prerender prefetch > with optimisticClientCache disabled > should handle failed data fetch and empty cache correctly
  • Prerender prefetch > with optimisticClientCache enabled > should update cache using prefetch with unstable_skipClientCache
  • Prerender prefetch > with optimisticClientCache enabled > should update cache using router.push with unstable_skipClientCache
  • Prerender prefetch > with optimisticClientCache enabled > should handle failed data fetch and empty cache correctly
Expand output

● Prerender prefetch › with optimisticClientCache enabled › should update cache using prefetch with unstable_skipClientCache

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

Expected: 1715931707487
Received: 1715931699832

  91 |       await check(() => browser.elementByCss('#page').text(), 'blog/[slug]')
  92 |
> 93 |       expect(JSON.parse(await browser.elementByCss('#props').text()).now).toBe(
     |                                                                           ^
  94 |         startTime
  95 |       )
  96 |       await browser.back().waitForElementByCss('#to-blog-first')

  at Object.toBe (production/prerender-prefetch/index.test.ts:93:75)

● Prerender prefetch › with optimisticClientCache enabled › should update cache using router.push with unstable_skipClientCache

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

Expected: not 1715931707487

  192 |         await browser.elementByCss('#props').text()
  193 |       ).now
> 194 |       expect(newTime).not.toBe(startTime)
      |                           ^
  195 |       expect(isNaN(newTime)).toBe(false)
  196 |     })
  197 |

  at Object.toBe (production/prerender-prefetch/index.test.ts:194:27)

● Prerender prefetch › with optimisticClientCache enabled › should handle failed data fetch and empty cache correctly

expect(received).toBeFalsy()

Received: 1

  290 |       await browser.back()
  291 |       await browser.waitForElementByCss('#to-blog-first')
> 292 |       expect(await browser.eval('window.beforeNav')).toBeFalsy()
      |                                                      ^
  293 |     })
  294 |   }
  295 |

  at Object.toBeFalsy (production/prerender-prefetch/index.test.ts:292:54)

● Prerender prefetch › with optimisticClientCache disabled › should update cache using prefetch with unstable_skipClientCache

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

Expected: 1715931731364
Received: 1715931724016

  91 |       await check(() => browser.elementByCss('#page').text(), 'blog/[slug]')
  92 |
> 93 |       expect(JSON.parse(await browser.elementByCss('#props').text()).now).toBe(
     |                                                                           ^
  94 |         startTime
  95 |       )
  96 |       await browser.back().waitForElementByCss('#to-blog-first')

  at Object.toBe (production/prerender-prefetch/index.test.ts:93:75)

● Prerender prefetch › with optimisticClientCache disabled › should update cache using router.push with unstable_skipClientCache

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

Expected: not 1715931731364

  192 |         await browser.elementByCss('#props').text()
  193 |       ).now
> 194 |       expect(newTime).not.toBe(startTime)
      |                           ^
  195 |       expect(isNaN(newTime)).toBe(false)
  196 |     })
  197 |

  at Object.toBe (production/prerender-prefetch/index.test.ts:194:27)

● Prerender prefetch › with optimisticClientCache disabled › should handle failed data fetch and empty cache correctly

expect(received).toBeFalsy()

Received: 1

  290 |       await browser.back()
  291 |       await browser.waitForElementByCss('#to-blog-first')
> 292 |       expect(await browser.eval('window.beforeNav')).toBeFalsy()
      |                                                      ^
  293 |     })
  294 |   }
  295 |

  at Object.toBeFalsy (production/prerender-prefetch/index.test.ts:292:54)

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 > should forward action request to a worker that contains the action handler (node)
Expand output

● app-dir action handling › should forward action request to a worker that contains the action handler (node)

page.waitForSelector: Timeout 60000ms exceeded.
Call log:
  - waiting for locator('#other-page')

  421 |     return this.chain(() => {
  422 |       return page
> 423 |         .waitForSelector(selector, { timeout, state: 'attached' })
      |          ^
  424 |         .then(async (el) => {
  425 |           // it seems selenium waits longer and tests rely on this behavior
  426 |           // so we wait for the load event fire before returning

  at waitForSelector (lib/browsers/playwright.ts:423:10)
  at e2e/app-dir/actions/app-action.test.ts:577:7

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-start test/e2e/prerender.test.ts (PPR)

  • Prerender > should use correct caching headers for a revalidate page
  • Prerender > should use correct caching headers for a no-revalidate page
Expand output

● Prerender › should use correct caching headers for a revalidate page

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

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

  598 |       it('should use correct caching headers for a revalidate page', async () => {
  599 |         const initialRes = await fetchViaHTTP(next.url, '/')
> 600 |         expect(initialRes.headers.get('cache-control')).toBe(
      |                                                         ^
  601 |           isDeploy
  602 |             ? 'public, max-age=0, must-revalidate'
  603 |             : 's-maxage=2, stale-while-revalidate'

  at Object.toBe (e2e/prerender.test.ts:600:57)

● Prerender › should use correct caching headers for a no-revalidate page

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

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

  1269 |       it('should use correct caching headers for a no-revalidate page', async () => {
  1270 |         const initialRes = await fetchViaHTTP(next.url, '/something')
> 1271 |         expect(initialRes.headers.get('cache-control')).toBe(
       |                                                         ^
  1272 |           isDeploy
  1273 |             ? 'public, max-age=0, must-revalidate'
  1274 |             : 's-maxage=31536000, stale-while-revalidate'

  at Object.toBe (e2e/prerender.test.ts:1271:57)

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

@ijjk
Copy link
Member

ijjk commented May 2, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary icyJoseph/next.js fix/empty_NEXT_PUBLIC_env_vars Change
buildDuration 15.9s 14.3s N/A
buildDurationCached 7.8s 6.8s N/A
nodeModulesSize 346 MB 346 MB ⚠️ +176 B
nextStartRea..uration (ms) 419ms 411ms N/A
Client Bundles (main, webpack)
vercel/next.js canary icyJoseph/next.js fix/empty_NEXT_PUBLIC_env_vars 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 222 B N/A
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 169 B 169 B
Legacy Client Bundles (polyfills)
vercel/next.js canary icyJoseph/next.js fix/empty_NEXT_PUBLIC_env_vars Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary icyJoseph/next.js fix/empty_NEXT_PUBLIC_env_vars 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 icyJoseph/next.js fix/empty_NEXT_PUBLIC_env_vars Change
_buildManifest.js gzip 483 B 483 B
Overall change 483 B 483 B
Rendered Page Sizes
vercel/next.js canary icyJoseph/next.js fix/empty_NEXT_PUBLIC_env_vars 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 icyJoseph/next.js fix/empty_NEXT_PUBLIC_env_vars 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 icyJoseph/next.js fix/empty_NEXT_PUBLIC_env_vars Change
middleware-b..fest.js gzip 660 B 660 B
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 1.5 kB 1.5 kB
Next Runtimes
vercel/next.js canary icyJoseph/next.js fix/empty_NEXT_PUBLIC_env_vars 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 icyJoseph/next.js fix/empty_NEXT_PUBLIC_env_vars Change
0.pack gzip 1.64 MB 1.65 MB ⚠️ +3.93 kB
index.pack gzip 126 kB 126 kB ⚠️ +107 B
Overall change 1.77 MB 1.77 MB ⚠️ +4.04 kB
Diff details
Diff for page.js
@@ -15,7 +15,7 @@
       /***/
     },
 
-    /***/ 3346: /***/ (
+    /***/ 8361: /***/ (
       __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-statszPgPmi%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-statszPgPmi%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-statszPgPmi%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-statszPgPmi%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-statszPgPmi/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-statszPgPmi/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":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImJ1aWxkQWN0aXZpdHkiOnRydWUsImJ1aWxkQWN0aXZpdHlQb3NpdGlvbiI6ImJvdHRvbS1yaWdodCJ9LCJvbkRlbWFuZEVudHJpZXMiOnsibWF4SW5hY3RpdmVBZ2UiOjYwMDAwLCJwYWdlc0J1ZmZlckxlbmd0aCI6NX0sImFtcCI6eyJjYW5vbmljYWxCYXNlIjoiIn0sImJhc2VQYXRoIjoiIiwic2Fzc09wdGlvbnMiOnt9LCJ0cmFpbGluZ1NsYXNoIjpmYWxzZSwiaTE4biI6bnVsbCwicHJvZHVjdGlvbkJyb3dzZXJTb3VyY2VNYXBzIjpmYWxzZSwib3B0aW1pemVGb250cyI6dHJ1ZSwiZXhjbHVkZURlZmF1bHRNb21lbnRMb2NhbGVzIjp0cnVlLCJzZXJ2ZXJSdW50aW1lQ29uZmlnIjp7fSwicHVibGljUnVudGltZUNvbmZpZyI6e30sInJlYWN0UHJvZHVjdGlvblByb2ZpbGluZyI6ZmFsc2UsInJlYWN0U3RyaWN0TW9kZSI6bnVsbCwiaHR0cEFnZW50T3B0aW9ucyI6eyJrZWVwQWxpdmUiOnRydWV9LCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sImV4cGVyaW1lbnRhbCI6eyJmbHlpbmdTaHV0dGxlIjpmYWxzZSwicHJlcmVuZGVyRWFybHlFeGl0IjpmYWxzZSwic2VydmVyTWluaWZpY2F0aW9uIjp0cnVlLCJzZXJ2ZXJTb3VyY2VNYXBzIjpmYWxzZSwibGlua05vVG91Y2hTdGFydCI6ZmFsc2UsImNhc2VTZW5zaXRpdmVSb3V0ZXMiOmZhbHNlLCJwcmVsb2FkRW50cmllc09uU3RhcnQiOnRydWUsImNsaWVudFJvdXRlckZpbHRlciI6dHJ1ZSwiY2xpZW50Um91dGVyRmlsdGVyUmVkaXJlY3RzIjpmYWxzZSwiZmV0Y2hDYWNoZUtleVByZWZpeCI6IiIsIm1pZGRsZXdhcmVQcmVmZXRjaCI6ImZsZXhpYmxlIiwib3B0aW1pc3RpY0NsaWVudENhY2hlIjp0cnVlLCJtYW51YWxDbGllbnRCYXNlUGF0aCI6ZmFsc2UsImNwdXMiOjE5LCJtZW1vcnlCYXNlZFdvcmtlcnNDb3VudCI6ZmFsc2UsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwib3V0cHV0RmlsZVRyYWNpbmdSb290IjoiL3RtcC9uZXh0LXN0YXRzelBnUG1pL3N0YXRzLWFwcCIsInN3Y1RyYWNlUHJvZmlsaW5nIjpmYWxzZSwiZm9yY2VTd2NUcmFuc2Zvcm1zIjpmYWxzZSwibGFyZ2VQYWdlRGF0YUJ5dGVzIjoxMjgwMDAsImFkanVzdEZvbnRGYWxsYmFja3MiOmZhbHNlLCJhZGp1c3RGb250RmFsbGJhY2tzV2l0aFNpemVBZGp1c3QiOmZhbHNlLCJ0eXBlZFJvdXRlcyI6ZmFsc2UsImluc3RydW1lbnRhdGlvbkhvb2siOmZhbHNlLCJwYXJhbGxlbFNlcnZlckNvbXBpbGVzIjpmYWxzZSwicGFyYWxsZWxTZXJ2ZXJCdWlsZFRyYWNlcyI6ZmFsc2UsInBwciI6ZmFsc2UsIm9wdGltaXplU2VydmVyUmVhY3QiOnRydWUsInVzZUVhcmx5SW1wb3J0IjpmYWxzZSwic3RhbGVUaW1lcyI6eyJkeW5hbWljIjozMCwic3RhdGljIjozMDB9LCJvcHRpbWl6ZVBhY2thZ2VJbXBvcnRzIjpbImx1Y2lkZS1yZWFjdCIsImRhdGUtZm5zIiwibG9kYXNoLWVzIiwicmFtZGEiLCJhbnRkIiwicmVhY3QtYm9vdHN0cmFwIiwiYWhvb2tzIiwiQGFudC1kZXNpZ24vaWNvbnMiLCJAaGVhZGxlc3N1aS9yZWFjdCIsIkBoZWFkbGVzc3VpLWZsb2F0L3JlYWN0IiwiQGhlcm9pY29ucy9yZWFjdC8yMC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvc29saWQiLCJAaGVyb2ljb25zL3JlYWN0LzI0L291dGxpbmUiLCJAdmlzeC92aXN4IiwiQHRyZW1vci9yZWFjdCIsInJ4anMiLCJAbXVpL21hdGVyaWFsIiwiQG11aS9pY29ucy1tYXRlcmlhbCIsInJlY2hhcnRzIiwicmVhY3QtdXNlIiwiZWZmZWN0IiwiQGVmZmVjdC9zY2hlbWEiLCJAZWZmZWN0L3BsYXRmb3JtIiwiQGVmZmVjdC9wbGF0Zm9ybS1ub2RlIiwiQGVmZmVjdC9wbGF0Zm9ybS1icm93c2VyIiwiQGVmZmVjdC9wbGF0Zm9ybS1idW4iLCJAZWZmZWN0L3NxbCIsIkBlZmZlY3Qvc3FsLW1zc3FsIiwiQGVmZmVjdC9zcWwtbXlzcWwyIiwiQGVmZmVjdC9zcWwtcGciLCJAZWZmZWN0L3NxbC1zcXVsaXRlLW5vZGUiLCJAZWZmZWN0L3NxbC1zcXVsaXRlLWJ1biIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtd2FzbSIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtcmVhY3QtbmF0aXZlIiwiQGVmZmVjdC9ycGMiLCJAZWZmZWN0L3JwYy1odHRwIiwiQGVmZmVjdC90eXBlY2xhc3MiLCJAZWZmZWN0L2V4cGVyaW1lbnRhbCIsIkBlZmZlY3Qvb3BlbnRlbGVtZXRyeSIsIkBtYXRlcmlhbC11aS9jb3JlIiwiQG1hdGVyaWFsLXVpL2ljb25zIiwiQHRhYmxlci9pY29ucy1yZWFjdCIsIm11aS1jb3JlIiwicmVhY3QtaWNvbnMvYWkiLCJyZWFjdC1pY29ucy9iaSIsInJlYWN0LWljb25zL2JzIiwicmVhY3QtaWNvbnMvY2ciLCJyZWFjdC1pY29ucy9jaSIsInJlYWN0LWljb25zL2RpIiwicmVhY3QtaWNvbnMvZmEiLCJyZWFjdC1pY29ucy9mYTYiLCJyZWFjdC1pY29ucy9mYyIsInJlYWN0LWljb25zL2ZpIiwicmVhY3QtaWNvbnMvZ2kiLCJyZWFjdC1pY29ucy9nbyIsInJlYWN0LWljb25zL2dyIiwicmVhY3QtaWNvbnMvaGkiLCJyZWFjdC1pY29ucy9oaTIiLCJyZWFjdC1pY29ucy9pbSIsInJlYWN0LWljb25zL2lvIiwicmVhY3QtaWNvbnMvaW81IiwicmVhY3QtaWNvbnMvbGlhIiwicmVhY3QtaWNvbnMvbGliIiwicmVhY3QtaWNvbnMvbHUiLCJyZWFjdC1pY29ucy9tZCIsInJlYWN0LWljb25zL3BpIiwicmVhY3QtaWNvbnMvcmkiLCJyZWFjdC1pY29ucy9yeCIsInJlYWN0LWljb25zL3NpIiwicmVhY3QtaWNvbnMvc2wiLCJyZWFjdC1pY29ucy90YiIsInJlYWN0LWljb25zL3RmaSIsInJlYWN0LWljb25zL3RpIiwicmVhY3QtaWNvbnMvdnNjIiwicmVhY3QtaWNvbnMvd2kiXX0sImJ1bmRsZVBhZ2VzUm91dGVyRGVwZW5kZW5jaWVzIjpmYWxzZSwiY29uZmlnRmlsZSI6Ii90bXAvbmV4dC1zdGF0c3pQZ1BtaS9zdGF0cy1hcHAvbmV4dC5jb25maWcuanMiLCJjb25maWdGaWxlTmFtZSI6Im5leHQuY29uZmlnLmpzIn0=","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzelBnUG1pJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0Qh","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":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImJ1aWxkQWN0aXZpdHkiOnRydWUsImJ1aWxkQWN0aXZpdHlQb3NpdGlvbiI6ImJvdHRvbS1yaWdodCJ9LCJvbkRlbWFuZEVudHJpZXMiOnsibWF4SW5hY3RpdmVBZ2UiOjYwMDAwLCJwYWdlc0J1ZmZlckxlbmd0aCI6NX0sImFtcCI6eyJjYW5vbmljYWxCYXNlIjoiIn0sImJhc2VQYXRoIjoiIiwic2Fzc09wdGlvbnMiOnt9LCJ0cmFpbGluZ1NsYXNoIjpmYWxzZSwiaTE4biI6bnVsbCwicHJvZHVjdGlvbkJyb3dzZXJTb3VyY2VNYXBzIjpmYWxzZSwib3B0aW1pemVGb250cyI6dHJ1ZSwiZXhjbHVkZURlZmF1bHRNb21lbnRMb2NhbGVzIjp0cnVlLCJzZXJ2ZXJSdW50aW1lQ29uZmlnIjp7fSwicHVibGljUnVudGltZUNvbmZpZyI6e30sInJlYWN0UHJvZHVjdGlvblByb2ZpbGluZyI6ZmFsc2UsInJlYWN0U3RyaWN0TW9kZSI6bnVsbCwiaHR0cEFnZW50T3B0aW9ucyI6eyJrZWVwQWxpdmUiOnRydWV9LCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sImV4cGVyaW1lbnRhbCI6eyJmbHlpbmdTaHV0dGxlIjpmYWxzZSwicHJlcmVuZGVyRWFybHlFeGl0IjpmYWxzZSwic2VydmVyTWluaWZpY2F0aW9uIjp0cnVlLCJzZXJ2ZXJTb3VyY2VNYXBzIjpmYWxzZSwibGlua05vVG91Y2hTdGFydCI6ZmFsc2UsImNhc2VTZW5zaXRpdmVSb3V0ZXMiOmZhbHNlLCJwcmVsb2FkRW50cmllc09uU3RhcnQiOnRydWUsImNsaWVudFJvdXRlckZpbHRlciI6dHJ1ZSwiY2xpZW50Um91dGVyRmlsdGVyUmVkaXJlY3RzIjpmYWxzZSwiZmV0Y2hDYWNoZUtleVByZWZpeCI6IiIsIm1pZGRsZXdhcmVQcmVmZXRjaCI6ImZsZXhpYmxlIiwib3B0aW1pc3RpY0NsaWVudENhY2hlIjp0cnVlLCJtYW51YWxDbGllbnRCYXNlUGF0aCI6ZmFsc2UsImNwdXMiOjE5LCJtZW1vcnlCYXNlZFdvcmtlcnNDb3VudCI6ZmFsc2UsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwib3V0cHV0RmlsZVRyYWNpbmdSb290IjoiL3RtcC9uZXh0LXN0YXRzelBnUG1pL3N0YXRzLWFwcCIsInN3Y1RyYWNlUHJvZmlsaW5nIjpmYWxzZSwiZm9yY2VTd2NUcmFuc2Zvcm1zIjpmYWxzZSwibGFyZ2VQYWdlRGF0YUJ5dGVzIjoxMjgwMDAsImFkanVzdEZvbnRGYWxsYmFja3MiOmZhbHNlLCJhZGp1c3RGb250RmFsbGJhY2tzV2l0aFNpemVBZGp1c3QiOmZhbHNlLCJ0eXBlZFJvdXRlcyI6ZmFsc2UsImluc3RydW1lbnRhdGlvbkhvb2siOmZhbHNlLCJwYXJhbGxlbFNlcnZlckNvbXBpbGVzIjpmYWxzZSwicGFyYWxsZWxTZXJ2ZXJCdWlsZFRyYWNlcyI6ZmFsc2UsInBwciI6ZmFsc2UsIm9wdGltaXplU2VydmVyUmVhY3QiOnRydWUsInVzZUVhcmx5SW1wb3J0IjpmYWxzZSwic3RhbGVUaW1lcyI6eyJkeW5hbWljIjozMCwic3RhdGljIjozMDB9LCJvcHRpbWl6ZVBhY2thZ2VJbXBvcnRzIjpbImx1Y2lkZS1yZWFjdCIsImRhdGUtZm5zIiwibG9kYXNoLWVzIiwicmFtZGEiLCJhbnRkIiwicmVhY3QtYm9vdHN0cmFwIiwiYWhvb2tzIiwiQGFudC1kZXNpZ24vaWNvbnMiLCJAaGVhZGxlc3N1aS9yZWFjdCIsIkBoZWFkbGVzc3VpLWZsb2F0L3JlYWN0IiwiQGhlcm9pY29ucy9yZWFjdC8yMC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvc29saWQiLCJAaGVyb2ljb25zL3JlYWN0LzI0L291dGxpbmUiLCJAdmlzeC92aXN4IiwiQHRyZW1vci9yZWFjdCIsInJ4anMiLCJAbXVpL21hdGVyaWFsIiwiQG11aS9pY29ucy1tYXRlcmlhbCIsInJlY2hhcnRzIiwicmVhY3QtdXNlIiwiZWZmZWN0IiwiQGVmZmVjdC9zY2hlbWEiLCJAZWZmZWN0L3BsYXRmb3JtIiwiQGVmZmVjdC9wbGF0Zm9ybS1ub2RlIiwiQGVmZmVjdC9wbGF0Zm9ybS1icm93c2VyIiwiQGVmZmVjdC9wbGF0Zm9ybS1idW4iLCJAZWZmZWN0L3NxbCIsIkBlZmZlY3Qvc3FsLW1zc3FsIiwiQGVmZmVjdC9zcWwtbXlzcWwyIiwiQGVmZmVjdC9zcWwtcGciLCJAZWZmZWN0L3NxbC1zcXVsaXRlLW5vZGUiLCJAZWZmZWN0L3NxbC1zcXVsaXRlLWJ1biIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtd2FzbSIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtcmVhY3QtbmF0aXZlIiwiQGVmZmVjdC9ycGMiLCJAZWZmZWN0L3JwYy1odHRwIiwiQGVmZmVjdC90eXBlY2xhc3MiLCJAZWZmZWN0L2V4cGVyaW1lbnRhbCIsIkBlZmZlY3Qvb3BlbnRlbGVtZXRyeSIsIkBtYXRlcmlhbC11aS9jb3JlIiwiQG1hdGVyaWFsLXVpL2ljb25zIiwiQHRhYmxlci9pY29ucy1yZWFjdCIsIm11aS1jb3JlIiwicmVhY3QtaWNvbnMvYWkiLCJyZWFjdC1pY29ucy9iaSIsInJlYWN0LWljb25zL2JzIiwicmVhY3QtaWNvbnMvY2ciLCJyZWFjdC1pY29ucy9jaSIsInJlYWN0LWljb25zL2RpIiwicmVhY3QtaWNvbnMvZmEiLCJyZWFjdC1pY29ucy9mYTYiLCJyZWFjdC1pY29ucy9mYyIsInJlYWN0LWljb25zL2ZpIiwicmVhY3QtaWNvbnMvZ2kiLCJyZWFjdC1pY29ucy9nbyIsInJlYWN0LWljb25zL2dyIiwicmVhY3QtaWNvbnMvaGkiLCJyZWFjdC1pY29ucy9oaTIiLCJyZWFjdC1pY29ucy9pbSIsInJlYWN0LWljb25zL2lvIiwicmVhY3QtaWNvbnMvaW81IiwicmVhY3QtaWNvbnMvbGlhIiwicmVhY3QtaWNvbnMvbGliIiwicmVhY3QtaWNvbnMvbHUiLCJyZWFjdC1pY29ucy9tZCIsInJlYWN0LWljb25zL3BpIiwicmVhY3QtaWNvbnMvcmkiLCJyZWFjdC1pY29ucy9yeCIsInJlYWN0LWljb25zL3NpIiwicmVhY3QtaWNvbnMvc2wiLCJyZWFjdC1pY29ucy90YiIsInJlYWN0LWljb25zL3RmaSIsInJlYWN0LWljb25zL3RpIiwicmVhY3QtaWNvbnMvdnNjIiwicmVhY3QtaWNvbnMvd2kiXX0sImJ1bmRsZVBhZ2VzUm91dGVyRGVwZW5kZW5jaWVzIjpmYWxzZSwiY29uZmlnRmlsZSI6Ii90bXAvbmV4dC1zdGF0c3pQZ1BtaS9zdGF0cy1hcHAvbmV4dC5jb25maWcuanMiLCJjb25maWdGaWxlTmFtZSI6Im5leHQuY29uZmlnLmpzIn0=","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzelBnUG1pJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0Qh","sriEnabled":false,"middlewareConfig":"e30="}!
       var _self___RSC_MANIFEST;
 
       const incrementalCacheHandler = null;
@@ -421,47 +421,47 @@
       /***/
     },
 
-    /***/ 3990: /***/ (
+    /***/ 2373: /***/ (
       __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__, 7647)
+        __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__(3346));
+    /******/ __webpack_require__.O(0, [781, 429], () => __webpack_exec__(8361));
     /******/ 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/[email protected]/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: 233e7ac

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CI approved Approve running CI for fork tests type: next
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Empty NEXT_PUBLIC_* environment variables are evaluated as undefined rather than as empty strings
3 participants