const { mkdir, readdir, rm, writeFile } = require('fs/promises'); const { debuglog, promisify } = require('util'); const { ncp } = require('ncp'); const { join } = require('path'); const internals = { kArchiveName: '.gemlog', kIndexName: 'index.gmi', kGeminiRe: /\.gmi$/i, ncp: promisify(ncp), debuglog: debuglog('blog'), }; module.exports = async function(archiveDirectory) { internals.debuglog(`Reading archive ${archiveDirectory}`); const postIds = await readdir(archiveDirectory) const posts = []; for (const id of postIds) { const postDirectory = join(archiveDirectory, id); const slug = (await readdir(postDirectory)) .filter((entry) => internals.kGeminiRe.test(entry))[0]; posts.push({ id, slug }) }; internals.debuglog(`Read ${posts.length} posts`); const index = ['# Unlimited Pizza Gemlog Archive', '', ...posts.map((post) => `=> ./${post.id}/${post.slug}`)].join('\n'); try { internals.debuglog('Removing index'); await rm(internals.kArchiveName, { recursive: true }); } finally { internals.debuglog('Creating index'); await mkdir(internals.kArchiveName); const indexFile = join(internals.kArchiveName, internals.kIndexName); await writeFile(indexFile, index); internals.debuglog('Copying posts to archive'); await internals.ncp(archiveDirectory, internals.kArchiveName); } };