summary refs log tree commit diff
path: root/lib/generateApi.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/generateApi.ts')
-rw-r--r--lib/generateApi.ts49
1 files changed, 31 insertions, 18 deletions
diff --git a/lib/generateApi.ts b/lib/generateApi.ts
index 836fa2a..cade7e4 100644
--- a/lib/generateApi.ts
+++ b/lib/generateApi.ts
@@ -1,29 +1,30 @@
-import fs from "fs";
-import path from "path";
-import { Post } from "./interfaces";
+import fs from 'fs';
+import path from 'path';
+import Post from './Post';
+import { dateToPath } from './utils';
 
 function mkDirByPathSync(targetDir: string) {
   const sep = path.sep;
-  const initDir = path.isAbsolute(targetDir) ? sep : "";
-  const baseDir = ".";
+  const initDir = path.isAbsolute(targetDir) ? sep : '';
+  const baseDir = '.';
 
   return targetDir.split(sep).reduce((parentDir, childDir) => {
     const curDir = path.resolve(baseDir, parentDir, childDir);
     try {
       fs.mkdirSync(curDir);
     } catch (err) {
-      if (err.code === "EEXIST") {
+      if (err.code === 'EEXIST') {
         // curDir already exists!
         return curDir;
       }
 
       // To avoid `EISDIR` error on Mac and `EACCES`-->`ENOENT` and `EPERM` on Windows.
-      if (err.code === "ENOENT") {
+      if (err.code === 'ENOENT') {
         // Throw the original parentDir error on curDir `ENOENT` failure.
         throw new Error(`EACCES: permission denied, mkdir '${parentDir}'`);
       }
 
-      const caughtErr = ["EACCES", "EPERM", "EISDIR"].indexOf(err.code) > -1;
+      const caughtErr = ['EACCES', 'EPERM', 'EISDIR'].indexOf(err.code) > -1;
       if (!caughtErr || (caughtErr && targetDir === curDir)) {
         throw err; // Throw if it's just the last created dir.
       }
@@ -34,26 +35,38 @@ function mkDirByPathSync(targetDir: string) {
 }
 
 export function saveApiEntry(post: Post, path: string) {
-  const { year, month, day } = post.date;
-  const dir = `${path}/api/posts/${year}/${month}/${day}`;
+  const dir = `${path}/api/posts/${dateToPath(post.date)}`;
 
   mkDirByPathSync(dir);
 
-  const apiEntry = {
-    title: post.title,
-    date: `${year}-${month}-${day}`,
-    content: post.content.html,
-    meta: post.content.meta
-  };
+  const apiEntry = post.toApi();
 
-  fs.writeFile(`${dir}/${post.title}.json`, JSON.stringify(apiEntry), err =>
+  fs.writeFile(
+    `${dir}/${post.fileTitle}.json`,
+    JSON.stringify(apiEntry),
+    (err) => (err ? console.log(err) : null)
+  );
+}
+
+/*
+ * This function generates paged api index on path `/api/paged-posts`
+ */
+function generateApiIndex(posts: Array<Post>, path: string) {
+  const parsedPosts = posts.map((post) => {
+    const apiEntry = post.toApi();
+    delete apiEntry.content;
+    return apiEntry;
+  });
+  const filePath = `${path}/api/posts.json`;
+  fs.writeFile(filePath, JSON.stringify(parsedPosts), (err) =>
     err ? console.log(err) : null
   );
 }
 
 export function generateApi(posts: Array<Post>, path: string) {
   try {
-    posts.forEach(post => saveApiEntry(post, path));
+    generateApiIndex(posts, path);
+    posts.forEach((post) => saveApiEntry(post, path));
   } catch (err) {
     console.log(err);
   }