X-Git-Url: https://git.r.bdr.sh/rbdr/blog/blobdiff_plain/fac54389550aaab8bcb4ad1e6b0b1900fd8887d2..d620665f6b2e1ae5db4c98a09e35bd63133ae87f:/lib/generators/static.js diff --git a/lib/generators/static.js b/lib/generators/static.js index a0856a3..45f5a04 100644 --- a/lib/generators/static.js +++ b/lib/generators/static.js @@ -1,14 +1,11 @@ -'use strict'; - -const { access, rm } = require('fs/promises'); -const { ncp } = require('ncp'); -const { join } = require('path'); -const { debuglog, promisify } = require('util'); +import { access, cp, readdir } from 'fs/promises'; +import { constants } from 'fs'; +import { join } from 'path'; +import { debuglog } from 'util'; +import { kFileNotFoundError } from '../constants.js'; const internals = { - ncp: promisify(ncp), debuglog: debuglog('blog'), - kAssetsDirectoryName: 'assets' }; @@ -20,31 +17,32 @@ const internals = { * @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); +export default async function StaticGenerator(source, target, _) { - internals.debuglog(`Removing ${assetsTarget}`); - await rm(assetsTarget, { recursive: true }); + try { + await access(source, constants.R_OK); - for (let i = 0; i < posts.length; ++i) { - const postSourcePath = join(source, `${i}`); + const entries = await readdir(source, { withFileTypes: true }); + for (const entry of entries) { + const sourceAsset = join(source, entry.name); + const targetAsset = join(target, entry.name); - try { - await access(postSourcePath); + internals.debuglog(`Copying ${sourceAsset} to ${targetAsset}`); - 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; + if (entry.isDirectory()) { + await cp(sourceAsset, targetAsset, { recursive: true }); + } + else { + await cp(sourceAsset, targetAsset); } - - throw error; } } -}; + catch (error) { + if (error.code === kFileNotFoundError) { + internals.debuglog(`No static directory found in ${source}`); + return; + } + + throw error; + } +}