
# CLI

Phasis pakotnē ir trīs galvenie izpildfaili `bin/`:

- **`bin/phasis`** — izpildīt JavaScript failus, novērtēt komandrindā nodoto pirmkodu, izvadīt AST kokus.
- **`bin/test262`** — palaist oficiālo ECMAScript atbilstības testu komplektu pret Phasis.
- **`bin/wpt`** — palaist Web Platform Tests testu datnes pret Phasis (URL, kodējums, fetch, galvenes, Blob, AbortSignal, plūsmas, …).

Pēc `composer require phasis/phasis` `bin/phasis` un `bin/test262` ir saistīti ar `vendor/bin/`. No turienes darbojas tikai `bin/phasis`: `bin/test262` vajadzīgs `test262` git apakšmodulis un testu klases, kas nav iekļautas Composer pakotnē, bet `bin/wpt` vispār netiek piegādāts. Palaidiet abus no Phasis repozitorija klona.

## bin/phasis

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

Šīs trīs formas veido visu saskarni. Nav ne REPL, ne stdin ievades, ne moduļa karodziņa.

### Palaist failu

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

Izpilda `script.js` kā klasisku skriptu. Kad tas pabeidz darbu, viss, ko skripts ierakstījis ar `console.log` (un `console.error`, `console.warn`, …), tiek uzreiz izvadīts stdout. Ja skripts izmet kļūdu, kļūdas ziņojums tiek izvadīts stderr, bet izejas statuss ir 1.

Fails vienmēr tiek parsēts kā klasisks skripts, tāpēc fails ar `import` / `export` vai augšējā līmeņa `await` izraisa SyntaxError. Lai palaistu ES moduli, izmantojiet `Engine::evalAsModule()` no PHP (skatiet [API atsaucē](https://phasis.inline0.dev/lv/docs/api#evalasmodule)) vai vispirms apvienojiet kodu.

### Novērtēt pirmkodu

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

Arguments tiek novērtēts kā pilnīgs skripts. Tiek izvadīta tikai `console` izvade; pēdējās izteiksmes vērtība netiek izvadīta, tāpēc `phasis -e '1 + 2'` neko neizvada.

### Izvadīt AST koku

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

Izvada parsēšanas koku kā JSON (ar divu atstarpju atkāpi). Noder, lai atkļūdotu parsētāja problēmas vai veidotu rīkus, kas izmanto Phasis. Programmātiskai piekļuvei izmantojiet [parsētāja API](https://phasis.inline0.dev/lv/docs/parser).

## bin/test262

`bin/test262` izpilda [oficiālo test262 testu komplektu](https://github.com/tc39/test262) pret Phasis. Tas ir noderīgs regresiju testēšanas rīks, iesniedzot izmaiņas. Pilnā testu komplekta momentuzņēmumu `COMPAT.md` izveido saistītais `bin/compat-report`, ko manuāli palaistā CI matrica izpilda daļās.

### Palaist vienu kategoriju

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

### Palaist pilnu testu komplektu

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

### Konfigurācija

Izpildītājs nolasa `config/support.php` no projekta saknes. Tā `test262_skipped_features` saraksts ir tukšs: netiek izlaista neviena test262 funkcija, tostarp `tail-call-optimization`. Failā ir uzskaitītas arī kategorijas un testi, kas jāpalaiž izolēti.

Pats testu komplekts ir `test262` git apakšmodulis; pēc klonēšanas palaidiet `git submodule update --init test262`. Ja tā nav, izpildītājs beidz darbu ar ziņojumu "test262 suite not found".

### Citi noderīgi karodziņi

| Karodziņš | Mērķis |
|---|---|
| `--failures` | izvadīt vienu rindu par katru nesekmīgu testu |
| `--limit N` | apstāties pēc pirmajiem N testiem |
| `--jobs N` | izpildīt N testus paralēli |
| `--files-from file` | izpildīt tikai `file` uzskaitītos testus |
| `--json` | stdout izvadīt mašīnlasāmu kopsavilkumu |
| `--no-progress` | nerādīt progresa rindu |

Jaunāko momentuzņēmumu skatiet sadaļā [Saderība](https://phasis.inline0.dev/lv/docs/compatibility).

## bin/wpt

`bin/wpt` izpilda `tests/Wpt/fixtures/` importētās Web Platform Tests testa datnes. Testu kopums aptver URL, kodējumu, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, pilnu `crypto`/`SubtleCrypto` saskarni, `fetch`/`Request`/`Response`, `XMLHttpRequest`/`XMLHttpRequestUpload` un `WebSocket`. Katras jomas izturēto testu rādītājus skatiet sadaļā [Tīmekļa API](https://phasis.inline0.dev/lv/docs/compatibility/web-apis).

### Palaist visas importētās testa datnes

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

### Palaist vienu kategoriju

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

### Izvade par katru apakštestu

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

Izvada katru apakštestu (PASS / FAIL) katrā testa datnē un kļūmju gadījumā parāda apgalvojumu ziņojumus.

### JSON izvade

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

Mašīnlasāms izturēto un neizturēto testu kopsavilkums CI konveijeriem vai skriptētai analīzei.

### Piezīmes

- Testa datnes, kas izmanto Fetch, automātiski palaiž komplektā iekļauto WPT testu serveri vietnē `tests/Wpt/fetch-server.php`, izmantojot `127.0.0.1:8765`, un pēc tam to aptur.
- Testu ietvara apvalks `tests/Wpt/testharness-shim.js` ievieš tikai to WPT API saskarnes daļu, ko izmanto importētās testa datnes (~400 rindas salīdzinājumā ar pilno, ~3K rindu `testharness.js`).
- Avota testa datnes atrodas `tests/Wpt/upstream/` ([web-platform-tests/wpt](https://github.com/web-platform-tests/wpt) git ignorētā retā izraksta versija). Lai importētu vēl citas, kopējiet `.any.js` failus no `upstream/<area>/` uz `fixtures/<category>/`, un izpildītājs tos automātiski atradīs.

## Izejas kodi

`bin/phasis` beidz darbu ar vienu no diviem kodiem:

| Kods | Nozīme |
|---|---|
| `0` | veiksmīgi — skripts izpildīts līdz galam (arī pēc `--ast`) |
| `1` | jebkura cita kļūme: neuztverts JS izņēmums, sintakses kļūda, trūkstošs fails vai nederīgi argumenti |

Skripta kļūdu ziņojumi tiek izvadīti stderr. Nederīgu argumentu un trūkstošu failu gadījumā stderr tiek izvadīta lietošanas instrukcijas rinda.

## Resursu ierobežojumi

`bin/phasis` darbojas ar dzinēja noklusējuma iestatījumiem, un tam nav ierobežojumu karodziņu: 4,096 kadru JS izsaukumu steka limits, 8,192 kadru sargs transpēlētajiem aizvērumiem un noklusējuma `maxLoopIterations` — 100,000, kas attiecas tikai uz koda daļu, ko izpilda koka pastaigas interpretētājs (skatiet [API: setLimit](https://phasis.inline0.dev/lv/docs/api#setlimit)). Laika ierobežojuma nav; ja skripts var nebeigt darbu, aptveriet komandu ar `timeout`.
