import { createRequire } from 'node:module'; import { defineEventHandler, setResponseHeader } from 'h3'; /** * @returns {Promise} */ export async function sitemap() { console.info('Preparing Sitemap...'); const { manifest } = await import('../build/server/manifest.js'); const sveltekit_routes = manifest._.routes .filter((route) => route.params.length === 0) .map((route) => route.id); const threads = collectThreads(); const all_routes = [...sveltekit_routes, ...threads]; const document_routes = all_routes.filter( (route) => !['.json', '.xml'].some((ext) => route.endsWith(ext)) ); const routes = new Set(document_routes); console.info(`Sitemap loaded with ${routes.length} routes!`); console.group(); console.info(`sveltekit: ${sveltekit_routes.length}`); console.info(`threads: ${threads.length}`); console.groupEnd(); const sitemap = ` ${[...routes] .map( (route) => ` https://appwrite.io${route} ` ) .join('')} `.trim(); return defineEventHandler((event) => { setResponseHeader(event, 'Content-Type', 'application/xml'); return sitemap; }); } /** * @returns {string[]} */ function collectThreads() { const threads = createRequire(import.meta.url)('../build/prerendered/threads/data.json'); return threads.map((id) => `/threads/${id}`); }