
# Обхват на спецификацията

Phasis е насочен към текущата спецификация на ECMAScript (ES2024+) и следи предложенията на TC39 със статус Stage 3 и по-висок. Тази страница е разбираем за хората индекс на вече включеното.

## Език

| Възможност | Статус |
|---|:---:|
| Лексикални декларации (`let`, `const`) с TDZ | ✅ |
| Област на видимост на блок, функция и модул | ✅ |
| Функции със стрелка (с лексикален `this`) | ✅ |
| Параметри по подразбиране, остатъчни параметри, разгръщане | ✅ |
| Деструктуриране (масив, обект, вложени структури, стойности по подразбиране, остатъчни стойности) | ✅ |
| Шаблонни литерали, шаблонни литерали с таг | ✅ |
| Изчислявани имена на свойства | ✅ |
| Съкратен запис на свойства и методи | ✅ |
| Класове — конструктори, методи, гетъри/сетъри, статични елементи | ✅ |
| Полета на класове (публични, частни, статични) | ✅ |
| Частни методи и аксесори | ✅ |
| `super` в методи и конструктори | ✅ |
| Декоратори (Stage 3) | ✅ |
| Статични блокове за инициализация | ✅ |
| Незадължително верижно извикване (`?.`), обединяване при null или липсваща стойност (`??`) | ✅ |
| Логически оператори за присвояване (`&&=`, `\|\|=`, `??=`) | ✅ |
| Разделители в числата (`1_000_000`) | ✅ |
| Литерали BigInt (`123n`) и оператори | ✅ |
| Асинхронни функции, асинхронни генератори, await на най-горно ниво | ✅ |
| Генератори (синхронни и асинхронни) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Итератори и итерируеми обекти (Symbol.iterator) | ✅ |
| Примитиви Symbol и добре познати символи | ✅ |
| ES модули (`import` / `export`, динамичен `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (Stage 3) | ✅ |
| Строг режим + наследени поведения на Annex B | ✅ |
| Регулярни изрази (`/u`, `/v`, `/d`, именувани групи, ретроспективно търсене) | ✅ |
| Автоматично вмъкване на точка и запетая (ASI) | ✅ |
| Граматика за hashbang (`#!/usr/bin/env phasis`) | ✅ |
| Истински опашни извиквания в строг режим (ES2015, изисквани от спецификацията) | ✅ |

## Стандартна библиотека

### Основни

| Обект | Покритие |
|---|---|
| `Object` | пълно — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries` и др. |
| `Array` | пълно — всеки метод на прототипа, включително `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | пълно — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | пълно — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER` и др. |
| `BigInt` | пълно — произволна точност чрез bcmath |
| `Boolean` | пълно |
| `Math` | пълно — всеки метод и всеки специален случай за NaN / Infinity / -0 |
| `JSON` | пълно — `parse`, `stringify`, персонализирани заместващи стойности, възстановяваща функция, отстъпи |
| `Symbol` | пълно — `for`, `keyFor`, всички добре познати символи, `Symbol.toPrimitive` |
| `Function` | пълно — семантика на `call`, `apply`, `bind`, `length`, `name`, `prototype` |

### Колекции

| Обект | Покритие |
|---|---|
| `Map` | пълно — включително `groupBy` и обхождане в реално време |
| `Set` | пълно — включително `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | пълно |

### Асинхронни

| Обект | Покритие |
|---|---|
| `Promise` | пълно — `all`, `race`, `any`, `allSettled`, `withResolvers`, асинхронно обхождане |
| `AsyncIterator`, `AsyncGenerator` | пълно |
| Планиране на микрозадачи | ✅ |

### Двоични данни

| Обект | Покритие |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | пълно |
| `DataView` | пълно — `getBigInt64`, `setBigInt64` и др. |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | пълно |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | пълно (само за един агент) |

### Рефлексия и проксита

| Обект | Покритие |
|---|---|
| `Proxy` | всички 13 капана, с възможност за отмяна |
| `Reflect` | всичките 14 статични метода |

### Грешки

| Обект | Покритие |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | пълно |
| `AggregateError` | пълно |
| `SuppressedError` (Stage 3, изрично управление на ресурсите) | пълно |

### Дати и час

| Обект | Покритие |
|---|---|
| `Date` | пълно |
| `Temporal` (Stage 3) | пълно — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (вкл. еврейски, китайски, данги, етиопски и др.) |

### Интернационализация

| Обект | Покритие |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | пълно (при наличност делегира към разширението `intl` на PHP) |

### Управление на ресурсите

| Обект | Покритие |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (Stage 3) | пълно |
| `Symbol.dispose`, `Symbol.asyncDispose` | пълно |
| Декларации `using` / `await using` | пълно |

### Други

| Обект | Покритие |
|---|---|
| `RegExp` (вкл. нотация на множества `/v`, именувани захвати, lookaround, лепкави/глобални флагове) | пълно |
| Помощни функции `Iterator` (Stage 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | пълно |
| `ShadowRealm` (Stage 3) | пълно |
| `globalThis` | ✅ |

## API за уеб платформата (WHATWG / W3C, не TC39)

Освен чистия ECMAScript, Phasis предоставя няколко многослойни пакета от API за уеб, които реалните библиотеки JS предварително проверяват за съвместимост. Вижте [API за уеб](https://phasis.inline0.dev/bg/docs/compatibility/web-apis) за пълния обхват и съответствието във всяка област.

| Пакет | Глобални обекти | WPT |
|---|---|---|
| **Уеб платформа** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (псевдоним на `globalThis`), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, примес `Body`, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, пълна поддръжка на WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, стратегии за опашки, BYOB), `CompressionStream` / `DecompressionStream` (zlib + незадължителен brotli чрез `ext-brotli`), `navigator` | 100 %¹ |
| **Криптография** | `crypto.getRandomValues`, `crypto.randomUUID`, пълна поддръжка на `SubtleCrypto` (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) | 100 % |
| **WebSocket** | `WebSocket` (конструктор + кодек за рамки по RFC 6455, заменяем транспорт чрез `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (надградени върху транспорта fetch, така че се прилагат правилата) | 100 % |
| **Цикъл на събитията** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (Stage 3) | неприложимо (проверено с oracle) |

¹ Без подтестовете от тестовете за компресия, включени в списъка с изключения: случаите с brotli, за които е нужен `ext-brotli`, и случаите с вход, поддържан от `SharedArrayBuffer` (`EXPECTED_FAILURES` в `tests/Wpt/WptTest.php`).

Всички останали импортирани тестове на уеб платформата минават — вижте [API за уеб](https://phasis.inline0.dev/bg/docs/compatibility/web-apis) за разбивка на съответствието.

## Какво все още не е реализирано

- **Семантика на SharedArrayBuffer за работници** отвъд един агент — атомарните уведомления между реални нишки на операционната система изискват `pcntl` и не са в плана. Атомарните операции в рамките на един агент работят.
- **`Intl.Segmenter` с клъстери от графеми, изискващи ICU 76+** — зависи от версията на разширението `intl` на PHP на хоста.

## Версии

Phasis следва семантичното версиониране. Номерът на версията следва черновите на спецификацията ECMAScript:

| Версия на Phasis | Целева спецификация | Предложения Stage 3 |
|---|---|---|
| 0.x | ES2024 | декоратори, Temporal, изрично управление на ресурсите, помощни функции за итератори, методи за множества |

Преминаването към 1.0 зависи от реализирането на всяко предложение Stage 4 в черновата на ES2025 и от стабилна семантика за изчерпване на Promise.
