وقت تشغيل الحافة (Edge Runtime)

وقت تشغيل Edge في Next.js يعتمد على واجهات برمجة تطبيقات الويب القياسية، وهو يدعم الواجهات البرمجية التالية:

واجهات برمجة الشبكة

APIالوصف
Blobيمثل كائن blob
fetchجلب مورد
FetchEventيمثل حدث جلب
Fileيمثل ملفًا
FormDataيمثل بيانات النموذج
Headersيمثل رؤوس HTTP
Requestيمثل طلب HTTP
Responseيمثل استجابة HTTP
URLSearchParamsيمثل معلمات بحث URL
WebSocketيمثل اتصال websocket

واجهات برمجة التشفير

APIالوصف
atobيفك تشفير سلسلة مشفرة بـ base-64
btoaيشفر سلسلة بتنسيق base-64
TextDecoderيفك تشفير Uint8Array إلى سلسلة
TextDecoderStreamمفكك تشفير متسلسل للتدفقات
TextEncoderيشفر سلسلة إلى Uint8Array
TextEncoderStreamمشفر متسلسل للتدفقات

واجهات برمجة التدفق

APIالوصف
ReadableStreamيمثل تدفقًا قابلًا للقراءة
ReadableStreamBYOBReaderيمثل قارئًا لـ ReadableStream
ReadableStreamDefaultReaderيمثل قارئًا افتراضيًا لـ ReadableStream
TransformStreamيمثل تدفق تحويل
WritableStreamيمثل تدفقًا قابلًا للكتابة
WritableStreamDefaultWriterيمثل كاتبًا افتراضيًا لـ WritableStream

واجهات برمجة التشفير الآمن

APIالوصف
cryptoيوفر وصولاً إلى الوظائف التشفيرية للنظام
CryptoKeyيمثل مفتاحًا تشفيريًا
SubtleCryptoيوفر وصولاً إلى البدائيات التشفيرية الشائعة، مثل التجزئة، التوقيع، التشفير أو فك التشفير

واجهات برمجة تطبيقات الويب القياسية

الواجهة البرمجيةالوصف
AbortControllerتتيح لك إلغاء طلب واحد أو أكثر من طلبات DOM متى ما رغبت
Arrayتمثل مصفوفة من القيم
ArrayBufferتمثل مخزن بيانات ثابت الطول للبيانات الثنائية الخام
Atomicsتوفر عمليات ذرية كطرق ثابتة
BigIntتمثل عددًا صحيحًا بدقة غير محدودة
BigInt64Arrayتمثل مصفوفة منظمة من أعداد صحيحة موقعة 64 بت
BigUint64Arrayتمثل مصفوفة منظمة من أعداد صحيحة غير موقعة 64 بت
Booleanتمثل كيانًا منطقيًا ويمكن أن يكون لها قيمتان: true و false
clearIntervalتلغي إجراءً متكررًا مؤقتًا تم إنشاؤه مسبقًا عن طريق استدعاء setInterval()
clearTimeoutتلغي إجراءً متكررًا مؤقتًا تم إنشاؤه مسبقًا عن طريق استدعاء setTimeout()
consoleتوفر وصولاً إلى وحدة تحكم تصحيح الأخطاء في المتصفح
DataViewتمثل عرضًا عامًا لـ ArrayBuffer
Dateتمثل لحظة واحدة في الوقت بتنسيق مستقل عن النظام الأساسي
decodeURIتفكك معرف مورد موحد (URI) تم إنشاؤه مسبقًا بواسطة encodeURI أو بواسطة روتين مشابه
decodeURIComponentتفكك مكون معرف مورد موحد (URI) تم إنشاؤه مسبقًا بواسطة encodeURIComponent أو بواسطة روتين مشابه
DOMExceptionتمثل خطأً يحدث في DOM
encodeURIتشفر معرف مورد موحد (URI) عن طريق استبدال كل مثيل لبعض الأحرف بواحد أو اثنين أو ثلاثة أو أربعة تسلسلات هروب تمثل ترميز UTF-8 للحرف
encodeURIComponentتشفر مكون معرف مورد موحد (URI) عن طريق استبدال كل مثيل لبعض الأحرف بواحد أو اثنين أو ثلاثة أو أربعة تسلسلات هروب تمثل ترميز UTF-8 للحرف
Errorتمثل خطأً عند محاولة تنفيذ عبارة أو الوصول إلى خاصية
EvalErrorتمثل خطأً يحدث فيما يتعلق بالدالة العامة eval()
Float32Arrayتمثل مصفوفة منظمة من أعداد الفاصلة العائمة 32 بت
Float64Arrayتمثل مصفوفة منظمة من أعداد الفاصلة العائمة 64 بت
Functionتمثل دالة
Infinityتمثل قيمة اللانهاية الرياضية
Int8Arrayتمثل مصفوفة منظمة من أعداد صحيحة موقعة 8 بت
Int16Arrayتمثل مصفوفة منظمة من أعداد صحيحة موقعة 16 بت
Int32Arrayتمثل مصفوفة منظمة من أعداد صحيحة موقعة 32 بت
Intlتوفر وصولاً إلى وظائف التدويل والتهيئة المحلية
isFiniteتحدد ما إذا كانت القيمة عددًا محدودًا
isNaNتحدد ما إذا كانت القيمة NaN أم لا
JSONتوفر وظائف لتحويل قيم JavaScript من وإلى تنسيق JSON
Mapتمثل مجموعة من القيم، حيث يمكن أن يظهر كل قيمة مرة واحدة فقط
Mathتوفر وصولاً إلى الدوال والثوابت الرياضية
Numberتمثل قيمة رقمية
Objectتمثل الكائن الذي هو أساس جميع كائنات JavaScript
parseFloatتحلل وسيط سلسلة نصية وتُرجع عددًا عشريًا
parseIntتحلل وسيط سلسلة نصية وتُرجع عددًا صحيحًا للأساس المحدد
Promiseتمثل الإكمال النهائي (أو الفشل) لعملية غير متزامنة، وقيمتها الناتجة
Proxyتمثل كائنًا يُستخدم لتعريف سلوك مخصص للعمليات الأساسية (مثل البحث عن الخاصية، التعيين، التعداد، استدعاء الدالة، إلخ)
queueMicrotaskتضيف مهمة صغيرة إلى قائمة الانتظار لتنفيذها
RangeErrorتمثل خطأً عندما تكون القيمة ليست في مجموعة أو نطاق القيم المسموح بها
ReferenceErrorتمثل خطأً عند الإشارة إلى متغير غير موجود
Reflectتوفر طرقًا لعمليات JavaScript القابلة للاعتراض
RegExpتمثل تعبيرًا منتظمًا، مما يسمح لك بمطابقة مجموعات من الأحرف
Setتمثل مجموعة من القيم، حيث يمكن أن يظهر كل قيمة مرة واحدة فقط
setIntervalتستدعي دالة بشكل متكرر، مع تأخير زمني ثابت بين كل استدعاء
setTimeoutتستدعي دالة أو تقيم تعبيرًا بعد عدد محدد من المللي ثانية
SharedArrayBufferتمثل مخزن بيانات ثابت الطول للبيانات الثنائية الخام
Stringتمثل سلسلة من الأحرف
structuredCloneتنشئ نسخة عميقة من قيمة
Symbolتمثل نوع بيانات فريدًا وغير قابل للتغيير يُستخدم كمفتاح لخاصية كائن
SyntaxErrorتمثل خطأً عند محاولة تفسير كود غير صحيح من الناحية التركيبية
TypeErrorتمثل خطأً عندما لا تكون القيمة من النوع المتوقع
Uint8Arrayتمثل مصفوفة منظمة من أعداد صحيحة غير موقعة 8 بت
Uint8ClampedArrayتمثل مصفوفة منظمة من أعداد صحيحة غير موقعة 8 بت مقيدة بين 0-255
Uint32Arrayتمثل مصفوفة منظمة من أعداد صحيحة غير موقعة 32 بت
URIErrorتمثل خطأً عند استخدام دالة معالجة URI العامة بطريقة خاطئة
URLتمثل كائنًا يوفر طرقًا ثابتة تُستخدم لإنشاء عناوين URL للكائنات
URLPatternتمثل نمط URL
URLSearchParamsتمثل مجموعة من أزواج المفتاح/القيم
WeakMapتمثل مجموعة من أزواج المفتاح/القيم حيث تكون المفاتيح مرجعية ضعيفة
WeakSetتمثل مجموعة من الكائنات حيث يمكن أن يظهر كل كائن مرة واحدة فقط
WebAssemblyتوفر وصولاً إلى WebAssembly

حشوات خاصة بـ Next.js

متغيرات البيئة

يمكنك استخدام process.env للوصول إلى متغيرات البيئة لكل من next dev و next build.

واجهات برمجة التطبيقات غير المدعومة

يحتوي وقت تشغيل الحافة (Edge Runtime) على بعض القيود بما في ذلك:

  • واجهات برمجة تطبيقات Node.js الأصلية غير مدعومة. على سبيل المثال، لا يمكنك القراءة أو الكتابة في نظام الملفات.
  • يمكن استخدام node_modules طالما أنها تنفذ وحدات ES ولا تستخدم واجهات برمجة تطبيقات Node.js الأصلية.
  • استدعاء require مباشرة غير مسموح به. استخدم وحدات ES بدلاً من ذلك.

ميزات لغة JavaScript التالية معطلة، ولن تعمل:

واجهة برمجة التطبيقالوصف
evalيقيم كود JavaScript ممثلًا كسلسلة نصية
new Function(evalString)ينشئ دالة جديدة بالكود المقدم كوسيطة
WebAssembly.compileيترجم وحدة WebAssembly من مصدر مخزن مؤقت
WebAssembly.instantiateيترجم وينشئ وحدة WebAssembly من مصدر مخزن مؤقت

في حالات نادرة، قد يحتوي الكود الخاص بك (أو يستورد) بعض عبارات تقييم الكود الديناميكي التي لا يمكن الوصول إليها أثناء التشغيل ولا يمكن إزالتها عن طريق تقليل الشجرة (treeshaking). يمكنك تخفيف الفحص للسماح بملفات محددة مع تكوين مسار واجهة برمجة التطبيقات أو Middleware المصدر:

export const config = {
  runtime: 'edge', // لمسارات واجهة برمجة التطبيقات للحافة فقط
  unstable_allowDynamic: [
    // يسمح بملف واحد
    '/lib/utilities.js',
    // استخدم النمط العام للسماح بأي شيء في وحدة function-bind من طرف ثالث
    '**/node_modules/function-bind/**',
  ],
}

unstable_allowDynamic هو نمط عام، أو مصفوفة من الأنماط العامة، تتجاهل تقييم الكود الديناميكي لملفات محددة. الأنماط العامة مرتبطة بمجلد جذر التطبيق الخاص بك.

تحذير: إذا تم تنفيذ هذه العبارات على الحافة، فسوف تسبب خطأ أثناء التشغيل.