UNPKG

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.

51 lines (45 loc) 1.64 kB
import NotFoundController from './NotFoundController'; export default class BlogHomeController extends NotFoundController { protected config: BlogHomeControllerCtorConfig; constructor(config: BlogHomeControllerCtorConfig) { super(config); this.config = config; } async action({ posts }: BlogHomeControllerActionParams): Promise<ResponseInterface> { const controllerName = this.constructor.name; const { additionalViewData, appPaths, postPreviewShortener, markdownToHtmlService, templateHydratorService, } = this.config; const { getMarkdownFilePath, getViewTemplateFilePath } = appPaths; try { const postsDataWithHtmlBody: FmDataInterface[] = await Promise.all(posts.map(async (postSlug: string) => { return await markdownToHtmlService.extractFmAttributesAndHtmlBodyFromMd( postSlug, getMarkdownFilePath(postSlug), postPreviewShortener ); })); const computedViewData: ViewData = { title: 'Home', ...(additionalViewData || {}), // TODO correct this Index Signature is missing in FmDataInterface posts: postsDataWithHtmlBody as unknown as ViewData[], }; const postTemplateData = await templateHydratorService.loadViewTemplate( { ...computedViewData }, getViewTemplateFilePath(controllerName) ); return { code: 200, headers: {'content-type': 'text/html; charset=utf-8'}, body: templateHydratorService.hydrateView(postTemplateData), }; } catch (err) { return this.handleError(err); } } }