Skip to content

Upgrade React from 197d6a04-20250424 to c498bfce-20250426 #78632

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

Closed

Conversation

@ijjk
Copy link
Member

ijjk commented Apr 28, 2025

Failing test suites

Commit: 00c9453

pnpm test test/integration/amphtml-custom-validator/test/index.test.js

  • AMP Custom Validator > development mode > should run in development mode successfully
  • AMP Custom Validator > production mode > should build and start successfully
Expand output

● AMP Custom Validator › production mode › should build and start successfully

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-custom-validator/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-custom-validator/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-custom-validator/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-custom-validator/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-custom-validator/next.config.js
 ✓ Compiled successfully in 0ms
   Collecting page data ...
   Generating static pages (0/3) ...
 ✓ Generating static pages (3/3)
Amp Validation

/  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
   error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
   error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● AMP Custom Validator › development mode › should run in development mode successfully

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

Expected substring: not "error"
Received string:        " ⚠ Amp Validation

/  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
   error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
   error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

"

  49 |           await killApp(app)
  50 |
> 51 |           expect(stderr).not.toContain('error')
     |                              ^
  52 |           expect(html).toContain('Hello from AMP')
  53 |         })
  54 |       }

  at Object.toContain (integration/amphtml-custom-validator/test/index.test.js:51:30)

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

pnpm test test/integration/css-minify/test/index.test.js

  • css-minify > production mode > should minify correctly by removing whitespace
Expand output

● css-minify › production mode › should minify correctly by removing whitespace

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `css-minify production mode should minify correctly by removing whitespace 1`

- Snapshot  - 1
+ Received  + 1

- ".a{--var-1:0;--var-2:0;--var-1:-50%;--var-2:-50%}.b{--var-1:0;--var-2:0;--var-2:-50%}"
+ "<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="expect" href="#«R»" blocking="render"/><link rel="preload" href="/_next/static/css/a758ba5267308962.css" as="style"/><link rel="stylesheet" href="/_next/static/css/a758ba5267308962.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-b4405ac1b2b64b0f.js" defer=""></script><script src="/_next/static/chunks/framework-b21913d2f8837574.js" defer=""></script><script src="/_next/static/chunks/main-7567bc5f69fdffb5.js" defer=""></script><script src="/_next/static/chunks/pages/_app-92f08c463cd9ee12.js" defer=""></script><script src="/_next/static/chunks/pages/index-a903232ac06bff3f.js" defer=""></script><script src="/_next/static/0DCOxOYUJ351lBitWwmnw/_buildManifest.js" defer=""></script><script src="/_next/static/0DCOxOYUJ351lBitWwmnw/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="a"><div class="b">Hello CSS</div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"0DCOxOYUJ351lBitWwmnw","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script><template id="«R»"></template></body></html>"

  26 |       )
  27 |     } else {
> 28 |       expect(css).toMatchInlineSnapshot(
     |                   ^
  29 |         `".a{--var-1:0;--var-2:0;--var-1:-50%;--var-2:-50%}.b{--var-1:0;--var-2:0;--var-2:-50%}"`
  30 |       )
  31 |     }

  at Object.toMatchInlineSnapshot (integration/css-minify/test/index.test.js:28:19)

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

pnpm test test/integration/export-default-map/test/index.test.js

  • Export with default map > production mode > should export with folder that has dot in name
  • Export with default map > production mode > should export an amp only page to clean path
  • Export with default map > production mode > should export hybrid amp page correctly
  • Export with default map > production mode > should export nested hybrid amp page correctly
  • Export with default map > production mode > should export nested hybrid amp page correctly with folder
  • Export with default map > production mode > should export hybrid index amp page correctly
Expand output

● Export with default map › production mode › should export with folder that has dot in name

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
 ✓ Compiled successfully in 4.0s
   Collecting page data ...
   Generating static pages (0/9) ...
   Generating static pages (2/9) 
   Generating static pages (4/9) 
   Generating static pages (6/9) 
 ✓ Generating static pages (9/9)
Amp Validation

/some?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/just-amp    error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/info?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/docs?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/?amp=1      error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Export with default map › production mode › should export an amp only page to clean path

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
 ✓ Compiled successfully in 4.0s
   Collecting page data ...
   Generating static pages (0/9) ...
   Generating static pages (2/9) 
   Generating static pages (4/9) 
   Generating static pages (6/9) 
 ✓ Generating static pages (9/9)
Amp Validation

/some?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/just-amp    error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/info?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/docs?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/?amp=1      error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Export with default map › production mode › should export hybrid amp page correctly

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
 ✓ Compiled successfully in 4.0s
   Collecting page data ...
   Generating static pages (0/9) ...
   Generating static pages (2/9) 
   Generating static pages (4/9) 
   Generating static pages (6/9) 
 ✓ Generating static pages (9/9)
Amp Validation

/some?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/just-amp    error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/info?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/docs?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/?amp=1      error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Export with default map › production mode › should export nested hybrid amp page correctly

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
 ✓ Compiled successfully in 4.0s
   Collecting page data ...
   Generating static pages (0/9) ...
   Generating static pages (2/9) 
   Generating static pages (4/9) 
   Generating static pages (6/9) 
 ✓ Generating static pages (9/9)
Amp Validation

/some?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/just-amp    error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/info?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/docs?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/?amp=1      error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Export with default map › production mode › should export nested hybrid amp page correctly with folder

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
 ✓ Compiled successfully in 4.0s
   Collecting page data ...
   Generating static pages (0/9) ...
   Generating static pages (2/9) 
   Generating static pages (4/9) 
   Generating static pages (6/9) 
 ✓ Generating static pages (9/9)
Amp Validation

/some?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/just-amp    error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/info?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/docs?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/?amp=1      error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Export with default map › production mode › should export hybrid index amp page correctly

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/export-default-map/next.config.js
 ✓ Compiled successfully in 4.0s
   Collecting page data ...
   Generating static pages (0/9) ...
   Generating static pages (2/9) 
   Generating static pages (4/9) 
   Generating static pages (6/9) 
 ✓ Generating static pages (9/9)
Amp Validation

/some?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/just-amp    error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/info?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/docs?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/?amp=1      error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
             error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
             error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

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

pnpm test test/integration/amphtml-ssg/test/index.test.js

  • AMP SSG Support > export mode > production mode > should have copied SSG files correctly
  • AMP SSG Support > production mode > should load an amp first page correctly
  • AMP SSG Support > production mode > should load a hybrid amp page without query correctly
  • AMP SSG Support > production mode > should load dynamic hybrid SSG/AMP page
  • AMP SSG Support > production mode > should load dynamic hybrid SSG/AMP page with trailing slash
  • AMP SSG Support > production mode > should load dynamic hybrid SSG/AMP page with query
  • AMP SSG Support > production mode > should load a hybrid amp page with query correctly
  • AMP SSG Support > production mode > should output prerendered files correctly during build
Expand output

● AMP SSG Support › production mode › should load an amp first page correctly

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
 ✓ Compiled successfully in 2000ms
   Collecting page data ...
   Generating static pages (0/7) ...
   Generating static pages (1/7) 
   Generating static pages (3/7) 
   Generating static pages (5/7) 
 ✓ Generating static pages (7/7)
Amp Validation

/hybrid?amp=1       error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/amp                error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/blog/[slug]?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● AMP SSG Support › production mode › should load a hybrid amp page without query correctly

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
 ✓ Compiled successfully in 2000ms
   Collecting page data ...
   Generating static pages (0/7) ...
   Generating static pages (1/7) 
   Generating static pages (3/7) 
   Generating static pages (5/7) 
 ✓ Generating static pages (7/7)
Amp Validation

/hybrid?amp=1       error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/amp                error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/blog/[slug]?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● AMP SSG Support › production mode › should load dynamic hybrid SSG/AMP page

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
 ✓ Compiled successfully in 2000ms
   Collecting page data ...
   Generating static pages (0/7) ...
   Generating static pages (1/7) 
   Generating static pages (3/7) 
   Generating static pages (5/7) 
 ✓ Generating static pages (7/7)
Amp Validation

/hybrid?amp=1       error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/amp                error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/blog/[slug]?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● AMP SSG Support › production mode › should load dynamic hybrid SSG/AMP page with trailing slash

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
 ✓ Compiled successfully in 2000ms
   Collecting page data ...
   Generating static pages (0/7) ...
   Generating static pages (1/7) 
   Generating static pages (3/7) 
   Generating static pages (5/7) 
 ✓ Generating static pages (7/7)
Amp Validation

/hybrid?amp=1       error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/amp                error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/blog/[slug]?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● AMP SSG Support › production mode › should load dynamic hybrid SSG/AMP page with query

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
 ✓ Compiled successfully in 2000ms
   Collecting page data ...
   Generating static pages (0/7) ...
   Generating static pages (1/7) 
   Generating static pages (3/7) 
   Generating static pages (5/7) 
 ✓ Generating static pages (7/7)
Amp Validation

/hybrid?amp=1       error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/amp                error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/blog/[slug]?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● AMP SSG Support › production mode › should load a hybrid amp page with query correctly

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
 ✓ Compiled successfully in 2000ms
   Collecting page data ...
   Generating static pages (0/7) ...
   Generating static pages (1/7) 
   Generating static pages (3/7) 
   Generating static pages (5/7) 
 ✓ Generating static pages (7/7)
Amp Validation

/hybrid?amp=1       error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/amp                error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/blog/[slug]?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● AMP SSG Support › production mode › should output prerendered files correctly during build

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
 ✓ Compiled successfully in 2000ms
   Collecting page data ...
   Generating static pages (0/7) ...
   Generating static pages (1/7) 
   Generating static pages (3/7) 
   Generating static pages (5/7) 
 ✓ Generating static pages (7/7)
Amp Validation

/hybrid?amp=1       error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/amp                error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/blog/[slug]?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● AMP SSG Support › export mode › production mode › should have copied SSG files correctly

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   ▲ Next.js 15.4.0-canary.12

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amphtml-ssg/next.config.js
 ✓ Compiled successfully in 0ms
   Collecting page data ...
   Generating static pages (0/7) ...
   Generating static pages (1/7) 
   Generating static pages (3/7) 
   Generating static pages (5/7) 
 ✓ Generating static pages (7/7)
Amp Validation

/amp                error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/hybrid?amp=1       error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache

/blog/[slug]?amp=1  error  The attribute 'blocking' may not appear in tag 'link'.                          https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags
                    error  The mandatory attribute 'type' is missing in tag 'template'.                    https://amp.dev/documentation/components/amp-mustache
                    error  The tag 'template' requires including the 'amp-mustache' extension JavaScript.  https://amp.dev/documentation/components/amp-mustache


> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation

  312 |       ) {
  313 |         return reject(
> 314 |           new Error(
      |           ^
  315 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  316 |           )
  317 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

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

pnpm test test/integration/amphtml-fragment-style/test/index.test.js

  • AMP Fragment Styles > production mode > adds styles from fragment in AMP mode correctly
Expand output

● AMP Fragment Styles › production mode › adds styles from fragment in AMP mode correctly

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

Expected: "PASS"
Received: "FAIL"

  17 |     }
  18 |   }
> 19 |   expect(result.status).toBe('PASS')
     |                         ^
  20 | }
  21 |
  22 | /** @typedef {import('next/dist/compiled/amphtml-validator').Validator} Validator */

  at toBe (lib/amp-test-utils.js:19:25)
  at Object.<anonymous> (integration/amphtml-fragment-style/test/index.test.js:32:9)

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

pnpm test test/integration/amphtml/test/index.test.js

  • AMP Usage > production mode > should have amp optimizer in trace
  • AMP Usage > production mode > With AMP context > should render the normal page that uses the AMP hook
  • AMP Usage > production mode > With AMP context > should render the AMP page that uses the AMP hook
  • AMP Usage > production mode > With AMP context > should render nested normal page with AMP hook
  • AMP Usage > production mode > With AMP context > should render nested AMP page with AMP hook
  • AMP Usage > production mode > With basic AMP usage > should render the page as valid AMP
  • AMP Usage > production mode > With basic AMP usage > should render the page without leaving render target
  • AMP Usage > production mode > With basic AMP usage > should not output client pages for AMP only
  • AMP Usage > production mode > With basic AMP usage > should not output client pages for AMP only with config exported after declaration
  • AMP Usage > production mode > With basic AMP usage > should drop custom scripts
  • AMP Usage > production mode > With basic AMP usage > should not drop custom amp scripts
  • AMP Usage > production mode > With basic AMP usage > should optimize clean
  • AMP Usage > production mode > With basic AMP usage > should auto import extensions
  • AMP Usage > production mode > With basic usage > should render the page
  • AMP Usage > production mode > canonical amphtml > should render link rel amphtml
  • AMP Usage > production mode > canonical amphtml > should render amphtml from provided rel link
  • AMP Usage > production mode > canonical amphtml > should render link rel amphtml with existing query
  • AMP Usage > production mode > canonical amphtml > should render the AMP page that uses the AMP hook
  • AMP Usage > production mode > canonical amphtml > should render a canonical regardless of amp-only status (explicit)
  • AMP Usage > production mode > canonical amphtml > should not render amphtml link tag with no AMP page
  • AMP Usage > production mode > canonical amphtml > should remove conflicting amp tags
  • AMP Usage > production mode > canonical amphtml > should allow manually setting canonical
  • AMP Usage > production mode > canonical amphtml > should allow manually setting amphtml rel
  • AMP Usage > production mode > combined styles > should combine style tags
  • AMP Usage > production mode > combined styles > should remove sourceMaps from styles
Expand output

● AMP Usage › production mode › should have amp optimizer in trace

ENOENT: no such file or directory, open '/root/actions-runner/_work/next.js/next.js/test/integration/amphtml/.next/next-server.js.nft.json'

  67 |     it('should have amp optimizer in trace', async () => {
  68 |       const trace = JSON.parse(
> 69 |         readFileSync(join(appDir, '.next/next-server.js.nft.json'), 'utf8')
     |                     ^
  70 |       )
  71 |       expect(
  72 |         trace.files.some((file) =>

  at Object.<anonymous> (integration/amphtml/test/index.test.js:69:21)

● AMP Usage › production mode › With basic usage › should render the page

FetchError: request to http://localhost:43879/ failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › With basic AMP usage › should render the page as valid AMP

FetchError: request to http://localhost:43879/?amp=1 failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › With basic AMP usage › should render the page without leaving render target

FetchError: request to http://localhost:43879/special-chars failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › With basic AMP usage › should not output client pages for AMP only

page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:43879/nav
Call log:
  - navigating to "http://localhost:43879/nav", waiting until "load"

  313 |     opts?.beforePageLoad?.(page)
  314 |
> 315 |     await page.goto(url, { waitUntil: 'load' })
      |                ^
  316 |   }
  317 |
  318 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:315:16)
  at webdriver (lib/next-webdriver.ts:143:3)
  at Object.<anonymous> (integration/amphtml/test/index.test.js:107:25)

● AMP Usage › production mode › With basic AMP usage › should not output client pages for AMP only with config exported after declaration

page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:43879/nav
Call log:
  - navigating to "http://localhost:43879/nav", waiting until "load"

  313 |     opts?.beforePageLoad?.(page)
  314 |
> 315 |     await page.goto(url, { waitUntil: 'load' })
      |                ^
  316 |   }
  317 |
  318 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:315:16)
  at webdriver (lib/next-webdriver.ts:143:3)
  at Object.<anonymous> (integration/amphtml/test/index.test.js:116:25)

● AMP Usage › production mode › With basic AMP usage › should drop custom scripts

FetchError: request to http://localhost:43879/custom-scripts failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › With basic AMP usage › should not drop custom amp scripts

FetchError: request to http://localhost:43879/amp-script?amp=1 failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › With basic AMP usage › should optimize clean

FetchError: request to http://localhost:43879/only-amp failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › With basic AMP usage › should auto import extensions

FetchError: request to http://localhost:43879/auto-import failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › With AMP context › should render the normal page that uses the AMP hook

FetchError: request to http://localhost:43879/use-amp-hook failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › With AMP context › should render the AMP page that uses the AMP hook

FetchError: request to http://localhost:43879/use-amp-hook?amp=1 failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › With AMP context › should render nested normal page with AMP hook

FetchError: request to http://localhost:43879/nested failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › With AMP context › should render nested AMP page with AMP hook

FetchError: request to http://localhost:43879/nested?amp=1 failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › canonical amphtml › should render link rel amphtml

FetchError: request to http://localhost:43879/use-amp-hook failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › canonical amphtml › should render amphtml from provided rel link

FetchError: request to http://localhost:43879/use-amp-hook.amp failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › canonical amphtml › should render link rel amphtml with existing query

FetchError: request to http://localhost:43879/use-amp-hook?hello=1 failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › canonical amphtml › should render the AMP page that uses the AMP hook

FetchError: request to http://localhost:43879/use-amp-hook?amp=1 failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › canonical amphtml › should render a canonical regardless of amp-only status (explicit)

FetchError: request to http://localhost:43879/only-amp failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › canonical amphtml › should not render amphtml link tag with no AMP page

FetchError: request to http://localhost:43879/normal failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › canonical amphtml › should remove conflicting amp tags

FetchError: request to http://localhost:43879/conflicting-tag?amp=1 failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › canonical amphtml › should allow manually setting canonical

FetchError: request to http://localhost:43879/manual-rels?amp=1 failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › canonical amphtml › should allow manually setting amphtml rel

FetchError: request to http://localhost:43879/manual-rels failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › combined styles › should combine style tags

FetchError: request to http://localhost:43879/styled?amp=1 failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

● AMP Usage › production mode › combined styles › should remove sourceMaps from styles

FetchError: request to http://localhost:43879/styled?amp=1 failed, reason: connect ECONNREFUSED 127.0.0.1:43879

  at ClientRequest.<anonymous> (../node_modules/.pnpm/[email protected][email protected]/node_modules/node-fetch/lib/index.js:1491:11)

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

pnpm test test/integration/auto-export-query-error/test/index.test.js

  • Auto Export > production mode > should show warning for query provided for auto exported page correctly
Expand output

● Auto Export › production mode › should show warning for query provided for auto exported page correctly

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

Expected substring: "Error: you provided query values for / which is an auto-exported page. These can not be applied since the page can no longer be re-rendered on the server. To disable auto-export for this page add `getInitialProps`"
Received string:    " ⚠ Linting is disabled.·
> AMP Validation caused the export to fail. https://nextjs.org/docs/messages/amp-export-validation
"

  11 |   it('should show warning for query provided for auto exported page correctly', async () => {
  12 |     expect(exitCode).toBe(1)
> 13 |     expect(stderr).toContain(
     |                    ^
  14 |       'Error: you provided query values for / which is an auto-exported page. These can not be applied since the page can no longer be re-rendered on the server. To disable auto-export for this page add `getInitialProps`'
  15 |     )
  16 |

  at Object.toContain (integration/auto-export-query-error/test/index.test.js:13:20)

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

pnpm test-dev-turbo test/development/acceptance/error-recovery.test.ts (turbopack)

  • pages/ error recovery > logbox: can recover from a syntax error without losing state
Expand output

● pages/ error recovery › logbox: can recover from a syntax error without losing state

Application is in inconsistent state: timeout.

  113 |             }
  114 |             if (status !== 'pending') {
> 115 |               throw new Error(
      |                     ^
  116 |                 `Application is in inconsistent state: ${status}.`
  117 |               )
  118 |             }

  at Object.patch (lib/development-sandbox.ts:115:21)
  at Object.<anonymous> (development/acceptance/error-recovery.test.ts:43:5)

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-start test/e2e/app-dir/router-autoscroll/router-autoscroll.test.ts (PPR)

  • router autoscrolling on navigation > horizontal scroll > should't scroll horizontally
  • router autoscrolling on navigation > router.refresh() > should not scroll when called alone
  • router autoscrolling on navigation > vertical scroll > should scroll to top of document when navigating between to pages without layout
  • router autoscrolling on navigation > vertical scroll > should scroll to top of page when scrolling to phe top of the document wouldn't have the page in the viewport
  • router autoscrolling on navigation > vertical scroll > should not scroll when the top of the page is in the viewport
  • router autoscrolling on navigation > vertical scroll > should not scroll to top of document if page in viewport
Expand output

● router autoscrolling on navigation › vertical scroll › should scroll to top of document when navigating between to pages without layout

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

- Expected  - 1
+ Received  + 6

- Array []
+ Array [
+   Object {
+     "message": "Did not find element expected to be parsed from: <link rel=expect href=\"#«R»\">",
+     "source": "warning",
+   },
+ ]

  1702 |   })
  1703 |
> 1704 |   expect(warningsAndErrors).toEqual([])
       |                             ^
  1705 | }
  1706 |
  1707 | export async function getHighlightedDiffLines(

  at toEqual (lib/next-test-utils.ts:1704:29)
  at waitForScrollToComplete (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:25:5)
  at scrollTo (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:33:5)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:40:7)

● router autoscrolling on navigation › vertical scroll › should scroll to top of page when scrolling to phe top of the document wouldn't have the page in the viewport

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

- Expected  - 1
+ Received  + 6

- Array []
+ Array [
+   Object {
+     "message": "Did not find element expected to be parsed from: <link rel=expect href=\"#«R»\">",
+     "source": "warning",
+   },
+ ]

  1702 |   })
  1703 |
> 1704 |   expect(warningsAndErrors).toEqual([])
       |                             ^
  1705 | }
  1706 |
  1707 | export async function getHighlightedDiffLines(

  at toEqual (lib/next-test-utils.ts:1704:29)
  at waitForScrollToComplete (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:25:5)
  at scrollTo (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:33:5)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:50:7)

● router autoscrolling on navigation › vertical scroll › should not scroll when the top of the page is in the viewport

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

- Expected  - 1
+ Received  + 6

- Array []
+ Array [
+   Object {
+     "message": "Did not find element expected to be parsed from: <link rel=expect href=\"#«R»\">",
+     "source": "warning",
+   },
+ ]

  1702 |   })
  1703 |
> 1704 |   expect(warningsAndErrors).toEqual([])
       |                             ^
  1705 | }
  1706 |
  1707 | export async function getHighlightedDiffLines(

  at toEqual (lib/next-test-utils.ts:1704:29)
  at waitForScrollToComplete (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:25:5)
  at scrollTo (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:33:5)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:68:7)

● router autoscrolling on navigation › vertical scroll › should not scroll to top of document if page in viewport

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

- Expected  - 1
+ Received  + 6

- Array []
+ Array [
+   Object {
+     "message": "Did not find element expected to be parsed from: <link rel=expect href=\"#«R»\">",
+     "source": "warning",
+   },
+ ]

  1702 |   })
  1703 |
> 1704 |   expect(warningsAndErrors).toEqual([])
       |                             ^
  1705 | }
  1706 |
  1707 | export async function getHighlightedDiffLines(

  at toEqual (lib/next-test-utils.ts:1704:29)
  at waitForScrollToComplete (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:25:5)
  at scrollTo (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:33:5)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:78:7)

● router autoscrolling on navigation › horizontal scroll › should't scroll horizontally

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

- Expected  - 1
+ Received  + 6

- Array []
+ Array [
+   Object {
+     "message": "Did not find element expected to be parsed from: <link rel=expect href=\"#«R»\">",
+     "source": "warning",
+   },
+ ]

  1702 |   })
  1703 |
> 1704 |   expect(warningsAndErrors).toEqual([])
       |                             ^
  1705 | }
  1706 |
  1707 | export async function getHighlightedDiffLines(

  at toEqual (lib/next-test-utils.ts:1704:29)
  at waitForScrollToComplete (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:25:5)
  at scrollTo (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:33:5)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:117:7)

● router autoscrolling on navigation › router.refresh() › should not scroll when called alone

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

- Expected  - 1
+ Received  + 6

- Array []
+ Array [
+   Object {
+     "message": "Did not find element expected to be parsed from: <link rel=expect href=\"#«R»\">",
+     "source": "warning",
+   },
+ ]

  1702 |   })
  1703 |
> 1704 |   expect(warningsAndErrors).toEqual([])
       |                             ^
  1705 | }
  1706 |
  1707 | export async function getHighlightedDiffLines(

  at toEqual (lib/next-test-utils.ts:1704:29)
  at waitForScrollToComplete (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:25:5)
  at scrollTo (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:33:5)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:130:7)

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

pnpm test-dev-turbo test/development/app-hmr/hmr.test.ts (turbopack)

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

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

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

Expected: ArrayContaining [ObjectContaining {"message": StringContaining "[Fast Refresh] done", "source": "log"}]
Received: [{"message": "%cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold", "source": "info"}, {"message": "Next.js page already hydrated", "source": "log"}, {"message": "connected to ws at ws://localhost:41895/_next/webpack-hmr", "source": "log"}, {"message": "received ws message {\"action\":\"isrManifest\",\"data\":{\"/does-not-exist\":true,\"/folder-renamed\":true,\"/folder\":true,\"/env/node\":true,\"/env/node-module-var\":true}}", "source": "log"}, {"message": "received ws message {\"action\":\"turbopack-connected\",\"data\":{\"sessionId\":2944229499638823}}", "source": "log"}, {"message": "received ws message {\"action\":\"sync\",\"errors\":[],\"warnings\":[],\"hash\":\"\",\"versionInfo\":{\"staleness\":\"fresh\",\"installed\":\"15.4.0-canary.12\"},\"debug\":{},\"devIndicator\":{\"disabledUntil\":0}}", "source": "log"}, {"message": "received ws message {\"action\":\"building\"}", "source": "log"}, {"message": "received ws message {\"action\":\"built\",\"hash\":\"37\",\"errors\":[],\"warnings\":[]}", "source": "log"}, {"message": "received ws message {\"action\":\"serverComponentChanges\",\"hash\":\"38\"}", "source": "log"}, {"message": "received ws message {\"action\":\"building\"}", "source": "log"}, …]

  119 |           await retry(async () => {
  120 |             logs = await browser.log()
> 121 |             expect(logs).toEqual(
      |                          ^
  122 |               expect.arrayContaining([
  123 |                 expect.objectContaining({
  124 |                   message: expect.stringContaining('[Fast Refresh] done'),

  at toEqual (development/app-hmr/hmr.test.ts:121:26)
  at retry (lib/next-test-utils.ts:811:14)
  at development/app-hmr/hmr.test.ts:119:11
  at NextDevInstance.patchFile (lib/next-modes/base.ts:601:9)
  at NextDevInstance.patchFile (lib/next-modes/next-dev.ts:199:16)
  at development/app-hmr/hmr.test.ts:116:9

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

pnpm test-start-turbo test/e2e/app-dir/ppr-metadata-streaming/ppr-metadata-streaming.test.ts (turbopack)

  • ppr-metadata-streaming > static metadata > should insert metadata in body when page is dynamic page content
Expand output

● ppr-metadata-streaming › static metadata › should insert metadata in body when page is dynamic page content

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

- Expected  - 1
+ Received  + 6

- Array []
+ Array [
+   Object {
+     "message": "Did not find element expected to be parsed from: <link rel=expect href=\"#«R»\">",
+     "source": "warning",
+   },
+ ]

  1702 |   })
  1703 |
> 1704 |   expect(warningsAndErrors).toEqual([])
       |                             ^
  1705 | }
  1706 |
  1707 | export async function getHighlightedDiffLines(

  at toEqual (lib/next-test-utils.ts:1704:29)
  at Object.<anonymous> (e2e/app-dir/ppr-metadata-streaming/ppr-metadata-streaming.test.ts:38:7)

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

pnpm test-start test/production/deployment-id-handling/deployment-id-handling.test.ts

  • deployment-id-handling enabled with CUSTOM_DEPLOYMENT_ID > should append dpl query to all assets correctly for /from-app
  • deployment-id-handling enabled with CUSTOM_DEPLOYMENT_ID > should append dpl query to all assets correctly for /from-app/edge
  • deployment-id-handling enabled with NEXT_DEPLOYMENT_ID > should append dpl query to all assets correctly for /from-app
  • deployment-id-handling enabled with NEXT_DEPLOYMENT_ID > should append dpl query to all assets correctly for /from-app/edge
Expand output

● deployment-id-handling enabled with NEXT_DEPLOYMENT_ID › should append dpl query to all assets correctly for /from-app

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

Expected substring: "dpl=1745858359316"
Received string:    "#«R»"

  43 |               expect(link.attribs.href).not.toContain('dpl=' + deploymentId)
  44 |             } else {
> 45 |               expect(link.attribs.href).toContain('dpl=' + deploymentId)
     |                                         ^
  46 |             }
  47 |           }
  48 |         }

  at toContain (production/deployment-id-handling/deployment-id-handling.test.ts:45:41)

● deployment-id-handling enabled with NEXT_DEPLOYMENT_ID › should append dpl query to all assets correctly for /from-app/edge

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

Expected substring: "dpl=1745858359316"
Received string:    "#«R»"

  43 |               expect(link.attribs.href).not.toContain('dpl=' + deploymentId)
  44 |             } else {
> 45 |               expect(link.attribs.href).toContain('dpl=' + deploymentId)
     |                                         ^
  46 |             }
  47 |           }
  48 |         }

  at toContain (production/deployment-id-handling/deployment-id-handling.test.ts:45:41)

● deployment-id-handling enabled with CUSTOM_DEPLOYMENT_ID › should append dpl query to all assets correctly for /from-app

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

Expected substring: "dpl=1745858359317"
Received string:    "#«R»"

  43 |               expect(link.attribs.href).not.toContain('dpl=' + deploymentId)
  44 |             } else {
> 45 |               expect(link.attribs.href).toContain('dpl=' + deploymentId)
     |                                         ^
  46 |             }
  47 |           }
  48 |         }

  at toContain (production/deployment-id-handling/deployment-id-handling.test.ts:45:41)

● deployment-id-handling enabled with CUSTOM_DEPLOYMENT_ID › should append dpl query to all assets correctly for /from-app/edge

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

Expected substring: "dpl=1745858359317"
Received string:    "#«R»"

  43 |               expect(link.attribs.href).not.toContain('dpl=' + deploymentId)
  44 |             } else {
> 45 |               expect(link.attribs.href).toContain('dpl=' + deploymentId)
     |                                         ^
  46 |             }
  47 |           }
  48 |         }

  at toContain (production/deployment-id-handling/deployment-id-handling.test.ts:45:41)

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 (edge)
Expand output

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

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

  454 |   waitForElementByCss(selector: string, timeout = 10_000) {
  455 |     return this.startChain(async () => {
> 456 |       const el = await page.waitForSelector(selector, {
      |                             ^
  457 |         timeout,
  458 |         state: 'attached',
  459 |       })

  at waitForSelector (lib/browsers/playwright.ts:456:29)
  at e2e/app-dir/actions/app-action.test.ts:892:7
  at Proxy._chain (lib/browsers/playwright.ts:568:23)
  at Proxy._chain (lib/browsers/playwright.ts:549:17)
  at Proxy.startChain (lib/browsers/playwright.ts:455:17)
  at waitForElementByCss (e2e/app-dir/actions/app-action.test.ts:895:10)

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

@ijjk
Copy link
Member

ijjk commented Apr 28, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js update/react/19.2.0-canary-c498bfce-20250426 Change
buildDuration 18.8s 17s N/A
buildDurationCached 15.9s 13.4s N/A
nodeModulesSize 419 MB 419 MB ⚠️ +288 kB
nextStartRea..uration (ms) 443ms 446ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary vercel/next.js update/react/19.2.0-canary-c498bfce-20250426 Change
1733-HASH.js gzip 44.5 kB 44.9 kB ⚠️ +472 B
194b18f3-HASH.js gzip 53.8 kB 53.8 kB
2192.HASH.js gzip 169 B 169 B
4719-HASH.js gzip 5.47 kB 5.44 kB N/A
framework-HASH.js gzip 57.4 kB 57.4 kB
main-app-HASH.js gzip 253 B 256 B N/A
main-HASH.js gzip 33.5 kB 33.5 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB N/A
Overall change 156 kB 156 kB ⚠️ +472 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js update/react/19.2.0-canary-c498bfce-20250426 Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages
vercel/next.js canary vercel/next.js update/react/19.2.0-canary-c498bfce-20250426 Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 192 B 192 B
amp-HASH.js gzip 510 B 510 B
css-HASH.js gzip 344 B 342 B N/A
dynamic-HASH.js gzip 1.84 kB 1.83 kB N/A
edge-ssr-HASH.js gzip 265 B 265 B
head-HASH.js gzip 363 B 364 B N/A
hooks-HASH.js gzip 392 B 391 B N/A
image-HASH.js gzip 4.69 kB 4.67 kB N/A
index-HASH.js gzip 267 B 267 B
link-HASH.js gzip 2.53 kB 2.53 kB N/A
routerDirect..HASH.js gzip 328 B 325 B N/A
script-HASH.js gzip 396 B 396 B
withRouter-HASH.js gzip 325 B 325 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 2.25 kB 2.25 kB
Client Build Manifests
vercel/next.js canary vercel/next.js update/react/19.2.0-canary-c498bfce-20250426 Change
_buildManifest.js gzip 750 B 752 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js update/react/19.2.0-canary-c498bfce-20250426 Change
index.html gzip 522 B 524 B N/A
link.html gzip 536 B 539 B N/A
withRouter.html gzip 520 B 520 B
Overall change 520 B 520 B
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary vercel/next.js update/react/19.2.0-canary-c498bfce-20250426 Change
edge-ssr.js gzip 135 kB 136 kB ⚠️ +342 B
page.js gzip 217 kB 212 kB N/A
Overall change 135 kB 136 kB ⚠️ +342 B
Middleware size
vercel/next.js canary vercel/next.js update/react/19.2.0-canary-c498bfce-20250426 Change
middleware-b..fest.js gzip 675 B 671 B N/A
middleware-r..fest.js gzip 155 B 157 B N/A
middleware.js gzip 32.3 kB 32.4 kB N/A
edge-runtime..pack.js gzip 844 B 844 B
Overall change 844 B 844 B
Next Runtimes Overall increase ⚠️
vercel/next.js canary vercel/next.js update/react/19.2.0-canary-c498bfce-20250426 Change
app-page-exp...dev.js gzip 314 kB 314 kB ⚠️ +508 B
app-page-exp..prod.js gzip 144 kB 145 kB ⚠️ +347 B
app-page-tur...dev.js gzip 314 kB 314 kB ⚠️ +506 B
app-page-tur..prod.js gzip 144 kB 145 kB ⚠️ +341 B
app-page-tur...dev.js gzip 305 kB 306 kB ⚠️ +498 B
app-page-tur..prod.js gzip 140 kB 141 kB ⚠️ +363 B
app-page.run...dev.js gzip 305 kB 306 kB ⚠️ +498 B
app-page.run..prod.js gzip 140 kB 141 kB ⚠️ +365 B
app-route-ex...dev.js gzip 40.7 kB 40.7 kB
app-route-ex..prod.js gzip 26.3 kB 26.3 kB N/A
app-route-tu...dev.js gzip 40.7 kB 40.7 kB N/A
app-route-tu..prod.js gzip 26.3 kB 26.3 kB
app-route-tu...dev.js gzip 40 kB 40 kB
app-route-tu..prod.js gzip 26 kB 26 kB N/A
app-route.ru...dev.js gzip 40 kB 40 kB
app-route.ru..prod.js gzip 26 kB 26 kB N/A
dist_client_...dev.js gzip 356 B 356 B
dist_client_...dev.js gzip 359 B 359 B
dist_client_...dev.js gzip 351 B 351 B
dist_client_...dev.js gzip 349 B 349 B
pages-api-tu...dev.js gzip 12 kB 12 kB
pages-api-tu..prod.js gzip 9.83 kB 9.83 kB
pages-api.ru...dev.js gzip 12 kB 12 kB
pages-api.ru..prod.js gzip 9.82 kB 9.82 kB
pages-turbo....dev.js gzip 31.4 kB 31.4 kB
pages-turbo...prod.js gzip 21.9 kB 21.9 kB
pages.runtim...dev.js gzip 31.6 kB 31.6 kB
pages.runtim..prod.js gzip 22 kB 22 kB
server.runti..prod.js gzip 61.7 kB 61.7 kB N/A
Overall change 2.11 MB 2.11 MB ⚠️ +3.43 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js update/react/19.2.0-canary-c498bfce-20250426 Change
0.pack gzip 2.18 MB 2.18 MB ⚠️ +601 B
index.pack gzip 76.9 kB 78.1 kB ⚠️ +1.23 kB
Overall change 2.26 MB 2.26 MB ⚠️ +1.83 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for css-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9813],
   {
-    /***/ 1586: /***/ (
+    /***/ 2628: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/css",
         function () {
-          return __webpack_require__(4362);
+          return __webpack_require__(8707);
         },
       ]);
       if (false) {
@@ -18,14 +18,7 @@
       /***/
     },
 
-    /***/ 4350: /***/ (module) => {
-      // extracted by mini-css-extract-plugin
-      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
-
-      /***/
-    },
-
-    /***/ 4362: /***/ (
+    /***/ 8707: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -39,7 +32,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(5640);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4350);
+        __webpack_require__(9080);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           _css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -58,13 +51,20 @@
 
       /***/
     },
+
+    /***/ 9080: /***/ (module) => {
+      // extracted by mini-css-extract-plugin
+      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1586)
+      __webpack_exec__(2628)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for dynamic-HASH.js
@@ -1,17 +1,117 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 283: /***/ (
+    /***/ 2001: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
+      __webpack_require__
+    ) => {
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(5640);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(9553);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 8042)
+            .then(__webpack_require__.bind(__webpack_require__, 8042))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 8042],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
+
+      /***/
+    },
+
+    /***/ 2976: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(2001);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7807: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      "use strict";
+      /* __next_internal_client_entry_do_not_use__  cjs */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "LoadableContext", {
+        enumerable: true,
+        get: function () {
+          return LoadableContext;
+        },
+      });
+      const _interop_require_default = __webpack_require__(1532);
+      const _react = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(148)
+      );
+      const LoadableContext = _react.default.createContext(null);
+      if (false) {
+      } //# sourceMappingURL=loadable-context.shared-runtime.js.map
+
+      /***/
+    },
+
+    /***/ 9553: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(6990);
+      module.exports = __webpack_require__(9986);
 
       /***/
     },
 
-    /***/ 505: /***/ (
+    /***/ 9829: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -53,7 +153,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(148)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(6179);
+      const _loadablecontextsharedruntime = __webpack_require__(7807);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -288,90 +388,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 5703: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(5640);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(283);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 2192)
-            .then(__webpack_require__.bind(__webpack_require__, 2192))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 2192],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
-
-      /***/
-    },
-
-    /***/ 6179: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      "use strict";
-      /* __next_internal_client_entry_do_not_use__  cjs */
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "LoadableContext", {
-        enumerable: true,
-        get: function () {
-          return LoadableContext;
-        },
-      });
-      const _interop_require_default = __webpack_require__(1532);
-      const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(148)
-      );
-      const LoadableContext = _react.default.createContext(null);
-      if (false) {
-      } //# sourceMappingURL=loadable-context.shared-runtime.js.map
-
-      /***/
-    },
-
-    /***/ 6990: /***/ (module, exports, __webpack_require__) => {
+    /***/ 9986: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -404,7 +421,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
         __webpack_require__(148)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(505)
+        __webpack_require__(9829)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -504,30 +521,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
-
-    /***/ 9254: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(5703);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(9254)
+      __webpack_exec__(2976)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for hooks-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9804],
   {
-    /***/ 1664: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/hooks",
-        function () {
-          return __webpack_require__(6130);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 6130: /***/ (
+    /***/ 4756: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 5426: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/hooks",
+        function () {
+          return __webpack_require__(4756);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1664)
+      __webpack_exec__(5426)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for image-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2983],
   {
-    /***/ 2198: /***/ (
+    /***/ 264: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/image",
         function () {
-          return __webpack_require__(3444);
+          return __webpack_require__(3594);
         },
       ]);
       if (false) {
@@ -18,7 +18,190 @@
       /***/
     },
 
-    /***/ 2514: /***/ (
+    /***/ 1206: /***/ (__unused_webpack_module, exports) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "default", {
+        enumerable: true,
+        get: function () {
+          return _default;
+        },
+      });
+      const DEFAULT_Q = 75;
+      function defaultLoader(param) {
+        let { config, src, width, quality } = param;
+        var _config_qualities;
+        if (false) {
+        }
+        const q =
+          quality ||
+          ((_config_qualities = config.qualities) == null
+            ? void 0
+            : _config_qualities.reduce((prev, cur) =>
+                Math.abs(cur - DEFAULT_Q) < Math.abs(prev - DEFAULT_Q)
+                  ? cur
+                  : prev
+              )) ||
+          DEFAULT_Q;
+        return (
+          config.path +
+          "?url=" +
+          encodeURIComponent(src) +
+          "&w=" +
+          width +
+          "&q=" +
+          q +
+          (src.startsWith("/_next/static/media/") && false ? 0 : "")
+        );
+      }
+      // We use this to determine if the import is the default loader
+      // or a custom loader defined by the user in next.config.js
+      defaultLoader.__next_img_default = true;
+      const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map
+
+      /***/
+    },
+
+    /***/ 1765: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useMergedRef", {
+        enumerable: true,
+        get: function () {
+          return useMergedRef;
+        },
+      });
+      const _react = __webpack_require__(148);
+      function useMergedRef(refA, refB) {
+        const cleanupA = (0, _react.useRef)(null);
+        const cleanupB = (0, _react.useRef)(null);
+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
+        // But this can cause us to leak a cleanup-ref into user code (e.g. via `<Link legacyBehavior>`),
+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
+        // (because it hasn't been updated for React 19)
+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
+        return (0, _react.useCallback)(
+          (current) => {
+            if (current === null) {
+              const cleanupFnA = cleanupA.current;
+              if (cleanupFnA) {
+                cleanupA.current = null;
+                cleanupFnA();
+              }
+              const cleanupFnB = cleanupB.current;
+              if (cleanupFnB) {
+                cleanupB.current = null;
+                cleanupFnB();
+              }
+            } else {
+              if (refA) {
+                cleanupA.current = applyRef(refA, current);
+              }
+              if (refB) {
+                cleanupB.current = applyRef(refB, current);
+              }
+            }
+          },
+          [refA, refB]
+        );
+      }
+      function applyRef(refA, current) {
+        if (typeof refA === "function") {
+          const cleanup = refA(current);
+          if (typeof cleanup === "function") {
+            return cleanup;
+          } else {
+            return () => refA(null);
+          }
+        } else {
+          refA.current = current;
+          return () => {
+            refA.current = null;
+          };
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-merged-ref.js.map
+
+      /***/
+    },
+
+    /***/ 3353: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(5526);
+
+      /***/
+    },
+
+    /***/ 3594: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
+      __webpack_require__
+    ) => {
+      "use strict";
+      // ESM COMPAT FLAG
+      __webpack_require__.r(__webpack_exports__);
+
+      // EXPORTS
+      __webpack_require__.d(__webpack_exports__, {
+        __N_SSP: () => /* binding */ __N_SSP,
+        default: () => /* binding */ pages_image,
+      });
+
+      // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
+      var jsx_runtime = __webpack_require__(5640);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@[email protected][email protected][email protected]/node_modules/next/image.js
+      var next_image = __webpack_require__(3353);
+      var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png
+      /* harmony default export */ const nextjs = {
+        src: "/_next/static/media/nextjs.cae0b805.png",
+        height: 1347,
+        width: 1626,
+        blurDataURL:
+          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAHCAMAAAACh/xsAAAAD1BMVEX////x8fH6+vrb29vo6Oh8o70bAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAH0lEQVR4nGNgwARMjIyMjCAGCzMzMwsTRISJCcRABwAEcAAkLCQfgAAAAABJRU5ErkJggg==",
+        blurWidth: 8,
+        blurHeight: 7,
+      }; // ./pages/image.js
+      function ImagePage(props) {
+        return /*#__PURE__*/ (0, jsx_runtime.jsxs)(jsx_runtime.Fragment, {
+          children: [
+            /*#__PURE__*/ (0, jsx_runtime.jsx)("h1", {
+              children: "next/image example",
+            }),
+            /*#__PURE__*/ (0, jsx_runtime.jsx)(image_default(), {
+              src: nextjs,
+              placeholder: "blur",
+            }),
+          ],
+        });
+      }
+      var __N_SSP = true;
+      /* harmony default export */ const pages_image = ImagePage;
+
+      /***/
+    },
+
+    /***/ 3854: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -34,9 +217,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(5127);
-      const _imageblursvg = __webpack_require__(4287);
-      const _imageconfig = __webpack_require__(2795);
+      const _warnonce = __webpack_require__(3603);
+      const _imageblursvg = __webpack_require__(7835);
+      const _imageconfig = __webpack_require__(6799);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -463,55 +646,69 @@
       /***/
     },
 
-    /***/ 3444: /***/ (
+    /***/ 5526: /***/ (
       __unused_webpack_module,
-      __webpack_exports__,
+      exports,
       __webpack_require__
     ) => {
       "use strict";
-      // ESM COMPAT FLAG
-      __webpack_require__.r(__webpack_exports__);
 
-      // EXPORTS
-      __webpack_require__.d(__webpack_exports__, {
-        __N_SSP: () => /* binding */ __N_SSP,
-        default: () => /* binding */ pages_image,
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
       });
-
-      // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
-      var jsx_runtime = __webpack_require__(5640);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@[email protected][email protected][email protected]/node_modules/next/image.js
-      var next_image = __webpack_require__(6359);
-      var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png
-      /* harmony default export */ const nextjs = {
-        src: "/_next/static/media/nextjs.cae0b805.png",
-        height: 1347,
-        width: 1626,
-        blurDataURL:
-          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAHCAMAAAACh/xsAAAAD1BMVEX////x8fH6+vrb29vo6Oh8o70bAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAH0lEQVR4nGNgwARMjIyMjCAGCzMzMwsTRISJCcRABwAEcAAkLCQfgAAAAABJRU5ErkJggg==",
-        blurWidth: 8,
-        blurHeight: 7,
-      }; // ./pages/image.js
-      function ImagePage(props) {
-        return /*#__PURE__*/ (0, jsx_runtime.jsxs)(jsx_runtime.Fragment, {
-          children: [
-            /*#__PURE__*/ (0, jsx_runtime.jsx)("h1", {
-              children: "next/image example",
-            }),
-            /*#__PURE__*/ (0, jsx_runtime.jsx)(image_default(), {
-              src: nextjs,
-              placeholder: "blur",
-            }),
-          ],
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        default: function () {
+          return _default;
+        },
+        getImageProps: function () {
+          return getImageProps;
+        },
+      });
+      const _interop_require_default = __webpack_require__(1532);
+      const _getimgprops = __webpack_require__(3854);
+      const _imagecomponent = __webpack_require__(8350);
+      const _imageloader = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(1206)
+      );
+      function getImageProps(imgProps) {
+        const { props } = (0, _getimgprops.getImgProps)(imgProps, {
+          defaultLoader: _imageloader.default,
+          // This is replaced by webpack define plugin
+          imgConf: {
+            deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
+            imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
+            path: "/_next/image",
+            loader: "default",
+            dangerouslyAllowSVG: false,
+            unoptimized: false,
+          },
         });
+        // Normally we don't care about undefined props because we pass to JSX,
+        // but this exported function could be used by the end user for anything
+        // so we delete undefined props to clean it up a little.
+        for (const [key, value] of Object.entries(props)) {
+          if (value === undefined) {
+            delete props[key];
+          }
+        }
+        return {
+          props,
+        };
       }
-      var __N_SSP = true;
-      /* harmony default export */ const pages_image = ImagePage;
+      const _default = _imagecomponent.Image; //# sourceMappingURL=image-external.js.map
 
       /***/
     },
 
-    /***/ 4287: /***/ (__unused_webpack_module, exports) => {
+    /***/ 7835: /***/ (__unused_webpack_module, exports) => {
       "use strict";
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
@@ -566,85 +763,7 @@
       /***/
     },
 
-    /***/ 4985: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "useMergedRef", {
-        enumerable: true,
-        get: function () {
-          return useMergedRef;
-        },
-      });
-      const _react = __webpack_require__(148);
-      function useMergedRef(refA, refB) {
-        const cleanupA = (0, _react.useRef)(null);
-        const cleanupB = (0, _react.useRef)(null);
-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
-        // But this can cause us to leak a cleanup-ref into user code (e.g. via `<Link legacyBehavior>`),
-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
-        // (because it hasn't been updated for React 19)
-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
-        return (0, _react.useCallback)(
-          (current) => {
-            if (current === null) {
-              const cleanupFnA = cleanupA.current;
-              if (cleanupFnA) {
-                cleanupA.current = null;
-                cleanupFnA();
-              }
-              const cleanupFnB = cleanupB.current;
-              if (cleanupFnB) {
-                cleanupB.current = null;
-                cleanupFnB();
-              }
-            } else {
-              if (refA) {
-                cleanupA.current = applyRef(refA, current);
-              }
-              if (refB) {
-                cleanupB.current = applyRef(refB, current);
-              }
-            }
-          },
-          [refA, refB]
-        );
-      }
-      function applyRef(refA, current) {
-        if (typeof refA === "function") {
-          const cleanup = refA(current);
-          if (typeof cleanup === "function") {
-            return cleanup;
-          } else {
-            return () => refA(null);
-          }
-        } else {
-          refA.current = current;
-          return () => {
-            refA.current = null;
-          };
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-merged-ref.js.map
-
-      /***/
-    },
-
-    /***/ 5898: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8350: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -666,17 +785,17 @@
         __webpack_require__(7897)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(5207)
+        __webpack_require__(8843)
       );
-      const _getimgprops = __webpack_require__(2514);
-      const _imageconfig = __webpack_require__(2795);
-      const _imageconfigcontextsharedruntime = __webpack_require__(2349);
-      const _warnonce = __webpack_require__(5127);
-      const _routercontextsharedruntime = __webpack_require__(3556);
+      const _getimgprops = __webpack_require__(3854);
+      const _imageconfig = __webpack_require__(6799);
+      const _imageconfigcontextsharedruntime = __webpack_require__(3905);
+      const _warnonce = __webpack_require__(3603);
+      const _routercontextsharedruntime = __webpack_require__(6712);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(5970)
+        __webpack_require__(1206)
       );
-      const _usemergedref = __webpack_require__(4985);
+      const _usemergedref = __webpack_require__(1765);
       // This is replaced by webpack define plugin
       const configEnv = {
         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
@@ -1002,132 +1121,13 @@
 
       /***/
     },
-
-    /***/ 5970: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "default", {
-        enumerable: true,
-        get: function () {
-          return _default;
-        },
-      });
-      const DEFAULT_Q = 75;
-      function defaultLoader(param) {
-        let { config, src, width, quality } = param;
-        var _config_qualities;
-        if (false) {
-        }
-        const q =
-          quality ||
-          ((_config_qualities = config.qualities) == null
-            ? void 0
-            : _config_qualities.reduce((prev, cur) =>
-                Math.abs(cur - DEFAULT_Q) < Math.abs(prev - DEFAULT_Q)
-                  ? cur
-                  : prev
-              )) ||
-          DEFAULT_Q;
-        return (
-          config.path +
-          "?url=" +
-          encodeURIComponent(src) +
-          "&w=" +
-          width +
-          "&q=" +
-          q +
-          (src.startsWith("/_next/static/media/") && false ? 0 : "")
-        );
-      }
-      // We use this to determine if the import is the default loader
-      // or a custom loader defined by the user in next.config.js
-      defaultLoader.__next_img_default = true;
-      const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map
-
-      /***/
-    },
-
-    /***/ 6359: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(8986);
-
-      /***/
-    },
-
-    /***/ 8986: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      0 && 0;
-      function _export(target, all) {
-        for (var name in all)
-          Object.defineProperty(target, name, {
-            enumerable: true,
-            get: all[name],
-          });
-      }
-      _export(exports, {
-        default: function () {
-          return _default;
-        },
-        getImageProps: function () {
-          return getImageProps;
-        },
-      });
-      const _interop_require_default = __webpack_require__(1532);
-      const _getimgprops = __webpack_require__(2514);
-      const _imagecomponent = __webpack_require__(5898);
-      const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(5970)
-      );
-      function getImageProps(imgProps) {
-        const { props } = (0, _getimgprops.getImgProps)(imgProps, {
-          defaultLoader: _imageloader.default,
-          // This is replaced by webpack define plugin
-          imgConf: {
-            deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
-            imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
-            path: "/_next/image",
-            loader: "default",
-            dangerouslyAllowSVG: false,
-            unoptimized: false,
-          },
-        });
-        // Normally we don't care about undefined props because we pass to JSX,
-        // but this exported function could be used by the end user for anything
-        // so we delete undefined props to clean it up a little.
-        for (const [key, value] of Object.entries(props)) {
-          if (value === undefined) {
-            delete props[key];
-          }
-        }
-        return {
-          props,
-        };
-      }
-      const _default = _imagecomponent.Image; //# sourceMappingURL=image-external.js.map
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2198)
+      __webpack_exec__(264)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 9418: /***/ (
+    /***/ 8230: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/",
+        function () {
+          return __webpack_require__(8696);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 8696: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -19,30 +36,13 @@
 
       /***/
     },
-
-    /***/ 9532: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/",
-        function () {
-          return __webpack_require__(9418);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(9532)
+      __webpack_exec__(8230)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,125 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 1854: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(5640);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(8770);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_link__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      function aLink(props) {
-        return /*#__PURE__*/ (0,
-        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
-          children: [
-            /*#__PURE__*/ (0,
-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
-              children: "A Link page!",
-            }),
-            /*#__PURE__*/ (0,
-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-              next_link__WEBPACK_IMPORTED_MODULE_1___default(),
-              {
-                href: "/",
-                children: "Go to /",
-              }
-            ),
-          ],
-        });
-      }
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
-
-      /***/
-    },
-
-    /***/ 3199: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
-        },
-      });
-      let errorOnce = (_) => {};
-      if (false) {
-      } //# sourceMappingURL=error-once.js.map
-
-      /***/
-    },
-
-    /***/ 3568: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(1854);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 3857: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "getDomainLocale", {
-        enumerable: true,
-        get: function () {
-          return getDomainLocale;
-        },
-      });
-      const _normalizetrailingslash = __webpack_require__(4869);
-      const basePath =
-        /* unused pure expression or super */ null && (false || "");
-      function getDomainLocale(path, locale, locales, domainLocales) {
-        if (false) {
-        } else {
-          return false;
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=get-domain-locale.js.map
-
-      /***/
-    },
-
-    /***/ 3947: /***/ (module, exports, __webpack_require__) => {
+    /***/ 591: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -146,17 +28,17 @@
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(148)
       );
-      const _resolvehref = __webpack_require__(3161);
-      const _islocalurl = __webpack_require__(2309);
-      const _formaturl = __webpack_require__(3768);
-      const _utils = __webpack_require__(5554);
-      const _addlocale = __webpack_require__(7591);
-      const _routercontextsharedruntime = __webpack_require__(3556);
-      const _useintersection = __webpack_require__(5624);
-      const _getdomainlocale = __webpack_require__(3857);
-      const _addbasepath = __webpack_require__(4356);
-      const _usemergedref = __webpack_require__(4985);
-      const _erroronce = __webpack_require__(3199);
+      const _resolvehref = __webpack_require__(5837);
+      const _islocalurl = __webpack_require__(5953);
+      const _formaturl = __webpack_require__(6212);
+      const _utils = __webpack_require__(6950);
+      const _addlocale = __webpack_require__(6467);
+      const _routercontextsharedruntime = __webpack_require__(6712);
+      const _useintersection = __webpack_require__(9692);
+      const _getdomainlocale = __webpack_require__(6850);
+      const _addbasepath = __webpack_require__(4928);
+      const _usemergedref = __webpack_require__(1765);
+      const _erroronce = __webpack_require__(8659);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -545,7 +427,17 @@
       /***/
     },
 
-    /***/ 4985: /***/ (module, exports, __webpack_require__) => {
+    /***/ 1148: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(591);
+
+      /***/
+    },
+
+    /***/ 1765: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -623,7 +515,125 @@
       /***/
     },
 
-    /***/ 5624: /***/ (module, exports, __webpack_require__) => {
+    /***/ 5436: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
+      __webpack_require__
+    ) => {
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(5640);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(1148);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_link__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      function aLink(props) {
+        return /*#__PURE__*/ (0,
+        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
+          children: [
+            /*#__PURE__*/ (0,
+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
+              children: "A Link page!",
+            }),
+            /*#__PURE__*/ (0,
+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+              next_link__WEBPACK_IMPORTED_MODULE_1___default(),
+              {
+                href: "/",
+                children: "Go to /",
+              }
+            ),
+          ],
+        });
+      }
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
+
+      /***/
+    },
+
+    /***/ 6850: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "getDomainLocale", {
+        enumerable: true,
+        get: function () {
+          return getDomainLocale;
+        },
+      });
+      const _normalizetrailingslash = __webpack_require__(6457);
+      const basePath =
+        /* unused pure expression or super */ null && (false || "");
+      function getDomainLocale(path, locale, locales, domainLocales) {
+        if (false) {
+        } else {
+          return false;
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=get-domain-locale.js.map
+
+      /***/
+    },
+
+    /***/ 8659: /***/ (__unused_webpack_module, exports) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "errorOnce", {
+        enumerable: true,
+        get: function () {
+          return errorOnce;
+        },
+      });
+      let errorOnce = (_) => {};
+      if (false) {
+      } //# sourceMappingURL=error-once.js.map
+
+      /***/
+    },
+
+    /***/ 9666: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(5436);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 9692: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -636,7 +646,7 @@
         },
       });
       const _react = __webpack_require__(148);
-      const _requestidlecallback = __webpack_require__(3543);
+      const _requestidlecallback = __webpack_require__(315);
       const hasIntersectionObserver =
         typeof IntersectionObserver === "function";
       const observers = new Map();
@@ -748,23 +758,13 @@
 
       /***/
     },
-
-    /***/ 8770: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(3947);
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3568)
+      __webpack_exec__(9666)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 3618: /***/ (
+    /***/ 76: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -16,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(5640);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4631);
+        __webpack_require__(9413);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -36,17 +36,7 @@
       /***/
     },
 
-    /***/ 4631: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(7086);
-
-      /***/
-    },
-
-    /***/ 7824: /***/ (
+    /***/ 1810: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -54,7 +44,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(3618);
+          return __webpack_require__(76);
         },
       ]);
       if (false) {
@@ -62,13 +52,23 @@
 
       /***/
     },
+
+    /***/ 9413: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(5282);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(7824)
+      __webpack_exec__(1810)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,24 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 1984: /***/ (
-      __unused_webpack_module,
+    /***/ 2227: /***/ (
+      module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(5769);
-        },
-      ]);
-      if (false) {
-      }
+      module.exports = __webpack_require__(5984);
 
       /***/
     },
 
-    /***/ 5769: /***/ (
+    /***/ 3043: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -33,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(5640);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(8293);
+        __webpack_require__(2227);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -66,12 +59,19 @@
       /***/
     },
 
-    /***/ 8293: /***/ (
-      module,
+    /***/ 3642: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(900);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(3043);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
@@ -81,7 +81,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1984)
+      __webpack_exec__(3642)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 4631: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(7086);
-
-      /***/
-    },
-
-    /***/ 9216: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(9803);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 9803: /***/ (
+    /***/ 1089: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(5640);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4631);
+        __webpack_require__(9413);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -61,13 +34,40 @@
 
       /***/
     },
+
+    /***/ 3962: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(1089);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 9413: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(5282);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(9216)
+      __webpack_exec__(3962)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 1733-HASH.js

Diff too large to display

Diff for 4719-HASH.js

Diff too large to display

Diff for main-HASH.js

Diff too large to display

Diff for main-app-HASH.js
@@ -1,64 +1,64 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4977],
   {
-    /***/ 2880: /***/ (
+    /***/ 3579: /***/ () => {
+      /* (ignored) */
+      /***/
+    },
+
+    /***/ 7400: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 8790, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5356, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7382, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4304, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9442, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3152, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 94, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9464, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 693, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1675, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2439, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7601, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 5083, 23)
+        __webpack_require__.t.bind(__webpack_require__, 2553, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 8103, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1925, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 5625, 23)
+        __webpack_require__.t.bind(__webpack_require__, 959, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4247, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9389, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 5602, 23)
+        __webpack_require__.t.bind(__webpack_require__, 8628, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 227, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3077, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6734, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7812, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4120, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5774, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 6104)
+        __webpack_require__.bind(__webpack_require__, 750)
       );
 
       /***/
     },
-
-    /***/ 3505: /***/ () => {
-      /* (ignored) */
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
@@ -66,8 +66,8 @@
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(
       0,
-      [1305, 1733],
-      () => (__webpack_exec__(9679), __webpack_exec__(2880))
+      [9910, 965],
+      () => (__webpack_exec__(1389), __webpack_exec__(7400))
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for app-page-exp..ntime.dev.js

Diff too large to display

Diff for app-page-exp..time.prod.js

Diff too large to display

Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page-tur..ntime.dev.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js

Diff too large to display

Diff for app-page.runtime.prod.js

Diff too large to display

Diff for server.runtime.prod.js

Diff too large to display

Commit: 00c9453

@eps1lon
Copy link
Member

eps1lon commented Apr 28, 2025

Blocked on facebook/react#33046

@eps1lon eps1lon closed this Apr 28, 2025
@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 13, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants