
# Specifikacijos aprėptis

Phasis atitinka dabartinę ECMAScript specifikaciją (ES2024+) ir seka TC39 pasiūlymus nuo 3 etapo. Šiame puslapyje pateikiamas žmonėms skirtas to, kas iš tikrųjų įtraukta, sąrašas.

## Kalba

| Funkcija | Būsena |
|---|:---:|
| Leksinės deklaracijos (`let`, `const`) su TDZ | ✅ |
| Bloko, funkcijos ir modulio sritis | ✅ |
| Rodyklės funkcijos (su leksiniu `this`) | ✅ |
| Numatyti parametrai, likusieji parametrai, sklaida | ✅ |
| Išskaidymas (masyvų, objektų, įdėtinis, numatytosios reikšmės, likusios reikšmės) | ✅ |
| Šablonų eilutės, žymėtos šablonų eilutės | ✅ |
| Apskaičiuojami savybių pavadinimai | ✅ |
| Sutrumpintos savybės ir metodai | ✅ |
| Klasės — konstruktoriai, metodai, getteriai/setteriai, statiniai nariai | ✅ |
| Klasių laukai (viešieji, privatieji, statiniai) | ✅ |
| Privatūs metodai ir prieigos metodai | ✅ |
| `super` metoduose ir konstruktoriuose | ✅ |
| Dekoratoriai (3 etapas) | ✅ |
| Statiniai inicializavimo blokai | ✅ |
| Pasirenkamasis grandinės iškvietimas (`?.`), nulio ir neapibrėžtos reikšmės sujungimas (`??`) | ✅ |
| Loginio priskyrimo operatoriai (`&&=`, `\|\|=`, `??=`) | ✅ |
| Skaičių skirtukai (`1_000_000`) | ✅ |
| BigInt literalai (`123n`) ir operatoriai | ✅ |
| Asinchroninės funkcijos, asinchroniniai generatoriai, await modulio viršuje | ✅ |
| Generatoriai (sinchroniniai ir asinchroniniai) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iteratoriai ir iteruojamieji objektai (Symbol.iterator) | ✅ |
| Symbol primityviosios reikšmės ir žinomi simboliai | ✅ |
| ES moduliai (`import` / `export`, dinaminis `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (3 etapas) | ✅ |
| Griežtasis režimas + Annex B senasis elgesys | ✅ |
| Reguliarieji reiškiniai (`/u`, `/v`, `/d`, pavadintos grupės, tikrinimas atgal) | ✅ |
| Automatinis kabliataškio įterpimas (ASI) | ✅ |
| Hashbang gramatika (`#!/usr/bin/env phasis`) | ✅ |
| Tikri uodeginiai iškvietimai griežtuoju režimu (ES2015, reikalaujama specifikacijos) | ✅ |

## Standartinė biblioteka

### Pagrindai

| Objektas | Aprėptis |
|---|---|
| `Object` | visa — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries` ir kt. |
| `Array` | visa — visi prototipo metodai, įskaitant `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | visa — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | visa — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER` ir kt. |
| `BigInt` | visa — savavališkas tikslumas per bcmath |
| `Boolean` | visa |
| `Math` | visa — visi metodai, visi specialūs NaN / Infinity / -0 atvejai |
| `JSON` | visa — `parse`, `stringify`, pasirinktiniai keitikliai, reviver, įtraukos |
| `Symbol` | visa — `for`, `keyFor`, visi gerai žinomi simboliai, `Symbol.toPrimitive` |
| `Function` | visa — `call`, `apply`, `bind`, `length`, `name`, `prototype` semantika |

### Kolekcijos

| Objektas | Aprėptis |
|---|---|
| `Map` | visa — įskaitant `groupBy` ir aktyvų iteravimą |
| `Set` | visa — įskaitant `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | visa |

### Asinchroniškumas

| Objektas | Aprėptis |
|---|---|
| `Promise` | visa — `all`, `race`, `any`, `allSettled`, `withResolvers`, asinchroninis iteravimas |
| `AsyncIterator`, `AsyncGenerator` | visa |
| Mikroužduočių planavimas | ✅ |

### Dvejetainiai duomenys

| Objektas | Aprėptis |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | visa |
| `DataView` | visa — `getBigInt64`, `setBigInt64` ir kt. |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | visa |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | visa (tik vienas agentas) |

### Atspindėjimas ir tarpiniai objektai

| Objektas | Aprėptis |
|---|---|
| `Proxy` | visi 13 perėmimo taškų, atšaukiamas |
| `Reflect` | visi 14 statinių metodų |

### Klaidos

| Objektas | Aprėptis |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | visa |
| `AggregateError` | visa |
| `SuppressedError` (3 etapo aiškus išteklių valdymas) | visa |

### Datos ir laikas

| Objektas | Aprėptis |
|---|---|
| `Date` | visa |
| `Temporal` (3 etapas) | visa — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (įskaitant hebrajų, kinų, Dangi, etiopų ir kt.) |

### Internacionalizavimas

| Objektas | Aprėptis |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | visa (kai prieinama, deleguoja į PHP plėtinį `intl`) |

### Išteklių valdymas

| Objektas | Aprėptis |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (3 etapas) | visa |
| `Symbol.dispose`, `Symbol.asyncDispose` | visa |
| `using` / `await using` deklaracijos | visa |

### Kita

| Objektas | Aprėptis |
|---|---|
| `RegExp` (įskaitant `/v` aibių žymėjimą, vardines fiksacijas, peržvalgas, sticky/global vėliavėles) | visa |
| `Iterator` pagalbinės funkcijos (3 etapas) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | visa |
| `ShadowRealm` (3 etapas) | visa |
| `globalThis` | ✅ |

## Žiniatinklio platformos API (WHATWG / W3C, ne TC39)

Be grynojo ECMAScript, Phasis pateikia kelis sluoksniuotus žiniatinklio API paketus, kuriuos realaus pasaulio JS bibliotekos tikrina iš anksto. Išsamią sąsają ir atitiktį pagal sritis rasite skiltyje [Žiniatinklio API](https://phasis.inline0.dev/lt/docs/compatibility/web-apis).

| Paketas | Globalūs objektai | WPT |
|---|---|---|
| **Žiniatinklio platforma** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (`globalThis` pseudonimas), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, `Body` mišinys, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, visas WHATWG srautų API (`ReadableStream`, `WritableStream`, `TransformStream`, eilių strategijos, BYOB), `CompressionStream` / `DecompressionStream` (zlib + pasirinktinai brotli per `ext-brotli`), `navigator` | 100 %¹ |
| **Kriptografija** | `crypto.getRandomValues`, `crypto.randomUUID`, visas `SubtleCrypto` (santrauka, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) | 100 % |
| **WebSocket** | `WebSocket` (konstruktorius + RFC 6455 kadrų koduotuvas, keičiamas transportas per `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (sluoksniuota virš Fetch transporto, todėl taikomi politikos kabliai) | 100 % |
| **Įvykių ciklas** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (3 etapas) | n/a (patikrinta etaloniniais duomenimis) |

¹ Neįtraukiant leidžiamų papildomų testų glaudinimo bandymų rinkiniuose: brotli atvejų, kuriems reikia `ext-brotli`, ir atvejų, kuriuose perduodama įvestis, paremta `SharedArrayBuffer` (`EXPECTED_FAILURES` iš `tests/Wpt/WptTest.php`).

Visi kiti importuoti Web Platform Tests testai sėkmingai vykdomi — atitikties suskirstymą rasite skiltyje [Žiniatinklio API](https://phasis.inline0.dev/lt/docs/compatibility/web-apis).

## Kas dar neįgyvendinta

- **SharedArrayBuffer darbuotojų semantika**, apimanti daugiau nei vieną agentą — atominiam pranešimų perdavimui tarp realių OS gijų reikia `pcntl`, o tai nėra numatyta veiksmų plane. Vieno agento atominės operacijos veikia.
- **`Intl.Segmenter` su grafemų grupėmis, kurioms reikia ICU 76+** — priklauso nuo pagrindinės aplinkos PHP plėtinio `intl` versijos.

## Versijavimas

Phasis naudoja semver. Versijų linija seka ECMAScript specifikacijos juodraščius:

| Phasis versija | Specifikacijos tikslas | 3 etapo pasiūlymai |
|---|---|---|
| 0.x | ES2024 | dekoratoriai, Temporal, aiškus išteklių valdymas, iteratorių pagalbinės funkcijos, aibių metodai |

Versija bus pakelta iki 1.0 tik tada, kai bus įgyvendintas kiekvienas ES2025 juodraščio 4 etapo pasiūlymas ir nusistovės Promise ištuštinimo semantika.
