From 23bacbbe41dfed363ee2aecbd0a48950fa645fa7 Mon Sep 17 00:00:00 2001
From: paku <paku@skyizwhite.dev>
Date: Sat, 16 Nov 2024 14:02:31 +0900
Subject: [PATCH] Improve caching

---
 src/renderer.lisp | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/renderer.lisp b/src/renderer.lisp
index a6b9bd1..f0c9f26 100644
--- a/src/renderer.lisp
+++ b/src/renderer.lisp
@@ -8,6 +8,9 @@
   (:local-nicknames (#:env #:hp/env)))
 (in-package #:hp/renderer)
 
+(defun bust-cache (url)
+  (format nil "~a?~a" url #.(get-universal-time)))
+
 (defcomp document (&key title description children)
   (hsx
    (html :lang "ja"
@@ -16,20 +19,25 @@
        (meta :name "viewport" :content "width=device-width, initial-scale=1")
        (link :rel "icon" :href "/favicon.ico")
        (link :rel "apple-touch-icon" :href "/favicon.ico")
-       (link :rel "stylesheet" :href (format nil "/dist.css?~a" #.(get-universal-time)))
+       (link :rel "stylesheet" :href (bust-cache "/dist.css"))
        (script :src "https://cdn.jsdelivr.net/npm/htmx.org@2.0.0/dist/htmx.min.js")
        (script :src "https://cdn.jsdelivr.net/npm/htmx-ext-head-support@2.0.0/head-support.min.js")
+       (script :src "https://cdn.jsdelivr.net/npm/htmx-ext-response-targets@2.0.0/response-targets.min.js")
        (script :src "https://cdn.jsdelivr.net/npm/alpinejs@3.14.0/dist/cdn.min.js" :defer t)
        (title (format nil "~@[~a - ~]skyizwhite.dev" title))
        (meta
          :name "description"
          :content (or description "pakuの個人サイト")))
-     (body :hx-ext "head-support"
+     (body :hx-ext "head-support, response-targets" :hx-target-404 "body"
        (main :class "container mx-auto"
          children)))))
 
 (defmethod jg:process-response ((app jg:app) result)
   (jg:set-response-header :content-type "text/html; charset=utf-8")
+  (when (env:dev-mode-p)
+    (jg:set-response-header :cache-control "no-store, no-cache, must-revalidate")
+    (jg:set-response-header :pragma "no-cache")
+    (jg:set-response-header :expires "0"))
   (call-next-method app
                     (hsx:render-to-string
                      (match result