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

<Meta title='@dxtmisha/ru/scripts/Classes/DesignStructureRead - Разрешитель зависимостей свойств'/>

# Класс DesignStructureRead

Класс `DesignStructureRead` является основным парсером для разрешения зависимостей и состояний между свойствами компонентов. Он преобразует сырые токены дизайн-системы в структурированный список свойств, определяя, какие элементы должны быть представлены как публичные пропсы, а какие представляют собой внутренние интерактивные состояния или зависимости связанных CSS-классов.

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

- **Обнаружение состояний** — идентифицирует токены свойств, определенные как интерактивные состояния (например, `:hover`, `:active`), и выстраивает цепочки их зависимостей.
- **Разрешение связанных классов** — обнаруживает и разрешает ссылки на внешние классы компонентов для сохранения иерархии BEM.
- **Компиляция значений** — агрегирует все возможные значения для свойства, включая те, что получены из вложенных структур состояний, для генерации точных объединений TypeScript.
- **Валидация пропсов** — фильтрует и проверяет, какие токены свойств имеют право на экспорт в качестве публичных свойств компонента на основе системных правил.
- **Синтез независимых значений** — автоматически внедряет булевы флаги для свойств, у которых отсутствуют явные токены значений, но требуется отслеживание состояния.

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

Для инициализации читателя свойств укажите базовое имя компонента. Класс автоматически разрешит метаданные компонента через свою родительскую абстракцию и запустит многоэтапный конвейер парсинга.

**Параметры:**
- `component: string` — идентификатор компонента для анализа (например, `'input'`).

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

const reader = new DesignStructureRead('button')
const structureList = reader.get()
const states = reader.getStates()
```

## Методы

### Информация

- `get(): DesignStructureList` — возвращает полностью разрешенный линейный список свойств компонента.
- `getStates(): DesignStructureStateList` — возвращает иерархический список состояний и связанных с ними зависимостей свойств.

## Операции

### Конвейер парсинга

При создании экземпляра `DesignStructureRead` выполняет серию трансформаций для построения финальной модели данных:
1. **Маппинг состояний (`makeState`)**: рекурсивно обходит дерево свойств для изоляции токенов, помеченных как `state` или `linkClass`.
2. **Инициализация основной структуры (`makeMain`)**: создает базовую запись для каждого идентифицированного пропса, нормализуя имена и метаданные.
3. **Извлечение базовых значений (`makeValue`)**: разрешает прямые непосредственные значения, назначенные каждому свойству.
4. **Расширение значений (`makeValueAll`)**: агрегирует значения из всех возможных интерактивных состояний, чтобы API свойств охватывало все логические случаи.
5. **Дедупликация (`makeValueUnique`)**: нормализует списки значений, удаляя дубликаты и обеспечивая наличие булевых фолбэков там, где это необходимо.

### Обработка связанных классов

Специальная логика применяется, когда свойство ссылается на класс другого компонента (`linkClass`). Разрешитель:
1. **Идентифицирует ссылку**: находит конкретную ссылку на переменную в глобальных метаданных дизайна.
2. **Трансформация имени**: преобразует ссылку в стандартизированное имя класса BEM (например, `theme-button--primary`).
3. **Рекурсивное разрешение**: запускает цикл подпарсинга для связанного компонента, чтобы гарантировать учет его свойств и состояний в дереве зависимостей основного компонента.
