Superfície da especificação
Phasis tem como alvo a especificação ECMAScript atual (ES2024+) e acompanha as propostas do TC39 no Stage 3 ou superior. Esta página é o índice legível por pessoas do que foi realmente implementado.
Linguagem
Recurso
Status
Declarações léxicas (let, const) com TDZ
✅
Escopo de bloco, de função e de módulo
✅
Funções de seta (com this léxico)
✅
Parâmetros padrão, parâmetros rest, spread
✅
Desestruturação (array, objeto, aninhada, padrões, rest)
✅
Literais de template, templates marcados
✅
Nomes de propriedades computados
✅
Propriedades e métodos abreviados
✅
Classes — construtores, métodos, getters/setters, estáticos
✅
Campos de classe (públicos, privados, estáticos)
✅
Métodos e acessores privados
✅
super em métodos e construtores
✅
Decoradores (Stage 3)
✅
Blocos inicializadores estáticos
✅
Encadeamento opcional (?.), coalescência de nulos (??)
✅
Operadores de atribuição lógica (&&=, ||=, ??=)
✅
Separadores numéricos (1_000_000)
✅
Literais BigInt (123n) e operadores
✅
Funções assíncronas, geradores assíncronos, await no nível superior
✅
Geradores (síncronos e assíncronos)
✅
for…of, for…in, for await…of
✅
Iteradores e iteráveis (Symbol.iterator)
✅
Primitivas Symbol e símbolos conhecidos
✅
Módulos ES (import / export, import() dinâmico)
✅
import.meta
✅
import attributes (Stage 3)
✅
Modo estrito + comportamentos legados do Annex B
✅
Expressões regulares (/u, /v, /d, grupos nomeados, lookbehind)
✅
Inserção automática de ponto e vírgula (ASI)
✅
Gramática de hashbang (#!/usr/bin/env phasis)
✅
Chamadas de cauda adequadas no modo estrito (ES2015, exigidas pela especificação)
✅
Biblioteca padrão
Fundamental
Objeto
Cobertura
Object
completa — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries etc.
Array
completa — todos os métodos de protótipo, incluindo 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 etc.
BigInt
completa — precisão arbitrária via bcmath
Boolean
completa
Math
completa — todos os métodos e casos especiais para NaN / Infinity / -0
JSON
completa — parse, stringify, substituidores personalizados, reviver, indentação
Symbol
completa — for, keyFor, todos os símbolos conhecidos, Symbol.toPrimitive
Function
completa — semântica de call, apply, bind, length, name, prototype
Coleções
Objeto
Cobertura
Map
completa — incluindo groupBy e iteração ao vivo
Set
completa — incluindo intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry
completa
Assíncrono
Objeto
Cobertura
Promise
completa — all, race, any, allSettled, withResolvers, iteração assíncrona
AsyncIterator, AsyncGenerator
completa
Agendamento de microtarefas
✅
Dados binários
Objeto
Cobertura
ArrayBuffer, SharedArrayBuffer
completa
DataView
completa — getBigInt64, setBigInt64 etc.
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 (apenas agente único)
Reflexão e proxies
Objeto
Cobertura
Proxy
todas as 13 armadilhas, revogável
Reflect
todos os 14 métodos estáticos
Erros
Objeto
Cobertura
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError
completa
AggregateError
completa
SuppressedError (gerenciamento explícito de recursos, Stage 3)
completa
Datas e horários
Objeto
Cobertura
Date
completa
Temporal (Stage 3)
completa — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (incluindo hebraico, chinês, Dangi, etíope etc.)
Internacionalização
Objeto
Cobertura
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter
completa (delegada à extensão intl de PHP quando disponível)
Gerenciamento de recursos
Objeto
Cobertura
DisposableStack, AsyncDisposableStack (Stage 3)
completa
Symbol.dispose, Symbol.asyncDispose
completa
Declarações using / await using
completa
Outros
Objeto
Cobertura
RegExp (incluindo notação de conjuntos /v, capturas nomeadas, lookaround, flags sticky/global)
completa
Auxiliares Iterator (Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find
completa
ShadowRealm (Stage 3)
completa
globalThis
✅
Além do ECMAScript puro, Phasis fornece vários conjuntos em camadas de APIs Web que bibliotecas JS do mundo real verificam previamente. Consulte APIs Web para ver toda a superfície e a conformidade de cada área.
Conjunto
Globais
WPT
Plataforma Web
URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (alias de globalThis), DOMException
100 %
Fetch
fetch, Request, Response, Headers, mixin Body, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, fluxos WHATWG completos (ReadableStream, WritableStream, TransformStream, estratégias de enfileiramento, BYOB), CompressionStream / DecompressionStream (zlib + brotli opcional via ext-brotli), navigator
100 %¹
Crypto
crypto.getRandomValues, crypto.randomUUID, SubtleCrypto completo (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2)
100 %
WebSocket
WebSocket (construtor + codec de frames RFC 6455, transporte substituível via setWebSocketTransport)
100 %
XHR
XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (em camadas sobre o transporte fetch, portanto os hooks de política se aplicam)
100 %
Loop de eventos
setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3)
n/a (testado com oráculo)
¹ Excluindo os subtestes permitidos nas fixtures de compressão: os casos de brotli, que precisam de ext-brotli, e os casos que recebem entrada baseada em SharedArrayBuffer (EXPECTED_FAILURES em tests/Wpt/WptTest.php).
Todos os demais Web Platform Tests importados passam — consulte APIs Web para ver a divisão da conformidade.
O que ainda não foi implementado
Semântica de workers SharedArrayBuffer além de um único agente — a notificação atômica multithread entre threads reais do sistema operacional requer pcntl e não está no roadmap. Átomos de agente único funcionam.Intl.Segmenter com clusters de grafemas que precisam do ICU 76+ — depende da versão da extensão intl do PHP hospedeiro. Versionamento
Phasis segue o semver. A linha de versões acompanha os rascunhos da especificação ECMAScript:
Versão do Phasis
Alvo da especificação
Propostas Stage 3
0.x
ES2024
decoradores, Temporal, gerenciamento explícito de recursos, auxiliares de iterador, métodos de conjunto
A atualização para 1.0 depende da implementação de todas as propostas Stage 4 do rascunho ES2025 e de uma semântica estável para drenagem de Promise.