diff options
Diffstat (limited to 'src/index.ts')
-rw-r--r-- | src/index.ts | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..b6a2b78 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,77 @@ +import * as fs from "fs"; +import { JSDOM } from "jsdom"; + +const frontmatter = require("front-matter"); +const md = require("markdown-it")(); + +const POSTS_PATH = "./content/wpisy"; + +interface Date { + year: string; + month: string; + day: string; +} + +interface Post { + date: Date; + title: string; + data: Object; + file: string; + fsRoute: string; + route: string; +} + +function getPostAttributes(fileContent: string) { + const post = frontmatter(fileContent); + + const { document } = new JSDOM(`<body>${md.render(post.body)}</body>`).window; + const element = document.getElementsByTagName("p"); + + post.body = `<div>${md.render(post.body)}</div>`; + post.description = element[1].textContent; + + return post; +} + +function getPosts() { + let routesArray: Post[] = []; + try { + const years = fs.readdirSync(`${POSTS_PATH}`); + years.forEach((year: string) => { + const months = fs.readdirSync(`${POSTS_PATH}/${year}`); + months.forEach((month: string) => { + const days = fs.readdirSync(`${POSTS_PATH}/${year}/${month}`); + days.forEach((day: string) => { + const files = fs.readdirSync(`${POSTS_PATH}/${year}/${month}/${day}`); + files.forEach((file: string) => { + const title = file.substr(0, file.lastIndexOf(".")); + const route = `/kronika/${year}/${month}/${day}/${title}/`; + const fsRoute = `${POSTS_PATH}/${year}/${month}/${day}/${file}`; + + const data = getPostAttributes(fs.readFileSync(fsRoute, "utf-8")); + + const post = { + date: { year, month, day }, + title, + data, + file, + fsRoute, + route + }; + + routesArray.push(post); + }); + }); + }); + }); + } finally { + return routesArray; + } +} + +function createRoutesArray() { + let posts = getPosts(); + return posts.map(post => post.route); +} + +export { getPosts, createRoutesArray, getPostAttributes }; |