2026-04-01 12:54:45 +08:00

332 lines
13 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { defineConfig } from 'vitepress'
function safeGenericEscapePlugin() {
return {
name: 'safe-generic-escape',
enforce: 'pre',
transform(code: string, id: string) {
if (!id.endsWith('.md')) return
const codeBlocks: string[] = []
const htmlBlocks: string[] = []
// 1⃣ 保护代码块 ``` ```
let processed = code.replace(/```[\s\S]*?```/g, (match) => {
const i = codeBlocks.length
codeBlocks.push(match)
return `__CODE_BLOCK_${i}__`
})
// 2⃣ 保护 HTML 标签(避免破坏 Vue SFC
processed = processed.replace(/<\/?[a-zA-Z][^>]*>/g, (match) => {
const i = htmlBlocks.length
htmlBlocks.push(match)
return `__HTML_BLOCK_${i}__`
})
// 3⃣ 只转义"泛型形式"的 <T> 或 <K, V>
processed = processed.replace(
/<([A-Z][A-Za-z0-9_,\s]*)>/g,
(_, inner) => `&lt;${inner}&gt;`
)
// 4⃣ 恢复 HTML
htmlBlocks.forEach((block, i) => {
processed = processed.replace(`__HTML_BLOCK_${i}__`, block)
})
// 5⃣ 恢复代码块
codeBlocks.forEach((block, i) => {
processed = processed.replace(`__CODE_BLOCK_${i}__`, block)
})
return processed
}
}
}
export default defineConfig({
title: 'GFramework',
description: '面向游戏开发场景的模块化 C# 框架',
head: [
['link', { rel: 'icon', type: 'image/png', href: '/GFramework/favicon.png' }],
],
/** GitHub Pages / 子路径部署 */
base: '/GFramework/',
vite: {
plugins: [safeGenericEscapePlugin()],
build: {
// 提高代码块大小警告阈值(文档包含大量代码示例)
chunkSizeWarningLimit: 1000
}
},
/** 多语言 */
locales: {
root: {
label: '简体中文',
lang: 'zh-CN',
link: '/zh-CN/',
themeConfig: {
logo: '/logo-icon.png',
search: {
provider: 'local',
options: {
translations: {
button: {
buttonText: '搜索文档',
buttonAriaLabel: '搜索文档'
},
modal: {
noResultsText: '无法找到相关结果',
resetButtonTitle: '清除查询条件',
footer: {
selectText: '选择',
navigateText: '切换',
closeText: '关闭'
}
}
}
}
},
nav: [
{ text: '首页', link: '/zh-CN/' },
{ text: '入门指南', link: '/zh-CN/getting-started' },
{ text: 'Core', link: '/zh-CN/core/' },
{ text: 'ECS', link: '/zh-CN/ecs/' },
{ text: 'Game', link: '/zh-CN/game/' },
{ text: 'Godot', link: '/zh-CN/godot/' },
{ text: '源码生成器', link: '/zh-CN/source-generators' },
{ text: '教程', link: '/zh-CN/tutorials/' },
{ text: '最佳实践', link: '/zh-CN/best-practices/' },
{
text: '更多',
items: [
{ text: 'API 参考', link: '/zh-CN/api-reference' },
{ text: '常见问题', link: '/zh-CN/faq' },
{ text: '故障排查', link: '/zh-CN/troubleshooting' },
{ text: '贡献指南', link: '/zh-CN/contributing' },
{ text: '开发环境', link: '/zh-CN/contributor/development-environment' }
]
}
],
sidebar: {
'/zh-CN/getting-started/': [
{
text: '入门指南',
items: [
{ text: '架构概览', link: '/zh-CN/getting-started' },
{ text: '安装配置', link: '/zh-CN/getting-started/installation' },
{ text: '快速开始', link: '/zh-CN/getting-started/quick-start' },
]
}
],
'/zh-CN/core/': [
{
text: 'Core 核心框架',
items: [
{ text: '概览', link: '/zh-CN/core/' },
{ text: '架构组件', link: '/zh-CN/core/architecture' },
{ text: 'Context 上下文', link: '/zh-CN/core/context' },
{ text: '异步初始化', link: '/zh-CN/core/async-initialization' },
{ text: '生命周期', link: '/zh-CN/core/lifecycle' },
{ text: '命令系统', link: '/zh-CN/core/command' },
{ text: '查询系统', link: '/zh-CN/core/query' },
{ text: 'CQRS ', link: '/zh-CN/core/cqrs' },
{ text: '', link: '/zh-CN/core/events' },
{ text: '', link: '/zh-CN/core/property' },
{ text: '', link: '/zh-CN/core/state-management' },
{ text: 'IoC容器', link: '/zh-CN/core/ioc' },
{ text: '', link: '/zh-CN/core/coroutine' },
{ text: '', link: '/zh-CN/core/state-machine' },
{ text: '', link: '/zh-CN/core/pause' },
{ text: '', link: '/zh-CN/core/pool' },
{ text: '', link: '/zh-CN/core/resource' },
{ text: '', link: '/zh-CN/core/configuration' },
{ text: '', link: '/zh-CN/core/logging' },
{ text: '', link: '/zh-CN/core/functional' },
{ text: '', link: '/zh-CN/core/extensions' },
{ text: '', link: '/zh-CN/core/utility' },
{ text: '', link: '/zh-CN/core/model' },
{ text: '', link: '/zh-CN/core/system' },
{ text: '', link: '/zh-CN/core/rule' },
{ text: '', link: '/zh-CN/core/environment' },
{ text: '', link: '/zh-CN/core/localization' }
]
}
],
'/zh-CN/contributing': [
{
text: '',
items: [
{ text: '', link: '/zh-CN/contributing' },
{ text: '', link: '/zh-CN/contributor/development-environment' }
]
}
],
'/zh-CN/contributor/': [
{
text: '',
items: [
{ text: '', link: '/zh-CN/contributing' },
{ text: '', link: '/zh-CN/contributor/development-environment' }
]
}
],
'/zh-CN/ecs/': [
{
text: 'ECS ',
items: [
{ text: 'ECS ', link: '/zh-CN/ecs/' },
{ text: 'Arch ECS ', link: '/zh-CN/ecs/arch' }
]
}
],
'/zh-CN/game/': [
{
text: 'Game ',
items: [
{ text: '', link: '/zh-CN/game/' },
{ text: '', link: '/zh-CN/game/config-system' },
{ text: '', link: '/zh-CN/game/data' },
{ text: '', link: '/zh-CN/game/scene' },
{ text: 'UI ', link: '/zh-CN/game/ui' },
{ text: '', link: '/zh-CN/game/storage' },
{ text: '', link: '/zh-CN/game/serialization' },
{ text: '', link: '/zh-CN/game/setting' }
]
}
],
'/zh-CN/godot/': [
{
text: 'Godot ',
items: [
{ text: '', link: '/zh-CN/godot/' },
{ text: '', link: '/zh-CN/godot/architecture' },
{ text: '', link: '/zh-CN/godot/scene' },
{ text: 'UI ', link: '/zh-CN/godot/ui' },
{ text: '', link: '/zh-CN/godot/resource' },
{ text: '', link: '/zh-CN/godot/coroutine' },
{ text: '', link: '/zh-CN/godot/extensions' },
{ text: '', link: '/zh-CN/godot/signal' },
{ text: '', link: '/zh-CN/godot/storage' },
{ text: '', link: '/zh-CN/godot/pause' },
{ text: '', link: '/zh-CN/godot/pool' },
{ text: '', link: '/zh-CN/godot/logging' },
{ text: '', link: '/zh-CN/godot/setting' }
]
}
],
'/zh-CN/source-generators/': [
{
text: '',
items: [
{ text: '', link: '/zh-CN/source-generators/' },
{ text: '', link: '/zh-CN/source-generators/logging-generator' },
{ text: '', link: '/zh-CN/source-generators/enum-generator' },
{ text: 'ContextAware ', link: '/zh-CN/source-generators/context-aware-generator' },
{ text: 'Priority ', link: '/zh-CN/source-generators/priority-generator' },
{ text: 'Context Get ', link: '/zh-CN/source-generators/context-get-generator' },
{ text: 'GetNode (Godot)', link: '/zh-CN/source-generators/get-node-generator' },
{ text: 'BindNodeSignal (Godot)', link: '/zh-CN/source-generators/bind-node-signal-generator' }
]
}
],
'/zh-CN/abstractions/': [
{
text: '',
items: [
{ text: 'Core Abstractions', link: '/zh-CN/abstractions/core-abstractions' },
{ text: 'Game Abstractions', link: '/zh-CN/abstractions/game-abstractions' }
]
}
],
'/zh-CN/tutorials/': [
{
text: '',
items: [
{ text: '', link: '/zh-CN/tutorials/' },
{
text: '',
link: '/zh-CN/tutorials/basic/',
collapsed: false,
items: [
{ text: '', link: '/zh-CN/tutorials/basic/' },
{ text: '1. ', link: '/zh-CN/tutorials/basic/01-environment' },
{ text: '2. ', link: '/zh-CN/tutorials/basic/02-project-setup' },
{ text: '3. ', link: '/zh-CN/tutorials/basic/03-counter-basic' },
{ text: '4. Model ', link: '/zh-CN/tutorials/basic/04-model-refactor' },
{ text: '5. ', link: '/zh-CN/tutorials/basic/05-command-system' },
{ text: '6. Utility System', link: '/zh-CN/tutorials/basic/06-utility-system' },
{ text: '7. ', link: '/zh-CN/tutorials/basic/07-summary' }
]
},
{ text: '使', link: '/zh-CN/tutorials/coroutine-tutorial' },
{ text: '', link: '/zh-CN/tutorials/state-machine-tutorial' },
{ text: '', link: '/zh-CN/tutorials/pause-system' },
{ text: '', link: '/zh-CN/tutorials/functional-programming' },
{ text: '', link: '/zh-CN/tutorials/resource-management' },
{ text: '', link: '/zh-CN/tutorials/save-system' },
{ text: '', link: '/zh-CN/tutorials/data-migration' },
{ text: 'Godot ', link: '/zh-CN/tutorials/godot-integration' },
{ text: 'Godot ', link: '/zh-CN/tutorials/godot-complete-project' },
{ text: '', link: '/zh-CN/tutorials/advanced-patterns' },
{ text: '', link: '/zh-CN/tutorials/large-project-organization' },
{ text: '', link: '/zh-CN/tutorials/unit-testing' }
]
}
],
'/zh-CN/best-practices/': [
{
text: '',
items: [
{ text: '', link: '/zh-CN/best-practices/' },
{ text: '', link: '/zh-CN/best-practices/architecture-patterns' },
{ text: '', link: '/zh-CN/best-practices/error-handling' },
{ text: '', link: '/zh-CN/best-practices/performance' },
{ text: '', link: '/zh-CN/best-practices/mobile-optimization' },
{ text: '', link: '/zh-CN/best-practices/multiplayer' }
]
}
],
},
socialLinks: [
{ icon: 'github', link: 'https://github.com/GeWuYou/GFramework' }
],
footer: {
message: '基于 Apache 2.0 许可证发布',
copyright: 'Copyright © 2026 GeWuYou'
},
outlineTitle: '页面导航',
lastUpdatedText: '最后更新于',
darkModeSwitchLabel: '主题',
sidebarMenuLabel: '菜单',
returnToTopLabel: '回到顶部',
docFooter: {
prev: '上一页',
next: '下一页'
}
}
}
}
})