mirror of
https://github.com/cloudflare/vinext.git
synced 2026-09-14 19:04:59 +08:00
9265f300cc
* 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
56 lines
2.3 KiB
TypeScript
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;
|
|
}
|