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

<Meta title='@dxtmisha/ru/scripts/bin/dxt-constructor - Генерация конструкторов компонентов'/>

# dxt-constructor

Команда `dxt-constructor` обеспечивает автоматическую генерацию файлов ядра конструкторов компонентов, типов, конфигураций свойств и точек входа библиотеки в дизайн-системе. Под капотом она использует `DesignConstructors` и `DesignConstructor` для оркестрации массовой или целевой инициализации компонентов.

## Ключевые возможности

- **Целевая или массовая генерация**: Может инициализировать все компоненты внутри директории конструкторов или обрабатывать конкретный компонент, переданный в качестве аргумента.
- **Объединение стилей**: Автоматически генерирует и агрегирует экспорты SCSS компонентов в централизованном файле `packages/library/style.scss`.
- **Полная генерация кода и типов**: Автоматически создает файлы конфигурации свойств (`properties.json`), файлы типов (`types.ts`, `basicTypes.ts`), стили (`style.scss`), файлы кода (`Constructors.ts`, `ConstructorsDesign.tsx`) и индексный файл экспортов (`index.ts`).

## Как это работает?

Процесс генерации конструкторов автоматизирует интеграцию компонентов:

1. Скрипт определяет имя целевого компонента, переданное в качестве аргумента, либо автоматически сканирует настроенную директорию системы для получения имен всех компонентов.
2. Он очищает общий кэш свойств `PropertiesCache`, чтобы гарантировать использование актуальных конфигурационных состояний при генерации.
3. Для каждого компонента вызывается генератор `DesignConstructor` для создания JSON свойств, типов свойств TypeScript, базовых типов, стилей, файлов кода и структуры индексного файла.
4. Он перебирает все папки компонентов для сбора их индивидуальных стилей и объединяет их в единый набор правил `@forward`.
5. Он обновляет экспорты в `package.json`, чтобы предоставить доступ к точкам входа компонентов, и создает файлы сопоставления библиотеки.

## Настройка и запуск

Для работы генератора не требуются сложные конфигурации. Инструмент спроектирован так, чтобы сканировать директории конструкторов и беспрепятственно интегрировать их в рабочую среду.

Чтобы сгенерировать все конструкторы компонентов в рабочем пространстве, выполните:
```bash
npx dxt-constructor
```

Чтобы сгенерировать конкретный компонент (например, `Button`), передайте его имя в качестве аргумента:
```bash
npx dxt-constructor Button
```

## Структура генерируемых файлов

Когда конструктор компонента инициализируется или обновляется, инструмент создает следующие файлы в его директории:

- `properties.json`: Содержит необработанную конфигурацию свойств компонента.
- `props.ts`: Определяет структуры пропсов React/Vue на основе конфигураций.
- `types.ts` & `basicTypes.ts`: Содержат стандартные типы TypeScript.
- `style.scss`: Управляет базовыми стилями SCSS компонента.
- `Constructors.ts` & `ConstructorsDesign.tsx`: Содержат основной код поведения конструктора.
- `index.ts`: Экспортирует публичные интерфейсы и классы.
