
# CLI

Phasis, `bin/` içinde üç ana yürütülebilir dosya sunar:

- **`bin/phasis`** — JavaScript dosyalarını çalıştırır, komut satırından iletilen kaynak kodunu değerlendirir ve AST'leri döker.
- **`bin/test262`** — Resmî ECMAScript uygunluk test paketini Phasis üzerinde çalıştırır.
- **`bin/wpt`** — Web Platform Tests fixture'larını Phasis üzerinde çalıştırır (URL, kodlama, fetch, başlıklar, Blob, AbortSignal, akışlar, …).

`composer require phasis/phasis` sonrasında `bin/phasis` ve `bin/test262`, `vendor/bin/` içinden bağlanır. Oradan yalnızca `bin/phasis` çalışır: `bin/test262` için `test262` git alt modülü ve Composer paketinde bulunmayan test sınıfları gerekir; ayrıca `bin/wpt` hiç dağıtıma eklenmez. İkisini de Phasis deposunun klonundan çalıştırın.

## bin/phasis

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

Arayüzün tamamı bu üç biçimden ibarettir. REPL, stdin girdisi veya modül bayrağı yoktur.

### Dosya çalıştırma

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

`script.js` öğesini klasik betik olarak çalıştırır. Tamamlandığında, betiğin `console.log` (ve `console.error`, `console.warn`, …) ile yazdığı her şey bir defada stdout'a yazdırılır. Betik hata fırlatırsa hata mesajı stderr'e yazılır ve çıkış durumu 1 olur.

Dosya her zaman klasik betik olarak ayrıştırılır; bu nedenle `import` / `export` veya üst düzey `await` içeren bir dosya SyntaxError hatası verir. ES modülü çalıştırmak için PHP içindeki `Engine::evalAsModule()` öğesini kullanın ([API başvurusuna](https://phasis.inline0.dev/tr/docs/api#evalasmodule) bakın) veya önce kodu paketleyin.

### Kaynak kodunu değerlendirme

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

Bağımsız değişkenin tamamı bir betik olarak değerlendirilir. Yalnızca `console` çıktısı yazdırılır; son ifadenin değeri yazdırılmaz, bu nedenle `phasis -e '1 + 2'` hiçbir şey yazdırmaz.

### AST'yi dökme

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

Ayrıştırma ağacını JSON olarak yazdırır (iki boşluk girintili). Ayrıştırıcı sorunlarını ayıklamak veya Phasis üzerine araçlar geliştirmek için kullanışlıdır. Programatik erişim için [ayrıştırıcıAPI](https://phasis.inline0.dev/tr/docs/parser) öğesini kullanın.

## bin/test262

`bin/test262`, [resmî test262 test paketini](https://github.com/tc39/test262) Phasis üzerinde çalıştırır. Değişikliklere katkı sağlarken regresyon test düzeneği olarak kullanışlıdır. `COMPAT.md` içindeki tam takım anlık görüntüsü, elle başlatılan CI matrisinin parçalara bölerek çalıştırdığı ilgili `bin/compat-report` tarafından üretilir.

### Tek bir kategoriyi çalıştırma

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

### Takımın tamamını çalıştırma

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

### Yapılandırma

Çalıştırıcı, proje kökünden `config/support.php` dosyasını okur. `test262_skipped_features` listesi boştur: `tail-call-optimization` dahil hiçbir test262 özelliği atlanmaz. Dosyada ayrıca kategoriler ve tek başına çalıştırılması gereken testler listelenir.

Test paketinin kendisi `test262` git alt modülüdür; klonladıktan sonra `git submodule update --init test262` çalıştırın. Bu olmadan çalıştırıcı "test262 suite not found" mesajıyla çıkar.

### Diğer kullanışlı bayraklar

| Bayrak | Amacı |
|---|---|
| `--failures` | Başarısız olan her test için bir satır yazdırır |
| `--limit N` | İlk N testten sonra durur |
| `--jobs N` | N testi paralel çalıştırır |
| `--files-from file` | Yalnızca `file` içinde listelenen testleri çalıştırır |
| `--json` | stdout'a makinece okunabilir özet yazar |
| `--no-progress` | İlerleme satırını gizler |

En son anlık görüntü için [Uyumluluk bölümüne](https://phasis.inline0.dev/tr/docs/compatibility) bakın.

## bin/wpt

`bin/wpt`, `tests/Wpt/fixtures/` içine aktarılan Web Platform Tests fixture'larını çalıştırır. Derlem; URL, kodlama, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, `crypto`/`SubtleCrypto` arayüzünün tamamını, `fetch`/`Request`/`Response`, `XMLHttpRequest`/`XMLHttpRequestUpload` ve `WebSocket` öğelerini kapsar. Alanlara göre geçiş oranı tablosu için [Web API'leri](https://phasis.inline0.dev/tr/docs/compatibility/web-apis) bölümüne bakın.

### Aktarılan tüm fixture'ları çalıştırma

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

### Tek bir kategoriyi çalıştırma

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

### Alt testlere göre çıktı

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

Her fixture içindeki tüm alt testleri (PASS / FAIL) yazdırır; başarısızlıklarda onaylama mesajlarını da gösterir.

### JSON çıktısı

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

CI işlem hatları veya betiklerle yapılan analiz için makine tarafından okunabilir başarı/başarısızlık özeti.

### Notlar

- Fetch kullanan fixture'lar, paketle gelen WPT test sunucusunu `tests/Wpt/fetch-server.php` adresinde `127.0.0.1:8765` üzerinde otomatik başlatır ve ardından kapatır.
- `tests/Wpt/testharness-shim.js` konumundaki harness shim'i, içe aktarılan fixture'ların kullandığı WPT API yüzeyini uygular (tam ~3K satırlık `testharness.js` ile karşılaştırıldığında ~400 satır).
- Kaynak fixture'lar `tests/Wpt/upstream/` konumunda bulunur ([web-platform-tests/wpt](https://github.com/web-platform-tests/wpt) deposunun git tarafından yok sayılan seyrek checkout'u). Daha fazlasını içe aktarmak için `upstream/<area>/` konumundaki `.any.js` dosyalarını `fixtures/<category>/` konumuna kopyalayın; çalıştırıcı bunları otomatik olarak alır.

## Çıkış kodları

`bin/phasis` iki koddan biriyle çıkar:

| Kod | Anlamı |
|---|---|
| `0` | başarı — betik, `--ast` sonrasında da tamamlanana kadar çalıştı |
| `1` | diğer her şey: yakalanmamış bir JS istisnası, sözdizimi hatası, eksik dosya veya geçersiz bağımsız değişkenler |

Betikten kaynaklanan hatalar iletileri stderr'e yazdırır. Geçersiz bağımsız değişkenler ve eksik dosyalar kullanım satırını stderr'e yazdırır.

## Kaynak sınırları

`bin/phasis`, motorun varsayılan ayarlarıyla çalışır ve sınırlar için bayrak sunmaz: 4,096 karelik JS çağrı yığını sınırı, dönüştürülmüş closure'lar için 8,192 karelik koruma ve yalnızca ağaç dolaşan yorumlayıcının çalıştırdığı kod için geçerli olan varsayılan `maxLoopIterations` değeri olan 100,000 (bkz. [API: setLimit](https://phasis.inline0.dev/tr/docs/api#setlimit)). Zaman sınırı yoktur; bir betiğin sonlanmama ihtimali varsa komutu `timeout` içine alın.
