
# 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](https://phasis.inline0.dev/de/docs/compatibility/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](https://phasis.inline0.dev/de/docs/compatibility/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.
