UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

49 lines (48 loc) 1.65 kB
import { convertToSafeString } from "@withstudiocms/internal_helpers/utils"; import { addVirtualImports, createResolver } from "astro-integration-kit"; function safeString(str) { return convertToSafeString(str).replace(/^_+/, "").replace(/_+$/, "").replace("studiocms_", ""); } function dynamicSitemap(options) { const { resolve } = createResolver(import.meta.url); return { name: "studiocms/dynamic-sitemap", hooks: { /* v8 ignore start */ "astro:config:setup": (params) => { const { injectRoute } = params; const { sitemaps } = options; addVirtualImports(params, { name: "studiocms/dynamic-sitemap", imports: { "virtual:studiocms/sitemaps": ` export const sitemaps = ${JSON.stringify([...sitemaps.map(({ pluginName }) => `./sitemap-${safeString(pluginName)}.xml`)])}; ` } }); injectRoute({ entrypoint: resolve("./sitemap-index.xml.js"), pattern: "/sitemap-index.xml", prerender: false }); const existingSitemaps = []; for (const { pluginName, sitemapXMLEndpointPath: entrypoint } of sitemaps) { let pattern = `/sitemap-${safeString(pluginName)}.xml`; if (existingSitemaps.includes(pattern)) { pattern = `/sitemap-${safeString(pluginName)}-${existingSitemaps.length}.xml`; } injectRoute({ entrypoint, pattern, prerender: false }); } } /* v8 ignore stop */ } }; } export { dynamicSitemap, safeString };