summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--docs/README.md18
-rw-r--r--jest.config.js1
-rw-r--r--src/__tests__/index.spec.ts6
-rw-r--r--src/__tests__/samples/2019/12/12/test.md11
-rw-r--r--src/getPosts.ts62
-rw-r--r--src/index.ts81
-rw-r--r--src/interfaces.ts16
-rw-r--r--test/index.spec.js0
8 files changed, 123 insertions, 72 deletions
diff --git a/docs/README.md b/docs/README.md
index 76d000e..616fbb7 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1 +1,19 @@
 # Kronikarz
+
+Required folder structure:
+
+```
+year
+└── month
+    └── title
+        └── title.md
+```
+
+To parse all posts run:
+
+```js
+import Kronikarz from "kronikarz";
+
+const k = new Kronikarz("path/to/posts");
+k.getPosts();
+```
diff --git a/jest.config.js b/jest.config.js
index 4f26d08..8effa4a 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -3,4 +3,5 @@ module.exports = {
   transform: {
     "^.+\\.tsx?$": "ts-jest"
   }
+  //   testMatch: ["**/test/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)"]
 };
diff --git a/src/__tests__/index.spec.ts b/src/__tests__/index.spec.ts
new file mode 100644
index 0000000..64ce82d
--- /dev/null
+++ b/src/__tests__/index.spec.ts
@@ -0,0 +1,6 @@
+import Kronikarz from "..";
+
+test("basic", () => {
+  const k = new Kronikarz("./src/__tests__/samples");
+  console.log(k.getPosts());
+});
diff --git a/src/__tests__/samples/2019/12/12/test.md b/src/__tests__/samples/2019/12/12/test.md
new file mode 100644
index 0000000..5fc0158
--- /dev/null
+++ b/src/__tests__/samples/2019/12/12/test.md
@@ -0,0 +1,11 @@
+---
+title: Test
+description: test test
+author: Tester
+---
+
+# Test
+
+12-12-2019 | Tester
+
+test test test
diff --git a/src/getPosts.ts b/src/getPosts.ts
new file mode 100644
index 0000000..893946d
--- /dev/null
+++ b/src/getPosts.ts
@@ -0,0 +1,62 @@
+import * as fs from "fs";
+import { JSDOM } from "jsdom";
+import { Post } from "./interfaces";
+
+const frontmatter = require("front-matter");
+const md = require("markdown-it")();
+
+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(path: string) {
+  let routesArray: Post[] = [];
+  try {
+    const years = fs.readdirSync(`${path}`);
+    console.log(years);
+    years.forEach((year: string) => {
+      const months = fs.readdirSync(`${path}/${year}`);
+      months.forEach((month: string) => {
+        const days = fs.readdirSync(`${path}/${year}/${month}`);
+        days.forEach((day: string) => {
+          const files = fs.readdirSync(`${path}/${year}/${month}/${day}`);
+          files.forEach((file: string) => {
+            const title = file.substr(0, file.lastIndexOf("."));
+            const route = `/kronika/${year}/${month}/${day}/${title}/`;
+            const fsRoute = `${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 };
diff --git a/src/index.ts b/src/index.ts
index b6a2b78..61e38c8 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,77 +1,14 @@
-import * as fs from "fs";
-import { JSDOM } from "jsdom";
+import { getPosts as apiGetPosts } from "./getPosts";
+import { Post } from "./interfaces";
 
-const frontmatter = require("front-matter");
-const md = require("markdown-it")();
+export default class Kronikarz {
+  postPath: string;
 
-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;
+  constructor(postPath: string) {
+    this.postPath = postPath;
   }
-}
 
-function createRoutesArray() {
-  let posts = getPosts();
-  return posts.map(post => post.route);
+  getPosts(): Array<Post> {
+    return apiGetPosts(this.postPath);
+  }
 }
-
-export { getPosts, createRoutesArray, getPostAttributes };
diff --git a/src/interfaces.ts b/src/interfaces.ts
new file mode 100644
index 0000000..b6c8d73
--- /dev/null
+++ b/src/interfaces.ts
@@ -0,0 +1,16 @@
+interface Date {
+  year: string;
+  month: string;
+  day: string;
+}
+
+interface Post {
+  date: Date;
+  title: string;
+  data: Object;
+  file: string;
+  fsRoute: string;
+  route: string;
+}
+
+export { Post };
diff --git a/test/index.spec.js b/test/index.spec.js
deleted file mode 100644
index e69de29..0000000
--- a/test/index.spec.js
+++ /dev/null