
# Specificatieoverzicht

Phasis richt zich op de huidige ECMAScript-specificatie (ES2024+) en volgt TC39-voorstellen vanaf Stage 3. Deze pagina is het leesbare overzicht van wat daadwerkelijk is geïmplementeerd.

## Taal

| Functie | Status |
|---|:---:|
| Lexicale declaraties (`let`, `const`) met TDZ | ✅ |
| Blokbereik, functiebereik, modulebereik | ✅ |
| Pijlfuncties (met lexicale `this`) | ✅ |
| Standaardparameters, restparameters, spread | ✅ |
| Destructurering (array, object, genest, standaardwaarden, rest) | ✅ |
| Templatestrings, getagde templates | ✅ |
| Berekende eigenschapsnamen | ✅ |
| Verkorte eigenschappen en methoden | ✅ |
| Klassen — constructors, methoden, getters/setters, static | ✅ |
| Klassevelden (publiek, privé, static) | ✅ |
| Privémethoden en accessors | ✅ |
| `super` in methoden en constructors | ✅ |
| Decorators (Stage 3) | ✅ |
| Statische initialisatieblokken | ✅ |
| Optioneel koppelen (`?.`), nullish coalescing (`??`) | ✅ |
| Logische toewijzingsoperatoren (`&&=`, `\|\|=`, `??=`) | ✅ |
| Numerieke scheidingstekens (`1_000_000`) | ✅ |
| BigInt-literals (`123n`) en operatoren | ✅ |
| Asynchrone functies, asynchrone generators, top-level await | ✅ |
| Generators (synchroon en asynchroon) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iterators en iterables (Symbol.iterator) | ✅ |
| Symbol-primitieven en bekende symbols | ✅ |
| ES-modules (`import` / `export`, dynamische `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (Stage 3) | ✅ |
| Strikte modus + verouderd gedrag van Annex B | ✅ |
| Reguliere expressies (`/u`, `/v`, `/d`, benoemde groepen, lookbehind) | ✅ |
| Automatische puntkommainvoeging (ASI) | ✅ |
| Hashbang-grammatica (`#!/usr/bin/env phasis`) | ✅ |
| Juiste tail calls in strikte modus (ES2015, vereist door de specificatie) | ✅ |

## Standaardbibliotheek

### Fundamenteel

| Object | Dekking |
|---|---|
| `Object` | volledig — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries`, enz. |
| `Array` | volledig — elke prototypemethode, waaronder `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | volledig — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | volledig — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER`, enz. |
| `BigInt` | volledig — willekeurige precisie via bcmath |
| `Boolean` | volledig |
| `Math` | volledig — elke methode en elk speciaal geval voor NaN / Infinity / -0 |
| `JSON` | volledig — `parse`, `stringify`, aangepaste replacers, reviver, inspringing |
| `Symbol` | volledig — `for`, `keyFor`, alle bekende symbols, `Symbol.toPrimitive` |
| `Function` | volledig — `call`, `apply`, `bind`, `length`, `name`, `prototype`-semantiek |

### Collecties

| Object | Dekking |
|---|---|
| `Map` | volledig — inclusief `groupBy` en live iteratie |
| `Set` | volledig — inclusief `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | volledig |

### Asynchroon

| Object | Dekking |
|---|---|
| `Promise` | volledig — `all`, `race`, `any`, `allSettled`, `withResolvers`, asynchrone iteratie |
| `AsyncIterator`, `AsyncGenerator` | volledig |
| Microtaakplanning | ✅ |

### Binaire gegevens

| Object | Dekking |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | volledig |
| `DataView` | volledig — `getBigInt64`, `setBigInt64`, enz. |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | volledig |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | volledig (alleen single-agent) |

### Reflectie en proxies

| Object | Dekking |
|---|---|
| `Proxy` | alle 13 traps, intrekbaar |
| `Reflect` | alle 14 statische methoden |

### Fouten

| Object | Dekking |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | volledig |
| `AggregateError` | volledig |
| `SuppressedError` (Stage 3 expliciet resourcebeheer) | volledig |

### Datums en tijd

| Object | Dekking |
|---|---|
| `Date` | volledig |
| `Temporal` (Stage 3) | volledig — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (o.a. Hebreeuws, Chinees, Dangi, Ethiopisch, enz.) |

### Internationalisering

| Object | Dekking |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | volledig (gebruikt PHP's `intl`-uitbreiding wanneer beschikbaar) |

### Resourcebeheer

| Object | Dekking |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (Stage 3) | volledig |
| `Symbol.dispose`, `Symbol.asyncDispose` | volledig |
| `using` / `await using`-declaraties | volledig |

### Overig

| Object | Dekking |
|---|---|
| `RegExp` (incl. `/v`-setnotatie, benoemde captures, lookaround, sticky/global-flags) | volledig |
| `Iterator`-helpers (Stage 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | volledig |
| `ShadowRealm` (Stage 3) | volledig |
| `globalThis` | ✅ |

## Web Platform-API's (WHATWG / W3C, geen TC39)

Naast pure ECMAScript levert Phasis verschillende gelaagde pakketten met Web API's die praktijkbibliotheken van JS vooraf controleren. Bekijk [Web-API's](https://phasis.inline0.dev/nl/docs/compatibility/web-apis) voor het volledige overzicht en conformiteit per gebied.

| Pakket | Globals | WPT |
|---|---|---|
| **Web Platform** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (alias van `globalThis`), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, `Body`-mixin, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, volledige WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, wachtrijstrategieën, BYOB), `CompressionStream` / `DecompressionStream` (zlib + optionele brotli via `ext-brotli`), `navigator` | 100 %¹ |
| **Crypto** | `crypto.getRandomValues`, `crypto.randomUUID`, volledige `SubtleCrypto` (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) | 100 % |
| **WebSocket** | `WebSocket` (constructor + RFC 6455-framecodec, vervangbaar transport via `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (gelaagd over het fetchtransport, waardoor beleids-hooks van toepassing zijn) | 100 % |
| **Eventloop** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (Stage 3) | n.v.t. (getest met oracle) |

¹ Exclusief toegestane subtests in de compressietestbestanden: de brotli-cases die `ext-brotli` nodig hebben, en de cases met invoer op basis van `SharedArrayBuffer` (`EXPECTED_FAILURES` in `tests/Wpt/WptTest.php`).

Alle andere geïmporteerde Web Platform Tests slagen — zie [Web-API's](https://phasis.inline0.dev/nl/docs/compatibility/web-apis) voor het conformiteitsoverzicht.

## Wat nog niet is geïmplementeerd

- **SharedArrayBuffer-workersemantiek** buiten één agent — atomaire notificatie tussen meerdere threads van het echte besturingssysteem vereist `pcntl` en staat niet op de roadmap. Atomaire bewerkingen binnen één agent werken.
- **`Intl.Segmenter` met graphemeclusters waarvoor ICU 76+ nodig is** — afhankelijk van de versie van de `intl`-extensie van de host-PHP.

## Versiebeheer

Phasis volgt semver. De versiereeks volgt de concepten van de ECMAScript-specificatie:

| Phasis-versie | Specificatiedoel | Stage 3-voorstellen |
|---|---|---|
| 0.x | ES2024 | decorators, Temporal, expliciet resourcebeheer, iteratorhelpers, setmethoden |

Een verhoging naar 1.0 is afhankelijk van de implementatie van elk Stage 4-voorstel in het ES2025-concept en stabiele semantiek voor het leegmaken van Promise's.
