---
title: АПИ референца
description: Спецификација за I18nErrorBase, setErrorMessage и повезане типове.
---

## `I18nErrorBase` [#i18n-error-base]

Основна класа за проширење `Error`. `message` се разрешава према `lang`.

```ts
import { I18nErrorBase } from "i18n-error-base";

class MyError extends I18nErrorBase<{ code: string }> {}
```

### Параметри типа [#type-params]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `TMeta` | `ErrorMeta \| undefined` | `ErrorMeta \| undefined` | Тип `meta`. Када се не користи, наведите `undefined`. |

### Статичка својства [#static-props]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `prefix?` | `string` | `undefined` | Додаје се на почетак разрешене поруке. |

### Својства инстанце [#instance-props]

| Prop | Type | Description |
| ---- | ---- | ----------- |
| `meta` | `TMeta` | Помоћни податак из конструктора. Може се читати и писати. |
| `message` | `string` | Порука разрешена према `lang`. Може се набрајати. |
| `cause` | `unknown` | Узрок из `ErrorOptions`. Стандардно својство `Error`. |

### Конструктор [#constructor]

Ако `TMeta` искључује `undefined`, `meta` је обавезан.

```ts
new MyError(meta, message, options?)
```

Ако је `TMeta` `undefined`, `meta` се може изоставити.

```ts
new MyError(message, options?)
new MyError(meta, message, options?)
```

| Параметар | Тип | Опис |
| --------- | --- | ---- |
| `meta` | `TMeta` | Помоћни податак за генерисање поруке. |
| `message` | `string \| MessageFactory<TMeta>` | Подразумевана порука за нерегистроване језике. Функције примају `meta`. |
| `options` | `ErrorOptions` | Опције компатибилне са 2. аргументом `Error` (нпр. `{ cause }`). |

### Редослед разрешавања [#resolution-order]

1. Преузима `lang` из `getGlobalConfig()` (`"en"` када није подешено)
2. Извршава регистровану функцију за ту класу и језик са `meta`
3. Када није регистровано, користи подразумевану поруку
4. Ако је подешен `static prefix`, додаје се на почетак

:::note
Регистрације су по класи. Родитељске се не наслеђују. Региструјте сваку класу.
:::

## `setErrorMessage` [#set-error-message]

Региструје фабричке функције порука по језику.

```ts
import { setErrorMessage } from "i18n-error-base";

setErrorMessage(MyError, (meta) => `...: ${meta.code}`, "ja");
```

| Параметар | Тип | Опис |
| --------- | --- | ---- |
| `reference` | `I18nErrorBaseConstructor` | Класа која наслеђује `I18nErrorBase`. Остале су грешка типа. |
| `message` | `string \| (meta) => string` | Порука за регистрацију. `meta` се изводи из циљане класе. |
| `lang` | `string \| Iterable<string>` | Циљани језик. Један код или итерабил (нпр. низ). |

Поновна регистрација исте класе и језика преписује.

## Типови [#types]

### `ErrorMeta` [#error-meta]

```ts
type ErrorMeta = {
  readonly [prop: string]: unknown;
};
```

Подразумевано ограничење за `TMeta`. Објекат само за читање са произвољним својствима.

### `ErrorOptions` [#error-options]

```ts
type ErrorOptions =
  ConstructorParameters<typeof Error> extends [
    message?: unknown,
    options?: (infer TOptions) | undefined,
  ]
    ? TOptions
    : { readonly cause?: unknown };
```

Тип изведен из 2. аргумента `Error`. Може се проследити `cause`.

### `MessageFactory<TMeta>` [#message-factory]

```ts
interface MessageFactory<TMeta extends ErrorMeta | undefined = ErrorMeta | undefined> {
  (meta: TMeta): string;
}
```

Функција која ствара поруку из `meta`. Користи се и за подразумеване и за регистроване поруке.

### `I18nErrorBaseParams<TMeta>` [#i18n-error-base-params]

Преоптерећења аргумената конструктора.

```ts
type I18nErrorBaseParams<TMeta extends ErrorMeta | undefined = ErrorMeta | undefined> =
  [TMeta] extends [undefined]
    ?
        | [message: string | MessageFactory<TMeta>, options?: ErrorOptions | undefined]
        | [meta: undefined, message: string | MessageFactory<TMeta>, options?: ErrorOptions | undefined]
    : [meta: TMeta, message: string | MessageFactory<TMeta>, options?: ErrorOptions | undefined];
```

`meta` се изоставља само када је `TMeta` `undefined`.

### `I18nErrorBaseConstructor` [#i18n-error-base-constructor]

```ts
interface I18nErrorBaseConstructor {
  new (...args: any): I18nErrorBase;
}
```

Тип 1. аргумента `setErrorMessage`.

## Напомене [#notes]

- Подразумевани `lang` је `"en"`. Промените са `setGlobalConfig({ lang })`
- Нема нормализације кодова ни ланца замене (нпр. `en-US` → `en`). Нерегистровани језици дају подразумевану поруку
