Treci la conținut

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 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 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.