Skip to content

Commit b16fd3f

Browse files
committed
add e2e test for top-level await in middleware
1 parent e5678b3 commit b16fd3f

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

examples/app-pages-router/middleware.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
import type { NextRequest } from "next/server";
22
import { NextResponse } from "next/server";
33

4+
// Needed to test top-level await
5+
// @ts-expect-error - It will cause a warning at build time, but it should just work
6+
const topLevelAwait = await new Promise<string>((resolve) => {
7+
setTimeout(() => {
8+
resolve("top-level-await");
9+
}, 150);
10+
});
11+
412
export function middleware(request: NextRequest) {
513
const path = request.nextUrl.pathname; //new URL(request.url).pathname;
614

@@ -25,6 +33,14 @@ export function middleware(request: NextRequest) {
2533
},
2634
});
2735
}
36+
if (path === "/api/middlewareTopLevelAwait") {
37+
return new NextResponse(JSON.stringify({ hello: topLevelAwait }), {
38+
status: 200,
39+
headers: {
40+
"content-type": "application/json",
41+
},
42+
});
43+
}
2844
const rHeaders = new Headers(request.headers);
2945
const r = NextResponse.next({
3046
request: {

packages/tests-e2e/tests/appPagesRouter/api.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,9 @@ test("API call from middleware", async ({ page }) => {
2727
el = page.getByText('API: { "hello": "middleware" }');
2828
await expect(el).toBeVisible();
2929
});
30+
31+
test("API call from middleware with top-level await", async ({ request }) => {
32+
const response = await request.get("/api/middlewareTopLevelAwait");
33+
const data = await response.json();
34+
expect(data).toEqual({ hello: "top-level-await" });
35+
});

0 commit comments

Comments
 (0)