
# Cakupan spesifikasi

Phasis menargetkan spesifikasi ECMAScript saat ini (ES2024+) dan mengikuti proposal TC39 Stage 3 ke atas. Halaman ini adalah indeks yang dapat dibaca manusia tentang fitur yang benar-benar disertakan.

## Bahasa

| Fitur | Status |
|---|:---:|
| Deklarasi leksikal (`let`, `const`) dengan TDZ | ✅ |
| Cakupan blok, cakupan fungsi, cakupan modul | ✅ |
| Fungsi panah (dengan `this` leksikal) | ✅ |
| Parameter default, parameter rest, spread | ✅ |
| Destructuring (array, objek, bertingkat, default, rest) | ✅ |
| Literal templat, templat bertag | ✅ |
| Nama properti terhitung | ✅ |
| Properti dan metode singkat | ✅ |
| Kelas — konstruktor, metode, getter/setter, static | ✅ |
| Field kelas (publik, privat, static) | ✅ |
| Metode dan accessor privat | ✅ |
| `super` dalam metode dan konstruktor | ✅ |
| Decorator (Stage 3) | ✅ |
| Blok inisialisasi static | ✅ |
| Optional chaining (`?.`), nullish coalescing (`??`) | ✅ |
| Operator penugasan logis (`&&=`, `\|\|=`, `??=`) | ✅ |
| Pemisah numerik (`1_000_000`) | ✅ |
| Literal BigInt (`123n`) dan operator | ✅ |
| Fungsi async, generator async, await tingkat atas | ✅ |
| Generator (sinkron dan asinkron) | ✅ |
| `for…of`, `for…in`, `for await…of` | ✅ |
| Iterator dan iterable (Symbol.iterator) | ✅ |
| Primitif Symbol dan simbol yang dikenal luas | ✅ |
| Modul ES (`import` / `export`, `import()` dinamis) | ✅ |
| `import.meta` | ✅ |
| `import attributes` (Stage 3) | ✅ |
| Mode strict + perilaku lama Annex B | ✅ |
| Ekspresi reguler (`/u`, `/v`, `/d`, grup bernama, lookbehind) | ✅ |
| Penyisipan titik koma otomatis (ASI) | ✅ |
| Tata bahasa hashbang (`#!/usr/bin/env phasis`) | ✅ |
| Pemanggilan ekor yang tepat dalam mode strict (ES2015, diwajibkan spesifikasi) | ✅ |

## Pustaka standar

### Fundamental

| Objek | Cakupan |
|---|---|
| `Object` | lengkap — `keys`, `values`, `entries`, `assign`, `create`, `freeze`, `seal`, `getOwnPropertyDescriptor(s)`, `setPrototypeOf`, `getOwnPropertyNames`, `getOwnPropertySymbols`, `hasOwn`, `groupBy`, `fromEntries`, dll. |
| `Array` | lengkap — setiap metode prototipe termasuk `at`, `flatMap`, `flat`, `findLast`, `findLastIndex`, `toReversed`, `toSorted`, `toSpliced`, `with`, `group`, `groupToMap` |
| `String` | lengkap — `at`, `codePointAt`, `match`, `matchAll`, `replaceAll`, `padStart`, `padEnd`, `trimStart`, `trimEnd`, `isWellFormed`, `toWellFormed` |
| `Number` | lengkap — `isFinite`, `isInteger`, `isNaN`, `isSafeInteger`, `EPSILON`, `MAX_SAFE_INTEGER`, dll. |
| `BigInt` | lengkap — presisi arbitrer melalui bcmath |
| `Boolean` | lengkap |
| `Math` | lengkap — setiap metode, setiap kasus khusus untuk NaN / Infinity / -0 |
| `JSON` | lengkap — `parse`, `stringify`, pengganti khusus, reviver, indentasi |
| `Symbol` | lengkap — `for`, `keyFor`, semua simbol yang dikenal luas, `Symbol.toPrimitive` |
| `Function` | lengkap — semantik `call`, `apply`, `bind`, `length`, `name`, `prototype` |

### Koleksi

| Objek | Cakupan |
|---|---|
| `Map` | lengkap — termasuk `groupBy` dan iterasi langsung |
| `Set` | lengkap — termasuk `intersection`, `union`, `difference`, `symmetricDifference`, `isSubsetOf`, `isSupersetOf`, `isDisjointFrom` |
| `WeakMap`, `WeakSet`, `WeakRef`, `FinalizationRegistry` | lengkap |

### Asinkron

| Objek | Cakupan |
|---|---|
| `Promise` | lengkap — `all`, `race`, `any`, `allSettled`, `withResolvers`, iterasi async |
| `AsyncIterator`, `AsyncGenerator` | lengkap |
| Penjadwalan microtask | ✅ |

### Data biner

| Objek | Cakupan |
|---|---|
| `ArrayBuffer`, `SharedArrayBuffer` | lengkap |
| `DataView` | lengkap — `getBigInt64`, `setBigInt64`, dll. |
| `Int8Array`, `Uint8Array`, `Uint8ClampedArray`, `Int16Array`, `Uint16Array`, `Int32Array`, `Uint32Array`, `BigInt64Array`, `BigUint64Array`, `Float16Array`, `Float32Array`, `Float64Array` | lengkap |
| `Atomics` — `add`, `sub`, `and`, `or`, `xor`, `compareExchange`, `exchange`, `isLockFree`, `load`, `notify`, `pause`, `store`, `wait`, `waitAsync` | lengkap (hanya satu agen) |

### Refleksi dan proxy

| Objek | Cakupan |
|---|---|
| `Proxy` | seluruh 13 trap, dapat dicabut |
| `Reflect` | seluruh 14 metode static |

### Error

| Objek | Cakupan |
|---|---|
| `Error`, `TypeError`, `RangeError`, `ReferenceError`, `SyntaxError`, `URIError`, `EvalError` | lengkap |
| `AggregateError` | lengkap |
| `SuppressedError` (pengelolaan sumber daya eksplisit Stage 3) | lengkap |

### Tanggal dan waktu

| Objek | Cakupan |
|---|---|
| `Date` | lengkap |
| `Temporal` (Stage 3) | lengkap — `Now`, `Instant`, `PlainDate`, `PlainTime`, `PlainDateTime`, `PlainYearMonth`, `PlainMonthDay`, `ZonedDateTime`, `Duration`, `TimeZone`, `Calendar` (termasuk Ibrani, Tionghoa, Dangi, Etiopia, dll.) |

### Internasionalisasi

| Objek | Cakupan |
|---|---|
| `Intl.Locale`, `Intl.Collator`, `Intl.DateTimeFormat`, `Intl.NumberFormat`, `Intl.PluralRules`, `Intl.RelativeTimeFormat`, `Intl.ListFormat`, `Intl.DisplayNames`, `Intl.Segmenter` | lengkap (mendelegasikan ke ekstensi `intl` milik PHP jika tersedia) |

### Pengelolaan sumber daya

| Objek | Cakupan |
|---|---|
| `DisposableStack`, `AsyncDisposableStack` (Stage 3) | lengkap |
| `Symbol.dispose`, `Symbol.asyncDispose` | lengkap |
| deklarasi `using` / `await using` | lengkap |

### Lainnya

| Objek | Cakupan |
|---|---|
| `RegExp` (termasuk notasi set `/v`, penangkapan bernama, lookaround, flag sticky/global) | lengkap |
| helper `Iterator` (Stage 3) — `map`, `filter`, `take`, `drop`, `flatMap`, `reduce`, `toArray`, `forEach`, `some`, `every`, `find` | lengkap |
| `ShadowRealm` (Stage 3) | lengkap |
| `globalThis` | ✅ |

## API Platform Web (WHATWG / W3C, bukan TC39)

Di luar ECMAScript murni, Phasis menyertakan beberapa paket API Web berlapis yang diperiksa lebih dulu oleh pustaka JS di dunia nyata. Lihat [API Web](https://phasis.inline0.dev/id/docs/compatibility/web-apis) untuk cakupan lengkap dan kesesuaian per area.

| Paket | Global | WPT |
|---|---|---|
| **Platform Web** | `URL`, `URLSearchParams`, `URLPattern`, `TextEncoder`, `TextDecoder`, `atob`, `btoa`, `structuredClone`, `performance`, `console`, `setTimeout` / `setInterval` / `queueMicrotask`, `reportError`, `self` (alias dari `globalThis`), `DOMException` | 100 % |
| **Fetch** | `fetch`, `Request`, `Response`, `Headers`, mixin `Body`, `AbortController`, `AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`, `Event`, WHATWG Streams lengkap (`ReadableStream`, `WritableStream`, `TransformStream`, strategi antrean, BYOB), `CompressionStream` / `DecompressionStream` (zlib + brotli opsional melalui `ext-brotli`), `navigator` | 100 %¹ |
| **Kripto** | `crypto.getRandomValues`, `crypto.randomUUID`, `SubtleCrypto` lengkap (digest, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA P-256/384/521, ECDH, HKDF, PBKDF2) | 100 % |
| **WebSocket** | `WebSocket` (konstruktor + codec frame RFC 6455, transport yang dapat diganti melalui `setWebSocketTransport`) | 100 % |
| **XHR** | `XMLHttpRequest` + `XMLHttpRequestUpload` + `ProgressEvent` (berlapis di atas transport fetch, sehingga hook kebijakan berlaku) | 100 % |
| **Event loop** | `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, `AsyncContext` (Stage 3) | n/a (diuji dengan oracle) |

¹ Tidak termasuk subtes yang diizinkan pada fixture kompresi: kasus brotli yang memerlukan `ext-brotli`, dan kasus yang memberikan input berbasis `SharedArrayBuffer` (`EXPECTED_FAILURES` di `tests/Wpt/WptTest.php`).

Semua Web Platform Tests impor lainnya lulus — lihat [API Web](https://phasis.inline0.dev/id/docs/compatibility/web-apis) untuk perincian kesesuaiannya.

## Yang belum diimplementasikan

- **Semantik worker SharedArrayBuffer** di luar satu agen — notifikasi atomik multithread di antara thread OS nyata memerlukan `pcntl` dan tidak ada dalam rencana. Atomik satu agen berfungsi.
- **`Intl.Segmenter` dengan gugus grafem yang memerlukan ICU 76+** — bergantung pada versi ekstensi `intl` milik host PHP.

## Pemberian versi

Phasis mengikuti semver. Jalur versinya mengikuti draf spesifikasi ECMAScript:

| Versi Phasis | Target spesifikasi | Proposal Stage 3 |
|---|---|---|
| 0.x | ES2024 | decorator, Temporal, pengelolaan sumber daya eksplisit, helper iterator, metode set |

Peningkatan ke 1.0 bergantung pada implementasi setiap proposal Stage 4 dalam draf ES2025 dan semantik pengurasan Promise yang stabil.
