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

Phasis ориентируется на актуальную спецификацию ECMAScript (ES2024+) и отслеживает предложения TC39 на стадии 3 и выше. На этой странице представлен удобный для чтения перечень того, что уже реализовано.

## Язык

| Возможность | Статус |
|---|:---:|
| Лексические объявления (`let`, `const`) с TDZ | ✅ |
| Блочная, функциональная и модульная области видимости | ✅ |
| Стрелочные функции (с лексическим `this`) | ✅ |
| Параметры по умолчанию, остаточные параметры, spread | ✅ |
| Деструктуризация (массивов, объектов, вложенная, значения по умолчанию, rest) | ✅ |
| Шаблонные литералы и помеченные шаблоны | ✅ |
| Вычисляемые имена свойств | ✅ |
| Сокращённая запись свойств и методов | ✅ |
| Классы — конструкторы, методы, геттеры/сеттеры, статические элементы | ✅ |
| Поля классов (публичные, приватные, статические) | ✅ |
| Приватные методы и аксессоры | ✅ |
| `super` в методах и конструкторах | ✅ |
| Декораторы (стадия 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` (стадия 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`, пользовательские функции замены, reviver, отступы |
| `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` (явное управление ресурсами, стадия 3) | полный |

### Даты и время

| Объект | Охват |
|---|---|
| `Date` | полный |
| `Temporal` (стадия 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` (стадия 3) | полный |
| `Symbol.dispose`, `Symbol.asyncDispose` | полный |
| Объявления `using` / `await using` | полный |

### Прочее

| Объект | Охват |
|---|---|
| `RegExp` (включая запись множеств `/v`, именованные захваты, проверки контекста и флаги sticky/global) | полный |
| Вспомогательные методы `Iterator` (стадия 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | полный |
| `ShadowRealm` (стадия 3) | полный |
| `globalThis` | ✅ |

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

Помимо чистого ECMAScript, Phasis поставляет несколько уровней наборов Web API, которые реальные библиотеки JS проверяют заранее. Полный охват и соответствие по областям см. в разделе [API веб-платформы](https://phasis.inline0.dev/ru/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` (стадия 3) | н/д (проверено по эталону) |

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

Все остальные импортированные Web Platform Tests проходят — см. разбор соответствия в разделе [API веб-платформы](https://phasis.inline0.dev/ru/docs/compatibility/web-apis).

## Что ещё не реализовано

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

## Версии

Phasis придерживается семвер-версионирования. Линейка версий отслеживает черновики спецификации ECMAScript:

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

Выпуск версии 1.0 зависит от реализации всех предложений стадии 4 в черновике ES2025 и стабильной семантики обработки очереди Promise.
