UNPKG

meblog

Version:

A simple blog engine for personal blogging

62 lines (61 loc) 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const PostParser_1 = tslib_1.__importDefault(require("./PostParser")); const Post_1 = require("./Post"); const FileUtils_1 = tslib_1.__importDefault(require("../util/FileUtils")); const MarkdownItRenderer_1 = tslib_1.__importDefault(require("../markdown/MarkdownItRenderer")); class MarkdownPostParser extends PostParser_1.default { mdRenderer; constructor() { super(); this.mdRenderer = new MarkdownItRenderer_1.default(); } parse(filePath, separator = '---') { const post = {}; let content = FileUtils_1.default.readFile(filePath); if (!content) { return new Post_1.Post(); } post.markdown = content; post.slug = this.extractSlug(filePath); let separatorCounter = 0; const metaLines = []; while (true) { const index = content.indexOf('\n'); if (index < 0) { break; } const line = content.substring(0, index).trim(); content = content.substring(index + 1); if (line === separator) { separatorCounter += 1; if (separatorCounter === 2) { post.body = this.mdRenderer.render(content); break; } else { continue; } } if (separatorCounter <= 1) { metaLines.push(line); } } metaLines.forEach((line) => { const colonIndex = line.indexOf(':'); if (colonIndex <= 0) { return; } const metaName = line.substring(0, colonIndex).trim(); const metaValue = line.substring(colonIndex + 1).trim(); post[metaName] = metaValue; }); return new Post_1.Post(post); } extractSlug(filePath) { const fileName = FileUtils_1.default.basename(filePath, FileUtils_1.default.ext(filePath)); return fileName.replace(/[^\w-]*/gm, ''); } } exports.default = MarkdownPostParser;