Skip to content

perf(turbopack): Make FileSystemPath not Vc<T> #78647

New issue

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

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

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: canary
Choose a base branch
from

Conversation

kdy1
Copy link
Member

@kdy1 kdy1 commented Apr 28, 2025

What?

Make FileSystemPath usable without Vc<T>.

Why?

String concattation does not require caching.

How?

@ijjk ijjk added the created-by: Turbopack team PRs by the Turbopack team. label Apr 28, 2025
@kdy1 kdy1 changed the title Make FileSystemPath not Vc<T> perf(turbopack): Make FileSystemPath not Vc<T> Apr 28, 2025
Copy link
Member Author

kdy1 commented Apr 28, 2025

This stack of pull requests is managed by Graphite. Learn more about stacking.

@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch from 27d18e4 to 27bfbdf Compare April 29, 2025 15:48
@kdy1 kdy1 force-pushed the kdy1/memopt-intern branch from 96cc4b2 to 143f80b Compare April 29, 2025 15:48
@ijjk ijjk added Font (next/font) Related to Next.js Font Optimization. Turbopack Related to Turbopack with Next.js. labels Apr 29, 2025
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch from 27bfbdf to 00554d4 Compare April 29, 2025 16:36
@kdy1 kdy1 changed the base branch from kdy1/memopt-intern to graphite-base/78647 April 29, 2025 16:38
@kdy1 kdy1 force-pushed the graphite-base/78647 branch from 415116d to cae9544 Compare April 29, 2025 16:38
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch from 00554d4 to a48c1ac Compare April 29, 2025 16:38
@kdy1 kdy1 changed the base branch from graphite-base/78647 to kdy1/memopt-global-serde April 29, 2025 16:39
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch from a48c1ac to 34f2359 Compare April 29, 2025 17:00
@kdy1 kdy1 force-pushed the kdy1/memopt-global-serde branch from cae9544 to 5a09642 Compare April 29, 2025 17:00
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch from 34f2359 to df82c8f Compare April 29, 2025 17:18
@kdy1 kdy1 force-pushed the kdy1/memopt-global-serde branch from 5a09642 to 774d5ce Compare April 29, 2025 17:18
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch from df82c8f to e0575f1 Compare April 29, 2025 17:30
@kdy1 kdy1 force-pushed the kdy1/memopt-global-serde branch 2 times, most recently from dcfc1fb to e846a1c Compare April 30, 2025 16:50
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch 2 times, most recently from ffb2466 to 3fae782 Compare April 30, 2025 16:54
@kdy1 kdy1 force-pushed the kdy1/memopt-global-serde branch 2 times, most recently from 09b0c2e to 1ed3319 Compare April 30, 2025 22:13
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch from 3fae782 to be2fadb Compare April 30, 2025 22:13
@kdy1 kdy1 changed the base branch from kdy1/memopt-global-serde to graphite-base/78647 May 1, 2025 18:47
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch from be2fadb to bd6c62f Compare May 1, 2025 18:47
@kdy1 kdy1 force-pushed the graphite-base/78647 branch from 1ed3319 to 6665d5e Compare May 1, 2025 18:47
@kdy1 kdy1 changed the base branch from graphite-base/78647 to canary May 1, 2025 18:47
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch 3 times, most recently from b531ed3 to 039d715 Compare May 5, 2025 19:16
@ijjk
Copy link
Member

ijjk commented May 5, 2025

Failing test suites

Commit: de5897d

pnpm test-dev-turbo test/development/app-dir/dynamic-error-trace/index.test.ts (turbopack)

  • app dir - dynamic error trace > should show the error trace
Expand output

● app dir - dynamic error trace › should show the error trace

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `app dir - dynamic error trace should show the error trace 1`

- Snapshot  - 2
+ Received  + 2

  {
    "description": "Route / with `dynamic = "error"` couldn't be rendered statically because it used `headers`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering",
    "environmentLabel": "Server",
    "label": "Runtime Error",
-   "source": "app/lib.js (4:13) @ Foo
+   "source": "turbopack:/app/lib.js (4:13) @ Foo
  > 4 |   useHeaders()
      |             ^",
    "stack": [
-     "Foo app/lib.js (4:13)",
+     "Foo turbopack:/app/lib.js (4:13)",
    ],
  }

  12 |
  13 |     // TODO(veil): Where is the stackframe for app/page.js?
> 14 |     await expect(browser).toDisplayRedbox(`
     |                           ^
  15 |      {
  16 |        "description": "Route / with \`dynamic = "error"\` couldn't be rendered statically because it used \`headers\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering",
  17 |        "environmentLabel": "Server",

  at Object.toDisplayRedbox (development/app-dir/dynamic-error-trace/index.test.ts:14:27)

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

pnpm test-dev-turbo test/development/app-dir/use-cache-errors/use-cache-errors.test.ts (turbopack)

  • use-cache-errors > should show a runtime error when calling the incorrectly used cache function
Expand output

● use-cache-errors › should show a runtime error when calling the incorrectly used cache function

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `use-cache-errors should show a runtime error when calling the incorrectly used cache function 1`

- Snapshot  - 6
+ Received  + 5

  {
    "description": "Attempted to call useStuff() from the server but useStuff is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.",
    "environmentLabel": "Cache",
    "label": "Runtime Error",
-   "source": "app/page.tsx (22:10) @ Page
- > 22 |   return <OtherClientComponent getCachedStuff={useCachedStuff} />
-      |          ^",
+   "source": "turbopack:/app/client-module.ts/proxy.mjs (3:24) @ <anonymous>
+ > 3 |     function() { throw new Error("Attempted to call useStuff() from the server but useStuff is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); },
+     |                        ^",
    "stack": [
-     "<FIXME-file-protocol>",
-     "<FIXME-file-protocol>",
-     "Page app/page.tsx (22:10)",
+     "<anonymous> turbopack:/app/client-module.ts/proxy.mjs (3:24)",
+     "useCachedStuff turbopack:/app/module-with-use-cache.ts (16:18)",
    ],
  }

  22 |     if (isTurbopack) {
  23 |       // TODO(veil): The wrong stack frame is used for the source snippet.
> 24 |       await expect(browser).toDisplayRedbox(`
     |                             ^
  25 |        {
  26 |          "description": "Attempted to call useStuff() from the server but useStuff is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.",
  27 |          "environmentLabel": "Cache",

  at Object.toDisplayRedbox (development/app-dir/use-cache-errors/use-cache-errors.test.ts:24:29)

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

pnpm test-dev-turbo test/development/app-dir/error-overlay/error-ignored-frames/error-ignored-frames.test.ts (turbopack)

  • error-ignored-frames > should be able to collapse ignored frames in server component
  • error-ignored-frames > should be able to collapse ignored frames in client component
  • error-ignored-frames > should be able to collapse ignored frames in interleaved call stack
  • error-ignored-frames > should be able to collapse pages router ignored frames
Expand output

● error-ignored-frames › should be able to collapse ignored frames in server component

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `error-ignored-frames should be able to collapse ignored frames in server component 1`

Snapshot: "at Page (app/page.tsx (2:9))"
Received: "at Page (turbopack:/app/page.tsx (2:9))"

  16 |
  17 |     const defaultStack = await getStackFramesContent(browser)
> 18 |     expect(defaultStack).toMatchInlineSnapshot(`"at Page (app/page.tsx (2:9))"`)
     |                          ^
  19 |
  20 |     await toggleCollapseCallStackFrames(browser)
  21 |

  at Object.toMatchInlineSnapshot (development/app-dir/error-overlay/error-ignored-frames/error-ignored-frames.test.ts:18:26)

● error-ignored-frames › should be able to collapse ignored frames in client component

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `error-ignored-frames should be able to collapse ignored frames in client component 1`

Snapshot: "at Page (app/client/page.tsx (4:9))"
Received: ""

  33 |
  34 |     const defaultStack = await getStackFramesContent(browser)
> 35 |     expect(defaultStack).toMatchInlineSnapshot(
     |                          ^
  36 |       `"at Page (app/client/page.tsx (4:9))"`
  37 |     )
  38 |

  at Object.toMatchInlineSnapshot (development/app-dir/error-overlay/error-ignored-frames/error-ignored-frames.test.ts:35:26)

● error-ignored-frames › should be able to collapse ignored frames in interleaved call stack

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `error-ignored-frames should be able to collapse ignored frames in interleaved call stack 1`

- Snapshot  - 2
+ Received  + 0

- at <unknown> (app/interleaved/page.tsx (7:11))
- at Page (app/interleaved/page.tsx (6:35))

  53 |     const defaultStack = await getStackFramesContent(browser)
  54 |     if (isTurbopack) {
> 55 |       expect(defaultStack).toMatchInlineSnapshot(`
     |                            ^
  56 |        "at <unknown> (app/interleaved/page.tsx (7:11))
  57 |        at Page (app/interleaved/page.tsx (6:35))"
  58 |       `)

  at Object.toMatchInlineSnapshot (development/app-dir/error-overlay/error-ignored-frames/error-ignored-frames.test.ts:55:28)

● error-ignored-frames › should be able to collapse pages router ignored frames

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `error-ignored-frames should be able to collapse pages router ignored frames 1`

Snapshot: "at Page (pages/pages.tsx (2:9))"
Received: "at Page (turbopack:/pages/pages.tsx (2:9))"

  79 |
  80 |     const defaultStack = await getStackFramesContent(browser)
> 81 |     expect(defaultStack).toMatchInlineSnapshot(
     |                          ^
  82 |       `"at Page (pages/pages.tsx (2:9))"`
  83 |     )
  84 |

  at Object.toMatchInlineSnapshot (development/app-dir/error-overlay/error-ignored-frames/error-ignored-frames.test.ts:81:26)

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

pnpm test-dev-turbo test/development/acceptance-app/rsc-runtime-errors.test.ts (turbopack)

  • Error overlay - RSC runtime errors > should show runtime errors if invalid client API from node_modules is executed
  • Error overlay - RSC runtime errors > should show runtime errors if invalid server API from node_modules is executed
  • Error overlay - RSC runtime errors > should show source code for jsx errors from server component
Expand output

● Error overlay - RSC runtime errors › should show runtime errors if invalid client API from node_modules is executed

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Error overlay - RSC runtime errors should show runtime errors if invalid client API from node_modules is executed 1`

- Snapshot  - 2
+ Received  + 2

  {
    "description": "useState only works in Client Components. Add the "use client" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/react-client-hook-in-server-component",
    "environmentLabel": "Server",
    "label": "Runtime TypeError",
-   "source": "app/server/page.js (3:16) @ Page
+   "source": "turbopack:/app/server/page.js (3:16) @ Page
  > 3 |   callClientApi()
      |                ^",
    "stack": [
-     "Page app/server/page.js (3:16)",
+     "Page turbopack:/app/server/page.js (3:16)",
    ],
  }

  22 |     const browser = await next.browser('/server')
  23 |
> 24 |     await expect(browser).toDisplayRedbox(`
     |                           ^
  25 |      {
  26 |        "description": "useState only works in Client Components. Add the "use client" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/react-client-hook-in-server-component",
  27 |        "environmentLabel": "Server",

  at Object.toDisplayRedbox (development/acceptance-app/rsc-runtime-errors.test.ts:24:27)

● Error overlay - RSC runtime errors › should show runtime errors if invalid server API from node_modules is executed

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Error overlay - RSC runtime errors should show runtime errors if invalid server API from node_modules is executed 1`

- Snapshot  - 6
+ Received  + 2

  {
    "description": "`cookies` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context",
    "environmentLabel": null,
    "label": "Runtime Error",
-   "source": "app/client/page.js (4:15) @ Page
- > 4 |   callServerApi()
-     |               ^",
-   "stack": [
-     "Page app/client/page.js (4:15)",
-   ],
+   "source": null,
+   "stack": [],
  }

  54 |     // TODO(veil): Inconsistent cursor position
  55 |     if (isTurbopack) {
> 56 |       await expect(browser).toDisplayRedbox(`
     |                             ^
  57 |        {
  58 |          "description": "\`cookies\` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context",
  59 |          "environmentLabel": null,

  at Object.toDisplayRedbox (development/acceptance-app/rsc-runtime-errors.test.ts:56:29)

● Error overlay - RSC runtime errors › should show source code for jsx errors from server component

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Error overlay - RSC runtime errors should show source code for jsx errors from server component 1`

- Snapshot  - 2
+ Received  + 2

  {
    "description": "alert is not defined",
    "environmentLabel": "Server",
    "label": "Runtime ReferenceError",
-   "source": "app/server/page.js (2:16) @ Page
+   "source": "turbopack:/app/server/page.js (2:16) @ Page
  > 2 |   return <div>{alert('warn')}</div>
      |                ^",
    "stack": [
-     "Page app/server/page.js (2:16)",
+     "Page turbopack:/app/server/page.js (2:16)",
    ],
  }

   96 |     const browser = await next.browser('/server')
   97 |
>  98 |     await expect(browser).toDisplayRedbox(`
      |                           ^
   99 |      {
  100 |        "description": "alert is not defined",
  101 |        "environmentLabel": "Server",

  at Object.toDisplayRedbox (development/acceptance-app/rsc-runtime-errors.test.ts:98:27)

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

pnpm test test/integration/api-catch-all/test/index.test.js (turbopack)

  • API routes > dev support > should return data when catch-all
  • API routes > production mode > should return data when catch-all
Expand output

● API routes › dev support › should return data when catch-all

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

- Expected  - 5
+ Received  + 1

- Object {
-   "slug": Array [
-     "1",
-   ],
- }
+ Object {}

  20 |     )
  21 |
> 22 |     expect(data).toEqual({ slug: ['1'] })
     |                  ^
  23 |   })
  24 |
  25 |   it('should return redirect when catch-all with index and trailing slash', async () => {

  at Object.toEqual (integration/api-catch-all/test/index.test.js:22:18)

● API routes › production mode › should return data when catch-all

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

- Expected  - 5
+ Received  + 1

- Object {
-   "slug": Array [
-     "1",
-   ],
- }
+ Object {}

  20 |     )
  21 |
> 22 |     expect(data).toEqual({ slug: ['1'] })
     |                  ^
  23 |   })
  24 |
  25 |   it('should return redirect when catch-all with index and trailing slash', async () => {

  at Object.toEqual (integration/api-catch-all/test/index.test.js:22:18)

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

pnpm test-dev-turbo test/development/app-dir/experimental-lightningcss/experimental-lightningcss.test.ts (turbopack)

  • experimental-lightningcss with default mode > in dev server > should support css modules
Expand output

● experimental-lightningcss with default mode › in dev server › should support css modules

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

Expected: "search-keyword style-module__hlQ3RG__blue"
Received: "search-keyword style-module__Qo74fG__blue"

  19 |       if (isTurbopack) {
  20 |         // swc_css does not include `-module` in the class name, while lightningcss does.
> 21 |         expect($('p').attr('class')).toBe(
     |                                      ^
  22 |           'search-keyword style-module__hlQ3RG__blue'
  23 |         )
  24 |       } else {

  at Object.toBe (development/app-dir/experimental-lightningcss/experimental-lightningcss.test.ts:21:38)

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

pnpm test test/integration/app-dir-export/test/config.test.ts (turbopack)

  • app dir - with output export (next dev / next build) > production mode > should error when running next export
  • app dir - with output export (next dev / next build) > production mode > should correctly emit exported assets to config.distDir
Expand output

● app dir - with output export (next dev / next build) › production mode › should error when running next export

command failed with code 1 signal null
 ⚠ Linting is disabled.
   No config file found
   No config file found
   ▲ Next.js 15.4.0-canary.45 (Turbopack)

   Creating an optimized production build ...
   No config file found
   No config file found
 ✓ Starting to write all entrypoints to disk...
 ✓ Finished writing all entrypoints to disk in 39.045085ms
 ✓ Compiled successfully in 3.2s
   Checking validity of types ...
   Collecting page data ...
   Generating static pages (0/13) ...
Error occurred prerendering page "/image-import". Read more: https://nextjs.org/docs/messages/prerender-error
[Error: An error occurred in the Server Components render. The specific message is omitted in production builds to avoid leaking sensitive details. A digest property is included on this error instance which may provide additional details about the nature of the error.] {
  digest: '3829030093'
}
Export encountered an error on /image-import/page: /image-import, exiting the build.
 ⨯ Next.js build worker exited with code: 1 and signal: null

  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)

● app dir - with output export (next dev / next build) › production mode › should correctly emit exported assets to config.distDir

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/app-dir-export/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/app-dir-export/next.config.js
   ▲ Next.js 15.4.0-canary.45 (Turbopack)

   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/app-dir-export/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/app-dir-export/next.config.js
 ✓ Starting to write all entrypoints to disk...
 ✓ Finished writing all entrypoints to disk in 36.553733ms
 ✓ Compiled successfully in 3.0s
   Checking validity of types ...
   Collecting page data ...
   Generating static pages (0/13) ...
Error occurred prerendering page "/client". Read more: https://nextjs.org/docs/messages/prerender-error
[Error: An error occurred in the Server Components render. The specific message is omitted in production builds to avoid leaking sensitive details. A digest property is included on this error instance which may provide additional details about the nature of the error.] {
  digest: '3295559213'
}
Export encountered an error on /client/page: /client, exiting the build.
 ⨯ Next.js build worker exited with code: 1 and signal: null

  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/dynamic-optional-routing/test/index.test.js (turbopack)

  • Dynamic Optional Routing > production mode > should match catch-all api route with multiple segments
  • Dynamic Optional Routing > production mode > should match catch-all api route with single segment
Expand output

● Dynamic Optional Routing › production mode › should match catch-all api route with multiple segments

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

- Expected  - 6
+ Received  + 1

- Object {
-   "slug": Array [
-     "ab",
-     "cd",
-   ],
- }
+ Object {}

  68 |     const res = await fetchViaHTTP(appPort, '/api/post/ab/cd')
  69 |     expect(res.status).toBe(200)
> 70 |     expect(await res.json()).toEqual({ slug: ['ab', 'cd'] })
     |                              ^
  71 |   })
  72 |
  73 |   it('should match catch-all api route with single segment', async () => {

  at Object.toEqual (integration/dynamic-optional-routing/test/index.test.js:70:30)

● Dynamic Optional Routing › production mode › should match catch-all api route with single segment

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

- Expected  - 5
+ Received  + 1

- Object {
-   "slug": Array [
-     "a",
-   ],
- }
+ Object {}

  74 |     const res = await fetchViaHTTP(appPort, '/api/post/a')
  75 |     expect(res.status).toBe(200)
> 76 |     expect(await res.json()).toEqual({ slug: ['a'] })
     |                              ^
  77 |   })
  78 |
  79 |   it('should match catch-all api route with no segments', async () => {

  at Object.toEqual (integration/dynamic-optional-routing/test/index.test.js:76:30)

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

pnpm test test/integration/development-runtime-config/test/index.test.js (turbopack)

  • should work with runtime-config in next.config.js > empty runtime-config
  • should work with runtime-config in next.config.js > with runtime-config
Expand output

● should work with runtime-config in next.config.js › empty runtime-config

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  35 |     /Cannot read property 'serverRuntimeConfig' of undefined/i
  36 |   )
> 37 |   expect(JSON.parse($('#server-runtime-config').text())).toEqual(
     |               ^
  38 |     config.serverRuntimeConfig || {}
  39 |   )
  40 |   expect(JSON.parse($('#public-runtime-config').text())).toEqual(

  at parse (integration/development-runtime-config/test/index.test.js:37:15)
  at Object.<anonymous> (integration/development-runtime-config/test/index.test.js:55:5)

● should work with runtime-config in next.config.js › with runtime-config

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  35 |     /Cannot read property 'serverRuntimeConfig' of undefined/i
  36 |   )
> 37 |   expect(JSON.parse($('#server-runtime-config').text())).toEqual(
     |               ^
  38 |     config.serverRuntimeConfig || {}
  39 |   )
  40 |   expect(JSON.parse($('#public-runtime-config').text())).toEqual(

  at parse (integration/development-runtime-config/test/index.test.js:37:15)
  at Object.<anonymous> (integration/development-runtime-config/test/index.test.js:75:5)

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

pnpm test test/integration/next-image-legacy/unoptimized/test/index.test.ts (turbopack)

  • Unoptimized Image Tests > production mode > should not optimize any image
Expand output

● Unoptimized Image Tests › production mode › should not optimize any image

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/unoptimized/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/unoptimized/next.config.js
   ▲ Next.js 15.4.0-canary.45 (Turbopack)

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/unoptimized/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/unoptimized/next.config.js
 ✓ Starting to write all entrypoints to disk...
 ✓ Finished writing all entrypoints to disk in 4.066172ms
 ✓ Compiled successfully in 1685ms
   Collecting page data ...
   Generating static pages (0/3) ...
TypeError: (intermediate value)(intermediate value).startsWith is not a function

  at j (../../../test/integration/next-image-legacy/unoptimized/.next/server/chunks/ssr/_2d552373._.js:1:10237)
  Error occurred prerendering page "/". Read more: https://nextjs.org/docs/messages/prerender-error
  TypeError: (intermediate value)(intermediate value).startsWith is not a function
  at j (../../../test/integration/next-image-legacy/unoptimized/.next/server/chunks/ssr/_2d552373._.js:1:10237)
  Export encountered an error on /, exiting the build.
   ⨯ Next.js build worker exited with code: 1 and signal: null
  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

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

pnpm test-start-turbo test/e2e/app-dir/app-basepath/index.test.ts (turbopack)

  • app dir - basepath > should successfully hard navigate from pages -> app
  • app dir - basepath > should support basePath
  • app dir - basepath > should support Link with basePath prefixed
  • app dir - basepath > should prefix segment metadata og image with basePath and pathname
  • app dir - basepath > should prefix manifest with basePath
  • app dir - basepath > should prefix redirect() with basePath
  • app dir - basepath > should render usePathname without the basePath
  • app dir - basepath > should handle redirect in dynamic in suspense boundary routes with basePath
  • app dir - basepath > should only make a single RSC call to the current page (/base/refresh)
  • app dir - basepath > should only make a single RSC call to the current page (/base/refresh?foo=bar)
  • app dir - basepath > should properly stream an internal server action redirect() with a relative URL
  • app dir - basepath > should properly stream an internal server action redirect() with a absolute URL
  • app dir - basepath > should redirect externally when encountering absolute URLs on the same host outside the basePath
Expand output

● app dir - basepath › should successfully hard navigate from pages -> app

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should support basePath

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should support Link with basePath prefixed

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should prefix segment metadata og image with basePath and pathname

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should prefix manifest with basePath

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should prefix redirect() with basePath

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should render usePathname without the basePath

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should handle redirect in dynamic in suspense boundary routes with basePath

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should only make a single RSC call to the current page (/base/refresh)

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should only make a single RSC call to the current page (/base/refresh?foo=bar)

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should properly stream an internal server action redirect() with a relative URL

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should properly stream an internal server action redirect() with a absolute URL

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● app dir - basepath › should redirect externally when encountering absolute URLs on the same host outside the basePath

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

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

pnpm test-start-turbo test/e2e/app-dir/custom-cache-control/custom-cache-control.test.ts (turbopack)

  • custom-cache-control > should have default cache-control for pages-ssg another
Expand output

● custom-cache-control › should have default cache-control for pages-ssg another

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

Expected: "s-maxage=120, stale-while-revalidate=31535880"
Received: "private, no-cache, no-store, max-age=0, must-revalidate"

  69 |   it('should have default cache-control for pages-ssg another', async () => {
  70 |     const res = await next.fetch('/pages-ssg/another')
> 71 |     expect(res.headers.get('cache-control')).toBe(
     |                                              ^
  72 |       isNextDev
  73 |         ? 'no-store, must-revalidate'
  74 |         : 's-maxage=120, stale-while-revalidate=31535880'

  at Object.toBe (e2e/app-dir/custom-cache-control/custom-cache-control.test.ts:71:46)

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

pnpm test-start-turbo test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts (turbopack)

  • dynamic-io > should partially prerender pages that use async cookies
  • dynamic-io > should partially prerender pages that use sync cookies
  • dynamic-io > should be able to pass cookies as a promise to another component and trigger an intermediate Suspense boundary
  • dynamic-io > should be able to access cookie properties asynchronously
  • dynamic-io > should be able to access cookie properties synchronously
Expand output

● dynamic-io › should partially prerender pages that use async cookies

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should partially prerender pages that use sync cookies

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should be able to pass cookies as a promise to another component and trigger an intermediate Suspense boundary

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should be able to access cookie properties asynchronously

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should be able to access cookie properties synchronously

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

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

pnpm test-start-turbo test/e2e/app-dir/front-redirect-issue/front-redirect-issue.test.ts (turbopack)

  • app dir - front redirect issue > should redirect
Expand output

● app dir - front redirect issue › should redirect

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

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

pnpm test test/integration/next-image-legacy/base-path/test/static.test.ts (turbopack)

  • Static Image Component Tests for basePath > production mode > Should allow an image with a static src to omit height and width
  • Static Image Component Tests for basePath > production mode > Should use immutable cache-control header for static import
  • Static Image Component Tests for basePath > production mode > Should use immutable cache-control header even when unoptimized
  • Static Image Component Tests for basePath > production mode > Should automatically provide an image height and width
  • Static Image Component Tests for basePath > production mode > Should allow provided width and height to override intrinsic
  • Static Image Component Tests for basePath > production mode > Should add a blur placeholder to statically imported jpg
  • Static Image Component Tests for basePath > production mode > Should add a blur placeholder to statically imported png
Expand output

● Static Image Component Tests for basePath › production mode › Should allow an image with a static src to omit height and width

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   ▲ Next.js 15.4.0-canary.45 (Turbopack)

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
 ✓ Starting to write all entrypoints to disk...
 ✓ Finished writing all entrypoints to disk in 39.142224ms
Turbopack build encountered 1 warnings:
./test/integration/next-image-legacy/base-path/public/test.avif
AVIF image not supported
This version of Turbopack does not support AVIF images, will emit without optimization or encoding


 ✓ Compiled successfully in 1716ms
   Collecting page data ...
   Generating static pages (0/17) ...
TypeError: (intermediate value)(intermediate value).startsWith is not a function

  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Error occurred prerendering page "/static-img". Read more: https://nextjs.org/docs/messages/prerender-error
  TypeError: (intermediate value)(intermediate value).startsWith is not a function
  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Export encountered an error on /static-img, exiting the build.
   ⨯ Next.js build worker exited with code: 1 and signal: null
  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Static Image Component Tests for basePath › production mode › Should use immutable cache-control header for static import

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   ▲ Next.js 15.4.0-canary.45 (Turbopack)

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
 ✓ Starting to write all entrypoints to disk...
 ✓ Finished writing all entrypoints to disk in 39.142224ms
Turbopack build encountered 1 warnings:
./test/integration/next-image-legacy/base-path/public/test.avif
AVIF image not supported
This version of Turbopack does not support AVIF images, will emit without optimization or encoding


 ✓ Compiled successfully in 1716ms
   Collecting page data ...
   Generating static pages (0/17) ...
TypeError: (intermediate value)(intermediate value).startsWith is not a function

  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Error occurred prerendering page "/static-img". Read more: https://nextjs.org/docs/messages/prerender-error
  TypeError: (intermediate value)(intermediate value).startsWith is not a function
  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Export encountered an error on /static-img, exiting the build.
   ⨯ Next.js build worker exited with code: 1 and signal: null
  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Static Image Component Tests for basePath › production mode › Should use immutable cache-control header even when unoptimized

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   ▲ Next.js 15.4.0-canary.45 (Turbopack)

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
 ✓ Starting to write all entrypoints to disk...
 ✓ Finished writing all entrypoints to disk in 39.142224ms
Turbopack build encountered 1 warnings:
./test/integration/next-image-legacy/base-path/public/test.avif
AVIF image not supported
This version of Turbopack does not support AVIF images, will emit without optimization or encoding


 ✓ Compiled successfully in 1716ms
   Collecting page data ...
   Generating static pages (0/17) ...
TypeError: (intermediate value)(intermediate value).startsWith is not a function

  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Error occurred prerendering page "/static-img". Read more: https://nextjs.org/docs/messages/prerender-error
  TypeError: (intermediate value)(intermediate value).startsWith is not a function
  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Export encountered an error on /static-img, exiting the build.
   ⨯ Next.js build worker exited with code: 1 and signal: null
  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Static Image Component Tests for basePath › production mode › Should automatically provide an image height and width

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   ▲ Next.js 15.4.0-canary.45 (Turbopack)

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
 ✓ Starting to write all entrypoints to disk...
 ✓ Finished writing all entrypoints to disk in 39.142224ms
Turbopack build encountered 1 warnings:
./test/integration/next-image-legacy/base-path/public/test.avif
AVIF image not supported
This version of Turbopack does not support AVIF images, will emit without optimization or encoding


 ✓ Compiled successfully in 1716ms
   Collecting page data ...
   Generating static pages (0/17) ...
TypeError: (intermediate value)(intermediate value).startsWith is not a function

  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Error occurred prerendering page "/static-img". Read more: https://nextjs.org/docs/messages/prerender-error
  TypeError: (intermediate value)(intermediate value).startsWith is not a function
  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Export encountered an error on /static-img, exiting the build.
   ⨯ Next.js build worker exited with code: 1 and signal: null
  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Static Image Component Tests for basePath › production mode › Should allow provided width and height to override intrinsic

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   ▲ Next.js 15.4.0-canary.45 (Turbopack)

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
 ✓ Starting to write all entrypoints to disk...
 ✓ Finished writing all entrypoints to disk in 39.142224ms
Turbopack build encountered 1 warnings:
./test/integration/next-image-legacy/base-path/public/test.avif
AVIF image not supported
This version of Turbopack does not support AVIF images, will emit without optimization or encoding


 ✓ Compiled successfully in 1716ms
   Collecting page data ...
   Generating static pages (0/17) ...
TypeError: (intermediate value)(intermediate value).startsWith is not a function

  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Error occurred prerendering page "/static-img". Read more: https://nextjs.org/docs/messages/prerender-error
  TypeError: (intermediate value)(intermediate value).startsWith is not a function
  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Export encountered an error on /static-img, exiting the build.
   ⨯ Next.js build worker exited with code: 1 and signal: null
  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Static Image Component Tests for basePath › production mode › Should add a blur placeholder to statically imported jpg

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   ▲ Next.js 15.4.0-canary.45 (Turbopack)

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
 ✓ Starting to write all entrypoints to disk...
 ✓ Finished writing all entrypoints to disk in 39.142224ms
Turbopack build encountered 1 warnings:
./test/integration/next-image-legacy/base-path/public/test.avif
AVIF image not supported
This version of Turbopack does not support AVIF images, will emit without optimization or encoding


 ✓ Compiled successfully in 1716ms
   Collecting page data ...
   Generating static pages (0/17) ...
TypeError: (intermediate value)(intermediate value).startsWith is not a function

  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Error occurred prerendering page "/static-img". Read more: https://nextjs.org/docs/messages/prerender-error
  TypeError: (intermediate value)(intermediate value).startsWith is not a function
  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Export encountered an error on /static-img, exiting the build.
   ⨯ Next.js build worker exited with code: 1 and signal: null
  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

● Static Image Component Tests for basePath › production mode › Should add a blur placeholder to statically imported png

command failed with code 1 signal null
 ⚠ Linting is disabled.
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   ▲ Next.js 15.4.0-canary.45 (Turbopack)

   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/next-image-legacy/base-path/next.config.js
 ✓ Starting to write all entrypoints to disk...
 ✓ Finished writing all entrypoints to disk in 39.142224ms
Turbopack build encountered 1 warnings:
./test/integration/next-image-legacy/base-path/public/test.avif
AVIF image not supported
This version of Turbopack does not support AVIF images, will emit without optimization or encoding


 ✓ Compiled successfully in 1716ms
   Collecting page data ...
   Generating static pages (0/17) ...
TypeError: (intermediate value)(intermediate value).startsWith is not a function

  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Error occurred prerendering page "/static-img". Read more: https://nextjs.org/docs/messages/prerender-error
  TypeError: (intermediate value)(intermediate value).startsWith is not a function
  at j (../../../test/integration/next-image-legacy/base-path/.next/server/chunks/ssr/_c61a2481._.js:1:10243)
  Export encountered an error on /static-img, exiting the build.
   ⨯ Next.js build worker exited with code: 1 and signal: null
  at ChildProcess.<anonymous> (lib/next-test-utils.ts:314:11)

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

pnpm test-start-turbo test/e2e/app-dir/dynamic-io/dynamic-io.draft-mode.test.ts (turbopack)

  • dynamic-io > should fully prerender pages that use draftMode
Expand output

● dynamic-io › should fully prerender pages that use draftMode

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

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

pnpm test-start-turbo test/e2e/app-dir/dynamic-io/dynamic-io.date.test.ts (turbopack)

  • dynamic-io > should not have route specific errors
  • dynamic-io > should prerender pages with cached Date.now() calls
  • dynamic-io > should not prerender pages with uncached Date.now() calls
  • dynamic-io > should prerender pages with cached Date() calls
  • dynamic-io > should not prerender pages with uncached Date() calls
  • dynamic-io > should prerender pages with cached new Date() calls
  • dynamic-io > should not prerender pages with uncached new Date() calls
  • dynamic-io > should prerender pages with cached static Date instances like new Date(0)
  • dynamic-io > should not prerender pages with uncached static Date instances like new Date(0)
Expand output

● dynamic-io › should not have route specific errors

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should prerender pages with cached Date.now() calls

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should not prerender pages with uncached Date.now() calls

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should prerender pages with cached Date() calls

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should not prerender pages with uncached Date() calls

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should prerender pages with cached new Date() calls

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should not prerender pages with uncached new Date() calls

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should prerender pages with cached static Date instances like new Date(0)

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

● dynamic-io › should not prerender pages with uncached static Date instances like new Date(0)

next build failed with code/signal 1

  106 |           if (code || signal)
  107 |             reject(
> 108 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  109 |             )
  110 |           else resolve()
  111 |         })

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

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

pnpm test test/integration/image-generation/test/index.test.ts (turbopack)

  • Image Generation > production mode > should generate the image without errors
Expand output

● Image Generation › production mode › should generate the image without errors

FetchError: request to http://localhost:35903/api/image failed, reason: socket hang up

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

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

pnpm test test/integration/image-optimizer/test/content-disposition-type.test.ts (turbopack)

  • with contentDispositionType inline > dev support with next.config.js > should return home page
Expand output

● with contentDispositionType inline › dev support with next.config.js › should return home page

expect(received).toMatch(expected)

Expected pattern: /Image Optimizer Home/m
Received string:  "<!DOCTYPE html><html><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><style data-next-hide-fouc=\"true\">body{display:none}</style><noscript data-next-hide-fouc=\"true\"><style>body{display:block}</style></noscript><noscript data-n-css=\"\"></noscript><script src=\"/_next/static/chunks/_3b66123c._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/node_modules__pnpm_d6e20451._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/test_integration_image-optimizer_app_pages__app_5771e187._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/test_integration_image-optimizer_app_pages__app_802c59db._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/_2e175377._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/test_integration_image-optimizer_app_pages__error_5771e187._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/test_integration_image-optimizer_app_pages__error_7f9d87c7._.js\" defer=\"\"></script><script src=\"/_next/static/development/_ssgManifest.js\" defer=\"\"></script><script src=\"/_next/static/development/_buildManifest.js\" defer=\"\"></script><noscript id=\"__next_css__DO_NOT_USE__\"></noscript></head><body><div id=\"__next\"></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{\"statusCode\":500,\"hostname\":\"[::]\"}},\"page\":\"/_error\",\"query\":{},\"buildId\":\"development\",\"isFallback\":false,\"err\":{\"name\":\"TypeError\",\"source\":\"server\",\"message\":\"src.startsWith is not a function\",\"stack\":\"TypeError: src.startsWith is not a function\\n    at getImgProps (/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/.next/server/chunks/ssr/_135a221a._.js:1101:21)\\n    at /root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/.next/server/chunks/ssr/_135a221a._.js:3837:82\\n    at react-stack-bottom-frame (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:9251:18)\\n    at renderWithHooks (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:4889:19)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5735:39)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6502:18)\\n    at renderChildrenArray (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6378:9)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6119:13)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5503:13)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at finishFunctionComponent (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:4933:13)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5375:11)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5310:11)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at finishFunctionComponent (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:4933:13)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5375:11)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6502:18)\\n    at renderChildrenArray (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6378:9)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6119:13)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5503:13)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6502:18)\\n    at renderChildrenArray (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6378:9)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6119:13)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5503:13)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5782:15)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5782:15)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at finishFunctionComponent (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:4933:13)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5375:11)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5782:15)\"},\"gip\":true,\"scriptLoader\":[]}</script></body></html>"

  195 |   it('should return home page', async () => {
  196 |     const res = await fetchViaHTTP(ctx.appPort, '/', null, {})
> 197 |     expect(await res.text()).toMatch(/Image Optimizer Home/m)
      |                              ^
  198 |   })
  199 |
  200 |   it('should handle non-ascii characters in image url', async () => {

  at Object.toMatch (integration/image-optimizer/test/util.ts:197:30)

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

pnpm test test/integration/image-optimizer/test/dangerously-allow-svg.test.ts (turbopack)

  • with dangerouslyAllowSVG config > dev support with next.config.js > should return home page
Expand output

● with dangerouslyAllowSVG config › dev support with next.config.js › should return home page

expect(received).toMatch(expected)

Expected pattern: /Image Optimizer Home/m
Received string:  "<!DOCTYPE html><html><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><style data-next-hide-fouc=\"true\">body{display:none}</style><noscript data-next-hide-fouc=\"true\"><style>body{display:block}</style></noscript><noscript data-n-css=\"\"></noscript><script src=\"/_next/static/chunks/_3b66123c._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/node_modules__pnpm_d6e20451._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/test_integration_image-optimizer_app_pages__app_5771e187._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/test_integration_image-optimizer_app_pages__app_802c59db._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/_2e175377._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/test_integration_image-optimizer_app_pages__error_5771e187._.js\" defer=\"\"></script><script src=\"/_next/static/chunks/test_integration_image-optimizer_app_pages__error_7f9d87c7._.js\" defer=\"\"></script><script src=\"/_next/static/development/_ssgManifest.js\" defer=\"\"></script><script src=\"/_next/static/development/_buildManifest.js\" defer=\"\"></script><noscript id=\"__next_css__DO_NOT_USE__\"></noscript></head><body><div id=\"__next\"></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{\"statusCode\":500,\"hostname\":\"[::]\"}},\"page\":\"/_error\",\"query\":{},\"buildId\":\"development\",\"isFallback\":false,\"err\":{\"name\":\"TypeError\",\"source\":\"server\",\"message\":\"src.startsWith is not a function\",\"stack\":\"TypeError: src.startsWith is not a function\\n    at getImgProps (/root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/.next/server/chunks/ssr/_135a221a._.js:1101:21)\\n    at /root/actions-runner/_work/next.js/next.js/test/integration/image-optimizer/app/.next/server/chunks/ssr/_135a221a._.js:3837:82\\n    at react-stack-bottom-frame (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:9251:18)\\n    at renderWithHooks (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:4889:19)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5735:39)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6502:18)\\n    at renderChildrenArray (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6378:9)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6119:13)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5503:13)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at finishFunctionComponent (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:4933:13)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5375:11)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5310:11)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at finishFunctionComponent (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:4933:13)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5375:11)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6502:18)\\n    at renderChildrenArray (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6378:9)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6119:13)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5503:13)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6502:18)\\n    at renderChildrenArray (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6378:9)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6119:13)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5503:13)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5782:15)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5782:15)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at finishFunctionComponent (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:4933:13)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5375:11)\\n    at retryNode (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6106:21)\\n    at renderNodeDestructive (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:6045:11)\\n    at renderElement (/root/actions-runner/_work/next.js/next.js/node_modules/.pnpm/[email protected][email protected]/node_modules/react-dom/cjs/react-dom-server.edge.development.js:5782:15)\"},\"gip\":true,\"scriptLoader\":[]}</script></body></html>"

  195 |   it('should return home page', async () => {
  196 |     const res = await fetchViaHTTP(ctx.appPort, '/', null, {})
> 197 |     expect(await res.text()).toMatch(/Image Optimizer Home/m)
      |                              ^
  198 |   })
  199 |
  200 |   it('should handle non-ascii characters in image url', async () => {

  at Object.toMatch (integration/image-optimizer/test/util.ts:197:30)

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

pnpm test test/integration/edge-runtime-dynamic-code/test/index.test.js (turbopack)

  • Edge route usage of dynamic code evaluation > development mode > shows a warning when running code with eval
  • Edge route usage of dynamic code evaluation > development mode > shows a warning when running WebAssembly.compile
  • Edge route usage of dynamic code evaluation > development mode > shows a warning when running WebAssembly.instantiate with a buffer parameter
  • Middleware usage of dynamic code evaluation > development mode > shows a warning when running code with eval
  • Middleware usage of dynamic code evaluation > development mode > shows a warning when running WebAssembly.compile
  • Middleware usage of dynamic code evaluation > development mode > shows a warning when running WebAssembly.instantiate with a buffer parameter
Expand output

● Middleware usage of dynamic code evaluation › development mode › shows a warning when running code with eval

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

Expected substring: "

  at usingEval (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/lib/utils.js:11:16)
  at middleware (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/middleware.js:12:52)
     9 | export async function usingEval() {"
  Received string:    "   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/edge-runtime-dynamic-code/next.config.js
   ⚠ Webpack is configured while Turbopack is not, which may cause problems.
   ⚠ See instructions if you need to configure Turbopack:
    https://nextjs.org/docs/app/api-reference/next-config-js/turbopack·
   ⚠ DynamicCodeEvaluationWarning: Dynamic Code Evaluation (e. g. 'eval', 'new Function') not allowed in Edge Runtime
  Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation
  at usingEval (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/lib/utils.js:11:16)
  at middleware (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/middleware.js:12:52)
     9 | export async function usingEval() {
    10 |   // eslint-disable-next-line no-eval
  > 11 |   return { value: eval('100') }
       |                ^
    12 | }
    13 |
    14 | export async function notUsingEval() {
  "
  at Object.toContain (integration/edge-runtime-dynamic-code/test/index.test.js:109:28)

● Middleware usage of dynamic code evaluation › development mode › shows a warning when running WebAssembly.compile

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

Expected substring: "

  at usingWebAssemblyCompile (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/lib/wasm.js:22:17)
  at middleware (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/middleware.js:24:68)
    20 |
    21 | export async function usingWebAssemblyCompile(x) {
  > 22 |   const module = await WebAssembly.compile(SQUARE_WASM_BUFFER)
       |                 ^"
  Received string:    " ⚠ DynamicWasmCodeGenerationWarning: Dynamic WASM code generation (e. g. 'WebAssembly.compile') not allowed in Edge Runtime.
  Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation
  at usingWebAssemblyCompile (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/lib/wasm.js:22:17)
  at middleware (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/middleware.js:24:68)
    20 |
    21 | export async function usingWebAssemblyCompile(x) {
  > 22 |   const module = await WebAssembly.compile(SQUARE_WASM_BUFFER)
       |                 ^
    23 |   const instance = await WebAssembly.instantiate(module, {})
    24 |   return { value: instance.exports.square(x) }
    25 | }
  "
  at Object.toContain (integration/edge-runtime-dynamic-code/test/index.test.js:173:28)

● Middleware usage of dynamic code evaluation › development mode › shows a warning when running WebAssembly.instantiate with a buffer parameter

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

Expected substring: "

  at async usingWebAssemblyInstantiateWithBuffer (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/lib/wasm.js:28:23)
  at async middleware (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/middleware.js:37:29)
    26 |
  "
  Received string:    " ⚠ DynamicWasmCodeGenerationWarning: Dynamic WASM code generation ('WebAssembly.instantiate' with a buffer parameter) not allowed in Edge Runtime.
  Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation
  at async usingWebAssemblyInstantiateWithBuffer (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/lib/wasm.js:28:23)
  at async middleware (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/middleware.js:37:29)
    26 |
    27 | export async function usingWebAssemblyInstantiateWithBuffer(x) {
  > 28 |   const { instance } = await WebAssembly.instantiate(SQUARE_WASM_BUFFER, {})
       |                       ^
    29 |   return { value: instance.exports.square(x) }
    30 | }
    31 |
  "
  at Object.toContain (integration/edge-runtime-dynamic-code/test/index.test.js:232:28)

● Edge route usage of dynamic code evaluation › development mode › shows a warning when running code with eval

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

Expected substring: "

  at usingEval (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/lib/utils.js:11:16)
  at handler (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/pages/api/route.js:13:22)
      at"
  Received string:    "   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/edge-runtime-dynamic-code/next.config.js
   ⚠ Webpack is configured while Turbopack is not, which may cause problems.
   ⚠ See instructions if you need to configure Turbopack:
    https://nextjs.org/docs/app/api-reference/next-config-js/turbopack·
   ✓ Compiled /api/route in 490ms
   ⚠ DynamicCodeEvaluationWarning: Dynamic Code Evaluation (e. g. 'eval', 'new Function') not allowed in Edge Runtime
  Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation
  at usingEval (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/lib/utils.js:11:16)
  at handler (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/pages/api/route.js:13:22)
  at NoopContextManager.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:7061)
  at ContextAPI.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:518)
  at NoopTracer.startActiveSpan (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:18093)
  at ProxyTracer.startActiveSpan (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:18853)
  at NoopContextManager.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:7061)
  at ContextAPI.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:518)
  at NoopContextManager.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:7061)
  at ContextAPI.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:518)
     9 | export async function usingEval() {
    10 |   // eslint-disable-next-line no-eval
  > 11 |   return { value: eval('100') }
       |                ^
    12 | }
    13 |
    14 | export async function notUsingEval() {
   GET /api/route?case=using-eval 200 in 188ms
  "
  at Object.toContain (integration/edge-runtime-dynamic-code/test/index.test.js:123:28)

● Edge route usage of dynamic code evaluation › development mode › shows a warning when running WebAssembly.compile

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

Expected substring: "

  at usingWebAssemblyCompile (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/lib/wasm.js:22:17)
  at handler (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/pages/api/route.js:17:42)
      at"
  Received string:    " ⚠ DynamicWasmCodeGenerationWarning: Dynamic WASM code generation (e. g. 'WebAssembly.compile') not allowed in Edge Runtime.
  Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation
  at usingWebAssemblyCompile (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/lib/wasm.js:22:17)
  at handler (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/pages/api/route.js:17:42)
  at NoopContextManager.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:7061)
  at ContextAPI.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:518)
  at NoopTracer.startActiveSpan (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:18093)
  at ProxyTracer.startActiveSpan (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:18853)
  at NoopContextManager.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:7061)
  at ContextAPI.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:518)
  at NoopContextManager.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:7061)
  at ContextAPI.with (../../../test/integration/edge-runtime-dynamic-code/turbopack:/packages/next/dist/compiled/@opentelemetry/api/index.js:1:518)
    20 |
    21 | export async function usingWebAssemblyCompile(x) {
  > 22 |   const module = await WebAssembly.compile(SQUARE_WASM_BUFFER)
       |                 ^
    23 |   const instance = await WebAssembly.instantiate(module, {})
    24 |   return { value: instance.exports.square(x) }
    25 | }
   GET /api/route?case=using-webassembly-compile 200 in 106ms
  "
  at Object.toContain (integration/edge-runtime-dynamic-code/test/index.test.js:189:28)

● Edge route usage of dynamic code evaluation › development mode › shows a warning when running WebAssembly.instantiate with a buffer parameter

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

Expected substring: "

  at async usingWebAssemblyInstantiateWithBuffer (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/lib/wasm.js:28:23)
  at async handler (../../../test/integration/edge-runtime-dynamic-code/test/integration/edge-runtime-dynamic-code/pages/api/route.js:21:16)
    26 |"
  Received string:    " ⚠ DynamicWasmCodeGenerationWarning: Dynamic WASM code generation ('WebAssembly.instantiate' with a buffer parameter) not allowed in Edge Runtime.
  Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation
  at async usingWebAssemblyInstantiateWithBuffer (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/lib/wasm.js:28:23)
  at async handler (../../../test/integration/edge-runtime-dynamic-code/turbopack:/test/integration/edge-runtime-dynamic-code/pages/api/route.js:21:16)
    26 |
    27 | export async function usingWebAssemblyInstantiateWithBuffer(x) {
  > 28 |   const { instance } = await WebAssembly.instantiate(SQUARE_WASM_BUFFER, {})
       |                       ^
    29 |   return { value: instance.exports.square(x) }
    30 | }
    31 |
   GET /api/route?case=using-webassembly-instantiate-with-buffer 200 in 137ms
  "
  at Object.toContain (integration/edge-runtime-dynamic-code/test/index.test.js:251:28)

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

pnpm test test/integration/fetch-polyfill/test/index.test.js (turbopack)

  • Fetch polyfill > development mode > includes polyfilled fetch when using getStaticPaths
Expand output

● Fetch polyfill › development mode › includes polyfilled fetch when using getStaticPaths

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

Expected: "a"
Received: ""

  62 |     const htmlA = await renderViaHTTP(appPort, '/user/a')
  63 |     const $a = cheerio.load(htmlA)
> 64 |     expect($a('#username').text()).toBe('a')
     |                                    ^
  65 |
  66 |     const htmlB = await renderViaHTTP(appPort, '/user/b')
  67 |     const $b = cheerio.load(htmlB)

  at Object.toBe (integration/fetch-polyfill/test/index.test.js:64:36)

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

pnpm test-dev test/development/basic/next-rs-api.test.ts

  • next.rs api > should have working HMR on client-side change on a page 0
  • next.rs api > should have working HMR on client-side change on a page 1
  • next.rs api > should have working HMR on client-side change on a page 2
  • next.rs api > should have working HMR on client and server-side change on a page 0
  • next.rs api > should have working HMR on client and server-side change on a page 1
  • next.rs api > should have working HMR on client and server-side change on a page 2
  • next.rs api > should have working HMR on client-side change on a app page 0
  • next.rs api > should have working HMR on client-side change on a app page 1
  • next.rs api > should have working HMR on client-side change on a app page 2
Expand output

● next.rs api › should have working HMR on client-side change on a page 0

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

- Expected  - 1
+ Received  + 1

  Array [
-   StringContaining "/pages/index.js",
+   "pages/index.js [client] (ecmascript)",
  ]

  476 |         expect(route.type).toBe(type)
  477 |
> 478 |         let serverSideSubscription:
      |                                                        ^
  479 |           | AsyncIterableIterator<TurbopackResult>
  480 |           | undefined
  481 |         switch (route.type) {

  at Object.<anonymous> (development/basic/next-rs-api.test.ts:478:114)

● next.rs api › should have working HMR on client-side change on a page 1

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

- Expected  - 1
+ Received  + 1

  Array [
-   StringContaining "/pages/index.js",
+   "pages/index.js [client] (ecmascript)",
  ]

  476 |         expect(route.type).toBe(type)
  477 |
> 478 |         let serverSideSubscription:
      |                                                        ^
  479 |           | AsyncIterableIterator<TurbopackResult>
  480 |           | undefined
  481 |         switch (route.type) {

  at Object.<anonymous> (development/basic/next-rs-api.test.ts:478:114)

● next.rs api › should have working HMR on client-side change on a page 2

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

- Expected  - 1
+ Received  + 1

  Array [
-   StringContaining "/pages/index.js",
+   "pages/index.js [client] (ecmascript)",
  ]

  476 |         expect(route.type).toBe(type)
  477 |
> 478 |         let serverSideSubscription:
      |                                                        ^
  479 |           | AsyncIterableIterator<TurbopackResult>
  480 |           | undefined
  481 |         switch (route.type) {

  at Object.<anonymous> (development/basic/next-rs-api.test.ts:478:114)

● next.rs api › should have working HMR on client and server-side change on a page 0

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

- Expected  - 1
+ Received  + 1

  Array [
-   StringContaining "/pages/index.js",
+   "pages/index.js [client] (ecmascript)",
  ]

  476 |         expect(route.type).toBe(type)
  477 |
> 478 |         let serverSideSubscription:
      |                                                        ^
  479 |           | AsyncIterableIterator<TurbopackResult>
  480 |           | undefined
  481 |         switch (route.type) {

  at Object.<anonymous> (development/basic/next-rs-api.test.ts:478:114)

● next.rs api › should have working HMR on client and server-side change on a page 1

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

- Expected  - 1
+ Received  + 1

  Array [
-   StringContaining "/pages/index.js",
+   "pages/index.js [client] (ecmascript)",
  ]

  476 |         expect(route.type).toBe(type)
  477 |
> 478 |         let serverSideSubscription:
      |                                                        ^
  479 |           | AsyncIterableIterator<TurbopackResult>
  480 |           | undefined
  481 |         switch (route.type) {

  at Object.<anonymous> (development/basic/next-rs-api.test.ts:478:114)

● next.rs api › should have working HMR on client and server-side change on a page 2

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

- Expected  - 1
+ Received  + 1

  Array [
-   StringContaining "/pages/index.js",
+   "pages/index.js [client] (ecmascript)",
  ]

  476 |         expect(route.type).toBe(type)
  477 |
> 478 |         let serverSideSubscription:
      |                                                        ^
  479 |           | AsyncIterableIterator<TurbopackResult>
  480 |           | undefined
  481 |         switch (route.type) {

  at Object.<anonymous> (development/basic/next-rs-api.test.ts:478:114)

● next.rs api › should have working HMR on client-side change on a app page 0

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

- Expected  - 1
+ Received  + 1

  Array [
-   StringContaining "/app/app/client.tsx",
+   "app/app/client.tsx [app-client] (ecmascript)",
  ]

  476 |         expect(route.type).toBe(type)
  477 |
> 478 |         let serverSideSubscription:
      |                                                        ^
  479 |           | AsyncIterableIterator<TurbopackResult>
  480 |           | undefined
  481 |         switch (route.type) {

  at Object.<anonymous> (development/basic/next-rs-api.test.ts:478:114)

● next.rs api › should have working HMR on client-side change on a app page 1

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

- Expected  - 1
+ Received  + 1

  Array [
-   StringContaining "/app/app/client.tsx",
+   "app/app/client.tsx [app-client] (ecmascript)",
  ]

  476 |         expect(route.type).toBe(type)
  477 |
> 478 |         let serverSideSubscription:
      |                                                        ^
  479 |           | AsyncIterableIterator<TurbopackResult>
  480 |           | undefined
  481 |         switch (route.type) {

  at Object.<anonymous> (development/basic/next-rs-api.test.ts:478:114)

● next.rs api › should have working HMR on client-side change on a app page 2

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

- Expected  - 1
+ Received  + 1

  Array [
-   StringContaining "/app/app/client.tsx",
+   "app/app/client.tsx [app-client] (ecmascript)",
  ]

  476 |         expect(route.type).toBe(type)
  477 |
> 478 |         let serverSideSubscription:
      |                                                        ^
  479 |           | AsyncIterableIterator<TurbopackResult>
  480 |           | undefined
  481 |         switch (route.type) {

  at Object.<anonymous> (development/basic/next-rs-api.test.ts:478:114)

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

__NEXT_EXPERIMENTAL_PPR=true pnpm test-dev test/e2e/basepath/router-events.test.ts (PPR)

  • basePath > should use urls with basepath in router events for failed route change
Expand output

● basePath › should use urls with basepath in router events for failed route change

assert.deepEqual(received, expected)

Expected value to deeply equal to:
  [["routeChangeStart", "/docs/error-route", {"shallow": false}], ["routeChangeError", "Failed to load static props", null, "/docs/error-route", {"shallow": false}]]
Received:
  null

Difference:

  Comparing two different types of values. Expected array but received null.

  115 |       await retry(async () => {
  116 |         const eventLog = await browser.eval('window._getEventLog()')
> 117 |         assert.deepEqual(eventLog, [
      |                ^
  118 |           ['routeChangeStart', `${basePath}/error-route`, { shallow: false }],
  119 |           [
  120 |             'routeChangeError',

  at deepEqual (e2e/basepath/router-events.test.ts:117:16)
  at retry (lib/next-test-utils.ts:811:14)
  at Object.<anonymous> (e2e/basepath/router-events.test.ts:115:7)

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)
  • app-dir action handling > should work with interception routes
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:908: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:911:10)

● app-dir action handling › should work with interception routes

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

Expected substring: "interception-routes/test"
Received string:    "http://localhost:39393/interception-routes"

  1598 |     await retry(async () => {
  1599 |       // verify the URL is correct
> 1600 |       expect(await browser.url()).toContain('interception-routes/test')
       |                                   ^
  1601 |       // the intercepted text should appear
  1602 |       expect(await browser.elementById('modal-data').text()).toContain(
  1603 |         'in "modal"'

  at toContain (e2e/app-dir/actions/app-action.test.ts:1600:35)
  at retry (lib/next-test-utils.ts:811:14)
  at Object.<anonymous> (e2e/app-dir/actions/app-action.test.ts:1598:5)

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

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

  • ReactRefreshLogBox app > server component can recover from error thrown in the module
Expand output

● ReactRefreshLogBox app › server component can recover from error thrown in the module

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `ReactRefreshLogBox app server component can recover from error thrown in the module 1`

- Snapshot  - 16
+ Received  +  1

- {
-   "description": "module error",
-   "environmentLabel": null,
-   "label": "Runtime Error",
-   "source": "index.js (1:7) @ eval
- > 1 | throw new Error('module error')
-     |       ^",
-   "stack": [
-     "eval index.js (1:7)",
-     "<FIXME-next-dist-dir>",
-     "<FIXME-next-dist-dir>",
-     "eval ./app/server/page.js",
-     "<FIXME-next-dist-dir>",
-     "<FIXME-next-dist-dir>",
-   ],
- }
+ "Expected Redbox but found no visible one."

  1466 |         await session.assertHasRedbox()
  1467 |       } else {
> 1468 |         await expect({ browser, next }).toDisplayRedbox(`
       |                                         ^
  1469 |          {
  1470 |            "description": "module error",
  1471 |            "environmentLabel": null,

  at Object.toDisplayRedbox (development/acceptance-app/ReactRefreshLogBox.test.ts:1468:41)

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

@ijjk
Copy link
Member

ijjk commented May 5, 2025

Stats from current PR

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

Diff too large to display

Diff for 4719-HASH.js

Diff too large to display

Diff for main-HASH.js

Diff too large to display

Diff for app-page-exp..ntime.dev.js
failed to diff
Diff for app-page-tur..ntime.dev.js
failed to diff
Diff for app-page-tur..ntime.dev.js
failed to diff
Diff for app-page.runtime.dev.js
failed to diff
Commit: de5897d

}
.cell())
}

#[turbo_tasks::value_impl]
Copy link
Member Author

Choose a reason for hiding this comment

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

It seems like the difference of ValueToString and Display implementation of FileSystemPath is the cause of the CI failure.

@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch 2 times, most recently from d79c813 to 7abfd76 Compare May 7, 2025 14:59
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch from 7abfd76 to 063d14e Compare May 21, 2025 15:36
Copy link

changeset-bot bot commented May 21, 2025

⚠️ No Changeset found

Latest commit: de5897d

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch 2 times, most recently from aa6e564 to 2a0118d Compare May 21, 2025 15:50
@kdy1 kdy1 force-pushed the kdy1/memopt-filepath branch from 2a0118d to de5897d Compare May 21, 2025 17:47
@kdy1 kdy1 self-assigned this May 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
created-by: Turbopack team PRs by the Turbopack team. Font (next/font) Related to Next.js Font Optimization. Turbopack Related to Turbopack with Next.js.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants