
# Specifikationsstöd

Phasis följer den aktuella ECMAScript-specifikationen (ES2024+) och bevakar TC39-förslag från steg 3 och uppåt. Den här sidan är ett lättläst register över vad som faktiskt ingår.

## Språk

| Funktion | Status |
|---|:---:|
| Lexikala deklarationer (`let`, `const`) med TDZ | ✅ |
| Blockomfång, funktionsomfång, modulomfång | ✅ |
| Pilfunktioner (med lexikalt `this`) | ✅ |
| Standardparametrar, restparametrar, spread | ✅ |
| Destrukturering (arrayer, objekt, nästlade värden, standardvärden, rest) | ✅ |
| Malliteraler, taggade mallar | ✅ |
| Beräknade egenskapsnamn | ✅ |
| Förkortade egenskaper och metoder | ✅ |
| Klasser — konstruktorer, metoder, getters/setters, statiska medlemmar | ✅ |
| Klassfält (publika, privata, statiska) | ✅ |
| Privata metoder och accessorer | ✅ |
| `super` i metoder och konstruktorer | ✅ |
| Dekoratorer (steg 3) | ✅ |
| Statiska initieringsblock | ✅ |
| Valfri kedjning (`?.`), nullish-coalescing (`??`) | ✅ |
| Logiska tilldelningsoperatorer (`&&=`, `\|\|=`, `??=`) | ✅ |
| Numeriska avgränsare (`1_000_000`) | ✅ |
| BigInt-literaler (`123n`) och operatorer | ✅ |
| Asynkrona funktioner, asynkrona generatorer, await på toppnivå | ✅ |
| Generatorer (synkrona och asynkrona) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iteratorer och itererbara objekt (Symbol.iterator) | ✅ |
| Symbolprimitiver och välkända symboler | ✅ |
| ES-moduler (`import` / `export`, dynamisk `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (steg 3) | ✅ |
| Strikt läge + äldre beteenden enligt Annex B | ✅ |
| Reguljära uttryck (`/u`, `/v`, `/d`, namngivna grupper, lookbehind) | ✅ |
| Automatisk insättning av semikolon (ASI) | ✅ |
| Hashbang-grammatik (`#!/usr/bin/env phasis`) | ✅ |
| Korrekta anrop i svansen i strikt läge (ES2015, krävs av specifikationen) | ✅ |

## Standardbibliotek

### Grundläggande objekt

| Objekt | Täckning |
|---|---|
| `Object` | fullständig — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries`, osv. |
| `Array` | fullständig — alla prototypmetoder, inklusive `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | fullständig — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | fullständig — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER`, osv. |
| `BigInt` | fullständig — godtycklig precision via bcmath |
| `Boolean` | fullständig |
| `Math` | fullständig — alla metoder och alla specialfall för NaN / Infinity / -0 |
| `JSON` | fullständig — `parse`, `stringify`, anpassade ersättare, återställare, indrag |
| `Symbol` | fullständig — `for`, `keyFor`, alla välkända symboler, `Symbol.toPrimitive` |
| `Function` | fullständig — semantiken för `call`, `apply`, `bind`, `length`, `name`, `prototype` |

### Samlingar

| Objekt | Täckning |
|---|---|
| `Map` | fullständig — inklusive `groupBy` och levande iteration |
| `Set` | fullständig — inklusive `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | fullständig |

### Asynkronitet

| Objekt | Täckning |
|---|---|
| `Promise` | fullständig — `all`, `race`, `any`, `allSettled`, `withResolvers`, asynkron iteration |
| `AsyncIterator`, `AsyncGenerator` | fullständig |
| Schemaläggning av microtasks | ✅ |

### Binärdata

| Objekt | Täckning |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | fullständig |
| `DataView` | fullständig — `getBigInt64`, `setBigInt64`, osv. |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | fullständig |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | fullständig (endast en agent) |

### Reflektion och proxyer

| Objekt | Täckning |
|---|---|
| `Proxy` | alla 13 fällor, kan återkallas |
| `Reflect` | alla 14 statiska metoder |

### Fel

| Objekt | Täckning |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | fullständig |
| `AggregateError` | fullständig |
| `SuppressedError` (explicit resurshantering i Stage 3) | fullständig |

### Datum och tid

| Objekt | Täckning |
|---|---|
| `Date` | fullständig |
| `Temporal` (Stage 3) | fullständig — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (inkl. hebreiska, kinesiska, Dangi, etiopiska osv.) |

### Internationalisering

| Objekt | Täckning |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | fullständig (delegerar till tillägget `intl` för PHP när det är tillgängligt) |

### Resurshantering

| Objekt | Täckning |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (Stage 3) | fullständig |
| `Symbol.dispose`, `Symbol.asyncDispose` | fullständig |
| deklarationerna `using` / `await using` | fullständiga |

### Övrigt

| Objekt | Täckning |
|---|---|
| `RegExp` (inkl. `/v`-mängdnotation, namngivna fångster, lookaround, sticky/global-flaggor) | fullständig |
| hjälpfunktionerna `Iterator` (Stage 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | fullständiga |
| `ShadowRealm` (Stage 3) | fullständig |
| `globalThis` | ✅ |

## Web Platform API:er (WHATWG / W3C, inte TC39)

Utöver ren ECMAScript levereras flera lagerindelade paket med Web API:er i Phasis som bibliotek för verkliga projekt i JS förkontrollerar. Se [Web API:er](https://phasis.inline0.dev/sv/docs/compatibility/web-apis) för hela ytan och överensstämmelsen per område.

| Paket | Globala objekt | WPT |
|---|---|---|
| **Web Platform** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (alias för `globalThis`), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, mixin `Body`, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, fullständiga WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, köstrategier, BYOB), `CompressionStream` / `DecompressionStream` (zlib + valfritt brotli via `ext-brotli`), `navigator` | 100 %¹ |
| **Crypto** | `crypto.getRandomValues`, `crypto.randomUUID`, fullständigt `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-ramkodning, utbytbart transportlager via `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (lager ovanpå fetch-transporten, så policykrokar gäller) | 100 % |
| **Händelseloop** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (Stage 3) | ej tillämpligt (testat mot oracle) |

¹ Undantar allowlistade deltester i komprimeringsfixturerna: brotli-fallen, som kräver `ext-brotli`, och fallen som använder indata baserad på `SharedArrayBuffer` (`EXPECTED_FAILURES` i `tests/Wpt/WptTest.php`).

Alla andra importerade Web Platform Tests godkänns — se [Web API:er](https://phasis.inline0.dev/sv/docs/compatibility/web-apis) för uppdelningen av överensstämmelsen.

## Det här är ännu inte implementerat

- **SharedArrayBuffer-semantik för workers** utöver en enda agent — atomisk avisering mellan flera trådar i operativsystemet kräver `pcntl` och finns inte på färdplanen. Atomoperationer för en enda agent fungerar.
- **`Intl.Segmenter` med grafemkluster som kräver ICU 76+** — beror på värdens version av PHP-tillägget `intl`.

## Versionshantering

Phasis följer semver. Versionsserien följer utkasten till ECMAScript-specifikationen:

| Phasis-version | Specifikationsmål | Stage 3-förslag |
|---|---|---|
| 0.x | ES2024 | dekoratörer, Temporal, explicit resurshantering, iteratorhjälpare, mängdmetoder |

En höjning till 1.0 förutsätter att varje Stage 4-förslag i ES2025-utkastet har implementerats och att semantiken för Promise-avtappning är stabil.
