
# Kompatibilita

Phasis sa overuje pomocou troch nezávislých referenčných zdrojov:

1. **test262** — oficiálna testovacia sada zhody s ECMAScriptom od TC39. **100 %** revízie pripnutej v repozitári.
2. **Web Platform Tests** — oficiálna sada WHATWG / W3C pre webové API mimo ECMAScriptu (fetch, XHR, WebSocket, Streams, Headers, Blob, kódovanie, URL, structured-clone, abort, hr-time, atob, crypto). **100 %** importovaného korpusu.
3. **Populárne knižnice** — 204 široko používaných balíkov npm (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) sa vykonáva s bajtovo zhodným výsledkom ako Node.js.

## V porovnaní s inými enginmi

| Engine | test262 | Poznámky |
|---|---:|---|
| **Phasis** | **100 %** | Čistý PHP. Cieľom je ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Referenčný engine v C++. |
| SpiderMonkey (Firefox) | 99.6 % | Referenčný engine v C++. |
| JavaScriptCore (Safari) | 99.4 % | Referenčný engine v C++. |
| QuickJS | ~97 % | Ľahký engine v jazyku C na vloženie do aplikácií. |
| Hermes (React Native) | ~95 % | Engine na vloženie do aplikácií, optimalizovaný pre mobilné zariadenia. |

Čísla pochádzajú z [test262.fyi](https://test262.fyi). Phasis patrí medzi najlepšie, po boku produkčných prehliadačových enginov.

## Stránky

- **[test262 pokrytie](https://phasis.inline0.dev/sk/docs/compatibility/test262)** — čo sa testuje, ako sada funguje a prečo záleží na 100 %.
- **[Webové API (WPT)](https://phasis.inline0.dev/sk/docs/compatibility/web-apis)** — Web Platform Pack a Fetch Pack: URL, kódovanie, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, plus crypto, WebSocket a XMLHttpRequest.
- **[Streamy](https://phasis.inline0.dev/sk/docs/compatibility/streams)** — úplný štandard WHATWG Streams: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, stratégie front, asynchrónna iterácia.
- **[Populárne balíky](https://phasis.inline0.dev/sk/docs/compatibility/popular-packages)** — bajtová zhoda kontrolovaná v CI s Node.js pre 204 balíkov npm používaných na analýzu, tvorbu šablón, validáciu, dátum a čas, matematiku, hašovanie, vyhľadávanie/porovnávanie, farby, spracovanie URL a ďalšie.
- **[Rozsah špecifikácie](https://phasis.inline0.dev/sk/docs/compatibility/spec-surface)** — všetky vstavané prvky ECMAScriptu, syntaktické funkcie a objekty štandardnej knižnice dodávané s Phasis.
- **[Známe obmedzenia](https://phasis.inline0.dev/sk/docs/compatibility/limitations)** — oblasti, v ktorých sa Phasis zámerne odlišuje od V8: výkonnostný strop, súbežnosť viacerých agentov, Wasm, webové API dostupné iba v prehliadači.

## Ako sa meria

- **test262** — `bin/test262` spúšťa sadu lokálne. Celá matica sa spúšťa v rámci workflow `compat-matrix.yml`, ktorý sa spúšťa ručne, nie pri každom pushnutí; úspešné spustenie uloží snímku do [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), kde sa zaznamenáva dátum vytvorenia a príslušný commit. Použitá revízia sady je tá, ktorú určuje podmodul `test262` git.
- **Web Platform Tests** — `bin/wpt` spúšťa importované testy. Workflow `wpt.yml` ich spúšťa pri pushnutí do `main` a pri pull requestoch, ktoré menia `src/`, testy alebo súbory Composer.
- **Populárne knižnice** — `composer test` spúšťa PHPUnit vrátane sady na kontrolu bajtovej zhody populárnych knižníc v rámci `tests/Popular/`. Workflow `popular.yml` ju spúšťa pri rovnakom filtri ciest a zároveň znovu generuje všetky referenčné výsledky pomocou reálneho Node, takže pri aktualizácii vendorizovanej knižnice odhalí zastaraný referenčný výsledok.

Regresia v WPT alebo populárnom balíku zlyhá v pull requeste, ktorý ju spôsobil. Regresia test262 sa prejaví pri ďalšom spustení matice.
