
# Spetsifikatsiooni ulatus

Phasis järgib kehtivat ECMAScripti spetsifikatsiooni (ES2024+) ja jälgib TC39 ettepanekuid alates 3. etapist. Sellel lehel on inimloetav ülevaade tegelikult tarnitust.

## Keel

| Funktsioon | Olek |
|---|:---:|
| Leksikaalsed deklaratsioonid (`let`, `const`) koos TDZ-iga | ✅ |
| Ploki-, funktsiooni- ja mooduliulatus | ✅ |
| Noolefunktsioonid (koos leksikaalse `this`-iga) | ✅ |
| Vaikeparameetrid, ülejäänud parameetrid, levitamine | ✅ |
| Destruktureerimine (massiiv, objekt, pesastatud, vaikeväärtused, ülejäänud) | ✅ |
| Malliliteraalid ja märgendatud mallid | ✅ |
| Arvutatavad omaduste nimed | ✅ |
| Lühikirjapärased omadused ja meetodid | ✅ |
| Klassid — konstruktorid, meetodid, hankijad/seadistajad, staatilised liikmed | ✅ |
| Klassiväljad (avalikud, privaatsed, staatilised) | ✅ |
| Privaatsed meetodid ja pääsurutiinid | ✅ |
| `super` meetodites ja konstruktorites | ✅ |
| Dekoraatorid (3. etapp) | ✅ |
| Staatilised lähtestusplokid | ✅ |
| Valikuline aheldamine (`?.`), nullish-ühendamine (`??`) | ✅ |
| Loogilised omistamisoperaatorid (`&&=`, `\|\|=`, `??=`) | ✅ |
| Arvude eraldajad (`1_000_000`) | ✅ |
| BigInt-literaalid (`123n`) ja operaatorid | ✅ |
| Asünkroonsed funktsioonid, asünkroonsed generaatorid, ülataseme await | ✅ |
| Generaatorid (sünkroonsed ja asünkroonsed) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iteraatorid ja itereeritavad objektid (Symbol.iterator) | ✅ |
| Symboli primitiivid ja tuntud sümbolid | ✅ |
| ES-moodulid (`import` / `export`, dünaamiline `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (3. etapp) | ✅ |
| Range režiim ja Annex B pärandkäitumised | ✅ |
| Regulaaravaldised (`/u`, `/v`, `/d`, nimega rühmad, tagasivaatamine) | ✅ |
| Automaatne semikooloni lisamine (ASI) | ✅ |
| Hashbang-grammatika (`#!/usr/bin/env phasis`) | ✅ |
| Korrektsed sabakutsed ranges režiimis (ES2015, nõutud spetsifikatsioonis) | ✅ |

## Standardteek

### Põhitüübid

| Objekt | Tugi |
|---|---|
| `Object` | täielik — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries` jne |
| `Array` | täielik — kõik prototüübi meetodid, sealhulgas `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | täielik — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | täielik — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER` jne |
| `BigInt` | täielik — suvaline täpsus bcmath-i abil |
| `Boolean` | täielik |
| `Math` | täielik — kõik meetodid ja erijuhud väärtuste NaN / Infinity / -0 korral |
| `JSON` | täielik — `parse`, `stringify`, kohandatud asendajad, taaselustaja, taane |
| `Symbol` | täielik — `for`, `keyFor`, kõik tuntud sümbolid, `Symbol.toPrimitive` |
| `Function` | täielik — `call`, `apply`, `bind`, `length`, `name`, `prototype` semantika |

### Kogumid

| Objekt | Tugi |
|---|---|
| `Map` | täielik, sh `groupBy` ja elav iteratsioon |
| `Set` | täielik, sh `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | täielik |

### Asünkroonsus

| Objekt | Tugi |
|---|---|
| `Promise` | täielik — `all`, `race`, `any`, `allSettled`, `withResolvers`, asünkroonne iteratsioon |
| `AsyncIterator`, `AsyncGenerator` | täielik |
| Mikroülesannete ajastamine | ✅ |

### Binaarandmed

| Objekt | Tugi |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | täielik |
| `DataView` | täielik — `getBigInt64`, `setBigInt64` jne |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | täielik |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | täielik (ainult ühe agendiga) |

### Peegeldus ja puhverserverid

| Objekt | Hõlmatus |
|---|---|
| `Proxy` | kõik 13 lõksu, tühistatavad |
| `Reflect` | kõik 14 staatilist meetodit |

### Vead

| Objekt | Hõlmatus |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | täielik |
| `AggregateError` | täielik |
| `SuppressedError` (3. etapi selgesõnaline ressursihaldus) | täielik |

### Kuupäevad ja kellaaeg

| Objekt | Hõlmatus |
|---|---|
| `Date` | täielik |
| `Temporal` (Stage 3) | täielik — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (sh heebrea, hiina, Dangi, etioopia jm) |

### Rahvusvahelistamine

| Objekt | Hõlmatus |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | täielik (kasutab võimaluse korral PHP laiendust `intl`) |

### Ressursside haldus

| Objekt | Hõlmatus |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (Stage 3) | täielik |
| `Symbol.dispose`, `Symbol.asyncDispose` | täielik |
| `using` / `await using` deklaratsioonid | täielik |

### Muu

| Objekt | Hõlmatus |
|---|---|
| `RegExp` (sh `/v` hulgatähistus, nimega hõive, ette- ja tagasivaade, kleepuvad/globaalsed lipud) | täielik |
| `Iterator` abifunktsioonid (Stage 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | täielik |
| `ShadowRealm` (Stage 3) | täielik |
| `globalThis` | ✅ |

## Veebiplatvormi API-d (WHATWG / W3C, mitte TC39)

Lisaks puhtale ECMAScriptile tarnib Phasis mitu kihilist veebiliideste paketti, mida päris JS teegid eelkontrollivad. Täieliku ülevaate ja valdkondade vastavuse kohta vaadake [Web APIs](https://phasis.inline0.dev/et/docs/compatibility/web-apis).

| Pakett | Globaalsed objektid | WPT |
|---|---|---|
| **Veebiplatvorm** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (`globalThis` alias), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, `Body` mixin, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, täielikud WHATWG vood (`ReadableStream`, `WritableStream`, `TransformStream`, järjekorda seadmisstrateegiad, BYOB), `CompressionStream` / `DecompressionStream` (zlib + valikuline brotli laiendusest `ext-brotli`), `navigator` | 100 %¹ |
| **Krüpto** | `crypto.getRandomValues`, `crypto.randomUUID`, täielik `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 kaadrite kodek, vahetatav transport `setWebSocketTransport` kaudu) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (fetchi transpordikihi peal, seega kehtivad poliitikakonksud) | 100 % |
| **Sündmuste tsükkel** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (Stage 3) | pole kohaldatav (oraakliga testitud) |

¹ Välja arvatud lubatud alamtestid tihendamise testandmetes: brotli juhud, mis vajavad `ext-brotli`, ning juhud, mis kasutavad `SharedArrayBuffer`-põhist sisendit (`EXPECTED_FAILURES` asukohas `tests/Wpt/WptTest.php`).

Kõik muud imporditud veebiplatvormi testid läbivad — vastavuse jaotust vt [Web APIs](https://phasis.inline0.dev/et/docs/compatibility/web-apis).

## Veel rakendamata

- **SharedArrayBufferi töötajate semantika** väljaspool üht agenti — mitmelõimeline aatomiline teavitus päris operatsioonisüsteemi lõimede vahel vajab `pcntl` ja pole tegevuskavas. Ühe agendi aatomitehted toimivad.
- **`Intl.Segmenter` ICU 76+ vajavate grafeemiklastritega** — sõltub hosti PHP laienduse versioonist `intl`.

## Versioonimine

Phasis järgib semverit. Versioonirida jälgib ECMAScripti spetsifikatsiooni mustandeid:

| Phasis versioon | Spetsifikatsiooni sihtversioon | 3. etapi ettepanekud |
|---|---|---|
| 0.x | ES2024 | dekoraatorid, Temporal, selgesõnaline ressursihaldus, iteraatori abifunktsioonid, hulgameetodid |

Versioonile 1.0 üleminek eeldab, et kõik ES2025 mustandis olevad 4. etapi ettepanekud on rakendatud ja Promise'i tühjendamise semantika stabiilne.
