Přejít k obsahu

CLI

Phasis obsahuje tři hlavní spustitelné soubory v bin/:

  • bin/phasis — spouští soubory JavaScript, vyhodnocuje zdrojový kód předaný v příkazovém řádku a vypisuje AST.
  • bin/test262 — spouští oficiální sadu testů shody s ECMAScriptem pro Phasis.
  • bin/wpt — spouští testovací případy Web Platform Tests pro Phasis (URL, kódování, fetch, hlavičky, Blob, AbortSignal, streamy, …).

Po composer require phasis/phasis jsou bin/phasis a bin/test262 propojené z vendor/bin/. Odtud funguje pouze bin/phasis: bin/test262 potřebuje submodul test262 git a testovací třídy, které balíček Composer neobsahuje, a bin/wpt se vůbec nedodává. Spusťte oba z klonu repozitáře Phasis.

bin/phasis

Kód
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>

Tyto tři formy představují celé rozhraní. Není k dispozici REPL, vstup ze stdin ani příznak pro moduly.

Spuštění souboru

Shell
./vendor/bin/phasis script.js

Spustí script.js jako klasický skript. Po jeho dokončení se vše, co skript zapsal pomocí console.log (a console.error, console.warn, …), najednou vypíše na stdout. Pokud skript vyvolá chybu, její zpráva se vypíše na stderr a návratový kód bude 1.

Soubor se vždy parsuje jako klasický skript, takže soubor obsahující import / export nebo await na nejvyšší úrovni skončí chybou SyntaxError. Chcete-li spustit modul ES, použijte Engine::evalAsModule() z PHP (viz příručka API) nebo kód nejprve zabalte.

Vyhodnocení zdrojového kódu

Shell
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586

Argument se vyhodnotí jako úplný skript. Vypíše se pouze výstup console; hodnota posledního výrazu se nevypisuje, takže phasis -e '1 + 2' nic nevypíše.

Výpis AST

Shell
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast

Vypíše syntaktický strom ve formátu JSON (s odsazením o dvě mezery). Hodí se k ladění problémů s parserem nebo k vytváření nástrojů postavených na Phasis. Pro programový přístup použijte parser API.

bin/test262

bin/test262 spouští oficiální sadu testů test262 pro Phasis. Hodí se jako testovací sada pro regresní testy při přispívání změnami. Snímek celé sady v COMPAT.md vytváří související nástroj bin/compat-report, který se spouští ručně jako matice CI rozdělená do částí.

Spuštění jedné kategorie

Shell
./bin/test262 --category built-ins/Array

Spuštění celé sady

Shell
./bin/test262 --jobs 4

Konfigurace

Spouštěč načítá config/support.php z kořene projektu. Jeho seznam test262_skipped_features je prázdný: nepřeskakuje se žádná funkce test262, včetně tail-call-optimization. Soubor také uvádí kategorie a testy, které se musí spustit izolovaně.

Samotná testovací sada je submodul test262 git; po naklonování spusťte git submodule update --init test262. Bez ní se spouštěč ukončí s hlášením „testovací sada test262 nebyla nalezena“.

Další užitečné příznaky

Příznak Účel
--failures vypíše jeden řádek pro každý neúspěšný test
--limit N zastaví se po prvních N testech
--jobs N spustí N testů paralelně
--files-from file spustí pouze testy uvedené v file
--json vypíše na stdout souhrn čitelný pro počítače
--no-progress potlačí řádek s průběhem

Aktuální snímek najdete v části Kompatibilita.

bin/wpt

bin/wpt spouští testovací případy Web Platform Tests importované do tests/Wpt/fixtures/. Korpus pokrývá URL, kódování, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, celé rozhraní crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload a WebSocket. Tabulku úspěšnosti jednotlivých oblastí najdete v části Web APIs.

Spuštění všech importovaných testovacích případů

Shell
./bin/wpt

Spuštění jedné kategorie

Shell
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob

Výstup pro jednotlivé podtesty

Shell
./bin/wpt --category abort --verbose

Vypíše každý podtest (PASS / FAIL) v rámci jednotlivých testovacích případů a při neúspěchu také zprávy o selhání kontrolních tvrzení.

Výstup JSON

Shell
./bin/wpt --json

Souhrn úspěšných a neúspěšných testů ve strojově čitelném formátu pro CI kanály nebo skriptovanou analýzu.

Poznámky

  • Testy pracující s fetch automaticky spustí přibalený testovací server WPT na adrese tests/Wpt/fetch-server.php na 127.0.0.1:8765 a po dokončení jej ukončí.
  • Náhrada pro testovací prostředí na adrese tests/Wpt/testharness-shim.js implementuje pouze rozhraní API WPT, které používají importované testy (~400 řádků oproti úplnému souboru testharness.js o ~3 tisících řádcích).
  • Zdrojové testy jsou uloženy v tests/Wpt/upstream/ (řídký checkout web-platform-tests/wpt ignorovaný Gitem). Chcete-li importovat další, zkopírujte soubory .any.js z upstream/<area>/ do fixtures/<category>/ a runner je automaticky načte.

Návratové kódy

bin/phasis končí s jedním ze dvou návratových kódů:

Kód Význam
0 úspěch — skript se dokončil (také po --ast)
1 cokoli jiného: nezachycená výjimka JS, syntaktická chyba, chybějící soubor nebo neplatné argumenty

Chyby skriptu vypisují svou zprávu na stderr. Neplatné argumenty a chybějící soubory vypíší na stderr řádek s nápovědou k použití.

Limity prostředků

bin/phasis běží s výchozím nastavením stroje a nemá příznaky pro limity: limit hloubky zásobníku volání JS činí 4,096 rámců, limit hloubky transpileovaných uzávěrů 8,192 rámců a výchozí maxLoopIterations má hodnotu 100,000; platí pouze pro kód spouštěný interpretem, který prochází strom (viz API: setLimit). Časový limit neexistuje; pokud skript nemusí skončit, obalte příkaz pomocí timeout.