import type { UserConfig } from 'vuepress' import fs from 'node:fs' import path from 'node:path' import { viteBundler } from '@vuepress/bundler-vite' import { addViteOptimizeDepsInclude, addViteSsrExternal } from '@vuepress/helper' import { llmsPlugin } from '@vuepress/plugin-llms' import { defineUserConfig } from 'vuepress' import { tocGetter } from './llmstxtTOC.js' import { theme } from './theme.js' const pnpmWorkspace = fs.readFileSync(path.resolve(__dirname, '../../pnpm-workspace.yaml'), 'utf-8') const vuepress = pnpmWorkspace.match(/vuepress:\s(2.+)/)?.[1] || '' export default defineUserConfig({ base: '/', lang: 'zh-CN', source: path.resolve(__dirname, '../'), public: path.resolve(__dirname, 'public'), locales: { '/': { title: 'Plume 主题', lang: 'zh-CN' }, '/en/': { title: 'Plume Theme', lang: 'en-US' }, }, head: [ ['link', { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/favicon-32x32.png' }], ['link', { rel: 'icon', type: 'image/png', sizes: '16x16', href: '/favicon-16x16.png' }], ['meta', { name: 'google-site-verification', content: 'AaTP7bapCAcoO9ZGE67ilpy99GL6tYqtD30tRHjO9Ps' }], ], pagePatterns: ['**/*.md', '!**/*.snippet.md', '!.vuepress', '!node_modules', '!docs/guide/repl/demo/*'], extendsBundlerOptions(bundlerOptions, app) { addViteOptimizeDepsInclude(bundlerOptions, app, '@simonwep/pickr') addViteSsrExternal(bundlerOptions, app, '@simonwep/pickr') }, define: { __VUEPRESS_VERSION__: vuepress, // debug hydration mismatch // __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'true', }, alias: { '~/theme': path.resolve(__dirname, './themes'), '~/components': path.resolve(__dirname, './themes/components'), '~/composables': path.resolve(__dirname, './themes/composables'), }, plugins: [ llmsPlugin({ llmsTxtTemplateGetter: { description: '一个简约易用的,功能丰富的 vuepress 文档&博客 主题', details: '', toc: tocGetter, }, }), ], bundler: viteBundler(), shouldPrefetch: false, theme, }) as UserConfig