コンテンツへスキップ

CLI

Phasisには、bin/に3つの主要な実行ファイルがあります。

  • bin/phasis — JavaScriptファイルを実行し、コマンドラインで渡されたソースを評価し、ASTを出力します。
  • bin/test262 — Phasisに対して公式ECMAScript適合性テストを実行します。
  • bin/wpt — Phasisに対してWeb Platform Testsのフィクスチャを実行します(URL、エンコーディング、fetch、ヘッダー、Blob、AbortSignal、ストリームなど)。

composer require phasis/phasisの後、bin/phasisとbin/test262はvendor/bin/からリンクされています。そこから動作するのはbin/phasisだけです。bin/test262にはtest262のgitサブモジュールとテストクラスが必要ですが、Composerパッケージには含まれていません。また、bin/wptはそもそも同梱されていません。どちらもPhasisリポジトリのクローンから実行してください。

bin/phasis

コード
phasis <file.js> | phasis -e '<source>' | phasis --ast <file.js>

この3つの形式がインターフェースのすべてです。REPL、標準入力、モジュールフラグはありません。

ファイルを実行する

シェル
./vendor/bin/phasis script.js

script.jsをクラシックスクリプトとして実行します。実行が完了すると、スクリプトがconsole.log(およびconsole.error、console.warnなど)で書き込んだ内容が、一度に標準出力へ出力されます。スクリプトが例外をスローすると、エラーメッセージは標準エラー出力に送られ、終了ステータスは1になります。

ファイルは常にクラシックスクリプトとして解析されるため、import / exportやトップレベルawaitを含むファイルはSyntaxErrorになります。ESモジュールを実行するには、PHPからEngine::evalAsModule()を使う(APIリファレンスを参照)か、先にコードをバンドルしてください。

ソースを評価する

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

引数はスクリプト全体として評価されます。出力されるのはconsoleの出力だけで、最後の式の値は出力されません。そのため、phasis -e '1 + 2'は何も出力しません。

ASTを出力する

シェル
./vendor/bin/phasis --ast script.js
./vendor/bin/phasis -e 'a + b' --ast

解析ツリーをJSON形式で出力します(2スペースでインデント)。パーサーの問題をデバッグするときや、Phasis上にツールを構築するときに役立ちます。プログラムからアクセスするには、パーサーAPIを使ってください。

bin/test262

bin/test262は、Phasisに対して公式test262スイートを実行します。変更を加える際の回帰テストに便利です。COMPAT.mdにある全スイートのスナップショットは、関連するbin/compat-reportが生成します。手動で開始するCIマトリックスでは、これを複数のシャードに分けて実行します。

カテゴリを1つ実行する

シェル
./bin/test262 --category built-ins/Array

スイート全体を実行する

シェル
./bin/test262 --jobs 4

設定

ランナーはプロジェクトのルートからconfig/support.phpを読み込みます。test262_skipped_featuresのリストは空なので、tail-call-optimizationを含め、test262の機能は何もスキップされません。このファイルには、カテゴリと単独で実行する必要があるテストも記載されています。

スイート本体はtest262のgitサブモジュールです。クローン後にgit submodule update --init test262を実行してください。これがない場合、ランナーは「test262 suite not found」と表示して終了します。

その他の便利なフラグ

フラグ 用途
--failures 失敗したテストごとに1行を出力する
--limit N 最初のN件のテストを実行した時点で停止する
--jobs N N件のテストを並列実行する
--files-from file fileに記載されたテストだけを実行する
--json 機械処理可能なサマリーを標準出力に出力する
--no-progress 進捗行の出力を抑制する

最新のスナップショットは互換性のセクションを参照してください。

bin/wpt

bin/wptは、tests/Wpt/fixtures/に取り込まれたWeb Platform Testsのフィクスチャを実行します。テスト対象はURL、エンコーディング、atob/btoa、structuredClone、performance、Headers、Blob/File、AbortController/Signal、EventTarget、FormData、WHATWG Streams、crypto / SubtleCryptoの全機能、fetch / Request / Response、XMLHttpRequest / XMLHttpRequestUpload、WebSocketです。領域ごとの合格率はWeb APIsを参照してください。

取り込んだすべてのフィクスチャを実行する

シェル
./bin/wpt

カテゴリを1つ実行する

シェル
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob

サブテストごとの出力

シェル
./bin/wpt --category abort --verbose

各フィクスチャ内のすべてのサブテスト(PASS / FAIL)を、失敗時のアサーションメッセージとともに出力します。

JSON出力

シェル
./bin/wpt --json

CIパイプラインやスクリプトによる分析向けに、機械処理可能な合否サマリーを出力します。

注意事項

  • Fetchを使うフィクスチャでは、127.0.0.1:8765上のtests/Wpt/fetch-server.phpでバンドル済みWPTテストサーバーが自動起動し、実行後に停止します。
  • tests/Wpt/testharness-shim.jsにあるハーネスのシムは、取り込んだフィクスチャが使うWPTのAPI機能だけを実装します(全体では約3K行のtestharness.jsに対し、約400行)。
  • ソースフィクスチャはtests/Wpt/upstream/にあります(web-platform-tests/wptのgitignore対象のスパースチェックアウト)。追加で取り込むには、upstream/<area>/から.any.jsファイルをfixtures/<category>/にコピーしてください。ランナーが自動的に検出します。

終了コード

bin/phasisは2種類の終了コードを返します。

コード 意味
0 成功 — スクリプトが最後まで実行された(--astの後も含む)
1 その他すべて:未捕捉のJS例外、構文エラー、ファイルの欠落、無効な引数

スクリプトのエラーはメッセージが標準エラー出力に出力されます。無効な引数やファイルの欠落がある場合は、使用方法を示す行が標準エラー出力に出力されます。

リソース上限

bin/phasisはエンジンのデフォルト設定で動作し、上限を指定するフラグはありません。JSコールスタックの上限は4,096フレーム、トランスパイル済みクロージャーのガードは8,192フレームです。また、デフォルトのmaxLoopIterationsは100,000で、ツリーウォーキングインタープリターが実行するコードにのみ適用されます(API: setLimitを参照)。時間制限はありません。終了しない可能性のあるスクリプトには、コマンドをtimeoutで囲んでください。