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

<Meta title='@dxtmisha/ru/scripts/Classes/DesignConstructors - Менеджер конструкторов дизайна'/>

# Класс DesignConstructors

Класс `DesignConstructors` выступает в роли высокоуровневого оркестратора для управления всеми конструкторами компонентов внутри дизайн-системы. Он обрабатывает массовые операции, такие как одновременное обновление всех существующих конструкторов, и управляет объединением стилей компонентов в глобальные экспорты библиотеки.

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

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

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

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

**Параметры:**
- `name?: string` — необязательный уникальный идентификатор компонента для обработки.

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

// Менеджер для всех конструкторов
const manager = new DesignConstructors()
manager.make()

// Менеджер для конкретного компонента
const buttonManager = new DesignConstructors('button')
buttonManager.make()
```

## Методы

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

- `make(): void` — запускает процесс генерации или обновления для одного или всех идентифицированных конструкторов и обновляет глобальные стили.

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

- `getComponents(): string[]` — возвращает список всех идентификаторов компонентов, найденных в директории конструкторов.
- `getComponentsStyle(): string[]` — возвращает массив инструкций SCSS `@forward` для всех зарегистрированных компонентов.

## Операции

### Генерация глобальных стилей

Одной из основных обязанностей этого класса является поддержка файла `style.scss` в корне библиотеки. Метод `makeStyle()` выполняет следующее:
1. **Сканирование**: получает список всех компонентов через `getComponents()`.
2. **Маппинг путей**: конструирует правила `@forward`, указывающие на файл стилей каждого отдельного компонента.
3. **Запись**: записывает эти правила в централизованный файл `packages/library/style.scss`, обеспечивая доступность стилей всей дизайн-системы через один импорт.

### Рабочий процесс выполнения

При вызове `make()` класс следует этой последовательности:
1. **Очистка**: очищает `PropertiesCache`, чтобы предотвратить влияние устаревших данных на результат.
2. **Делегирование**: 
    - Если при инициализации было передано `name`, создается новый `DesignConstructor` для этого компонента и вызывается его метод `make()`.
    - Если `name` не было передано, класс перебирает все обнаруженные компоненты, создавая `DesignConstructor` для каждого и запуская их обновление.
3. **Объединение**: в завершение вызывается `makeStyle()` для синхронизации глобальных экспортов стилей с актуальным списком компонентов.
