Copertura delle specifiche
Phasis ha come obiettivo la specifica ECMAScript attuale (ES2024+) e segue le proposte TC39 allo Stage 3 e superiori. Questa pagina è l'indice leggibile di ciò che è effettivamente incluso.
Linguaggio
Funzionalità
Stato
Dichiarazioni lessicali (let, const) con TDZ
✅
Ambito di blocco, di funzione e di modulo
✅
Funzioni freccia (con this lessicale)
✅
Parametri predefiniti, parametri rest, spread
✅
Destrutturazione (array, oggetti, annidata, valori predefiniti, rest)
✅
Template literal e template literal con tag
✅
Nomi di proprietà calcolati
✅
Proprietà e metodi abbreviati
✅
Classi — costruttori, metodi, getter/setter, statici
✅
Campi di classe (pubblici, privati, statici)
✅
Metodi e accessor privati
✅
super in metodi e costruttori
✅
Decorator (Stage 3)
✅
Blocchi di inizializzazione statici
✅
Chaining opzionale (?.), coalescenza dei nullish (??)
✅
Operatori di assegnazione logica (&&=, ||=, ??=)
✅
Separatore numerico (1_000_000)
✅
Literal BigInt (123n) e operatori
✅
Funzioni asincrone, generatori asincroni, await a livello superiore
✅
Generator (sincroni e asincroni)
✅
for…of, for…in, for await…of
✅
Iterator e iterabili (Symbol.iterator)
✅
Primitivi Symbol e simboli noti
✅
Moduli ES (import / export, import() dinamico)
✅
import.meta
✅
import attributes (Stage 3)
✅
Modalità strict + comportamenti legacy di Annex B
✅
Espressioni regolari (/u, /v, /d, gruppi con nome, lookbehind)
✅
Inserimento automatico del punto e virgola (ASI)
✅
Grammatica hashbang (#!/usr/bin/env phasis)
✅
Tail call ottimali in modalità strict (ES2015, richieste dalla specifica)
✅
Libreria standard
Fondamentali
Oggetto
Copertura
Object
completa — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries, ecc.
Array
completa — tutti i metodi prototype, inclusi at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String
completa — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number
completa — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER, ecc.
BigInt
completa — precisione arbitraria tramite bcmath
Boolean
completa
Math
completa — tutti i metodi e tutti i casi speciali per NaN / Infinity / -0
JSON
completa — parse, stringify, replacer personalizzati, reviver, indentazione
Symbol
completa — for, keyFor, tutti i simboli noti, Symbol.toPrimitive
Function
completa — semantica di call, apply, bind, length, name, prototype
Collezioni
Oggetto
Copertura
Map
completa — include groupBy e iterazione live
Set
completa — include intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry
completa
Asincrono
Oggetto
Copertura
Promise
completa — all, race, any, allSettled, withResolvers, iterazione asincrona
AsyncIterator, AsyncGenerator
completa
Pianificazione dei microtask
✅
Dati binari
Oggetto
Copertura
ArrayBuffer, SharedArrayBuffer
completa
DataView
completa — getBigInt64, setBigInt64, ecc.
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array
completa
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync
completa (solo singolo agente)
Reflection e proxy
Oggetto
Copertura
Proxy
tutte le 13 trap, revocabile
Reflect
tutti i 14 metodi statici
Errori
Oggetto
Copertura
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError
completa
AggregateError
completa
SuppressedError (gestione esplicita delle risorse, Stage 3)
completa
Date e orari
Oggetto
Copertura
Date
completa
Temporal (Stage 3)
completa — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (incl. ebraico, cinese, Dangi, etiope, ecc.)
Internazionalizzazione
Oggetto
Copertura
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter
completa (si affida all'estensione intl di PHP quando disponibile)
Gestione delle risorse
Oggetto
Copertura
DisposableStack, AsyncDisposableStack (Stage 3)
completa
Symbol.dispose, Symbol.asyncDispose
completa
dichiarazioni using / await using
completa
Altro
Oggetto
Copertura
RegExp (incl. notazione insiemistica /v, catture con nome, lookaround, flag sticky/globali)
completa
helper Iterator (Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find
completa
ShadowRealm (Stage 3)
completa
globalThis
✅
Oltre al solo ECMAScript, Phasis include diversi pacchetti stratificati di API Web per cui le librerie JS del mondo reale eseguono controlli preliminari. Consultate API Web per la copertura completa e la conformità per area.
Pacchetto
Globali
WPT
Piattaforma Web
URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (alias di globalThis), DOMException
100 %
Fetch
fetch, Request, Response, Headers, mixin Body, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, WHATWG Streams complete (ReadableStream, WritableStream, TransformStream, strategie di accodamento, BYOB), CompressionStream / DecompressionStream (zlib + brotli opzionale tramite ext-brotli), navigator
100 %¹
Crittografia
crypto.getRandomValues, crypto.randomUUID, SubtleCrypto completa (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2)
100 %
WebSocket
WebSocket (costruttore + codec di frame RFC 6455, trasporto sostituibile tramite setWebSocketTransport)
100 %
XHR
XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (basati sul trasporto fetch, quindi si applicano gli hook delle policy)
100 %
Ciclo degli eventi
setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3)
n/a (test oracle)
¹ Esclusi i sottotest autorizzati nei test di compressione: i casi brotli, che richiedono ext-brotli, e i casi che ricevono input basato su SharedArrayBuffer (EXPECTED_FAILURES in tests/Wpt/WptTest.php).
Tutti gli altri Web Platform Tests importati vengono superati: consultate API Web per il dettaglio della conformità.
Funzionalità non ancora implementate
Semantica dei worker SharedArrayBuffer oltre il singolo agente — la notifica atomica multithread tra thread reali del sistema operativo richiede pcntl e non è prevista nella roadmap. Gli atomici con un singolo agente funzionano.Intl.Segmenter con cluster di grafemi che richiedono ICU 76+ — dipende dalla versione dell'estensione intl del PHP host. Versioni
Phasis segue il versionamento semantico. La versione segue le bozze delle specifiche ECMAScript:
Versione Phasis
Specifica di riferimento
Proposte Stage 3
0.x
ES2024
decorator, Temporal, gestione esplicita delle risorse, helper per iteratori, metodi per set
Il passaggio alla versione 1.0 è subordinato all'implementazione di tutte le proposte Stage 4 della bozza ES2025 e alla stabilità della semantica di svuotamento di Promise.