CLI
Phasis include tre eseguibili principali in bin/:
bin/phasis— esegue file JavaScript, valuta il codice sorgente passato da riga di comando e stampa gli AST.bin/test262— esegue la suite ufficiale di conformità ECMAScript su Phasis.bin/wpt— esegue i fixture dei Web Platform Tests su Phasis (URL, codifica, fetch, header, Blob, AbortSignal, stream, …).
Dopo composer require phasis/phasis, bin/phasis e bin/test262 sono collegati da vendor/bin/. Da lì funziona solo bin/phasis: bin/test262 richiede il sottomodulo git test262 e le classi di test, che il pacchetto Composer non include, mentre bin/wpt non viene distribuito affatto. Eseguite entrambi da un clone del repository Phasis.
bin/phasis
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>
Queste tre modalità costituiscono l'intera interfaccia. Non c'è una REPL, non è possibile fornire input tramite stdin e non c'è un flag per i moduli.
Eseguire un file
./vendor/bin/phasis script.js
Esegue script.js come script classico. Al termine, tutto ciò che lo script ha scritto con console.log (e console.error, console.warn, …) viene stampato in un'unica volta su stdout. Se lo script genera un errore, il messaggio viene inviato a stderr e il codice di uscita è 1.
Il file viene sempre analizzato come script classico, quindi un file con import / export o await al livello superiore genera un SyntaxError. Per eseguire un modulo ES, usate Engine::evalAsModule() da PHP (consultate il riferimento API) oppure create prima un bundle del codice.
Valutare il codice sorgente
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586
L'argomento viene valutato come script completo. Viene stampato solo l'output console; il valore dell'ultima espressione non viene stampato, quindi phasis -e '1 + 2' non produce output.
Stampare l'AST
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast
Stampa l'albero di analisi come JSON (con rientro di due spazi). Utile per eseguire il debug di problemi del parser o creare strumenti basati su Phasis. Per l'accesso programmatico, usate il parser API.
bin/test262
bin/test262 esegue la suite ufficiale test262 su Phasis. È utile come strumento di regressione quando si contribuisce con modifiche. Lo snapshot della suite completa in COMPAT.md è generato dal relativo bin/compat-report, eseguito in shard dalla matrice CI avviata manualmente.
Eseguire una singola categoria
./bin/test262 --category built-ins/Array
Eseguire la suite completa
./bin/test262 --jobs 4
Configurazione
Il runner legge config/support.php dalla radice del progetto. Il suo elenco test262_skipped_features è vuoto: non viene esclusa alcuna funzionalità test262, inclusa tail-call-optimization. Il file elenca anche le categorie e i test da eseguire in isolamento.
La suite stessa è il sottomodulo git test262; eseguite git submodule update --init test262 dopo il clone. Se manca, il runner termina con "test262 suite not found".
Altri flag utili
| Flag | Scopo |
|---|---|
--failures |
stampa una riga per ogni test non riuscito |
--limit N |
si ferma dopo i primi N test |
--jobs N |
esegue N test in parallelo |
--files-from file |
esegue solo i test elencati in file |
--json |
emette un riepilogo leggibile dalle macchine su stdout |
--no-progress |
nasconde la riga di avanzamento |
Consultate la sezione Compatibilità per lo snapshot più recente.
bin/wpt
bin/wpt esegue i fixture dei Web Platform Tests importati in tests/Wpt/fixtures/. Il corpus copre URL, codifica, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, l'intera superficie crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload e WebSocket. Consultate Web APIs per la tabella dei tassi di superamento per area.
Eseguire tutti i fixture importati
./bin/wpt
Eseguire una categoria
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob
Output per sottotest
./bin/wpt --category abort --verbose
Stampa ogni sottotest (PASS / FAIL) all'interno di ciascun fixture, con i messaggi di asserzione in caso di errore.
Output JSON
./bin/wpt --json
Riepilogo leggibile dalle macchine dei test superati/falliti per pipeline CI o analisi tramite script.
Note
- I fixture che usano Fetch avviano automaticamente il server WPT incluso su
tests/Wpt/fetch-server.phpalla porta127.0.0.1:8765e lo arrestano al termine. - Lo shim dell'harpness in
tests/Wpt/testharness-shim.jsimplementa solo la superficie API di WPT usata dai fixture importati (~400 righe rispetto alle ~3K righe complete ditestharness.js). - I fixture sorgente si trovano in
tests/Wpt/upstream/(checkout sparso di web-platform-tests/wpt, ignorato da git). Per importarne altri, copiate i file.any.jsdaupstream/<area>/infixtures/<category>/; il runner li rileverà automaticamente.
Codici di uscita
bin/phasis termina con uno di due codici:
| Codice | Significato |
|---|---|
0 |
successo: lo script è stato eseguito fino al termine (anche dopo --ast) |
1 |
qualsiasi altro esito: un'eccezione JS non intercettata, un errore di sintassi, un file mancante o argomenti non validi |
Gli errori dello script stampano il proprio messaggio su stderr. Gli argomenti non validi e i file mancanti stampano su stderr la riga di utilizzo.
Limiti delle risorse
bin/phasis usa i valori predefiniti del motore e non ha flag per i limiti: un limite dello stack di chiamate 4,096 frame per JS, un limite di 8,192 frame per le closure transpilate e il valore maxLoopIterations predefinito di 100,000, applicato solo al codice eseguito dall'interprete tree-walking (vedi API: setLimit). Non c'è un limite di tempo; usate timeout per eseguire il comando se uno script potrebbe non terminare.