From 0ccea881106946b66d167eee0ec8116ae4e3019e Mon Sep 17 00:00:00 2001 From: Patryk Niedźwiedziński Date: Sun, 13 Oct 2019 23:31:53 +0200 Subject: Add parsePost --- src/parsePost.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/parsePost.ts (limited to 'src/parsePost.ts') diff --git a/src/parsePost.ts b/src/parsePost.ts new file mode 100644 index 0000000..01e8d1c --- /dev/null +++ b/src/parsePost.ts @@ -0,0 +1,45 @@ +import * as fs from "fs"; +import { JSDOM } from "jsdom"; +import { Post, PostContent } from "./interfaces"; + +const frontmatter = require("front-matter"); +const md = require("markdown-it")(); + +function getDescription(html: string): string { + const { document } = new JSDOM(`
${html}
`).window; + const elements = document.getElementsByTagName("p"); + + const description = elements[1].textContent; + + return description || ""; +} + +function getPostContent(fileContent: string): PostContent { + const post = frontmatter(fileContent); + + const markdown = post.body; + const html = `
${md.render(markdown)}
`; + const description = getDescription(html); + + return { + html, + markdown, + description, + meta: post.attributes + }; +} + +export default function parsePost(filePath: string): Post { + const [year, month, day, title] = filePath.split("/").splice(-4, 4); + const date = { year, month, day }; + const fileContent = fs.readFileSync(filePath, "utf-8"); + const content = getPostContent(fileContent); + + return { + date, + title: title.substr(0, title.lastIndexOf(".")), + content, + filePath, + route: `/kronika/${year}/${month}/${day}/${title}` + }; +} -- cgit 1.4.1