// 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})`)