From cef4db06a3a9a1bddcd0c5d055254da0647191dc Mon Sep 17 00:00:00 2001 From: andatoshiki Date: Wed, 24 May 2023 13:36:21 +0800 Subject: [PATCH] feat: add workflow to generate doc post data for extracting data --- docs/.vitepress/utils/posts.data.js | 39 ++++++++++++++++++----------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/docs/.vitepress/utils/posts.data.js b/docs/.vitepress/utils/posts.data.js index dfbb21b7..e415e8ea 100644 --- a/docs/.vitepress/utils/posts.data.js +++ b/docs/.vitepress/utils/posts.data.js @@ -1,29 +1,26 @@ -// from https://github.com/vuejs/blog const fs = require('fs') const path = require('path') const matter = require('gray-matter') const { createMarkdownRenderer } = require('vitepress') -const cwd = process.cwd() +const md = createMarkdownRenderer(process.cwd()) module.exports = { - watch: path.relative(__dirname, cwd + '/docs/*.md').replace(/\\/g, '/'), - async load(asFeed = false) { - const md = await createMarkdownRenderer(cwd) - const postDir = path.join(cwd, 'docs') + watch: '../../docs/*.md', + load(asFeed = false) { + const postDir = path.resolve(__dirname, '../../docs') return fs .readdirSync(postDir) - .filter(file => file.endsWith('.md')) - .map(file => getPost(md, file, postDir, asFeed)) - .sort((a, b) => b.create - a.create) + .map(file => getPost(file, postDir, asFeed)) + .sort((a, b) => b.date.time - a.date.time) } } const cache = new Map() -function getPost(md, file, postDir, asFeed = false) { +function getPost(file, postDir, asFeed = false) { const fullePath = path.join(postDir, file) - const timestamp = Math.floor(fs.statSync(fullePath).mtimeMs) + const timestamp = fs.statSync(fullePath).mtimeMs const cached = cache.get(fullePath) if (cached && timestamp === cached.timestamp) { @@ -36,10 +33,7 @@ function getPost(md, file, postDir, asFeed = false) { const post = { title: data.title, href: `${file.replace(/\.md$/, '.html')}`, - create: +new Date(data.date) || timestamp, - update: timestamp, - tags: data.tags, - cover: data.cover, + date: formatDate(data.date), excerpt: md.render(excerpt) } if (asFeed) { @@ -54,3 +48,18 @@ function getPost(md, file, postDir, asFeed = false) { }) return post } + +function formatDate(date) { + if (!(date instanceof Date)) { + date = new Date(date) + } + date.setUTCHours(12) + return { + time: +date, + string: date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric' + }) + } +}