Repository: vercel/next.js
Pull request: [test] Add repro for SSR bug when large chunks are deferred in Flight

Fails with https://github.com/vercel/next.js/pull/79477

Changed files:
filename: test/e2e/app-dir/metadata/app/large-shell/[slug]/page.tsx
patch: @@ -0,0 +1,125 @@
+import type { Metadata } from 'next'
+
+export const experimental_ppr = true
+
+export const generateMetadata = async ({ params }): Promise<Metadata> => {
+  const { slug } = await params
+  return { title: `${slug}` }
+}
+
+export default function Page() {
+  return (
+    <>
+      <p>{'BEGINNINGasdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'MIDDLEasdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'asdasdasadasdasd232344234234234'}</p>
+      <p>{'asdsadiasdhasuidhasdiuasasdsadduhiuihueiohjewiohjewiohj'}</p>
+      <p>{'asdasd'}</p>
+      <p>{'ENDasdasdasadasdasd232344234234234'}</p>
+    </>
+  )
+}

filename: test/e2e/app-dir/metadata/metadata.test.ts
patch: @@ -855,4 +855,21 @@ describe('app dir - metadata', () => {
       )
     }
   })
+
+  it('regression: renders a large shell', async () => {
+    const pageErrors: unknown[] = []
+    await next.browser('/large-shell/foo', {
+      beforePageLoad(page) {
+        page.on('pageerror', (error) => {
+          pageErrors.push(error)
+        })
+      },
+    })
+
+    // TODO: Assert on errorless pages by default.
+    // This isn't 100% accurate.
+    // We sometimes receive the pageerror after the hydration complete event
+    // since that event is just for shell hydration not everything being hydrated.
+    expect(pageErrors).toEqual([])
+  })
 })

filename: test/e2e/app-dir/metadata/next.config.js
patch: @@ -1 +1,4 @@
-module.exports = {}
+/** @type {import('next').NextConfig} */
+const config = {}
+
+module.exports = config