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

<Meta title='@dxtmisha/ru/scripts/Classes/LibraryAiPromptItem - Элемент агрегатора промптов ИИ'/>

# Класс LibraryAiPromptItem

Класс `LibraryAiPromptItem` представляет собой отдельный блок контекста модуля или пакета в цепочке генерации ИИ-промптов. Он отвечает за поиск, чтение, кэширование и форматирование специфичных ресурсов модуля (таких как описания, инструкции, типы TypeScript и списки скриншотов интерфейса) в единую структурированную секцию.

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

- **Поиск ресурсов контекста** — автоматически проверяет наличие описаний, метаданных, типов и скриншотов в целевом подкаталоге модуля.
- **Парсинг манифеста пакета** — считывает и парсит `package.json` модуля для получения его официального названия.
- **Структурированная сборка данных** — объединяет найденные файлы в один аккуратный блок markdown с указанием расположения, назначения, типов и визуальных ресурсов.
- **Стандартизация путей** — переводит относительные ссылки в текстовых инструкциях в абсолютные пути относительно корня проекта.
- **Умное кэширование манифестов** — сохраняет содержимое `package.json` внутри экземпляра во избежание избыточного чтения с диска.

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

`LibraryAiPromptItem` инициализируется массивом сегментов пути, указывающим на директорию целевого модуля.

**Параметры конструктора:**
- `dir: string[]` — Сегменты пути к каталогу модуля (например, `['packages', 'scripts']`).

```typescript
import { LibraryAiPromptItem } from '@dxtmisha/scripts'

const item = new LibraryAiPromptItem(['packages', 'scripts'])
```

---

## Методы

### Выполнение

#### `make`
Основной управляющий метод: проверяет наличие каждого типа ресурсов (описание, информация, типы, скриншоты), объединяет существующие файлы и форматирует их в единый markdown-блок модуля.

**Возвращает:** `string | undefined`

```typescript
const promptBlock = item.make()
```

---

### Методы проверки статуса
Все методы проверки возвращают значение `boolean`.
- `isPrompt()` — Возвращает `true`, если для модуля существует хотя бы один из ресурсов (описание, информация, типы или скриншоты).
- `isDescription()` — Проверяет существование файла `description.txt`.
- `isInfo()` — Проверяет существование файла `info.txt`.
- `isTypes()` — Проверяет существование файла `ai-types.txt`.
- `isScreenshot()` — Проверяет существование папки `ai-screenshot`.

---

### Публичные и защищенные вспомогательные методы
- `getProjectName(): string` — Считывает имя проекта из локального файла `package.json`.
- `getPath(dirFile: string): string[]` — Возвращает полный массив сегментов пути для указанного файла в папке модуля.
- `getPathString(): string` — Возвращает сегменты пути модуля, объединенные через слэш.
- `getPackageJson(): Record<string, any>` — Считывает и кэширует манифест `package.json`.
- `readFile(dirFile: string): string` — Читает содержимое файла, адаптируя ссылки под абсолютную структуру папок проекта.
- `getDescription(): string | undefined` — Форматирует секцию описания модуля при её наличии.
- `getInfo(): string | undefined` — Форматирует секцию ключевой информации о модуле при её наличии.
- `getTypes(): string | undefined` — Форматирует ссылки на файлы типов модуля при их наличии.
- `getScreenshot(): string | undefined` — Форматирует блок визуальных материалов и скриншотов при их наличии.
- `getScreenshotList(): string[] | undefined` — Возвращает список файлов из директории `ai-screenshot`.
