'use strict'; const { template } = require('dot'); const { encodeXML } = require('entities'); const { readFile, writeFile } = require('fs/promises'); const { join } = require('path'); const { debuglog } = require('util'); const internals = { debuglog: debuglog('blog'), kFeedName: 'feed.xml' }; /** * Generates an RSS feed XML file * * @name RSSGenerator * @param {string} source the source directory * @param {string} target the target directory * @param {Array.} posts the list of posts */ module.exports = async function RSSGenerator(source, target, posts) { internals.debuglog('Generating RSS'); const feedTarget = join(target, internals.kFeedName); const feedLocation = join(source, internals.kFeedName); internals.debuglog(`Reading ${feedLocation}`); const feedTemplate = await readFile(feedLocation, { encoding: 'utf8' }); internals.debuglog('Writing RSS'); posts = posts.map((post) => ({ ...post, createdOn: (new Date(post.createdOn)).toUTCString(), html: encodeXML(post.html) })); const feedXml = template(feedTemplate)({ posts }); await writeFile(feedTarget, feedXml); };