2026-01-29 16:00:19 +03:00
import { defineConfig } from 'vitepress' ;
2026-04-26 15:04:10 +03:00
const sidebar = [
2026-04-25 19:56:44 +03:00
{
text : 'Главная' ,
2026-04-26 15:04:10 +03:00
link : '/docs/' ,
2026-04-25 19:56:44 +03:00
} ,
2026-03-28 21:15:15 +03:00
{
2026-04-28 10:52:09 +03:00
text : 'Подсказки' ,
2026-04-26 15:04:10 +03:00
link : '/docs/workflow' ,
2026-03-28 21:15:15 +03:00
} ,
{
text : 'Базовые правила' ,
items : [
2026-04-26 15:04:10 +03:00
{ text : 'Технологии и библиотеки' , link : '/docs/basics/tech-stack' } ,
{ text : 'Именование' , link : '/docs/basics/naming' } ,
2026-04-20 11:40:49 +03:00
{
text : 'Архитектура' ,
2026-04-20 11:44:27 +03:00
collapsed : true ,
2026-04-20 11:40:49 +03:00
items : [
2026-04-26 15:04:10 +03:00
{ text : 'Обзор' , link : '/docs/basics/architecture/' } ,
2026-05-03 04:22:26 +03:00
{ text : 'Слои' , link : '/docs/basics/architecture/layers' } ,
{ text : 'Модули' , link : '/docs/basics/architecture/modules' } ,
{ text : 'Сегменты' , link : '/docs/basics/architecture/segments' } ,
2026-04-20 11:40:49 +03:00
] ,
} ,
2026-04-26 15:04:10 +03:00
{ text : 'Стиль кода' , link : '/docs/basics/code-style' } ,
{ text : 'Документирование' , link : '/docs/basics/documentation' } ,
{ text : 'Типизация' , link : '/docs/basics/typing' } ,
2026-03-28 21:15:15 +03:00
] ,
} ,
{
2026-04-28 10:52:09 +03:00
text : 'Создание проекта' ,
items : [
{ text : 'Из шаблона' , link : '/docs/creating-project/from-template' } ,
{ text : 'По гайду вручную' , link : '/docs/creating-project/manual' } ,
{ text : 'Чистый Next.js' , link : '/docs/creating-project/nextjs' } ,
] ,
} ,
{
2026-04-29 11:25:58 +03:00
text : 'Работа с данными' ,
// collapsed: true,
2026-03-28 21:15:15 +03:00
items : [
2026-04-29 11:25:58 +03:00
{ text : 'Введение' , link : '/docs/data/' } ,
2026-04-28 10:52:09 +03:00
{
text : 'REST' ,
collapsed : true ,
items : [
docs: переработать раздел REST-клиента и стратегий получения данных
- Добавлен обзор REST с разделением на «Создание клиента» и «Использование»
- Добавлена страница создания клиента с описанием структуры модуля
- Переписана автогенерация: npx без --swr, расширения типов вынесены в types/
- Ручной клиент сокращён до шаблона по файлам
- Добавлены GET-хуки REST-клиента с контрактом useGet..., key-функциями и isReady
- Добавлена страница выбора стратегий с приоритетом ISR перед SSR
- Добавлены стратегии: серверный await, параллельные запросы, передача промиса,
начальные данные для клиентских хуков, клиентский GET-хук, business-композиция
- Уточнено влияние серверного await и SWR fallback на режим рендера
- Удалены устаревшие страницы fetching/server.md и fetching/client.md
- Обновлён generate-llms.ts: очистка stale-файлов перед копированием
- Обновлены сайдбар, MAP.md, data/index.md, page-level.md
2026-04-30 16:01:18 +03:00
{ text : 'Обзор' , link : '/docs/data/rest/' } ,
2026-04-28 10:52:09 +03:00
{
docs: переработать раздел REST-клиента и стратегий получения данных
- Добавлен обзор REST с разделением на «Создание клиента» и «Использование»
- Добавлена страница создания клиента с описанием структуры модуля
- Переписана автогенерация: npx без --swr, расширения типов вынесены в types/
- Ручной клиент сокращён до шаблона по файлам
- Добавлены GET-хуки REST-клиента с контрактом useGet..., key-функциями и isReady
- Добавлена страница выбора стратегий с приоритетом ISR перед SSR
- Добавлены стратегии: серверный await, параллельные запросы, передача промиса,
начальные данные для клиентских хуков, клиентский GET-хук, business-композиция
- Уточнено влияние серверного await и SWR fallback на режим рендера
- Удалены устаревшие страницы fetching/server.md и fetching/client.md
- Обновлён generate-llms.ts: очистка stale-файлов перед копированием
- Обновлены сайдбар, MAP.md, data/index.md, page-level.md
2026-04-30 16:01:18 +03:00
text : 'Создание клиента' ,
2026-04-28 10:52:09 +03:00
collapsed : true ,
items : [
docs: переработать раздел REST-клиента и стратегий получения данных
- Добавлен обзор REST с разделением на «Создание клиента» и «Использование»
- Добавлена страница создания клиента с описанием структуры модуля
- Переписана автогенерация: npx без --swr, расширения типов вынесены в types/
- Ручной клиент сокращён до шаблона по файлам
- Добавлены GET-хуки REST-клиента с контрактом useGet..., key-функциями и isReady
- Добавлена страница выбора стратегий с приоритетом ISR перед SSR
- Добавлены стратегии: серверный await, параллельные запросы, передача промиса,
начальные данные для клиентских хуков, клиентский GET-хук, business-композиция
- Уточнено влияние серверного await и SWR fallback на режим рендера
- Удалены устаревшие страницы fetching/server.md и fetching/client.md
- Обновлён generate-llms.ts: очистка stale-файлов перед копированием
- Обновлены сайдбар, MAP.md, data/index.md, page-level.md
2026-04-30 16:01:18 +03:00
{ text : 'Обзор' , link : '/docs/data/rest/clients/' } ,
{ text : 'Автогенерация из OpenAPI' , link : '/docs/data/rest/clients/auto' } ,
2026-04-29 11:25:58 +03:00
{ text : 'Ручное создание' , link : '/docs/data/rest/clients/manual' } ,
docs: переработать раздел REST-клиента и стратегий получения данных
- Добавлен обзор REST с разделением на «Создание клиента» и «Использование»
- Добавлена страница создания клиента с описанием структуры модуля
- Переписана автогенерация: npx без --swr, расширения типов вынесены в types/
- Ручной клиент сокращён до шаблона по файлам
- Добавлены GET-хуки REST-клиента с контрактом useGet..., key-функциями и isReady
- Добавлена страница выбора стратегий с приоритетом ISR перед SSR
- Добавлены стратегии: серверный await, параллельные запросы, передача промиса,
начальные данные для клиентских хуков, клиентский GET-хук, business-композиция
- Уточнено влияние серверного await и SWR fallback на режим рендера
- Удалены устаревшие страницы fetching/server.md и fetching/client.md
- Обновлён generate-llms.ts: очистка stale-файлов перед копированием
- Обновлены сайдбар, MAP.md, data/index.md, page-level.md
2026-04-30 16:01:18 +03:00
{ text : 'GET-хуки REST-клиента' , link : '/docs/data/rest/clients/hooks' } ,
2026-04-28 10:52:09 +03:00
] ,
} ,
{
2026-04-29 11:25:58 +03:00
text : 'Использование' ,
2026-04-28 10:52:09 +03:00
collapsed : true ,
items : [
docs: переработать раздел REST-клиента и стратегий получения данных
- Добавлен обзор REST с разделением на «Создание клиента» и «Использование»
- Добавлена страница создания клиента с описанием структуры модуля
- Переписана автогенерация: npx без --swr, расширения типов вынесены в types/
- Ручной клиент сокращён до шаблона по файлам
- Добавлены GET-хуки REST-клиента с контрактом useGet..., key-функциями и isReady
- Добавлена страница выбора стратегий с приоритетом ISR перед SSR
- Добавлены стратегии: серверный await, параллельные запросы, передача промиса,
начальные данные для клиентских хуков, клиентский GET-хук, business-композиция
- Уточнено влияние серверного await и SWR fallback на режим рендера
- Удалены устаревшие страницы fetching/server.md и fetching/client.md
- Обновлён generate-llms.ts: очистка stale-файлов перед копированием
- Обновлены сайдбар, MAP.md, data/index.md, page-level.md
2026-04-30 16:01:18 +03:00
{ text : 'Стратегии получения данных' , link : '/docs/data/rest/strategies/' } ,
{ text : 'Серверный await' , link : '/docs/data/rest/strategies/server-await' } ,
{ text : 'Параллельные серверные запросы' , link : '/docs/data/rest/strategies/parallel-server-requests' } ,
{ text : 'Передача промиса ниже' , link : '/docs/data/rest/strategies/pass-promise-down' } ,
{ text : 'Начальные данные для клиентских хуков' , link : '/docs/data/rest/strategies/client-hooks-initial-data' } ,
{ text : 'Клиентский GET-хук' , link : '/docs/data/rest/strategies/client-get-hook' } ,
{ text : 'Business-композиция' , link : '/docs/data/rest/strategies/business-composition' } ,
2026-04-28 10:52:09 +03:00
] ,
} ,
] ,
} ,
2026-04-29 11:25:58 +03:00
{ text : 'Realtime' , link : '/docs/data/realtime' } ,
] ,
} ,
{
text : 'Прикладные разделы' ,
items : [
2026-04-29 20:52:01 +03:00
{ text : 'Структура проекта' , link : '/docs/applied/project-structure' } ,
{ text : 'Страницы' , link : '/docs/applied/page-level' } ,
{ text : 'Компонент' , link : '/docs/applied/component' } ,
{ text : 'Модуль' , link : '/docs/applied/module' } ,
2026-04-29 11:25:58 +03:00
{
text : 'Стили' ,
collapsed : true ,
items : [
{ text : 'Настройка' , link : '/docs/applied/styles/styles-setup' } ,
{ text : 'Использование' , link : '/docs/applied/styles/styles-usage' } ,
] ,
} ,
{
text : 'SVG-спрайты' ,
collapsed : true ,
items : [
2026-04-29 13:44:48 +03:00
{ text : 'Введение' , link : '/docs/applied/svg-sprites/svg-sprites-intro' } ,
2026-04-29 11:25:58 +03:00
{ text : 'Настройка' , link : '/docs/applied/svg-sprites/svg-sprites-setup' } ,
{ text : 'Использование' , link : '/docs/applied/svg-sprites/svg-sprites-usage' } ,
] ,
} ,
2026-04-29 20:52:01 +03:00
{ text : 'Изображения' , link : '/docs/applied/images' } ,
{ text : 'Шрифты' , link : '/docs/applied/fonts' } ,
{ text : 'Алиасы импортов' , link : '/docs/applied/aliases' } ,
2026-04-29 11:25:58 +03:00
{
text : 'Шаблоны генерации' ,
collapsed : true ,
items : [
{ text : 'Введение' , link : '/docs/applied/templates/templates-intro' } ,
{ text : 'Настройка' , link : '/docs/applied/templates/templates-setup' } ,
{ text : 'Создание шаблонов' , link : '/docs/applied/templates/templates-create' } ,
{ text : 'Использование' , link : '/docs/applied/templates/templates-usage' } ,
] ,
} ,
2026-04-29 20:52:01 +03:00
{ text : 'Biome' , link : '/docs/applied/biome' } ,
{ text : 'PostCSS' , link : '/docs/applied/postcss' } ,
{ text : 'VS Code' , link : '/docs/applied/vscode' } ,
{ text : 'Локализация' , link : '/docs/applied/localization' } ,
2026-04-29 11:25:58 +03:00
// Неактивные разделы: страницы существуют, но пока пустые.
// Оставляем в sidebar без `link`, чтобы видеть план, но без перехода.
2026-04-29 20:52:01 +03:00
{ text : 'Stores · в разработке' }
2026-04-28 10:52:09 +03:00
] ,
} ,
2026-03-28 21:15:15 +03:00
] ;
2026-04-25 18:06:27 +03:00
/ * *
* Vite - плагин : отдаёт ` .txt ` и ` .md ` с я в н о й к о д и р о в к о й UTF - 8 .
* Б е з э т о г о б р а у з е р д е к о д и р у е т к а к ISO - 8859 - 1 и к и р и л л и ц а л о м а е т с я .
* /
const utf8TextPlugin = {
name : 'utf8-text-files' ,
configureServer ( server : any ) {
server . middlewares . use ( ( req : any , res : any , next : any ) = > {
const url : string = req . url || '' ;
if ( url . endsWith ( '.txt' ) || url . endsWith ( '.md' ) ) {
res . setHeader ( 'Content-Type' , 'text/plain; charset=utf-8' ) ;
}
next ( ) ;
} ) ;
} ,
} ;
2026-03-28 21:15:15 +03:00
export default defineConfig ( {
srcDir : 'docs' ,
2026-04-25 18:06:27 +03:00
// `docs/public/` содержит сгенерированные `.md`-копии и `llms.txt` для LLM
// (попадают в корень `dist/` как статика). Исключаем из сканирования
// страниц, иначе VitePress рендерит их как HTML-страницы.
2026-04-28 20:28:01 +03:00
//
// `DEVELOP.md` и `MAP.md` — файлы архива (точка входа и карта).
// Содержат относительные ссылки, на сайте им делать нечего —
// эту роль выполняют сайдбар и `llms.txt`.
srcExclude : [ 'public/**' , '**/DEVELOP.md' , '**/MAP.md' ] ,
2026-04-26 15:04:10 +03:00
lang : 'ru-RU' ,
2026-03-28 21:15:15 +03:00
title : 'NextJS Style Guide' ,
2026-04-26 15:04:10 +03:00
description : 'Стандарты разработки на Next.js + TypeScript с архитектурой SLM' ,
2026-03-28 21:15:15 +03:00
2026-04-27 10:12:30 +03:00
// Чистые URL без `.html` — канон для индексации.
// Серверная поддержка реализована в Caddyfile (try_files + редирект).
cleanUrls : true ,
2026-04-27 09:37:23 +03:00
// Дублируем указатель на llms.txt в <head> — для агентов,
// которые читают HTML, но не парсят полный DOM/href.
head : [
[ 'link' , { rel : 'alternate' , type : 'text/plain' , href : '/llms.txt' , title : 'llms.txt' } ] ,
[ 'link' , { rel : 'alternate' , type : 'text/plain' , href : '/llms-full.txt' , title : 'llms-full.txt' } ] ,
] ,
2026-04-25 18:06:27 +03:00
vite : {
plugins : [ utf8TextPlugin ] ,
define : {
__BUILD_VERSION__ : JSON.stringify ( process . env . BUILD_VERSION || 'dev' ) ,
} ,
2026-03-28 21:15:15 +03:00
} ,
2026-04-26 15:04:10 +03:00
themeConfig : {
sidebar ,
socialLinks : [
{ icon : 'github' , link : 'https://gromlab.ru/docs/nextjs-style-guide' } ,
] ,
2026-01-29 16:00:19 +03:00
} ,
2026-04-26 15:04:10 +03:00
// Расширенный блок описания для llms.txt — даёт LLM полный
// технический контекст: стек, методология, охват тем.
// Используется в generate-llms.ts.
llmsBlockquote :
'Стандарты разработки frontend-приложений на Next.js (App Router) + TypeScript + React с архитектурой SLM (Scoped Layered Module Design — модульная архитектура с о слоями ответственности, где каждый модуль содержит всё необходимое: компоненты, хуки, сторы, типы, стили).' ,
llmsContext :
'Стек: React, TypeScript, Next.js App Router, Mantine UI, SWR, Zustand, i18next, PostCSS Modules, Vitest, clsx.\n\nДо ку ме нта ция покрывает архитектуру SLM (слои, модули, сегменты, направление зависимостей, публичный API), правила оформления кода (именование, форматирование, импорты, типизация, JSDoc), реализацию компонентов и хуков, работу с App Router, кодогенерацию из шаблонов, стилизацию (Mobile First, токены), работу с API и сокетами, управление состоянием через Zustand, локализацию, ассеты (шрифты, изображения, SVG-спрайты) и настройку VS Code.' ,
} as any ) ;