Files
cloudflare__vinext/tests/fixtures/cf-app-basic/middleware.ts
James Anderson 9265f300cc feat(cloudflare): isolate cached response entrypoint (#3152)
* feat(cloudflare): isolate cached response entrypoint

* test(cloudflare): reuse generic stage facade coverage

* test(cloudflare): preserve composite CDN output config

* fix(cloudflare): track final shared response provenance

* fix(cloudflare): validate routed response artifacts

* test(build): follow response-stage sidecar closure

* test(build): validate response-stage manifest closure

* style(test): format stage closure assertion

* test(cache): assert uncached gateway policy for browser fetch

* fix(cloudflare): partition framework cache variants

* feat(cloudflare): expose entrypoint cache status

* fix(cloudflare): protect shared response provenance

* test(cloudflare): align local cache status mirrors

* test(cloudflare): align entrypoint gateway policy
2026-09-07 21:48:28 +01:00

56 lines
2.3 KiB
TypeScript

import { draftMode } from "next/headers";
import { NextResponse, type NextRequest } from "next/server";
/**
* Mirrors the upstream `app-middleware` fixture: mutate the *request* headers
* so downstream handlers (including Pages Router `pages/api/*`) observe the
* injected header, and enable draft mode on `?draft=true`. Regression coverage
* for #1520.
*/
export async function middleware(request: NextRequest) {
const visitorId = request.headers.get("x-test-visitor-id") ?? "anonymous";
if (request.nextUrl.pathname.startsWith("/cdn-stage-cookie/")) {
const response = NextResponse.next();
response.cookies.set("stage-cookie", visitorId);
response.headers.set("x-cdn-stage-visitor", visitorId);
return response;
}
if (request.nextUrl.pathname === "/%61dmin") {
return NextResponse.rewrite(new URL("/admin", request.url));
}
if (request.nextUrl.pathname.startsWith("/encoded-parity/rewrite/")) {
const target = request.nextUrl.clone();
target.pathname = request.nextUrl.pathname.replace(
"/encoded-parity/rewrite/",
"/encoded-parity/page/",
);
return NextResponse.rewrite(target);
}
if (request.nextUrl.searchParams.get("draft")) {
(await draftMode()).enable();
}
const headers = new Headers(request.headers);
const testsMiddlewareRequestHeaders =
request.nextUrl.pathname.startsWith("/api/dump-headers") ||
request.nextUrl.pathname.startsWith("/api/cdn-stage-middleware-header/");
if (request.nextUrl.pathname.startsWith("/api/cdn-stage-middleware-header/")) {
headers.set("x-from-middleware", visitorId);
} else {
headers.set("x-from-middleware", "hello-from-middleware");
}
const response = testsMiddlewareRequestHeaders
? NextResponse.next({ request: { headers } })
: NextResponse.next();
if (
request.nextUrl.pathname.startsWith("/cdn-stage-app/") ||
request.nextUrl.pathname.startsWith("/cdn-stage-cookie/") ||
request.nextUrl.pathname.startsWith("/cdn-stage-late/") ||
request.nextUrl.pathname.startsWith("/api/cdn-stage-late-route/") ||
request.nextUrl.pathname.startsWith("/api/cdn-stage-middleware-header/") ||
request.nextUrl.pathname.startsWith("/cdn-stage-pages/")
) {
response.headers.set("x-cdn-stage-visitor", visitorId);
}
return response;
}