CLI
Phasis inclui três executáveis principais em bin/:
bin/phasis— executa arquivos JavaScript, avalia código-fonte passado pela linha de comando e exibe ASTs.bin/test262— executa a suíte oficial de conformidade ECMAScript em Phasis.bin/wpt— executa os testes do Web Platform Tests em Phasis (URL, codificação, fetch, cabeçalhos, Blob, AbortSignal, streams, …).
Depois de composer require phasis/phasis, bin/phasis e bin/test262 são vinculados a partir de vendor/bin/. Só bin/phasis funciona nesse diretório: bin/test262 precisa do submódulo test262 git e das classes de teste, que não estão incluídos no pacote Composer, e bin/wpt não é distribuído. Execute ambos a partir de um clone do repositório Phasis.
bin/phasis
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>
Essas três formas compõem toda a interface. Não há REPL, entrada via stdin nem flag de módulo.
Executar um arquivo
./vendor/bin/phasis script.js
Executa script.js como um script clássico. Quando termina, tudo o que o script escreveu com console.log (e console.error, console.warn, …) é impresso de uma só vez em stdout. Se o script lançar uma exceção, a mensagem de erro vai para stderr e o status de saída é 1.
O arquivo é sempre analisado como um script clássico, portanto um arquivo com import / export ou await no nível superior falha com um SyntaxError. Para executar um módulo ES, use Engine::evalAsModule() de PHP (consulte a referência APIreferência) ou agrupe o código primeiro.
Avaliar código-fonte
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586
O argumento é avaliado como um script completo. Apenas a saída console é impressa; o valor da última expressão não é, então phasis -e '1 + 2' não imprime nada.
Exibir a AST
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast
Imprime a árvore sintática como JSON (com recuo de dois espaços). Útil para depurar problemas do analisador ou criar ferramentas com base em Phasis. Para acesso programático, use o analisador API.
bin/test262
bin/test262 executa a suíte oficial test262 em Phasis. Ela é útil como conjunto de testes de regressão ao contribuir com alterações. O instantâneo da suíte completa em COMPAT.md é gerado pelo bin/compat-report relacionado, que a matriz de CI iniciada manualmente executa em partes.
Executar uma categoria
./bin/test262 --category built-ins/Array
Executar a suíte completa
./bin/test262 --jobs 4
Configuração
O executor lê config/support.php da raiz do projeto. A lista test262_skipped_features está vazia: nenhum recurso test262 é ignorado, incluindo tail-call-optimization. O arquivo também lista as categorias e os testes que devem ser executados isoladamente.
A própria suíte é o submódulo test262 git; execute git submodule update --init test262 depois de clonar. Sem ele, o executor termina com "suíte test262 não encontrada".
Outras flags úteis
| Flag | Finalidade |
|---|---|
--failures |
imprime uma linha para cada teste com falha |
--limit N |
para após os primeiros N testes |
--jobs N |
executa N testes em paralelo |
--files-from file |
executa apenas os testes listados em file |
--json |
emite um resumo legível por máquina em stdout |
--no-progress |
oculta a linha de progresso |
Consulte a seção de compatibilidade para ver o instantâneo mais recente.
bin/wpt
bin/wpt executa os testes do Web Platform Tests importados para tests/Wpt/fixtures/. O conjunto de testes cobre URL, codificação, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, toda a superfície de crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload e WebSocket. Consulte APIs da Web para ver a tabela de taxas de aprovação por área.
Executar todos os testes importados
./bin/wpt
Executar uma categoria
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob
Saída por subteste
./bin/wpt --category abort --verbose
Imprime cada subteste (PASS / FAIL) dentro de cada teste, com mensagens de asserção quando há falha.
Saída JSON
./bin/wpt --json
Resumo de aprovação/falha legível por máquina para pipelines de CI ou análise por script.
Observações
- Os testes que usam Fetch iniciam automaticamente o servidor de testes WPT incluído em
tests/Wpt/fetch-server.phpna porta127.0.0.1:8765e o encerram depois. - O shim do harness em
tests/Wpt/testharness-shim.jsimplementa apenas a superfície API do WPT usada pelos testes importados (~400 linhas, em comparação com as ~3 mil linhas completas detestharness.js). - Os testes de origem ficam em
tests/Wpt/upstream/(um checkout esparso de web-platform-tests/wpt, ignorado pelo git). Para importar mais, copie os arquivos.any.jsdeupstream/<area>/parafixtures/<category>/e o executor os encontrará automaticamente.
Códigos de saída
bin/phasis termina com um de dois códigos:
| Código | Significado |
|---|---|
0 |
sucesso — o script foi executado até o fim (também após --ast) |
1 |
qualquer outro caso: uma exceção JS não capturada, erro de sintaxe, arquivo ausente ou argumentos inválidos |
Os erros do script imprimem sua mensagem em stderr. Argumentos inválidos e arquivos ausentes imprimem a linha de uso em stderr.
Limites de recursos
bin/phasis é executado com os padrões do mecanismo e não tem flags para limites: um limite de pilha de chamadas de 4,096 frames em JS, uma proteção de 8,192 frames para closures transpiladas e o maxLoopIterations padrão de 100,000, que se aplica apenas ao código executado pelo interpretador que percorre a árvore (consulte API: setLimit). Não há limite de tempo; envolva o comando em timeout se um script puder não terminar.