Přejít k obsahu

Pokrytí specifikace

Phasis cílí na aktuální specifikaci ECMAScriptu (ES2024+) a sleduje návrhy TC39 ve fázi 3 a vyšší. Tato stránka je přehledný index toho, co je skutečně součástí vydání.

Jazyk

Funkce Stav
Lexikální deklarace (let, const) s TDZ ✅
Blokový, funkční a modulový rozsah platnosti ✅
Šipkové funkce (s lexikálním this) ✅
Výchozí parametry, zbytkové parametry, rozbalení ✅
Destrukturalizace (pole, objekt, vnoření, výchozí hodnoty, zbytek) ✅
Řetězcové literály šablon a označené šablony ✅
Vypočítané názvy vlastností ✅
Zkrácené zápisy vlastností a metod ✅
Třídy — konstruktory, metody, gettery/settery, statické členy ✅
Pole tříd (veřejná, soukromá, statická) ✅
Soukromé metody a přístupové metody ✅
super v metodách a konstruktorech ✅
Dekorátory (fáze 3) ✅
Bloky statické inicializace ✅
Volitelné řetězení (?.), koalescence nullish (??) ✅
Operátory logického přiřazení (&&=, ||=, ??=) ✅
Číselné oddělovače (1_000_000) ✅
Literály BigInt (123n) a operátory ✅
Asynchronní funkce, asynchronní generátory, await na nejvyšší úrovni ✅
Generátory (synchronní a asynchronní) ✅
for…of, for…in, for await…of ✅
Iterátory a iterovatelné objekty (Symbol.iterator) ✅
Primitivní hodnoty Symbol a známé symboly ✅
Moduly ES (import / export, dynamický import()) ✅
import.meta ✅
import attributes (fáze 3) ✅
Přísný režim + zastaralé chování Annex B ✅
Regulární výrazy (/u, /v, /d, pojmenované skupiny, zpětný pohled) ✅
Automatické vkládání středníků (ASI) ✅
Gramatika hashbang (#!/usr/bin/env phasis) ✅
Správná volání ocasu v přísném režimu (ES2015, vyžadováno specifikací) ✅

Standardní knihovna

Základní

Objekt Pokrytí
Object úplné — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries atd.
Array úplné — všechny prototypové metody včetně at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String úplné — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number úplné — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER atd.
BigInt úplné — libovolná přesnost přes bcmath
Boolean úplné
Math úplné — všechny metody a všechny zvláštní případy pro NaN / Infinity / -0
JSON úplné — parse, stringify, vlastní nahrazovací funkce, reviver, odsazení
Symbol úplné — for, keyFor, všechny známé symboly, Symbol.toPrimitive
Function úplné — call, apply, bind, length, name, sémantika prototype

Kolekce

Objekt Pokrytí
Map úplné — včetně groupBy a živé iterace
Set úplné — včetně intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry úplné

Asynchronní

Objekt Pokrytí
Promise úplné — all, race, any, allSettled, withResolvers, asynchronní iterace
AsyncIterator, AsyncGenerator úplné
Plánování mikrotasků ✅

Binární data

Objekt Pokrytí
ArrayBuffer, SharedArrayBuffer úplné
DataView úplné — getBigInt64, setBigInt64 atd.
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array úplné
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync úplné (pouze jeden agent)

Reflexe a proxy

Objekt Pokrytí
Proxy všech 13 pastí, lze odvolat
Reflect všech 14 statických metod

Chyby

Objekt Pokrytí
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError úplné
AggregateError úplné
SuppressedError (explicitní správa zdrojů, fáze 3) úplné

Data a čas

Objekt Pokrytí
Date úplné
Temporal (fáze 3) úplné — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (včetně hebrejského, čínského, Dangi, etiopského kalendáře atd.)

Internacionalizace

Objekt Pokrytí
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter úplné (pokud je k dispozici, deleguje na rozšíření intl od PHP)

Správa zdrojů

Objekt Pokrytí
DisposableStack, AsyncDisposableStack (fáze 3) úplné
Symbol.dispose, Symbol.asyncDispose úplné
deklarace using / await using úplné

Ostatní

Objekt Pokrytí
RegExp (včetně zápisu množin /v, pojmenovaných zachycených skupin, lookaround, příznaků sticky/global) úplné
pomocné funkce Iterator (fáze 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find úplné
ShadowRealm (fáze 3) úplné
globalThis ✅

Rozhraní webové platformy (WHATWG / W3C, nikoli TC39)

Kromě samotného ECMAScriptu obsahuje Phasis několik vrstev balíčků webových API, které skutečné knihovny JS předem kontrolují. Úplný přehled a shodu jednotlivých oblastí najdete v části Webová API.

Balíček Globální objekty WPT
Webová platforma URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (alias globalThis), DOMException 100 %
Fetch fetch, Request, Response, Headers, mixin Body, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, plné WHATWG Streams (ReadableStream, WritableStream, TransformStream, strategie fronty, BYOB), CompressionStream / DecompressionStream (zlib + volitelné brotli přes ext-brotli), navigator 100 %¹
Kryptografie crypto.getRandomValues, crypto.randomUUID, plné SubtleCrypto (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) 100 %
WebSocket WebSocket (konstruktor + kodek rámců RFC 6455, vyměnitelný přenos přes setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (postavené nad přenosem fetch, takže se uplatní pravidla) 100 %
Smyčka událostí setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (fáze 3) neuvedeno (ověřeno orákulem)

¹ Vynechány jsou povolené podtesty v testovacích datech komprese: případy brotli, které vyžadují ext-brotli, a případy se vstupem podporovaným SharedArrayBuffer (EXPECTED_FAILURES v tests/Wpt/WptTest.php).

Všechny ostatní importované testy Web Platform Tests procházejí — přehled shody najdete v části Webová API.

Co zatím není implementováno

  • Sémantika workerů SharedArrayBuffer nad rámec jediného agenta — atomické oznámení mezi více vlákny skutečného operačního systému vyžaduje pcntl a není na plánu. Atomické operace v rámci jednoho agenta fungují.
  • Intl.Segmenter s klastry grafémů vyžadujícími ICU 76+ — závisí na verzi rozšíření intl v hostitelském PHP.

Verzování

Phasis se řídí semver. Řada verzí sleduje návrhy specifikace ECMAScriptu:

Verze Phasis Cíl specifikace Návrhy ve fázi 3
0.x ES2024 dekorátory, Temporal, explicitní správa zdrojů, pomocné funkce iterátorů, metody množin

Přechod na verzi 1.0 je podmíněn implementací všech návrhů ve fázi 4 obsažených v návrhu ES2025 a stabilním sémantickým chováním vyprazdňování fronty Promise.