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

<Meta title='@dxtmisha/ru/scripts/Classes/LibraryExport - Генератор экспорта'/>

# Класс LibraryExport

Класс `LibraryExport` отвечает за агрегацию и генерацию единого файла экспорта для библиотеки. Он сканирует назначенные подпапки на наличие файлов TypeScript и Vue, автоматически компилируя все экспорты в единый публичный интерфейс для упрощения последующих импортов.

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

- **Генерация единого экспорта** — Создает комплексную публичную точку входа для всех компонентов, composables, функций и классов.
- **Умное обнаружение модулей** — Автоматически применяет стандартные экспорты со звездочкой (`export *`) для TypeScript-утилит и создает именованные экспорты для Vue SFC компонентов.
- **Интеграция стилей** — Автоматически проверяет наличие и интегрирует глобальные таблицы стилей CSS или SCSS.
- **Интеллектуальная фильтрация** — Исключает файлы юнит-тестов (`.test.`) и модули, помеченные специальной директивой `// export:none`.

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

Инициализируйте и запустите генератор экспорта с помощью метода `make`:

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

const generator = new LibraryExport()
generator.make()
```

## Методы

### Основное выполнение

#### `make`
Запускает компиляцию библиотеки и генерацию точки входа. Метод сканирует все настроенные поддиректории, собирает подходящие файлы, отфильтровывает тесты и файлы с признаком `export:none`, а затем записывает сгенерированные инструкции импорта и экспорта в целевой файл точки входа.

**Параметры:**
- Параметры отсутствуют.

**Возвращает:** `void` — Модифицирует целевой файл `library.ts` в файловой системе и выводит логи в консоль.

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

new LibraryExport().make()
```

### Вспомогательные методы

- `getPath(directory: string): string[]` — Возвращает компоненты пути к директории на основе `UI_DIR_IN` и указанного имени директории.
- `isExport(path: string | string[]): boolean` — Проверяет, подходит ли путь к файлу для экспорта, убеждаясь, что это не файл теста и он не совпадает с шаблоном `UI_FLAG_NOT_EXPORT`.
- `getDirectory(): LibraryFiles` — Рекурсивно собирает все индексируемые файлы внутри настроенных папок экспорта и агрегирует их.
- `getName(name: string): string` — Преобразует первый символ имени директории в верхний регистр для стандартизации комментариев в сгенерированном файле.
- `getFile(path: string | string[]): string` — Считывает содержимое файла по указанному пути из файловой системы.
- `initFile(): string` — Формирует необработанное содержимое выходного файла библиотеки, включая импорты, настройку стилей, а также wildcard и именованные экспорты.
- `initStyles(): string` — Генерирует импорты для глобальных таблиц стилей (`style.scss` или `style.css`), если они присутствуют в корне исходной директории.

## Зависимости и конфигурации

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

- `UI_DIRS_LIST_EXPORT` — Указывает активные папки, которые рекурсивно сканируются на наличие экспортов (`classes`, `components`, `composables`, `functions`, `global`, `types`).
- `UI_DIRS_FILE_EXPORT` — Задает путь назначения скомпилированного файла библиотеки (`src/library.ts`).
- `UI_DIR_IN` — Идентифицирует корневую директорию исходного кода, содержащую модули (`src`).
- `UI_FLAG_NOT_EXPORT` — Содержит регулярное выражение, соответствующее директиве исключения экспорта (`/\/\/ *export:none/`).
