UNPKG

@prismicio/next

Version:

Helpers to integrate Prismic into Next.js apps

30 lines (29 loc) 1.38 kB
//#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