'use strict'; const { access, cp } = require('fs/promises'); const { join } = require('path'); const { debuglog } = require('util'); const { rmIfExists } = require('../utils'); const { kFileNotFoundError } = require('../constants'); const internals = { debuglog: debuglog('blog'), kAssetsDirectoryName: 'assets' }; /** * Generates the static assets required for the blog * * @name StaticGenerator * @param {string} source the source directory * @param {string} target the target directory * @param {Array.} posts the list of posts */ module.exports = async function StaticGenerator(source, target, posts) { const assetsTarget = join(target, internals.kAssetsDirectoryName); internals.debuglog(`Removing ${assetsTarget}`); await rmIfExists(assetsTarget); for (let i = 0; i < posts.length; ++i) { const postSourcePath = join(source, `${i}`); try { await access(postSourcePath); const assetsSource = join(postSourcePath, internals.kAssetsDirectoryName); internals.debuglog(`Copying ${assetsSource} to ${assetsTarget}`); await cp(assetsSource, assetsTarget, { recursive: true }); } catch (error) { if (error.code === kFileNotFoundError) { internals.debuglog(`Skipping ${i}`); continue; } throw error; } } };