const fs = require('fs'); const path = require('path'); const matter = require('gray-matter'); (async () => { const baseUrl = `https://frontmatter.codes`; // Ignore Next.js specific files (e.g., _app.js) and API routes. let pages = fs .readdirSync(path.join(__dirname, '../pages')) .filter((staticPage) => { return ![ "_app.tsx", "_document.tsx", "_error.tsx", "sitemap.xml.tsx", "index.tsx", "404", "api" ].includes(staticPage); }) .map((staticPagePath) => ({ lastModified: new Date().toISOString(), slug: `${baseUrl}/${staticPagePath}` })); const mdDir = path.join(process.cwd(), 'content'); const mdFiles = fs.readdirSync(path.join(mdDir, 'docs')).filter(f => f.endsWith(`.md`)); const mdPages = mdFiles.map((fileName) => { const fullPath = path.join(mdDir, 'docs', `${fileName}`) const fileContents = fs.readFileSync(fullPath, 'utf8'); const { data } = matter(fileContents); return { lastModified: data["lastmod"] || new Date().toISOString(), slug: `${baseUrl}/docs/${data['slug'] || fileName.split('.').slice(0, -1).join('.')}` }; }); pages = [...pages, ...mdPages]; const sitemap = ` ${baseUrl} ${new Date().toISOString()} daily 1.0 ${pages .map((page) => { return ` ${`${page.slug}`} ${page.lastModified} monthly 1.0 `; }) .join('')} `; fs.writeFileSync('public/sitemap.xml', sitemap); })();