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

<Meta title='@dxtmisha/ru/scripts/Classes/DesignWikiStorm - Генератор метаданных для IDE'/>

# Класс DesignWikiStorm

Класс `DesignWikiStorm` — это специализированная утилита, предназначенная для сокращения разрыва между кодом дизайн-системы и инструментами продуктивности разработчиков. Он автоматизирует генерацию `web-types.json` — стандартизированного формата метаданных, используемого IDE от JetBrains (WebStorm, IntelliJ IDEA) для обеспечения продвинутого IntelliSense, автодополнения и подсказок по документации для компонентов Vue.

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

- **Соответствие стандарту Web-Types** — генерирует метаданные, строго соответствующие официальной JSON-схеме Web-Types.
- **Оптимизация IntelliSense** — преобразует свойства компонентов, события и слоты в определения, удобные для IDE.
- **Автоматическое обнаружение директорий** — рекурсивно сканирует библиотеку для идентификации всех компонентов и их соответствующих метаданных.
- **Динамическое управление версиями** — автоматически синхронизирует версию сгенерированных метаданных с текущей версией в `package.json`.
- **Интеграция с фреймворком** — специально настроен для Vue.js, что гарантирует правильное распознавание тегов и атрибутов компонентов в `.vue` файлах.

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

Инициализируйте генератор, указав целевую директорию, в которой должен быть сохранен файл `web-types.json`.

**Параметры:**
- `dir: string` — путь к выходной директории (по умолчанию `'dist'`).

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

const generator = new DesignWikiStorm('dist')
await generator.make()
```

## Методы

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

- `make(): Promise<void>` — запускает основной процесс генерации.

## Операции

### Рабочий процесс генерации Web-Types

При вызове `make()` класс координирует многоэтапный синтез данных:
1. **Получение контекста**: загружает `package.json` для получения имени библиотеки и текущей версии.
2. **Инициализация схемы**: создает объект на основе схемы Web-Types, устанавливая фреймворк Vue и определяя разметку документации как Markdown.
3. **Итерация компонентов**: обходит каждый компонент, зарегистрированный в `LibraryItems`.
4. **Анализ элементов**: для каждого компонента создает экземпляр `DesignWikiStormItem`, который выполняет глубокий анализ исходных файлов компонента для извлечения:
    - **Tags**: имена компонентов (например, `d1-button`).
    - **Attributes**: имена свойств, типы и значения по умолчанию.
    - **Events**: имена генерируемых событий и их полезная нагрузка.
    - **Slots**: доступные точки настройки и их переменные области видимости.
5. **Сохранение**: финальный консолидированный объект метаданных записывается в `web-types.json` в указанной директории.

### Влияние на опыт разработчика

Благодаря генерации `web-types.json`, дизайн-система гарантирует, что разработчики, использующие инструменты JetBrains, получают тот же уровень поддержки, что и при работе с нативными HTML-элементами. Типы свойств проверяются в реальном времени внутри IDE, а комментарии к документации отображаются прямо в редакторе кода, что значительно снижает необходимость обращения к внешним страницам вики.
