This commit is contained in:
sokol
2026-02-18 11:38:25 +03:00
commit 83a5bb87c1
40 changed files with 5803 additions and 0 deletions

131
DOCS.md Normal file
View File

@@ -0,0 +1,131 @@
# Configucci — Документация проекта
## 📋 Обзор
**Configucci** — это веб-приложение на React для управления конфигурационными файлами в формате XML. Приложение позволяет загружать, редактировать и визуализировать конфигурации с поддержкой множественных окружений (environments) и шаблонизации параметров.
---
## 🛠 Технологический стек
| Категория | Технология |
|-----------|------------|
| **Фреймворк** | React 19.2.0 |
| **Язык** | TypeScript 5.9 |
| **Сборка** | Vite 7.2.4 |
| **UI-библиотека** | Bootstrap 5.3.3 |
| **Тестирование** | Vitest 4.0.16 + jsdom |
| **Линтинг** | ESLint 9.17.0 |
| **Подсветка кода** | react-highlight + highlight.js |
---
## 📁 Структура проекта
```
configucci/
├── src/
│ ├── models/ # Модели данных
│ │ ├── Config.tsx # Config, ConfigTemplate
│ │ ├── ConfigReader.tsx # Парсер XML
│ │ ├── Env.ts # Env, AppEvent, AddEvent, DelEvent, UpdateEvent
│ │ ├── EnvParam.ts # EnvParam
│ │ └── NamedId.ts # Интерфейс NamedId
│ ├── componets/ # React-компоненты (орфография оригинала)
│ │ ├── env/
│ │ │ ├── Environment.tsx # Список окружений
│ │ │ └── EnvironmentParam.tsx # Параметр окружения
│ │ ├── content/
│ │ │ └── Content.tsx # Вкладки с контентом
│ │ └── FileChooser.tsx # Загрузка файлов
│ ├── builders/ # Построители XML
│ │ ├── EnvBuilder.ts
│ │ └── index.ts
│ ├── assets/ # Статические ресурсы
│ │ └── cgg.png
│ ├── test/ # Тесты
│ │ └── ConfigReader.test.ts
│ ├── App.tsx # Главный компонент
│ ├── App.css # Стили приложения
│ ├── main.tsx # Точка входа
│ └── index.css # Глобальные стили
├── docs/
│ └── config.json.xml # Пример конфигурации
├── public/ # Публичные ресурсы
├── index.html
├── package.json
├── tsconfig.json
├── vite.config.ts
└── vitest.config.ts
```
---
## 📦 Модели данных
### `Config`
Основной класс конфигурации:
- `envs: Env[]` — массив окружений
- `template: ConfigTemplate` — шаблон конфигурации
- Методы: `addEnvs()`, `addTemplate()`, `getTemplateAsJson()`, `validateParams()`
### `ConfigTemplate`
Шаблон с параметрами в формате `@paramName@`:
- Извлекает параметры из текста через regex `/@(\w+)@/g`
- Свойства: `content` (исходный текст), `Params` (массив имён параметров)
### `Env`
Окружение с параметрами:
- `id: number`, `name: string`, `params: EnvParam[]`
- Методы: `addParams()`, `delParam()`, `updateParams()`, `isDefault()`
### `EnvParam`
Параметр окружения:
- `id: number`, `name: string`, `value: string`, `isChanged: boolean`
- Методы: `Changed()`, `sanitize()` (HTML-экранирование)
### `AppEvent<T>`
Базовый класс событий для операций CRUD:
- `AddEvent<T>` — добавление
- `UpdateEvent<T>` — обновление
- `DelEvent<T>` — удаление
---
## 🔧 Основные компоненты
### `App` (App.tsx)
Корневой компонент с управлением состоянием через `AppState`:
- Загрузка конфигурации из файла
- Редактирование окружений
- Сохранение с искусственной задержкой 1 секунда
### `FileChooser`
Компонент загрузки файлов:
- Поддерживает только XML-файлы (`text/xml`)
- Кнопка "Create new" создаёт конфигурацию с окружением DEFAULT
### `Environment`
Список окружений с возможностью:
- Выбор окружения из dropdown
- Добавление/удаление/редактирование параметров
- Визуальное отображение изменений (жёлтая рамка)
### `Content`
Вкладки для просмотра данных:
| Вкладка | Описание |
|---------|----------|
| **Env** | XML-представление текущего окружения |
| **Content Template** | JSON-шаблон с подсветкой синтаксиса |
| **Raw template** | Полный XML с окружениями и шаблоном |
| **Test-filled template** | Тестовый JavaScript-код (заглушка) |
---
## 📄 Формат конфигурационного файла
```xml
<engine>
<environment name="DEFAULT">