Files
vscode-front-matter/docs/lib/api.ts
Elio Struyf 672abbea2d Docs
2021-08-30 21:44:16 +02:00

53 lines
1.4 KiB
TypeScript

import fs from 'fs'
import { join } from 'path'
import matter from 'gray-matter'
type ContentType = "docs" | "changelog";
const postsDirectory = join(process.cwd(), 'content');
export function getPostSlugs(type: ContentType) {
return fs.readdirSync(join(postsDirectory, type)).filter(f => f.endsWith(`.md`))
}
export function getPostByFilename(type: ContentType, crntFile: string, fields: string[] = []) {
const realSlug = crntFile.replace(/\.md$/, '');
const fullPath = join(postsDirectory, type, `${realSlug}.md`)
const fileContents = fs.readFileSync(fullPath, 'utf8')
const { data, content } = matter(fileContents)
const items: any = {}
// Ensure only the minimal needed data is exposed
fields.forEach((field) => {
if (field === 'content') {
items[field] = content
}
if (field === 'fileName') {
items[field] = realSlug
}
if (data[field]) {
items[field] = data[field]
}
if (field === 'slug') {
items[field] = data['slug'] || realSlug
}
})
return items
}
export function getAllPosts(type: ContentType, fields: string[] = []) {
const fileNames = getPostSlugs(type);
const posts = fileNames
.map((fileName) => getPostByFilename(type, fileName, fields))
// sort posts by date in descending order
.sort((post1, post2) => ((post1 as any)?.date > (post2 as any)?.date ? -1 : 1));
return posts
}