
# Pokrytí specifikace

Phasis cílí na aktuální specifikaci ECMAScriptu (ES2024+) a sleduje návrhy TC39 ve fázi 3 a vyšší. Tato stránka je přehledný index toho, co je skutečně součástí vydání.

## Jazyk

| Funkce | Stav |
|---|:---:|
| Lexikální deklarace (`let`, `const`) s TDZ | ✅ |
| Blokový, funkční a modulový rozsah platnosti | ✅ |
| Šipkové funkce (s lexikálním `this`) | ✅ |
| Výchozí parametry, zbytkové parametry, rozbalení | ✅ |
| Destrukturalizace (pole, objekt, vnoření, výchozí hodnoty, zbytek) | ✅ |
| Řetězcové literály šablon a označené šablony | ✅ |
| Vypočítané názvy vlastností | ✅ |
| Zkrácené zápisy vlastností a metod | ✅ |
| Třídy — konstruktory, metody, gettery/settery, statické členy | ✅ |
| Pole tříd (veřejná, soukromá, statická) | ✅ |
| Soukromé metody a přístupové metody | ✅ |
| `super` v metodách a konstruktorech | ✅ |
| Dekorátory (fáze 3) | ✅ |
| Bloky statické inicializace | ✅ |
| Volitelné řetězení (`?.`), koalescence nullish (`??`) | ✅ |
| Operátory logického přiřazení (`&&=`, `\|\|=`, `??=`) | ✅ |
| Číselné oddělovače (`1_000_000`) | ✅ |
| Literály BigInt (`123n`) a operátory | ✅ |
| Asynchronní funkce, asynchronní generátory, await na nejvyšší úrovni | ✅ |
| Generátory (synchronní a asynchronní) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iterátory a iterovatelné objekty (Symbol.iterator) | ✅ |
| Primitivní hodnoty Symbol a známé symboly | ✅ |
| Moduly ES (`import` / `export`, dynamický `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (fáze 3) | ✅ |
| Přísný režim + zastaralé chování Annex B | ✅ |
| Regulární výrazy (`/u`, `/v`, `/d`, pojmenované skupiny, zpětný pohled) | ✅ |
| Automatické vkládání středníků (ASI) | ✅ |
| Gramatika hashbang (`#!/usr/bin/env phasis`) | ✅ |
| Správná volání ocasu v přísném režimu (ES2015, vyžadováno specifikací) | ✅ |

## Standardní knihovna

### Základní

| Objekt | Pokrytí |
|---|---|
| `Object` | úplné — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries` atd. |
| `Array` | úplné — všechny prototypové metody včetně `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | úplné — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | úplné — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER` atd. |
| `BigInt` | úplné — libovolná přesnost přes bcmath |
| `Boolean` | úplné |
| `Math` | úplné — všechny metody a všechny zvláštní případy pro NaN / Infinity / -0 |
| `JSON` | úplné — `parse`, `stringify`, vlastní nahrazovací funkce, reviver, odsazení |
| `Symbol` | úplné — `for`, `keyFor`, všechny známé symboly, `Symbol.toPrimitive` |
| `Function` | úplné — `call`, `apply`, `bind`, `length`, `name`, sémantika `prototype` |

### Kolekce

| Objekt | Pokrytí |
|---|---|
| `Map` | úplné — včetně `groupBy` a živé iterace |
| `Set` | úplné — včetně `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | úplné |

### Asynchronní

| Objekt | Pokrytí |
|---|---|
| `Promise` | úplné — `all`, `race`, `any`, `allSettled`, `withResolvers`, asynchronní iterace |
| `AsyncIterator`, `AsyncGenerator` | úplné |
| Plánování mikrotasků | ✅ |

### Binární data

| Objekt | Pokrytí |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | úplné |
| `DataView` | úplné — `getBigInt64`, `setBigInt64` atd. |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | úplné |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | úplné (pouze jeden agent) |

### Reflexe a proxy

| Objekt | Pokrytí |
|---|---|
| `Proxy` | všech 13 pastí, lze odvolat |
| `Reflect` | všech 14 statických metod |

### Chyby

| Objekt | Pokrytí |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | úplné |
| `AggregateError` | úplné |
| `SuppressedError` (explicitní správa zdrojů, fáze 3) | úplné |

### Data a čas

| Objekt | Pokrytí |
|---|---|
| `Date` | úplné |
| `Temporal` (fáze 3) | úplné — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (včetně hebrejského, čínského, Dangi, etiopského kalendáře atd.) |

### Internacionalizace

| Objekt | Pokrytí |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | úplné (pokud je k dispozici, deleguje na rozšíření `intl` od PHP) |

### Správa zdrojů

| Objekt | Pokrytí |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (fáze 3) | úplné |
| `Symbol.dispose`, `Symbol.asyncDispose` | úplné |
| deklarace `using` / `await using` | úplné |

### Ostatní

| Objekt | Pokrytí |
|---|---|
| `RegExp` (včetně zápisu množin `/v`, pojmenovaných zachycených skupin, lookaround, příznaků sticky/global) | úplné |
| pomocné funkce `Iterator` (fáze 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | úplné |
| `ShadowRealm` (fáze 3) | úplné |
| `globalThis` | ✅ |

## Rozhraní webové platformy (WHATWG / W3C, nikoli TC39)

Kromě samotného ECMAScriptu obsahuje Phasis několik vrstev balíčků webových API, které skutečné knihovny JS předem kontrolují. Úplný přehled a shodu jednotlivých oblastí najdete v části [Webová API](https://phasis.inline0.dev/cs/docs/compatibility/web-apis).

| Balíček | Globální objekty | WPT |
|---|---|---|
| **Webová platforma** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (alias `globalThis`), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, mixin `Body`, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, plné WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, strategie fronty, BYOB), `CompressionStream` / `DecompressionStream` (zlib + volitelné brotli přes `ext-brotli`), `navigator` | 100 %¹ |
| **Kryptografie** | `crypto.getRandomValues`, `crypto.randomUUID`, plné `SubtleCrypto` (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) | 100 % |
| **WebSocket** | `WebSocket` (konstruktor + kodek rámců RFC 6455, vyměnitelný přenos přes `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (postavené nad přenosem fetch, takže se uplatní pravidla) | 100 % |
| **Smyčka událostí** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (fáze 3) | neuvedeno (ověřeno orákulem) |

¹ Vynechány jsou povolené podtesty v testovacích datech komprese: případy brotli, které vyžadují `ext-brotli`, a případy se vstupem podporovaným `SharedArrayBuffer` (`EXPECTED_FAILURES` v `tests/Wpt/WptTest.php`).

Všechny ostatní importované testy Web Platform Tests procházejí — přehled shody najdete v části [Webová API](https://phasis.inline0.dev/cs/docs/compatibility/web-apis).

## Co zatím není implementováno

- **Sémantika workerů SharedArrayBuffer** nad rámec jediného agenta — atomické oznámení mezi více vlákny skutečného operačního systému vyžaduje `pcntl` a není na plánu. Atomické operace v rámci jednoho agenta fungují.
- **`Intl.Segmenter` s klastry grafémů vyžadujícími ICU 76+** — závisí na verzi rozšíření `intl` v hostitelském PHP.

## Verzování

Phasis se řídí semver. Řada verzí sleduje návrhy specifikace ECMAScriptu:

| Verze Phasis | Cíl specifikace | Návrhy ve fázi 3 |
|---|---|---|
| 0.x | ES2024 | dekorátory, Temporal, explicitní správa zdrojů, pomocné funkce iterátorů, metody množin |

Přechod na verzi 1.0 je podmíněn implementací všech návrhů ve fázi 4 obsažených v návrhu ES2025 a stabilním sémantickým chováním vyprazdňování fronty Promise.
