
# CLI

Phasis sisaldab `bin/`-s kolme peamist käivitatavat faili:

- **`bin/phasis`** — käivitab JavaScript-faile, hindab käsurealt antud lähtekoodi ja väljastab AST-puid.
- **`bin/test262`** — käivitab ametliku ECMAScripti vastavustestide komplekti Phasis-i vastu.
- **`bin/wpt`** — käivitab Web Platform Testsi testandmeid Phasis-i vastu (URL, kodeering, fetch, päised, Blob, AbortSignal, vood, …).

Pärast `composer require phasis/phasis`-i on `bin/phasis` ja `bin/test262` lingitud paketist `vendor/bin/`. Sealt töötab ainult `bin/phasis`: `bin/test262` vajab `test262` git-alammoodulit ja testiklasse, mida pakett Composer ei sisalda, ning `bin/wpt` ei tarnita üldse. Käivita mõlemad hoidla Phasis kloonist.

## bin/phasis

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

Need kolm vormi moodustavad kogu liidese. REPL-i ega standardse sisendi tuge pole ning moodulilippu ei ole.

### Faili käivitamine

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

Käivitab `script.js`-i klassikalise skriptina. Kui see on lõpetanud, väljastatakse kõik, mida skript kirjutas funktsioonidega `console.log` (ja `console.error`, `console.warn`, …), korraga standardsesse väljundvoogu. Kui skript viskab vea, väljastatakse veateade standardsesse veavoogu ja väljumisolek on 1.

Faili parsitakse alati klassikalise skriptina, seega fail `import` / `export`-ga või tipptaseme `await`-ga põhjustab SyntaxErrori. ES-mooduli käivitamiseks kasuta `Engine::evalAsModule()`-i paketist PHP (vt [API viide](https://phasis.inline0.dev/et/docs/api#evalasmodule)) või seo kood esmalt kokku.

### Lähtekoodi hindamine

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

Argumenti hinnatakse täieliku skriptina. Väljastatakse ainult `console` väljund; viimase avaldise väärtust mitte, seega `phasis -e '1 + 2'` ei väljasta midagi.

### AST väljastamine

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

Väljastab parsipuu JSON-na (taandega kaks tühikut). Kasulik parseriprobleemide silumiseks või Phasis-i peale tööriistade ehitamiseks. Programmilise ligipääsu jaoks kasuta [parserit API](https://phasis.inline0.dev/et/docs/parser).

## bin/test262

`bin/test262` käivitab [ametliku test262 komplekti](https://github.com/tc39/test262) Phasis-i vastu. See on kasulik regressioonitestide käitajana muudatuste lisamisel. Täieliku komplekti hetktõmmis failis `COMPAT.md` luuakse seotud `bin/compat-report` abil, mille käsitsi käivitatav CI-maatriks jagab osadeks.

### Ühe kategooria käivitamine

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

### Kogu komplekti käivitamine

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

### Seadistus

Käivitaja loeb projekti juurkataloogist faili `config/support.php`. Selle loend `test262_skipped_features` on tühi: ühtegi test262 funktsiooni ei jäeta vahele, sealhulgas `tail-call-optimization`. Failis on kirjas ka kategooriad ja testid, mis tuleb eraldi käivitada.

Testikomplekt ise on git-alammoodul `test262`; käivita `git submodule update --init test262` pärast kloonimist. Kui see puudub, lõpetab käivitaja veaga "test262 suite not found".

### Muud kasulikud lipud

| Lipp | Eesmärk |
|---|---|
| `--failures` | väljastab iga ebaõnnestunud testi kohta ühe rea |
| `--limit N` | peatub pärast esimest N testi |
| `--jobs N` | käivitab N testi paralleelselt |
| `--files-from file` | käivitab ainult failis `file` loetletud testid |
| `--json` | väljastab standardsesse väljundvoogu masinloetava kokkuvõtte |
| `--no-progress` | peidab edenemisrea |

Viimast hetktõmmist vaata jaotisest [Ühilduvus](https://phasis.inline0.dev/et/docs/compatibility).

## bin/wpt

`bin/wpt` käivitab `tests/Wpt/fixtures/`-i imporditud Web Platform Testsi testandmeid. Korpus hõlmab URL-i, kodeeringut, atob/btoa-d, structuredClone'i, performance'i, Headersit, Blob/File'i, AbortController/Signali, EventTargeti, FormData-t, WHATWG vooge, kogu `crypto`/`SubtleCrypto`-i liidest, `fetch`/`Request`/`Response`-i, `XMLHttpRequest`/`XMLHttpRequestUpload`-i ja `WebSocket`-i. Valdkondade läbimismäärade tabelit vaata jaotisest [Veebi API-d](https://phasis.inline0.dev/et/docs/compatibility/web-apis).

### Kõigi imporditud testandmete käivitamine

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

### Ühe kategooria käivitamine

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

### Alamtestide väljund

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

Väljastab iga testandmeüksuse kõik alamtestid (PASS / FAIL) ja tõrgete korral väidete veateated.

### JSON väljund

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

Masinloetav läbimise/ebaõnnestumise kokkuvõte CI torujuhtmete või skriptitud analüüsi jaoks.

### Märkused

- Tõmbetoiminguid sisaldavad testfixture'id käivitavad automaatselt kaasasoleva WPT testserveri aadressil `tests/Wpt/fetch-server.php` pordis `127.0.0.1:8765` ja sulgevad selle pärast.
- Testikarkassi asenduskiht failis `tests/Wpt/testharness-shim.js` rakendab ainult seda WPT API liidest, mida imporditud testfixture'id kasutavad (~400 rida võrreldes täieliku ~3K-realise `testharness.js`-ga).
- Lähtefixture'id asuvad kataloogis `tests/Wpt/upstream/` (gitignore'iga välistatud hõrecheckout kataloogist [web-platform-tests/wpt](https://github.com/web-platform-tests/wpt)). Lisatavate failide importimiseks kopeerige `.any.js` failid kataloogist `upstream/<area>/` kataloogi `fixtures/<category>/` ja käivitaja leiab need automaatselt üles.

## Väljumiskoodid

`bin/phasis` lõpetab töö ühega kahest koodist:

| Kood | Tähendus |
|---|---|
| `0` | õnnestus — skript töötas lõpuni (ka pärast `--ast`) |
| `1` | kõik muu: püüdmata JS erind, süntaksiviga, puuduv fail või vigased argumendid |

Skripti vead väljastatakse standardveavoogu. Vigaste argumentide ja puuduvate failide korral väljastatakse standardveavoogu kasutusjuhise rida.

## Ressursipiirangud

`bin/phasis` töötab mootori vaikesätetega ja piirangute jaoks lippe pole: 4,096-kaadriline JS väljakutsepinu piir, transpileeritud sulundite 8,192-kaadriline kaitse ning vaikeväärtus `maxLoopIterations` 100,000, mis kehtib ainult koodile, mida käivitab puu läbiv interpretaator (vt [API: setLimit](https://phasis.inline0.dev/et/docs/api#setlimit)). Ajapiirangut pole; kui skript ei pruugi lõpetada, käivitage käsk `timeout` abil.
