From 52632800856ce28a3461d45dc16971fcd0527304 Mon Sep 17 00:00:00 2001 From: Julien Oculi Date: Thu, 11 Jul 2024 12:22:22 +0200 Subject: [PATCH] feat(backend): :zap: add well cache control for assets --- .gitignore | 1 + routes/_middleware.ts | 4 +++- src/cache/middleware.ts | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/cache/middleware.ts diff --git a/.gitignore b/.gitignore index 9e47da6..734b297 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ static/dev # Dev cache files cache/ +!src/cache/ diff --git a/routes/_middleware.ts b/routes/_middleware.ts index 2f117af..99b7e64 100644 --- a/routes/_middleware.ts +++ b/routes/_middleware.ts @@ -1,4 +1,5 @@ import { FreshContext } from '$fresh/server.ts' +import { useCache } from ':src/cache/middleware.ts' import { useCsp } from ':src/csp/middleware.ts' import { useSecurityHeaders } from ':src/security_headers/middleware.ts' import { useServiceworker } from ':src/serviceworker/middleware.ts' @@ -16,7 +17,8 @@ export async function handler(request: Request, ctx: FreshContext) { useSecurityHeaders(request, response, ctx) await useCsp(request, response, ctx) useSession(request, response, ctx) - useServiceworker(request, response, ctx) + useServiceworker(request, response, ctx) + useCache(request, response, ctx) return response } diff --git a/src/cache/middleware.ts b/src/cache/middleware.ts new file mode 100644 index 0000000..b714f66 --- /dev/null +++ b/src/cache/middleware.ts @@ -0,0 +1,19 @@ +import { FreshContext } from '$fresh/server.ts' + +export function useCache( + _request: Request, + response: Response, + ctx: FreshContext, +) { + if (ctx.config.dev) return + if ( + ctx.url.pathname.match( + /(.+\.|_)((css)|(ttf)|(woff2)|(png)|(svg)|(jpe?g)|(avif))/, + ) + ) { + response.headers.set( + 'Cache-Control', + 'public, max-age=31536000, immutable', + ) + } +}