
# Specifikáció lefedettsége

A(z) Phasis az aktuális ECMAScript-specifikációt (ES2024+) célozza, és nyomon követi a TC39 Stage 3-as és annál előrehaladottabb javaslatait. Ez az oldal az élesben elérhető funkciók közérthető jegyzéke.

## Nyelv

| Funkció | Állapot |
|---|:---:|
| Lexikai deklarációk (`let`, `const`) TDZ-vel | ✅ |
| Blokk-, függvény- és modulszintű hatókör | ✅ |
| Nyílfüggvények (lexikai `this`-szel) | ✅ |
| Alapértelmezett paraméterek, rest paraméterek, spread | ✅ |
| Destrukturálás (tömb, objektum, beágyazott elemek, alapértékek, rest) | ✅ |
| Sablonliterálok, címkézett sablonok | ✅ |
| Számított tulajdonságnevek | ✅ |
| Rövidített tulajdonságok és metódusok | ✅ |
| Osztályok — konstruktorok, metódusok, getterek/setterek, statikus elemek | ✅ |
| Osztálymezők (publikus, privát, statikus) | ✅ |
| Privát metódusok és hozzáférők | ✅ |
| `super` metódusokban és konstruktorokban | ✅ |
| Dekorátorok (Stage 3) | ✅ |
| Statikus inicializáló blokkok | ✅ |
| Opcionális láncolás (`?.`), nullish coalescing (`??`) | ✅ |
| Logikai értékadás-operátorok (`&&=`, `\|\|=`, `??=`) | ✅ |
| Számelválasztók (`1_000_000`) | ✅ |
| BigInt-literálok (`123n`) és operátorok | ✅ |
| Aszinkron függvények, aszinkron generátorok, legfelső szintű await | ✅ |
| Generátorok (szinkron és aszinkron) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iterátorok és iterálható elemek (Symbol.iterator) | ✅ |
| Symbol primitívek és jól ismert szimbólumok | ✅ |
| ES-modulok (`import` / `export`, dinamikus `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (Stage 3) | ✅ |
| Szigorú mód + Annex B örökölt viselkedések | ✅ |
| Reguláris kifejezések (`/u`, `/v`, `/d`, névvel ellátott csoportok, előrenézés és hátranézés) | ✅ |
| Automatikus pontosvessző-beszúrás (ASI) | ✅ |
| Hashbang nyelvtan (`#!/usr/bin/env phasis`) | ✅ |
| Valódi tail callok szigorú módban (ES2015, a specifikáció előírása) | ✅ |

## Szabványos könyvtár

### Alapvető objektumok

| Objektum | Lefedettség |
|---|---|
| `Object` | teljes — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries` stb. |
| `Array` | teljes — minden prototípus-metódus, köztük `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | teljes — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | teljes — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER` stb. |
| `BigInt` | teljes — tetszőleges pontosságú számítás a bcmath segítségével |
| `Boolean` | teljes |
| `Math` | teljes — minden metódus, a NaN / Infinity / -0 minden különleges esete |
| `JSON` | teljes — `parse`, `stringify`, egyedi replacerek, reviver, behúzás |
| `Symbol` | teljes — `for`, `keyFor`, minden jól ismert szimbólum, `Symbol.toPrimitive` |
| `Function` | teljes — `call`, `apply`, `bind`, `length`, `name`, `prototype` szemantikája |

### Kollekciók

| Objektum | Lefedettség |
|---|---|
| `Map` | teljes — többek között `groupBy` és élő iteráció |
| `Set` | teljes — többek között `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | teljes |

### Aszinkron elemek

| Objektum | Lefedettség |
|---|---|
| `Promise` | teljes — `all`, `race`, `any`, `allSettled`, `withResolvers`, aszinkron iteráció |
| `AsyncIterator`, `AsyncGenerator` | teljes |
| Mikrofeladatok ütemezése | ✅ |

### Bináris adatok

| Objektum | Lefedettség |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | teljes |
| `DataView` | teljes — `getBigInt64`, `setBigInt64` stb. |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | teljes |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | teljes (csak egyetlen ügynök esetén) |

### Reflexió és proxyk

| Objektum | Lefedettség |
|---|---|
| `Proxy` | mind a 13 csapda, visszavonható |
| `Reflect` | mind a 14 statikus metódus |

### Hibák

| Objektum | Lefedettség |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | teljes |
| `AggregateError` | teljes |
| `SuppressedError` (Stage 3 explicit erőforrás-kezelés) | teljes |

### Dátum és idő

| Objektum | Lefedettség |
|---|---|
| `Date` | teljes |
| `Temporal` (Stage 3) | teljes — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (többek között héber, kínai, dangi, etióp stb.) |

### Nemzetköziesítés

| Objektum | Lefedettség |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | teljes (elérhetőség esetén a(z) PHP `intl`-kiterjesztésére támaszkodik) |

### Erőforrás-kezelés

| Objektum | Lefedettség |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (Stage 3) | teljes |
| `Symbol.dispose`, `Symbol.asyncDispose` | teljes |
| `using` / `await using` deklarációk | teljes |

### Egyéb

| Objektum | Lefedettség |
|---|---|
| `RegExp` (többek között `/v` halmazjelölés, névvel ellátott capture-ek, előrenézés és hátranézés, sticky/global flag-ek) | teljes |
| `Iterator` segédfüggvények (Stage 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | teljes |
| `ShadowRealm` (Stage 3) | teljes |
| `globalThis` | ✅ |

## Web Platform API-k (WHATWG / W3C, nem TC39)

A tiszta ECMAScripten túl a(z) Phasis több, rétegekbe rendezett Web API-csomagot is tartalmaz, amelyeket a valós JS könyvtárak előzetesen ellenőriznek. A teljes felület és az egyes területek megfelelősége a [Web API-k](https://phasis.inline0.dev/hu/docs/compatibility/web-apis) oldalon látható.

| Csomag | Globális objektumok | WPT |
|---|---|---|
| **Web Platform** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (a(z) `globalThis` aliasa), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, `Body` mixin, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, teljes WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, sorba állítási stratégiák, BYOB), `CompressionStream` / `DecompressionStream` (zlib + opcionális brotli a(z) `ext-brotli` használatával), `navigator` | 100 %¹ |
| **Crypto** | `crypto.getRandomValues`, `crypto.randomUUID`, teljes `SubtleCrypto` (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) | 100 % |
| **WebSocket** | `WebSocket` (konstruktor + RFC 6455 keretkodek, cserélhető átviteli réteg a(z) `setWebSocketTransport` segítségével) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (a fetch átviteli rétegre épül, ezért a házirend-hookok érvényesülnek) | 100 % |
| **Eseményhurok** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (Stage 3) | n/a (orákulumtesztekkel ellenőrizve) |

¹ A tömörítési tesztadatok engedélyezőlistáján szereplő alesetek kivételével: a brotli-esetek, amelyekhez `ext-brotli` szükséges, valamint azok az esetek, amelyek `SharedArrayBuffer`-alapú bemenetet adnak át (`EXPECTED_FAILURES` a(z) `tests/Wpt/WptTest.php`-ban).

Az összes többi importált Web Platform Test sikeres — a megfelelőségi bontást a [Web API-k](https://phasis.inline0.dev/hu/docs/compatibility/web-apis) oldalon találja.

## Ami még nincs megvalósítva

- **SharedArrayBuffer-munkerszemantika** egyetlen ügynökön túl — a valódi operációsrendszer-szálak közötti, többszálú atomikus értesítéshez `pcntl` szükséges, és nem szerepel az ütemtervben. Az egyetlen ügynökön belüli atomikus műveletek működnek.
- **`Intl.Segmenter` ICU 76+-t igénylő grafémaklaszterekkel** — a gazdagép PHP-jának `intl`-kiterjesztésverziójától függ.

## Verziózás

A(z) Phasis a semvert követi. A verzióág az ECMAScript specifikációtervezeteihez igazodik:

| Phasis verzió | Specifikációs cél | Stage 3 javaslatok |
|---|---|---|
| 0.x | ES2024 | dekorátorok, Temporal, explicit erőforrás-kezelés, iterátor-segédek, halmazmetódusok |

Az 1.0-s verzió kiadásának feltétele, hogy az ES2025-tervezet minden Stage 4-es javaslata megvalósuljon, és stabil legyen a Promise-ok ürítésének szemantikája.
