---
title: Dokumentacja API
description: Specyfikacja I18nErrorBase, setErrorMessage i powiązanych typów.
---

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

Klasa bazowa do rozszerzania `Error`. `message` jest rozwiązywany zgodnie z `lang`.

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

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

### Parametry typu [#type-params]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `TMeta` | `ErrorMeta \| undefined` | `ErrorMeta \| undefined` | Typ `meta`. Gdy nieużywany, podaj `undefined`. |

### Właściwości statyczne [#static-props]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `prefix?` | `string` | `undefined` | Dodawane na początku rozwiązanego komunikatu. |

### Właściwości instancji [#instance-props]

| Prop | Type | Description |
| ---- | ---- | ----------- |
| `meta` | `TMeta` | Pomocnicze dane konstruktora. Odczytywalne i zapisywalne. |
| `message` | `string` | Rozwiązywany zgodnie z `lang`. Wyliczalny. |
| `cause` | `unknown` | Przyczyna z `ErrorOptions`. Standardowa właściwość `Error`. |

### Konstruktor [#constructor]

Gdy `TMeta` nie zawiera `undefined`, `meta` jest wymagane.

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

Gdy `TMeta` wynosi `undefined`, `meta` można pominąć.

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

| Parametr | Typ | Opis |
| -------- | --- | ---- |
| `meta` | `TMeta` | Dane pomocnicze do generowania komunikatu. |
| `message` | `string \| MessageFactory<TMeta>` | Domyślny komunikat dla języków bez rejestracji. Funkcje przyjmują `meta`. |
| `options` | `ErrorOptions` | Opcje zgodne z drugim argumentem `Error` (np. `{ cause }`). |

### Kolejność rozwiązywania [#resolution-order]

1. Pobiera `lang` z `getGlobalConfig()` (`"en"`, gdy nie ustawiono)
2. Wykonuje zarejestrowaną funkcję dla tej klasy i języka z `meta`
3. Gdy brak rejestracji, używa komunikatu domyślnego
4. Jeśli ustawiono `static prefix`, dodaje go na początku

:::note
Rejestracje są przypisane do klasy. Rejestracje rodzica nie są dziedziczone. Zarejestruj każdą klasę.
:::

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

Rejestruje funkcje tworzące komunikat dla języka.

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

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

| Parametr | Typ | Opis |
| -------- | --- | ---- |
| `reference` | `I18nErrorBaseConstructor` | Klasa rozszerzająca `I18nErrorBase`. Inne klasy to błąd typu. |
| `message` | `string \| (meta) => string` | Rejestrowany komunikat. `meta` jest wnioskowane z klasy docelowej. |
| `lang` | `string \| Iterable<string>` | Język docelowy. Pojedynczy kod lub iterowalny obiekt (np. tablica). |

Ponowna rejestracja tej samej klasy i języka nadpisuje wpis.

## Typy [#types]

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

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

Domyślne ograniczenie dla `TMeta`. Obiekt tylko do odczytu o dowolnych właściwościach.

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

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

Typ wyprowadzony z drugiego argumentu `Error`. Można przekazać `cause`.

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

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

Funkcja tworząca komunikat z `meta`. Używana dla komunikatów domyślnych i zarejestrowanych.

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

Przeciążenia argumentów konstruktora.

```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];
```

Pomiń `meta` tylko wtedy, gdy `TMeta` to `undefined`.

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

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

Typ pierwszego argumentu `setErrorMessage`.

## Uwagi [#notes]

- Domyślny `lang` to `"en"`. Przełącz przez `setGlobalConfig({ lang })`
- Brak normalizacji kodów języków i łańcucha fallback (np. `en-US` → `en`). Niezarejestrowane języki używają komunikatu domyślnego
