Zum Inhalt springen

Spezifikationsumfang

Phasis richtet sich nach der aktuellen ECMAScript-Spezifikation (ES2024+) und berücksichtigt TC39-Vorschläge ab Stage 3. Diese Seite ist das verständliche Verzeichnis der tatsächlich enthaltenen Funktionen.

Sprache

Funktion Status
Lexikalische Deklarationen (let, const) mit TDZ ✅
Block-, Funktions- und Modul-Scope ✅
Arrow-Funktionen (mit lexikalischem this) ✅
Standardparameter, Rest-Parameter, Spread ✅
Destructuring (Array, Objekt, verschachtelt, Standardwerte, Rest) ✅
Template-Literale, getaggte Templates ✅
Berechnete Eigenschaftsnamen ✅
Kurzschreibweise für Eigenschaften und Methoden ✅
Klassen — Konstruktoren, Methoden, Getter/Setter, statische Elemente ✅
Klassenfelder (öffentlich, privat, statisch) ✅
Private Methoden und Zugriffsfunktionen ✅
super in Methoden und Konstruktoren ✅
Decorators (Stage 3) ✅
Statische Initialisierungsblöcke ✅
Optionale Verkettung (?.), Nullish Coalescing (??) ✅
Logische Zuweisungsoperatoren (&&=, ||=, ??=) ✅
Zahlentrennzeichen (1_000_000) ✅
BigInt-Literale (123n) und Operatoren ✅
Async-Funktionen, Async-Generatoren, Top-Level-Await ✅
Generatoren (synchron und asynchron) ✅
for…of, for…in, for await…of ✅
Iteratoren und Iterables (Symbol.iterator) ✅
Symbol-Primitive und bekannte Symbole ✅
ES-Module (import / export, dynamisches import()) ✅
import.meta ✅
import attributes (Stage 3) ✅
Strict Mode und Legacy-Verhalten aus Annex B ✅
Reguläre Ausdrücke (/u, /v, /d, benannte Gruppen, Lookbehind) ✅
Automatisches Einfügen von Semikolons (ASI) ✅
Hashbang-Grammatik (#!/usr/bin/env phasis) ✅
Korrekte Tail Calls im Strict Mode (ES2015, von der Spezifikation vorgeschrieben) ✅

Standardbibliothek

Grundlagen

Objekt Abdeckung
Object vollständig — keys, values, entries, assign, create, freeze, seal, getOwnPropertyDescriptor(s), setPrototypeOf, getOwnPropertyNames, getOwnPropertySymbols, hasOwn, groupBy, fromEntries usw.
Array vollständig — jede Prototypmethode einschließlich at, flatMap, flat, findLast, findLastIndex, toReversed, toSorted, toSpliced, with, group, groupToMap
String vollständig — at, codePointAt, match, matchAll, replaceAll, padStart, padEnd, trimStart, trimEnd, isWellFormed, toWellFormed
Number vollständig — isFinite, isInteger, isNaN, isSafeInteger, EPSILON, MAX_SAFE_INTEGER usw.
BigInt vollständig — beliebige Genauigkeit über bcmath
Boolean vollständig
Math vollständig — jede Methode und jeder Sonderfall für NaN / Infinity / -0
JSON vollständig — parse, stringify, eigene Replacer, Reviver, Einrückung
Symbol vollständig — for, keyFor, alle bekannten Symbole, Symbol.toPrimitive
Function vollständig — Semantik von call, apply, bind, length, name und prototype

Collections

Objekt Abdeckung
Map vollständig — einschließlich groupBy und Live-Iteration
Set vollständig — einschließlich intersection, union, difference, symmetricDifference, isSubsetOf, isSupersetOf, isDisjointFrom
WeakMap, WeakSet, WeakRef, FinalizationRegistry vollständig

Asynchron

Objekt Abdeckung
Promise vollständig — all, race, any, allSettled, withResolvers, asynchrone Iteration
AsyncIterator, AsyncGenerator vollständig
Microtask-Planung ✅

Binärdaten

Objekt Abdeckung
ArrayBuffer, SharedArrayBuffer vollständig
DataView vollständig — getBigInt64, setBigInt64 usw.
Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array, Float16Array, Float32Array, Float64Array vollständig
Atomics — add, sub, and, or, xor, compareExchange, exchange, isLockFree, load, notify, pause, store, wait, waitAsync vollständig (nur einzelner Agent)

Reflection und Proxys

Objekt Abdeckung
Proxy alle 13 Traps, widerrufbar
Reflect alle 14 statischen Methoden

Fehler

Objekt Abdeckung
Error, TypeError, RangeError, ReferenceError, SyntaxError, URIError, EvalError vollständig
AggregateError vollständig
SuppressedError (explizite Ressourcenverwaltung, Stage 3) vollständig

Termine und Uhrzeit

Objekt Abdeckung
Date vollständig
Temporal (Stage 3) vollständig — Now, Instant, PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, ZonedDateTime, Duration, TimeZone, Calendar (einschließlich Hebräisch, Chinesisch, Dangi, Äthiopisch usw.)

Internationalisierung

Objekt Abdeckung
Intl.Locale, Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, Intl.PluralRules, Intl.RelativeTimeFormat, Intl.ListFormat, Intl.DisplayNames, Intl.Segmenter vollständig (nutzt bei Verfügbarkeit die intl-Erweiterung von PHP)

Ressourcenverwaltung

Objekt Abdeckung
DisposableStack, AsyncDisposableStack (Stage 3) vollständig
Symbol.dispose, Symbol.asyncDispose vollständig
Deklarationen von using / await using vollständig

Sonstiges

Objekt Abdeckung
RegExp (einschließlich /v-Mengennotation, benannter Captures, Lookaround, Sticky-/Global-Flags) vollständig
Iterator-Helfer (Stage 3) — map, filter, take, drop, flatMap, reduce, toArray, forEach, some, every, find vollständig
ShadowRealm (Stage 3) vollständig
globalThis ✅

Webplattform-APIs (WHATWG / W3C, nicht TC39)

Über das reine ECMAScript hinaus stellt Phasis mehrere abgestufte Pakete mit Web-APIs bereit, auf die echte JS-Bibliotheken vorab prüfen. Siehe Web-APIs für den vollständigen Umfang und die Konformität nach Bereich.

Paket Globale Objekte WPT
Webplattform URL, URLSearchParams, URLPattern, TextEncoder, TextDecoder, atob, btoa, structuredClone, performance, console, setTimeout / setInterval / queueMicrotask, reportError, self (Alias von globalThis), DOMException 100 %
Fetch fetch, Request, Response, Headers, Mixin Body, AbortController, AbortSignal, Blob, File, FormData, EventTarget, Event, vollständige WHATWG Streams (ReadableStream, WritableStream, TransformStream, Warteschlangenstrategien, BYOB), CompressionStream / DecompressionStream (zlib + optional Brotli über ext-brotli), navigator 100 %¹
Crypto crypto.getRandomValues, crypto.randomUUID, vollständiges SubtleCrypto (Digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) 100 %
WebSocket WebSocket (Konstruktor + RFC-6455-Frame-Codec, austauschbarer Transport über setWebSocketTransport) 100 %
XHR XMLHttpRequest + XMLHttpRequestUpload + ProgressEvent (auf dem Fetch-Transport aufbauend, daher gelten Policy-Hooks) 100 %
Ereignisschleife setTimeout, setInterval, clearTimeout, clearInterval, queueMicrotask, AsyncContext (Stage 3) n/a (mit Oracle getestet)

¹ Ausgenommen sind freigegebene Untertests in den Kompressions-Fixtures: die Brotli-Fälle, die ext-brotli benötigen, und die Fälle mit SharedArrayBuffer-gestützter Eingabe (EXPECTED_FAILURES in tests/Wpt/WptTest.php).

Alle anderen importierten Web Platform Tests bestehen — die Aufschlüsselung der Konformität findest du unter Web-APIs.

Noch nicht implementiert

  • SharedArrayBuffer-Worker-Semantik über einen einzelnen Agenten hinaus — atomare Benachrichtigungen über mehrere echte OS-Threads hinweg erfordern pcntl und stehen nicht auf der Roadmap. Atomics innerhalb eines einzelnen Agenten funktionieren.
  • Intl.Segmenter mit Graphemclustern, die ICU 76+ benötigen — hängt von der Version der intl-Erweiterung in der Host-PHP ab.

Versionierung

Phasis verwendet Semver. Die Versionsreihe richtet sich nach den Entwürfen der ECMAScript-Spezifikation:

Version von Phasis Spezifikationsziel Stage-3-Vorschläge
0.x ES2024 Decorators, Temporal, explizite Ressourcenverwaltung, Iterator-Helfer, Set-Methoden

Der Sprung auf 1.0 setzt voraus, dass alle Stage-4-Vorschläge im ES2025-Entwurf implementiert sind und die Semantik zum Leeren von Promise-Warteschlangen stabil ist.