summary refs log tree commit diff
path: root/lib/parsePost.ts
diff options
context:
space:
mode:
authorPatryk Niedźwiedziński <pniedzwiedzinski19@gmail.com>2019-10-13 23:48:12 +0200
committerPatryk Niedźwiedziński <pniedzwiedzinski19@gmail.com>2019-10-13 23:48:12 +0200
commit4274595b251632ef004d5f1429d7fbdde1cd4a5a (patch)
treec8a5ac120ddd03e161ecac522b1180f3a815cf70 /lib/parsePost.ts
parent0ccea881106946b66d167eee0ec8116ae4e3019e (diff)
downloadkronikarz-4274595b251632ef004d5f1429d7fbdde1cd4a5a.tar.gz
kronikarz-4274595b251632ef004d5f1429d7fbdde1cd4a5a.zip
Add publish options
Diffstat (limited to 'lib/parsePost.ts')
-rw-r--r--lib/parsePost.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/parsePost.ts b/lib/parsePost.ts
new file mode 100644
index 0000000..01e8d1c
--- /dev/null
+++ b/lib/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(`<div>${html}</div>`).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 = `<div>${md.render(markdown)}</div>`;
+  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}`
+  };
+}