import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/scripts/Classes/AiDocItemAbstract - Базовый класс автоматизации документации'/>

# Класс AiDocItemAbstract

Абстрактный базовый класс для автоматизации генерации документации с использованием ИИ. Он управляет жизненным циклом чтения исходных файлов, сбора контекста (код, демо, промпты) и координации с сервисом ИИ для создания или обновления файлов MDX и исходного кода.

## Ключевые особенности

- **Автоматизированный жизненный цикл** — координирует чтение кода, выполнение сборки и генерацию обновлений документации.
- **Управление контекстом** — встроенная логика для сбора кода компонентов, исходного кода и фиктивных демо-данных для контекста ИИ.
- **Умные обновления** — автоматически сравнивает даты изменения, чтобы определить, требуется ли повторная генерация.
- **Система шаблонов** — поддерживает шаблоны промптов и динамическую замену заголовков (например, `[title]`).
- **Интеграция со сборкой** — взаимодействует с `BuildItem`, чтобы убедиться, что код собирается перед документированием.
- **Выборочная генерация** — поддержка пропуска генерации с помощью маркера `// wiki:build-none`.

## Инициализация

Поскольку `AiDocItemAbstract` является абстрактным классом, его необходимо расширить. Конкретные классы должны предоставить пути к файлам демо и шаблонам промптов.

**Параметры конструктора:**
- `path: string` — базовый путь к директории исходных файлов.
- `item: GitFileItem` — информация о конкретном документируемом файле.

```typescript
// Пример расширения и использования AiDocItemAbstract
class MyComponentDoc extends AiDocItemAbstract {
  protected pathDemo = ['path', 'to', 'demo.ts']
  protected pathPrompt = ['path', 'to', 'prompt.txt']
}

const doc = new MyComponentDoc('/source/dir', gitFileItem)
await doc.make() // Запускает цикл документирования
```

## Методы

### Жизненный цикл

- `make(): Promise<void>` — Основная точка входа. Проверяет необходимость обновления, подготавливает контекст, вызывает ИИ и записывает результаты.
- `isBuildDisabled(): boolean` — Проверяет, содержит ли исходный файл маркер `// wiki:build-none`.

## Абстрактные методы (Для реализации)

- `getPathWiki(): string[]` — Логика определения пути к целевому файлу Wiki на основе расположения исходного файла.
- `getItemDate(): Date` — Получает дату изменения файла из `GitFileItem`.
- `getTitle(): string` — Формирует стандартизированный заголовок для документации.
- `readDemo(): string` — Читает содержимое настроенного демо-файла.
- `readPrompt(): string` — Читает и подготавливает шаблон промпта, заменяя плейсхолдеры, такие как `[wikiLanguage]`.
- `makeAi(): void` — Наполняет экземпляр ИИ соответствующим контекстом (код, демо и т. д.).
- `initName(content: string): string` — Заменяет плейсхолдер `[title]` в сгенерированном контенте.

## Типы

### GitFileItem
Представляет информацию о файле, управляемом Git.
- `path: string` — относительный путь к файлу.
- `pathByOS: string` — абсолютный путь, специфичный для ОС.
- `date: string` — дата последнего изменения.
- `item: any` — зарезервировано для дополнительных метаданных.
