
# Kompatibilitet

Phasis verifieras mot tre oberoende referenser:

1. **test262** — den officiella TC39-sviten för ECMAScript-överensstämmelse. **100 %** av revisionen som är låst i arkivet.
2. **Web Platform Tests** — den officiella WHATWG-/W3C-sviten för Web-API:er som inte ingår i ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, kodning, URL, structured-clone, abort, hr-time, atob, crypto). **100 %** av den importerade korpusen.
3. **Populära bibliotek** — 204 vanliga npm-paket (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) körs byteidentiskt med Node.js.

## Jämförelse med andra motorer

| Motor | test262 | Anteckningar |
|---|---:|---|
| **Phasis** | **100 %** | Ren PHP. Stöder ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Referensmotor i C++. |
| SpiderMonkey (Firefox) | 99.6 % | Referensmotor i C++. |
| JavaScriptCore (Safari) | 99.4 % | Referensmotor i C++. |
| QuickJS | ~97 % | Kompakt inbäddningsbar motor i C. |
| Hermes (React Native) | ~95 % | Inbäddningsbar motor optimerad för mobiler. |

Uppgifterna kommer från [test262.fyi](https://test262.fyi). Phasis ligger i toppskiktet tillsammans med produktionsmotorerna i webbläsare.

## Sidor

- **[test262-täckning](https://phasis.inline0.dev/sv/docs/compatibility/test262)** — vad som testas, hur sviten körs och varför 100 % spelar roll.
- **[Webb-API:er (WPT)](https://phasis.inline0.dev/sv/docs/compatibility/web-apis)** — Web Platform Pack och Fetch Pack: URL, kodning, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams samt crypto, WebSocket och XMLHttpRequest.
- **[Streams](https://phasis.inline0.dev/sv/docs/compatibility/streams)** — hela WHATWG Streams Standard: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, köstrategier och asynkron iteration.
- **[Populära paket](https://phasis.inline0.dev/sv/docs/compatibility/popular-packages)** — CI-kontrollerad byteidentitet med Node.js för 204 npm-paket inom parsning, mallar, validering, datum/tid, matematik, hashing, sökning/diff, färg, hantering av URL med mera.
- **[Specifikationsyta](https://phasis.inline0.dev/sv/docs/compatibility/spec-surface)** — alla inbyggda ECMAScript-funktioner, syntaxfunktioner och standardbiblioteksobjekt som Phasis innehåller.
- **[Kända begränsningar](https://phasis.inline0.dev/sv/docs/compatibility/limitations)** — områden där Phasis avviker avsiktligt från V8: prestandatak, samtidighet mellan flera agenter, Wasm och Web-API:er som bara finns i webbläsare.

## Så mäts resultaten

- **test262** — `bin/test262` kör sviten lokalt. Hela matrisen körs i arbetsflödet `compat-matrix.yml`, som startas manuellt i stället för vid varje push. En lyckad körning sparar sin ögonblicksbild i [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), som registrerar när den togs och mot vilken commit. Sviten använder den revision som låsts av delmodulen `test262` git.
- **Web Platform Tests** — `bin/wpt` kör de importerade testfixturerna. Arbetsflödet `wpt.yml` kör dem vid pushar till `main` och pullförfrågningar som ändrar `src/`, testfixturerna eller filerna Composer.
- **Populära bibliotek** — `composer test` kör PHPUnit, inklusive sviten för byteidentitet hos populära bibliotek under `tests/Popular/`. Arbetsflödet `popular.yml` kör den med samma sökvägsfilter och återskapar också varje referensresultat med riktig Node, så inaktuella referensresultat upptäcks när ett inbäddat bibliotek uppgraderas.

En regression i WPT eller ett populärt paket gör att pullförfrågan som orsakar den misslyckas. En regression i test262 upptäcks nästa gång matrisen körs.
