Skip to content

Conversation

@acdlite
Copy link
Contributor

@acdlite acdlite commented Dec 27, 2025

Removes loading as a separate field in the server response payload. Instead, it is passed as a prop to LayoutRouter, similar to how the other boundary types (NotFound, et al) work.

This simplifies much of the logic on the client because we no longer need to track loading separately from the rest of the segment data.

When a parallel route does not match the current URL, in its place we
render the render the last active route that matched that slot. When
we next refresh the page, we track some additional state to inform the
router how to refresh the old, "inactive" routes that aren't reachable
from the outermost, "active" route.

Before this PR, the only state we tracked was the URL of the page that
last matched the inactive segment. After this PR, I am also tracking
the search query string of the old route. This can't be inferred from
the URL alone because the URL may have been rewritten by the server.

We don't need the search query to perform a network request — that
is handled by the URL alone — but we do need it in order to construct
a cache key for the page segments. Today we read the cache key from
the FlightRouterState, which has all the params embdeed inside of it,
but eventually I want to remove all uses of FlightRouterState that
aren't about sending/receiving data from the server or storing the
tree as state in the browser's history entry. So this is an incremental
step towards that goal.
RouteTree is the client version of FlightRouterState. It's the same
representation of the route tree, but it structured for optimized
lookups of the client cache. The plan is the make this the primary/only
type used for dealing with routes on the client; FlightRouterState will
be used a transport format only.

Using the same type accessing the cache during both prefetches and
navigations makes it less likely for the behavior between the two
paths to drift, too. Now that we've deleted the old, pre-Segment
Cache navigation implementation, we should generally try to unify the
data structures wherever possible.
Currently, there's a cliff when navigating to a route that is unknown to
the client. The prefetch cache is bypassed completely because we don't
know the structure of the target route, and therefore we don't know
which segments we might be able to use to construct a loading state (or even a fully cached response).

However, because RSC responses are streaming, we can take advantage of
the fact that the first chunk of the response contains the route tree.

So as soon as we receive the first chunk, we can show a cached loading
state to the user (if available), even while we wait for the rest of the
response to arrive from the server.

To access a segment's cache, you need its corresponding RouteTree.
Previously this was not available during an unprefetched navigation
because those objects were only created during a prefetch. But now that
we've migrated the navigation implementation to use RouteTrees, too, we
can access the cache directly inside the main navigation function,
rather than having to do two separate passes like before.

In other words, the only difference between a navigation to an unknown
route versus a prefetched route is the extra latency required to get
those first bytes from the server. Once the route tree resolves, the
rest of the implementation and behavior is identical.
@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Dec 27, 2025

Failing test suites

Commit: 7a4a214 | About building and testing Next.js

pnpm test-start test/e2e/app-dir/app-prefetch-false-loading/app-prefetch-false-loading.test.ts (job)

  • app-prefetch-false-loading > should render loading for the initial render (DD)
Expand output

● app-prefetch-false-loading › should render loading for the initial render

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

Expected: "Loading..."
Received: ""

  10 |     const $ = await next.render$('/en/testing')
  11 |
> 12 |     expect($('#loading').text()).toBe('Loading...')
     |                                  ^
  13 |   })
  14 |   it('should not re-trigger loading state when navigating between pages that share a dynamic layout', async () => {
  15 |     const logStartIndex = next.cliOutput.length

  at Object.toBe (e2e/app-dir/app-prefetch-false-loading/app-prefetch-false-loading.test.ts:12:34)

pnpm test-start test/e2e/app-dir/refresh/refresh.test.ts (job)

  • app-dir refresh > should refresh client cache when refresh() is called in a server action (DD)
  • app-dir refresh > should throw an error when refresh() is called during page render (DD)
  • app-dir refresh > should throw an error when refresh() is called in a route handler (DD)
  • app-dir refresh > should throw an error when refresh() is called in unstable_cache (DD)
  • app-dir refresh > should let you read your write after a redirect and refresh (DD)
Expand output

● app-dir refresh › should refresh client cache when refresh() is called in a server action

next build failed with code/signal 1

  77 |             if (code || signal)
  78 |               reject(
> 79 |                 new Error(
     |                 ^
  80 |                   `next build failed with code/signal ${code || signal}`
  81 |                 )
  82 |               )

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

● app-dir refresh › should throw an error when refresh() is called during page render

next build failed with code/signal 1

  77 |             if (code || signal)
  78 |               reject(
> 79 |                 new Error(
     |                 ^
  80 |                   `next build failed with code/signal ${code || signal}`
  81 |                 )
  82 |               )

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

● app-dir refresh › should throw an error when refresh() is called in a route handler

next build failed with code/signal 1

  77 |             if (code || signal)
  78 |               reject(
> 79 |                 new Error(
     |                 ^
  80 |                   `next build failed with code/signal ${code || signal}`
  81 |                 )
  82 |               )

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

● app-dir refresh › should throw an error when refresh() is called in unstable_cache

next build failed with code/signal 1

  77 |             if (code || signal)
  78 |               reject(
> 79 |                 new Error(
     |                 ^
  80 |                   `next build failed with code/signal ${code || signal}`
  81 |                 )
  82 |               )

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

● app-dir refresh › should let you read your write after a redirect and refresh

next build failed with code/signal 1

  77 |             if (code || signal)
  78 |               reject(
> 79 |                 new Error(
     |                 ^
  80 |                   `next build failed with code/signal ${code || signal}`
  81 |                 )
  82 |               )

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

pnpm test-dev test/e2e/app-dir/segment-cache/no-prefetch/no-prefetch.test.ts (job)

  • navigating without a prefetch > can show a loading boundary from the dynamic response (DD)
Expand output

● navigating without a prefetch › can show a loading boundary from the dynamic response

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#loading-component') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:405:17)
  at Object.elementByCss (e2e/app-dir/segment-cache/no-prefetch/no-prefetch.test.ts:25:10)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/segment-cache/no-prefetch/no-prefetch.test.ts:26:10)

pnpm test-start-turbo test/e2e/app-dir/app-client-cache/client-cache.defaults.test.ts (turbopack) (job)

  • app dir client cache semantics (default semantics) > prefetch={undefined} - default > should refetch the full page after 5 mins (DD)
Expand output

● app dir client cache semantics (default semantics) › prefetch={undefined} - default › should refetch the full page after 5 mins

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Object.<anonymous> (e2e/app-dir/app-client-cache/client-cache.defaults.test.ts:274:37)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:632:17)
  at Proxy.startChain (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/app-dir/app-client-cache/client-cache.defaults.test.ts:277:12)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/app-client-cache/client-cache.defaults.test.ts:278:12)

pnpm test-start test/e2e/app-dir/app-client-cache/client-cache.original.test.ts (job)

  • app dir client cache semantics (30s/5min) > prefetch={undefined} - default > should refetch the full page after 5 mins (DD)
Expand output

● app dir client cache semantics (30s/5min) › prefetch={undefined} - default › should refetch the full page after 5 mins

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Object.<anonymous> (e2e/app-dir/app-client-cache/client-cache.original.test.ts:366:37)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:632:17)
  at Proxy.startChain (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/app-dir/app-client-cache/client-cache.original.test.ts:369:12)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/app-client-cache/client-cache.original.test.ts:370:12)

pnpm test packages/next-codemod/transforms/__tests__/add-missing-react-import.test.js (job)

  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-01 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-02 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-03 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-04 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-05 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-06 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-07 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-08 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-10 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-11 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-12 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-13 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-14 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-15 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-16 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-17 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-18 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-19 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-21 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-22 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-23 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-24 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-25 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-type-cast-01 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/async-api-type-cast-02 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/custom-routes-access-api-prop-01 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/generate-metadata-access-api-prop-01 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/generate-metadata-access-api-prop-02 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/generate-metadata-access-api-prop-03 (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/origin-name-01-util (DD)
  • next-async-request-api - dynamic-apis > transforms correctly next-async-request-api-dynamic-apis/origin-name-02-util (DD)
Expand output

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-01

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

- Expected  - 9
+ Received  + 9

- import { cookies } from 'next/headers'
-
+ import { cookies } from 'next/headers'
+ 
- export async function MyComponent() {
+ export async function MyComponent() {
-   const name = (await cookies()).get('name')
+   const name = (await cookies()).get('name')
-   callback(name)
+   callback(name)
- }
-
+ }
+ 
- function callback(name: any) {
+ function callback(name: any) {
-   console.log(name)
+   console.log(name)
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-02

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

- Expected  - 4
+ Received  + 4

- import { draftMode } from 'next/headers'
-
+ import { draftMode } from 'next/headers'
+ 
- export async function MyComponent() {
+ export async function MyComponent() {
-   (await draftMode()).enable()
+   (await draftMode()).enable()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-03

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

- Expected  - 5
+ Received  + 5

- // If it's sync default export, convert to async and await the function call
+ // If it's sync default export, convert to async and await the function call
- import { draftMode } from 'next/headers'
-
+ import { draftMode } from 'next/headers'
+ 
- export default async function MyComponent() {
+ export default async function MyComponent() {
-   (await draftMode()).enable()
+   (await draftMode()).enable()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-04

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

- Expected  - 8
+ Received  + 8

- import { draftMode } from 'next/headers'
-
+ import { draftMode } from 'next/headers'
+ 
- export default async function MyComponent() {
+ export default async function MyComponent() {
-   (await draftMode()).enable()
+   (await draftMode()).enable()
- }
-
+ }
+ 
- export async function MyComponent2() {
+ export async function MyComponent2() {
-   (await draftMode()).enable()
+   (await draftMode()).enable()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-05

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

- Expected  - 9
+ Received  + 9

- import { use } from "react";
+ import { use } from "react";
- import { draftMode, type UnsafeUnwrappedDraftMode } from 'next/headers';
-
+ import { draftMode, type UnsafeUnwrappedDraftMode } from 'next/headers';
+ 
- export function MyComponent2() {
+ export function MyComponent2() {
-   (draftMode() as unknown as UnsafeUnwrappedDraftMode).enable()
+   (draftMode() as unknown as UnsafeUnwrappedDraftMode).enable()
- }
-
+ }
+ 
- export function useDraftModeEnabled() {
+ export function useDraftModeEnabled() {
-   use(draftMode()).enable()
+   use(draftMode()).enable()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-06

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

- Expected  - 5
+ Received  + 5

- import React from 'react'
+ import React from 'react'
- import { draftMode } from 'next/headers'
-
+ import { draftMode } from 'next/headers'
+ 
- export default async function Page() {
+ export default async function Page() {
-   return <button disabled={(await draftMode()).isEnabled}>Enable Draft Mode</button>;
+   return <button disabled={(await draftMode()).isEnabled}>Enable Draft Mode</button>;
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-07

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

- Expected  - 5
+ Received  + 5

- // Already imported the type
+ // Already imported the type
- import { draftMode, type UnsafeUnwrappedDraftMode } from 'next/headers'
-
+ import { draftMode, type UnsafeUnwrappedDraftMode } from 'next/headers'
+ 
- export function MyComponent2() {
+ export function MyComponent2() {
-   (draftMode() as unknown as UnsafeUnwrappedDraftMode).enable()
+   (draftMode() as unknown as UnsafeUnwrappedDraftMode).enable()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-08

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

- Expected  - 4
+ Received  + 4

- import { headers } from 'next/headers'
-
+ import { headers } from 'next/headers'
+ 
- export async function GET(): Promise<Response> {
+ export async function GET(): Promise<Response> {
-   await headers()
+   await headers()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-10

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

- Expected  - 12
+ Received  + 12

- import { headers, type UnsafeUnwrappedHeaders } from 'next/headers';
-
+ import { headers, type UnsafeUnwrappedHeaders } from 'next/headers';
+ 
- export function MyComp() {
+ export function MyComp() {
-   return (headers() as unknown as UnsafeUnwrappedHeaders);
+   return (headers() as unknown as UnsafeUnwrappedHeaders);
- }
-
+ }
+ 
- export function MyComp2() {
+ export function MyComp2() {
-   return (headers() as unknown as UnsafeUnwrappedHeaders);
+   return (headers() as unknown as UnsafeUnwrappedHeaders);
- }
-
+ }
+ 
- export function MyComp3() {
+ export function MyComp3() {
-   return (headers() as unknown as UnsafeUnwrappedHeaders);
+   return (headers() as unknown as UnsafeUnwrappedHeaders);
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-11

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

- Expected  - 8
+ Received  + 8

- import { headers, type UnsafeUnwrappedHeaders } from 'next/headers';
-
+ import { headers, type UnsafeUnwrappedHeaders } from 'next/headers';
+ 
- export function MyComp() {
+ export function MyComp() {
-   void (headers() as unknown as UnsafeUnwrappedHeaders)
+   void (headers() as unknown as UnsafeUnwrappedHeaders)
- }
-
+ }
+ 
- export function generateContentfulMetadata() {
+ export function generateContentfulMetadata() {
-   void (headers() as unknown as UnsafeUnwrappedHeaders)
+   void (headers() as unknown as UnsafeUnwrappedHeaders)
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-12

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

- Expected  - 4
+ Received  + 4

- import { cookies } from "next/headers";
-
+ import { cookies } from "next/headers";
+ 
- async function MyComponent() {
+ async function MyComponent() {
-   callSomething(await cookies());
+   callSomething(await cookies());
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-13

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

- Expected  - 4
+ Received  + 4

- import { headers } from "next/headers";
-
+ import { headers } from "next/headers";
+ 
- async function MyComponent() {
+ async function MyComponent() {
-   callSomething(await headers());
+   callSomething(await headers());
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-14

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

- Expected  - 4
+ Received  + 4

- import { cookies } from "next/headers";
-
+ import { cookies } from "next/headers";
+ 
- export default async function Page() {
+ export default async function Page() {
-   callSomething(await cookies());
+   callSomething(await cookies());
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-15

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

- Expected  - 7
+ Received  + 7

- import { cookies } from "next/headers";
-
+ import { cookies } from "next/headers";
+ 
- async function MyComponent() {
+ async function MyComponent() {
-   function asyncFunction() {
+   function asyncFunction() {
-     callSomething(/* @next-codemod-error Manually await this call and refactor the function to be async */
+     callSomething(/* @next-codemod-error Manually await this call and refactor the function to be async */
-     cookies());
+     cookies());
-   }
+   }
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-16

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

- Expected  - 5
+ Received  + 5

- import { cookies } from "next/headers";
-
+ import { cookies } from "next/headers";
+ 
- function MyComponent() {
+ function MyComponent() {
-   callSomething(/* @next-codemod-error Manually await this call and refactor the function to be async */
+   callSomething(/* @next-codemod-error Manually await this call and refactor the function to be async */
-   cookies());
+   cookies());
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-17

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

- Expected  - 4
+ Received  + 4

- import { cookies } from 'next/headers'
-
+ import { cookies } from 'next/headers'
+ 
- export const myFun = async (): Promise<any> => {
+ export const myFun = async (): Promise<any> => {
-   const name = (await cookies()).get('name')
+   const name = (await cookies()).get('name')
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-18

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

- Expected  - 16
+ Received  + 16

- import {
+ import {
-   cookies as myCookies,
+   cookies as myCookies,
-   headers as myHeaders,
+   headers as myHeaders,
-   draftMode as myDraftMode,
+   draftMode as myDraftMode,
- } from 'next/headers'
-
+ } from 'next/headers'
+ 
- export const myFun = async (): Promise<any> => {
+ export const myFun = async (): Promise<any> => {
-   const name = (await myCookies()).get('name')
+   const name = (await myCookies()).get('name')
- }
-
+ }
+ 
- export const myFun2 = async (): Promise<any> => {
+ export const myFun2 = async (): Promise<any> => {
-   await myHeaders()
+   await myHeaders()
- }
-
+ }
+ 
- export const myFun3 = async (): Promise<any> => {
+ export const myFun3 = async (): Promise<any> => {
-   await myDraftMode()
+   await myDraftMode()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-19

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

- Expected  - 12
+ Received  + 12

- import { cookies, headers, type UnsafeUnwrappedHeaders } from 'next/headers';
-
+ import { cookies, headers, type UnsafeUnwrappedHeaders } from 'next/headers';
+ 
- export function myFun() {
+ export function myFun() {
-   return async function () {
+   return async function () {
-     (await cookies()).get('name')
+     (await cookies()).get('name')
-   };
+   };
- }
-
+ }
+ 
- export function myFun2() {
+ export function myFun2() {
-   return function () {
+   return function () {
-     void (headers() as unknown as UnsafeUnwrappedHeaders)
+     void (headers() as unknown as UnsafeUnwrappedHeaders)
-   };
+   };
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-21

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

- Expected  - 7
+ Received  + 7

- const nextHeaders = /* @next-codemod-error The APIs under 'next/headers' are async now, need to be manually awaited. */
+ const nextHeaders = /* @next-codemod-error The APIs under 'next/headers' are async now, need to be manually awaited. */
- import('next/headers')
-
+ import('next/headers')
+ 
- function myFunc() {
+ function myFunc() {
-   nextHeaders.cookies()
+   nextHeaders.cookies()
- }
-
+ }
+ 
  const nextHeaders2 = /* @next-codemod-error The APIs under 'next/headers' are async now, need to be manually awaited. */ import('next/headers')

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-22

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

- Expected  - 10
+ Received  + 10

- import { cookies } from 'next/headers'
-
+ import { cookies } from 'next/headers'
+ 
- export const GET = async function() {
+ export const GET = async function() {
-   (await cookies()).get('token')
+   (await cookies()).get('token')
- }
-
+ }
+ 
- export async function POST(req: Request) {
+ export async function POST(req: Request) {
-   if (req.method === 'POST') {
+   if (req.method === 'POST') {
-     (await cookies()).get('token')
+     (await cookies()).get('token')
-   }
+   }
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-23

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

- Expected  - 5
+ Received  + 5

- import { cookies } from 'next/headers'
-
+ import { cookies } from 'next/headers'
+ 
- export type Cookie = Awaited<ReturnType<typeof cookies>>
+ export type Cookie = Awaited<ReturnType<typeof cookies>>
- export function foo(c: Awaited<ReturnType<typeof cookies>>) {
+ export function foo(c: Awaited<ReturnType<typeof cookies>>) {
-   return c
+   return c
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-24

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

- Expected  - 12
+ Received  + 12

- import { use } from "react";
+ import { use } from "react";
- import { cookies } from 'next/headers'
-
+ import { cookies } from 'next/headers'
+ 
- function useHook() {}
-
+ function useHook() {}
+ 
- export default function Page() {
+ export default function Page() {
-   useHook()
+   useHook()
-   const c = use(cookies());
+   const c = use(cookies());
- }
-
+ }
+ 
- export async function generateMetadata() {
+ export async function generateMetadata() {
-   await cookies()
+   await cookies()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-25

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

- Expected  - 5
+ Received  + 5

- import { cookies, type UnsafeUnwrappedCookies } from 'next/headers';
-
+ import { cookies, type UnsafeUnwrappedCookies } from 'next/headers';
+ 
- export function myFunc() {
+ export function myFunc() {
-   const c = (cookies() as unknown as UnsafeUnwrappedCookies)
+   const c = (cookies() as unknown as UnsafeUnwrappedCookies)
-   void (cookies() as unknown as UnsafeUnwrappedCookies)
+   void (cookies() as unknown as UnsafeUnwrappedCookies)
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-type-cast-01

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

- Expected  - 26
+ Received  + 26

- import React from 'react'
+ import React from 'react'
- import {
+ import {
-   headers,
+   headers,
-   cookies,
+   cookies,
-   draftMode,
+   draftMode,
-   type UnsafeUnwrappedHeaders,
+   type UnsafeUnwrappedHeaders,
-   type UnsafeUnwrappedCookies,
+   type UnsafeUnwrappedCookies,
-   type UnsafeUnwrappedDraftMode,
+   type UnsafeUnwrappedDraftMode,
- } from 'next/headers';
-
+ } from 'next/headers';
+ 
- export function MyDraftComponent() {
+ export function MyDraftComponent() {
-   if ((draftMode() as unknown as UnsafeUnwrappedDraftMode).isEnabled) {
+   if ((draftMode() as unknown as UnsafeUnwrappedDraftMode).isEnabled) {
-     return null
+     return null
-   }
-
+   }
+ 
-   return <p>page</p>
+   return <p>page</p>
- }
-
+ }
+ 
- export function MyCookiesComponent() {
+ export function MyCookiesComponent() {
-   const c = (cookies() as unknown as UnsafeUnwrappedCookies)
+   const c = (cookies() as unknown as UnsafeUnwrappedCookies)
-   return c.get('name')
+   return c.get('name')
- }
-
+ }
+ 
- export function MyHeadersComponent() {
+ export function MyHeadersComponent() {
-   const h = (headers() as unknown as UnsafeUnwrappedHeaders)
+   const h = (headers() as unknown as UnsafeUnwrappedHeaders)
-   return <p>{h.get('x-foo')}</p>
+   return <p>{h.get('x-foo')}</p>
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/async-api-type-cast-02

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

- Expected  - 28
+ Received  + 28

- import React from 'react'
+ import React from 'react'
- import { 
+ import { 
-   headers,
+   headers,
-   cookies, 
+   cookies, 
-   draftMode, 
+   draftMode, 
- } from 'next/headers'
-
+ } from 'next/headers'
+ 
- export function MyDraftComponent() {
+ export function MyDraftComponent() {
- if (/* @next-codemod-error Manually await this call and refactor the function to be async */
+ if (/* @next-codemod-error Manually await this call and refactor the function to be async */
- draftMode().isEnabled) {
+ draftMode().isEnabled) {
-     return null
+     return null
-   }
-
+   }
+ 
-   return <p>page</p>
+   return <p>page</p>
- }
-
+ }
+ 
- export function MyCookiesComponent() {
+ export function MyCookiesComponent() {
-   const c = /* @next-codemod-error Manually await this call and refactor the function to be async */
+   const c = /* @next-codemod-error Manually await this call and refactor the function to be async */
-   cookies()
+   cookies()
-   return c.get('name')
+   return c.get('name')
- }
-
+ }
+ 
- export function MyHeadersComponent() {
+ export function MyHeadersComponent() {
-   const h = /* @next-codemod-error Manually await this call and refactor the function to be async */
+   const h = /* @next-codemod-error Manually await this call and refactor the function to be async */
-   headers()
+   headers()
-   return (
+   return (
-     <p>{h.get('x-foo')}</p>
+     <p>{h.get('x-foo')}</p>
-   )
+   )
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/custom-routes-access-api-prop-01

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

- Expected  - 12
+ Received  + 12

- import { headers } from 'next/headers'
-
+ import { headers } from 'next/headers'
+ 
- export const GET = async function() {
+ export const GET = async function() {
-   await headers()
+   await headers()
- }
-
+ }
+ 
- export async function POST() {
+ export async function POST() {
-   await headers()
+   await headers()
- }
-
+ }
+ 
- export async function DELETE() {
+ export async function DELETE() {
-   await headers()
+   await headers()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/generate-metadata-access-api-prop-01

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

- Expected  - 4
+ Received  + 4

- import { headers } from 'next/headers'
-
+ import { headers } from 'next/headers'
+ 
- export async function generateMetadata() {
+ export async function generateMetadata() {
-   await headers()
+   await headers()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/generate-metadata-access-api-prop-02

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

- Expected  - 4
+ Received  + 4

- import { headers } from 'next/headers'
-
+ import { headers } from 'next/headers'
+ 
- export const generateMetadata = async function() {
+ export const generateMetadata = async function() {
-   await headers()
+   await headers()
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/generate-metadata-access-api-prop-03

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

- Expected  - 5
+ Received  + 5

- import { draftMode } from 'next/headers'
-
+ import { draftMode } from 'next/headers'
+ 
- export async function generateMetadata(props: any) {
+ export async function generateMetadata(props: any) {
-   const params = await props.params
+   const params = await props.params
-   await getMostRecentChangelog(params.slug, (await draftMode()).isEnabled)
+   await getMostRecentChangelog(params.slug, (await draftMode()).isEnabled)
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/origin-name-01-util

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

- Expected  - 5
+ Received  + 5

- import { cookies, type UnsafeUnwrappedCookies } from 'next/headers';
-
+ import { cookies, type UnsafeUnwrappedCookies } from 'next/headers';
+ 
- export default function Foo(): string {
+ export default function Foo(): string {
-   const name = (cookies() as unknown as UnsafeUnwrappedCookies).get('name')
+   const name = (cookies() as unknown as UnsafeUnwrappedCookies).get('name')
-   return name
+   return name
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

● next-async-request-api - dynamic-apis › transforms correctly next-async-request-api-dynamic-apis/origin-name-02-util

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

- Expected  - 6
+ Received  + 6

- import { cookies } from 'next/headers'
-
+ import { cookies } from 'next/headers'
+ 
- export default function Foo() {
+ export default function Foo() {
-   const name = /* @next-codemod-error Manually await this call and refactor the function to be async */
+   const name = /* @next-codemod-error Manually await this call and refactor the function to be async */
-   cookies().get('name')
+   cookies().get('name')
-   return name
+   return name
  }

  53 |
  54 |     it(`transforms correctly ${prefix}`, () => {
> 55 |       runInlineTest(
     |       ^
  56 |         transform,
  57 |         null,
  58 |         {

  at runInlineTest (../node_modules/.pnpm/[email protected]_@[email protected]_@[email protected]_/node_modules/jscodeshift/dist/testUtils.js:49:18)
  at Object.runInlineTest (../packages/next-codemod/transforms/__tests__/next-async-request-api-dynamic-apis.test.js:55:7)

pnpm test-dev-turbo test/e2e/app-dir/app-client-cache/client-cache.experimental.test.ts (turbopack) (job)

  • app dir client cache semantics (experimental staleTimes) > dynamic: 0 > should trigger a loading state before fetching the page, followed by fresh data on every subsequent navigation (DD)
  • app dir client cache semantics (experimental staleTimes) > dynamic: 0, static: 0 > should trigger a loading state before fetching the page, followed by fresh data on every subsequent navigation (DD)
Expand output

● app dir client cache semantics (experimental staleTimes) › dynamic: 0 › should trigger a loading state before fetching the page, followed by fresh data on every subsequent navigation

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Object.<anonymous> (e2e/app-dir/app-client-cache/client-cache.experimental.test.ts:27:9)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:632:17)
  at Proxy.startChain (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/app-dir/app-client-cache/client-cache.experimental.test.ts:30:12)

● app dir client cache semantics (experimental staleTimes) › dynamic: 0, static: 0 › should trigger a loading state before fetching the page, followed by fresh data on every subsequent navigation

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Object.<anonymous> (e2e/app-dir/app-client-cache/client-cache.experimental.test.ts:410:7)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:632:17)
  at Proxy.startChain (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/app-dir/app-client-cache/client-cache.experimental.test.ts:413:10)

pnpm test-start test/e2e/next-form/default/next-form-prefetch.test.ts (job)

  • app dir - form prefetching > should prefetch a loading state for the form's target (DD)
Expand output

● app dir - form prefetching › should prefetch a loading state for the form's target

Intercepted request for 'http://localhost:46829/search?query=my+search&_rsc=13g91' was not resolved within 5000ms

  253 |   return new Promise<never>((_, reject) =>
  254 |     AbortSignal.timeout(duration).addEventListener('abort', () =>
> 255 |       reject(new Error(message))
      |              ^
  256 |     )
  257 |   )
  258 | }

  at EventTarget.<anonymous> (e2e/next-form/default/next-form-prefetch.test.ts:255:14)

● app dir - form prefetching › should prefetch a loading state for the form's target

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/next-form/default/next-form-prefetch.test.ts:56:26)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/next-form/default/next-form-prefetch.test.ts:56:58)

pnpm test-dev test/e2e/next-form/default/app-dir.test.ts (job)

  • next-form - app dir > should soft-navigate on submit and show the prefetched loading state (DD)
Expand output

● next-form - app dir › should soft-navigate on submit and show the prefetched loading state

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/next-form/default/shared-tests.util.ts:37:25)

pnpm test-start-turbo test/e2e/app-dir/router-autoscroll/router-autoscroll.test.ts (turbopack) (job)

  • router autoscrolling on navigation > bugs > Should apply scroll when loading.js is used (DD)
Expand output

● router autoscrolling on navigation › bugs › Should apply scroll when loading.js is used

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#loading-component') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Object.<anonymous> (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:215:7)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:632:17)
  at Proxy.startChain (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/app-dir/router-autoscroll/router-autoscroll.test.ts:218:10)

pnpm test-start-turbo test/e2e/app-dir/app-prefetch/prefetching.test.ts (turbopack) (job)

  • next-form - app dir > should soft-navigate on submit and show the prefetched loading state (DD)
Expand output

● next-form - app dir › should soft-navigate on submit and show the prefetched loading state

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/next-form/default/shared-tests.util.ts:37:25)

pnpm test-start-turbo test/e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts (turbopack) (job)

  • searchparams-reuse-loading > should re-use loading from "full" prefetch for param-full URL when navigating to param-less route (DD)
  • searchparams-reuse-loading > should re-use loading from "full" prefetch for param-less URL when navigating to param-full route (DD)
  • searchparams-reuse-loading > should re-use loading from "full" prefetch for param-full URL when navigating to param-full route (DD)
  • searchparams-reuse-loading > With Middleware > should correctly return different RSC data for full prefetches with different searchParam values (DD)
  • searchparams-reuse-loading > Without Middleware > should correctly return different RSC data for full prefetches with different searchParam values (DD)
Expand output

● searchparams-reuse-loading › Without Middleware › should correctly return different RSC data for full prefetches with different searchParam values

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:405:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:425:17)
  at Object.elementById (e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts:272:30)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts:272:53)

● searchparams-reuse-loading › With Middleware › should correctly return different RSC data for full prefetches with different searchParam values

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:405:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:425:17)
  at Object.elementById (e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts:272:30)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts:272:53)

● searchparams-reuse-loading › should re-use loading from "full" prefetch for param-full URL when navigating to param-less route

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:405:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:425:17)
  at Object.elementById (e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts:384:28)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts:384:51)

● searchparams-reuse-loading › should re-use loading from "full" prefetch for param-less URL when navigating to param-full route

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:405:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:425:17)
  at Object.elementById (e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts:470:28)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts:470:51)

● searchparams-reuse-loading › should re-use loading from "full" prefetch for param-full URL when navigating to param-full route

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#loading') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:405:17)
  at Playwright.elementByCss [as elementById] (lib/browsers/playwright.ts:425:17)
  at Object.elementById (e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts:556:28)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts:556:51)

pnpm test-dev-turbo test/e2e/app-dir/parallel-routes-and-interception/parallel-routes-and-interception.test.ts (turbopack) (job)

  • parallel-routes-and-interception (trailingSlash: false) > parallel routes > should handle a loading state (DD)
  • parallel-routes-and-interception (trailingSlash: true) > parallel routes > should handle a loading state (DD)
Expand output

● parallel-routes-and-interception (trailingSlash: true) › parallel routes › should handle a loading state

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#loading-page') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Object.<anonymous> (e2e/app-dir/parallel-routes-and-interception/parallel-routes-and-interception.test.ts:476:11)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:632:17)
  at Proxy.startChain (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/app-dir/parallel-routes-and-interception/parallel-routes-and-interception.test.ts:481:14)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/parallel-routes-and-interception/parallel-routes-and-interception.test.ts:482:14)

● parallel-routes-and-interception (trailingSlash: false) › parallel routes › should handle a loading state

page.waitForSelector: Timeout 10000ms exceeded.
Call log:
  - waiting for locator('#loading-page') to be visible

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Object.<anonymous> (e2e/app-dir/parallel-routes-and-interception/parallel-routes-and-interception.test.ts:476:11)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:632:17)
  at Proxy.startChain (lib/browsers/playwright.ts:520:17)
  at Object.waitForElementByCss (e2e/app-dir/parallel-routes-and-interception/parallel-routes-and-interception.test.ts:481:14)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/parallel-routes-and-interception/parallel-routes-and-interception.test.ts:482:14)

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Dec 27, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary acdlite/next.js pass-loading-as-prop Change
buildDuration 17.5s 17.4s N/A
buildDurationCached 13.7s 10.8s N/A
nodeModulesSize 456 MB 457 MB ⚠️ +218 kB
nextStartRea..uration (ms) 717ms 727ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary acdlite/next.js pass-loading-as-prop Change
4765.HASH.js gzip 169 B 169 B
6566-HASH.js gzip 5.4 kB 5.38 kB N/A
7740-HASH.js gzip 51.2 kB 51 kB N/A
8258-HASH.js gzip 4.47 kB 4.48 kB N/A
b0b1acf2-HASH.js gzip 62.3 kB 62.3 kB N/A
framework-HASH.js gzip 59.7 kB 59.7 kB N/A
main-app-HASH.js gzip 255 B 252 B N/A
main-HASH.js gzip 38.7 kB 38.8 kB ⚠️ +120 B
webpack-HASH.js gzip 1.69 kB 1.69 kB
Overall change 40.5 kB 40.6 kB ⚠️ +120 B
Legacy Client Bundles (polyfills)
vercel/next.js canary acdlite/next.js pass-loading-as-prop 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 acdlite/next.js pass-loading-as-prop Change
_app-HASH.js gzip 193 B 192 B N/A
_error-HASH.js gzip 181 B 182 B N/A
css-HASH.js gzip 335 B 336 B N/A
dynamic-HASH.js gzip 1.81 kB 1.8 kB N/A
edge-ssr-HASH.js gzip 254 B 256 B N/A
head-HASH.js gzip 350 B 350 B
hooks-HASH.js gzip 385 B 383 B N/A
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 259 B
link-HASH.js gzip 2.5 kB 2.5 kB N/A
routerDirect..HASH.js gzip 320 B 317 B N/A
script-HASH.js gzip 386 B 384 B N/A
withRouter-HASH.js gzip 315 B 314 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 1.29 kB 1.29 kB
Client Build Manifests
vercel/next.js canary acdlite/next.js pass-loading-as-prop Change
_buildManifest.js gzip 737 B 735 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary acdlite/next.js pass-loading-as-prop Change
index.html gzip 522 B 524 B N/A
link.html gzip 537 B 538 B N/A
withRouter.html gzip 519 B 520 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary acdlite/next.js pass-loading-as-prop Change
edge-ssr.js gzip 125 kB 125 kB N/A
page.js gzip 237 kB 238 kB ⚠️ +279 B
Overall change 237 kB 238 kB ⚠️ +279 B
Middleware size Overall increase ⚠️
vercel/next.js canary acdlite/next.js pass-loading-as-prop Change
middleware-b..fest.js gzip 657 B 653 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 32.7 kB 33 kB ⚠️ +378 B
edge-runtime..pack.js gzip 846 B 846 B
Overall change 33.5 kB 33.9 kB ⚠️ +378 B
Next Runtimes Overall increase ⚠️
vercel/next.js canary acdlite/next.js pass-loading-as-prop Change
app-page-exp...dev.js gzip 301 kB 302 kB ⚠️ +341 B
app-page-exp..prod.js gzip 156 kB 156 kB ⚠️ +134 B
app-page-tur...dev.js gzip 301 kB 301 kB ⚠️ +342 B
app-page-tur..prod.js gzip 156 kB 156 kB ⚠️ +133 B
app-page-tur...dev.js gzip 298 kB 298 kB ⚠️ +349 B
app-page-tur..prod.js gzip 154 kB 154 kB ⚠️ +126 B
app-page.run...dev.js gzip 298 kB 298 kB ⚠️ +346 B
app-page.run..prod.js gzip 154 kB 154 kB ⚠️ +124 B
app-route-ex...dev.js gzip 68.6 kB 68.6 kB N/A
app-route-ex..prod.js gzip 47.4 kB 47.4 kB N/A
app-route-tu...dev.js gzip 68.6 kB 68.6 kB N/A
app-route-tu..prod.js gzip 47.5 kB 47.5 kB N/A
app-route-tu...dev.js gzip 68.2 kB 68.2 kB N/A
app-route-tu..prod.js gzip 47.2 kB 47.2 kB N/A
app-route.ru...dev.js gzip 68.2 kB 68.2 kB N/A
app-route.ru..prod.js gzip 47.2 kB 47.2 kB N/A
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 41 kB 41 kB
pages-api-tu..prod.js gzip 31.1 kB 31.1 kB
pages-api.ru...dev.js gzip 41 kB 41 kB
pages-api.ru..prod.js gzip 31.1 kB 31.1 kB
pages-turbo....dev.js gzip 50.6 kB 50.5 kB N/A
pages-turbo...prod.js gzip 38.1 kB 38 kB N/A
pages.runtim...dev.js gzip 50.6 kB 50.4 kB N/A
pages.runtim..prod.js gzip 38.1 kB 38 kB N/A
server.runti..prod.js gzip 59.8 kB 59.8 kB
Overall change 2.02 MB 2.03 MB ⚠️ +1.9 kB
build cache Overall increase ⚠️
vercel/next.js canary acdlite/next.js pass-loading-as-prop Change
0.pack gzip 3.61 MB 3.63 MB ⚠️ +14.7 kB
index.pack gzip 99.2 kB 99.2 kB N/A
Overall change 3.61 MB 3.63 MB ⚠️ +14.7 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -611,35 +611,35 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-8312816003c836ca.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-0eb0f30aae464b15.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-108d239ccbd01df3.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-7503b65793aeda9f.js",
     ],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-c7999ca7b397642c.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-14b4ec2febaa617d.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-1bf1b522b071e22a.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-24891a28ecfaf61d.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-9f01876339e3437b.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-f68757662e8cc4b5.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-edae0400cfdbe933.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-c11320a657ec666d.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-25d6de8fe25c2526.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-34de3af84d413de3.js"],
     "/image": [
-      "static\u002Fchunks\u002F8258-9768ab794e68b1dc.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-174112e04c93dfd7.js",
+      "static\u002Fchunks\u002F6316-07d5277e1ed2f1f9.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-7218f8bad067d350.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-69a06d3260afde67.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-fb9703d62b3bdf85.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-eab8cdd319b4a9be.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-7a0b11345ff468cf.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-ae5bd9e9cf17793f.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-3fa0815377002305.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-b277df764694ea2e.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-608a306c0a09e667.js",
     ],
     sortedPages: [
       "\u002F",
Diff for css-HASH.js
@@ -1,31 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9813],
   {
-    /***/ 4131: /***/ (module) => {
-      // extracted by mini-css-extract-plugin
-      module.exports = { helloWorld: "css_helloWorld__aUdUq" };
-
-      /***/
-    },
-
-    /***/ 6015: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/css",
-        function () {
-          return __webpack_require__(6854);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 6854: /***/ (
+    /***/ 1048: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -39,7 +15,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1329);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4131);
+        __webpack_require__(9541);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           _css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -58,13 +34,37 @@
 
       /***/
     },
+
+    /***/ 4641: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/css",
+        function () {
+          return __webpack_require__(1048);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 9541: /***/ (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__(6015)
+      __webpack_exec__(4641)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for dynamic-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 946: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(5104);
-
-      /***/
-    },
-
-    /***/ 1036: /***/ (
+    /***/ 1266: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1329);
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(946);
+        __webpack_require__(1776);
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_dynamic__WEBPACK_IMPORTED_MODULE_1__
@@ -35,12 +25,12 @@
       const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
         () =>
           __webpack_require__
-            .e(/* import() */ 4765)
-            .then(__webpack_require__.bind(__webpack_require__, 4765))
+            .e(/* import() */ 9715)
+            .then(__webpack_require__.bind(__webpack_require__, 9715))
             .then((mod) => mod.Hello),
         {
           loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 4765],
+            webpack: () => [/*require.resolve*/ 9715],
           },
         }
       );
@@ -67,7 +57,44 @@
       /***/
     },
 
-    /***/ 3399: /***/ (
+    /***/ 1776: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(7760);
+
+      /***/
+    },
+
+    /***/ 3749: /***/ (
+      __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__(7197)
+      );
+      const LoadableContext = _react.default.createContext(null);
+      if (false) {
+      } //# sourceMappingURL=loadable-context.shared-runtime.js.map
+
+      /***/
+    },
+
+    /***/ 6535: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -109,7 +136,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(7197)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(9829);
+      const _loadablecontextsharedruntime = __webpack_require__(3749);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -342,7 +369,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 5104: /***/ (module, exports, __webpack_require__) => {
+    /***/ 7760: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -375,7 +402,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
         __webpack_require__(7197)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(3399)
+        __webpack_require__(6535)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -475,7 +502,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 8695: /***/ (
+    /***/ 9585: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -483,7 +510,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/dynamic",
         function () {
-          return __webpack_require__(1036);
+          return __webpack_require__(1266);
         },
       ]);
       if (false) {
@@ -491,40 +518,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
 
       /***/
     },
-
-    /***/ 9829: /***/ (
-      __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__(7197)
-      );
-      const LoadableContext = _react.default.createContext(null);
-      if (false) {
-      } //# sourceMappingURL=loadable-context.shared-runtime.js.map
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(8695)
+      __webpack_exec__(9585)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 361: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(721);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 721: /***/ (
+    /***/ 5163: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -33,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1329);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(5051);
+        __webpack_require__(7269);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -67,12 +50,29 @@
       /***/
     },
 
-    /***/ 5051: /***/ (
+    /***/ 7269: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4981);
+      module.exports = __webpack_require__(2053);
+
+      /***/
+    },
+
+    /***/ 8563: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(5163);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
@@ -82,7 +82,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(361)
+      __webpack_exec__(8563)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for hooks-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9804],
   {
-    /***/ 1705: /***/ (
+    /***/ 1271: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/hooks",
+        function () {
+          return __webpack_require__(2631);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 2631: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -59,30 +76,13 @@
 
       /***/
     },
-
-    /***/ 8637: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/hooks",
-        function () {
-          return __webpack_require__(1705);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(8637)
+      __webpack_exec__(1271)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for image-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2983],
   {
-    /***/ 798: /***/ (
+    /***/ 565: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/image",
+        function () {
+          return __webpack_require__(7813);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7813: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -18,8 +35,8 @@
 
       // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
       var jsx_runtime = __webpack_require__(1329);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@[email protected][email protected][email protected]/node_modules/next/image.js
-      var next_image = __webpack_require__(8258);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@[email protected][email protected][email protected]/node_modules/next/image.js
+      var next_image = __webpack_require__(6316);
       var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png
       /* harmony default export */ const nextjs = {
         src: "/_next/static/media/nextjs.cae0b805.png",
@@ -48,30 +65,13 @@
 
       /***/
     },
-
-    /***/ 7643: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/image",
-        function () {
-          return __webpack_require__(798);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
-    /******/ __webpack_require__.O(0, [8258, 636, 6593, 8792], () =>
-      __webpack_exec__(7643)
+    /******/ __webpack_require__.O(0, [6316, 636, 6593, 8792], () =>
+      __webpack_exec__(565)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,43 +1,36 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 4183: /***/ (module, exports, __webpack_require__) => {
+    /***/ 443: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(2457);
+
+      /***/
+    },
+
+    /***/ 2185: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "getDomainLocale", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return getDomainLocale;
+          return errorOnce;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(8887);
-      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
+      let errorOnce = (_) => {};
+      if (false) {
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
 
-    /***/ 5049: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2457: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -64,17 +57,17 @@
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(7197)
       );
-      const _resolvehref = __webpack_require__(3575);
-      const _islocalurl = __webpack_require__(4135);
-      const _formaturl = __webpack_require__(3050);
-      const _utils = __webpack_require__(6864);
-      const _addlocale = __webpack_require__(1789);
-      const _routercontextsharedruntime = __webpack_require__(1778);
-      const _useintersection = __webpack_require__(7210);
-      const _getdomainlocale = __webpack_require__(4183);
-      const _addbasepath = __webpack_require__(6518);
-      const _usemergedref = __webpack_require__(9011);
-      const _erroronce = __webpack_require__(5193);
+      const _resolvehref = __webpack_require__(5687);
+      const _islocalurl = __webpack_require__(7127);
+      const _formaturl = __webpack_require__(58);
+      const _utils = __webpack_require__(2080);
+      const _addlocale = __webpack_require__(5709);
+      const _routercontextsharedruntime = __webpack_require__(4770);
+      const _useintersection = __webpack_require__(3290);
+      const _getdomainlocale = __webpack_require__(4615);
+      const _addbasepath = __webpack_require__(8422);
+      const _usemergedref = __webpack_require__(9667);
+      const _erroronce = __webpack_require__(2185);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -453,82 +446,7 @@
       /***/
     },
 
-    /***/ 5193: /***/ (__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
-
-      /***/
-    },
-
-    /***/ 5529: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(5049);
-
-      /***/
-    },
-
-    /***/ 6887: /***/ (
-      __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__(1329);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(5529);
-      /* 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;
-
-      /***/
-    },
-
-    /***/ 7210: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3290: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -541,7 +459,7 @@
         },
       });
       const _react = __webpack_require__(7197);
-      const _requestidlecallback = __webpack_require__(1785);
+      const _requestidlecallback = __webpack_require__(6809);
       const hasIntersectionObserver =
         typeof IntersectionObserver === "function";
       const observers = new Map();
@@ -653,7 +571,106 @@
       /***/
     },
 
-    /***/ 9011: /***/ (module, exports, __webpack_require__) => {
+    /***/ 4615: /***/ (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__(903);
+      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
+
+      /***/
+    },
+
+    /***/ 6745: /***/ (
+      __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__(1329);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(443);
+      /* 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;
+
+      /***/
+    },
+
+    /***/ 7595: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(6745);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 9667: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -730,30 +747,13 @@
 
       /***/
     },
-
-    /***/ 9297: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(6887);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(9297)
+      __webpack_exec__(7595)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 1576: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(5704);
-
-      /***/
-    },
-
-    /***/ 7881: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/routerDirect",
-        function () {
-          return __webpack_require__(9851);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 9851: /***/ (
+    /***/ 3401: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1329);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1576);
+        __webpack_require__(6702);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -62,13 +35,40 @@
 
       /***/
     },
+
+    /***/ 4787: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/routerDirect",
+        function () {
+          return __webpack_require__(3401);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 6702: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(728);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(7881)
+      __webpack_exec__(4787)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 2777: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(9272);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8662: /***/ (
+    /***/ 6868: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4550);
+      module.exports = __webpack_require__(1190);
 
       /***/
     },
 
-    /***/ 9272: /***/ (
+    /***/ 7478: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1329);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(8662);
+        __webpack_require__(6868);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -75,13 +58,30 @@
 
       /***/
     },
+
+    /***/ 7659: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(7478);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2777)
+      __webpack_exec__(7659)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 1576: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(5704);
-
-      /***/
-    },
-
-    /***/ 8478: /***/ (
+    /***/ 2528: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1329);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1576);
+        __webpack_require__(6702);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -45,7 +35,17 @@
       /***/
     },
 
-    /***/ 9505: /***/ (
+    /***/ 6702: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(728);
+
+      /***/
+    },
+
+    /***/ 9763: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -53,7 +53,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/withRouter",
         function () {
-          return __webpack_require__(8478);
+          return __webpack_require__(2528);
         },
       ]);
       if (false) {
@@ -67,7 +67,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(9505)
+      __webpack_exec__(9763)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 6566-HASH.js

Diff too large to display

Diff for 7740-HASH.js
failed to diff
Diff for 8258-HASH.js

Diff too large to display

Diff for b0b1acf2-HASH.js
@@ -1,13 +1,13 @@
 "use strict";
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
-  [9962],
+  [4627],
   {
-    /***/ 8865: /***/ (
+    /***/ 9419: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
     ) => {
-      /* provided dependency */ var process = __webpack_require__(5806);
+      /* provided dependency */ var process = __webpack_require__(6280);
       /**
        * @license React
        * react-dom-client.production.js
@@ -22,9 +22,9 @@
  Modernizr 3.0.0pre (Custom Build) | MIT
 */
 
-      var Scheduler = __webpack_require__(1887),
-        React = __webpack_require__(6694),
-        ReactDOM = __webpack_require__(1059);
+      var Scheduler = __webpack_require__(1057),
+        React = __webpack_require__(8084),
+        ReactDOM = __webpack_require__(4725);
       function formatProdErrorMessage(code) {
         var url = "https://react.dev/errors/" + code;
         if (1 < arguments.length) {
@@ -14151,6 +14151,16 @@
           ? actionProp
           : sanitizeURL("" + actionProp);
       }
+      function createFormDataWithSubmitter(form, submitter) {
+        var temp = submitter.ownerDocument.createElement("input");
+        temp.name = submitter.name;
+        temp.value = submitter.value;
+        form.id && temp.setAttribute("form", form.id);
+        submitter.parentNode.insertBefore(temp, submitter);
+        form = new FormData(form);
+        temp.parentNode.removeChild(temp);
+        return form;
+      }
       function extractEvents$1(
         dispatchQueue,
         domEventName,
@@ -14189,7 +14199,12 @@
                 listener: function () {
                   if (nativeEvent.defaultPrevented) {
                     if (0 !== currentEventTransitionLane) {
-                      var formData = new FormData(nativeEventTarget, submitter);
+                      var formData = submitter
+                        ? createFormDataWithSubmitter(
+                            nativeEventTarget,
+                            submitter
+                          )
+                        : new FormData(nativeEventTarget);
                       startHostTransition(
                         maybeTargetInst,
                         {
@@ -14205,7 +14220,12 @@
                   } else
                     "function" === typeof action &&
                       (event.preventDefault(),
-                      (formData = new FormData(nativeEventTarget, submitter)),
+                      (formData = submitter
+                        ? createFormDataWithSubmitter(
+                            nativeEventTarget,
+                            submitter
+                          )
+                        : new FormData(nativeEventTarget)),
                       startHostTransition(
                         maybeTargetInst,
                         {
@@ -19118,14 +19138,14 @@
       };
       var isomorphicReactPackageVersion$jscomp$inline_2040 = React.version;
       if (
-        "19.3.0-canary-65eec428-20251218" !==
+        "19.3.0-canary-b45bb335-20251211" !==
         isomorphicReactPackageVersion$jscomp$inline_2040
       )
         throw Error(
           formatProdErrorMessage(
             527,
             isomorphicReactPackageVersion$jscomp$inline_2040,
-            "19.3.0-canary-65eec428-20251218"
+            "19.3.0-canary-b45bb335-20251211"
           )
         );
       ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -19147,10 +19167,10 @@
       };
       var internals$jscomp$inline_2628 = {
         bundleType: 0,
-        version: "19.3.0-canary-65eec428-20251218",
+        version: "19.3.0-canary-b45bb335-20251211",
         rendererPackageName: "react-dom",
         currentDispatcherRef: ReactSharedInternals,
-        reconcilerVersion: "19.3.0-canary-65eec428-20251218",
+        reconcilerVersion: "19.3.0-canary-b45bb335-20251211",
       };
       if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
         var hook$jscomp$inline_2629 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -19252,7 +19272,7 @@
         listenToAllSupportedEvents(container);
         return new ReactDOMHydrationRoot(initialChildren);
       };
-      exports.version = "19.3.0-canary-65eec428-20251218";
+      exports.version = "19.3.0-canary-b45bb335-20251211";
 
       /***/
     },
Diff for main-HASH.js

Diff too large to display

Diff for main-app-HASH.js
@@ -1,64 +1,64 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4977],
   {
-    /***/ 2584: /***/ () => {
-      /* (ignored) */
-      /***/
-    },
-
-    /***/ 7527: /***/ (
+    /***/ 5691: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6596, 23)
+        __webpack_require__.t.bind(__webpack_require__, 8958, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6101, 23)
+        __webpack_require__.t.bind(__webpack_require__, 711, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7719, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7045, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 3524, 23)
+        __webpack_require__.t.bind(__webpack_require__, 266, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6044, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3438, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 344, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7494, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6577, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4627, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7518, 23)
+        __webpack_require__.t.bind(__webpack_require__, 924, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 215, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4766, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 8782, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5564, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 3205, 23)
+        __webpack_require__.t.bind(__webpack_require__, 8095, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 576)
+        __webpack_require__.bind(__webpack_require__, 8350)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 766, 23)
+        __webpack_require__.t.bind(__webpack_require__, 8128, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2283, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5865, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1257, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4103, 23)
       );
 
       /***/
     },
+
+    /***/ 6170: /***/ () => {
+      /* (ignored) */
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
@@ -66,8 +66,8 @@
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(
       0,
-      [9962, 7740],
-      () => (__webpack_exec__(7620), __webpack_exec__(7527))
+      [4627, 8196],
+      () => (__webpack_exec__(1314), __webpack_exec__(5691))
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for app-page-exp..ntime.dev.js
failed to diff
Diff for app-page-exp..time.prod.js

Diff too large to display

Diff for app-page-tur..ntime.dev.js
failed to diff
Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page-tur..ntime.dev.js
failed to diff
Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js
failed to diff
Diff for app-page.runtime.prod.js

Diff too large to display

Diff for pages-turbo...ntime.dev.js

Diff too large to display

Diff for pages-turbo...time.prod.js

Diff too large to display

Diff for pages.runtime.dev.js

Diff too large to display

Diff for pages.runtime.prod.js

Diff too large to display

Diff for server.runtime.prod.js

Diff too large to display

Commit: 7a4a214

@acdlite acdlite force-pushed the pass-loading-as-prop branch from 5362fc4 to 1926813 Compare December 27, 2025 03:43
Removes the `loading` as a separate field in the server response
payload. Instead, it is passed as a prop to LayoutRouter, similar to
how the other boundary types (NotFound, et al) work.

This simplifies much of the logic on the client because we no longer
need to track `loading` separately from the rest of the segment data.
@acdlite acdlite force-pushed the pass-loading-as-prop branch from 1926813 to 7a4a214 Compare December 27, 2025 03:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants