---
title: API রেফারেন্স
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` | `Error`-এর ২য় আর্গুমেন্টের সাথে সামঞ্জস্যপূর্ণ অপশন (`{ cause }` ইত্যাদি)। |

### রিজলিউশন ক্রম [#resolution-order]

1. `getGlobalConfig()`-এর `lang` নেয় (সেট না থাকলে `"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 };
```

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

শুধু `TMeta` `undefined` হলেই `meta`-বিহীন রূপ অনুমোদিত।

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

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

`setErrorMessage`-এর ১ম আর্গুমেন্টের টাইপ।

## পরিপূরক [#notes]

- `lang`-এর ডিফল্ট মান `"en"`। `setGlobalConfig({ lang })` দিয়ে স্পষ্টভাবে বদলান
- ভাষা কোড স্বাভাবিককরণ বা ফলব্যাক চেইন নেই (যেমন `en-US` → `en`)। অনিবন্ধিত ভাষা ডিফল্ট বার্তা হয়
