Refactor how paths are handled

This commit is contained in:
Will Boyd
2019-12-30 09:17:33 -05:00
parent 63259b929b
commit 362c188aff
+28 -33
View File
@@ -16,7 +16,7 @@ async function processPayloadsPromise(payloads, loadFunc, config) {
setTimeout(async () => { setTimeout(async () => {
try { try {
const data = await loadFunc(payload.item, config); const data = await loadFunc(payload.item, config);
await writeFile(payload.dir, payload.filename, data); await writeFile(payload.destinationPath, data);
console.log(chalk.green('[OK]') + ' ' + payload.name); console.log(chalk.green('[OK]') + ' ' + payload.name);
resolve(); resolve();
} catch (ex) { } catch (ex) {
@@ -35,9 +35,9 @@ async function processPayloadsPromise(payloads, loadFunc, config) {
} }
} }
async function writeFile(dir, filename, data) { async function writeFile(destinationPath, data) {
await fs.promises.mkdir(dir, { recursive: true }); await fs.promises.mkdir(path.dirname(destinationPath), { recursive: true });
await fs.promises.writeFile(path.join(dir, filename), data); await fs.promises.writeFile(destinationPath, data);
} }
async function writeMarkdownFilesPromise(posts, config ) { async function writeMarkdownFilesPromise(posts, config ) {
@@ -45,8 +45,7 @@ async function writeMarkdownFilesPromise(posts, config ) {
const payloads = posts.map((post, index) => ({ const payloads = posts.map((post, index) => ({
item: post, item: post,
name: post.meta.slug, name: post.meta.slug,
dir: getPostDir(post, config), destinationPath: getPostPath(post, config),
filename: getPostFilename(post, config),
delay: index * 25 delay: index * 25
})); }));
@@ -69,14 +68,14 @@ async function writeImageFilesPromise(posts, config) {
// collect image data from all posts into a single flattened array of payloads // collect image data from all posts into a single flattened array of payloads
let delay = 0; let delay = 0;
const payloads = posts.flatMap(post => { const payloads = posts.flatMap(post => {
const postDir = getPostDir(post, config); const postPath = getPostPath(post, config);
const imagesDir = path.join(path.dirname(postPath), 'images');
return post.meta.imageUrls.map(imageUrl => { return post.meta.imageUrls.map(imageUrl => {
const filename = shared.getFilenameFromUrl(imageUrl) const filename = shared.getFilenameFromUrl(imageUrl);
const payload = { const payload = {
item: imageUrl, item: imageUrl,
name: filename, name: filename,
dir: path.join(postDir, 'image'), destinationPath: path.join(imagesDir, filename),
filename,
delay delay
}; };
delay += 100; delay += 100;
@@ -105,39 +104,35 @@ async function loadImageFilePromise(imageUrl) {
return buffer; return buffer;
} }
function getPostDir(post, config) { function getPostPath(post, config) {
let dir = config.output;
let dt = luxon.DateTime.fromISO(post.frontmatter.date); let dt = luxon.DateTime.fromISO(post.frontmatter.date);
if (config.yearmonthfolders) { // start with base output dir
dir = path.join(dir, dt.toFormat('yyyy'), dt.toFormat('LL')); let pathSegments = [config.output];
} else if (config.yearfolders) {
dir = path.join(dir, dt.toFormat('yyyy'));
}
if (config.postfolders) { // add year/month dirs as specified
let folder = post.meta.slug; if (config.yearfolders || config.yearmonthfolders) {
if (config.prefixdate) { pathSegments.push(dt.toFormat('yyyy'));
folder = dt.toFormat('yyyy-LL-dd') + '-' + folder;
if (config.yearmonthfolders) {
pathSegments.push(dt.toFormat('LL'));
} }
dir = path.join(dir, folder);
} }
return dir; // create slug fragment, possibly date prefixed
} let slugFragment = post.meta.slug;
if (config.prefixdate) {
slugFragment = dt.toFormat('yyyy-LL-dd') + '-' + slugFragment;
}
function getPostFilename(post, config) { // use slug fragment as folder or filename as specified
if (config.postfolders) { if (config.postfolders) {
// the containing folder name will be unique, just use index.md here pathSegments.push(slugFragment, 'index.md');
return 'index.md';
} else { } else {
let filename = post.meta.slug + '.md'; pathSegments.push(slugFragment + '.md');
if (config.prefixdate) {
let dt = luxon.DateTime.fromISO(post.frontmatter.date);
filename = dt.toFormat('yyyy-LL-dd') + '-' + filename;
}
return filename;
} }
return path.join(...pathSegments);
} }
exports.writeFilesPromise = writeFilesPromise; exports.writeFilesPromise = writeFilesPromise;