Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
7.6 kB ยท 269 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270import type { MetadataRoute } from "next";
import { getBlogPosts, getChangelogPosts, getComparePages, getCustomerPages, getDocPages, getGuides, getHomePage, getProductPages, getToolingPages, getToolsPages, getUnrelatedPages, getUseCasePages, isIndexable,} from "../content/utils";import type { Metadata } from "../content/utils/schema";import { cachedListExternalComponentsBySlug, cachedListExternalServices,} from "../lib/external-service-cache";
export const revalidate = 3600;
const modified = (m: Metadata) => m.updatedAt ?? m.publishedAt;
const allPosts = getBlogPosts().filter(isIndexable);const allChangelogs = getChangelogPosts().filter(isIndexable);const allComparisons = getComparePages().filter(isIndexable);const allUnrelated = getUnrelatedPages().filter(isIndexable);const allProducts = getProductPages().filter(isIndexable);const allPlaygrounds = getToolsPages().filter(isIndexable);const allGuides = getGuides().filter(isIndexable);const allUseCases = getUseCasePages().filter(isIndexable);const allTooling = getToolingPages().filter(isIndexable);const allCustomers = getCustomerPages().filter(isIndexable);const allDocs = getDocPages().filter(isIndexable);
export default async function sitemap(): Promise<MetadataRoute.Sitemap> { const externalServices = await cachedListExternalServices(); const externalServiceEntries: MetadataRoute.Sitemap = externalServices .filter((s) => s.deletedAt == null) .map((s) => ({ url: `https://www.openstatus.dev/status/${s.slug}`, lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "hourly" as const, priority: 0.7, }));
const externalServicesIndex: MetadataRoute.Sitemap = [ { url: "https://www.openstatus.dev/status", lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "hourly" as const, priority: 0.8, }, ];
const componentEntriesByService = await Promise.all( externalServices .filter((s) => s.deletedAt == null) .map(async (s) => { const { components } = await cachedListExternalComponentsBySlug(s.slug); return components.map((c) => ({ url: `https://www.openstatus.dev/status/${s.slug}/${c.slug}`, lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "hourly" as const, priority: 0.6, })); }), ); const externalServiceComponentEntries: MetadataRoute.Sitemap = componentEntriesByService.flat();
const blogs = allPosts.map((post) => ({ url: `https://www.openstatus.dev/blog/${post.slug}`, lastModified: modified(post.metadata), changeFrequency: "monthly" as const, priority: 0.7, }));
const blogIndex = [ { url: "https://www.openstatus.dev/blog", lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "monthly" as const, priority: 0.7, }, ];
const changelogs = allChangelogs.map((post) => ({ url: `https://www.openstatus.dev/changelog/${post.slug}`, lastModified: modified(post.metadata), changeFrequency: "weekly" as const, priority: 0.6, }));
const changelogIndex = [ { url: "https://www.openstatus.dev/changelog", lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "weekly" as const, priority: 0.6, }, ];
const comparisons = allComparisons.map((comparison) => ({ url: `https://www.openstatus.dev/compare/${comparison.slug}`, lastModified: modified(comparison.metadata), changeFrequency: "monthly" as const, priority: 0.8, }));
const comparisonIndex = [ { url: "https://www.openstatus.dev/compare", lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "monthly" as const, priority: 0.8, }, ];
const landings = allUnrelated.map((page) => ({ url: `https://www.openstatus.dev/${page.slug}`, lastModified: modified(page.metadata), changeFrequency: "monthly" as const, priority: 0.7, }));
const products = allProducts.map((product) => ({ url: `https://www.openstatus.dev/${product.slug}`, lastModified: modified(product.metadata), changeFrequency: "weekly" as const, priority: 0.9, }));
const playgrounds = allPlaygrounds.map((playground) => ({ url: `https://www.openstatus.dev/play/${playground.slug}`, lastModified: modified(playground.metadata), changeFrequency: "monthly" as const, priority: 0.6, }));
const playgroundIndex = [ { url: "https://www.openstatus.dev/play", lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "monthly" as const, priority: 0.6, }, ];
const guides = allGuides.map((guide) => ({ url: `https://www.openstatus.dev/guides/${guide.slug}`, lastModified: modified(guide.metadata), changeFrequency: "monthly" as const, priority: 0.6, }));
const guideIndex = [ { url: "https://www.openstatus.dev/guides", lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "monthly" as const, priority: 0.6, }, ];
const home = [ { url: "https://www.openstatus.dev/", lastModified: modified(getHomePage().metadata), changeFrequency: "daily" as const, priority: 1.0, }, ];
const useCases = allUseCases.map((useCase) => ({ url: `https://www.openstatus.dev/use-case/${useCase.slug}`, lastModified: modified(useCase.metadata), changeFrequency: "monthly" as const, priority: 0.8, }));
const useCaseIndex = [ { url: "https://www.openstatus.dev/use-case", lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "monthly" as const, priority: 0.8, }, ];
const toolingIndex = [ { url: "https://www.openstatus.dev/tooling", lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "weekly" as const, priority: 0.8, }, ];
const toolings = allTooling.map((page) => ({ url: `https://www.openstatus.dev/tooling/${page.slug}`, lastModified: modified(page.metadata), changeFrequency: "monthly" as const, priority: 0.7, }));
const customersIndex = [ { url: "https://www.openstatus.dev/customers", lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "weekly" as const, priority: 0.8, }, ];
const customers = allCustomers.map((page) => ({ url: `https://www.openstatus.dev/customers/${page.slug}`, lastModified: modified(page.metadata), changeFrequency: "monthly" as const, priority: 0.7, }));
const docs = allDocs.map((page) => ({ url: `https://www.openstatus.dev/docs/${page.slug}`, lastModified: modified(page.metadata), changeFrequency: "monthly" as const, priority: 0.7, }));
const docsIndex = [ { url: "https://www.openstatus.dev/docs", lastModified: new Date().toISOString().slice(0, 10), changeFrequency: "weekly" as const, priority: 0.8, }, ];
return [ ...home, ...blogs, ...blogIndex, ...changelogs, ...changelogIndex, ...comparisons, ...comparisonIndex, ...landings, ...products, ...playgrounds, ...playgroundIndex, ...guides, ...guideIndex, ...useCases, ...useCaseIndex, ...toolings, ...toolingIndex, ...customers, ...customersIndex, ...docs, ...docsIndex, ...externalServicesIndex, ...externalServiceEntries, ...externalServiceComponentEntries, ];}