71 lines
1.4 KiB
TypeScript
71 lines
1.4 KiB
TypeScript
import { contentDirectoryPath } from "../config"
|
|
import { generateToc } from "../parseMarkdown"
|
|
import { PostData } from "../../types/types"
|
|
import { addDocument } from "../searchIndex"
|
|
import { writeToFile } from "../util"
|
|
import { map } from ".."
|
|
import { DataToPass } from "."
|
|
|
|
export default function parsePost(data: DataToPass): void {
|
|
const { urlPath, markdownRaw, markdownData, humanizedDuration, totalWords } =
|
|
data
|
|
|
|
const postData: PostData = {
|
|
title: markdownData.title as string,
|
|
date: "",
|
|
readTime: humanizedDuration,
|
|
wordCount: totalWords,
|
|
tags: [],
|
|
}
|
|
|
|
/**
|
|
* Dates
|
|
*/
|
|
|
|
const postDate = new Date(markdownData.date as string)
|
|
postData.date = postDate.toLocaleString("default", {
|
|
month: "short",
|
|
day: "numeric",
|
|
year: "numeric",
|
|
})
|
|
|
|
const YYYY_MM_DD = postDate.toISOString().split("T")[0]
|
|
if (map.date[YYYY_MM_DD]) {
|
|
map.date[YYYY_MM_DD].push(urlPath)
|
|
} else {
|
|
map.date[YYYY_MM_DD] = [urlPath]
|
|
}
|
|
|
|
/**
|
|
* Tags
|
|
*/
|
|
|
|
postData.tags = markdownData.tags as string[]
|
|
if (postData.tags) {
|
|
postData.tags.forEach((tag) => {
|
|
if (map.tags[tag]) {
|
|
map.tags[tag].push(urlPath)
|
|
} else {
|
|
map.tags[tag] = [urlPath]
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
|
|
map.posts[urlPath] = postData
|
|
addDocument({
|
|
title: markdownData.title,
|
|
body: markdownData.content,
|
|
url: urlPath,
|
|
})
|
|
writeToFile(
|
|
`${contentDirectoryPath}${urlPath}.json`,
|
|
JSON.stringify({
|
|
content: markdownData.content,
|
|
toc: generateToc(markdownRaw),
|
|
})
|
|
)
|
|
}
|