From c8621b3a35bc86653d933b20d80234ca1b694511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Bou=C3=A7as?= Date: Thu, 20 Jun 2024 11:30:43 +0100 Subject: [PATCH 1/2] feat: add central cache directive --- src/run/handlers/server.ts | 7 ++++++- src/run/headers.ts | 7 +++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/run/handlers/server.ts b/src/run/handlers/server.ts index c63cfcd42d..404e413061 100644 --- a/src/run/handlers/server.ts +++ b/src/run/handlers/server.ts @@ -48,6 +48,9 @@ const disableFaultyTransferEncodingHandling = (res: ComputeJsOutgoingMessage) => // TODO: remove once https://github.com/netlify/serverless-functions-api/pull/219 // is released and public types are updated interface FutureContext extends Context { + flags: { + get: (name: string) => boolean + }, waitUntil?: (promise: Promise) => void } @@ -123,7 +126,9 @@ export default async (request: Request, context: FutureContext) => { await adjustDateHeader({ headers: response.headers, request, span, tracer, requestContext }) - setCacheControlHeaders(response.headers, request, requestContext) + const useCentralCache = context.flags.get("serverless_functions_nextjs_central_cache") + + setCacheControlHeaders(response.headers, request, requestContext, useCentralCache) setCacheTagsHeaders(response.headers, request, tagsManifest, requestContext) setVaryHeaders(response.headers, request, nextConfig) setCacheStatusHeader(response.headers) diff --git a/src/run/headers.ts b/src/run/headers.ts index 53b0137074..5d1680e400 100644 --- a/src/run/headers.ts +++ b/src/run/headers.ts @@ -220,7 +220,10 @@ export const setCacheControlHeaders = ( headers: Headers, request: Request, requestContext: RequestContext, + useCentralCache: boolean ) => { + const centralCacheDirective = useCentralCache ? ', persist' : '' + if ( typeof requestContext.routeHandlerRevalidate !== 'undefined' && ['GET', 'HEAD'].includes(request.method) && @@ -232,7 +235,7 @@ export const setCacheControlHeaders = ( // if we are serving already stale response, instruct edge to not attempt to cache that response headers.get('x-nextjs-cache') === 'STALE' ? 'public, max-age=0, must-revalidate' - : `s-maxage=${requestContext.routeHandlerRevalidate === false ? 31536000 : requestContext.routeHandlerRevalidate}, stale-while-revalidate=31536000` + : `s-maxage=${requestContext.routeHandlerRevalidate === false ? 31536000 : requestContext.routeHandlerRevalidate}, stale-while-revalidate=31536000${centralCacheDirective}` headers.set('netlify-cdn-cache-control', cdnCacheControl) return @@ -259,7 +262,7 @@ export const setCacheControlHeaders = ( ) headers.set('cache-control', browserCacheControl || 'public, max-age=0, must-revalidate') - headers.set('netlify-cdn-cache-control', cdnCacheControl) + headers.set('netlify-cdn-cache-control', cdnCacheControl + centralCacheDirective) return } From 00975374aa03961756781e547eecd5334522fa7d Mon Sep 17 00:00:00 2001 From: eduardoboucas Date: Thu, 20 Jun 2024 10:35:42 +0000 Subject: [PATCH 2/2] chore: format with prettier --- src/run/handlers/server.ts | 4 ++-- src/run/headers.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/run/handlers/server.ts b/src/run/handlers/server.ts index 404e413061..11235ba74b 100644 --- a/src/run/handlers/server.ts +++ b/src/run/handlers/server.ts @@ -50,7 +50,7 @@ const disableFaultyTransferEncodingHandling = (res: ComputeJsOutgoingMessage) => interface FutureContext extends Context { flags: { get: (name: string) => boolean - }, + } waitUntil?: (promise: Promise) => void } @@ -126,7 +126,7 @@ export default async (request: Request, context: FutureContext) => { await adjustDateHeader({ headers: response.headers, request, span, tracer, requestContext }) - const useCentralCache = context.flags.get("serverless_functions_nextjs_central_cache") + const useCentralCache = context.flags.get('serverless_functions_nextjs_central_cache') setCacheControlHeaders(response.headers, request, requestContext, useCentralCache) setCacheTagsHeaders(response.headers, request, tagsManifest, requestContext) diff --git a/src/run/headers.ts b/src/run/headers.ts index 5d1680e400..6f11ec88da 100644 --- a/src/run/headers.ts +++ b/src/run/headers.ts @@ -220,7 +220,7 @@ export const setCacheControlHeaders = ( headers: Headers, request: Request, requestContext: RequestContext, - useCentralCache: boolean + useCentralCache: boolean, ) => { const centralCacheDirective = useCentralCache ? ', persist' : ''