---
import { getCollection, render } from "astro:content";
import TocList from "../../components/TocList.astro";
import Base from "../../layouts/Base.astro";
export async function getStaticPaths() {
const writings = await getCollection("writings", ({ data }) => !data.draft);
return writings.map((entry) => ({
params: { slug: entry.id },
props: { entry },
}));
}
const { entry } = Astro.props;
const { Content, headings } = await render(entry);
const allWritings = (
await getCollection("writings", ({ data }) => !data.draft)
).sort((a, b) => a.data.date.valueOf() - b.data.date.valueOf());
const index = allWritings.findIndex((w) => w.id === entry.id);
const prev = index > 0 ? allWritings[index - 1] : undefined;
const next =
index < allWritings.length - 1 ? allWritings[index + 1] : undefined;
const series = entry.data.extra?.series;
const seriesEntries = series
? allWritings
.filter((w) => w.data.extra?.series === series)
.sort(
(a, b) =>
(a.data.extra?.series_index ?? 0) - (b.data.extra?.series_index ?? 0),
)
: [];
const tags = entry.data.taxonomies?.tags ?? [];
const related = tags.length
? allWritings
.filter((w) => w.id !== entry.id)
.map((w) => ({
entry: w,
overlap: (w.data.taxonomies?.tags ?? []).filter((t) => tags.includes(t))
.length,
}))
.filter((w) => w.overlap > 0)
.sort((a, b) => b.overlap - a.overlap)
.slice(0, 3)
.map((w) => w.entry)
: [];
const description =
entry.data.extra?.llms_description ?? entry.data.description;
const tocHeadings = headings.filter((h) => h.depth <= 3);
---