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

<Meta title='@dxtmisha/ru/scripts/Classes/BuildPackages - Сборщик пакетов монорепозитория' />

# Класс BuildPackages

Класс `BuildPackages` — это утилита, отвечающая за сборку измененных npm-пакетов в рабочем пространстве монорепозитория. Он сканирует директорию `packages`, определяет изменения версий по сравнению с локальным кэшем логов и выполняет инкрементальную сборку только тех пакетов, чьи версии обновились.

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

- **Автоматическое сканирование директорий** — сканирует папку пакетов (`packages/`) на наличие директорий с корректным файлом `package.json`.
- **Инкрементальное кэширование по версиям** — сравнивает версию пакета с данными в `./logs/ui-build.log.json` для предотвращения повторной сборки неизмененного кода.
- **Интеллектуальный выбор скрипта** — запускает `build-recovery`, если он объявлен в скриптах `package.json`, иначе переходит к стандартной сборке `build`.
- **Фильтрация тестовых пакетов** — игнорирует пакеты, отмеченные свойством `"ui-test": true`.

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

Вы можете создать экземпляр `BuildPackages`, опционально передав кастомный путь к директории пакетов.

```typescript
import { BuildPackages } from './BuildPackages'

const builder = new BuildPackages()
await builder.make()
```

## Методы

- `make(): Promise<void>` — инициализирует сканирование и запускает инкрементальный процесс сборки для каждого обнаруженного пакета.
- `build(packageFile: PackageFile): Promise<boolean>` — выполняет команду сборки (`npm run build-recovery` или `npm run build`) для указанного пакета.
- `isUpdate(packageFile: PackageFile): boolean` — проверяет, отличается ли текущая версия пакета в `package.json` от версии, сохраненной в файле лога.
- `getVersionLog(name: string): string` — возвращает кэшированную версию пакета из лога сборки.
- `updateLog(packageFile: PackageFile): void` — обновляет оперативную копию лога сборки текущей версией пакета.
- `saveLog(): void` — сохраняет лог сборки из оперативной памяти в файл `./logs/ui-build.log.json`.
