import "server-only"; import { cacheLife, cacheTag } from "next/cache"; import { getPublicPage, listPublicCharacters } from "@/lib/content/queries"; import { getPublicGuide, listPublicGuideCards } from "@/lib/guides/queries"; import { characterCacheTag, dataSourceCacheTag, DIRECTORY_CACHE_TAG, GLOSSARY_CACHE_TAG, pageCacheTag, vectorCacheTag, } from "@/lib/cache/tags"; export async function getCachedPublicDirectory() { "use cache: remote"; cacheLife({ stale: 30, revalidate: 60, expire: 60 * 60 }); cacheTag(DIRECTORY_CACHE_TAG); cacheTag(GLOSSARY_CACHE_TAG); return listPublicCharacters(); } export async function getCachedPublicPage( characterSlug: string, pageSlug?: string, ) { "use cache: remote"; cacheLife({ stale: 15, revalidate: 60, expire: 60 * 60 }); const result = await getPublicPage(characterSlug, pageSlug); cacheTag(DIRECTORY_CACHE_TAG); cacheTag(GLOSSARY_CACHE_TAG); if (result.type === "page") { cacheTag( pageCacheTag(result.snapshot.page.id), characterCacheTag(result.snapshot.character.id), vectorCacheTag( result.snapshot.page.id, result.snapshot.page.version, result.snapshot.versionVector, ), ...Object.keys(result.snapshot.versionVector).map(dataSourceCacheTag), ); } return result; } export async function getCachedPublicGuideCards() { "use cache: remote"; cacheLife({ stale: 30, revalidate: 60, expire: 60 * 60 }); cacheTag(DIRECTORY_CACHE_TAG); cacheTag(GLOSSARY_CACHE_TAG); return listPublicGuideCards(); } export async function getCachedPublicGuide(slug: string) { "use cache: remote"; cacheLife({ stale: 15, revalidate: 60, expire: 60 * 60 }); const result = await getPublicGuide(slug); cacheTag(DIRECTORY_CACHE_TAG); cacheTag(GLOSSARY_CACHE_TAG); if (result) cacheTag(pageCacheTag(result.id)); return result; }