
# Pendahuluan
Phasis adalah mesin PHP JavaScript murni. Mesin ini melakukan leksing, parsing, dan eksekusi ECMAScript dalam proses host PHP — tanpa `exec('node …')`, tanpa FFI, dan tanpa ekstensi biner khusus. Mesin ini memerlukan tiga ekstensi PHP standar: `ext-mbstring`, `ext-bcmath`, dan `ext-curl` (transportasi `fetch()` bawaan). `ext-intl` dan `ext-openssl` bersifat opsional. Lihat [Panduan Memulai](https://phasis.inline0.dev/id/docs/getting-started) untuk build yang tidak menyertakan `bcmath`.

- **Dapat disematkan** — masukkan runtime JS ke aplikasi PHP, framework, atau alat CLI apa pun melalui kelas `Phasis\Engine`.
- **Mematuhi spesifikasi** — lulus suite test262 resmi dengan nilai 100 %, di setiap kategori, tanpa ada yang dilewati.
- **API Web** — **Web Platform Pack** lengkap (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), **Fetch Pack** lengkap (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, WHATWG Streams lengkap, navigator), serta `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest`, dan event loop sungguhan. 100 % Web Platform Tests yang diimpor lulus.
- **Fitur modern** — fungsi panah, kelas, async/await, Promises, generator, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays, dukungan modul lengkap.
- **Interoperabilitas PHP↔JS** — kirim skalar dan array PHP ke JS (array disalin), ikat closure PHP sebagai fungsi JS, dan panggil fungsi JS dari PHP. Objek PHP belum dapat digunakan bersama JS; lihat [Objek bersama](https://phasis.inline0.dev/id/docs/interop/shared-objects).

## Alasan keberadaan Phasis

Aplikasi PHP yang perlu menjalankan JavaScript dari pengguna — mesin templat, shim SSR frontend, aturan validasi data, sandbox konten, runner pengujian headless — biasanya menjalankan Node.js sebagai proses eksternal atau melewatkan fitur tersebut. Kedua pilihan itu menambah kompleksitas operasional: runtime kedua, batas serialisasi, jaringan pipe antarproses, dan masalah deployment yang berisiko di shared hosting.

Phasis mengatasi kesenjangan itu. Kode PHP Anda dapat melakukan leksing, parsing, dan eksekusi JavaScript hanya dengan PHP 8.2+ bersama `mbstring`, `bcmath`, dan `curl`. Mesin ini tersedia sebagai paket Composer dan menyediakan satu antarmuka API kecil.

## Fungsinya

- Mengimplementasikan pustaka standar ECMAScript secara lengkap: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, generator, iterator async, modul.
- Menyediakan API **Web Platform** yang diperiksa keberadaannya terlebih dahulu oleh pustaka JS dunia nyata: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. Lihat [API Web](https://phasis.inline0.dev/id/docs/compatibility/web-apis) untuk daftar lengkap.
- Menyediakan **`fetch`** dengan keluarga Fetch lengkap — `Request`, `Response`, `Headers`, pembaca body, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event`, dan WHATWG Streams lengkap (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB, strategi antrean). HTTP sungguhan langsung berfungsi melalui PHP `ext-curl`.
- Menyediakan **`crypto`** + `SubtleCrypto` lengkap (keluarga SHA, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), **`WebSocket`** (RFC 6455 + transportasi yang dapat diganti), dan **`XMLHttpRequest`** (dibangun di atas transportasi fetch yang sama).
- Menyediakan **event loop** sungguhan: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, serta `AsyncContext` Stage-3 untuk meneruskan nilai melintasi batas async.
- Mendukung sintaks modern — destrukturisasi, spread/rest, properti komputasi, optional chaining, nullish coalescing, literal templat, templat bertag, kelas (dengan field privat, blok statis, dekorator), top-level await.
- Mengonversi nilai melintasi batas PHP↔JS. Skalar dan array disalin saat masuk, callable PHP menjadi fungsi JS, dan hasil JS dikembalikan sebagai skalar dan array PHP. Lihat [Konversi nilai](https://phasis.inline0.dev/id/docs/interop/values) untuk aturan lengkapnya.
- Berjalan di bawah kendali host. Host memiliki transportasi `fetch` dan hook kebijakan, event loop berjalan dalam waktu virtual, dan batas tetap kedalaman tumpukan panggilan menghentikan rekursi tak terkendali. Batas iterasi loop tersedia, tetapi belum diberlakukan pada loop yang dijalankan VM bytecode; tidak ada batas panjang string, output, atau waktu nyata. Lihat [API: setLimit](https://phasis.inline0.dev/id/docs/api#setlimit).
- Diverifikasi terhadap Node.js (V8). CI menjalankan suite unit dan oracle pada setiap push ke `main` dan setiap pull request, serta Web Platform Tests dan suite paket populer saat kode sumber mesin berubah; seluruh matriks test262 dijalankan secara manual dan snapshot-nya di-commit ke `COMPAT.md`. Lihat [Kompatibilitas](https://phasis.inline0.dev/id/docs/compatibility).

## Hal yang bukan termasuk

Phasis bukan compiler JIT. Ini adalah interpreter yang menelusuri pohon dengan VM bytecode oportunistik. Pada beban kerja yang dibatasi oleh dispatch, perkirakan runtime sekitar 100× dibandingkan V8. Imbalannya adalah tanpa dependensi, PHP murni, dan eksekusi yang dikendalikan host — ideal untuk menyematkan JavaScript ke aplikasi PHP saat kebenaran dan isolasi lebih penting daripada throughput mentah.

## Mulai di sini

- [Panduan Memulai](https://phasis.inline0.dev/id/docs/getting-started) — instal dan jalankan skrip pertama Anda.
- [CLI](https://phasis.inline0.dev/id/docs/cli) — `bin/phasis` untuk menjalankan file, mengevaluasi source, dan menampilkan AST.
- [API](https://phasis.inline0.dev/id/docs/api) — sematkan `Phasis\Engine` di aplikasi PHP Anda.
- [Interoperabilitas](https://phasis.inline0.dev/id/docs/interop) — kirim nilai dan callable PHP ke JavaScript.
- [Kompatibilitas](https://phasis.inline0.dev/id/docs/compatibility) — cakupan test262 dan fitur yang didukung.
- [Parser](https://phasis.inline0.dev/id/docs/parser) — parse JavaScript menjadi AST bertipe atau ESTree tanpa mengeksekusinya.
- [Pemformat](https://phasis.inline0.dev/id/docs/formatter) — format JavaScript, JSON, dan CSS dengan tata letak yang kompatibel dengan prettier.
- [Lanjutan](https://phasis.inline0.dev/id/docs/advanced) — arsitektur, VM bytecode, benchmark, dan model pengujian oracle.
