
# Rozsah špecifikácie

Phasis cieli na aktuálnu špecifikáciu ECMAScriptu (ES2024+) a sleduje návrhy TC39 vo fáze 3 a vyššej. Táto stránka je prehľadným indexom toho, čo je skutočne dostupné.

## Jazyk

| Vlastnosť | Stav |
|---|:---:|
| Lexikálne deklarácie (`let`, `const`) s TDZ | ✅ |
| Blokový, funkčný a modulový rozsah platnosti | ✅ |
| Funkcie so šípkovou syntaxou (s lexikálnym `this`) | ✅ |
| Predvolené parametre, zvyškové parametre, spread | ✅ |
| Destrukturalizácia (polia, objekty, vnorené štruktúry, predvolené hodnoty, zvyškové prvky) | ✅ |
| Šablónové literály, označené šablóny | ✅ |
| Vypočítané názvy vlastností | ✅ |
| Skrátený zápis vlastností a metód | ✅ |
| Triedy — konštruktory, metódy, gettery/settery, statické členy | ✅ |
| Polia tried (verejné, súkromné, statické) | ✅ |
| Súkromné metódy a prístupové metódy | ✅ |
| `super` v metódach a konštruktoroch | ✅ |
| Dekorátory (fáza 3) | ✅ |
| Bloky statických inicializátorov | ✅ |
| Voliteľné reťazenie (`?.`), spájanie s hodnotou null (`??`) | ✅ |
| Operátory logického priradenia (`&&=`, `\|\|=`, `??=`) | ✅ |
| Oddeľovače v číselných literáloch (`1_000_000`) | ✅ |
| Literály BigInt (`123n`) a operátory | ✅ |
| Asynchrónne funkcie, asynchrónne generátory, await na najvyššej úrovni | ✅ |
| Generátory (synchrónne a asynchrónne) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iterátory a iterovateľné objekty (Symbol.iterator) | ✅ |
| Primitívne symboly a známe symboly | ✅ |
| Moduly ES (`import` / `export`, dynamický `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (fáza 3) | ✅ |
| Prísny režim + staršie správanie Annex B | ✅ |
| Regulárne výrazy (`/u`, `/v`, `/d`, pomenované skupiny, spätné pohľady) | ✅ |
| Automatické vkladanie bodkočiarok (ASI) | ✅ |
| Gramatika Hashbang (`#!/usr/bin/env phasis`) | ✅ |
| Správne koncové volania v prísnom režime (ES2015, vyžaduje ich špecifikácia) | ✅ |

## Štandardná knižnica

### Základné

| Objekt | Pokrytie |
|---|---|
| `Object` | úplné — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries` atď. |
| `Array` | úplné — každá metóda prototypu vrátane `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` atď. |
| `BigInt` | úplné — ľubovoľná presnosť cez bcmath |
| `Boolean` | úplné |
| `Math` | úplné — každá metóda a každá špeciálna situácia pre NaN / Infinity / -0 |
| `JSON` | úplné — `parse`, `stringify`, vlastné nahradzujúce funkcie, reviver, odsadenie |
| `Symbol` | úplné — `for`, `keyFor`, všetky známe symboly, `Symbol.toPrimitive` |
| `Function` | úplné — `call`, `apply`, `bind`, `length`, `name`, `prototype` sémantika |

### Kolekcie

| Objekt | Pokrytie |
|---|---|
| `Map` | úplné — vrátane `groupBy` a živej iterácie |
| `Set` | úplné — vrátane `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | úplné |

### Asynchrónnosť

| Objekt | Pokrytie |
|---|---|
| `Promise` | úplné — `all`, `race`, `any`, `allSettled`, `withResolvers`, asynchrónna iterácia |
| `AsyncIterator`, `AsyncGenerator` | úplné |
| Plánovanie mikrotaskov | ✅ |

### Binárne údaje

| Objekt | Pokrytie |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | úplné |
| `DataView` | úplné — `getBigInt64`, `setBigInt64` atď. |
| `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é (len jeden agent) |

### Reflexia a proxy

| Objekt | Pokrytie |
|---|---|
| `Proxy` | všetkých 13 pascí, možnosť zrušenia |
| `Reflect` | všetkých 14 statických metód |

### Chyby

| Objekt | Pokrytie |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | úplné |
| `AggregateError` | úplné |
| `SuppressedError` (explicitná správa zdrojov, Stage 3) | úplné |

### Dátumy a čas

| Objekt | Pokrytie |
|---|---|
| `Date` | úplné |
| `Temporal` (Stage 3) | úplné — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (vrátane hebrejského, čínskeho, Dangi, etiópskeho atď.) |

### Internacionalizácia

| Objekt | Pokrytie |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | úplné (ak je dostupné, deleguje na rozšírenie `intl` v PHP) |

### Správa zdrojov

| Objekt | Pokrytie |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (Stage 3) | úplné |
| `Symbol.dispose`, `Symbol.asyncDispose` | úplné |
| deklarácie `using` / `await using` | úplné |

### Ostatné

| Objekt | Pokrytie |
|---|---|
| `RegExp` (vrátane notácie množín `/v`, pomenovaných zachytení, lookaround, príznakov sticky/global) | úplné |
| Pomocné funkcie `Iterator` (Stage 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | úplné |
| `ShadowRealm` (Stage 3) | úplné |
| `globalThis` | ✅ |

## Rozhrania Web Platform (WHATWG / W3C, nie TC39)

Okrem čistého ECMAScriptu Phasis obsahuje niekoľko vrstvených balíkov Web API, ktoré knižnice JS v reálnych podmienkach predbežne kontrolujú. Kompletný prehľad API a zhodu v jednotlivých oblastiach nájdete v časti [Web API](https://phasis.inline0.dev/sk/docs/compatibility/web-apis).

| Balík | Globálne objekty | WPT |
|---|---|---|
| **Web Platform** | `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á podpora WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, stratégie zaraďovania do frontu, BYOB), `CompressionStream` / `DecompressionStream` (zlib + voliteľné brotli cez `ext-brotli`), `navigator` | 100 %¹ |
| **Crypto** | `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` (konštruktor + kodek rámcov RFC 6455, vymeniteľný prenos cez `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (postavené na prenose Fetch, takže platia aj pravidlá politiky) | 100 % |
| **Slučka udalostí** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (Stage 3) | n/a (overené pomocou oracle) |

¹ Nezahŕňa podtesty uvedené na zozname povolených výnimiek v testovacích prípadoch kompresie: prípady brotli, ktoré vyžadujú `ext-brotli`, a prípady používajúce vstup podporovaný `SharedArrayBuffer` (`EXPECTED_FAILURES` v `tests/Wpt/WptTest.php`).

Všetky ostatné importované testy Web Platform Tests prechádzajú — prehľad zhody nájdete v časti [Web API](https://phasis.inline0.dev/sk/docs/compatibility/web-apis).

## Čo ešte nie je implementované

- **Sémantika workerov SharedArrayBuffer** mimo jedného agenta — atómové oznamovanie medzi vláknami skutočného OS vyžaduje `pcntl` a nie je v pláne. Atómové operácie v rámci jedného agenta fungujú.
- **`Intl.Segmenter` s grafémovými klastrami, ktoré vyžadujú ICU 76+** — závisí od verzie rozšírenia `intl` v hostiteľskom PHP.

## Verziovanie

Phasis sa riadi sémantickým verzovaním. Číselná verzia sleduje návrhy špecifikácie ECMAScript:

| Verzia Phasis | Cieľová špecifikácia | Návrhy Stage 3 |
|---|---|---|
| 0.x | ES2024 | dekorátory, Temporal, explicitná správa zdrojov, pomocné funkcie iterátora, metódy množín |

Verzia 1.0 bude vydaná až po implementovaní každého návrhu Stage 4 v návrhu ES2025 a stabilizovaní sémantiky vyprázdňovania frontu Promise.
