Fix imports, remove unnecessary imports, and replace all single apostrophe to double apostrophes
69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
import { getAllBlogs } from "@/content/blogs/blogs";
|
|
import { getSettings } from "@/content/settings/settings";
|
|
import type { APIRoute } from "astro";
|
|
import minifyXML from "minify-xml";
|
|
|
|
export const GET = (async () => {
|
|
const settings = await getSettings();
|
|
|
|
if (!settings.blog.enabled) {
|
|
return new Response(null, {
|
|
status: 204,
|
|
statusText: "Not Found"
|
|
});
|
|
}
|
|
|
|
const blogs = await getAllBlogs(settings);
|
|
const blogCount = blogs.length;
|
|
const perPage = settings.sitemap.perPage;
|
|
const pages = Math.ceil(blogCount / perPage);
|
|
|
|
let sitemaps: SitemapIndex[] = [];
|
|
|
|
for (let i = 0; i < pages; i++) {
|
|
const selectedBlogs = blogs.slice(
|
|
((Number(i + 1) - 1) * settings.sitemap.perPage),
|
|
Number(i + 1) * settings.sitemap.perPage - 1
|
|
);
|
|
|
|
let dates = [
|
|
settings.sitemap.lastModified,
|
|
settings.blog.lastModified,
|
|
settings.website.lastModified
|
|
];
|
|
|
|
selectedBlogs.forEach((blog) => {
|
|
dates.push(blog.lastModified);
|
|
});
|
|
|
|
const lastModified = dates.sort((a: Date, b: Date) => {
|
|
return b.getTime() - a.getTime();
|
|
});
|
|
|
|
sitemaps.push({
|
|
url: `/sitemap/blogs-${i + 1}.xml`,
|
|
lastModified: lastModified[0]
|
|
});
|
|
}
|
|
|
|
let sitemapContent = `
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
${sitemaps.map((item) => `
|
|
<sitemap>
|
|
<loc>${settings.website.domainName}${item.url}</loc>
|
|
<lastmod>${item.lastModified.toISOString()}</lastmod>
|
|
</sitemap>
|
|
`).join("")}
|
|
</sitemapindex>
|
|
`;
|
|
|
|
return new Response(minifyXML(sitemapContent), {
|
|
status: 200,
|
|
statusText: "OK",
|
|
headers: {
|
|
"Content-Type": "application/xml"
|
|
}
|
|
});
|
|
}) satisfies APIRoute;
|