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

<Meta title='@dxtmisha/ru/scripts/Classes/PropertiesMain - Оркестратор глобальных токенов'/>

# Класс PropertiesMain

Класс `PropertiesMain` — это высокоуровневый оркестратор, отвечающий за синтез глобального дерева токенов дизайна. Он управляет всем жизненным циклом «основных» (main) токенов — от обнаружения в файловой системе и необработанного чтения до многоэтапной семантической трансформации и иерархического слияния. Абстрагируя сложности модульной загрузки свойств, он предоставляет единую точку входа для получения полностью разрешенных и стандартизированных конфигураций дизайна.

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

- **Автоматизированная оркестровка конвейера** — объединяет несколько утилит (`Import`, `Standard`, `Convector`) в единую последовательность загрузки.
- **Дизайн-центричное обнаружение** — использует `PropertiesPath` для автоматического поиска и обработки токенов для всех активных тем дизайна.
- **Динамическое слияние конфигураций** — поддерживает «горячую» замену или наслоение настроек на глобальное дерево через глубокую рекурсивную синхронизацию.
- **Обеспечение структурной целостности** — автоматически применяет структурную обертку и разделители, чтобы гарантировать правильную категоризацию и доступность токенов.
- **Синхронизация внутреннего состояния** — сохраняет внутренние флаги движка (свойства, начинающиеся с `_`) во время обновления конфигурации.

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

Для инициализации объекта вызовите конструктор `PropertiesMain(path)`.

**Параметры:**
- `path: PropertiesPath` — экземпляр класса, отвечающего за обнаружение в файловой системе и разрешение путей.

```typescript
import { PropertiesMain, PropertiesPath } from '@dxtmisha/scripts'

// 1. Инициализация необходимого менеджера путей
const pathManager = new PropertiesPath(['packages', 'tokens'])

// 2. Создание оркестратора основных токенов
const main = new PropertiesMain(pathManager)

// 3. Разрешение полного глобального дерева свойств
const globalTokens = main.get()
```

## Методы

- `get(): PropertyList` — выполняет полный конвейер трансформации и возвращает все разрешенные основные токены.
- `getBySettings(list): PropertyList` — объединяет кастомный кластер настроек с глобальным деревом токенов.

## Операции

### Глобальный конвейер трансформации

При вызове `get()` класс `PropertiesMain` выполняет следующую последовательность для каждого обнаруженного дизайна:
1. **Чтение**: Получает необработанные данные из файловой системы с помощью `PropertiesTool`.
2. **Семантическая конвертация**: Пропускает данные через `PropertiesConvector` для преобразования сырых значений в токены.
3. **Стандартизация**: Нормализует структуры через `PropertiesStandard` для обеспечения единообразия объектов.
4. **Разрешение ссылок**: Использует `PropertiesImport` для рекурсивного получения и слияния любых ссылок на внешние файлы.
5. **Структурное завершение**: При необходимости разделяет ключи через `PropertiesSeparator` и применяет `PropertiesWrap` для организации токенов в итоговые иерархические контейнеры.
6. **Унифицированный синтез**: Объединяет обработанные данные всех дизайнов в единый `PropertyList`, где ключами являются названия дизайнов верхнего уровня.
