iles
Version:
Vite & Vue powered static site generator with partial hydration
38 lines (35 loc) • 1.28 kB
JavaScript
import {
warnMark,
withSpinner
} from "./chunk-PUZAE3UL.js";
// src/node/build/sitemap.ts
import { promises as fs } from "fs";
import { join } from "pathe";
async function createSitemap(config, routesToRender) {
const { outDir, base, siteUrl, ssg: { sitemap } } = config;
if (!sitemap) return;
if (!siteUrl) return console.warn(warnMark, "Skipping sitemap. Configure `siteUrl` to enable sitemap generation.");
withSpinner("rendering sitemap", async () => {
const sitemap2 = sitemapFor(`${siteUrl}${base}`, routesToRender);
await fs.mkdir(outDir, { recursive: true });
await fs.writeFile(join(outDir, "sitemap.xml"), sitemap2, "utf8");
});
}
function sitemapFor(siteUrl, routesToRender) {
const pageUrls = /* @__PURE__ */ new Set();
for (const route of routesToRender) {
if (!route.outputFilename.endsWith(".html")) continue;
if (route.path === "/404") continue;
pageUrls.add(route.path);
}
const sortedUrls = Array.from(pageUrls).sort((a, b) => a.localeCompare(b, "en", { numeric: true }));
return `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${sortedUrls.map((url) => ` <url><loc>${siteUrl + url.slice(1)}</loc></url>
`).join("")}
</urlset>
`;
}
export {
createSitemap
};