67 lines
1.8 KiB
JavaScript
67 lines
1.8 KiB
JavaScript
const fs = require("fs");
|
|
const path = require("path");
|
|
const { SitemapStream, streamToPromise } = require("sitemap");
|
|
|
|
const hostname = "https://murugantemple.ca";
|
|
const appDir = path.join(process.cwd(), "src/app");
|
|
|
|
function getRoutesFromDirectory(dir = appDir, basePath = "") {
|
|
let routes = [];
|
|
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
|
|
for (let entry of entries) {
|
|
if (entry.isDirectory()) {
|
|
routes = routes.concat(
|
|
getRoutesFromDirectory(path.join(dir, entry.name), `${basePath}/${entry.name}`)
|
|
);
|
|
} else if (entry.name.startsWith("page.")) {
|
|
routes.push(basePath || "/");
|
|
}
|
|
}
|
|
return routes;
|
|
}
|
|
|
|
function getBlogRoutes() {
|
|
const filePath = path.join(process.cwd(), "utils/constant.utils.jsx");
|
|
const content = fs.readFileSync(filePath, "utf-8");
|
|
|
|
const blogPostsMatch = content.match(/blogPosts\s*=\s*\[([\s\S]*?)\]/);
|
|
if (!blogPostsMatch) return [];
|
|
|
|
const blogPostsContent = blogPostsMatch[1];
|
|
|
|
|
|
const idRegex = /id\s*:\s*(\d+)/g;
|
|
const slugs = [];
|
|
let match;
|
|
while ((match = idRegex.exec(blogPostsContent)) !== null) {
|
|
slugs.push(`/blog/${match[1]}`);
|
|
}
|
|
|
|
return slugs;
|
|
}
|
|
|
|
(async function generateSitemap() {
|
|
const sitemap = new SitemapStream({ hostname });
|
|
|
|
const staticRoutes = getRoutesFromDirectory();
|
|
const blogRoutes = getBlogRoutes();
|
|
|
|
const allRoutes = [...new Set([...staticRoutes, ...blogRoutes])];
|
|
|
|
allRoutes.forEach(route => {
|
|
sitemap.write({
|
|
url: route,
|
|
changefreq: "weekly",
|
|
priority: route === "/" ? 1.0 : 0.8
|
|
});
|
|
});
|
|
|
|
sitemap.end();
|
|
|
|
const sitemapData = await streamToPromise(sitemap);
|
|
fs.writeFileSync(path.join(process.cwd(), "public", "sitemap.xml"), sitemapData.toString());
|
|
|
|
console.log("✅ Sitemap generated successfully!");
|
|
})();
|