Preskočiť na obsah

Rozsah špecifikácie

Phasis cieli na aktuálnu špecifikáciu ECMAScriptu (ES2024+) a sleduje návrhy TC39 vo fáze 3 a vyššej. Táto stránka je prehľadným indexom toho, čo je skutočne dostupné.

Jazyk

Vlastnosť Stav
Lexikálne deklarácie (let, const) s TDZ ✅
Blokový, funkčný a modulový rozsah platnosti ✅
Funkcie so šípkovou syntaxou (s lexikálnym this) ✅
Predvolené parametre, zvyškové parametre, spread ✅
Destrukturalizácia (polia, objekty, vnorené štruktúry, predvolené hodnoty, zvyškové prvky) ✅
Šablónové literály, označené šablóny ✅
Vypočítané názvy vlastností ✅
Skrátený zápis vlastností a metód ✅
Triedy — konštruktory, metódy, gettery/settery, statické členy ✅
Polia tried (verejné, súkromné, statické) ✅
Súkromné metódy a prístupové metódy ✅
super v metódach a konštruktoroch ✅
Dekorátory (fáza 3) ✅
Bloky statických inicializátorov ✅
Voliteľné reťazenie (?.), spájanie s hodnotou null (??) ✅
Operátory logického priradenia (&&=, ||=, ??=) ✅
Oddeľovače v číselných literáloch (1_000_000) ✅
Literály BigInt (123n) a operátory ✅
Asynchrónne funkcie, asynchrónne generátory, await na najvyššej úrovni ✅
Generátory (synchrónne a asynchrónne) ✅
for…of, for…in, for await…of ✅
Iterátory a iterovateľné objekty (Symbol.iterator) ✅
Primitívne symboly a známe symboly ✅
Moduly ES (import / export, dynamický import()) ✅
import.meta ✅
import attributes (fáza 3) ✅
Prísny režim + staršie správanie Annex B ✅
Regulárne výrazy (/u, /v, /d, pomenované skupiny, spätné pohľady) ✅
Automatické vkladanie bodkočiarok (ASI) ✅
Gramatika Hashbang (#!/usr/bin/env phasis) ✅
Správne koncové volania v prísnom režime (ES2015, vyžaduje ich špecifikácia) ✅

Štandardná knižnica

Základné

Objekt Pokrytie
Object úplné — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries atď.
Array úplné — každá metóda prototypu vrátane 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 atď.
BigInt úplné — ľubovoľná presnosť cez bcmath
Boolean úplné
Math úplné — každá metóda a každá špeciálna situácia pre NaN / Infinity / -0
JSON úplné — parse, stringify, vlastné nahradzujúce funkcie, reviver, odsadenie
Symbol úplné — for, keyFor, všetky známe symboly, Symbol.toPrimitive
Function úplné — call, apply, bind, length, name, prototype sémantika

Kolekcie

Objekt Pokrytie
Map úplné — vrátane groupBy a živej iterácie
Set úplné — vrátane intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry úplné

Asynchrónnosť

Objekt Pokrytie
Promise úplné — all, race, any, allSettled, withResolvers, asynchrónna iterácia
AsyncIterator, AsyncGenerator úplné
Plánovanie mikrotaskov ✅

Binárne údaje

Objekt Pokrytie
ArrayBuffer, SharedArrayBuffer úplné
DataView úplné — getBigInt64, setBigInt64 atď.
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é (len jeden agent)

Reflexia a proxy

Objekt Pokrytie
Proxy všetkých 13 pascí, možnosť zrušenia
Reflect všetkých 14 statických metód

Chyby

Objekt Pokrytie
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError úplné
AggregateError úplné
SuppressedError (explicitná správa zdrojov, Stage 3) úplné

Dátumy a čas

Objekt Pokrytie
Date úplné
Temporal (Stage 3) úplné — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (vrátane hebrejského, čínskeho, Dangi, etiópskeho atď.)

Internacionalizácia

Objekt Pokrytie
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter úplné (ak je dostupné, deleguje na rozšírenie intl v PHP)

Správa zdrojov

Objekt Pokrytie
DisposableStack, AsyncDisposableStack (Stage 3) úplné
Symbol.dispose, Symbol.asyncDispose úplné
deklarácie using / await using úplné

Ostatné

Objekt Pokrytie
RegExp (vrátane notácie množín /v, pomenovaných zachytení, lookaround, príznakov sticky/global) úplné
Pomocné funkcie Iterator (Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find úplné
ShadowRealm (Stage 3) úplné
globalThis ✅

Rozhrania Web Platform (WHATWG / W3C, nie TC39)

Okrem čistého ECMAScriptu Phasis obsahuje niekoľko vrstvených balíkov Web API, ktoré knižnice JS v reálnych podmienkach predbežne kontrolujú. Kompletný prehľad API a zhodu v jednotlivých oblastiach nájdete v časti Web API.

Balík Globálne objekty WPT
Web Platform 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á podpora WHATWG Streams (ReadableStream, WritableStream, TransformStream, stratégie zaraďovania do frontu, BYOB), CompressionStream / DecompressionStream (zlib + voliteľné brotli cez ext-brotli), navigator 100 %¹
Crypto 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 (konštruktor + kodek rámcov RFC 6455, vymeniteľný prenos cez setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (postavené na prenose Fetch, takže platia aj pravidlá politiky) 100 %
Slučka udalostí setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3) n/a (overené pomocou oracle)

¹ Nezahŕňa podtesty uvedené na zozname povolených výnimiek v testovacích prípadoch kompresie: prípady brotli, ktoré vyžadujú ext-brotli, a prípady používajúce vstup podporovaný SharedArrayBuffer (EXPECTED_FAILURES v tests/Wpt/WptTest.php).

Všetky ostatné importované testy Web Platform Tests prechádzajú — prehľad zhody nájdete v časti Web API.

Čo ešte nie je implementované

  • Sémantika workerov SharedArrayBuffer mimo jedného agenta — atómové oznamovanie medzi vláknami skutočného OS vyžaduje pcntl a nie je v pláne. Atómové operácie v rámci jedného agenta fungujú.
  • Intl.Segmenter s grafémovými klastrami, ktoré vyžadujú ICU 76+ — závisí od verzie rozšírenia intl v hostiteľskom PHP.

Verziovanie

Phasis sa riadi sémantickým verzovaním. Číselná verzia sleduje návrhy špecifikácie ECMAScript:

Verzia Phasis Cieľová špecifikácia Návrhy Stage 3
0.x ES2024 dekorátory, Temporal, explicitná správa zdrojov, pomocné funkcie iterátora, metódy množín

Verzia 1.0 bude vydaná až po implementovaní každého návrhu Stage 4 v návrhu ES2025 a stabilizovaní sémantiky vyprázdňovania frontu Promise.