Files
slm-design/site/.vitepress/config.mts

164 lines
5.9 KiB
TypeScript
Raw Normal View History

2026-07-25 17:56:16 +03:00
import { fileURLToPath } from 'node:url'
import { defineConfig } from 'vitepress'
2026-07-25 17:56:16 +03:00
const repositoryUrl = 'https://github.com/gromlab-ru/slm-design'
const viteConfigPath = fileURLToPath(new URL('../vite.config.mts', import.meta.url))
function slugifyHeading(value: string) {
const slug = value
.replace(/<[^>]+>/g, '')
.replace(/`/g, '')
.trim()
.toLowerCase()
.replace(/\s+/g, '-')
.replace(/[^\p{L}\p{N}_-]/gu, '')
.replace(/-+/g, '-')
2026-07-30 10:56:48 +03:00
return ['app', 'compositions', 'domains', 'infra', 'ui', 'shared'].includes(slug)
? `layer-${slug}`
: slug
}
2026-07-30 10:56:48 +03:00
const documentationSidebar = [
2026-07-25 17:56:16 +03:00
{
text: 'SLM Level 1',
2026-07-25 17:56:16 +03:00
items: [
{ text: 'Обзор', link: '/level-1/' },
{ text: 'Терминология', link: '/level-1/terminology' },
{ text: 'Слои', link: '/level-1/layers' },
{ text: 'Доменные модули', link: '/level-1/domains' },
{ text: 'Зависимости', link: '/level-1/dependencies' },
{ text: 'Модули', link: '/level-1/modules' },
{ text: 'Группы', link: '/level-1/groups' },
{ text: 'Сегменты', link: '/level-1/segments' },
{ text: 'Компоненты', link: '/level-1/components' },
{ text: 'Вложенные модули', link: '/level-1/nested-modules' },
{ text: 'Жизненный цикл', link: '/level-1/lifecycle' },
{ text: 'Проверка', link: '/level-1/validation' },
2026-07-25 17:56:16 +03:00
],
},
2026-07-30 10:56:48 +03:00
{
text: 'SLM Level 2',
items: [
{ text: 'Обзор', link: '/level-2/' },
{ text: 'Терминология', link: '/level-2/terminology' },
{ text: 'Доменные пакеты', link: '/level-2/domains/' },
{ text: 'Граница пакета', link: '/level-2/domains/domain-package' },
{ text: 'Business module', link: '/level-2/domains/business' },
{ text: 'Factory и adapters', link: '/level-2/domains/factory-ports-adapters' },
{ text: 'Presets и среды', link: '/level-2/domains/presets' },
{ text: 'Framework Groups', link: '/level-2/domains/framework-bindings' },
2026-07-30 10:56:48 +03:00
{ text: 'Зависимости', link: '/level-2/dependencies' },
{ text: 'Тестирование', link: '/level-2/domains/testing' },
2026-07-30 10:56:48 +03:00
{ text: 'Проверка', link: '/level-2/validation' },
{ text: 'Миграция auth', link: '/level-2/domains/auth-example' },
{ text: 'Открытые вопросы', link: '/level-2/domains/open-questions' },
2026-07-30 13:22:45 +03:00
],
},
2026-07-25 17:56:16 +03:00
{
text: 'Правила',
2026-07-25 17:56:16 +03:00
items: [
{ text: 'Как устроены правила', link: '/rules/' },
{ text: 'Реестр Level 1', link: '/rules/level-1' },
2026-07-30 10:56:48 +03:00
{ text: 'Реестр Level 2', link: '/rules/level-2' },
2026-07-25 17:56:16 +03:00
],
},
]
2026-07-25 17:56:16 +03:00
export default defineConfig({
srcDir: '../DRAFT',
2026-07-30 13:22:45 +03:00
srcExclude: ['README.md'],
rewrites: {
'level-1/README.md': 'level-1/index.md',
2026-07-30 10:56:48 +03:00
'level-2/README.md': 'level-2/index.md',
'level-2/domains/README.md': 'level-2/domains/index.md',
'rules/README.md': 'rules/index.md',
},
2026-07-25 17:56:16 +03:00
title: 'SLM Design',
2026-07-30 10:56:48 +03:00
description: 'Последовательная архитектура фронтенд-приложений SLM',
lang: 'ru-RU',
2026-07-25 17:56:16 +03:00
base: '/slm-design/',
cleanUrls: true,
lastUpdated: true,
sitemap: {
hostname: 'https://gromlab-ru.github.io/slm-design/',
},
head: [
['link', { rel: 'icon', type: 'image/svg+xml', href: '/slm-design/logo.svg' }],
['meta', { name: 'theme-color', content: '#d97706' }],
],
markdown: {
anchor: {
slugify: slugifyHeading,
},
2026-07-25 17:56:16 +03:00
},
vite: {
configFile: viteConfigPath,
},
themeConfig: {
logo: '/logo.svg',
siteTitle: 'SLM Design',
nav: [
{ text: 'Level 1', link: '/level-1/' },
2026-07-30 10:56:48 +03:00
{ text: 'Level 2', link: '/level-2/' },
{ text: 'Правила', link: '/rules/' },
2026-07-25 17:56:16 +03:00
],
2026-07-30 10:56:48 +03:00
sidebar: documentationSidebar,
2026-07-25 17:56:16 +03:00
socialLinks: [{ icon: 'github', link: repositoryUrl }],
search: {
provider: 'local',
options: {
detailedView: false,
disableQueryPersistence: true,
translations: {
button: {
buttonText: 'Поиск по документации',
buttonAriaLabel: 'Поиск по документации или коду правила',
},
modal: {
displayDetails: 'Показать подробности',
resetButtonTitle: 'Сбросить поиск',
backButtonTitle: 'Закрыть поиск',
noResultsText: 'Ничего не найдено',
footer: {
selectText: 'выбрать',
navigateText: 'перейти',
closeText: 'закрыть',
2026-07-25 17:56:16 +03:00
},
},
},
},
},
outline: { level: [2, 3], label: 'На этой странице' },
notFound: {
code: '404',
title: 'Страница не найдена',
2026-07-30 10:56:48 +03:00
quote: 'Запрошенная страница отсутствует в опубликованной документации SLM.',
linkLabel: 'Перейти на главную',
linkText: 'Вернуться к документации',
2026-07-25 17:56:16 +03:00
},
editLink: {
pattern: `${repositoryUrl}/edit/master/DRAFT/:path`,
text: 'Предложить изменение',
},
lastUpdated: {
text: 'Обновлено',
formatOptions: { dateStyle: 'medium' },
},
docFooter: {
prev: 'Предыдущая страница',
next: 'Следующая страница',
},
darkModeSwitchLabel: 'Оформление',
lightModeSwitchTitle: 'Светлая тема',
darkModeSwitchTitle: 'Тёмная тема',
sidebarMenuLabel: 'Содержание',
returnToTopLabel: 'Наверх',
skipToContentLabel: 'Перейти к содержанию',
footer: {
message: 'SLM Levels 1-2',
copyright: 'Рабочий черновик архитектуры.',
2026-07-25 17:56:16 +03:00
},
},
})