mirror of
https://github.com/10h30/wordpress-export-to-markdown.git
synced 2026-07-20 07:04:14 +09:00
Refactor how paths are handled
This commit is contained in:
+28
-33
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user