Pular para o conteúdo

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 ✅

APIs da plataforma Web (WHATWG / W3C, não TC39)

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.