UNPKG

nuxt-simple-sitemap

Version:

Powerfully flexible XML Sitemaps that integrate seamlessly, for Nuxt.

36 lines (35 loc) 1.57 kB
import { getQuery, setHeader } from "h3"; import { fixSlashes } from "site-config-stack/urls"; import { buildSitemap } from "./builder/sitemap.mjs"; import { buildSitemapIndex } from "./builder/sitemap-index.mjs"; import { useNitroApp } from "#internal/nitro"; import { createSitePathResolver, useSiteConfig } from "#internal/nuxt-site-config"; export function useNitroUrlResolvers(e) { const canonicalQuery = getQuery(e).canonical; const isShowingCanonical = typeof canonicalQuery !== "undefined" && canonicalQuery !== "false"; const siteConfig = useSiteConfig(e); return { event: e, fixSlashes: (path) => fixSlashes(siteConfig.trailingSlash, path), // we need these as they depend on the nitro event canonicalUrlResolver: createSitePathResolver(e, { canonical: isShowingCanonical || !process.dev, absolute: true, withBase: true }), relativeBaseUrlResolver: createSitePathResolver(e, { absolute: false, withBase: true }) }; } export async function createSitemap(e, definition) { const { sitemapName } = definition; const nitro = useNitroApp(); let sitemap = await (definition.sitemapName === "index" ? buildSitemapIndex(useNitroUrlResolvers(e)) : buildSitemap(definition, useNitroUrlResolvers(e))); const ctx = { sitemap, sitemapName }; await nitro.hooks.callHook("sitemap:output", ctx); sitemap = ctx.sitemap; setHeader(e, "Content-Type", "text/xml; charset=UTF-8"); if (!process.dev) setHeader(e, "Cache-Control", "max-age=600, must-revalidate"); e.context._isSitemap = true; return sitemap; }