From 5f280420ef272a09c573fcb4bc7c1406162b7f6b Mon Sep 17 00:00:00 2001 From: pengzhanbo Date: Fri, 2 Feb 2024 09:46:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(plugin-blog-data):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=94=9F=E6=88=90=E9=A2=9D=E5=A4=96=E7=9A=84?= =?UTF-8?q?=E5=8D=9A=E5=AE=A2=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vuepress/theme.ts | 4 +++- .../src/client/blogPostData.d.ts | 3 ++- .../src/client/composables/useBlogPostData.ts | 16 +++++++++++++++- .../src/node/prepareBlogData.ts | 18 +++++++++++++++--- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/docs/.vuepress/theme.ts b/docs/.vuepress/theme.ts index 4297e650..ab688ba6 100644 --- a/docs/.vuepress/theme.ts +++ b/docs/.vuepress/theme.ts @@ -1,8 +1,9 @@ import themePlume from 'vuepress-theme-plume' +import type { Theme } from 'vuepress' import { enNotes, zhNotes } from './notes.js' import { enNavbar, zhNavbar } from './navbar.js' -export const theme = themePlume({ +export const theme: Theme = themePlume({ logo: 'https://pengzhanbo.cn/g.gif', hostname: 'https://pengzhanbo.cn', repo: 'https://github.com/pengzhanbo/vuepress-theme-plume', @@ -15,6 +16,7 @@ export const theme = themePlume({ }, social: [{ icon: 'github', link: 'https://github.com/pengzhanbo' }], + footer: { copyright: 'Copyright © 2022-present pengzhanbo' }, locales: { diff --git a/plugins/plugin-blog-data/src/client/blogPostData.d.ts b/plugins/plugin-blog-data/src/client/blogPostData.d.ts index 52fa5598..abda7c79 100644 --- a/plugins/plugin-blog-data/src/client/blogPostData.d.ts +++ b/plugins/plugin-blog-data/src/client/blogPostData.d.ts @@ -2,6 +2,7 @@ import type { BlogPostData } from '../shared/index.js' declare module '@internal/blogData' { const blogPostData: BlogPostData + const extraBlogData: Record - export { blogPostData } + export { blogPostData, extraBlogData } } diff --git a/plugins/plugin-blog-data/src/client/composables/useBlogPostData.ts b/plugins/plugin-blog-data/src/client/composables/useBlogPostData.ts index f146b15a..29df8ec3 100644 --- a/plugins/plugin-blog-data/src/client/composables/useBlogPostData.ts +++ b/plugins/plugin-blog-data/src/client/composables/useBlogPostData.ts @@ -1,4 +1,7 @@ -import { blogPostData as blogPostDataRaw } from '@internal/blogData' +import { + blogPostData as blogPostDataRaw, + extraBlogData as extraBlogDataRaw, +} from '@internal/blogData' import { ref } from 'vue' import type { Ref } from 'vue' import type { BlogPostData } from '../../shared/index.js' @@ -15,8 +18,19 @@ export function useBlogPostData< return blogPostData as BlogDataRef } +export type ExtraBlogDataRef = Ref> + +export const extraBlogData: ExtraBlogDataRef = ref(extraBlogDataRaw) + +export function useExtraBlogData(): ExtraBlogDataRef { + return extraBlogData as ExtraBlogDataRef +} + if (__VUEPRESS_DEV__ && (import.meta.webpackHot || import.meta.hot)) { __VUE_HMR_RUNTIME__.updateBlogData = (data: BlogPostData) => { blogPostData.value = data } + __VUE_HMR_RUNTIME__.updateExtraBlogData = (data: Record) => { + extraBlogData.value = data + } } diff --git a/plugins/plugin-blog-data/src/node/prepareBlogData.ts b/plugins/plugin-blog-data/src/node/prepareBlogData.ts index e712ab69..ec19139d 100644 --- a/plugins/plugin-blog-data/src/node/prepareBlogData.ts +++ b/plugins/plugin-blog-data/src/node/prepareBlogData.ts @@ -8,11 +8,15 @@ if (import.meta.webpackHot) { if (__VUE_HMR_RUNTIME__.updateBlogData) { __VUE_HMR_RUNTIME__.updateBlogData(blogPostData) } + if (__VUE_HMR_RUNTIME__.updateExtraBlogData) { + __VUE_HMR_RUNTIME__.updateExtraBlogData(extraBlogData) + } } if (import.meta.hot) { - import.meta.hot.accept(({ blogPostData }) => { + import.meta.hot.accept(({ blogPostData, extraBlogData }) => { __VUE_HMR_RUNTIME__.updateBlogData(blogPostData) + __VUE_HMR_RUNTIME__.updateExtraBlogData(extraBlogData) }) } ` @@ -47,10 +51,15 @@ export async function preparedBlogData(app: App, pageFilter: (id: string) => boo }) } + const extraBlogData: Record = {} + + if (typeof options.extraBlogData === 'function') + options.extraBlogData(extraBlogData) + const blogData: BlogPostData = pages.map((page: Page) => { let extended: Partial = {} if (typeof options.extendBlogData === 'function') - extended = options.extendBlogData(page) + extended = options.extendBlogData(page, extraBlogData) const data = { path: page.path, @@ -69,7 +78,10 @@ export async function preparedBlogData(app: App, pageFilter: (id: string) => boo let content = `\ export const blogPostData = JSON.parse(${JSON.stringify( JSON.stringify(blogData), - )}) + )}); +export const extraBlogData = JSON.parse(${JSON.stringify( + JSON.stringify(extraBlogData), +)}); ` // inject HMR code