
# Kompatibilita

Phasis je ověřen ve třech nezávislých testovacích sadách:

1. **test262** — oficiální sada TC39 pro ověření shody s ECMAScriptem. **100 %** testů revize připnuté v repozitáři.
2. **Web Platform Tests** — oficiální sada WHATWG / W3C pro webová API mimo ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, kódování, URL, strukturované klonování, abort, hr-time, atob, crypto). **100 %** v importovaném korpusu.
3. **Oblíbené knihovny** — 204 hojně používaných balíčků npm (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) se spouští se shodnými bajty jako Node.js.

## Srovnání s jinými stroji

| Stroj | test262 | Poznámky |
|---|---:|---|
| **Phasis** | **100 %** | Čisté PHP. Podporuje ES2024 a novější. |
| V8 (Node, Chrome) | 99.8 % | Referenční stroj v C++. |
| SpiderMonkey (Firefox) | 99.6 % | Referenční stroj v C++. |
| JavaScriptCore (Safari) | 99.4 % | Referenční stroj v C++. |
| QuickJS | ~97 % | Lehký stroj v C, který lze vložit do jiného programu. |
| Hermes (React Native) | ~95 % | Vložitelný stroj optimalizovaný pro mobilní zařízení. |

Údaje pocházejí z [test262.fyi](https://test262.fyi). Phasis patří do nejvyšší skupiny spolu s produkčními stroji v prohlížečích.

## Stránky

- **[Pokrytí test262](https://phasis.inline0.dev/cs/docs/compatibility/test262)** — co se testuje, jak sada běží a proč záleží na hodnotě 100 %.
- **[Webová API (WPT)](https://phasis.inline0.dev/cs/docs/compatibility/web-apis)** — Web Platform Pack a Fetch Pack: URL, kódování, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams a také crypto, WebSocket a XMLHttpRequest.
- **[Streams](https://phasis.inline0.dev/cs/docs/compatibility/streams)** — celý standard WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, strategie řazení do fronty a asynchronní iterace.
- **[Oblíbené balíčky](https://phasis.inline0.dev/cs/docs/compatibility/popular-packages)** — testy byteové shody s Node.js pro 204 balíčků npm, které pokrývají parsování, šablony, ověřování, datum a čas, matematiku, hashování, vyhledávání a rozdíly, barvy, práci s URL a další oblasti; jejich úspěch kontroluje CI.
- **[Povrch specifikace](https://phasis.inline0.dev/cs/docs/compatibility/spec-surface)** — všechny vestavěné funkce, syntaktické prvky a objekty standardní knihovny, které Phasis nabízí.
- **[Známá omezení](https://phasis.inline0.dev/cs/docs/compatibility/limitations)** — oblasti, ve kterých se Phasis záměrně odchyluje od V8: limity výkonu, souběžnost více agentů, Wasm a webová API dostupná pouze v prohlížeči.

## Jak se měří

- **test262** — sadu lokálně spouští `bin/test262`. Úplná matice se spouští v pracovním postupu `compat-matrix.yml`, který se zahajuje ručně, nikoli při každém odeslání změn; úspěšné spuštění uloží snímek do [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), kde je uvedeno datum pořízení a odpovídající revize. Používá se revize sady připnutá v podmodulu Git `test262`.
- **Web Platform Tests** — importované testovací případy spouští `bin/wpt`. Pracovní postup `wpt.yml` je spouští při odeslání změn do `main` a při požadavcích na stažení, které mění `src/`, testovací případy nebo soubory Composer.
- **Oblíbené knihovny** — `composer test` spouští PHPUnit, včetně testovací sady byteové shody oblíbených knihoven v rámci `tests/Popular/`. Pracovní postup `popular.yml` ji spouští při stejných změnách a také znovu vytváří všechny referenční výsledky pomocí skutečného Node, aby se odhalily zastaralé výsledky při aktualizaci přibalené knihovny.

Regrese ve WPT nebo oblíbeném balíčku zablokuje požadavek na stažení, který ji způsobil. Regrese v test262 se projeví při příštím spuštění matice.
