29 lines
798 B
TypeScript
29 lines
798 B
TypeScript
import rss from "@astrojs/rss";
|
|
import { SITE } from "@consts";
|
|
import { getCollection } from "astro:content";
|
|
|
|
export async function GET(context: { site: string }) {
|
|
const posts = (await getCollection("posts")).filter(
|
|
(post) => !post.data.draft,
|
|
);
|
|
|
|
const projects = (await getCollection("projects")).filter(
|
|
(project) => !project.data.draft,
|
|
);
|
|
|
|
const items = [...posts, ...projects].sort(
|
|
(a, b) => new Date(b.data.date).valueOf() - new Date(a.data.date).valueOf(),
|
|
);
|
|
|
|
return rss({
|
|
title: SITE.TITLE,
|
|
description: SITE.DESCRIPTION,
|
|
site: context.site,
|
|
items: items.map((item) => ({
|
|
title: item.data.title,
|
|
description: item.data.description,
|
|
pubDate: item.data.date,
|
|
link: `/${item.collection}/${item.slug}/`,
|
|
})),
|
|
});
|
|
}
|