Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

decouple the public API for custom servers from internals #73021

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

Conversation

lubieowoce
Copy link
Member

@lubieowoce lubieowoce commented Nov 20, 2024

the typescript types for NextCustomServer currently leak a lot implementation details from NextNodeServer into the public API (in methods like render404). i think we shouldn't do that!

tbh, this "public API" is undocumented, but it's been there for ages, so i guess in a sense we should avoid breaking it until we wholly deprecate it. which i guess we should also do. so this PR does two things

  1. copy-paste the current types from NextNodeServer into NextWrapperServer, freezing it in time and isolating it from changes
  2. adding a bunch of @deprecated annotations to methods like render404 to make people aware that we don't wanna support this forever

Copy link
Member Author

lubieowoce commented Nov 20, 2024

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

@lubieowoce lubieowoce changed the title separate public interface from internal BaseServer types decouple the public API for custom servers from internals Nov 20, 2024
@ijjk
Copy link
Member

ijjk commented Nov 20, 2024

Failing test suites

Commit: 6203343

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

  • app-dir static/dynamic handling > should use auto no cache when no fetch config
  • app-dir static/dynamic handling > should correctly handle "default" cache statuses
  • app-dir static/dynamic handling > should still cache even though the traceparent header was different
  • app-dir static/dynamic handling > should warn for too many cache tags
  • app-dir static/dynamic handling > should propagate unstable_cache tags correctly
  • app-dir static/dynamic handling > should infer a fetchCache of force-no-store when force-dynamic is used
  • app-dir static/dynamic handling > should infer a fetch cache of "force-cache" when force-dynamic is used on a fetch with revalidate
  • app-dir static/dynamic handling > force-dynamic should supercede a "default" cache value
  • app-dir static/dynamic handling > fetchCache config should supercede dynamic config when force-dynamic is used
  • app-dir static/dynamic handling > fetch cache should supercede dynamic config when force-dynamic is used
  • app-dir static/dynamic handling > should honor force-static with fetch cache: no-store correctly
  • app-dir static/dynamic handling > should correctly include headers instance in cache key
  • app-dir static/dynamic handling > unstable-cache should work in pages/unstable-cache-node
  • app-dir static/dynamic handling > unstable-cache should work in pages/unstable-cache-edge
  • app-dir static/dynamic handling > unstable-cache should work in pages/api/unstable-cache-node
  • app-dir static/dynamic handling > unstable-cache should work in pages/api/unstable-cache-edge
  • app-dir static/dynamic handling > should not have cache tags header for non-minimal mode
  • app-dir static/dynamic handling > should correctly skip caching POST fetch for POST handler
  • app-dir static/dynamic handling > it should revalidate tag correctly with edge route handler
  • app-dir static/dynamic handling > it should revalidate tag correctly with node route handler
  • app-dir static/dynamic handling > should not revalidate / when revalidate is not used
  • app-dir static/dynamic handling > it should revalidate correctly with edge route handler
  • app-dir static/dynamic handling > it should revalidate correctly with node route handler
  • app-dir static/dynamic handling > should revalidate all fetches during on-demand revalidate
  • app-dir static/dynamic handling > should correctly handle fetchCache = "force-no-store"
  • app-dir static/dynamic handling > should revalidate correctly with config and fetch revalidate
  • app-dir static/dynamic handling > should not cache non-ok statusCode
  • app-dir static/dynamic handling > should not encode dynamic parameters as search parameters in RSC data
  • app-dir static/dynamic handling > should have correct prerender-manifest entries
  • app-dir static/dynamic handling > should output debug info for static bailouts
  • app-dir static/dynamic handling > should log fetch metrics to the diagnostics directory
  • app-dir static/dynamic handling > should correctly error and not update cache for ISR
  • app-dir static/dynamic handling > should stream properly for /stale-cache-serving/app-page
  • app-dir static/dynamic handling > should stream properly for /stale-cache-serving/route-handler
  • app-dir static/dynamic handling > should stream properly for /stale-cache-serving-edge/app-page
  • app-dir static/dynamic handling > should stream properly for /stale-cache-serving-edge/route-handler
  • app-dir static/dynamic handling > should correctly handle statusCode with notFound + ISR
  • app-dir static/dynamic handling > should cache correctly for fetchCache = default-cache
  • app-dir static/dynamic handling > should cache correctly when accessing search params opts into dynamic rendering
  • app-dir static/dynamic handling > should cache correctly for fetchCache = force-cache
  • app-dir static/dynamic handling > should cache correctly for cache: "force-cache" and "revalidate"
  • app-dir static/dynamic handling > should cache correctly for cache: no-store
  • app-dir static/dynamic handling > should not error with dynamic server usage with force-static
  • app-dir static/dynamic handling > should produce response with url from fetch
  • app-dir static/dynamic handling > should properly error when dynamic = "error" page uses dynamic
  • app-dir static/dynamic handling > should skip cache in draft mode
  • app-dir static/dynamic handling > should handle partial-gen-params with default dynamicParams correctly
  • app-dir static/dynamic handling > should handle partial-gen-params with layout dynamicParams = false correctly
  • app-dir static/dynamic handling > should handle partial-gen-params with page dynamicParams = false correctly
  • app-dir static/dynamic handling > should honor fetch cache in generateStaticParams
  • app-dir static/dynamic handling > should honor fetch cache correctly
  • app-dir static/dynamic handling > should honor fetch cache correctly (edge)
  • app-dir static/dynamic handling > should cache correctly with authorization header and revalidate
  • app-dir static/dynamic handling > should skip fetch cache when an authorization header is present after dynamic usage
  • app-dir static/dynamic handling > should skip fetch cache when accessing request properties
  • app-dir static/dynamic handling > should not cache correctly with POST method request init
  • app-dir static/dynamic handling > should cache correctly with post method and revalidate
  • app-dir static/dynamic handling > should cache correctly with post method and revalidate edge
  • app-dir static/dynamic handling > should cache correctly with POST method and revalidate
  • app-dir static/dynamic handling > should cache correctly with cookie header and revalidate
  • app-dir static/dynamic handling > should cache correctly with utf8 encoding
  • app-dir static/dynamic handling > should cache correctly with utf8 encoding edge
  • app-dir static/dynamic handling > should cache correctly handle JSON body
  • app-dir static/dynamic handling > should not throw Dynamic Server Usage error when using generateStaticParams with draftMode
  • app-dir static/dynamic handling > should force SSR correctly for headers usage
  • app-dir static/dynamic handling > should allow dynamic routes to access cookies
  • app-dir static/dynamic handling > should not error with generateStaticParams and dynamic data
  • app-dir static/dynamic handling > should not error with force-dynamic and catch-all routes
  • app-dir static/dynamic handling > should not error with generateStaticParams and authed data on revalidate
  • app-dir static/dynamic handling > should honor dynamic = "force-static" correctly
  • app-dir static/dynamic handling > should honor dynamic = "force-static" correctly (lazy)
  • app-dir static/dynamic handling > should handle dynamicParams: false correctly
  • app-dir static/dynamic handling > should work with forced dynamic path
  • app-dir static/dynamic handling > should work with dynamic path no generateStaticParams
  • app-dir static/dynamic handling > should handle dynamicParams: true correctly
  • app-dir static/dynamic handling > should navigate to static path correctly
  • app-dir static/dynamic handling > should ssr dynamically when detected automatically with fetch cache option
  • app-dir static/dynamic handling > should render not found pages correctly and fallback to the default one
  • app-dir static/dynamic handling > should ssr dynamically when forced via config
  • app-dir static/dynamic handling > should keep querystring on static page
  • app-dir static/dynamic handling > should build dynamic param with edge runtime correctly
  • app-dir static/dynamic handling > Incremental cache limits > should load data only at build time even if response data size is greater than 2MB and FetchCache is possible
  • app-dir static/dynamic handling > unstable_cache > should retrieve the same value on second request
  • app-dir static/dynamic handling > unstable_cache > should bypass cache in draft mode
  • app-dir static/dynamic handling > unstable_cache > should not cache new result in draft mode
  • app-dir static/dynamic handling > unstable_cache > should not error when retrieving the value undefined
  • app-dir static/dynamic handling > unstable_cache > should not error when calling a fetch no-store
  • app-dir static/dynamic handling > unstable_cache > should not error when calling a fetch no-cache
  • app-dir static/dynamic handling > unstable_noStore > should opt-out of static optimization
  • app-dir static/dynamic handling > unstable_noStore > should not opt-out of static optimization when used in next/cache
  • app-dir static/dynamic handling > usePathname > should have the correct values
  • app-dir static/dynamic handling > usePathname > should have values from canonical url on rewrite
  • app-dir static/dynamic handling > useSearchParams > client > should bailout to client rendering - with suspense boundary
  • app-dir static/dynamic handling > useSearchParams > client > should have values from canonical url on rewrite
  • app-dir static/dynamic handling > useSearchParams > server response > should bailout to client rendering - with suspense boundary
Expand output

● app-dir static/dynamic handling › should use auto no cache when no fetch config

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should use auto no cache when no fetch config

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should correctly handle "default" cache statuses

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should correctly handle "default" cache statuses

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should still cache even though the traceparent header was different

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should still cache even though the traceparent header was different

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should warn for too many cache tags

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should warn for too many cache tags

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should propagate unstable_cache tags correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should propagate unstable_cache tags correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should infer a fetchCache of force-no-store when force-dynamic is used

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should infer a fetchCache of force-no-store when force-dynamic is used

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should infer a fetch cache of "force-cache" when force-dynamic is used on a fetch with revalidate

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should infer a fetch cache of "force-cache" when force-dynamic is used on a fetch with revalidate

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › force-dynamic should supercede a "default" cache value

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › force-dynamic should supercede a "default" cache value

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › fetchCache config should supercede dynamic config when force-dynamic is used

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › fetchCache config should supercede dynamic config when force-dynamic is used

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › fetch cache should supercede dynamic config when force-dynamic is used

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › fetch cache should supercede dynamic config when force-dynamic is used

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should honor force-static with fetch cache: no-store correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should honor force-static with fetch cache: no-store correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should correctly include headers instance in cache key

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should correctly include headers instance in cache key

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should correctly de-dupe fetch without next cache /react-fetch-deduping-node

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should correctly de-dupe fetch without next cache /react-fetch-deduping-node

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should correctly de-dupe fetch without next cache /react-fetch-deduping-edge

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should correctly de-dupe fetch without next cache /react-fetch-deduping-edge

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable-cache should work in pages/unstable-cache-node

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable-cache should work in pages/unstable-cache-node

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable-cache should work in pages/unstable-cache-edge

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable-cache should work in pages/unstable-cache-edge

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable-cache should work in pages/api/unstable-cache-node

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable-cache should work in pages/api/unstable-cache-node

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable-cache should work in pages/api/unstable-cache-edge

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable-cache should work in pages/api/unstable-cache-edge

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should not have cache tags header for non-minimal mode

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should not have cache tags header for non-minimal mode

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should correctly skip caching POST fetch for POST handler

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should correctly skip caching POST fetch for POST handler

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › it should revalidate tag correctly with edge route handler

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › it should revalidate tag correctly with edge route handler

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › it should revalidate tag correctly with node route handler

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › it should revalidate tag correctly with node route handler

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should not revalidate / when revalidate is not used

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should not revalidate / when revalidate is not used

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › it should revalidate correctly with edge route handler

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › it should revalidate correctly with edge route handler

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › it should revalidate correctly with node route handler

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › it should revalidate correctly with node route handler

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should revalidate all fetches during on-demand revalidate

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should revalidate all fetches during on-demand revalidate

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should correctly handle fetchCache = "force-no-store"

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should correctly handle fetchCache = "force-no-store"

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should revalidate correctly with config and fetch revalidate

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should revalidate correctly with config and fetch revalidate

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should not cache non-ok statusCode

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should not cache non-ok statusCode

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should not encode dynamic parameters as search parameters in RSC data

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should not encode dynamic parameters as search parameters in RSC data

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should output HTML/RSC files for static paths

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should output HTML/RSC files for static paths

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should have correct prerender-manifest entries

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should have correct prerender-manifest entries

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should output debug info for static bailouts

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should output debug info for static bailouts

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should log fetch metrics to the diagnostics directory

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should log fetch metrics to the diagnostics directory

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should correctly error and not update cache for ISR

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should correctly error and not update cache for ISR

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should stream properly for /stale-cache-serving/app-page

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should stream properly for /stale-cache-serving/app-page

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should stream properly for /stale-cache-serving/route-handler

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should stream properly for /stale-cache-serving/route-handler

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should stream properly for /stale-cache-serving-edge/app-page

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should stream properly for /stale-cache-serving-edge/app-page

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should stream properly for /stale-cache-serving-edge/route-handler

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should stream properly for /stale-cache-serving-edge/route-handler

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should correctly handle statusCode with notFound + ISR

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should correctly handle statusCode with notFound + ISR

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly for fetchCache = default-cache

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly for fetchCache = default-cache

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly when accessing search params opts into dynamic rendering

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly when accessing search params opts into dynamic rendering

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly for fetchCache = force-cache

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly for fetchCache = force-cache

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly for cache: "force-cache" and "revalidate"

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly for cache: "force-cache" and "revalidate"

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly for cache: no-store

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly for cache: no-store

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should not error with dynamic server usage with force-static

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should not error with dynamic server usage with force-static

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should produce response with url from fetch

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should produce response with url from fetch

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should properly error when dynamic = "error" page uses dynamic

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should properly error when dynamic = "error" page uses dynamic

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should skip cache in draft mode

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should skip cache in draft mode

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should handle partial-gen-params with default dynamicParams correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should handle partial-gen-params with default dynamicParams correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should handle partial-gen-params with layout dynamicParams = false correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should handle partial-gen-params with layout dynamicParams = false correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should handle partial-gen-params with page dynamicParams = false correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should handle partial-gen-params with page dynamicParams = false correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should honor fetch cache in generateStaticParams

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should honor fetch cache in generateStaticParams

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should honor fetch cache correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should honor fetch cache correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should honor fetch cache correctly (edge)

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should honor fetch cache correctly (edge)

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly with authorization header and revalidate

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly with authorization header and revalidate

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should skip fetch cache when an authorization header is present after dynamic usage

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should skip fetch cache when an authorization header is present after dynamic usage

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should skip fetch cache when accessing request properties

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should skip fetch cache when accessing request properties

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should not cache correctly with POST method request init

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should not cache correctly with POST method request init

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly with post method and revalidate

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly with post method and revalidate

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly with post method and revalidate edge

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly with post method and revalidate edge

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly with POST method and revalidate

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly with POST method and revalidate

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly with cookie header and revalidate

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly with cookie header and revalidate

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly with utf8 encoding

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly with utf8 encoding

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly with utf8 encoding edge

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly with utf8 encoding edge

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should cache correctly handle JSON body

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should cache correctly handle JSON body

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should not throw Dynamic Server Usage error when using generateStaticParams with draftMode

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should not throw Dynamic Server Usage error when using generateStaticParams with draftMode

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should force SSR correctly for headers usage

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should force SSR correctly for headers usage

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should allow dynamic routes to access cookies

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should allow dynamic routes to access cookies

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should not error with generateStaticParams and dynamic data

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should not error with generateStaticParams and dynamic data

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should not error with force-dynamic and catch-all routes

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should not error with force-dynamic and catch-all routes

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should not error with generateStaticParams and authed data on revalidate

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should not error with generateStaticParams and authed data on revalidate

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should honor dynamic = "force-static" correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should honor dynamic = "force-static" correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should honor dynamic = "force-static" correctly (lazy)

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should honor dynamic = "force-static" correctly (lazy)

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should handle dynamicParams: false correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should handle dynamicParams: false correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should work with forced dynamic path

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should work with forced dynamic path

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should work with dynamic path no generateStaticParams

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should work with dynamic path no generateStaticParams

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should handle dynamicParams: true correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should handle dynamicParams: true correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should navigate to static path correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should navigate to static path correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should ssr dynamically when detected automatically with fetch cache option

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should ssr dynamically when detected automatically with fetch cache option

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should render not found pages correctly and fallback to the default one

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should render not found pages correctly and fallback to the default one

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should ssr dynamically when detected automatically with fetch revalidate option

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should ssr dynamically when detected automatically with fetch revalidate option

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should ssr dynamically when forced via config

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should ssr dynamically when forced via config

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › useSearchParams › client › should bailout to client rendering - with suspense boundary

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › useSearchParams › client › should bailout to client rendering - with suspense boundary

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › useSearchParams › client › should have empty search params on force-static

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › useSearchParams › client › should have empty search params on force-static

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › useSearchParams › client › should have values from canonical url on rewrite

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › useSearchParams › client › should have values from canonical url on rewrite

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › useSearchParams › server response › should bailout to client rendering - with suspense boundary

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › useSearchParams › server response › should bailout to client rendering - with suspense boundary

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › useSearchParams › server response › should have empty search params on force-static

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › useSearchParams › server response › should have empty search params on force-static

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › usePathname › should have the correct values

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › usePathname › should have the correct values

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › usePathname › should have values from canonical url on rewrite

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › usePathname › should have values from canonical url on rewrite

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable_noStore › should opt-out of static optimization

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable_noStore › should opt-out of static optimization

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable_noStore › should not opt-out of static optimization when used in next/cache

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable_noStore › should not opt-out of static optimization when used in next/cache

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable_cache › should retrieve the same value on second request

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable_cache › should retrieve the same value on second request

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable_cache › should bypass cache in draft mode

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable_cache › should bypass cache in draft mode

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable_cache › should not cache new result in draft mode

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable_cache › should not cache new result in draft mode

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable_cache › should not error when retrieving the value undefined

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable_cache › should not error when retrieving the value undefined

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable_cache › should not error when calling a fetch no-store

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable_cache › should not error when calling a fetch no-store

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › unstable_cache › should not error when calling a fetch no-cache

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › unstable_cache › should not error when calling a fetch no-cache

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should keep querystring on static page

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should keep querystring on static page

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › Incremental cache limits › should load data only at build time even if response data size is greater than 2MB and FetchCache is possible

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › Incremental cache limits › should load data only at build time even if response data size is greater than 2MB and FetchCache is possible

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

● app-dir static/dynamic handling › should build dynamic param with edge runtime correctly

next build failed with code/signal 1

   98 |           if (code || signal)
   99 |             reject(
> 100 |               new Error(`next build failed with code/signal ${code || signal}`)
      |               ^
  101 |             )
  102 |           else resolve()
  103 |         })

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

● app-dir static/dynamic handling › should build dynamic param with edge runtime correctly

next instance is not initialized yet, make sure you call methods on next instance in test body.

  266 |     get: function (_target, property) {
  267 |       if (!next) {
> 268 |         throw new Error(
      |               ^
  269 |           'next instance is not initialized yet, make sure you call methods on next instance in test body.'
  270 |         )
  271 |       }

  at Object.get (lib/e2e-utils/index.ts:268:15)
  at Object.readFile (e2e/app-dir/app-static/app-static.test.ts:37:20)

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

@ijjk
Copy link
Member

ijjk commented Nov 20, 2024

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js lubieowoce/custom-server-public-api Change
buildDuration 17.8s 15.9s N/A
buildDurationCached 15s 14.3s N/A
nodeModulesSize 405 MB 405 MB ⚠️ +7.28 kB
nextStartRea..uration (ms) 475ms 453ms N/A
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js lubieowoce/custom-server-public-api Change
0b69cffb-HASH.js gzip 52.6 kB 52.6 kB N/A
1924.HASH.js gzip 169 B 169 B
195-HASH.js gzip 48.8 kB 48.8 kB N/A
8589-HASH.js gzip 5.27 kB 5.28 kB N/A
framework-HASH.js gzip 57.4 kB 57.4 kB N/A
main-app-HASH.js gzip 232 B 230 B N/A
main-HASH.js gzip 33.1 kB 33.1 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB N/A
Overall change 169 B 169 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js lubieowoce/custom-server-public-api Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages
vercel/next.js canary vercel/next.js lubieowoce/custom-server-public-api Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 192 B 190 B N/A
amp-HASH.js gzip 510 B 510 B
css-HASH.js gzip 341 B 343 B N/A
dynamic-HASH.js gzip 1.84 kB 1.84 kB N/A
edge-ssr-HASH.js gzip 266 B 266 B
head-HASH.js gzip 362 B 364 B N/A
hooks-HASH.js gzip 393 B 392 B N/A
image-HASH.js gzip 4.42 kB 4.42 kB N/A
index-HASH.js gzip 268 B 268 B
link-HASH.js gzip 2.34 kB 2.35 kB N/A
routerDirect..HASH.js gzip 328 B 327 B N/A
script-HASH.js gzip 398 B 396 B N/A
withRouter-HASH.js gzip 325 B 322 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 1.34 kB 1.34 kB
Client Build Manifests
vercel/next.js canary vercel/next.js lubieowoce/custom-server-public-api Change
_buildManifest.js gzip 748 B 749 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js lubieowoce/custom-server-public-api Change
index.html gzip 523 B 523 B
link.html gzip 538 B 538 B
withRouter.html gzip 520 B 518 B N/A
Overall change 1.06 kB 1.06 kB
Edge SSR bundle Size
vercel/next.js canary vercel/next.js lubieowoce/custom-server-public-api Change
edge-ssr.js gzip 128 kB 128 kB N/A
page.js gzip 200 kB 200 kB
Overall change 200 kB 200 kB
Middleware size
vercel/next.js canary vercel/next.js lubieowoce/custom-server-public-api Change
middleware-b..fest.js gzip 671 B 668 B N/A
middleware-r..fest.js gzip 156 B 155 B N/A
middleware.js gzip 31 kB 31 kB N/A
edge-runtime..pack.js gzip 844 B 844 B
Overall change 844 B 844 B
Next Runtimes
vercel/next.js canary vercel/next.js lubieowoce/custom-server-public-api Change
732-experime...dev.js gzip 322 B 322 B
732.runtime.dev.js gzip 314 B 314 B
app-page-exp...dev.js gzip 323 kB 323 kB
app-page-exp..prod.js gzip 125 kB 125 kB
app-page-tur..prod.js gzip 138 kB 138 kB
app-page-tur..prod.js gzip 133 kB 133 kB
app-page.run...dev.js gzip 314 kB 314 kB
app-page.run..prod.js gzip 121 kB 121 kB
app-route-ex...dev.js gzip 36.1 kB 36.1 kB
app-route-ex..prod.js gzip 24.4 kB 24.4 kB
app-route-tu..prod.js gzip 24.4 kB 24.4 kB
app-route-tu..prod.js gzip 24.2 kB 24.2 kB
app-route.ru...dev.js gzip 37.7 kB 37.7 kB
app-route.ru..prod.js gzip 24.2 kB 24.2 kB
pages-api-tu..prod.js gzip 9.57 kB 9.57 kB
pages-api.ru...dev.js gzip 11.4 kB 11.4 kB
pages-api.ru..prod.js gzip 9.56 kB 9.56 kB
pages-turbo...prod.js gzip 21 kB 21 kB
pages.runtim...dev.js gzip 26.6 kB 26.6 kB
pages.runtim..prod.js gzip 21 kB 21 kB
server.runti..prod.js gzip 916 kB 916 kB
Overall change 2.34 MB 2.34 MB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js lubieowoce/custom-server-public-api Change
0.pack gzip 2.02 MB 2.02 MB ⚠️ +153 B
index.pack gzip 148 kB 147 kB N/A
Overall change 2.02 MB 2.02 MB ⚠️ +153 B
Diff details
Diff for page.js
@@ -15,7 +15,7 @@
       /***/
     },
 
-    /***/ 9797: /***/ (
+    /***/ 9254: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -30,7 +30,7 @@
         default: () => /* binding */ nHandler,
       });
 
-      // NAMESPACE OBJECT: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-stats5NrnCO%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&flyingShuttle=false&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
+      // NAMESPACE OBJECT: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-stats5NrnCO%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&flyingShuttle=false&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
       var page_next_edge_ssr_entry_namespaceObject = {};
       __webpack_require__.r(page_next_edge_ssr_entry_namespaceObject);
       __webpack_require__.d(page_next_edge_ssr_entry_namespaceObject, {
@@ -84,43 +84,43 @@
         workUnitAsyncStorage: () => entry_base /* workUnitAsyncStorage */.FP,
       });
 
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/server/web/globals.js
-      var globals = __webpack_require__(2951);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/server/web/adapter.js + 3 modules
-      var adapter = __webpack_require__(2203);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render.js + 84 modules
-      var render = __webpack_require__(9126);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/server/lib/incremental-cache/index.js + 5 modules
-      var incremental_cache = __webpack_require__(3156);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/server/app-render/app-render.js + 68 modules
-      var app_render = __webpack_require__(1238);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/server/route-modules/app-page/module.compiled.js
-      var module_compiled = __webpack_require__(9453);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/server/route-kind.js
-      var route_kind = __webpack_require__(4858);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/client/components/error-boundary.js
-      var error_boundary = __webpack_require__(4324);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/server/app-render/entry-base.js + 26 modules
-      var entry_base = __webpack_require__(5663); // ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-stats5NrnCO%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&flyingShuttle=false&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/server/web/globals.js
+      var globals = __webpack_require__(8077);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/server/web/adapter.js + 3 modules
+      var adapter = __webpack_require__(5713);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render.js + 84 modules
+      var render = __webpack_require__(3108);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/server/lib/incremental-cache/index.js + 5 modules
+      var incremental_cache = __webpack_require__(1102);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/server/app-render/app-render.js + 68 modules
+      var app_render = __webpack_require__(1660);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/server/route-modules/app-page/module.compiled.js
+      var module_compiled = __webpack_require__(3575);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/server/route-kind.js
+      var route_kind = __webpack_require__(1448);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/client/components/error-boundary.js
+      var error_boundary = __webpack_require__(3690);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/server/app-render/entry-base.js + 26 modules
+      var entry_base = __webpack_require__(6325); // ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-stats5NrnCO%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&flyingShuttle=false&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
       const module0 = () =>
         Promise.resolve(/* import() eager */).then(
-          __webpack_require__.bind(__webpack_require__, 9469)
+          __webpack_require__.bind(__webpack_require__, 3073)
         );
       const module1 = () =>
         Promise.resolve(/* import() eager */).then(
-          __webpack_require__.bind(__webpack_require__, 4000)
+          __webpack_require__.bind(__webpack_require__, 6342)
         );
       const module2 = () =>
         Promise.resolve(/* import() eager */).then(
-          __webpack_require__.bind(__webpack_require__, 9897)
+          __webpack_require__.bind(__webpack_require__, 4943)
         );
       const module3 = () =>
         Promise.resolve(/* import() eager */).then(
-          __webpack_require__.bind(__webpack_require__, 2246)
+          __webpack_require__.bind(__webpack_require__, 2692)
         );
       const page4 = () =>
         Promise.resolve(/* import() eager */).then(
-          __webpack_require__.bind(__webpack_require__, 8855)
+          __webpack_require__.bind(__webpack_require__, 1675)
         );
 
       // We inject the tree and pages here so that we can use them in the route
@@ -188,12 +188,12 @@
       });
 
       //# sourceMappingURL=app-page.js.map
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/lib/page-types.js
-      var page_types = __webpack_require__(5365);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/server/app-render/encryption-utils.js
-      var encryption_utils = __webpack_require__(9284);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/esm/server/app-render/action-utils.js
-      var action_utils = __webpack_require__(3095); // ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js?{"absolute500Path":"","absoluteAppPath":"next/dist/pages/_app","absoluteDocumentPath":"next/dist/pages/_document","absoluteErrorPath":"next/dist/pages/_error","absolutePagePath":"private-next-app-dir/app-edge-ssr/page.js","dev":false,"isServerComponent":true,"page":"/app-edge-ssr/page","stringifiedConfig":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImFwcElzclN0YXR1cyI6dHJ1ZSwiYnVpbGRBY3Rpdml0eSI6dHJ1ZSwiYnVpbGRBY3Rpdml0eVBvc2l0aW9uIjoiYm90dG9tLXJpZ2h0In0sIm9uRGVtYW5kRW50cmllcyI6eyJtYXhJbmFjdGl2ZUFnZSI6NjAwMDAsInBhZ2VzQnVmZmVyTGVuZ3RoIjo1fSwiYW1wIjp7ImNhbm9uaWNhbEJhc2UiOiIifSwiYmFzZVBhdGgiOiIiLCJzYXNzT3B0aW9ucyI6e30sInRyYWlsaW5nU2xhc2giOmZhbHNlLCJpMThuIjpudWxsLCJwcm9kdWN0aW9uQnJvd3NlclNvdXJjZU1hcHMiOmZhbHNlLCJleGNsdWRlRGVmYXVsdE1vbWVudExvY2FsZXMiOnRydWUsInNlcnZlclJ1bnRpbWVDb25maWciOnt9LCJwdWJsaWNSdW50aW1lQ29uZmlnIjp7fSwicmVhY3RQcm9kdWN0aW9uUHJvZmlsaW5nIjpmYWxzZSwicmVhY3RTdHJpY3RNb2RlIjpudWxsLCJyZWFjdE1heEhlYWRlcnNMZW5ndGgiOjYwMDAsImh0dHBBZ2VudE9wdGlvbnMiOnsia2VlcEFsaXZlIjp0cnVlfSwibG9nZ2luZyI6e30sImV4cGlyZVRpbWUiOjMxNTM2MDAwLCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sIm91dHB1dEZpbGVUcmFjaW5nUm9vdCI6Ii90bXAvbmV4dC1zdGF0czVOcm5DTy9zdGF0cy1hcHAiLCJleHBlcmltZW50YWwiOnsiY2FjaGVMaWZlIjp7ImRlZmF1bHQiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6OTAwLCJleHBpcmUiOjQyOTQ5NjcyOTR9LCJzZWNvbmRzIjp7InN0YWxlIjowLCJyZXZhbGlkYXRlIjoxLCJleHBpcmUiOjYwfSwibWludXRlcyI6eyJzdGFsZSI6MzAwLCJyZXZhbGlkYXRlIjo2MCwiZXhwaXJlIjozNjAwfSwiaG91cnMiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6MzYwMCwiZXhwaXJlIjo4NjQwMH0sImRheXMiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6ODY0MDAsImV4cGlyZSI6NjA0ODAwfSwid2Vla3MiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6NjA0ODAwLCJleHBpcmUiOjI1OTIwMDB9LCJtYXgiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6MjU5MjAwMCwiZXhwaXJlIjo0Mjk0OTY3Mjk0fX0sImNhY2hlSGFuZGxlcnMiOnt9LCJtdWx0aVpvbmVEcmFmdE1vZGUiOmZhbHNlLCJhcHBOYXZGYWlsSGFuZGxpbmciOmZhbHNlLCJwcmVyZW5kZXJFYXJseUV4aXQiOnRydWUsInNlcnZlck1pbmlmaWNhdGlvbiI6dHJ1ZSwic2VydmVyU291cmNlTWFwcyI6ZmFsc2UsImxpbmtOb1RvdWNoU3RhcnQiOmZhbHNlLCJjYXNlU2Vuc2l0aXZlUm91dGVzIjpmYWxzZSwiY2xpZW50U2VnbWVudENhY2hlIjpmYWxzZSwicHJlbG9hZEVudHJpZXNPblN0YXJ0Ijp0cnVlLCJjbGllbnRSb3V0ZXJGaWx0ZXIiOnRydWUsImNsaWVudFJvdXRlckZpbHRlclJlZGlyZWN0cyI6ZmFsc2UsImZldGNoQ2FjaGVLZXlQcmVmaXgiOiIiLCJtaWRkbGV3YXJlUHJlZmV0Y2giOiJmbGV4aWJsZSIsIm9wdGltaXN0aWNDbGllbnRDYWNoZSI6dHJ1ZSwibWFudWFsQ2xpZW50QmFzZVBhdGgiOmZhbHNlLCJjcHVzIjoxOSwibWVtb3J5QmFzZWRXb3JrZXJzQ291bnQiOmZhbHNlLCJpbWdPcHRDb25jdXJyZW5jeSI6bnVsbCwiaW1nT3B0VGltZW91dEluU2Vjb25kcyI6NywiaW1nT3B0TWF4SW5wdXRQaXhlbHMiOjI2ODQwMjY4OSwiaW1nT3B0U2VxdWVudGlhbFJlYWQiOm51bGwsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwic3djVHJhY2VQcm9maWxpbmciOmZhbHNlLCJmb3JjZVN3Y1RyYW5zZm9ybXMiOmZhbHNlLCJsYXJnZVBhZ2VEYXRhQnl0ZXMiOjEyODAwMCwidHVyYm8iOnsicm9vdCI6Ii90bXAvbmV4dC1zdGF0czVOcm5DTy9zdGF0cy1hcHAifSwidHlwZWRSb3V0ZXMiOmZhbHNlLCJ0eXBlZEVudiI6ZmFsc2UsInBhcmFsbGVsU2VydmVyQ29tcGlsZXMiOmZhbHNlLCJwYXJhbGxlbFNlcnZlckJ1aWxkVHJhY2VzIjpmYWxzZSwicHByIjpmYWxzZSwiYXV0aEludGVycnVwdHMiOmZhbHNlLCJyZWFjdE93bmVyU3RhY2siOmZhbHNlLCJ3ZWJwYWNrTWVtb3J5T3B0aW1pemF0aW9ucyI6ZmFsc2UsIm9wdGltaXplU2VydmVyUmVhY3QiOnRydWUsInVzZUVhcmx5SW1wb3J0IjpmYWxzZSwic3RhbGVUaW1lcyI6eyJkeW5hbWljIjowLCJzdGF0aWMiOjMwMH0sImFmdGVyIjpmYWxzZSwic2VydmVyQ29tcG9uZW50c0htckNhY2hlIjp0cnVlLCJzdGF0aWNHZW5lcmF0aW9uTWF4Q29uY3VycmVuY3kiOjgsInN0YXRpY0dlbmVyYXRpb25NaW5QYWdlc1BlcldvcmtlciI6MjUsImR5bmFtaWNJTyI6ZmFsc2UsImlubGluZUNzcyI6ZmFsc2UsIm9wdGltaXplUGFja2FnZUltcG9ydHMiOlsibHVjaWRlLXJlYWN0IiwiZGF0ZS1mbnMiLCJsb2Rhc2gtZXMiLCJyYW1kYSIsImFudGQiLCJyZWFjdC1ib290c3RyYXAiLCJhaG9va3MiLCJAYW50LWRlc2lnbi9pY29ucyIsIkBoZWFkbGVzc3VpL3JlYWN0IiwiQGhlYWRsZXNzdWktZmxvYXQvcmVhY3QiLCJAaGVyb2ljb25zL3JlYWN0LzIwL3NvbGlkIiwiQGhlcm9pY29ucy9yZWFjdC8yNC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvb3V0bGluZSIsIkB2aXN4L3Zpc3giLCJAdHJlbW9yL3JlYWN0IiwicnhqcyIsIkBtdWkvbWF0ZXJpYWwiLCJAbXVpL2ljb25zLW1hdGVyaWFsIiwicmVjaGFydHMiLCJyZWFjdC11c2UiLCJlZmZlY3QiLCJAZWZmZWN0L3NjaGVtYSIsIkBlZmZlY3QvcGxhdGZvcm0iLCJAZWZmZWN0L3BsYXRmb3JtLW5vZGUiLCJAZWZmZWN0L3BsYXRmb3JtLWJyb3dzZXIiLCJAZWZmZWN0L3BsYXRmb3JtLWJ1biIsIkBlZmZlY3Qvc3FsIiwiQGVmZmVjdC9zcWwtbXNzcWwiLCJAZWZmZWN0L3NxbC1teXNxbDIiLCJAZWZmZWN0L3NxbC1wZyIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtbm9kZSIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtYnVuIiwiQGVmZmVjdC9zcWwtc3F1bGl0ZS13YXNtIiwiQGVmZmVjdC9zcWwtc3F1bGl0ZS1yZWFjdC1uYXRpdmUiLCJAZWZmZWN0L3JwYyIsIkBlZmZlY3QvcnBjLWh0dHAiLCJAZWZmZWN0L3R5cGVjbGFzcyIsIkBlZmZlY3QvZXhwZXJpbWVudGFsIiwiQGVmZmVjdC9vcGVudGVsZW1ldHJ5IiwiQG1hdGVyaWFsLXVpL2NvcmUiLCJAbWF0ZXJpYWwtdWkvaWNvbnMiLCJAdGFibGVyL2ljb25zLXJlYWN0IiwibXVpLWNvcmUiLCJyZWFjdC1pY29ucy9haSIsInJlYWN0LWljb25zL2JpIiwicmVhY3QtaWNvbnMvYnMiLCJyZWFjdC1pY29ucy9jZyIsInJlYWN0LWljb25zL2NpIiwicmVhY3QtaWNvbnMvZGkiLCJyZWFjdC1pY29ucy9mYSIsInJlYWN0LWljb25zL2ZhNiIsInJlYWN0LWljb25zL2ZjIiwicmVhY3QtaWNvbnMvZmkiLCJyZWFjdC1pY29ucy9naSIsInJlYWN0LWljb25zL2dvIiwicmVhY3QtaWNvbnMvZ3IiLCJyZWFjdC1pY29ucy9oaSIsInJlYWN0LWljb25zL2hpMiIsInJlYWN0LWljb25zL2ltIiwicmVhY3QtaWNvbnMvaW8iLCJyZWFjdC1pY29ucy9pbzUiLCJyZWFjdC1pY29ucy9saWEiLCJyZWFjdC1pY29ucy9saWIiLCJyZWFjdC1pY29ucy9sdSIsInJlYWN0LWljb25zL21kIiwicmVhY3QtaWNvbnMvcGkiLCJyZWFjdC1pY29ucy9yaSIsInJlYWN0LWljb25zL3J4IiwicmVhY3QtaWNvbnMvc2kiLCJyZWFjdC1pY29ucy9zbCIsInJlYWN0LWljb25zL3RiIiwicmVhY3QtaWNvbnMvdGZpIiwicmVhY3QtaWNvbnMvdGkiLCJyZWFjdC1pY29ucy92c2MiLCJyZWFjdC1pY29ucy93aSJdfSwiYnVuZGxlUGFnZXNSb3V0ZXJEZXBlbmRlbmNpZXMiOmZhbHNlLCJjb25maWdGaWxlIjoiL3RtcC9uZXh0LXN0YXRzNU5ybkNPL3N0YXRzLWFwcC9uZXh0LmNvbmZpZy5qcyIsImNvbmZpZ0ZpbGVOYW1lIjoibmV4dC5jb25maWcuanMifQ==","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzNU5ybkNPJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JmZseWluZ1NodXR0bGU9ZmFsc2UmcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCE=","sriEnabled":false,"middlewareConfig":"e30=","cacheHandlers":"{}"}!
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/lib/page-types.js
+      var page_types = __webpack_require__(1947);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/server/app-render/encryption-utils.js
+      var encryption_utils = __webpack_require__(4830);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/esm/server/app-render/action-utils.js
+      var action_utils = __webpack_require__(7873); // ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js?{"absolute500Path":"","absoluteAppPath":"next/dist/pages/_app","absoluteDocumentPath":"next/dist/pages/_document","absoluteErrorPath":"next/dist/pages/_error","absolutePagePath":"private-next-app-dir/app-edge-ssr/page.js","dev":false,"isServerComponent":true,"page":"/app-edge-ssr/page","stringifiedConfig":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImFwcElzclN0YXR1cyI6dHJ1ZSwiYnVpbGRBY3Rpdml0eSI6dHJ1ZSwiYnVpbGRBY3Rpdml0eVBvc2l0aW9uIjoiYm90dG9tLXJpZ2h0In0sIm9uRGVtYW5kRW50cmllcyI6eyJtYXhJbmFjdGl2ZUFnZSI6NjAwMDAsInBhZ2VzQnVmZmVyTGVuZ3RoIjo1fSwiYW1wIjp7ImNhbm9uaWNhbEJhc2UiOiIifSwiYmFzZVBhdGgiOiIiLCJzYXNzT3B0aW9ucyI6e30sInRyYWlsaW5nU2xhc2giOmZhbHNlLCJpMThuIjpudWxsLCJwcm9kdWN0aW9uQnJvd3NlclNvdXJjZU1hcHMiOmZhbHNlLCJleGNsdWRlRGVmYXVsdE1vbWVudExvY2FsZXMiOnRydWUsInNlcnZlclJ1bnRpbWVDb25maWciOnt9LCJwdWJsaWNSdW50aW1lQ29uZmlnIjp7fSwicmVhY3RQcm9kdWN0aW9uUHJvZmlsaW5nIjpmYWxzZSwicmVhY3RTdHJpY3RNb2RlIjpudWxsLCJyZWFjdE1heEhlYWRlcnNMZW5ndGgiOjYwMDAsImh0dHBBZ2VudE9wdGlvbnMiOnsia2VlcEFsaXZlIjp0cnVlfSwibG9nZ2luZyI6e30sImV4cGlyZVRpbWUiOjMxNTM2MDAwLCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sIm91dHB1dEZpbGVUcmFjaW5nUm9vdCI6Ii90bXAvbmV4dC1zdGF0czVOcm5DTy9zdGF0cy1hcHAiLCJleHBlcmltZW50YWwiOnsiY2FjaGVMaWZlIjp7ImRlZmF1bHQiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6OTAwLCJleHBpcmUiOjQyOTQ5NjcyOTR9LCJzZWNvbmRzIjp7InN0YWxlIjowLCJyZXZhbGlkYXRlIjoxLCJleHBpcmUiOjYwfSwibWludXRlcyI6eyJzdGFsZSI6MzAwLCJyZXZhbGlkYXRlIjo2MCwiZXhwaXJlIjozNjAwfSwiaG91cnMiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6MzYwMCwiZXhwaXJlIjo4NjQwMH0sImRheXMiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6ODY0MDAsImV4cGlyZSI6NjA0ODAwfSwid2Vla3MiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6NjA0ODAwLCJleHBpcmUiOjI1OTIwMDB9LCJtYXgiOnsic3RhbGUiOjMwMCwicmV2YWxpZGF0ZSI6MjU5MjAwMCwiZXhwaXJlIjo0Mjk0OTY3Mjk0fX0sImNhY2hlSGFuZGxlcnMiOnt9LCJtdWx0aVpvbmVEcmFmdE1vZGUiOmZhbHNlLCJhcHBOYXZGYWlsSGFuZGxpbmciOmZhbHNlLCJwcmVyZW5kZXJFYXJseUV4aXQiOnRydWUsInNlcnZlck1pbmlmaWNhdGlvbiI6dHJ1ZSwic2VydmVyU291cmNlTWFwcyI6ZmFsc2UsImxpbmtOb1RvdWNoU3RhcnQiOmZhbHNlLCJjYXNlU2Vuc2l0aXZlUm91dGVzIjpmYWxzZSwiY2xpZW50U2VnbWVudENhY2hlIjpmYWxzZSwicHJlbG9hZEVudHJpZXNPblN0YXJ0Ijp0cnVlLCJjbGllbnRSb3V0ZXJGaWx0ZXIiOnRydWUsImNsaWVudFJvdXRlckZpbHRlclJlZGlyZWN0cyI6ZmFsc2UsImZldGNoQ2FjaGVLZXlQcmVmaXgiOiIiLCJtaWRkbGV3YXJlUHJlZmV0Y2giOiJmbGV4aWJsZSIsIm9wdGltaXN0aWNDbGllbnRDYWNoZSI6dHJ1ZSwibWFudWFsQ2xpZW50QmFzZVBhdGgiOmZhbHNlLCJjcHVzIjoxOSwibWVtb3J5QmFzZWRXb3JrZXJzQ291bnQiOmZhbHNlLCJpbWdPcHRDb25jdXJyZW5jeSI6bnVsbCwiaW1nT3B0VGltZW91dEluU2Vjb25kcyI6NywiaW1nT3B0TWF4SW5wdXRQaXhlbHMiOjI2ODQwMjY4OSwiaW1nT3B0U2VxdWVudGlhbFJlYWQiOm51bGwsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwic3djVHJhY2VQcm9maWxpbmciOmZhbHNlLCJmb3JjZVN3Y1RyYW5zZm9ybXMiOmZhbHNlLCJsYXJnZVBhZ2VEYXRhQnl0ZXMiOjEyODAwMCwidHVyYm8iOnsicm9vdCI6Ii90bXAvbmV4dC1zdGF0czVOcm5DTy9zdGF0cy1hcHAifSwidHlwZWRSb3V0ZXMiOmZhbHNlLCJ0eXBlZEVudiI6ZmFsc2UsInBhcmFsbGVsU2VydmVyQ29tcGlsZXMiOmZhbHNlLCJwYXJhbGxlbFNlcnZlckJ1aWxkVHJhY2VzIjpmYWxzZSwicHByIjpmYWxzZSwiYXV0aEludGVycnVwdHMiOmZhbHNlLCJyZWFjdE93bmVyU3RhY2siOmZhbHNlLCJ3ZWJwYWNrTWVtb3J5T3B0aW1pemF0aW9ucyI6ZmFsc2UsIm9wdGltaXplU2VydmVyUmVhY3QiOnRydWUsInVzZUVhcmx5SW1wb3J0IjpmYWxzZSwic3RhbGVUaW1lcyI6eyJkeW5hbWljIjowLCJzdGF0aWMiOjMwMH0sImFmdGVyIjpmYWxzZSwic2VydmVyQ29tcG9uZW50c0htckNhY2hlIjp0cnVlLCJzdGF0aWNHZW5lcmF0aW9uTWF4Q29uY3VycmVuY3kiOjgsInN0YXRpY0dlbmVyYXRpb25NaW5QYWdlc1BlcldvcmtlciI6MjUsImR5bmFtaWNJTyI6ZmFsc2UsImlubGluZUNzcyI6ZmFsc2UsIm9wdGltaXplUGFja2FnZUltcG9ydHMiOlsibHVjaWRlLXJlYWN0IiwiZGF0ZS1mbnMiLCJsb2Rhc2gtZXMiLCJyYW1kYSIsImFudGQiLCJyZWFjdC1ib290c3RyYXAiLCJhaG9va3MiLCJAYW50LWRlc2lnbi9pY29ucyIsIkBoZWFkbGVzc3VpL3JlYWN0IiwiQGhlYWRsZXNzdWktZmxvYXQvcmVhY3QiLCJAaGVyb2ljb25zL3JlYWN0LzIwL3NvbGlkIiwiQGhlcm9pY29ucy9yZWFjdC8yNC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvb3V0bGluZSIsIkB2aXN4L3Zpc3giLCJAdHJlbW9yL3JlYWN0IiwicnhqcyIsIkBtdWkvbWF0ZXJpYWwiLCJAbXVpL2ljb25zLW1hdGVyaWFsIiwicmVjaGFydHMiLCJyZWFjdC11c2UiLCJlZmZlY3QiLCJAZWZmZWN0L3NjaGVtYSIsIkBlZmZlY3QvcGxhdGZvcm0iLCJAZWZmZWN0L3BsYXRmb3JtLW5vZGUiLCJAZWZmZWN0L3BsYXRmb3JtLWJyb3dzZXIiLCJAZWZmZWN0L3BsYXRmb3JtLWJ1biIsIkBlZmZlY3Qvc3FsIiwiQGVmZmVjdC9zcWwtbXNzcWwiLCJAZWZmZWN0L3NxbC1teXNxbDIiLCJAZWZmZWN0L3NxbC1wZyIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtbm9kZSIsIkBlZmZlY3Qvc3FsLXNxdWxpdGUtYnVuIiwiQGVmZmVjdC9zcWwtc3F1bGl0ZS13YXNtIiwiQGVmZmVjdC9zcWwtc3F1bGl0ZS1yZWFjdC1uYXRpdmUiLCJAZWZmZWN0L3JwYyIsIkBlZmZlY3QvcnBjLWh0dHAiLCJAZWZmZWN0L3R5cGVjbGFzcyIsIkBlZmZlY3QvZXhwZXJpbWVudGFsIiwiQGVmZmVjdC9vcGVudGVsZW1ldHJ5IiwiQG1hdGVyaWFsLXVpL2NvcmUiLCJAbWF0ZXJpYWwtdWkvaWNvbnMiLCJAdGFibGVyL2ljb25zLXJlYWN0IiwibXVpLWNvcmUiLCJyZWFjdC1pY29ucy9haSIsInJlYWN0LWljb25zL2JpIiwicmVhY3QtaWNvbnMvYnMiLCJyZWFjdC1pY29ucy9jZyIsInJlYWN0LWljb25zL2NpIiwicmVhY3QtaWNvbnMvZGkiLCJyZWFjdC1pY29ucy9mYSIsInJlYWN0LWljb25zL2ZhNiIsInJlYWN0LWljb25zL2ZjIiwicmVhY3QtaWNvbnMvZmkiLCJyZWFjdC1pY29ucy9naSIsInJlYWN0LWljb25zL2dvIiwicmVhY3QtaWNvbnMvZ3IiLCJyZWFjdC1pY29ucy9oaSIsInJlYWN0LWljb25zL2hpMiIsInJlYWN0LWljb25zL2ltIiwicmVhY3QtaWNvbnMvaW8iLCJyZWFjdC1pY29ucy9pbzUiLCJyZWFjdC1pY29ucy9saWEiLCJyZWFjdC1pY29ucy9saWIiLCJyZWFjdC1pY29ucy9sdSIsInJlYWN0LWljb25zL21kIiwicmVhY3QtaWNvbnMvcGkiLCJyZWFjdC1pY29ucy9yaSIsInJlYWN0LWljb25zL3J4IiwicmVhY3QtaWNvbnMvc2kiLCJyZWFjdC1pY29ucy9zbCIsInJlYWN0LWljb25zL3RiIiwicmVhY3QtaWNvbnMvdGZpIiwicmVhY3QtaWNvbnMvdGkiLCJyZWFjdC1pY29ucy92c2MiLCJyZWFjdC1pY29ucy93aSJdfSwiYnVuZGxlUGFnZXNSb3V0ZXJEZXBlbmRlbmNpZXMiOmZhbHNlLCJjb25maWdGaWxlIjoiL3RtcC9uZXh0LXN0YXRzNU5ybkNPL3N0YXRzLWFwcC9uZXh0LmNvbmZpZy5qcyIsImNvbmZpZ0ZpbGVOYW1lIjoibmV4dC5jb25maWcuanMifQ==","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzNU5ybkNPJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JmZseWluZ1NodXR0bGU9ZmFsc2UmcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCE=","sriEnabled":false,"middlewareConfig":"e30=","cacheHandlers":"{}"}!
       var _self___RSC_MANIFEST;
 
       const incrementalCacheHandler = null;
@@ -479,105 +479,105 @@
       /***/
     },
 
-    /***/ 6218: /***/ (
+    /***/ 7584: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 2788)
+        __webpack_require__.bind(__webpack_require__, 9102)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 2950)
+        __webpack_require__.bind(__webpack_require__, 4860)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 1472)
+        __webpack_require__.bind(__webpack_require__, 1018)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 4324)
+        __webpack_require__.bind(__webpack_require__, 3690)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 3607)
+        __webpack_require__.bind(__webpack_require__, 4549)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 8207)
+        __webpack_require__.bind(__webpack_require__, 3905)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 4065)
+        __webpack_require__.bind(__webpack_require__, 4283)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 3748)
+        __webpack_require__.bind(__webpack_require__, 4818)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 5718)
+        __webpack_require__.bind(__webpack_require__, 9952)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 9597)
+        __webpack_require__.bind(__webpack_require__, 7955)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 2956)
+        __webpack_require__.bind(__webpack_require__, 7454)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 3622)
+        __webpack_require__.bind(__webpack_require__, 2504)
       );
 
       /***/
     },
 
-    /***/ 5970: /***/ (
+    /***/ 7312: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 7389)
+        __webpack_require__.bind(__webpack_require__, 6283)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 4946)
+        __webpack_require__.bind(__webpack_require__, 8808)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 6556)
+        __webpack_require__.bind(__webpack_require__, 4918)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 7216)
+        __webpack_require__.bind(__webpack_require__, 8902)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 795)
+        __webpack_require__.bind(__webpack_require__, 3289)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 9547)
+        __webpack_require__.bind(__webpack_require__, 9961)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 4173)
+        __webpack_require__.bind(__webpack_require__, 6327)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 815)
+        __webpack_require__.bind(__webpack_require__, 3693)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 9130)
+        __webpack_require__.bind(__webpack_require__, 3524)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 2097)
+        __webpack_require__.bind(__webpack_require__, 3319)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 9824)
+        __webpack_require__.bind(__webpack_require__, 1890)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 4690)
+        __webpack_require__.bind(__webpack_require__, 2404)
       );
 
       /***/
     },
 
-    /***/ 3958: /***/ () => {
+    /***/ 8980: /***/ () => {
       /***/
     },
 
-    /***/ 2110: /***/ () => {
+    /***/ 1716: /***/ () => {
       /***/
     },
 
-    /***/ 8855: /***/ (
+    /***/ 1675: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -597,7 +597,7 @@
       /***/
     },
 
-    /***/ 9469: /***/ (
+    /***/ 3073: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -609,7 +609,7 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3923);
+        __webpack_require__(593);
 
       function RootLayout({ children }) {
         return /*#__PURE__*/ (0,
@@ -628,7 +628,7 @@
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
-    /******/ __webpack_require__.O(0, [662, 521], () => __webpack_exec__(9797));
+    /******/ __webpack_require__.O(0, [486, 275], () => __webpack_exec__(9254));
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ (_ENTRIES = typeof _ENTRIES === "undefined" ? {} : _ENTRIES)[
       "middleware_app/app-edge-ssr/page"
Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for image-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2983],
   {
-    /***/ 6745: /***/ (
+    /***/ 7391: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/image",
         function () {
-          return __webpack_require__(5675);
+          return __webpack_require__(1489);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 9053: /***/ (module, exports, __webpack_require__) => {
+    /***/ 9313: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -40,17 +40,17 @@
         __webpack_require__(6093)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(8808)
+        __webpack_require__(7964)
       );
-      const _getimgprops = __webpack_require__(1945);
-      const _imageconfig = __webpack_require__(7668);
-      const _imageconfigcontextsharedruntime = __webpack_require__(1694);
-      const _warnonce = __webpack_require__(1876);
-      const _routercontextsharedruntime = __webpack_require__(5575);
+      const _getimgprops = __webpack_require__(8821);
+      const _imageconfig = __webpack_require__(664);
+      const _imageconfigcontextsharedruntime = __webpack_require__(6418);
+      const _warnonce = __webpack_require__(7360);
+      const _routercontextsharedruntime = __webpack_require__(4203);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(3589)
+        __webpack_require__(2489)
       );
-      const _usemergedref = __webpack_require__(6746);
+      const _usemergedref = __webpack_require__(2454);
       // This is replaced by webpack define plugin
       const configEnv = {
         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
@@ -371,7 +371,7 @@
       /***/
     },
 
-    /***/ 6746: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2454: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -432,7 +432,7 @@
       /***/
     },
 
-    /***/ 1945: /***/ (
+    /***/ 8821: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -448,9 +448,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(1876);
-      const _imageblursvg = __webpack_require__(6704);
-      const _imageconfig = __webpack_require__(7668);
+      const _warnonce = __webpack_require__(7360);
+      const _imageblursvg = __webpack_require__(5884);
+      const _imageconfig = __webpack_require__(664);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -824,7 +824,7 @@
       /***/
     },
 
-    /***/ 6704: /***/ (__unused_webpack_module, exports) => {
+    /***/ 5884: /***/ (__unused_webpack_module, exports) => {
       "use strict";
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
@@ -879,7 +879,7 @@
       /***/
     },
 
-    /***/ 965: /***/ (
+    /***/ 9345: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -906,10 +906,10 @@
         },
       });
       const _interop_require_default = __webpack_require__(1739);
-      const _getimgprops = __webpack_require__(1945);
-      const _imagecomponent = __webpack_require__(9053);
+      const _getimgprops = __webpack_require__(8821);
+      const _imagecomponent = __webpack_require__(9313);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(3589)
+        __webpack_require__(2489)
       );
       function getImageProps(imgProps) {
         const { props } = (0, _getimgprops.getImgProps)(imgProps, {
@@ -941,7 +941,7 @@
       /***/
     },
 
-    /***/ 3589: /***/ (__unused_webpack_module, exports) => {
+    /***/ 2489: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -976,7 +976,7 @@
       /***/
     },
 
-    /***/ 5675: /***/ (
+    /***/ 1489: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -993,8 +993,8 @@
 
       // EXTERNAL MODULE: ./node_modules/.pnpm/react@19.0.0-rc-380f5d67-20241113/node_modules/react/jsx-runtime.js
       var jsx_runtime = __webpack_require__(6322);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_d7fg766ptstyt4prarg74ol27i/node_modules/next/image.js
-      var next_image = __webpack_require__(1695);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-rc-380f5d67-20241113_re_k6jswiqskvoeqe45yhuljotqne/node_modules/next/image.js
+      var next_image = __webpack_require__(8106);
       var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png
       /* harmony default export */ const nextjs = {
         src: "/_next/static/media/nextjs.cae0b805.png",
@@ -1024,12 +1024,12 @@
       /***/
     },
 
-    /***/ 1695: /***/ (
+    /***/ 8106: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(965);
+      module.exports = __webpack_require__(9345);
 
       /***/
     },
@@ -1039,7 +1039,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6745)
+      __webpack_exec__(7391)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Commit: 6203343

@lubieowoce lubieowoce force-pushed the lubieowoce/no-duplicate-custom-server branch from 8e4ea36 to b5de7fb Compare November 21, 2024 13:16
@lubieowoce lubieowoce force-pushed the lubieowoce/custom-server-public-api branch 2 times, most recently from dd6393f to 09f9bd9 Compare November 21, 2024 13:40
@lubieowoce lubieowoce force-pushed the lubieowoce/no-duplicate-custom-server branch from aad1684 to 0d11d04 Compare November 21, 2024 14:00
@lubieowoce lubieowoce force-pushed the lubieowoce/custom-server-public-api branch from 09f9bd9 to ae1992f Compare November 21, 2024 14:00
@lubieowoce lubieowoce force-pushed the lubieowoce/no-duplicate-custom-server branch from 0d11d04 to 2de8d17 Compare November 21, 2024 15:20
@lubieowoce lubieowoce force-pushed the lubieowoce/custom-server-public-api branch from ae1992f to 3c1ddf9 Compare November 21, 2024 15:20
@lubieowoce lubieowoce force-pushed the lubieowoce/no-duplicate-custom-server branch from 2de8d17 to eff7fd2 Compare November 21, 2024 15:53
@lubieowoce lubieowoce force-pushed the lubieowoce/custom-server-public-api branch from 3c1ddf9 to e07044b Compare November 21, 2024 15:53
@lubieowoce lubieowoce force-pushed the lubieowoce/no-duplicate-custom-server branch from be93797 to da3b85e Compare November 21, 2024 17:42
@lubieowoce lubieowoce force-pushed the lubieowoce/custom-server-public-api branch from e07044b to 9c483fa Compare November 21, 2024 17:42
@lubieowoce lubieowoce force-pushed the lubieowoce/no-duplicate-custom-server branch from da3b85e to cf8320c Compare November 22, 2024 19:02
@lubieowoce lubieowoce force-pushed the lubieowoce/custom-server-public-api branch 2 times, most recently from 3cf9038 to 063150f Compare November 22, 2024 20:09
@lubieowoce lubieowoce changed the base branch from lubieowoce/no-duplicate-custom-server to graphite-base/73021 November 22, 2024 21:25
lubieowoce added a commit that referenced this pull request Nov 22, 2024
### What

This PR changes `NextCustomServer` to no longer subclass `NextServer` and instead just delegate all methods to `this.renderServer`. I've also added an interface implemented by both `NextServer` and `NextCustomServer` to make it explicit what we're actually exposing. (Note that we're currently exposing too much for legacy reasons. we might want to decide to clean this up a bit, i've started that in #73021)

I've also cleaned up some random `(_ as any)`s and unnecessary indirections around the area.

### Why

currently, `NextCustomServer` is a subclass of `NextServer`, which makes it very confusing to reason about, because in  `prepare()` it creates *a nested `NextServer`* (stored in `this.renderServer`). this isn't immediately visible in the code, but that's what `getRequestHandlers` ends up doing.
https://github.com/vercel/next.js/blob/58b993c239689f22641682bbcb0d8dea6d85fdf1/packages/next/src/server/next.ts#L281
then, it delegates *some* methods to that (`render`, `getRequestHandler`, `setAssetPrefix`). But some methods (e.g. `render404`) *aren't* overridden/delegated and just run the implementation inherited from `NextServer`. And those implementations are unaware of `this.renderServer`, so they end up initializing a *second* `NextNodeServer` (`this.server` vs `this.renderServer.server`) and run against that instead. that's bad! and it's why e.g. #61676 was necessary -- we needed to update both servers! 

i think that this is a leftover of the old implementation where we ran a separate process for rendering. for historical context, see:
- #49805 which seems to have introduced this split (the proxy only overrides `prepare`, `getRequestHandler`, and `render`)
- #53523 which turned the proxy code into `NextCustomServer`

also apparently `render404` and others were broken in development (try running the tests in the first commit
I've changed `NextCustomServer` and see the server hang forever).
@lubieowoce lubieowoce force-pushed the lubieowoce/custom-server-public-api branch from 063150f to dda6d54 Compare November 22, 2024 21:26
@lubieowoce lubieowoce changed the base branch from graphite-base/73021 to canary November 22, 2024 21:27
@lubieowoce lubieowoce force-pushed the lubieowoce/custom-server-public-api branch from dda6d54 to 6203343 Compare November 22, 2024 21:27
wyattjoh pushed a commit that referenced this pull request Nov 28, 2024
### What

This PR changes `NextCustomServer` to no longer subclass `NextServer` and instead just delegate all methods to `this.renderServer`. I've also added an interface implemented by both `NextServer` and `NextCustomServer` to make it explicit what we're actually exposing. (Note that we're currently exposing too much for legacy reasons. we might want to decide to clean this up a bit, i've started that in #73021)

I've also cleaned up some random `(_ as any)`s and unnecessary indirections around the area.

### Why

currently, `NextCustomServer` is a subclass of `NextServer`, which makes it very confusing to reason about, because in  `prepare()` it creates *a nested `NextServer`* (stored in `this.renderServer`). this isn't immediately visible in the code, but that's what `getRequestHandlers` ends up doing.
https://github.com/vercel/next.js/blob/58b993c239689f22641682bbcb0d8dea6d85fdf1/packages/next/src/server/next.ts#L281
then, it delegates *some* methods to that (`render`, `getRequestHandler`, `setAssetPrefix`). But some methods (e.g. `render404`) *aren't* overridden/delegated and just run the implementation inherited from `NextServer`. And those implementations are unaware of `this.renderServer`, so they end up initializing a *second* `NextNodeServer` (`this.server` vs `this.renderServer.server`) and run against that instead. that's bad! and it's why e.g. #61676 was necessary -- we needed to update both servers! 

i think that this is a leftover of the old implementation where we ran a separate process for rendering. for historical context, see:
- #49805 which seems to have introduced this split (the proxy only overrides `prepare`, `getRequestHandler`, and `render`)
- #53523 which turned the proxy code into `NextCustomServer`

also apparently `render404` and others were broken in development (try running the tests in the first commit
I've changed `NextCustomServer` and see the server hang forever).
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