Перейти до вмісту

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 з vendor/bin/ зв’язуються bin/phasis і bin/test262. Звідти працює лише bin/phasis: для bin/test262 потрібні підмодуль test262 git і тестові класи, яких немає в пакеті 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 як класичний скрипт. Після завершення все, що скрипт записав за допомогою console.log (а також console.error, console.warn тощо), одразу друкується в stdout. Якщо скрипт генерує помилку, повідомлення про неї надсилається в 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. У файлі також перелічено категорії та тести, які треба запускати ізольовано.

Сам набір тестів — це підмодуль test262 git; після клонування запустіть git submodule update --init test262. Без нього засіб запуску завершиться повідомленням «Набір test262 не знайдено».

Інші корисні прапорці

Прапорець Призначення
--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, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, потоки WHATWG, повну поверхню crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload і WebSocket. Таблицю відсотка успішно пройдених тестів для кожної області див. у розділі Веб-API.

Запустити всі імпортовані фікстури

Командна оболонка
./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 рядків проти повного testharness.js обсягом приблизно 3 тис. рядків).
  • Вихідні фікстури розташовані в tests/Wpt/upstream/ (розріджена копія web-platform-tests/wpt, яку Git ігнорує). Щоб імпортувати більше, скопіюйте файли .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.