
# Specifikācijas aptvērums

Phasis ir paredzēts pašreizējai ECMAScript specifikācijai (ES2024+) un seko TC39 priekšlikumiem, kas sasnieguši 3. stadiju vai augstāku. Šī lapa ir cilvēkiem lasāms pārskats par to, kas faktiski ir ieviests.

## Valoda

| Funkcija | Statuss |
|---|:---:|
| Leksiskās deklarācijas (`let`, `const`) ar TDZ | ✅ |
| Bloka, funkcijas un moduļa tvērums | ✅ |
| Bultfunkcijas (ar leksisko `this`) | ✅ |
| Noklusējuma parametri, atlikuma parametri, izkliedēšana | ✅ |
| Destrukturēšana (masīvs, objekts, ligzdoti elementi, noklusējumi, atlikuma vērtības) | ✅ |
| Veidņu literāļi, marķēti veidņu literāļi | ✅ |
| Aprēķināmi īpašumu nosaukumi | ✅ |
| Saīsinātās īpašību un metožu pieraksta formas | ✅ |
| Klases — konstruktori, metodes, iegūšanas un iestatīšanas metodes, statiskie elementi | ✅ |
| Klases lauki (publiski, privāti, statiski) | ✅ |
| Privātās metodes un piekļuves metodes | ✅ |
| `super` metodēs un konstruktoros | ✅ |
| Dekoratori (3. stadija) | ✅ |
| Statiskie inicializācijas bloki | ✅ |
| Izvēles ķēdēšana (`?.`), nullish apvienošana (`??`) | ✅ |
| Loģiskās piešķiršanas operatori (`&&=`, `\|\|=`, `??=`) | ✅ |
| Skaitļu atdalītāji (`1_000_000`) | ✅ |
| BigInt literāļi (`123n`) un operatori | ✅ |
| Asinhronās funkcijas, asinhronie ģeneratori, augstākā līmeņa await | ✅ |
| Ģeneratori (sinhronie un asinhronie) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iteratori un iterējamie objekti (Symbol.iterator) | ✅ |
| Symbol primitīvie tipi un iepriekš definētie simboli | ✅ |
| ES moduļi (`import` / `export`, dinamiskais `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (3. stadija) | ✅ |
| Stingrais režīms un Annex B mantotā darbība | ✅ |
| Regulārās izteiksmes (`/u`, `/v`, `/d`, nosauktas grupas, skatīšanās atpakaļ) | ✅ |
| Automātiska semikolu ievietošana (ASI) | ✅ |
| Hashbang gramatika (`#!/usr/bin/env phasis`) | ✅ |
| Pareizi beigu izsaukumi stingrajā režīmā (ES2015, prasīti specifikācijā) | ✅ |

## Standarta bibliotēka

### Pamatobjekti

| Objekts | Aptvērums |
|---|---|
| `Object` | pilns — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries` u. c. |
| `Array` | pilns — visas prototipa metodes, tostarp `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | pilns — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | pilns — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER` u. c. |
| `BigInt` | pilns — patvaļīga precizitāte, izmantojot bcmath |
| `Boolean` | pilns |
| `Math` | pilns — visas metodes un visi īpašie gadījumi saistībā ar NaN / Infinity / -0 |
| `JSON` | pilns — `parse`, `stringify`, pielāgoti aizvietotāji, reviver, atkāpes |
| `Symbol` | pilns — `for`, `keyFor`, visi iepriekš definētie simboli, `Symbol.toPrimitive` |
| `Function` | pilns — `call`, `apply`, `bind`, `length`, `name`, `prototype` semantika |

### Kolekcijas

| Objekts | Aptvērums |
|---|---|
| `Map` | pilns — tostarp `groupBy` un iterācija ar aktuālajiem datiem |
| `Set` | pilns — tostarp `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | pilns |

### Asinhronā darbība

| Objekts | Aptvērums |
|---|---|
| `Promise` | pilns — `all`, `race`, `any`, `allSettled`, `withResolvers`, asinhronā iterācija |
| `AsyncIterator`, `AsyncGenerator` | pilns |
| Mikrouzdevumu plānošana | ✅ |

### Binārie dati

| Objekts | Aptvērums |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | pilns |
| `DataView` | pilns — `getBigInt64`, `setBigInt64` u. c. |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | pilns |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | pilns (tikai viena aģenta režīmā) |

### Refleksija un starpniekobjekti

| Objekts | Aptvērums |
|---|---|
| `Proxy` | visi 13 slazdi, atsaucams |
| `Reflect` | visas 14 statiskās metodes |

### Kļūdas

| Objekts | Aptvērums |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | pilns |
| `AggregateError` | pilns |
| `SuppressedError` (3. stadijas skaidra resursu pārvaldība) | pilns |

### Datumi un laiks

| Objekts | Aptvērums |
|---|---|
| `Date` | pilns |
| `Temporal` (3. stadija) | pilns — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (tostarp ebreju, ķīniešu, Dangi, etiopiešu u. c.) |

### Internacionalizācija

| Objekts | Aptvērums |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | pilns (ja pieejams, izmanto PHP `intl` paplašinājumu) |

### Resursu pārvaldība

| Objekts | Aptvērums |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (3. stadija) | pilns |
| `Symbol.dispose`, `Symbol.asyncDispose` | pilns |
| `using` / `await using` deklarācijas | pilns |

### Cits

| Objekts | Aptvērums |
|---|---|
| `RegExp` (tostarp `/v` kopu pieraksts, nosauktas tveršanas grupas, skatīšanās uz priekšu un atpakaļ, lipīgie/globālie karodziņi) | pilns |
| `Iterator` palīgfunkcijas (3. stadija) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | pilns |
| `ShadowRealm` (3. stadija) | pilns |
| `globalThis` | ✅ |

## Tīmekļa platformas API (WHATWG / W3C, nav TC39 daļa)

Papildus pašam ECMAScript, Phasis piedāvā vairākas Web API pakotņu kārtas, ko reālās pasaules JS bibliotēkas pārbauda iepriekš. Pilnu funkciju klāstu un atbilstību katrā jomā skatiet lapā [Tīmekļa API](https://phasis.inline0.dev/lv/docs/compatibility/web-apis).

| Pakotne | Globālie objekti | WPT |
|---|---|---|
| **Tīmekļa platforma** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (`globalThis` aizstājvārds), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, `Body` papildinājums, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, pilna WHATWG plūsmu saskarne (`ReadableStream`, `WritableStream`, `TransformStream`, rindas stratēģijas, BYOB), `CompressionStream` / `DecompressionStream` (zlib un neobligāts brotli, izmantojot `ext-brotli`), `navigator` | 100 %¹ |
| **Kriptogrāfija** | `crypto.getRandomValues`, `crypto.randomUUID`, pilns `SubtleCrypto` (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) | 100 % |
| **WebSocket** | `WebSocket` (konstruktors un RFC 6455 kadru kodētājs un dekodētājs, aizstājams transports, izmantojot `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (veidots virs fetch transporta, tāpēc darbojas politiku āķi) | 100 % |
| **Notikumu cikls** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (3. stadija) | n/a (pārbaudīts ar oracle) |

¹ Izņemot atļauto apakštestu kopas saspiešanas pārbaudēs: brotli gadījumus, kam nepieciešams `ext-brotli`, un gadījumus, kuros ievade balstīta uz `SharedArrayBuffer` (`EXPECTED_FAILURES` vidē `tests/Wpt/WptTest.php`).

Visi pārējie importētie Web Platform Tests izpildās sekmīgi — atbilstības pārskatu skatiet lapā [Tīmekļa API](https://phasis.inline0.dev/lv/docs/compatibility/web-apis).

## Kas vēl nav ieviests

- **SharedArrayBuffer darbinieku semantika** ārpus viena aģenta — atomārai paziņošanai starp vairākām īstām OS pavedienu kopām nepieciešams `pcntl`, un tas nav izstrādes plānos. Viena aģenta atomārās darbības darbojas.
- **`Intl.Segmenter` ar grafēmu kopām, kam nepieciešama ICU 76+** — atkarīgs no resursdatora PHP paplašinājuma versijas: `intl`.

## Versiju veidošana

Phasis ievēro semver. Versiju līnija seko ECMAScript specifikācijas melnrakstiem:

| Phasis versija | Specifikācijas mērķis | 3. stadijas priekšlikumi |
|---|---|---|
| 0.x | ES2024 | dekoratori, Temporal, skaidra resursu pārvaldība, iteratoru palīgfunkcijas, kopu metodes |

Versija 1.0 tiks izdota, kad būs ieviesti visi 4. stadijas priekšlikumi ES2025 melnrakstā un būs stabila Promise iztukšošanas semantika.
