From e7865e27e808c0307e65e6572027402b00b86c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Gonz=C3=A1lez=20G=C3=B3mez?= Date: Tue, 8 Aug 2023 20:51:08 -0400 Subject: [PATCH 1/2] Generate RSS feed with full content rather than a description --- sites/svelte.dev/src/routes/blog/rss.xml/+server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..9fa733fa6628 100644 --- a/sites/svelte.dev/src/routes/blog/rss.xml/+server.js +++ b/sites/svelte.dev/src/routes/blog/rss.xml/+server.js @@ -43,7 +43,7 @@ const get_rss = (posts) => ${escapeHTML(post.title)} https://svelte.dev/blog/${post.slug} - ${escapeHTML(post.description)} + ${escapeHTML(post.content)} ${formatPubdate(post.date)} ` From 5c8d3e8ee5aba41623b72a6623edbf937dcd2933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Gonz=C3=A1lez=20G=C3=B3mez?= Date: Tue, 8 Aug 2023 21:55:19 -0400 Subject: [PATCH 2/2] Add new RSS content data util --- sites/svelte.dev/src/lib/server/blog/index.js | 15 +++++++++++++++ sites/svelte.dev/src/lib/server/blog/types.d.ts | 7 +++++-- .../svelte.dev/src/routes/blog/rss.xml/+server.js | 14 +++++++++----- 3 files changed, 29 insertions(+), 7 deletions(-) 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 9fa733fa6628..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,6 +45,7 @@ const get_rss = (posts) => ${escapeHTML(post.title)} https://svelte.dev/blog/${post.slug} + ${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: {