diff --git a/sites/svelte.dev/src/lib/server/blog/index.js b/sites/svelte.dev/src/lib/server/blog/index.js index 40bbf4ef48a9..a3b9001f452a 100644 --- a/sites/svelte.dev/src/lib/server/blog/index.js +++ b/sites/svelte.dev/src/lib/server/blog/index.js @@ -65,6 +65,21 @@ export function get_blog_list(blog_data) { })); } +/** @param {import('./types').BlogData} blog_data */ +export async function get_rss_contents(blog_data) { + return await Promise.all( + blog_data.map(async ({ slug, title, content, file, author, date, draft }) => ({ + slug, + title, + content: await render_content(file, content), + author, + date, + draft, + })) + ) +} + + /** @param {string} filename */ function get_date_and_slug(filename) { const match = BLOG_NAME_REGEX.exec(filename); diff --git a/sites/svelte.dev/src/lib/server/blog/types.d.ts b/sites/svelte.dev/src/lib/server/blog/types.d.ts index e962e88953f8..bae71d199f2b 100644 --- a/sites/svelte.dev/src/lib/server/blog/types.d.ts +++ b/sites/svelte.dev/src/lib/server/blog/types.d.ts @@ -15,10 +15,13 @@ export interface BlogPost { export type BlogData = BlogPost[]; -export interface BlogPostSummary { +export interface BlogPostRSS { slug: string; title: string; - description: string; + content: string; + author: { + name: string; + }; date: string; draft: boolean; } diff --git a/sites/svelte.dev/src/routes/blog/rss.xml/+server.js b/sites/svelte.dev/src/routes/blog/rss.xml/+server.js index 9cbbdac84099..cc463e8dd389 100644 --- a/sites/svelte.dev/src/routes/blog/rss.xml/+server.js +++ b/sites/svelte.dev/src/routes/blog/rss.xml/+server.js @@ -1,4 +1,4 @@ -import { get_blog_data, get_blog_list } from '$lib/server/blog/index.js'; +import { get_blog_data, get_rss_contents } from '$lib/server/blog/index.js'; export const prerender = true; @@ -18,11 +18,13 @@ function escapeHTML(html) { '>': 'gt' }; - return html.replace(/["'&<>]/g, (c) => `&${chars[c]};`); + return html + .replace(/]*class="permalink"[^>]*>.*?<\/a>/gi, '') // remove anchor permalinks + .replace(/["'&<>]/g, (c) => `&${chars[c]};`); } -/** @param {import('$lib/server/blog/types').BlogPostSummary[]} posts */ -const get_rss = (posts) => +/** @param {import('$lib/server/blog/types').BlogPostRSS[]} posts */ +const get_rss = (posts) => ` @@ -43,7 +45,8 @@ const get_rss = (posts) => ${escapeHTML(post.title)} https://svelte.dev/blog/${post.slug} - ${escapeHTML(post.description)} + ${escapeHTML(post.author.name)} + ${escapeHTML(post.content)} ${formatPubdate(post.date)} ` @@ -58,7 +61,8 @@ const get_rss = (posts) => .trim(); export async function GET() { - const posts = get_blog_list(await get_blog_data()); + const blogData = await get_blog_data(); + const posts = await get_rss_contents(blogData); return new Response(get_rss(posts), { headers: {