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

<Meta title='@dxtmisha/ru/scripts/Classes/DesignStructure - Движок разрешения данных компонента'/>

# Класс DesignStructure

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

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

- **Унифицированный доступ к данным** — предоставляет централизованный API для получения всех метаданных, связанных с конкретным компонентом.
- **Интеллектуальное кэширование** — использует `PropertiesCache` для предотвращения избыточных операций с файловой системой и ускорения обработки нескольких компонентов.
- **Маппинг подклассов** — разрешает сложные иерархии CSS-классов для рекурсивных структур компонентов.
- **Предоставление токенов стилей** — извлекает и форматирует токены дизайна в формат, готовый для генерации SCSS.
- **Оркестрация соглашений об именовании** — стандартизирует именование компонентов, дизайнов и файлов во всем процессе сборки.

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

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

**Параметры:**
- `component?: string` — идентификатор компонента (например, `'button'`, `'list'`). По умолчанию: `'component'`.

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

const structure = new DesignStructure('button')
const properties = structure.get()
```

## Методы

### Получение данных

- `get(): DesignStructureList` — возвращает полный список свойств и метаданных компонента с использованием кэширования.
- `getClasses(): DesignStructureClassesList` — разрешает иерархию CSS-классов компонента.
- `getStyles(): string[]` — возвращает отформатированные токены стилей, полученные из структуры компонента.

### Именование и идентификация

- `getDesign(): string` — возвращает идентификатор текущей дизайн-системы (например, `'misha'`).
- `getDesignFirst(): string` — возвращает идентификатор дизайна с заглавной буквы.
- `getComponentName(): string` — возвращает исходное имя компонента.
- `getComponentNameFirst(): string` — возвращает имя компонента с заглавной буквы.
- `getFullComponentName(): string` — объединяет названия дизайна и компонента (например, `'MishaButton'`).
- `getFileName(): string` — возвращает стандартизированное имя файла для реализации компонента.
- `getPathName(): string` — возвращает уникальный идентификатор для ключей кэша и системных путей.

## Операции

### Конвейер разрешения (Resolution Pipeline)

При запросе данных (например, через `get()` или `getClasses()`) класс запускает модульный процесс разрешения:
1. **Проверка кэша**: сначала проверяется, существуют ли уже обработанные данные в `PropertiesCache` под ключом, сгенерированным `getPathName()`.
2. **Модульное делегирование**: если данные в кэше отсутствуют, выполнение «тяжелой» работы делегируется специализированным классам «Read»:
    - **DesignStructureRead**: управляет извлечением свойств и их значений.
    - **DesignStructureClasses**: управляет построением деревьев классов.
    - **DesignStructureStyles**: преобразует токены в строки стилей.
3. **Сохранение**: разрешенные данные сохраняются обратно в кэш для повышения производительности при последующих вызовах в течение того же цикла сборки.

### Интеграция с движками шаблонов

`DesignStructure` служит «источником истины» для таких классов, как `DesignReplace`. Стандартизируя процесс разрешения имен и путей, он гарантирует, что каждый сгенерированный файл (Vue, TS, SCSS) использует согласованные идентификаторы и поддерживает корректные ссылки по относительным путям в рабочем пространстве.
