vercel / next.js

The React Framework
https://nextjs.org
MIT License
121.29k stars 25.95k forks source link

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

Open icyJoseph opened 2 weeks ago

icyJoseph commented 2 weeks ago

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~

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 commented 2 weeks ago

Allow CI Workflow Run

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

icyJoseph commented 2 weeks ago

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 commented 2 weeks ago

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.

ijjk commented 2 weeks ago

Failing test suites

Commit: 233e7acd90078540895bbcc2ec98c7924c62d5c5

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

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)

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. (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)

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)

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. (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. (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)

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

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. (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

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

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)

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 commented 2 weeks ago

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 ```diff @@ -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 ```diff @@ -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: 233e7acd90078540895bbcc2ec98c7924c62d5c5