Murugan_Temple/scripts/generate-sitemap.cjs
Alaguraj0361 4785c22a25
Some checks failed
Build and Deploy Build Output / build (push) Has been cancelled
first commit
2025-11-07 10:51:36 +05:30

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!");
})();