CLI
Phasis incluye tres ejecutables principales en bin/:
bin/phasis— ejecuta archivos JavaScript, evalúa código fuente pasado por línea de comandos y vuelca AST.bin/test262— ejecuta la batería oficial de conformidad de ECMAScript en Phasis.bin/wpt— ejecuta las fixtures de Web Platform Tests en Phasis (URL, codificación, fetch, cabeceras, Blob, AbortSignal, streams, …).
Después de composer require phasis/phasis, bin/phasis y bin/test262 se enlazan desde vendor/bin/. Desde ahí solo funciona bin/phasis: bin/test262 necesita el submódulo test262 git y las clases de prueba, que el paquete Composer no incluye, y bin/wpt ni siquiera se distribuye. Ejecuta ambos desde un clon del repositorio Phasis.
bin/phasis
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>
Estas tres formas constituyen toda la interfaz. No hay REPL, entrada por stdin ni indicador de módulo.
Ejecutar un archivo
./vendor/bin/phasis script.js
Ejecuta script.js como script clásico. Al terminar, todo lo que el script haya escrito con console.log (y console.error, console.warn, …) se imprime de una vez en stdout. Si el script lanza una excepción, el mensaje de error se envía a stderr y el estado de salida es 1.
El archivo siempre se analiza como un script clásico, así que uno con import / export o await de nivel superior produce un SyntaxError. Para ejecutar un módulo ES, use Engine::evalAsModule() desde PHP (consulte la referencia de API) o agrupe primero el código.
Evaluar código fuente
./vendor/bin/phasis -e 'console.log(Math.PI * 2)'
# 6.283185307179586
El argumento se evalúa como un script completo. Solo se imprime la salida de console; no se muestra el valor de la última expresión, por lo que phasis -e '1 + 2' no imprime nada.
Volcar el AST
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast
Imprime el árbol de análisis como JSON (con sangría de dos espacios). Es útil para depurar problemas del analizador o crear herramientas basadas en Phasis. Para acceder mediante programación, use el analizador API.
bin/test262
bin/test262 ejecuta la batería oficial de test262 en Phasis. Es útil como arnés de regresión al contribuir cambios. La instantánea de la batería completa en COMPAT.md la genera bin/compat-report, el proceso relacionado que CI inicia manualmente y ejecuta en fragmentos.
Ejecutar una categoría
./bin/test262 --category built-ins/Array
Ejecutar la batería completa
./bin/test262 --jobs 4
Configuración
El ejecutor lee config/support.php desde la raíz del proyecto. Su lista test262_skipped_features está vacía: no se omite ninguna función de test262, incluida tail-call-optimization. El archivo también enumera las categorías y las pruebas que deben ejecutarse de forma aislada.
La suite en sí es el submódulo test262 git; ejecuta git submodule update --init test262 después de clonar. Sin él, el ejecutor se cierra con «No se encontró la suite test262».
Otras opciones útiles
| Opción | Finalidad |
|---|---|
--failures |
imprime una línea por cada prueba fallida |
--limit N |
se detiene tras las primeras N pruebas |
--jobs N |
ejecuta N pruebas en paralelo |
--files-from file |
ejecuta solo las pruebas enumeradas en file |
--json |
emite un resumen legible por máquina en stdout |
--no-progress |
oculta la línea de progreso |
Consulte la sección de compatibilidad para ver la instantánea más reciente.
bin/wpt
bin/wpt ejecuta las fixtures de Web Platform Tests importadas en tests/Wpt/fixtures/. El corpus cubre URL, codificación, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, toda la superficie de crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload y WebSocket. Consulte API web para ver la tabla de tasas de aciertos por área.
Ejecutar todas las fixtures importadas
./bin/wpt
Ejecutar una categoría
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob
Salida por subprueba
./bin/wpt --category abort --verbose
Imprime todas las subpruebas (PASS / FAIL) de cada fixture, con mensajes de aserción cuando fallan.
Salida de JSON
./bin/wpt --json
Resumen de aprobado/reprobado legible por máquina para canalizaciones de CI o análisis mediante scripts.
Notas
- Los fixtures que realizan solicitudes inician automáticamente el servidor de pruebas WPT incluido en
tests/Wpt/fetch-server.phpen127.0.0.1:8765y lo detienen después. - El adaptador del harness en
tests/Wpt/testharness-shim.jsimplementa solo la interfaz WPT API que usan los fixtures importados (unas 400 líneas frente a las ~3K líneas completas detestharness.js). - Los fixtures de origen se encuentran en
tests/Wpt/upstream/(un sparse-checkout ignorado por git de web-platform-tests/wpt). Para importar más, copia los archivos.any.jsdeupstream/<area>/afixtures/<category>/y el ejecutor los recogerá automáticamente.
Códigos de salida
bin/phasis termina con uno de estos dos códigos:
| Código | Significado |
|---|---|
0 |
éxito — el script se ejecutó hasta el final (también después de --ast) |
1 |
cualquier otro caso: una excepción JS no capturada, un error de sintaxis, un archivo inexistente o argumentos no válidos |
Los errores del script imprimen su mensaje en stderr. Los argumentos no válidos y los archivos inexistentes imprimen la línea de uso en stderr.
Límites de recursos
bin/phasis se ejecuta con los valores predeterminados del motor y no tiene opciones para establecer límites: un máximo de 4,096 tramas para la pila de llamadas de JS, una protección de 8,192 tramas para los cierres transpilados y el valor predeterminado de maxLoopIterations de 100,000, que solo se aplica al código que ejecuta el intérprete que recorre el árbol (consulta API: setLimit). No hay límite de tiempo; usa timeout para envolver el comando si es posible que un script no termine.