
# Specifikationsdækning

Phasis følger den aktuelle ECMAScript-specifikation (ES2024+) og holder øje med TC39-forslag på Stage 3 og derover. Denne side er et læsevenligt register over det, der faktisk er implementeret.

## Sprog

| Funktion | Status |
|---|:---:|
| Leksikale deklarationer (`let`, `const`) med TDZ | ✅ |
| Blok-, funktions- og modulomfang | ✅ |
| Pilefunktioner (med leksikalsk `this`) | ✅ |
| Standardparametre, restparametre, spread | ✅ |
| Destrukturering (array, objekt, indlejret, standardværdier, rest) | ✅ |
| Template literals, taggede templates | ✅ |
| Beregnede egenskabsnavne | ✅ |
| Kortforms-egenskaber og metoder | ✅ |
| Klasser — konstruktører, metoder, getters/setters, static | ✅ |
| Klassefelter (public, private, static) | ✅ |
| Private metoder og accessors | ✅ |
| `super` i metoder og konstruktører | ✅ |
| Decorators (Stage 3) | ✅ |
| Statiske initialiseringsblokke | ✅ |
| Valgfri chaining (`?.`), nullish coalescing (`??`) | ✅ |
| Logiske tildelingsoperatorer (`&&=`, `\|\|=`, `??=`) | ✅ |
| Numeriske separatorer (`1_000_000`) | ✅ |
| BigInt-litteraler (`123n`) og operatorer | ✅ |
| Asynkrone funktioner, asynkrone generatorer, await på øverste niveau | ✅ |
| Generatorer (synkrone og asynkrone) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iteratorer og iterables (Symbol.iterator) | ✅ |
| Symbolprimitiver og velkendte symboler | ✅ |
| ES-moduler (`import` / `export`, dynamisk `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (Stage 3) | ✅ |
| Strict mode + ældre Annex B-adfærd | ✅ |
| Regulære udtryk (`/u`, `/v`, `/d`, navngivne grupper, lookbehind) | ✅ |
| Automatisk indsættelse af semikolon (ASI) | ✅ |
| Hashbang-grammatik (`#!/usr/bin/env phasis`) | ✅ |
| Korrekte tail calls i strict mode (ES2015, krævet af specifikationen) | ✅ |

## Standardbibliotek

### Grundlæggende

| Objekt | Dækning |
|---|---|
| `Object` | fuld — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries` osv. |
| `Array` | fuld — alle prototypemetoder, inklusive `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | fuld — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | fuld — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER` osv. |
| `BigInt` | fuld — vilkårlig præcision via bcmath |
| `Boolean` | fuld |
| `Math` | fuld — alle metoder og særtilfælde for NaN / Infinity / -0 |
| `JSON` | fuld — `parse`, `stringify`, brugerdefinerede replacers, reviver, indrykning |
| `Symbol` | fuld — `for`, `keyFor`, alle velkendte symboler, `Symbol.toPrimitive` |
| `Function` | fuld — semantik for `call`, `apply`, `bind`, `length`, `name`, `prototype` |

### Samlinger

| Objekt | Dækning |
|---|---|
| `Map` | fuld — inklusive `groupBy` og live-iteration |
| `Set` | fuld — inklusive `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | fuld |

### Asynkron

| Objekt | Dækning |
|---|---|
| `Promise` | fuld — `all`, `race`, `any`, `allSettled`, `withResolvers`, asynkron iteration |
| `AsyncIterator`, `AsyncGenerator` | fuld |
| Planlægning af mikrotasks | ✅ |

### Binære data

| Objekt | Dækning |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | fuld |
| `DataView` | fuld — `getBigInt64`, `setBigInt64` osv. |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | fuld |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | fuld (kun én agent) |

### Refleksion og proxies

| Objekt | Dækning |
|---|---|
| `Proxy` | alle 13 fælder, kan gøres ugyldige |
| `Reflect` | alle 14 statiske metoder |

### Fejl

| Objekt | Dækning |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | fuld |
| `AggregateError` | fuld |
| `SuppressedError` (Stage 3, eksplicit håndtering af ressourcer) | fuld |

### Datoer og tid

| Objekt | Dækning |
|---|---|
| `Date` | fuld |
| `Temporal` (Stage 3) | fuld — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (inkl. hebraisk, kinesisk, Dangi, etiopisk osv.) |

### Internationalisering

| Objekt | Dækning |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | fuld (bruger PHP's `intl`-udvidelse, når den er tilgængelig) |

### Ressourcehåndtering

| Objekt | Dækning |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (Stage 3) | fuld |
| `Symbol.dispose`, `Symbol.asyncDispose` | fuld |
| `using` / `await using`-deklarationer | fuld |

### Andet

| Objekt | Dækning |
|---|---|
| `RegExp` (inkl. `/v`-mængdenotation, navngivne captures, lookaround, sticky/global-flag) | fuld |
| `Iterator`-hjælpere (Stage 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | fuld |
| `ShadowRealm` (Stage 3) | fuld |
| `globalThis` | ✅ |

## Webplatform-API'er (WHATWG / W3C, ikke TC39)

Ud over ren ECMAScript leveres flere lagdelte pakker med Web-API'er fra Phasis, som virkelige JS-biblioteker forhåndstjekker for. Se [Web-API'er](https://phasis.inline0.dev/da/docs/compatibility/web-apis) for den fulde dækning og overensstemmelse for hvert område.

| Pakke | Globale objekter | WPT |
|---|---|---|
| **Webplatform** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (alias for `globalThis`), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, `Body`-mixin, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, fuld WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, køstrategier, BYOB), `CompressionStream` / `DecompressionStream` (zlib + valgfri brotli via `ext-brotli`), `navigator` | 100 %¹ |
| **Crypto** | `crypto.getRandomValues`, `crypto.randomUUID`, fuld `SubtleCrypto` (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) | 100 % |
| **WebSocket** | `WebSocket` (konstruktør + RFC 6455-frame-codec, udskiftelig transport via `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (lagdelt oven på fetch-transporten, så politik-hooks gælder) | 100 % |
| **Hændelsesløkke** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (Stage 3) | ikke relevant (oracle-testet) |

¹ Brotlitilfældene i komprimerings-fixtures, som kræver `ext-brotli`, samt tilfældene, der sender `SharedArrayBuffer`-baseret input (`EXPECTED_FAILURES` i `tests/Wpt/WptTest.php`), er undtaget fra de tilladte undertests.

Alle andre importerede Web Platform Tests består — se [Web-API'er](https://phasis.inline0.dev/da/docs/compatibility/web-apis) for oversigten over overensstemmelse.

## Det, der endnu ikke er implementeret

- **SharedArrayBuffer-arbejdersemantik** ud over én agent — atomisk notifikation på tværs af flere rigtige OS-tråde kræver `pcntl` og er ikke på planen. Atomare operationer med én agent fungerer.
- **`Intl.Segmenter` med grafemklynger, der kræver ICU 76+** — afhænger af versionen af `intl`-udvidelsen i værtsmiljøets PHP.

## Versionering

Phasis følger semver. Versionslinjen følger udkast til ECMAScript-specifikationen:

| Phasis-version | Specifikationsmål | Stage 3-forslag |
|---|---|---|
| 0.x | ES2024 | decorators, Temporal, eksplicit ressourcehåndtering, iterator-hjælpere, mængdemetoder |

En opgradering til 1.0 afhænger af, at alle Stage 4-forslag i ES2025-udkastet er implementeret, og at semantikken for tømning af Promise-køen er stabil.
