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

<Meta title='@dxtmisha/ru/scripts/Classes/DesignWikiStormItem - Резолвер метаданных IDE компонента'/>

# Класс DesignWikiStormItem

Класс `DesignWikiStormItem` — это гранулярный резолвер, отвечающий за извлечение, анализ и форматирование метаданных для отдельного UI-компонента. Он выступает в качестве моста между внутренней документацией, ориентированной на Storybook, и форматом `web-types.json`, гарантируя, что каждое свойство и описание правильно сопоставлены для IntelliSense в IDE.

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

- **Маппинг Storybook в WebTypes** — автоматически конвертирует объекты `WikiStorybook` в определения тегов, совместимые с разработками JetBrains.
- **Динамическое разрешение модулей** — вычисляет правильные пути к модулям компонентов для поддержки функции «Перейти к определению» в IDE.
- **Контекстная документация** — сохраняет и форматирует описания компонентов, типы свойств и значения по умолчанию.
- **Программное извлечение данных** — импортирует и анализирует файлы `wikiData.ts` для получения актуальных метаданных компонентов.
- **Синтез атрибутов** — итеративно выстраивает списки атрибутов, преобразуя сложные типы в понятные для IDE строки.

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

Инициализируйте резолвер, указав контекст проекта, структурный путь и библиотечные метаданные компонента.

**Параметры:**
- `project: string` — имя проекта (например, `'@dxtmisha/ui'`).
- `path: string[]` — сегменты пути в файловой системе к папке компонента.
- `data: LibraryData` — основные метаданные компонента (имя, алиас, директория).

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

const resolver = new DesignWikiStormItem(
  '@dxtmisha/ui',
  ['packages', 'core', 'src', 'components'],
  componentData
)
await resolver.init()
const tagMetadata = resolver.get()
```

## Методы

### Получение информации

- `get(): WebTypesTagItem | undefined` — возвращает консолидированное определение тега, содержащее имя, описание, источник и атрибуты.
- `getAttribute(item: WikiStorybookProp): WebTypesAttributeItem` — преобразует отдельное свойство Storybook в определение атрибута Web-Types.
- `getAttributes(): WebTypesAttributes` — компилирует полный список атрибутов для компонента.

### Управление

- `init(): Promise<this>` — асинхронно инициализирует внутренний экземпляр `WikiStorybook`, загружая данные документации компонента.

## Операции

### Рабочий процесс извлечения метаданных

При инициализации и запросе резолвер следует структурированному конвейеру данных:
1. **Загрузка данных вики (`initWiki`)**: разрешает путь к файлу компонента `wikiData.ts` и выполняет динамический импорт для получения актуальных метаданных (пропсы, значения по умолчанию, токены дизайна).
2. **Синтез тега (`get`)**: конструирует имя тега для IDE, объединяя алиас дизайн-системы с внутренним именем компонента.
3. **Маппинг источника**: определяет свойства `module` и `symbol`, позволяя IDE связывать метаданные с реальным исходным кодом.
4. **Компиляция атрибутов (`getAttributes`)**: обходит каждое свойство, определенное в вики, преобразуя его комментарий JSDoc, тип TypeScript и значение по умолчанию в стандартизированную структуру JSON.

### Роль в движке IDE

`DesignWikiStormItem` — это «рабочая лошадка» всей системы генерации метаданных. В то время как `DesignWikiStorm` берет на себя общую структуру файла, этот класс управляет сложностью анализа каждого отдельного компонента, гарантируя, что специфичная логика UI точно представлена в формате, понятном инструментам разработки.
