add sitemap and robots.txt

This commit is contained in:
Chris Kruining 2024-12-03 10:55:16 +01:00
parent a6e5fe1d45
commit e02d6fe283
No known key found for this signature in database
GPG key ID: EB894A3560CCCAD2
5 changed files with 47 additions and 4 deletions

36
src/routes/sitemap.xml.ts Normal file
View file

@ -0,0 +1,36 @@
import { SitemapStream, streamToPromise } from 'sitemap'
import { App } from 'vinxi';
const BASE_URL = 'https://ca-euw-prd-calque-app.purplecoast-f5b7f657.westeurope.azurecontainerapps.io';
export async function GET() {
const sitemap = new SitemapStream({ hostname: BASE_URL });
sitemap.write({ url: BASE_URL, changefreq: 'monthly', });
for (const route of await getRoutes()) {
sitemap.write({ url: route, changefreq: 'monthly', });
}
sitemap.end();
return new Response(
(await streamToPromise(sitemap)).toString(),
{ status: 200, headers: { 'Content-Type': 'text/xml' } }
);
}
const getRoutes = async () => {
const router = ((globalThis as any).app as App).getRouter('client').internals.routes;
if (router === undefined) {
return [];
}
const routes = await router.getRoutes() as { page: boolean, $$route?: object, path: string }[];
return routes
.filter(r => r.page === true && r.$$route === undefined && !r.path.match(/^.+\*\d+$/))
.map(r => r.path.replace(/\/\(\w+\)/g, ''));
};