TamilCulturalAssociation/scripts/generateSitemap.cjs
2025-07-11 21:06:16 +05:30

74 lines
1.8 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const { SitemapStream, streamToPromise } = require('sitemap');
const APP_DIR = path.join(__dirname, '../app');
function getAppRoutes(dir = APP_DIR, baseRoute = '') {
let routes = [];
const items = fs.readdirSync(dir);
items.forEach((item) => {
const itemPath = path.join(dir, item);
const stat = fs.statSync(itemPath);
if (stat.isDirectory()) {
const newBase = baseRoute + '/' + item;
routes = routes.concat(getAppRoutes(itemPath, newBase));
} else if (item === 'page.tsx' || item === 'page.js') {
routes.push(baseRoute || '/');
}
});
return routes;
}
const staticPaths = getAppRoutes().map((url) =>
url.endsWith('/') && url !== '/' ? url.slice(0, -1) : url
);
const staticLinks = staticPaths.map((url) => ({
url,
changefreq: 'weekly',
priority: 0.8,
}));
// Example dynamic slugs
const tamilCulturePosts = [
{ slug: 'instrumental-music' },
{ slug: 'bharathnatyam-dance' },
{ slug: 'vocal' },
];
const cultureLinks = tamilCulturePosts.map((post) => ({
url: `/tamil-culture-post/?slug=${post.slug}`,
changefreq: 'weekly',
priority: 0.64,
}));
const allLinks = [...staticLinks, ...cultureLinks];
async function generateSitemap() {
try {
const sitemap = new SitemapStream({
hostname: 'https://tca.metatronnest.com',
});
const outputPath = path.resolve(__dirname, '../public/sitemap.xml');
const writeStream = fs.createWriteStream(outputPath);
sitemap.pipe(writeStream);
allLinks.forEach((link) => sitemap.write(link));
sitemap.end();
await streamToPromise(sitemap);
console.log(`✅ sitemap.xml created with ${allLinks.length} URLs!`);
} catch (err) {
console.error('❌ Error generating sitemap:', err);
}
}
generateSitemap();