Skip to content

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

Closed
vercel-release-bot wants to merge 6 commits into
canaryfrom
update/react/19.2.0-canary-c498bfce-20250426
Closed

Upgrade React from 197d6a04-20250424 to c498bfce-20250426#78632
vercel-release-bot wants to merge 6 commits into
canaryfrom
update/react/19.2.0-canary-c498bfce-20250426

Conversation

@ijjk
Copy link
Copy Markdown
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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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/node-fetch@2.6.7_encoding@0.1.13/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
Copy Markdown
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/react@19.1.0/node_modules/react/jsx-runtime.js
+      var jsx_runtime = __webpack_require__(5640);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.1.0_react@19.1.0__react@19.1.0/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/react@19.1.0/node_modules/react/jsx-runtime.js
-      var jsx_runtime = __webpack_require__(5640);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.1.0_react@19.1.0__react@19.1.0/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
Copy Markdown
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
@aurorascharff aurorascharff deleted the update/react/19.2.0-canary-c498bfce-20250426 branch May 21, 2026 21:32
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