Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions packages/app-next-js/AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<!-- BEGIN:nextjs-agent-rules -->

## This is NOT the Next.js you know

This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices.

This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.

<!-- END:nextjs-agent-rules -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use client'

import { useParams } from 'next/navigation'

export default function ClientSideRenderedDetail() {
const params = useParams<{ id: string }>()

return <p id="detail-id">{params.id}</p>
}
16 changes: 12 additions & 4 deletions packages/app-next-js/app/client-side-rendered/[id]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
'use client'

import { useParams } from 'next/navigation'
import { Suspense } from 'react'
import dynamic from 'next/dynamic'

export default function ClientSideRenderedDetailPage() {
const params = useParams<{ id: string }>()
const ClientSideRenderedDetail = dynamic(
() => import('./ClientSideRenderedDetail'),
{ ssr: false },
)

return <p id="detail-id">{params.id}</p>
export default function ClientSideRenderedDetailPage() {
return (
<Suspense fallback={null}>
<ClientSideRenderedDetail />
</Suspense>
)
}
7 changes: 6 additions & 1 deletion packages/app-next-js/app/client-side-rendered/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use client'

import { Suspense } from 'react'
import dynamic from 'next/dynamic'

const ClientSideRenderedTable = dynamic(
Expand All @@ -8,5 +9,9 @@ const ClientSideRenderedTable = dynamic(
)

export default function ClientSideRenderedPage() {
return <ClientSideRenderedTable />
return (
<Suspense fallback={null}>
<ClientSideRenderedTable />
</Suspense>
)
}
17 changes: 12 additions & 5 deletions packages/app-next-js/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
export const dynamic = 'force-dynamic'

import { testData } from '../../testdata/src/ssr'
import { Suspense } from 'react'
import { getTestData } from '../data'
import { Table } from './table'

export default async function App() {
return <Table data={await testData()} />
export default function App() {
return (
<Suspense fallback={null}>
<RequestTable />
</Suspense>
)
}

async function RequestTable() {
return <Table data={await getTestData()} />
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import { testData } from '../../../testdata/src/ssr'
import { Suspense } from 'react'
import { getTestData } from '../../data'

export const dynamic = 'force-dynamic'
export default function ServerSideRenderedPage() {
return (
<Suspense fallback={null}>
<RequestTable />
</Suspense>
)
}

export default async function ServerSideRenderedPage() {
const entries = await testData()
async function RequestTable() {
const entries = await getTestData()

return (
<table>
Expand Down
12 changes: 11 additions & 1 deletion packages/app-next-js/app/server-side-rendered/[id]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
import { Suspense } from 'react'

interface Props {
params: Promise<{ id: string }>
}

export default async function ServerSideRenderedDetailPage({ params }: Props) {
export default function ServerSideRenderedDetailPage({ params }: Props) {
return (
<Suspense fallback={null}>
<RequestDetail params={params} />
</Suspense>
)
}

async function RequestDetail({ params }: Props) {
const { id } = await params

return <p id="detail-id">{id}</p>
Expand Down
15 changes: 11 additions & 4 deletions packages/app-next-js/app/server-side-rendered/page.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
import { Suspense } from 'react'
import Link from 'next/link'
import { testData } from '../../../testdata/src/ssr'
import { getTestData } from '../../data'

export const dynamic = 'force-dynamic'
export default function ServerSideRenderedPage() {
return (
<Suspense fallback={null}>
<RequestTable />
</Suspense>
)
}

export default async function ServerSideRenderedPage() {
const entries = await testData()
async function RequestTable() {
const entries = await getTestData()

return (
<table>
Expand Down
15 changes: 11 additions & 4 deletions packages/app-next-js/app/ssr-throughput/page.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
import { testData } from '../../../testdata/src/ssr'
import { Suspense } from 'react'
import { getTestData } from '../../data'
import { Table } from './table'

export const dynamic = 'force-dynamic'
export default function SSRThroughputPage() {
return (
<Suspense fallback={null}>
<RequestTable />
</Suspense>
)
}

export default async function SSRThroughputPage() {
return <Table data={await testData()} />
async function RequestTable() {
return <Table data={await getTestData()} />
}
8 changes: 8 additions & 0 deletions packages/app-next-js/data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { connection } from 'next/server'

export async function getTestData() {
await connection()
// The shared fixture creates UUIDs once per module instance, at request time.
const { testData } = await import('../testdata/src/ssr')
return testData()
}
5 changes: 4 additions & 1 deletion packages/app-next-js/next.config.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
/** @type {import('next').NextConfig} */
const nextConfig = {}
const nextConfig = {
cacheComponents: true,
partialPrefetching: true,
}

export default nextConfig
4 changes: 2 additions & 2 deletions packages/app-next-js/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
"type-check": "tsc --noEmit"
},
"dependencies": {
"next": "16.3.8",
"next": "16.4.0",
"react": "19.3.0",
"react-dom": "19.3.0"
},
"devDependencies": {
"@types/node": "25.9.8",
"@types/node": "25.9.9",
"@types/react": "19.3.0",
"@types/react-dom": "19.3.0",
"typescript": "6.0.3"
Expand Down
Loading
Loading