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

وقت تشغيل الحافة (Edge Runtime) في 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يمثل قارئًا لتدفق قابل للقراءة
ReadableStreamDefaultReaderيمثل قارئًا افتراضيًا للتدفق
TransformStreamيمثل تدفق تحويل
WritableStreamيمثل تدفقًا قابلًا للكتابة
WritableStreamDefaultWriterيمثل كاتبًا افتراضيًا للتدفق

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

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

حشوات (Polyfills) المخصصة لـ Next.js

متغيرات البيئة (Environment Variables)

يمكنك استخدام 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).
يمكنك تخفيف الفحص للسماح بملفات محددة مع تكوين التصدير لمسار واجهة برمجة التطبيقات (API Route) أو البرنامج الوسيط (Middleware):

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

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

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