import { promises as fs } from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; const SITE_URL = (process.env.SITE_URL ?? "https://wsap.dev").replace( /\/+$/, "", ); const STATIC_ROUTES = ["/", "/about", "/apps"]; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const projectRoot = path.resolve(__dirname, ".."); const postsDir = path.join(projectRoot, "src", "posts"); const sitemapPath = path.join(projectRoot, "static", "sitemap.txt"); async function getPostRoutes(): Promise { const files = await fs.readdir(postsDir); return files .filter((file) => file.endsWith(".svx")) .map((file) => `/posts/${file.replace(/\.svx$/, "")}`) .sort(); } async function main(): Promise { const postRoutes = await getPostRoutes(); const urls = [...STATIC_ROUTES, ...postRoutes].map( (route) => `${SITE_URL}${route}`, ); const body = `${urls.join("\n")}\n`; await fs.writeFile(sitemapPath, body, "utf8"); console.log( `Generated sitemap: ${path.relative(projectRoot, sitemapPath)} (${urls.length} URLs)`, ); } main().catch((error: unknown) => { console.error("Failed to generate sitemap.txt"); console.error(error); process.exit(1); });