diff options
| author | Ben Beltran <ben@nsovocal.com> | 2020-06-01 23:33:40 +0200 |
|---|---|---|
| committer | Ben Beltran <ben@nsovocal.com> | 2020-06-01 23:33:40 +0200 |
| commit | 67fdfa7cc2e1690657cd0c7190373847de25311a (patch) | |
| tree | a910564656661b1849d31b24f68b2bb7831397bd /lib/generators/static.js | |
| parent | 6f72ad0f8b1d147a3d2e27db539a0e17ca2ac917 (diff) | |
Use new generators
Diffstat (limited to 'lib/generators/static.js')
| -rw-r--r-- | lib/generators/static.js | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/generators/static.js b/lib/generators/static.js new file mode 100644 index 0000000..eb3c631 --- /dev/null +++ b/lib/generators/static.js @@ -0,0 +1,50 @@ +'use strict'; + +const { access, rmdir } = require('fs/promises'); +const { ncp } = require('ncp'); +const { join } = require('path'); +const { debuglog, promisify } = require('util'); + +const internals = { + ncp: promisify(ncp), + 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.<Blog.tPost>} posts the list of posts + */ +module.exports = async function StaticGenerator(source, target, posts) { + + const assetsTarget = join(target, internals.kAssetsDirectoryName); + + internals.debuglog(`Removing ${assetsTarget}`); + await rmdir(assetsTarget, { recursive: true }); + + 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 internals.ncp(assetsSource, assetsTarget); + } + catch (error) { + if (error.code === internals.kFileNotFoundError) { + internals.debuglog(`Skipping ${i}`); + continue; + } + + throw error; + } + } +}; |