TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1import type { MetadataRoute } from 'next';2import { CATEGORIES, INDICES } from '@rareindex/taxonomy';3import { NAV } from '@/config/nav';4import { countAssets, getAssetSlugsForSitemap } from '@/lib/queries/assets';5import { getSetSlugsForSitemap } from '@/lib/queries/markets';67const SITE = process.env.NEXT_PUBLIC_SITE_URL ?? 'https://www.rareindex.io';8const PAGE = 20_000;910export async function generateSitemaps() {11 let n = 0;12 try {13 n = await countAssets();14 } catch {15 n = 0;16 }17 const assetPages = Math.max(1, Math.ceil(n / PAGE));18 return [{ id: 0 }, ...Array.from({ length: assetPages }, (_, i) => ({ id: i + 1 }))];19}2021export default async function sitemap({ id }: { id: number }): Promise<MetadataRoute.Sitemap> {22 const now = new Date();23 if (id === 0) {24 let sets: string[] = [];25 try {26 sets = await getSetSlugsForSitemap();27 } catch {28 sets = [];29 }30 return [31 ...NAV.map((n) => ({ url: `${SITE}${n.href}`, lastModified: now, changeFrequency: 'hourly' as const, priority: n.href === '/' ? 1 : 0.7 })),32 ...CATEGORIES.map((c) => ({ url: `${SITE}/markets/${c.slug}`, lastModified: now, changeFrequency: 'hourly' as const, priority: c.phase === 1 ? 0.9 : 0.6 })),33 ...INDICES.map((i) => ({ url: `${SITE}/rareindex/${i.ticker}`, lastModified: now, changeFrequency: 'daily' as const, priority: 0.8 })),34 ...sets.map((s) => ({ url: `${SITE}/set/${s}`, lastModified: now, changeFrequency: 'daily' as const, priority: 0.6 })),35 { url: `${SITE}/records`, lastModified: now, changeFrequency: 'daily' as const, priority: 0.6 },36 { url: `${SITE}/radar`, lastModified: now, changeFrequency: 'hourly' as const, priority: 0.5 },37 ];38 }39 try {40 const assets = await getAssetSlugsForSitemap((id - 1) * PAGE, PAGE);41 return assets.map((a) => ({ url: `${SITE}/asset/${a.slug}`, lastModified: a.updatedAt, changeFrequency: 'daily' as const, priority: 0.7 }));42 } catch {43 return [];44 }45}46