|
|
|
@ -1,7 +1,6 @@
|
|
|
|
|
import {
|
|
|
|
|
defineConfig,
|
|
|
|
|
resolveSiteDataByRoute,
|
|
|
|
|
type ConfigEnv,
|
|
|
|
|
type HeadConfig
|
|
|
|
|
} from 'vitepress'
|
|
|
|
|
import {
|
|
|
|
@ -13,160 +12,159 @@ import llmstxt from 'vitepress-plugin-llms'
|
|
|
|
|
|
|
|
|
|
const prod = !!process.env.NETLIFY
|
|
|
|
|
|
|
|
|
|
export default (ctx: ConfigEnv) =>
|
|
|
|
|
defineConfig({
|
|
|
|
|
title: 'VitePress',
|
|
|
|
|
export default defineConfig({
|
|
|
|
|
title: 'VitePress',
|
|
|
|
|
|
|
|
|
|
rewrites: {
|
|
|
|
|
'en/:rest*': ':rest*'
|
|
|
|
|
},
|
|
|
|
|
rewrites: {
|
|
|
|
|
'en/:rest*': ':rest*'
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
lastUpdated: true,
|
|
|
|
|
cleanUrls: true,
|
|
|
|
|
metaChunk: true,
|
|
|
|
|
lastUpdated: true,
|
|
|
|
|
cleanUrls: true,
|
|
|
|
|
metaChunk: true,
|
|
|
|
|
|
|
|
|
|
markdown: {
|
|
|
|
|
math: true,
|
|
|
|
|
codeTransformers: [
|
|
|
|
|
// We use `[!!code` in demo to prevent transformation, here we revert it back.
|
|
|
|
|
{
|
|
|
|
|
postprocess(code) {
|
|
|
|
|
return code.replace(/\[\!\!code/g, '[!code')
|
|
|
|
|
}
|
|
|
|
|
markdown: {
|
|
|
|
|
math: true,
|
|
|
|
|
codeTransformers: [
|
|
|
|
|
// We use `[!!code` in demo to prevent transformation, here we revert it back.
|
|
|
|
|
{
|
|
|
|
|
postprocess(code) {
|
|
|
|
|
return code.replace(/\[\!\!code/g, '[!code')
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
config(md) {
|
|
|
|
|
// TODO: remove when https://github.com/vuejs/vitepress/issues/4431 is fixed
|
|
|
|
|
const fence = md.renderer.rules.fence!
|
|
|
|
|
md.renderer.rules.fence = function (tokens, idx, options, env, self) {
|
|
|
|
|
const { localeIndex = 'root' } = env
|
|
|
|
|
const codeCopyButtonTitle = (() => {
|
|
|
|
|
switch (localeIndex) {
|
|
|
|
|
case 'es':
|
|
|
|
|
return 'Copiar código'
|
|
|
|
|
case 'fa':
|
|
|
|
|
return 'کپی کد'
|
|
|
|
|
case 'ko':
|
|
|
|
|
return '코드 복사'
|
|
|
|
|
case 'pt':
|
|
|
|
|
return 'Copiar código'
|
|
|
|
|
case 'ru':
|
|
|
|
|
return 'Скопировать код'
|
|
|
|
|
case 'zh':
|
|
|
|
|
return '复制代码'
|
|
|
|
|
default:
|
|
|
|
|
return 'Copy code'
|
|
|
|
|
}
|
|
|
|
|
})()
|
|
|
|
|
return fence(tokens, idx, options, env, self).replace(
|
|
|
|
|
'<button title="Copy Code" class="copy"></button>',
|
|
|
|
|
`<button title="${codeCopyButtonTitle}" class="copy"></button>`
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
md.use(groupIconMdPlugin)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
sitemap: {
|
|
|
|
|
hostname: 'https://vitepress.dev',
|
|
|
|
|
transformItems(items) {
|
|
|
|
|
return items.filter((item) => !item.url.includes('migration'))
|
|
|
|
|
],
|
|
|
|
|
config(md) {
|
|
|
|
|
// TODO: remove when https://github.com/vuejs/vitepress/issues/4431 is fixed
|
|
|
|
|
const fence = md.renderer.rules.fence!
|
|
|
|
|
md.renderer.rules.fence = function (tokens, idx, options, env, self) {
|
|
|
|
|
const { localeIndex = 'root' } = env
|
|
|
|
|
const codeCopyButtonTitle = (() => {
|
|
|
|
|
switch (localeIndex) {
|
|
|
|
|
case 'es':
|
|
|
|
|
return 'Copiar código'
|
|
|
|
|
case 'fa':
|
|
|
|
|
return 'کپی کد'
|
|
|
|
|
case 'ko':
|
|
|
|
|
return '코드 복사'
|
|
|
|
|
case 'pt':
|
|
|
|
|
return 'Copiar código'
|
|
|
|
|
case 'ru':
|
|
|
|
|
return 'Скопировать код'
|
|
|
|
|
case 'zh':
|
|
|
|
|
return '复制代码'
|
|
|
|
|
default:
|
|
|
|
|
return 'Copy code'
|
|
|
|
|
}
|
|
|
|
|
})()
|
|
|
|
|
return fence(tokens, idx, options, env, self).replace(
|
|
|
|
|
'<button title="Copy Code" class="copy"></button>',
|
|
|
|
|
`<button title="${codeCopyButtonTitle}" class="copy"></button>`
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
md.use(groupIconMdPlugin)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
head: [
|
|
|
|
|
[
|
|
|
|
|
'link',
|
|
|
|
|
{ rel: 'icon', type: 'image/svg+xml', href: '/vitepress-logo-mini.svg' }
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
'link',
|
|
|
|
|
{ rel: 'icon', type: 'image/png', href: '/vitepress-logo-mini.png' }
|
|
|
|
|
],
|
|
|
|
|
['meta', { name: 'theme-color', content: '#5f67ee' }],
|
|
|
|
|
['meta', { property: 'og:type', content: 'website' }],
|
|
|
|
|
['meta', { property: 'og:site_name', content: 'VitePress' }],
|
|
|
|
|
[
|
|
|
|
|
'meta',
|
|
|
|
|
{
|
|
|
|
|
property: 'og:image',
|
|
|
|
|
content: 'https://vitepress.dev/vitepress-og.jpg'
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
['meta', { property: 'og:url', content: 'https://vitepress.dev/' }],
|
|
|
|
|
[
|
|
|
|
|
'script',
|
|
|
|
|
{
|
|
|
|
|
src: 'https://cdn.usefathom.com/script.js',
|
|
|
|
|
'data-site': 'AZBRSFGG',
|
|
|
|
|
'data-spa': 'auto',
|
|
|
|
|
defer: ''
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
],
|
|
|
|
|
sitemap: {
|
|
|
|
|
hostname: 'https://vitepress.dev',
|
|
|
|
|
transformItems(items) {
|
|
|
|
|
return items.filter((item) => !item.url.includes('migration'))
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
themeConfig: {
|
|
|
|
|
logo: { src: '/vitepress-logo-mini.svg', width: 24, height: 24 },
|
|
|
|
|
head: [
|
|
|
|
|
[
|
|
|
|
|
'link',
|
|
|
|
|
{ rel: 'icon', type: 'image/svg+xml', href: '/vitepress-logo-mini.svg' }
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
'link',
|
|
|
|
|
{ rel: 'icon', type: 'image/png', href: '/vitepress-logo-mini.png' }
|
|
|
|
|
],
|
|
|
|
|
['meta', { name: 'theme-color', content: '#5f67ee' }],
|
|
|
|
|
['meta', { property: 'og:type', content: 'website' }],
|
|
|
|
|
['meta', { property: 'og:site_name', content: 'VitePress' }],
|
|
|
|
|
[
|
|
|
|
|
'meta',
|
|
|
|
|
{
|
|
|
|
|
property: 'og:image',
|
|
|
|
|
content: 'https://vitepress.dev/vitepress-og.jpg'
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
['meta', { property: 'og:url', content: 'https://vitepress.dev/' }],
|
|
|
|
|
[
|
|
|
|
|
'script',
|
|
|
|
|
{
|
|
|
|
|
src: 'https://cdn.usefathom.com/script.js',
|
|
|
|
|
'data-site': 'AZBRSFGG',
|
|
|
|
|
'data-spa': 'auto',
|
|
|
|
|
defer: ''
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
socialLinks: [
|
|
|
|
|
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' }
|
|
|
|
|
],
|
|
|
|
|
themeConfig: {
|
|
|
|
|
logo: { src: '/vitepress-logo-mini.svg', width: 24, height: 24 },
|
|
|
|
|
|
|
|
|
|
search: {
|
|
|
|
|
provider: 'algolia',
|
|
|
|
|
options: {
|
|
|
|
|
appId: '8J64VVRP8K',
|
|
|
|
|
apiKey: '52f578a92b88ad6abde815aae2b0ad7c',
|
|
|
|
|
indexName: 'vitepress'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
socialLinks: [
|
|
|
|
|
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' }
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
carbonAds: { code: 'CEBDT27Y', placement: 'vuejsorg' }
|
|
|
|
|
search: {
|
|
|
|
|
provider: 'algolia',
|
|
|
|
|
options: {
|
|
|
|
|
appId: '8J64VVRP8K',
|
|
|
|
|
apiKey: '52f578a92b88ad6abde815aae2b0ad7c',
|
|
|
|
|
indexName: 'vitepress'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
locales: {
|
|
|
|
|
root: { label: 'English' },
|
|
|
|
|
zh: { label: '简体中文' },
|
|
|
|
|
pt: { label: 'Português' },
|
|
|
|
|
ru: { label: 'Русский' },
|
|
|
|
|
es: { label: 'Español' },
|
|
|
|
|
ko: { label: '한국어' },
|
|
|
|
|
fa: { label: 'فارسی' }
|
|
|
|
|
},
|
|
|
|
|
carbonAds: { code: 'CEBDT27Y', placement: 'vuejsorg' }
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
vite: {
|
|
|
|
|
plugins: [
|
|
|
|
|
groupIconVitePlugin({
|
|
|
|
|
customIcon: {
|
|
|
|
|
vitepress: localIconLoader(
|
|
|
|
|
import.meta.url,
|
|
|
|
|
'../public/vitepress-logo-mini.svg'
|
|
|
|
|
),
|
|
|
|
|
firebase: 'logos:firebase'
|
|
|
|
|
}
|
|
|
|
|
}),
|
|
|
|
|
prod &&
|
|
|
|
|
llmstxt({
|
|
|
|
|
workDir: 'en',
|
|
|
|
|
ignoreFiles: ['index.md']
|
|
|
|
|
})
|
|
|
|
|
],
|
|
|
|
|
experimental: {
|
|
|
|
|
enableNativePlugin: ctx.command === 'build'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
locales: {
|
|
|
|
|
root: { label: 'English' },
|
|
|
|
|
zh: { label: '简体中文' },
|
|
|
|
|
pt: { label: 'Português' },
|
|
|
|
|
ru: { label: 'Русский' },
|
|
|
|
|
es: { label: 'Español' },
|
|
|
|
|
ko: { label: '한국어' },
|
|
|
|
|
fa: { label: 'فارسی' }
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
transformPageData: prod
|
|
|
|
|
? (pageData, ctx) => {
|
|
|
|
|
const site = resolveSiteDataByRoute(
|
|
|
|
|
ctx.siteConfig.site,
|
|
|
|
|
pageData.relativePath
|
|
|
|
|
)
|
|
|
|
|
const title = `${pageData.title || site.title} | ${pageData.description || site.description}`
|
|
|
|
|
;((pageData.frontmatter.head ??= []) as HeadConfig[]).push(
|
|
|
|
|
['meta', { property: 'og:locale', content: site.lang }],
|
|
|
|
|
['meta', { property: 'og:title', content: title }]
|
|
|
|
|
)
|
|
|
|
|
vite: {
|
|
|
|
|
plugins: [
|
|
|
|
|
groupIconVitePlugin({
|
|
|
|
|
customIcon: {
|
|
|
|
|
vitepress: localIconLoader(
|
|
|
|
|
import.meta.url,
|
|
|
|
|
'../public/vitepress-logo-mini.svg'
|
|
|
|
|
),
|
|
|
|
|
firebase: 'logos:firebase'
|
|
|
|
|
}
|
|
|
|
|
: undefined
|
|
|
|
|
})
|
|
|
|
|
}),
|
|
|
|
|
prod &&
|
|
|
|
|
llmstxt({
|
|
|
|
|
workDir: 'en',
|
|
|
|
|
ignoreFiles: ['index.md']
|
|
|
|
|
})
|
|
|
|
|
],
|
|
|
|
|
experimental: {
|
|
|
|
|
enableNativePlugin: true
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
transformPageData: prod
|
|
|
|
|
? (pageData, ctx) => {
|
|
|
|
|
const site = resolveSiteDataByRoute(
|
|
|
|
|
ctx.siteConfig.site,
|
|
|
|
|
pageData.relativePath
|
|
|
|
|
)
|
|
|
|
|
const title = `${pageData.title || site.title} | ${pageData.description || site.description}`
|
|
|
|
|
;((pageData.frontmatter.head ??= []) as HeadConfig[]).push(
|
|
|
|
|
['meta', { property: 'og:locale', content: site.lang }],
|
|
|
|
|
['meta', { property: 'og:title', content: title }]
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
: undefined
|
|
|
|
|
})
|
|
|
|
|