1
1
import { index } from '$lib/server/content' ;
2
+ import { render_content } from '$lib/server/renderer' ;
2
3
3
4
export const prerender = false ; // TODO
4
5
@@ -25,8 +26,24 @@ function escapeHTML(html) {
25
26
}
26
27
27
28
/** @param {import('@sveltejs/site-kit').Document[] } posts */
28
- const get_rss = ( posts ) =>
29
+ const get_rss = async ( posts ) => {
30
+ const renderedPosts = await Promise . all (
31
+ posts
32
+ . filter ( ( post ) => ! post . metadata . draft )
33
+ . map (
34
+ async ( post ) => `
35
+ <item>
36
+ <title>${ escapeHTML ( post . metadata . title ) } </title>
37
+ <link>https://svelte.dev/${ post . slug } </link>
38
+ <author>${ escapeHTML ( post . metadata . author ) } </author>
39
+ <description>${ escapeHTML ( await render_content ( post . file , post . body ) ) } </description>
40
+ <pubDate>${ formatPubdate ( /** @type {string } */ ( post . file . split ( '/' ) . pop ( ) ) . slice ( 0 , 10 ) ) } </pubDate>
41
+ </item>
29
42
`
43
+ )
44
+ ) ;
45
+
46
+ return `
30
47
<?xml version="1.0" encoding="UTF-8" ?>
31
48
<rss version="2.0">
32
49
@@ -39,29 +56,18 @@ const get_rss = (posts) =>
39
56
<title>Svelte</title>
40
57
<link>https://svelte.dev/blog</link>
41
58
</image>
42
- ${ posts
43
- . filter ( ( post ) => ! post . metadata . draft )
44
- . map (
45
- ( post ) => `
46
- <item>
47
- <title>${ escapeHTML ( post . metadata . title ) } </title>
48
- <link>https://svelte.dev/${ post . slug } </link>
49
- <description>${ escapeHTML ( post . metadata . description ) } </description>
50
- <pubDate>${ formatPubdate ( /** @type {string } */ ( post . file . split ( '/' ) . pop ( ) ) . slice ( 0 , 10 ) ) } </pubDate>
51
- </item>
52
- `
53
- )
54
- . join ( '' ) }
59
+ ${ renderedPosts . join ( '' ) }
55
60
</channel>
56
61
57
62
</rss>
58
63
`
59
64
. replace ( / > [ ^ \S ] + / gm, '>' )
60
65
. replace ( / [ ^ \S ] + < / gm, '<' )
61
66
. trim ( ) ;
67
+ } ;
62
68
63
69
export async function GET ( ) {
64
- return new Response ( get_rss ( index . blog . children ) , {
70
+ return new Response ( await get_rss ( index . blog . children ) , {
65
71
headers : {
66
72
'Cache-Control' : `max-age=${ 30 * 60 * 1e3 } ` ,
67
73
'Content-Type' : 'application/rss+xml'
0 commit comments