Vai al contenuto

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

Codice
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

Shell
./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

Shell
./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

Shell
./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

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

Eseguire la suite completa

Shell
./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

Shell
./bin/wpt

Eseguire una categoria

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

Output per sottotest

Shell
./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

Shell
./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.php alla porta 127.0.0.1:8765 e lo arrestano al termine.
  • Lo shim dell'harpness in tests/Wpt/testharness-shim.js implementa solo la superficie API di WPT usata dai fixture importati (~400 righe rispetto alle ~3K righe complete di testharness.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.js da upstream/<area>/ in fixtures/<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.