Saltar al contenido

Ámbito de la especificación

Phasis tiene como objetivo la especificación actual de ECMAScript (ES2024+) y sigue las propuestas de TC39 en la fase 3 o superior. Esta página es el índice legible de lo que realmente incluye.

Lenguaje

Característica Estado
Declaraciones léxicas (let, const) con TDZ ✅
Ámbito de bloque, de función y de módulo ✅
Funciones flecha (con this léxico) ✅
Parámetros predeterminados, parámetros rest y expansión ✅
Desestructuración (de matrices, objetos, anidada, con valores predeterminados y rest) ✅
Literales de plantilla y plantillas etiquetadas ✅
Nombres de propiedades calculados ✅
Propiedades y métodos abreviados ✅
Clases: constructores, métodos, getters/setters y estáticos ✅
Campos de clase (públicos, privados y estáticos) ✅
Métodos y accesores privados ✅
super en métodos y constructores ✅
Decoradores (fase 3) ✅
Bloques de inicialización estáticos ✅
Encadenamiento opcional (?.), fusión con nulos (??) ✅
Operadores de asignación lógica (&&=, ||=, ??=) ✅
Separadores numéricos (1_000_000) ✅
Literales BigInt (123n) y operadores ✅
Funciones asíncronas, generadores asíncronos y await de nivel superior ✅
Generadores (síncronos y asíncronos) ✅
for…of, for…in, for await…of ✅
Iteradores e iterables (Symbol.iterator) ✅
Primitivos Symbol y símbolos conocidos ✅
Módulos ES (import / export, import() dinámico) ✅
import.meta ✅
import attributes (fase 3) ✅
Modo estricto y comportamientos heredados del Anexo B ✅
Expresiones regulares (/u, /v, /d, grupos con nombre y búsqueda hacia atrás) ✅
Inserción automática de punto y coma (ASI) ✅
Gramática hashbang (#!/usr/bin/env phasis) ✅
Llamadas de cola apropiadas en modo estricto (ES2015, exigidas por la especificación) ✅

Biblioteca estándar

Fundamental

Objeto Cobertura
Object completa — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries, etc.
Array completa — todos los métodos del prototipo, incluidos 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 — precisión arbitraria mediante bcmath
Boolean completa
Math completa — todos los métodos y casos especiales para NaN / Infinity / -0
JSON completa — parse, stringify, reemplazadores personalizados, reviver e indentación
Symbol completa — for, keyFor, todos los símbolos conocidos y Symbol.toPrimitive
Function completa — semántica de call, apply, bind, length, name y prototype

Colecciones

Objeto Cobertura
Map completa, incluida groupBy y la iteración en vivo
Set completa, incluidos intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry completa

Asincronía

Objeto Cobertura
Promise completa — all, race, any, allSettled, withResolvers, iteración asíncrona
AsyncIterator, AsyncGenerator completa
Planificación de microtareas ✅

Datos binarios

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 (solo agente único)

Reflexión y proxies

Objeto Cobertura
Proxy las 13 trampas, revocables
Reflect los 14 métodos estáticos

Errores

Objeto Cobertura
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError completa
AggregateError completa
SuppressedError (gestión explícita de recursos, Stage 3) completa

Fechas y hora

Objeto Cobertura
Date completa
Temporal (Stage 3) completa — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (incluidos hebreo, chino, Dangi, etíope, etc.)

Internacionalización

Objeto Cobertura
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter completa (delega en la extensión intl de PHP cuando está disponible)

Gestión de recursos

Objeto Cobertura
DisposableStack, AsyncDisposableStack (Stage 3) completa
Symbol.dispose, Symbol.asyncDispose completa
Declaraciones using / await using completas

Otros

Objeto Cobertura
RegExp (incluye la notación de conjuntos /v, capturas con nombre, búsqueda hacia delante y hacia atrás, indicadores sticky/global) completa
Helpers Iterator (Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find completa
ShadowRealm (Stage 3) completa
globalThis ✅

API de la plataforma web (WHATWG / W3C, no TC39)

Además del ECMAScript puro, Phasis incluye varios paquetes escalonados de API web que las bibliotecas JS del mundo real verifican de antemano. Consulta API web para ver toda la superficie y la conformidad por área.

Paquete Globales 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, Streams completo de WHATWG (ReadableStream, WritableStream, TransformStream, estrategias de encolado, BYOB), CompressionStream / DecompressionStream (zlib + brotli opcional mediante 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 (constructor + códec de tramas RFC 6455, transporte sustituible mediante setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (implementado sobre el transporte fetch, por lo que se aplican los hooks de política) 100 %
Bucle de eventos setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3) n/a (probado con oráculo)

¹ Se excluyen las subpruebas permitidas en los casos de prueba de compresión: los casos de brotli, que requieren ext-brotli, y los casos que reciben una entrada respaldada por SharedArrayBuffer (EXPECTED_FAILURES en tests/Wpt/WptTest.php).

Todas las demás Web Platform Tests importadas pasan; consulta API web para ver el desglose de conformidad.

Lo que aún no está implementado

  • Semántica de SharedArrayBuffer en workers más allá de un único agente: la notificación atómica entre varios hilos reales del sistema operativo requiere pcntl y no está prevista. Los átomos de un solo agente funcionan.
  • Intl.Segmenter con grupos de grafemas que requieren ICU 76+: depende de la versión de la extensión intl de PHP del sistema anfitrión.

Versionado

Phasis sigue el versionado semántico. La línea de versiones sigue los borradores de la especificación ECMAScript:

Versión de Phasis Objetivo de la especificación Propuestas Stage 3
0.x ES2024 decoradores, Temporal, gestión explícita de recursos, helpers de iteradores, métodos de conjuntos

La versión 1.0 depende de que se implementen todas las propuestas Stage 4 del borrador ES2025 y de que la semántica de vaciado de Promise sea estable.