Aller au contenu

CLI

Phasis fournit trois exécutables principaux dans bin/ :

  • bin/phasis — exécuter des fichiers JavaScript, évaluer du code source transmis sur la ligne de commande et afficher des AST.
  • bin/test262 — exécuter la suite officielle de conformité ECMAScript avec Phasis.
  • bin/wpt — exécuter les fixtures Web Platform Tests avec Phasis (URL, encodage, fetch, en-têtes, Blob, AbortSignal, flux, …).

Après composer require phasis/phasis, bin/phasis et bin/test262 sont liés depuis vendor/bin/. Seul bin/phasis fonctionne à cet emplacement : bin/test262 nécessite le sous-module git test262 et les classes de test, absents du paquet Composer, et bin/wpt n'est pas fourni du tout. Exécutez les deux autres depuis un clone du dépôt Phasis.

bin/phasis

Code
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>

Ces trois formes constituent toute l'interface. Il n'y a ni REPL, ni entrée stdin, ni option de module.

Exécuter un fichier

Shell
./vendor/bin/phasis script.js

Exécute script.js comme un script classique. À la fin, tout ce que le script a écrit avec console.log (et console.error, console.warn, …) est imprimé d’un seul coup sur stdout. Si le script lève une exception, le message d’erreur est envoyé sur stderr et le code de sortie est 1.

Le fichier est toujours analysé comme un script classique : un fichier contenant import / export ou await au niveau supérieur provoque donc une SyntaxError. Pour exécuter un module ES, utilisez Engine::evalAsModule() depuis PHP (voir la API référence) ou regroupez d’abord le code.

Évaluer le code source

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

L’argument est évalué comme un script complet. Seule la sortie de console est affichée ; la valeur de la dernière expression ne l’est pas. phasis -e '1 + 2' n’affiche donc rien.

Afficher l’AST

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

Affiche l’arbre syntaxique sous forme de JSON (avec une indentation de deux espaces). Utile pour déboguer les problèmes d’analyse ou créer des outils basés sur Phasis. Pour un accès programmatique, utilisez le API analyseur.

bin/test262

bin/test262 exécute la suite officielle test262 sur Phasis. Elle sert de banc de régression lorsque vous contribuez au projet. L’instantané de la suite complète dans COMPAT.md est généré par le bin/compat-report associé, que la matrice CI lancée manuellement exécute en lots.

Exécuter une seule catégorie

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

Exécuter toute la suite

Shell
./bin/test262 --jobs 4

Configuration

Le lanceur lit config/support.php à la racine du projet. Sa liste test262_skipped_features est vide : aucune fonctionnalité test262 n’est ignorée, y compris tail-call-optimization. Le fichier répertorie aussi les catégories et les tests à exécuter de manière isolée.

La suite elle-même est le sous-module git test262 ; exécutez git submodule update --init test262 après le clonage. Sans elle, le lanceur quitte avec le message « test262 suite not found ».

Autres options utiles

Option Fonction
--failures afficher une ligne par test en échec
--limit N s’arrêter après les N premiers tests
--jobs N exécuter N tests en parallèle
--files-from file exécuter uniquement les tests répertoriés dans file
--json produire un résumé lisible par machine sur stdout
--no-progress masquer la ligne de progression

Consultez la section Compatibilité pour obtenir l’instantané le plus récent.

bin/wpt

bin/wpt exécute les tests Web Platform Tests importés dans tests/Wpt/fixtures/. Le corpus couvre URL, l’encodage, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, les flux WHATWG, l’ensemble des fonctionnalités crypto/SubtleCrypto, fetch/Request/Response, XMLHttpRequest/XMLHttpRequestUpload et WebSocket. Consultez API Web pour le tableau des taux de réussite par domaine.

Exécuter tous les tests importés

Shell
./bin/wpt

Exécuter une catégorie

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

Sortie par sous-test

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

Affiche chaque sous-test (PASS / FAIL) dans chaque test, avec les messages d’assertion en cas d’échec.

Sortie JSON

Shell
./bin/wpt --json

Résumé des réussites et des échecs lisible par machine, pour les pipelines CI ou l’analyse par script.

Remarques

  • Les tests qui utilisent Fetch démarrent automatiquement le serveur de test WPT inclus à tests/Wpt/fetch-server.php sur 127.0.0.1:8765 et l’arrêtent ensuite.
  • Le shim du banc de test à tests/Wpt/testharness-shim.js implémente uniquement les fonctionnalités WPT API utilisées par les tests importés (environ 400 lignes contre environ 3K lignes pour testharness.js complet).
  • Les tests source se trouvent dans tests/Wpt/upstream/ (un extrait sparse-checkout ignoré par git de web-platform-tests/wpt). Pour en importer davantage, copiez les fichiers .any.js depuis upstream/<area>/ vers fixtures/<category>/ : le lanceur les détectera automatiquement.

Codes de sortie

bin/phasis renvoie l’un de deux codes :

Code Signification
0 réussite — le script s’est exécuté jusqu’au bout (y compris après --ast)
1 autre résultat : exception JS non interceptée, erreur de syntaxe, fichier introuvable ou arguments invalides

Les erreurs du script affichent leur message sur stderr. Les arguments invalides et les fichiers manquants affichent la ligne d’aide sur stderr.

Limites de ressources

bin/phasis utilise les paramètres par défaut du moteur et ne propose aucune option pour limiter : une limite de pile d’appels de 4,096 cadres JS, une protection de 8,192 cadres pour les fermetures transpilées et la valeur par défaut maxLoopIterations de 100,000, qui ne s’applique qu’au code exécuté par l’interpréteur à parcours d’arbre (voir API: setLimit). Il n’y a pas de limite de temps ; enveloppez la commande dans timeout si un script risque de ne pas se terminer.