
# CLI

Phasis levereras med tre huvudsakliga körbara filer i `bin/`:

- **`bin/phasis`** — kör JavaScript-filer, utvärderar källkod som skickas på kommandoraden och dumpar AST:er.
- **`bin/test262`** — kör den officiella ECMAScript-konformitetssviten mot Phasis.
- **`bin/wpt`** — kör Web Platform Tests-fixtures mot Phasis (URL, kodning, fetch, headers, Blob, AbortSignal, streams, …).

Efter `composer require phasis/phasis` länkas `bin/phasis` och `bin/test262` från `vendor/bin/`. Därifrån fungerar bara `bin/phasis`: `bin/test262` kräver undermodulen `test262` git och testklasserna, som paketet Composer inte innehåller, och `bin/wpt` levereras inte alls. Kör båda från en klon av arkivet Phasis.

## bin/phasis

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

Det här är hela gränssnittet: inga REPL, ingen indata från stdin och ingen modulflagga.

### Kör en fil

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

Kör `script.js` som ett klassiskt skript. När det är klart skrivs allt som skriptet skickade till `console.log` (och `console.error`, `console.warn`, …) ut på stdout på en gång. Om skriptet kastar ett undantag skrivs felmeddelandet till stderr och avslutningsstatusen blir 1.

Filen tolkas alltid som ett klassiskt skript, så en fil med `import` / `export` eller `await` på toppnivå ger ett SyntaxError. Om du vill köra en ES-modul använder du `Engine::evalAsModule()` från PHP (se referensen [API](https://phasis.inline0.dev/sv/docs/api#evalasmodule)) eller paketerar koden först.

### Utvärdera källkod

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

Argumentet utvärderas som ett komplett skript. Endast utdata från `console` skrivs ut; värdet från det sista uttrycket gör det inte, så `phasis -e '1 + 2'` skriver inte ut något.

### Skriv ut AST

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

Skriver ut syntaxträdet som JSON (indenterat med två blanksteg). Användbart för felsökning av parserproblem eller för att bygga verktyg ovanpå Phasis. Använd [parsern API](https://phasis.inline0.dev/sv/docs/parser) för programmatisk åtkomst.

## bin/test262

`bin/test262` kör den [officiella test262-sviten](https://github.com/tc39/test262) mot Phasis. Den är användbar som regressionstest när du bidrar med ändringar. Ögonblicksbilden av hela sviten i `COMPAT.md` skapas av den relaterade `bin/compat-report`, som den manuellt startade CI-matrisen kör uppdelad i delmängder.

### Kör en enskild kategori

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

### Kör hela sviten

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

### Konfiguration

Körprogrammet läser `config/support.php` från projektroten. Listan `test262_skipped_features` är tom: ingen test262-funktion hoppas över, inklusive `tail-call-optimization`. Filen listar också kategorierna och testerna som måste köras isolerat.

Själva sviten är delmodulen `test262` git; kör `git submodule update --init test262` efter kloning. Utan den avslutas körprogrammet med meddelandet "test262 suite not found".

### Andra användbara flaggor

| Flagga | Syfte |
|---|---|
| `--failures` | skriv ut en rad för varje test som misslyckas |
| `--limit N` | avbryt efter de första N testerna |
| `--jobs N` | kör N tester parallellt |
| `--files-from file` | kör endast testerna som listas i `file` |
| `--json` | skriv ut en maskinläsbar sammanfattning på stdout |
| `--no-progress` | dölj förloppsraden |

Se avsnittet [Kompatibilitet](https://phasis.inline0.dev/sv/docs/compatibility) för den senaste ögonblicksbilden.

## bin/wpt

`bin/wpt` kör Web Platform Tests-testfixturerna som importerats till `tests/Wpt/fixtures/`. Korpusen omfattar URL, kodning, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, hela ytan för `crypto`/`SubtleCrypto`, `fetch`/`Request`/`Response`, `XMLHttpRequest`/`XMLHttpRequestUpload` och `WebSocket`. Se [Webb-API:er](https://phasis.inline0.dev/sv/docs/compatibility/web-apis) för tabellen med godkända tester per område.

### Kör alla importerade testfixturer

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

### Kör en kategori

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

### Utdata per deltest

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

Skriver ut varje deltest (PASS / FAIL) i varje testfixtur, med meddelanden från påståenden som misslyckats.

### JSON-utdata

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

Maskinläsbar sammanfattning av godkända och underkända tester för CI-pipelines eller skriptbaserad analys.

### Anteckningar

- Testfixturer som använder fetch startar automatiskt den medföljande WPT-testservern på `tests/Wpt/fetch-server.php` på `127.0.0.1:8765` och stänger sedan av den.
- Testharneskets shim på `tests/Wpt/testharness-shim.js` implementerar bara den WPT-yta API som de importerade testfixturerna använder (~400 rader jämfört med hela `testharness.js` på cirka 3 000 rader).
- Källtestfixturerna finns i `tests/Wpt/upstream/` (en gitignore:ad gles utcheckning av [web-platform-tests/wpt](https://github.com/web-platform-tests/wpt)). Om du vill importera fler kopierar du `.any.js`-filer från `upstream/<area>/` till `fixtures/<category>/`, så hittar körprogrammet dem automatiskt.

## Avslutningskoder

`bin/phasis` avslutas med en av två koder:

| Kod | Betydelse |
|---|---|
| `0` | lyckades — skriptet kördes klart (även efter `--ast`) |
| `1` | allt annat: ett ohanterat JS-undantag, ett syntaxfel, en saknad fil eller ogiltiga argument |

Fel från skriptet skriver ut sitt meddelande till stderr. Ogiltiga argument och saknade filer skriver ut användningsraden till stderr.

## Resursgränser

`bin/phasis` körs med motorns standardvärden och saknar flaggor för gränser: ett tak på 4 096 ramar i JS-anropsstacken, en gräns på 8 192 ramar för transpilerade closures och standardvärdet 100 000 för `maxLoopIterations`, som bara gäller kod som trädtolkaren kör (se [API: setLimit](https://phasis.inline0.dev/sv/docs/api#setlimit)). Det finns ingen tidsgräns; använd `timeout` runt kommandot om ett skript kanske inte avslutas.
