
# Kompatibilitet

Phasis er verificeret mod tre uafhængige referencekilder:

1. **test262** — TC39's officielle ECMAScript-overensstemmelsestestpakke. **100 %** af den revision, der er fastlåst i repositoryet.
2. **Web Platform Tests** — den officielle WHATWG / W3C-testpakke for Web-API'er uden for ECMAScript (fetch, XHR, WebSocket, Streams, Headers, Blob, kodning, URL, structured-clone, abort, hr-time, atob, crypto). **100 %** af de importerede tests.
3. **Populære biblioteker** — 204 udbredte npm-pakker (acorn, lodash, zod, ramda, immer, redux, date-fns, marked, fuse.js, semver, validator, …) køres byteidentisk med Node.js.

## Sammenlignet med andre motorer

| Motor | test262 | Bemærkninger |
|---|---:|---|
| **Phasis** | **100 %** | Ren PHP. Målretter ES2024+. |
| V8 (Node, Chrome) | 99.8 % | Referencemotor i C++. |
| SpiderMonkey (Firefox) | 99.6 % | Referencemotor i C++. |
| JavaScriptCore (Safari) | 99.4 % | Referencemotor i C++. |
| QuickJS | ~97 % | Letvægtsmotor i C, der kan indlejres. |
| Hermes (React Native) | ~95 % | Motor, der kan indlejres, optimeret til mobile enheder. |

Tallene stammer fra [test262.fyi](https://test262.fyi). Phasis ligger i den øverste klasse sammen med produktionsklare browsermotorer.

## Sider

- **[test262-dækning](https://phasis.inline0.dev/da/docs/compatibility/test262)** — hvad der testes, hvordan testpakken køres, og hvorfor 100% er vigtigt.
- **[Web-API'er (WPT)](https://phasis.inline0.dev/da/docs/compatibility/web-apis)** — Web Platform Pack og Fetch Pack: URL, kodning, atob/btoa, structuredClone, performance, Headers, Blob, AbortSignal, EventTarget, Streams samt crypto, WebSocket og XMLHttpRequest.
- **[Streams](https://phasis.inline0.dev/da/docs/compatibility/streams)** — den fulde WHATWG Streams Standard: ReadableStream, WritableStream, TransformStream, BYOB, tee, pipeTo/pipeThrough, køstrategier og asynkron iteration.
- **[Populære pakker](https://phasis.inline0.dev/da/docs/compatibility/popular-packages)** — CI-kontrolleret byteidentitet med Node.js for 204 npm-pakker inden for parsing, skabeloner, validering, dato/tid, matematik, hashing, søgning/diff, farver, håndtering af URL og mere.
- **[Specifikationens overflade](https://phasis.inline0.dev/da/docs/compatibility/spec-surface)** — alle ECMAScript-indbyggede funktioner, syntaksfunktioner og standardbiblioteksobjekter, som Phasis leveres med.
- **[Kendte begrænsninger](https://phasis.inline0.dev/da/docs/compatibility/limitations)** — hvor Phasis bevidst afviger fra V8: ydeevnegrænse, samtidighed mellem agenter, Wasm og browserafhængige Web-API'er.

## Sådan måles det

- **test262** — `bin/test262` kører testpakken lokalt. Hele matrixen køres i workflowet `compat-matrix.yml`, som startes manuelt og ikke ved hver push; en vellykket kørsel gemmer sit øjebliksbillede i [`COMPAT.md`](https://github.com/inline0/phasis/blob/main/COMPAT.md), hvor det fremgår, hvornår det blev taget og mod hvilken commit. Testpakkens revision er den, der er fastlåst af git-submodulet `test262`.
- **Web Platform Tests** — `bin/wpt` kører de importerede fixtures. Workflowet `wpt.yml` kører dem ved push til `main` og pull requests, der ændrer `src/`, fixtures eller Composer-filerne.
- **Populære biblioteker** — `composer test` kører PHPUnit, herunder testpakken, der kontrollerer byteidentitet for populære biblioteker, under `tests/Popular/`. Workflowet `popular.yml` kører det med samme stifilter og genskaber også alle referenceværdier under rigtig Node, så forældede referenceværdier opdages, når et medfølgende bibliotek opdateres.

En regression i WPT eller en populær pakke får den pull request, der forårsager den, til at fejle. En regression i test262 vises næste gang, matrixen køres.
