From f7e6f42216c3cbeab9add475a61bb407c6be3519 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Thu, 30 Nov 2023 13:12:45 +0100 Subject: refactor(pages): refine RSS feed * add favicon * add item categories * add item image * add item author * add item update date (it seems `date` is used as update date by Feed) * change copyright format * fix ESlint errors * fix atom and json links --- src/utils/helpers/rss.ts | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'src/utils/helpers/rss.ts') diff --git a/src/utils/helpers/rss.ts b/src/utils/helpers/rss.ts index 82fa1ee..9e98a38 100644 --- a/src/utils/helpers/rss.ts +++ b/src/utils/helpers/rss.ts @@ -11,7 +11,7 @@ import { ROUTES } from '../constants'; /** * Retrieve the data for all the articles. * - * @returns {Promise} - All the articles. + * @returns {Promise} All the articles. */ const getAllArticles = async (): Promise => { const totalPosts = await fetchPostsCount(); @@ -25,7 +25,7 @@ const getAllArticles = async (): Promise => { /** * Generate a new feed. * - * @returns {Promise} - The feed. + * @returns {Promise} The feed. */ export const generateFeed = async (): Promise => { const author = { @@ -33,15 +33,16 @@ export const generateFeed = async (): Promise => { email: process.env.APP_AUTHOR_EMAIL, link: CONFIG.url, }; - const copyright = `${CONFIG.name} CC BY SA ${CONFIG.copyright.startYear} - ${CONFIG.copyright.endYear}`; + const copyright = `\u00A9 ${CONFIG.copyright.startYear} - ${CONFIG.copyright.endYear} ${CONFIG.name} - CC BY SA`; const title = `${CONFIG.name} | ${CONFIG.baseline}`; const feed = new Feed({ author, copyright, description: process.env.APP_FEED_DESCRIPTION, + favicon: `${CONFIG.url}/favicon.ico`, feedLinks: { - json: `${CONFIG.url}${ROUTES.RSS}/json`, + json: `${CONFIG.url}${ROUTES.RSS}.json`, atom: `${CONFIG.url}${ROUTES.RSS}/atom`, }, generator: 'Feed & NextJS', @@ -53,16 +54,32 @@ export const generateFeed = async (): Promise => { const articles = await getAllArticles(); - articles.forEach((article) => { + for (const article of articles) { feed.addItem({ + author: [author], + category: article.meta.thematics?.map((thematic) => { + return { + domain: `${CONFIG.url}${thematic.url}`, + name: thematic.name, + }; + }), content: article.intro, - date: new Date(article.meta.dates.publication), + copyright, + date: new Date( + article.meta.dates.update ?? article.meta.dates.publication + ), description: article.intro, id: `${article.id}`, + image: article.meta.cover + ? { + url: article.meta.cover.src, + } + : undefined, link: `${CONFIG.url}${ROUTES.ARTICLE}/${article.slug}`, + published: new Date(article.meta.dates.publication), title: article.title, }); - }); + } return feed; }; -- cgit v1.2.3