import path from 'node:path'; import fs from 'node:fs/promises'; async function getRoadmapIds() { return fs.readdir(path.join(process.cwd(), 'src/data/roadmaps')); } async function getBestPracticesIds() { return fs.readdir(path.join(process.cwd(), 'src/data/best-practices')); } export function shouldIndexPage(pageUrl) { return ![ 'https://roadmap.sh/404', 'https://roadmap.sh/terms', 'https://roadmap.sh/privacy', 'https://roadmap.sh/pdfs', 'https://roadmap.sh/g', ].includes(pageUrl); } export async function serializeSitemap(item) { const highPriorityPages = [ 'https://roadmap.sh', 'https://roadmap.sh/about', 'https://roadmap.sh/roadmaps', 'https://roadmap.sh/best-practices', 'https://roadmap.sh/guides', 'https://roadmap.sh/videos', ...(await getRoadmapIds()).flatMap((id) => [ `https://roadmap.sh/${id}`, `https://roadmap.sh/${id}/topics`, ]), ...(await getBestPracticesIds()).map( (id) => `https://roadmap.sh/best-practices/${id}` ), ]; // Roadmaps and other high priority pages for (let pageUrl of highPriorityPages) { if (item.url === pageUrl) { return { ...item, // @ts-ignore changefreq: 'monthly', priority: 1, }; } } // Guide and video pages if ( item.url.startsWith('https://roadmap.sh/guides') || item.url.startsWith('https://roadmap.sh/videos') ) { return { ...item, // @ts-ignore changefreq: 'monthly', priority: 0.9, }; } return undefined; }