Skip to content

Commit c8621b3

Browse files
committed
feat: add central cache directive
1 parent 6899682 commit c8621b3

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

src/run/handlers/server.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ const disableFaultyTransferEncodingHandling = (res: ComputeJsOutgoingMessage) =>
4848
// TODO: remove once https://github.com/netlify/serverless-functions-api/pull/219
4949
// is released and public types are updated
5050
interface FutureContext extends Context {
51+
flags: {
52+
get: (name: string) => boolean
53+
},
5154
waitUntil?: (promise: Promise<unknown>) => void
5255
}
5356

@@ -123,7 +126,9 @@ export default async (request: Request, context: FutureContext) => {
123126

124127
await adjustDateHeader({ headers: response.headers, request, span, tracer, requestContext })
125128

126-
setCacheControlHeaders(response.headers, request, requestContext)
129+
const useCentralCache = context.flags.get("serverless_functions_nextjs_central_cache")
130+
131+
setCacheControlHeaders(response.headers, request, requestContext, useCentralCache)
127132
setCacheTagsHeaders(response.headers, request, tagsManifest, requestContext)
128133
setVaryHeaders(response.headers, request, nextConfig)
129134
setCacheStatusHeader(response.headers)

src/run/headers.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,10 @@ export const setCacheControlHeaders = (
220220
headers: Headers,
221221
request: Request,
222222
requestContext: RequestContext,
223+
useCentralCache: boolean
223224
) => {
225+
const centralCacheDirective = useCentralCache ? ', persist' : ''
226+
224227
if (
225228
typeof requestContext.routeHandlerRevalidate !== 'undefined' &&
226229
['GET', 'HEAD'].includes(request.method) &&
@@ -232,7 +235,7 @@ export const setCacheControlHeaders = (
232235
// if we are serving already stale response, instruct edge to not attempt to cache that response
233236
headers.get('x-nextjs-cache') === 'STALE'
234237
? 'public, max-age=0, must-revalidate'
235-
: `s-maxage=${requestContext.routeHandlerRevalidate === false ? 31536000 : requestContext.routeHandlerRevalidate}, stale-while-revalidate=31536000`
238+
: `s-maxage=${requestContext.routeHandlerRevalidate === false ? 31536000 : requestContext.routeHandlerRevalidate}, stale-while-revalidate=31536000${centralCacheDirective}`
236239

237240
headers.set('netlify-cdn-cache-control', cdnCacheControl)
238241
return
@@ -259,7 +262,7 @@ export const setCacheControlHeaders = (
259262
)
260263

261264
headers.set('cache-control', browserCacheControl || 'public, max-age=0, must-revalidate')
262-
headers.set('netlify-cdn-cache-control', cdnCacheControl)
265+
headers.set('netlify-cdn-cache-control', cdnCacheControl + centralCacheDirective)
263266
return
264267
}
265268

0 commit comments

Comments
 (0)