diff --git a/examples/app-pages-router/app/isr/page.tsx b/examples/app-pages-router/app/isr/page.tsx index e88f677c8..3eadac36d 100644 --- a/examples/app-pages-router/app/isr/page.tsx +++ b/examples/app-pages-router/app/isr/page.tsx @@ -5,5 +5,5 @@ async function getTime() { export const revalidate = 10; export default async function ISR() { const time = getTime(); - return
ISR: {time}
; + return
Time: {time}
; } diff --git a/examples/app-pages-router/app/layout.tsx b/examples/app-pages-router/app/layout.tsx index 85e1c420b..e49706e15 100644 --- a/examples/app-pages-router/app/layout.tsx +++ b/examples/app-pages-router/app/layout.tsx @@ -17,7 +17,10 @@ export default function RootLayout({ }) { return ( - {children} + +
Header
+ {children} + ); } diff --git a/examples/app-pages-router/app/ssr/layout.tsx b/examples/app-pages-router/app/ssr/layout.tsx new file mode 100644 index 000000000..3a8338f50 --- /dev/null +++ b/examples/app-pages-router/app/ssr/layout.tsx @@ -0,0 +1,10 @@ +import { PropsWithChildren } from "react"; + +export default function Layout({ children }: PropsWithChildren) { + return ( +
+

SSR

+ {children} +
+ ); +} diff --git a/examples/app-pages-router/app/ssr/page.tsx b/examples/app-pages-router/app/ssr/page.tsx index 394f6e148..ed3c0b22e 100644 --- a/examples/app-pages-router/app/ssr/page.tsx +++ b/examples/app-pages-router/app/ssr/page.tsx @@ -1,12 +1,23 @@ -import { wait } from "@open-next/utils"; +import React from "react"; + +import { headers } from "next/headers"; + +async function getTime() { + const res = await new Promise((resolve) => { + setTimeout(() => { + resolve(new Date().toISOString()); + }, 1500); + }); + return res; +} -export const revalidate = 0; export default async function SSR() { - await wait(2000); - const time = new Date().toISOString(); + const time = await getTime(); + const headerList = headers(); return (
-

SSR {time}

+

Time: {time}

+
{headerList.get("host")}
); } diff --git a/examples/app-pages-router/next.config.js b/examples/app-pages-router/next.config.js index 6e0d91116..29f248fa7 100644 --- a/examples/app-pages-router/next.config.js +++ b/examples/app-pages-router/next.config.js @@ -1,6 +1,7 @@ /** @type {import('next').NextConfig} */ const nextConfig = { poweredByHeader: false, + cleanDistDir: true, transpilePackages: ["@example/shared"], output: "standalone", outputFileTracing: "../sst", diff --git a/examples/app-pages-router/pages/pages_isr/index.tsx b/examples/app-pages-router/pages/pages_isr/index.tsx index c5efe2352..08a953bba 100644 --- a/examples/app-pages-router/pages/pages_isr/index.tsx +++ b/examples/app-pages-router/pages/pages_isr/index.tsx @@ -12,5 +12,5 @@ export async function getStaticProps() { export default function Page({ time, }: InferGetStaticPropsType) { - return
ISR: {time}
; + return
Time: {time}
; } diff --git a/examples/app-pages-router/pages/pages_ssr/index.tsx b/examples/app-pages-router/pages/pages_ssr/index.tsx index 372da27a5..86627836a 100644 --- a/examples/app-pages-router/pages/pages_ssr/index.tsx +++ b/examples/app-pages-router/pages/pages_ssr/index.tsx @@ -11,5 +11,5 @@ export async function getServerSideProps() { export default function Page({ time, }: InferGetServerSidePropsType) { - return
SSR: {time}
; + return
Time: {time}
; } diff --git a/examples/app-router/app/api/sse/route.ts b/examples/app-router/app/api/sse/route.ts new file mode 100644 index 000000000..375af9592 --- /dev/null +++ b/examples/app-router/app/api/sse/route.ts @@ -0,0 +1,47 @@ +import { wait } from "@open-next/utils"; +import { NextRequest } from "next/server"; + +export const dynamic = "force-dynamic"; + +export async function GET(request: NextRequest) { + const resStream = new TransformStream(); + const writer = resStream.writable.getWriter(); + + const res = new Response(resStream.readable, { + headers: { + "Content-Type": "text/event-stream", + Connection: "keep-alive", + "Cache-Control": "no-cache, no-transform", + }, + }); + + setTimeout(async () => { + writer.write( + `data: ${JSON.stringify({ + message: "open", + time: new Date().toISOString(), + })}\n\n`, + ); + for (let i = 1; i <= 4; i++) { + await wait(2000); + writer.write( + `data: ${JSON.stringify({ + message: "hello:" + i, + time: new Date().toISOString(), + })}\n\n`, + ); + } + + await wait(2000); // Wait for 4 seconds + writer.write( + `data: ${JSON.stringify({ + message: "close", + time: new Date().toISOString(), + })}\n\n`, + ); + await wait(5000); + await writer.close(); + }, 100); + + return res; +} diff --git a/examples/app-router/app/isr/page.tsx b/examples/app-router/app/isr/page.tsx index e88f677c8..3eadac36d 100644 --- a/examples/app-router/app/isr/page.tsx +++ b/examples/app-router/app/isr/page.tsx @@ -5,5 +5,5 @@ async function getTime() { export const revalidate = 10; export default async function ISR() { const time = getTime(); - return
ISR: {time}
; + return
Time: {time}
; } diff --git a/examples/app-router/app/page.tsx b/examples/app-router/app/page.tsx index e2aa3b3e7..66da3ac80 100644 --- a/examples/app-router/app/page.tsx +++ b/examples/app-router/app/page.tsx @@ -26,7 +26,8 @@ export default function Home() { new timestamp