sitemap.xml.ts 997 B

1234567891011121314151617181920212223242526272829303132
  1. import { getCollection } from "astro:content";
  2. export const prerender = true;
  3. const site = "https://simo.ng";
  4. function urlEntry(path: string, date?: Date) {
  5. const loc = new URL(path, site).toString();
  6. const lastmod = date ? `\n\t\t<lastmod>${date.toISOString()}</lastmod>` : "";
  7. return `\n\t<url>\n\t\t<loc>${loc}</loc>${lastmod}\n\t</url>`;
  8. }
  9. export async function GET() {
  10. const posts = await getCollection("blogs");
  11. const visiblePosts = posts.filter((post) => (import.meta.env.PROD ? !post.data.draft : true));
  12. const urls = [
  13. urlEntry("/"),
  14. urlEntry("/ram/"),
  15. urlEntry("/ram/embed/"),
  16. ...visiblePosts.flatMap((post) => [
  17. urlEntry(`/ram/${post.id}/`, post.data.pubDate),
  18. urlEntry(`/ram/embed/${post.id}/`, post.data.pubDate),
  19. ]),
  20. ];
  21. return new Response(`<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">${urls.join("")}\n</urlset>\n`, {
  22. headers: {
  23. "Content-Type": "application/xml; charset=utf-8",
  24. },
  25. });
  26. }