diff --git a/examples/app-pages-router/middleware.ts b/examples/app-pages-router/middleware.ts index 4f4347983..5dcf14145 100644 --- a/examples/app-pages-router/middleware.ts +++ b/examples/app-pages-router/middleware.ts @@ -1,6 +1,16 @@ import type { NextRequest } from "next/server"; import { NextResponse } from "next/server"; +// Needed to test top-level await +// We are using `setTimeout` to simulate a "long" running operation +// we could have used `Promise.resolve` instead, but it would be running in a different way in the event loop +// @ts-expect-error - It will cause a warning at build time, but it should just work +const topLevelAwait = await new Promise((resolve) => { + setTimeout(() => { + resolve("top-level-await"); + }, 10); +}); + export function middleware(request: NextRequest) { const path = request.nextUrl.pathname; //new URL(request.url).pathname; @@ -25,6 +35,14 @@ export function middleware(request: NextRequest) { }, }); } + if (path === "/api/middlewareTopLevelAwait") { + return new NextResponse(JSON.stringify({ hello: topLevelAwait }), { + status: 200, + headers: { + "content-type": "application/json", + }, + }); + } const rHeaders = new Headers(request.headers); const r = NextResponse.next({ request: { diff --git a/packages/tests-e2e/tests/appPagesRouter/api.test.ts b/packages/tests-e2e/tests/appPagesRouter/api.test.ts index 49fb0841a..14bb2f560 100644 --- a/packages/tests-e2e/tests/appPagesRouter/api.test.ts +++ b/packages/tests-e2e/tests/appPagesRouter/api.test.ts @@ -27,3 +27,9 @@ test("API call from middleware", async ({ page }) => { el = page.getByText('API: { "hello": "middleware" }'); await expect(el).toBeVisible(); }); + +test("API call from middleware with top-level await", async ({ request }) => { + const response = await request.get("/api/middlewareTopLevelAwait"); + const data = await response.json(); + expect(data).toEqual({ hello: "top-level-await" }); +});