@prismicio/next
Version:
Helpers to integrate Prismic into Next.js apps
30 lines (29 loc) • 1.38 kB
JavaScript
//#region src/getPrismicCacheTags.ts
const CACHE_TAG_PREFIX = "prismic/";
/**
* Generates cache tags for a set of Prismic pages. Tags for linked pages (e.g. a content
* relationship) are included to ensure all related content can be revalidated.
*
* @param pages - A set of Prismic pages used to tag the function.
* @experimental
*
* @see {@link https://nextjs.org/docs/app/api-reference/functions/cacheTag}
*/
function getPrismicCacheTags(pages) {
return [...new Set(getPrismicDocumentIDs(pages))].map((id) => buildPrismicCacheTag(id));
}
function buildPrismicCacheTag(id) {
return `${CACHE_TAG_PREFIX}${id}`;
}
function getPrismicDocumentIDs(input) {
if (typeof input !== "object" || input == null) return [];
if (Array.isArray(input)) return input.flatMap((item) => getPrismicDocumentIDs(item));
if ("id" in input && typeof input.id === "string") {
if ("href" in input && typeof input.href === "string" && input.href.includes("/api/v2/documents/search?") || "link_type" in input && input.link_type === "Document") if ("data" in input && typeof input.data === "object" && input.data !== null) return [input.id, ...getPrismicDocumentIDs(input.data)];
else return [input.id];
}
return Object.values(input).flatMap((input) => getPrismicDocumentIDs(input));
}
//#endregion
export { buildPrismicCacheTag, getPrismicCacheTags };
//# sourceMappingURL=getPrismicCacheTags.js.map