---
title: Referensi API
description: Spesifikasi I18nErrorBase, setErrorMessage, dan tipe terkait.
---

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

Kelas dasar untuk mewarisi `Error`. `message` diselesaikan menurut `lang`.

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

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

### Parameter tipe [#type-params]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `TMeta` | `ErrorMeta \| undefined` | `ErrorMeta \| undefined` | Tipe `meta`. Tentukan `undefined` jika tak dipakai. |

### Properti statis [#static-props]

| Prop | Type | Default | Description |
| ---- | ---- | ------- | ----------- |
| `prefix?` | `string` | `undefined` | Digabung di awal pesan yang diselesaikan. |

### Properti instans [#instance-props]

| Prop | Type | Description |
| ---- | ---- | ----------- |
| `meta` | `TMeta` | Info tambahan dari konstruktor. Dapat dibaca dan ditulis. |
| `message` | `string` | Diselesaikan menurut `lang` saat ini. Dapat dienumerasi. |
| `cause` | `unknown` | Penyebab via `ErrorOptions`. Properti standar `Error`. |

### Konstruktor [#constructor]

Jika `TMeta` tidak mencakup `undefined`, `meta` wajib.

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

Jika `TMeta` adalah `undefined`, `meta` dapat dihilangkan.

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

| Parameter | Tipe | Deskripsi |
| --------- | ---- | --------- |
| `meta` | `TMeta` | Info tambahan untuk pembuatan pesan. |
| `message` | `string \| MessageFactory<TMeta>` | Pesan default untuk bahasa tak terdaftar. Fungsi menerima `meta`. |
| `options` | `ErrorOptions` | Opsi kompatibel dengan argumen kedua `Error` (seperti `{ cause }`). |

### Urutan resolusi [#resolution-order]

1. Mendapatkan `lang` dari `getGlobalConfig()` (`"en"` jika belum diatur)
2. Menjalankan fungsi terdaftar kelas dan bahasa itu beserta `meta`
3. Jika tak terdaftar, pakai pesan default
4. Jika `static prefix` ada, gabung di awal

:::note
Pencocokan pendaftaran per kelas. Pendaftaran induk tak diwarisi. Daftarkan tiap kelas.
:::

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

Mendaftarkan fungsi pembuat pesan tiap bahasa.

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

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

| Parameter | Tipe | Deskripsi |
| --------- | ---- | --------- |
| `reference` | `I18nErrorBaseConstructor` | Kelas pewaris `I18nErrorBase`. Jika tidak, error tipe. |
| `message` | `string \| (meta) => string` | Pesan terdaftar. Tipe `meta` disimpulkan dari kelas target. |
| `lang` | `string \| Iterable<string>` | Bahasa target. Kode tunggal atau objek iterable (seperti array). |

Pendaftaran ulang kelas dan bahasa yang sama menimpa.

## Tipe [#types]

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

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

Batasan default `TMeta`. Objek hanya-baca dengan properti sembarang.

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

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

Tipe turunan dari argumen kedua `Error`. Dapat memberi `cause`.

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

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

Fungsi pembuat pesan dari `meta`. Untuk default maupun terdaftar.

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

Overload argumen konstruktor.

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

Tanpa `meta` hanya boleh jika `TMeta` adalah `undefined`.

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

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

Tipe argumen pertama `setErrorMessage`.

## Catatan [#notes]

- Default `lang` adalah `"en"`. Beralih eksplisit dengan `setGlobalConfig({ lang })`
- Tanpa normalisasi kode bahasa maupun rantai fallback (mis. `en-US` → `en`). Bahasa tak terdaftar menjadi pesan default
