47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
const fs = require('fs');
|
|
const matter = require('gray-matter');
|
|
const { join } = require('path');
|
|
|
|
const postsDirectory = join(process.cwd(), 'posts');
|
|
|
|
function getPost(rawslug, filter = []) {
|
|
const slug = rawslug.replace(/\.md$/, '');
|
|
const path = join(postsDirectory, `${slug}.md`);
|
|
const file = fs.readFileSync(path, 'utf-8');
|
|
const { data, content } = matter(file);
|
|
|
|
if (data['last_updated'] === undefined)
|
|
data['last_updated'] = data['created_at'];
|
|
|
|
if (filter.length === 0)
|
|
return { ...data, content, slug, rawslug };
|
|
|
|
let post = {};
|
|
for (const [_, entry] of filter.entries()) {
|
|
if (entry === 'slug')
|
|
post[entry] = slug;
|
|
|
|
if (entry === 'rawslug')
|
|
post[entry] = rawslug;
|
|
|
|
if (entry === 'content')
|
|
post[entry] = content;
|
|
|
|
if (typeof data[entry] !== 'undefined') {
|
|
post[entry] = data[entry]
|
|
}
|
|
}
|
|
return post;
|
|
}
|
|
|
|
function getAllPosts(filter = []) {
|
|
const files = fs.readdirSync(postsDirectory);
|
|
|
|
return files
|
|
.filter(c => !c.match(/^\./))
|
|
.map(file => {
|
|
return getPost(file, filter)
|
|
});
|
|
}
|
|
|
|
module.exports = { getAllPosts, getPost }; |