www/util/slug.ts

47 lines
1.3 KiB
TypeScript
Raw Normal View History

import fs from 'fs'
import matter from 'gray-matter';
import { join } from 'path';
const postsDirectory = join(process.cwd(), 'posts');
export function getPost(rawslug: string, filter: Array<any> = []) {
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: { slug?: string, rawslug?: string, content?: string, title?: string } | any = {};
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;
}
export function getAllPosts(filter: Array<any> = []) {
const files = fs.readdirSync(postsDirectory);
2022-04-23 23:03:43 +00:00
return files
.filter(c => !c.match(/^\./))
.map(file => {
return getPost(file, filter)
});
}