// Génère static/sitemap.xml au build (script `prebuild`) — remplace le // sitemap qu'apportait @astrojs/sitemap à l'ère Astro. Zéro dépendance : // les slugs sont relus depuis les frontmatters de content/outils/. import { readdirSync, readFileSync, writeFileSync } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' const SITE_URL = 'https://chatcontrol.o-k-i.net' const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..') const OUTILS = path.resolve(ROOT, '..', 'content', 'outils') // les valeurs du frontmatter sont encodées en JSON (cf. tools.server.ts) function slugOf(file) { const raw = readFileSync(path.join(OUTILS, file), 'utf8') const m = raw.match(/^slug:\s*("(?:[^"\\]|\\.)*")/m) return m ? JSON.parse(m[1]) : file.replace(/\.md$/, '') } const slugs = readdirSync(OUTILS) .filter((f) => f.endsWith('.md')) .map(slugOf) .sort((a, b) => a.localeCompare(b, 'fr')) const lastmod = new Date().toISOString().slice(0, 10) const entry = (loc, priority) => ` ${SITE_URL}${loc} ${lastmod} ${priority} ` const urls = [ entry('/', '1.0'), entry('/outils/', '0.8'), ...slugs.map((slug) => entry(`/outils/${slug}/`, '0.6')), entry('/quiz/', '0.5'), entry('/contribuer/', '0.5') ] const xml = ` ${urls.join('\n')} ` writeFileSync(path.join(ROOT, 'static', 'sitemap.xml'), xml) console.log(`sitemap.xml : ${urls.length} URLs (lastmod ${lastmod})`)