
# Obseg specifikacije

Phasis cilja na trenutno specifikacijo ECMAScript (ES2024+) in spremlja predloge TC39 na stopnji 3 ali višje. Ta stran je berljiv seznam tega, kar je dejansko vključeno.

## Jezik

| Funkcija | Stanje |
|---|:---:|
| Leksikalne deklaracije (`let`, `const`) s časovno mrtvo cono (TDZ) | ✅ |
| Obseg bloka, obseg funkcije, obseg modula | ✅ |
| Puščične funkcije (z leksikalnim `this`) | ✅ |
| Privzeti parametri, preostali parametri, razširjanje | ✅ |
| Razčlenjevanje na sestavne dele (polja, objekti, gnezdena struktura, privzete vrednosti, preostali elementi) | ✅ |
| Nizi predlog, označene predloge | ✅ |
| Izračunana imena lastnosti | ✅ |
| Skrajšane lastnosti in metode | ✅ |
| Razredi — konstruktorji, metode, dostopniki, statične metode | ✅ |
| Polja razredov (javna, zasebna, statična) | ✅ |
| Zasebne metode in dostopniki | ✅ |
| `super` v metodah in konstruktorjih | ✅ |
| Dekoratorji (3. stopnja) | ✅ |
| Statični inicializacijski bloki | ✅ |
| Izbirno veriženje (`?.`), združevanje z ničelno vrednostjo (`??`) | ✅ |
| Logični operatorji prirejanja (`&&=`, `\|\|=`, `??=`) | ✅ |
| Ločila v številskih literalih (`1_000_000`) | ✅ |
| Literali BigInt (`123n`) in operatorji | ✅ |
| Asinhrone funkcije, asinhroni generatorji, await na najvišji ravni | ✅ |
| Generatorji (sinhroni in asinhroni) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iteratorji in iterabilni objekti (Symbol.iterator) | ✅ |
| Primitivi Symbol in znani simboli | ✅ |
| Moduli ES (`import` / `export`, dinamični `import()`) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (3. stopnja) | ✅ |
| Strogi način + podedovano vedenje Annex B | ✅ |
| Regularni izrazi (`/u`, `/v`, `/d`, poimenovane skupine, preverjanje vnaprej) | ✅ |
| Samodejno vstavljanje podpičij (ASI) | ✅ |
| Slovnica hashbang (`#!/usr/bin/env phasis`) | ✅ |
| Pravilni repni klici v strogem načinu (ES2015, zahtevani s specifikacijo) | ✅ |

## Standardna knjižnica

### Osnovno

| Objekt | Pokritost |
|---|---|
| `Object` | polna — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries` in drugo |
| `Array` | polna — vse metode prototipa, vključno z `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | polna — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | polna — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER` in drugo |
| `BigInt` | polna — poljubna natančnost prek bcmath |
| `Boolean` | polna |
| `Math` | polna — vse metode, vsi posebni primeri za NaN / Infinity / -0 |
| `JSON` | polna — `parse`, `stringify`, lastni nadomestki, oživljalnik, zamiki |
| `Symbol` | polna — `for`, `keyFor`, vsi znani simboli, `Symbol.toPrimitive` |
| `Function` | polna — semantika `call`, `apply`, `bind`, `length`, `name`, `prototype` |

### Zbirke

| Objekt | Pokritost |
|---|---|
| `Map` | polna — vključno z `groupBy` in sprotnim iteriranjem |
| `Set` | polna — vključno z `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | polna |

### Asinhrono

| Objekt | Pokritost |
|---|---|
| `Promise` | polna — `all`, `race`, `any`, `allSettled`, `withResolvers`, asinhrona iteracija |
| `AsyncIterator`, `AsyncGenerator` | polna |
| Razporejanje mikroopravil | ✅ |

### Binarni podatki

| Objekt | Pokritost |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | polna |
| `DataView` | polna — `getBigInt64`, `setBigInt64` in drugo |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | polna |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | polna (samo z enim izvajalnim sklopom) |

### Refleksija in posredniki

| Predmet | Pokritost |
|---|---|
| `Proxy` | vseh 13 pasti, preklicljive |
| `Reflect` | vseh 14 statičnih metod |

### Napake

| Predmet | Pokritost |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | popolna |
| `AggregateError` | popolna |
| `SuppressedError` (upravljanje virov, stopnja 3) | popolna |

### Datumi in čas

| Predmet | Pokritost |
|---|---|
| `Date` | popolna |
| `Temporal` (stopnja 3) | popolna — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (vključno s hebrejskim, kitajskim, dangi, etiopskim itd.) |

### Internacionalizacija

| Predmet | Pokritost |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | popolna (če je na voljo, uporabi razširitev `intl` za PHP) |

### Upravljanje virov

| Predmet | Pokritost |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (stopnja 3) | popolna |
| `Symbol.dispose`, `Symbol.asyncDispose` | popolna |
| deklaraciji `using` / `await using` | popolna |

### Drugo

| Predmet | Pokritost |
|---|---|
| `RegExp` (vključno z zapisom množic `/v`, poimenovanimi zajemi, iskanjem v okolici, zastavicama sticky/global) | popolna |
| pomožni funkciji `Iterator` (stopnja 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | popolna |
| `ShadowRealm` (stopnja 3) | popolna |
| `globalThis` | ✅ |

## API-ji spletne platforme (WHATWG / W3C, ne TC39)

Poleg čistega ECMAScript Phasis ponuja več slojev paketov API-jev spleta, za katere knjižnice JS v praksi vnaprej preverijo podporo. Za celoten nabor in skladnost po področjih glejte [API-je spleta](https://phasis.inline0.dev/sl/docs/compatibility/web-apis).

| Paket | Globalni objekti | WPT |
|---|---|---|
| **Spletna platforma** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (vzdevek za `globalThis`), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, `Body` mixin, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, celoten WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, strategije čakanja v vrsti, BYOB), `CompressionStream` / `DecompressionStream` (zlib + neobvezni brotli prek `ext-brotli`), `navigator` | 100 %¹ |
| **Kriptografija** | `crypto.getRandomValues`, `crypto.randomUUID`, celoten `SubtleCrypto` (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) | 100 % |
| **WebSocket** | `WebSocket` (konstruktor + kodirnik okvirjev RFC 6455, zamenljiv prenos prek `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (zgrajen na prenosu fetch, zato veljajo kavlji pravilnikov) | 100 % |
| **Zanka dogodkov** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (stopnja 3) | n/a (preverjeno z oracle) |

¹ Izključeni so podtesti s seznama dovoljenih v testnih primerih stiskanja: primeri brotli, ki potrebujejo `ext-brotli`, in primeri, ki prejmejo vhod, podprt z `SharedArrayBuffer` (`EXPECTED_FAILURES` v `tests/Wpt/WptTest.php`).

Vsi drugi uvoženi testi Web Platform Tests so uspešni — razčlenitev skladnosti si oglejte pri [API-jih spleta](https://phasis.inline0.dev/sl/docs/compatibility/web-apis).

## Kaj še ni implementirano

- **Semantika delavcev SharedArrayBuffer** zunaj enega agenta — večnitno atomsko obveščanje med dejanskimi nitmi OS zahteva `pcntl` in ni v načrtu. Atomske operacije znotraj enega agenta delujejo.
- **`Intl.Segmenter` z grafemskimi skupinami, ki zahtevajo ICU 76+** — odvisno je od različice razširitve `intl` gostiteljevega PHP.

## Različice

Phasis upošteva semantično različičenje. Veja različice sledi osnutkom specifikacije ECMAScript:

| Različica Phasis | Ciljna specifikacija | Predlogi stopnje 3 |
|---|---|---|
| 0.x | ES2024 | dekoratorji, Temporal, izrecno upravljanje virov, pomožne funkcije za iteratorje, metode množic |

Prehod na 1.0 je pogojen z implementacijo vseh predlogov stopnje 4 iz osnutka ES2025 in stabilno semantiko praznjenja Promise.
