SPB Git forge

spb/rareindex

Public
54commits 1branches 0releases
7.1 MBsize
maindefault branch
10 days agolast push
TypeScript 61.9% HTML 37.2% SQL 0.7%
1.9 KB · 46 lines typescript
Raw Blame History
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