CLI
يوفر Phasis ثلاثة ملفات تنفيذية رئيسية في bin/:
bin/phasis— تشغيل ملفات JavaScript، وتقييم المصدر المُمرّر في سطر الأوامر، وتفريغ أشجار AST.bin/test262— تشغيل مجموعة اختبارات مطابقة ECMAScript الرسمية على Phasis.bin/wpt— تشغيل تجهيزات اختبارات Web Platform Tests على Phasis (URL والترميز وFetch والترويسات وBlob وAbortSignal والتدفقات وغيرها…).
بعد composer require phasis/phasis، تُربط bin/phasis وbin/test262 من vendor/bin/. لا يعمل من هناك سوى bin/phasis: يحتاج bin/test262 إلى وحدة git الفرعية test262 وفئات الاختبار التي لا تتضمنها حزمة Composer، كما أن bin/wpt غير مضمّن إطلاقًا. شغّل كليهما من نسخة مستنسخة من مستودع Phasis.
bin/phasis
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>
هذه الصيغ الثلاث هي الواجهة بأكملها. لا توجد بيئة REPL أو إدخالات عبر stdin أو علامة للوحدات.
تشغيل ملف
./vendor/bin/phasis script.js
ينفّذ script.js بوصفه برنامجًا نصيًا تقليديًا. عند انتهائه، تُطبع دفعة واحدة على stdout كل العناصر التي كتبها البرنامج باستخدام console.log (وconsole.error وconsole.warn وغيرها…). وإذا طرح البرنامج استثناءً، تُرسل رسالة الخطأ إلى stderr وتكون حالة الخروج 1.
يُحلَّل الملف دائمًا على أنه برنامج نصي تقليدي؛ لذلك يفشل الملف الذي يتضمن import / export أو await في المستوى الأعلى بخطأ SyntaxError. لتشغيل وحدة ES، استخدم Engine::evalAsModule() من PHP (راجع مرجع API) أو اجمع الكود أولًا.
تقييم المصدر
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586
تُقيّم الوسيطة بوصفها برنامجًا نصيًا كاملًا. لا تُطبع سوى مخرجات console؛ أما قيمة التعبير الأخير فلا تُطبع، لذا لا يطبع phasis -e '1 + 2' شيئًا.
تفريغ AST
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast
يطبع شجرة التحليل بصيغة JSON (مع إزاحة بمقدار مسافتين). يفيد ذلك في تصحيح مشكلات المحلل اللغوي أو بناء أدوات تستند إلى Phasis. للوصول البرمجي، استخدم المحلل اللغوي API.
bin/test262
يشغّل bin/test262 مجموعة اختبارات test262 الرسمية على Phasis. ويفيد كإطار لاختبارات التراجع عند المساهمة بتغييرات. تُنتج اللقطة الكاملة للمجموعة في COMPAT.md بواسطة bin/compat-report ذي الصلة، الذي تشغّله مصفوفة CI يدويًا على دفعات.
تشغيل فئة واحدة
./bin/test262 --category built-ins/Array
تشغيل المجموعة كاملة
./bin/test262 --jobs 4
الإعدادات
يقرأ المشغّل config/support.php من جذر المشروع. وقائمة test262_skipped_features فيه فارغة: لا تُتخطى أي ميزة من test262، بما في ذلك tail-call-optimization. ويسرد الملف أيضًا الفئات والاختبارات التي يجب تشغيلها بمعزل عن غيرها.
المجموعة نفسها هي وحدة git الفرعية test262؛ شغّل git submodule update --init test262 بعد الاستنساخ. ومن دونها، ينهي المشغّل عمله برسالة "test262 suite not found".
أعلام أخرى مفيدة
| العلم | الغرض |
|---|---|
--failures |
طباعة سطر لكل اختبار فاشل |
--limit N |
التوقف بعد أول N اختبارًا |
--jobs N |
تشغيل N اختبارًا بالتوازي |
--files-from file |
تشغيل الاختبارات المدرجة في file فقط |
--json |
إصدار ملخص قابل للقراءة آليًا على stdout |
--no-progress |
إخفاء سطر التقدم |
راجع قسم التوافقية للاطلاع على أحدث لقطة.
bin/wpt
يشغّل bin/wpt تجهيزات اختبارات Web Platform Tests المستوردة إلى tests/Wpt/fixtures/. وتشمل مجموعة الاختبارات URL والترميز وatob/btoa وstructuredClone والأداء وHeaders وBlob/File وAbortController/Signal وEventTarget وFormData وWHATWG Streams والواجهة الكاملة لـ crypto/SubtleCrypto وfetch/Request/Response وXMLHttpRequest/XMLHttpRequestUpload وWebSocket. راجع واجهات Web APIs للاطلاع على جدول نسبة النجاح لكل مجال.
تشغيل جميع التجهيزات المستوردة
./bin/wpt
تشغيل فئة واحدة
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob
مخرجات الاختبارات الفرعية
./bin/wpt --category abort --verbose
يطبع كل اختبار فرعي (PASS / FAIL) داخل كل تجهيز، مع رسائل التأكيد عند الإخفاق.
مخرجات JSON
./bin/wpt --json
ملخص نجاح/فشل قابل للقراءة آليًا لاستخدامه في مسارات CI أو التحليل النصي.
ملاحظات
- تبدأ التجهيزات التي تتعامل مع Fetch تلقائيًا خادم اختبارات WPT المضمّن عند
tests/Wpt/fetch-server.phpعلى127.0.0.1:8765، ثم توقفه بعد ذلك. - ينفّذ الجسر المساعد في
tests/Wpt/testharness-shim.jsواجهة WPT API التي تستخدمها التجهيزات المستوردة فحسب (نحو 400 سطر مقابل نحو 3K سطر فيtestharness.jsالكامل). - توجد التجهيزات المصدرية في
tests/Wpt/upstream/(نسخة sparse-checkout مستثناة من git من web-platform-tests/wpt). لاستيراد المزيد، انسخ ملفات.any.jsمنupstream/<area>/إلىfixtures/<category>/، وسيتعرف عليها المشغّل تلقائيًا.
رموز الخروج
ينهي bin/phasis عمله بأحد رمزين:
| الرمز | المعنى |
|---|---|
0 |
نجاح — اكتمل تشغيل البرنامج (وكذلك بعد --ast) |
1 |
أي حالة أخرى: استثناء JS غير ملتقط، أو خطأ نحوي، أو ملف مفقود، أو وسيطات غير صالحة |
تُطبع أخطاء البرنامج على stderr. وتُطبع الوسيطات غير الصالحة والملفات المفقودة سطر الاستخدام على stderr.
حدود الموارد
يعمل bin/phasis بإعدادات المحرك الافتراضية ولا يتضمن أعلامًا للحدود: سقف مكدس استدعاءات JS يبلغ 4,096 إطارًا، وحارسًا للإغلاقات المحوّلة يبلغ 8,192 إطارًا، وقيمة maxLoopIterations الافتراضية البالغة 100,000، التي تنطبق فقط على الكود الذي يشغّله المفسّر المتبع لبنية الشجرة (راجع API: setLimit). لا يوجد حد زمني؛ لذا أَحِط الأمر بـ timeout إذا كان من المحتمل ألا ينتهي البرنامج النصي.