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

<Meta title='@dxtmisha/ru/functional-basic/Classes/ErrorCenterInstance - Экземпляр ошибок'/>

# Класс ErrorCenterInstance

`ErrorCenterInstance` — это основной движок системы ошибок. Он объединяет в себе реестр причин и менеджер обработчиков. Вы можете создавать независимые экземпляры этого класса для разных частей приложения, чтобы изолировать их логику обработки ошибок.

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

- **Изолированное хранилище** — ведение локального списка причин ошибок.
- **Интеллектуальное слияние** — автоматическое дополнение данных ошибки на основе системы приоритетов.
- **Делегирование обработки** — использование `ErrorCenterHandler` для вызова функций обратного вызова.
- **Chainable API** — поддержка цепочки вызовов для конфигурации.

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

Для создания экземпляра используйте конструктор `ErrorCenterInstance(causes, handler)`.

**Параметры:**
- `causes?: ErrorCenterCauseList` — начальный список причин ошибок.
- `handler?: ErrorCenterHandler` — экземпляр обработчика (если не указан, создается новый).

```typescript
import { ErrorCenterInstance } from '@dxtmisha/functional-basic'

const myErrorCenter = new ErrorCenterInstance([
  { group: 'api', code: '404', label: 'Не найдено' }
])
```

## Методы

### Действие
- `on(cause: ErrorCenterCauseItem): this` — Запускает процесс обработки. Склеивает данные из реестра с входными данными и передает их обработчику.

### Проверка
- `has(code: string, group?: string): boolean` — Поиск в локальном реестре.
- `get(code: string, group?: string): ErrorCenterCauseItem | undefined` — Получение данных из реестра.

### Конфигурация
- `add(cause: ErrorCenterCauseItem): this` — Добавление ошибки в локальный реестр.
- `addList(causes: ErrorCenterCauseList): this` — Пакетное добавление ошибок.
- `addHandler(group: ErrorCenterGroup, handler: ErrorCenterHandlerCallback): this` — Регистрация реакции на группу.
- `addHandlerList(handlers: ErrorCenterHandlerList): this` — Пакетная регистрация реакций.

## Типы

#### `ErrorCenterCauseItem`
Объект, описывающий конкретную ошибку.
- `group?: ErrorCenterGroup` — группа ошибки (например, 'api').
- `code: string` — уникальный код ошибки.
- `priority?: number` — уровень приоритета (по умолчанию `500`). Используется при слиянии данных.
- `label?: string` — заголовок ошибки.
- `message?: string` — описание ошибки.
- `details?: any` — дополнительные данные.

#### `ErrorCenterHandlerCallback`
- `(cause: ErrorCenterCauseItem) => void` — функция обработки.

## Примеры

### Инициализация со словарем
```typescript
const myEC = new ErrorCenterInstance([
  { group: 'db', code: 'connection_lost', label: 'БД недоступна' }
]);

myEC.addHandler('db', (cause) => alert(cause.label));
myEC.on({ group: 'db', code: 'connection_lost' });
```
