
# Suprafața specificației

Phasis vizează specificația ECMAScript actuală (ES2024+) și urmărește propunerile TC39 aflate în etapa 3 sau mai sus. Această pagină este indexul lizibil pentru oameni al funcționalităților livrate efectiv.

## Limbaj

| Caracteristică | Stare |
|---|:---:|
| Declarații lexicale (`let`, `const`) cu TDZ | ✅ |
| Domeniu de vizibilitate al blocului, funcției și modulului | ✅ |
| Funcții săgeată (cu `this` lexical) | ✅ |
| Parametri impliciți, parametri rest, spread | ✅ |
| Destructurare (tablouri, obiecte, imbricată, valori implicite, rest) | ✅ |
| Șiruri-șablon, șabloane cu etichete | ✅ |
| Nume de proprietăți calculate | ✅ |
| Proprietăți și metode prescurtate | ✅ |
| Clase — constructori, metode, getteri/setteri, statice | ✅ |
| Câmpuri de clasă (publice, private, statice) | ✅ |
| Metode private și accesori | ✅ |
| `super` în metode și constructori | ✅ |
| Decoratori (etapa 3) | ✅ |
| Blocuri de inițializare statică | ✅ |
| Înlănțuire opțională (`?.`), combinare cu valori nullish (`??`) | ✅ |
| Operatori de atribuire logică (`&&=`, `\|\|=`, `??=`) | ✅ |
| Separatoare numerice (`1_000_000`) | ✅ |
| Literali BigInt (`123n`) și operatori | ✅ |
| Funcții asincrone, generatoare asincrone, await la nivel superior | ✅ |
| Generatoare (sincrone și asincrone) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iteratoare și elemente iterabile (Symbol.iterator) | ✅ |
| Primitive Symbol și simboluri bine cunoscute | ✅ |
| Module ES (`import` / `export`, `import()` dinamic) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (etapa 3) | ✅ |
| Mod strict + comportamente vechi Annex B | ✅ |
| Expresii regulate (`/u`, `/v`, `/d`, grupuri denumite, lookbehind) | ✅ |
| Inserare automată a punctului și virgulei (ASI) | ✅ |
| Gramatică hashbang (`#!/usr/bin/env phasis`) | ✅ |
| Apeluri coadă corecte în mod strict (ES2015, impuse de specificație) | ✅ |

## Biblioteca standard

### Elemente fundamentale

| Obiect | Acoperire |
|---|---|
| `Object` | completă — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries`, etc. |
| `Array` | completă — toate metodele prototipului, inclusiv `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | completă — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | completă — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER`, etc. |
| `BigInt` | completă — precizie arbitrară prin bcmath |
| `Boolean` | completă |
| `Math` | completă — toate metodele, fiecare caz special pentru NaN / Infinity / -0 |
| `JSON` | completă — `parse`, `stringify`, înlocuitori personalizați, reviver, indentare |
| `Symbol` | completă — `for`, `keyFor`, toate simbolurile bine cunoscute, `Symbol.toPrimitive` |
| `Function` | completă — `call`, `apply`, `bind`, `length`, `name`, `prototype` semantică |

### Colecții

| Obiect | Acoperire |
|---|---|
| `Map` | completă — inclusiv `groupBy` și iterare live |
| `Set` | completă — inclusiv `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | completă |

### Asincron

| Obiect | Acoperire |
|---|---|
| `Promise` | completă — `all`, `race`, `any`, `allSettled`, `withResolvers`, iterație asincronă |
| `AsyncIterator`, `AsyncGenerator` | completă |
| Planificarea microtask-urilor | ✅ |

### Date binare

| Obiect | Acoperire |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | completă |
| `DataView` | completă — `getBigInt64`, `setBigInt64` etc. |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | completă |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | completă (numai cu un singur agent) |

### Reflecție și proxy-uri

| Obiect | Acoperire |
|---|---|
| `Proxy` | toate cele 13 capcane, revocabile |
| `Reflect` | toate cele 14 metode statice |

### Erori

| Obiect | Acoperire |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | completă |
| `AggregateError` | completă |
| `SuppressedError` (gestionarea explicită a resurselor, etapa 3) | completă |

### Date și oră

| Obiect | Acoperire |
|---|---|
| `Date` | completă |
| `Temporal` (etapa 3) | completă — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (inclusiv ebraică, chineză, Dangi, etiopiană etc.) |

### Internaționalizare

| Obiect | Acoperire |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | completă (apelează extensia `intl` a PHP când este disponibilă) |

### Gestionarea resurselor

| Obiect | Acoperire |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (etapa 3) | completă |
| `Symbol.dispose`, `Symbol.asyncDispose` | completă |
| declarațiile `using` / `await using` | completă |

### Altele

| Obiect | Acoperire |
|---|---|
| `RegExp` (inclusiv notația de set `/v`, capturile cu nume, căutarea în jurul potrivirii, fanioanele sticky/global) | completă |
| ajutoarele `Iterator` (etapa 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | completă |
| `ShadowRealm` (etapa 3) | completă |
| `globalThis` | ✅ |

## API-uri Web Platform (WHATWG / W3C, nu TC39)

Dincolo de ECMAScript pur, Phasis include mai multe pachete stratificate de API-uri Web, pentru care bibliotecile JS din aplicații reale verifică prezența în prealabil. Consultați [API-uri Web](https://phasis.inline0.dev/ro/docs/compatibility/web-apis) pentru suprafața completă și conformitatea pe fiecare domeniu.

| Pachet | Globale | WPT |
|---|---|---|
| **Web Platform** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (alias pentru `globalThis`), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, mixin-ul `Body`, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, WHATWG Streams complet (`ReadableStream`, `WritableStream`, `TransformStream`, strategii de punere în coadă, BYOB), `CompressionStream` / `DecompressionStream` (zlib + brotli opțional prin `ext-brotli`), `navigator` | 100 %¹ |
| **Crypto** | `crypto.getRandomValues`, `crypto.randomUUID`, `SubtleCrypto` complet (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) | 100 % |
| **WebSocket** | `WebSocket` (constructor + codec de cadre RFC 6455, transport înlocuibil prin `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (stratificat peste transportul fetch, deci se aplică hook-urile de politică) | 100 % |
| **Bucla de evenimente** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (etapa 3) | n/a (testat cu oracle) |

¹ Excluzând subtestele din setul de comprimare permise explicit: cazurile brotli, care necesită `ext-brotli`, și cazurile care primesc intrare susținută de `SharedArrayBuffer` (`EXPECTED_FAILURES` în `tests/Wpt/WptTest.php`).

Toate celelalte Web Platform Tests importate trec — consultați [API-uri Web](https://phasis.inline0.dev/ro/docs/compatibility/web-apis) pentru detalierea conformității.

## Ce nu este încă implementat

- **Semantica worker-elor SharedArrayBuffer** dincolo de un singur agent — notificările atomice între fire reale ale sistemului de operare necesită `pcntl` și nu sunt planificate. Atomicele pentru un singur agent funcționează.
- **`Intl.Segmenter` cu grupuri de grafeme care necesită ICU 76+** — depinde de versiunea extensiei `intl` a PHP gazdă.

## Versionare

Phasis urmează semver. Linia versiunii urmărește versiunile preliminare ale specificației ECMAScript:

| Versiunea Phasis | Versiunea țintă a specificației | Propuneri etapa 3 |
|---|---|---|
| 0.x | ES2024 | decoratori, Temporal, gestionarea explicită a resurselor, ajutoare pentru iteratori, metode pentru seturi |

Trecerea la versiunea 1.0 depinde de implementarea fiecărei propuneri din etapa 4 a versiunii preliminare ES2025 și de o semantică stabilă pentru golirea cozii Promise.
