الإعدادات
يُدمج الإعداد من افتراضيات العميل وخيارات كل استدعاء عبر mergeConfig (انظر قواعد الدمج أدناه).
OpenFetchConfig (الطلب)
العنوان وسلسلة الاستعلام
url— مطلق أو نسبي (معbaseURL).baseURL— يُسبق للمسارات غير المطلقة.params— كائن عادي يُسلسل كسلسلة استعلام (يمكن استبدال المسلسل بـparamsSerializer).
الطريقة والجسم
method— طريقة HTTP؛ المساعدات تضبطها تلقائياً.data— الحمولة المنطقية: بعد خطافاتtransformRequest، تُسلسل الكائنات (ما عداFormData،URLSearchParams،Blob،ArrayBuffer، المصفوفات المشاهَدة) كـ JSON؛ يُضبطcontent-typeعلىapplication/jsonإن كان ناقصاً.body— جسمfetchالخام عند عدم استخدامdataبنفس الطريقة؛ يستخدمdispatchقيمةdataإن وُجدت وإلاbody.
الرؤوس والمصادقة
headers—Record<string, string>(تُطبَّع المفاتيح إلى أحرف صغيرة داخلياً للطلب الصادر).auth—{ username, password }→Authorization: Basic ….withCredentials: true— يضبطcredentials: 'include'ما لم يُضبطcredentialsصراحة.
المهلات والإلغاء
timeout— بالمللي ثانية؛ يستخدمAbortControllerداخلياً يُدمج معsignalعبرmergeAbortSignals.signal—AbortSignalخارجي؛ يُدمج مع مهلة الإلغاء.
معالجة الاستجابة
responseType—"json"|"text"|"arraybuffer"|"blob"|"stream".
إن وُجد، يستنتج JSON منContent-Type: application/json، وإلا يُقرأ كنص.validateStatus—(status: number) => boolean. الافتراضي: 200–299. إن رجعfalse، يُرمىOpenFetchErrorبرمزERR_BAD_RESPONSEمع إرفاق الاستجابة.
التحويلات
transformRequest— مصفوفة(data, headers) => unknownتُنفَّذ بالترتيب قبل بناء جسمfetch.transformResponse— مصفوفة(data) => Tعلى الاستجابات الناجحة بعد التحليل.
الوسيط وإعادة المحاولة وتلميحات التخزين المؤقت
middlewares— مصفوفة دوال وسيط (تُلحق بالافتراضيات).retry— دمج سطحي لخياراتcreateRetryMiddleware(افتراضيات + لكل طلب).memoryCache— تجاوزات لكل طلب لوسيط التخزين المؤقت:ttlMs،staleWhileRevalidateMs،skip.
مريحة الاستخدام
unwrapResponse— عندtrue، تُرجعget/post/…dataفقط بدلاً منOpenFetchResponseالكامل. مفيد لـ RSC.
تمرير RequestInit
تُمرَّر هذه الحقول إلى fetch:cache، credentials، integrity، keepalive، mode، redirect، referrer، referrerPolicy.
OpenFetchResponse
ts
type OpenFetchResponse<T = unknown> = {
data: T;
status: number;
statusText: string;
headers: Record<string, string>;
config: OpenFetchConfig;
};سلوك الدمج (mergeConfig)
- المفاتيح على المستوى الأعلى: الإعداد الأحدث يغلب.
headers: دمج سطحي؛ رؤوس الاستدعاء تغلب الافتراضيات.middlewares،transformRequest،transformResponse: تُلحق (الافتراضيات أولاً ثم الخاصة بالاستدعاء).retry،memoryCache: دمج سطحي للكائنات.- تُزال مفاتيح تلوث النموذج الأولي (
__proto__،constructor،prototype) من الكائنات المدمجة والرؤوس /retry/memoryCacheالمتداخلة.
