
# Kompatibilitás

A Phasis megfelelőségét három független viszonyítási alappal ellenőrizzük:

1. **test262** — a hivatalos TC39 ECMAScript megfelelőségi tesztcsomag. A tárolóban rögzített verzió 100 %-a.
2. **Web Platform Tests** — a hivatalos WHATWG / W3C tesztcsomag a nem ECMAScript-alapú webes API-khoz (fetch, XHR, WebSocket, Streams, Headers, Blob, encoding, URL, structured-clone, abort, hr-time, atob, crypto). Az importált tesztkészlet 100 %-a sikeres.
3. **Népszerű könyvtárak** — 204 széles körben használt npm csomag (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) fut a Node.js kimenetével bájtról bájtra egyezően.

## Más motorokkal összevetve

| Motor | test262 | Megjegyzések |
|---|---:|---|
| **Phasis** | **100 %** | Tisztán PHP. ES2024+ a cél. |
| V8 (Node, Chrome) | 99.8 % | Referencia C++ motor. |
| SpiderMonkey (Firefox) | 99.6 % | Referencia C++ motor. |
| JavaScriptCore (Safari) | 99.4 % | Referencia C++ motor. |
| QuickJS | ~97 % | Könnyű, C-ben írt, beágyazható motor. |
| Hermes (React Native) | ~95 % | Beágyazható motor, mobileszközökre optimalizálva. |

Az adatok innen származnak: [test262.fyi](https://test262.fyi). A Phasis a gyártási böngészőmotorok élmezőnyébe tartozik.

## Oldalak

- **[test262 lefedettség](https://phasis.inline0.dev/hu/docs/compatibility/test262)** — mi kerül tesztelésre, hogyan fut a tesztcsomag, és miért fontos a 100%.
- **[Web APIs (WPT)](https://phasis.inline0.dev/hu/docs/compatibility/web-apis)** — Web Platform Pack és Fetch Pack: URL, kódolás, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams, valamint crypto, WebSocket és XMLHttpRequest.
- **[Streams](https://phasis.inline0.dev/hu/docs/compatibility/streams)** — a WHATWG Streams Standard teljes egésze: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, sorbaállítási stratégiák, aszinkron iteráció.
- **[Népszerű csomagok](https://phasis.inline0.dev/hu/docs/compatibility/popular-packages)** — CI által ellenőrzött, Node.js kimenetével való bájtpontos egyezés 204 npm csomag esetében, a feldolgozás, sablonkezelés, érvényesítés, dátum és idő, matematika, hashelés, keresés és diff, színkezelés, URL kezelés és egyéb területeken.
- **[Specifikációs felület](https://phasis.inline0.dev/hu/docs/compatibility/spec-surface)** — az Phasis által biztosított összes ECMAScript beépített elem, szintaktikai funkció és standardkönyvtári objektum.
- **[Ismert korlátok](https://phasis.inline0.dev/hu/docs/compatibility/limitations)** — ahol az Phasis szándékosan eltér a V8 működésétől: teljesítménykorlát, több ügynök egyidejű futtatása, Wasm, csak böngészőben elérhető Web API-k.

## A mérés módja

- **test262** — a `bin/test262` helyben futtatja a tesztcsomagot. A teljes mátrix a `compat-matrix.yml` munkafolyamatban fut, amelyet nem minden push alkalmával, hanem kézzel indítanak el; a sikeres futás pillanatfelvételét a rendszer a [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md) helyre menti, rögzítve a készítés idejét és az alapjául szolgáló commitot. A tesztcsomag revíziója megegyezik a `test262` git almodulban rögzített revízióval.
- **Web Platform Tests** — a `bin/wpt` futtatja az importált tesztfájlokat. A `wpt.yml` munkafolyamat push esetén akkor indul, ha a módosítás a `main`, illetve olyan pull requestet érint, amely a `src/` fájlokat, a tesztfájlokat vagy a Composer fájlokat módosítja.
- **Népszerű könyvtárak** — a `composer test` futtatja a PHPUnit tesztcsomagot, benne a népszerű könyvtárak `tests/Popular/` alatti bájtpontos egyezésének vizsgálatával. A `popular.yml` munkafolyamat azonos útvonalszűrővel fut, és valódi Node alatt újragenerálja az összes viszonyítási adatot is, így egy vendorizált könyvtár frissítésekor kiderül, ha valamelyik elavult.

A WPT vagy népszerűcsomag-regresszió miatt az azt okozó pull request meghiúsul. A test262 regresszió a következő mátrixfuttatáskor derül ki.
