---
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. احصل على `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 };
```

نوع مشتق من الوسيط الثاني لـ`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;
}
```

نوع الوسيط الأول لـ`setErrorMessage`.

## ملاحظات [#notes]

- الافتراضي لـ`lang` هو `"en"`. بدِّل عبر `setGlobalConfig({ lang })`
- لا تسوية لرموز اللغة ولا سلسلة تراجع (مثل `en-US` → `en`). اللغات غير المسجلة تُعطي الافتراضية
