74 lines
1.8 KiB
JavaScript
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();
|