Un fournisseur de cache natif pour Astro.
@canner-ca/astro-cache intègre Canner à la mise en cache des routes d'Astro 7 comme fournisseur de première classe — la même API que sur Netlify, Vercel ou Cloudflare — avec le mode brouillon et des en-têtes de cache en une ligne. Purge par étiquette et par URL, « stale-while-revalidate », aucune dépendance.
Le fournisseur de cache (Astro 7+)
Configurez Canner une fois comme fournisseur de cache, puis contrôlez la mise en cache par route avec Astro.cache.set(). Canner met en cache au niveau de son proxy — devant votre application, partagé entre les instances — sans jamais dépenser la mémoire de votre application pour un cache interne, et invalidate() purge par étiquette ou par URL.
// astro.config.mjs
import { cacheCanner } from '@canner-ca/astro-cache';
export default defineConfig({
adapter: node({ mode: 'standalone' }),
cache: {
provider: cacheCanner({
slug: 'my-project',
token: process.env.CANNER_CACHE_TOKEN,
}),
},
});
// then, in any page or endpoint:
Astro.cache.set({ maxAge: 3600, swr: 86400, tags: [post.id] });Mode brouillon
Prévisualisez du contenu non publié sur sa vraie URL sans vider la page publiée. enableDraft() pose un témoin sécurisé portant votre secret de contournement; Canner rend ce visiteur à neuf depuis l'origine pendant que les autres gardent la page en cache. Autorisez la route vous-même, puis vérifiez isDraft() pour récupérer le contenu brouillon.
// src/pages/api/draft.ts
import { enableDraft } from '@canner-ca/astro-cache';
export const GET = ({ url, cookies, redirect }) => {
if (url.searchParams.get('secret') !== import.meta.env.PREVIEW_SECRET) {
return new Response('Unauthorized', { status: 401 });
}
enableDraft(cookies, import.meta.env.CANNER_BYPASS_SECRET);
return redirect(url.searchParams.get('to') ?? '/');
};Vous préférez les en-têtes par route ?
Appelez cache() dans n'importe quelle route rendue côté serveur avec une durée et les étiquettes qui identifient le contenu de la page. C'est toute l'intégration côté code.
---
// src/pages/blog/[slug].astro
import { cache } from '@canner-ca/astro-cache';
const post = await getPost(Astro.params.slug);
cache(Astro.response, { ttl: 3600, swr: 86400, tags: [post.id, 'blog-listing'] });
---Ce qui est posé
Cache-Control: public, s-maxage=3600, stale-while-revalidate=86400 Surrogate-Key: <post.id> blog-listing
À la publication de l'article, le webhook DatoCMS purge l'id de l'enregistrement (Canner lit automatiquement l'enregistrement modifié) et Canner vide toutes les pages portant cette étiquette. Ajoutez une étiquette stable comme blog-listing à votre page d'index pour la vider aussi.
Options
ttlObligatoire. Secondes pendant lesquelles Canner peut servir la réponse en cache — pose s-maxage.tagsChaîne, nombre ou tableau. Pose Surrogate-Key. Les nombres sont convertis; les doublons et les étiquettes avec espaces sont écartés.browserTtlOptionnel. Secondes de cache côté navigateur (pose max-age). Omettez-le pour garder les purges instantanées.Ce que Canner met en cache
Une réponse n'est mise en cache que si toutes ces conditions sont vraies — les règles mêmes que cet utilitaire produit :
- GET ou HEAD, statut 200
- Cache-Control: public avec un s-maxage positif (ou max-age)
- aucun Set-Cookie
- Vary absent ou uniquement Accept-Encoding
- corps de moins de 8 Mo
Il ne fait qu'ajouter des en-têtes
L'utilitaire ne retire ni ne modifie jamais ce que votre application a posé. Il ne supprime pas Set-Cookie — Canner refuse déjà de mettre en cache une réponse qui pose un témoin, donc si vous marquez une telle route comme cachable, vous obtenez un avertissement en développement et votre témoin reste intact. Une durée invalide ne pose aucun en-tête et avertit; seule une valeur qui n'est ni une Response ni des Headers lève une erreur.
Puis dirigez votre CMS vers Canner
Le côté code est terminé. L'autre moitié, ce sont deux valeurs à copier — l'URL du webhook et un en-tête Authorization — affichées préremplies dans le tableau de bord sous Réglages → Cache. Aucun corps de requête nécessaire; Canner lit automatiquement la charge utile DatoCMS. Guide complet du cache.
Code source et problèmes : tools/astro-cache/ dans le dépôt canner sur GitHub. Sous licence MIT.