
# CLI

A Phasis három fő végrehajtható fájlt tartalmaz a `bin/` helyen:

- **`bin/phasis`** — JavaScript fájlok futtatása, parancssorban megadott forráskód kiértékelése, AST-k kiíratása.
- **`bin/test262`** — a hivatalos ECMAScript megfelelőségi tesztcsomag futtatása a Phasis ellen.
- **`bin/wpt`** — a Web Platform Tests tesztfájljainak futtatása a Phasis ellen (URL, kódolás, fetch, fejlécek, Blob, AbortSignal, streamek, …).

A `composer require phasis/phasis` után a `bin/phasis` és a `bin/test262` a `vendor/bin/` helyről is elérhető. Onnan csak a `bin/phasis` működik: a `bin/test262` függ a `test262` git almodultól és a tesztosztályoktól, amelyeket a Composer csomag nem tartalmaz, a `bin/wpt` pedig egyáltalán nincs mellékelve. Mindkettőt a Phasis tároló klónjából futtassa.

## bin/phasis

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

Ez a három forma alkotja a teljes felületet. Nincs REPL, nincs stdin-bemenet és nincs moduljelző.

### Fájl futtatása

```bash
./vendor/bin/phasis script.js
```

A `script.js` fájlt klasszikus szkriptként hajtja végre. A futás végén a szkript által `console.log` segítségével kiírt összes tartalom (valamint a `console.error`, a `console.warn` és a többi) egyszerre jelenik meg a stdout kimeneten. Ha a szkript hibát dob, a hibaüzenet a stderr kimenetre kerül, a kilépési kód pedig 1 lesz.

A fájlt mindig klasszikus szkriptként értelmezi, ezért a `import` / `export` elemet vagy legfelső szintű `await` elemet tartalmazó fájl SyntaxError hibát eredményez. ES-modul futtatásához használja a `Engine::evalAsModule()` parancsot a PHP helyről (lásd a [API referenciát](https://phasis.inline0.dev/hu/docs/api#evalasmodule)), vagy előbb csomagolja össze a kódot.

### Forráskód kiértékelése

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

Az argumentumot teljes szkriptként értékeli ki. Csak a `console` kimenet jelenik meg; az utolsó kifejezés értéke nem, ezért a `phasis -e '1 + 2'` semmit sem ír ki.

### AST kiíratása

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

A szintaxisfát JSON formátumban írja ki (két szóközzel behúzva). Hasznos a parser hibáinak hibakereséséhez vagy a Phasis fölé épülő eszközök létrehozásához. Programozott hozzáféréshez használja a [parser API](https://phasis.inline0.dev/hu/docs/parser) felületet.

## bin/test262

A `bin/test262` a [hivatalos test262 tesztcsomagot](https://github.com/tc39/test262) futtatja a Phasis ellen. Módosítások közreműködéses fejlesztésekor regressziós tesztként használható. A teljes tesztcsomag pillanatfelvételét a `COMPAT.md` készíti a kapcsolódó `bin/compat-report` segítségével; ezt a kézzel indított CI-mátrix részekre bontva futtatja.

### Egy kategória futtatása

```bash
./bin/test262 --category built-ins/Array
```

### A teljes tesztcsomag futtatása

```bash
./bin/test262 --jobs 4
```

### Konfiguráció

A futtató a projekt gyökeréből olvassa be a `config/support.php` fájlt. A `test262_skipped_features` listája üres: egyetlen test262 funkciót sem hagy ki, a `tail-call-optimization` funkciót sem. A fájl felsorolja a kategóriákat és azokat a teszteket is, amelyeket elszigetelten kell futtatni.

Maga a tesztcsomag a `test262` git almodul; klónozás után futtassa a `git submodule update --init test262` parancsot. Enélkül a futtató a „test262 suite not found” üzenettel kilép.

### További hasznos kapcsolók

| Kapcsoló | Cél |
|---|---|
| `--failures` | egy sor kiírása minden sikertelen teszthez |
| `--limit N` | leállás az első N teszt után |
| `--jobs N` | N teszt párhuzamos futtatása |
| `--files-from file` | csak a `file` fájlban felsorolt tesztek futtatása |
| `--json` | géppel feldolgozható összefoglaló kiírása stdout kimenetre |
| `--no-progress` | a folyamatjelző sor elrejtése |

A legfrissebb pillanatfelvételért lásd a [Kompatibilitás részt](https://phasis.inline0.dev/hu/docs/compatibility).

## bin/wpt

A `bin/wpt` a `tests/Wpt/fixtures/` rendszerbe importált Web Platform Tests tesztfájlokat futtatja. A tesztkészlet a URL, kódolás, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, a teljes `crypto`/`SubtleCrypto` felület, a `fetch`/`Request`/`Response`, a `XMLHttpRequest`/`XMLHttpRequestUpload` és a `WebSocket` tesztjeit tartalmazza. Az egyes területek átmenési arányait tartalmazó táblázatért lásd a [Web APIs](https://phasis.inline0.dev/hu/docs/compatibility/web-apis) részt.

### Az összes importált tesztfájl futtatása

```bash
./bin/wpt
```

### Egy kategória futtatása

```bash
./bin/wpt --category headers
./bin/wpt --category streams
./bin/wpt --category blob
```

### Tesztenkénti kimenet

```bash
./bin/wpt --category abort --verbose
```

Minden tesztfájlon belül kiírja az összes résztesztet (PASS / FAIL), sikertelenség esetén az állítások üzeneteivel együtt.

### JSON kimenet

```bash
./bin/wpt --json
```

Géppel feldolgozható sikeres/sikertelen összefoglaló CI-folyamatokhoz vagy szkriptelt elemzéshez.

### Megjegyzések

- A Fetchet érintő tesztfájlok automatikusan elindítják a mellékelt WPT-tesztkiszolgálót a `tests/Wpt/fetch-server.php` címen, a `127.0.0.1:8765` protokollon, majd utána leállítják.
- A `tests/Wpt/testharness-shim.js` helyen található tesztkörnyezet-kiegészítő a WPT API felületéből csak azt valósítja meg, amit az importált tesztfájlok használnak (~400 sor a teljes, ~3K soros `testharness.js` helyett).
- A forrás tesztfájlok a `tests/Wpt/upstream/` helyen találhatók (a [web-platform-tests/wpt](https://github.com/web-platform-tests/wpt) ritkított, git által figyelmen kívül hagyott checkoutja). További tesztfájlok importálásához másolja át a `.any.js` fájlokat a `upstream/<area>/` helyről a `fixtures/<category>/` helyre; a futtató ezután automatikusan felismeri őket.

## Kilépési kódok

A `bin/phasis` két lehetséges kóddal lép ki:

| Kód | Jelentés |
|---|---|
| `0` | siker — a szkript a végéig lefutott (a `--ast` után is) |
| `1` | minden más eset: el nem kapott JS kivétel, szintaktikai hiba, hiányzó fájl vagy érvénytelen argumentum |

A szkript hibái a saját üzenetükkel együtt a stderr kimenetre kerülnek. Érvénytelen argumentumok és hiányzó fájlok esetén a használati útmutató sora jelenik meg a stderr kimeneten.

## Erőforráskorlátok

A `bin/phasis` a motor alapértelmezéseivel fut, és nincsenek korlátokat beállító kapcsolói: a 4,096 keretes JS hívásverem-korlát, a transzpilált lezárások 8,192 keretes védelme és az alapértelmezett `maxLoopIterations` (100,000); ez csak a faalapú értelmező által futtatott kódra vonatkozik (lásd: [API: setLimit](https://phasis.inline0.dev/hu/docs/api#setlimit)). Időkorlát nincs; ha egy szkript esetleg nem áll le, futtassa a parancsot a `timeout` segítségével.
