
# CLI

Phasis vključuje tri glavne izvedljive datoteke v `bin/`:

- **`bin/phasis`** — zažene datoteke JavaScript, ovrednoti izvorno kodo, podano v ukazni vrstici, in izpiše AST-je.
- **`bin/test262`** — zažene uradno zbirko testov skladnosti ECMAScript za Phasis.
- **`bin/wpt`** — zažene testne primere Web Platform Tests za Phasis (URL, kodiranje, fetch, glave, Blob, AbortSignal, tokovi, …).

Po `composer require phasis/phasis` so `bin/phasis` in `bin/test262` povezani iz `vendor/bin/`. Od tam deluje samo `bin/phasis`: `bin/test262` potrebuje podmodul `test262` git in testne razrede, ki jih paket Composer ne vključuje, `bin/wpt` pa sploh ni priložen. Oboje zaženite iz klona repozitorija Phasis.

## bin/phasis

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

To so vse tri oblike vmesnika. Ni lupine REPL, vhoda iz stdin ali zastavice za module.

### Zaženite datoteko

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

Izvede `script.js` kot klasični skript. Ko se izvajanje konča, se vse, kar je skript izpisal z `console.log` (in `console.error`, `console.warn`, …), naenkrat izpiše na stdout. Če skript sproži izjemo, se sporočilo o napaki izpiše na stderr, izhodna koda pa je 1.

Datoteka se vedno razčleni kot klasični skript, zato datoteka z `import` / `export` ali vrhnjim `await` povzroči napako SyntaxError. Za zagon modula ES uporabite `Engine::evalAsModule()` iz PHP (glejte referenco [API](https://phasis.inline0.dev/sl/docs/api#evalasmodule)) ali najprej združite kodo.

### Ovrednotenje izvorne kode

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

Argument se ovrednoti kot celoten skript. Izpiše se samo izhod `console`; vrednost zadnjega izraza se ne izpiše, zato `phasis -e '1 + 2'` ne izpiše ničesar.

### Izpis AST

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

Izpiše razčlenitveno drevo kot JSON (z zamikom dveh presledkov). Uporabno za odpravljanje težav razčlenjevalnika ali razvoj orodij na njegovi podlagi Phasis. Za programski dostop uporabite razčlenjevalnik [parser API](https://phasis.inline0.dev/sl/docs/parser).

## bin/test262

`bin/test262` zažene [uradno test262zbirko testov](https://github.com/tc39/test262) za Phasis. Uporabna je za regresijsko testiranje pri prispevanju sprememb. Posnetek celotne zbirke v `COMPAT.md` ustvari povezana `bin/compat-report`, ki jo ročno zagnana matrika CI izvaja po razdelkih.

### Zagon posamezne kategorije

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

### Zagon celotne zbirke

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

### Konfiguracija

Zaganjalnik bere `config/support.php` iz korenske mape projekta. Seznam `test262_skipped_features` je prazen: nobena funkcija test262 ni preskočena, vključno z `tail-call-optimization`. Datoteka vsebuje tudi seznam kategorij in testov, ki se morajo izvajati ločeno.

Zbirka je podmodul `test262` git; po kloniranju zaženite `git submodule update --init test262`. Brez njega se zaganjalnik konča s sporočilom »test262 suite not found«.

### Druge uporabne zastavice

| Zastavica | Namen |
|---|---|
| `--failures` | izpiše eno vrstico za vsak neuspešen test |
| `--limit N` | se ustavi po prvih N testih |
| `--jobs N` | vzporedno zažene N testov |
| `--files-from file` | zažene samo teste, navedene v `file` |
| `--json` | izpiše strojno berljiv povzetek na stdout |
| `--no-progress` | skrije vrstico napredka |

Za najnovejši posnetek glejte razdelek [Združljivost](https://phasis.inline0.dev/sl/docs/compatibility).

## bin/wpt

`bin/wpt` zažene preizkusne primere Web Platform Tests, uvožene v `tests/Wpt/fixtures/`. Korpus zajema URL, kodiranje, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, celoten nabor `crypto`/`SubtleCrypto`, `fetch`/`Request`/`Response`, `XMLHttpRequest`/`XMLHttpRequestUpload` in `WebSocket`. Za tabelo uspešnosti po področjih glejte [Spletni API-ji](https://phasis.inline0.dev/sl/docs/compatibility/web-apis).

### Zagon vseh uvoženih preizkusnih primerov

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

### Zagon ene kategorije

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

### Izpis posameznih podtestov

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

Izpiše vsak podtest (PASS / FAIL) znotraj posameznega preizkusnega primera, ob napakah pa tudi sporočila trditev.

### Izhod JSON

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

Strojno berljiv povzetek uspešnih in neuspešnih testov za cevovode CI ali skriptno analizo.

### Opombe

- Preizkusni primeri, ki uporabljajo Fetch, samodejno zaženejo priloženi testni strežnik WPT na `tests/Wpt/fetch-server.php` prek `127.0.0.1:8765` in ga nato ustavijo.
- Ovojnik za testni okvir na `tests/Wpt/testharness-shim.js` implementira samo tisti del API-ja WPT API, ki ga uporabljajo uvoženi preizkusni primeri (~400 vrstic v primerjavi s polno različico `testharness.js` z ~3K vrsticami).
- Izvorni preizkusni primeri so v `tests/Wpt/upstream/` (gitignored delna kopija [web-platform-tests/wpt](https://github.com/web-platform-tests/wpt)). Če želite uvoziti več primerov, kopirajte datoteke `.any.js` iz `upstream/<area>/` v `fixtures/<category>/`; zaganjalnik jih bo samodejno zaznal.

## Izhodne kode

`bin/phasis` se konča z eno od dveh kod:

| Koda | Pomen |
|---|---|
| `0` | uspeh — skript se je izvedel do konca (tudi po `--ast`) |
| `1` | karkoli drugega: neujeta izjema JS, sintaktična napaka, manjkajoča datoteka ali neveljavni argumenti |

Skript napake izpiše na stderr. Neveljavni argumenti in manjkajoče datoteke povzročijo izpis vrstice z navodili za uporabo na stderr.

## Omejitve virov

`bin/phasis` uporablja privzete nastavitve pogona in nima zastavic za omejitve: zgornja meja sklada klicev JS je 4 096 okvirjev, varovalna meja za transpilirana zaprtja pa 8 192 okvirjev. Privzeti `maxLoopIterations` je 100 000 in velja samo za kodo, ki jo izvaja interpreter z obhodom drevesa (glejte [API: setLimit](https://phasis.inline0.dev/sl/docs/api#setlimit)). Časovne omejitve ni; če se skript morda ne konča, ukaz ovijte v `timeout`.
