md-toy-blog
Version:
Very simple Markdown blog: serves your md as html without fancy databases. You will only spend time writing the actual data.
34 lines (31 loc) • 1.31 kB
text/typescript
import { LoadDictElement } from 'di-why/build/src/DiContainer';
import asyncFilter from '../utils/asyncFilter';
type PostSlugList = string[];
type FactoryProps = {
validPostSlugListGetter: () => PostSlugList;
markdownToHtmlService: MarkdownToHtmlServiceInterface;
appPaths: AppPathsInterface;
};
const loadDictElement: LoadDictElement<Promise<PostSlugList>> = {
factory: async ({ validPostSlugListGetter, markdownToHtmlService, appPaths }: FactoryProps) => {
const privateAndPublicPostSlugList = validPostSlugListGetter();
const extractPostData = async (postSlug: string) => {
try {
const postData = await markdownToHtmlService.extractFmAttributesAndHtmlBodyFromMd(postSlug, appPaths.getMarkdownFilePath(postSlug));
return postData;
} catch (err) {
console.log(err.message);
throw err;
}
}
const isPublic = async (postSlug: string) => (await extractPostData(postSlug)).attributes.privacy === "public";
const onlyPublicPostSlugList = await asyncFilter(privateAndPublicPostSlugList, isPublic)
return onlyPublicPostSlugList;
},
locateDeps: {
appPaths: 'appPathResolverService',
validPostSlugListGetter: 'validPostSlugListGetter',
markdownToHtmlService: 'markdownToHtmlService'
},
};
export default loadDictElement;