2026-02-14 14:53:41 +08:00

48 lines
1.5 KiB
TypeScript

import type { App, PluginConfig } from 'vuepress'
import type { ThemeBuiltinPlugins } from '../../shared/index.js'
import { isPlainObject } from '@vuepress/helper'
import { gitPlugin as rawGitPlugin } from '@vuepress/plugin-git'
import { getThemeConfig } from '../loadConfig/index.js'
/**
* Setup git plugin
*
* 设置 Git 插件,用于显示文章的最后更新时间、贡献者和变更历史
*/
export function gitPlugin(app: App, pluginOptions: ThemeBuiltinPlugins): PluginConfig {
const options = getThemeConfig()
const git = pluginOptions.git ?? app.env.isBuild
if (!git) {
// disable all git features
return [rawGitPlugin({
createdTime: false,
updatedTime: false,
contributors: false,
changelog: false,
})]
}
const excludes = ['home', 'friends', 'page', 'custom', false]
const changelogOptions = isPlainObject(options.changelog) ? options.changelog : {}
return [rawGitPlugin({
updatedTime: options.lastUpdated !== false,
contributors: isPlainObject(options.contributors) || options.contributors === true
? {
avatar: true,
...options.contributors === true ? {} : options.contributors,
}
: false,
changelog: options.changelog && options.docsRepo
? { repoUrl: options.docsRepo, ...changelogOptions }
: options.changelog,
filter(page) {
if (page.frontmatter.home || excludes.includes(page.frontmatter.pageLayout as string))
return false
return true
},
})]
}