Urara-Blog/src/routes/feed.json.ts
2022-08-14 14:10:39 +08:00

49 lines
1.4 KiB
TypeScript

import type { RequestHandler } from '@sveltejs/kit'
import { site } from '$lib/config/site'
import { feed } from '$lib/config/general'
import { favicon, any } from '$lib/config/icon'
import { genPosts } from '$lib/utils/posts'
const render = async (posts = genPosts({ postHtml: true, postLimit: feed.limit, filterUnlisted: true })) => ({
version: 'https://jsonfeed.org/version/1.1',
title: site.title,
home_page_url: site.protocol + site.domain,
feed_url: site.protocol + site.domain + '/feed.json',
description: site.description,
icon: any['512'].src ?? any['192'].src,
favicon: favicon?.src,
authors: [
{
name: site.author.name,
url: site.protocol + site.domain,
avatar: site.author.avatar
}
],
language: site.lang ?? 'en',
hubs: feed.hubs?.map(hub => ({
type: 'WebSub',
url: hub
})),
items: posts.map(post => ({
id: post.path.slice(1),
url: site.protocol + site.domain + post.path,
title: post.title,
content_html: post.html,
summary: post['summary'],
image: post['image'],
date_published: post.published ?? post.created,
date_modified: post.updated ?? post.published ?? post.created,
tags: post.tags,
_indieweb: {
type: post.type,
'in-reply-to': post.in_reply_to
}
}))
})
export const GET: RequestHandler = async () => ({
headers: {
'Content-Type': 'application/feed+json; charset=utf-8'
},
body: JSON.stringify(await render(), null, 2)
})