import type { MetadataRoute } from "next"; import { sqlPublic as sql } from "@/db"; import { APP_URL } from "@/lib/env"; export const revalidate = 3600; export default async function sitemap(): Promise { const papers = await sql`SELECT slug, updated_at FROM public_papers WHERE status = 'published' ORDER BY number`; const topics = await sql`SELECT slug FROM topics WHERE is_active`; const methods = await sql`SELECT slug FROM methods`; const datasets = await sql`SELECT slug FROM datasets`; const authors = await sql`SELECT slug FROM authors`; const statics = ["", "/papers", "/series", "/topics", "/methods", "/datasets", "/authors", "/research-map", "/timeline", "/search", "/about", "/citation", "/api/docs"]; const out: MetadataRoute.Sitemap = []; for (const s of statics) out.push({ url: `${APP_URL}${s}`, changeFrequency: "weekly", priority: s === "" ? 1 : 0.6, alternates: { languages: { en: `${APP_URL}${s}`, fr: `${APP_URL}/fr${s}` } } }); for (const p of papers) out.push({ url: `${APP_URL}/papers/${p.slug}`, lastModified: new Date(p.updated_at), changeFrequency: "monthly", priority: 0.9, alternates: { languages: { en: `${APP_URL}/papers/${p.slug}`, fr: `${APP_URL}/fr/papers/${p.slug}` } } }); for (const [prefix, rows] of [["/topics", topics], ["/methods", methods], ["/datasets", datasets], ["/authors", authors]] as const) for (const r of rows) out.push({ url: `${APP_URL}${prefix}/${r.slug}`, changeFrequency: "monthly", priority: 0.5 }); return out; }