
# CLI

Phasis leveres med tre primære eksekverbare programmer i `bin/`:

- **`bin/phasis`** — kør JavaScript-filer, evaluér kildekode sendt på kommandolinjen, og dump AST'er.
- **`bin/test262`** — kør den officielle ECMAScript-overensstemmelsestestpakke mod Phasis.
- **`bin/wpt`** — kør Web Platform Tests-fixtures mod Phasis (URL, kodning, fetch, headere, Blob, AbortSignal, streams, …).

Efter `composer require phasis/phasis` linkes `bin/phasis` og `bin/test262` fra `vendor/bin/`. Derfra fungerer kun `bin/phasis`: `bin/test262` kræver git-submodulet `test262` og testklasserne, som pakken Composer ikke indeholder, og `bin/wpt` leveres slet ikke. Kør begge fra en klon af Phasis-repositoryet.

## bin/phasis

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

Disse tre former udgør hele grænsefladen. Der er ingen REPL, intet stdin-input og intet modulflag.

### Kør en fil

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

Kører `script.js` som et klassisk script. Når det er færdigt, udskrives alt, hvad scriptet skrev med `console.log` (og `console.error`, `console.warn`, …), på én gang til stdout. Hvis scriptet udløser en fejl, sendes fejlmeddelelsen til stderr, og afslutningsstatus er 1.

Filen parses altid som et klassisk script, så en fil med `import` / `export` eller `await` på topniveau udløser en SyntaxError. Hvis du vil køre et ES-modul, skal du bruge `Engine::evalAsModule()` fra PHP (se [API-referencen](https://phasis.inline0.dev/da/docs/api#evalasmodule)) eller først samle koden i en bundle.

### Evaluér kildekode

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

Argumentet evalueres som et komplet script. Kun output fra `console` udskrives; værdien af det sidste udtryk gør ikke, så `phasis -e '1 + 2'` udskriver ingenting.

### Dump AST'et

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

Udskriver parsetræet som JSON (indrykket med to mellemrum). Nyttigt til fejlfinding af parserproblemer eller til at bygge værktøjer oven på Phasis. Til programmatisk adgang skal du bruge [parserenAPI](https://phasis.inline0.dev/da/docs/parser).

## bin/test262

`bin/test262` kører den [officielle test262-testpakke](https://github.com/tc39/test262) mod Phasis. Den er nyttig som regressionsværktøj, når du bidrager med ændringer. Øjebliksbilledet af hele testpakken i `COMPAT.md` genereres af den tilhørende `bin/compat-report`, som den manuelt startede CI-matrix kører i shards.

### Kør en enkelt kategori

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

### Kør hele testpakken

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

### Konfiguration

Runneren læser `config/support.php` fra projektroden. Dens `test262_skipped_features`-liste er tom: ingen test262-funktioner springes over, heller ikke `tail-call-optimization`. Filen angiver også kategorierne og de tests, der skal køre isoleret.

Selve testpakken er `test262`-git-submodulet; kør `git submodule update --init test262` efter kloning. Uden det afslutter runneren med "test262 suite not found".

### Andre nyttige flag

| Flag | Formål |
|---|---|
| `--failures` | udskriv én linje pr. fejlslagen test |
| `--limit N` | stop efter de første N tests |
| `--jobs N` | kør N tests parallelt |
| `--files-from file` | kør kun de tests, der er angivet i `file` |
| `--json` | udsend maskinlæsbar oversigt til stdout |
| `--no-progress` | skjul statuslinjen |

Se [afsnittet om kompatibilitet](https://phasis.inline0.dev/da/docs/compatibility) for det seneste øjebliksbillede.

## bin/wpt

`bin/wpt` kører Web Platform Tests-fixtures, der er importeret til `tests/Wpt/fixtures/`. Samlingen dækker URL, kodning, atob/btoa, structuredClone, performance, Headers, Blob/File, AbortController/Signal, EventTarget, FormData, WHATWG Streams, hele `crypto`/`SubtleCrypto`-overfladen, `fetch`/`Request`/`Response`, `XMLHttpRequest`/`XMLHttpRequestUpload` og `WebSocket`. Se [Web-API'er](https://phasis.inline0.dev/da/docs/compatibility/web-apis) for tabellen over beståelsesprocenter for de enkelte områder.

### Kør alle importerede fixtures

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

### Kør én kategori

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

### Output pr. deltest

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

Udskriver hver deltest (PASS / FAIL) i hver fixture med påstandsmeddelelser ved fejl.

### JSON-output

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

Maskinlæsbar bestået/fejlet-oversigt til CI-pipelines eller scripts til analyse.

### Bemærkninger

- Fixtures, der bruger fetch, starter automatisk den medfølgende WPT-testserver på `tests/Wpt/fetch-server.php` på `127.0.0.1:8765` og lukker den ned bagefter.
- Harness-shimmen i `tests/Wpt/testharness-shim.js` implementerer kun den WPT-API-overflade, som de importerede fixtures bruger (~400 linjer sammenlignet med den fulde `testharness.js` på ~3K linjer).
- Kildefixtures ligger i `tests/Wpt/upstream/` (en gitignoret sparse-checkout af [web-platform-tests/wpt](https://github.com/web-platform-tests/wpt)). Hvis du vil importere flere, skal du kopiere `.any.js`-filer fra `upstream/<area>/` til `fixtures/<category>/`; så finder runneren dem automatisk.

## Afslutningskoder

`bin/phasis` afsluttes med en af to koder:

| Kode | Betydning |
|---|---|
| `0` | succes — scriptet blev kørt færdigt (også efter `--ast`) |
| `1` | alt andet: en ikke-indfanget JS-undtagelse, en syntaksfejl, en manglende fil eller ugyldige argumenter |

Fejl fra scriptet udskriver deres meddelelse til stderr. Ugyldige argumenter og manglende filer udskriver brugsanvisningslinjen til stderr.

## Ressourcegrænser

`bin/phasis` kører med motorens standardindstillinger og har ingen flag til begrænsninger: en øvre grænse på 4,096 frames for JS-kaldestakken, en vagt på 8,192 frames for transpilerede closures og standardværdien `maxLoopIterations` på 100,000, som kun gælder kode, der køres af den trævandrende fortolker (se [API: setLimit](https://phasis.inline0.dev/da/docs/api#setlimit)). Der er ingen tidsgrænse; pak kommandoen ind i `timeout`, hvis et script muligvis ikke afsluttes.
