UNPKG

nuxt-simple-sitemap

Version:

Powerfully flexible XML Sitemaps that integrate seamlessly, for Nuxt.

39 lines (38 loc) 1.73 kB
import { defu } from "defu"; import { defineNitroPlugin } from "nitropack/dist/runtime/plugin"; import { useSimpleSitemapRuntimeConfig } from "../../utils.mjs"; export default defineNitroPlugin((nitroApp) => { const { discoverImages, isNuxtContentDocumentDriven } = useSimpleSitemapRuntimeConfig(); nitroApp.hooks.hook("content:file:afterParse", async (content) => { if (content.sitemap === false || content._draft || content._extension !== "md" || content._partial || content.indexable === false || content.index === false) return; let images = []; if (discoverImages) { images = content.body?.children?.filter( (c) => c.tag && c.props?.src && ["image", "img", "nuxtimg", "nuxt-img"].includes(c.tag.toLowerCase()) ).map((i) => ({ loc: i.props.src })) || []; } const sitemapConfig = typeof content.sitemap === "object" ? content.sitemap : {}; const lastmod = content.modifiedAt || content.updatedAt; const defaults = {}; if (isNuxtContentDocumentDriven) defaults.loc = content._path; if (content.path) defaults.loc = content.path; if (images.length > 0) defaults.images = images; if (lastmod) defaults.lastmod = lastmod; const definition = defu(sitemapConfig, defaults); if (!definition.loc) { if (content.path && content.path && content.path.startsWith("/")) definition.loc = content.path; if (Object.keys(sitemapConfig).length > 0 && import.meta.dev) console.warn(`[nuxt-simple-sitemap] The @nuxt/content file \`${content._path}\` is missing a sitemap \`loc\`.`); } content.sitemap = definition; if (!definition.loc) delete content.sitemap; return content; }); });