
# Introducere
Phasis este un motor JavaScript scris integral în PHP. Lexează, parsează și execută ECMAScript în procesul gazdă PHP — fără `exec('node …')`, fără FFI și fără o extensie binară personalizată. Necesită trei extensii standard PHP: `ext-mbstring`, `ext-bcmath` și `ext-curl` (transportul implicit `fetch()`). `ext-intl` și `ext-openssl` sunt opționale. Consultați [Noțiuni introductive](https://phasis.inline0.dev/ro/docs/getting-started) pentru build-uri care nu includ `bcmath`.

- **Încorporabil** — adăugați un runtime JS în orice aplicație PHP, framework sau instrument CLI prin clasa `Phasis\Engine`.
- **Conform cu specificația** — trece suita oficială test262 la 100 %, fiecare categorie, fără omisiuni.
- **API-uri web** — **Web Platform Pack** complet (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), **Fetch Pack** complet (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, WHATWG Streams complete, navigator), plus `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest` și o buclă de evenimente reală. 100 % dintre testele Web Platform importate trec.
- **Suprafață modernă** — funcții săgeată, clase, async/await, Promises, generatoare, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays, suport complet pentru module.
- **Interoperabilitate PHP↔JS** — transmiteți scalari și tablouri PHP către JS (tablourile sunt copiate), legați închiderile PHP ca funcții JS și apelați funcții JS din PHP. Obiectele PHP nu pot fi încă partajate cu JS; consultați [Obiecte partajate](https://phasis.inline0.dev/ro/docs/interop/shared-objects).

## De ce există Phasis

Aplicațiile PHP care trebuie să ruleze JavaScript furnizat de utilizator — motoare de șabloane, shim-uri SSR pentru frontend, reguli de validare a datelor, medii izolate pentru conținut, runner-e de teste fără interfață grafică — apelează de obicei Node.js ca proces extern sau omit funcționalitatea. Ambele variante adaugă complexitate operațională: un al doilea runtime, o limită de serializare, o rețea de pipe-uri între subprocese și dificultăți la implementarea în siguranță pe găzduire partajată.

Phasis elimină acest obstacol. Codul PHP poate lexua, parsa și executa JavaScript folosind doar PHP 8.2+ cu `mbstring`, `bcmath` și `curl`. Motorul este distribuit ca pachet Composer și oferă o singură suprafață API compactă.

## Ce face

- Implementează întreaga bibliotecă standard ECMAScript: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, generatoare, iteratori asincroni și module.
- Include API-urile **Web Platform** pe care bibliotecile JS din aplicații reale le verifică în avans: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. Consultați [API-uri web](https://phasis.inline0.dev/ro/docs/compatibility/web-apis) pentru întreaga suprafață.
- Include **`fetch`** cu întreaga familie Fetch — `Request`, `Response`, `Headers`, consumatori de corp, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event` și WHATWG Streams complete (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB, strategii de coadă). HTTP funcționează imediat prin PHP `ext-curl`.
- Include **`crypto`** + `SubtleCrypto` complet (familia SHA, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), **`WebSocket`** (RFC 6455 + transport interschimbabil) și **`XMLHttpRequest`** (stratificat peste același transport fetch).
- Include o **buclă de evenimente** reală: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask`, plus `AsyncContext` Stage-3 pentru propagarea valorilor peste limite asincrone.
- Acceptă sintaxa modernă — destructurare, spread/rest, proprietăți calculate, înlănțuire opțională, coalescență nullish, șabloane literale, șabloane cu etichete, clase (cu câmpuri private, blocuri statice și decoratori), top-level await.
- Convertește valorile peste limita PHP↔JS. Scalarii și tablourile sunt copiați la intrare, funcțiile apelabile PHP devin funcții JS, iar rezultatele JS revin ca scalari și tablouri PHP. Consultați [Conversia valorilor](https://phasis.inline0.dev/ro/docs/interop/values) pentru regulile exacte.
- Rulează sub controlul gazdei. Gazda deține transportul `fetch` și cârligele de politică, bucla de evenimente rulează în timp virtual, iar o limită fixă a stivei de apeluri oprește recursivitatea necontrolată. Există o limită pentru iterațiile buclelor, dar încă nu se aplică buclelor executate de VM-ul de bytecode și nu există limite pentru lungimea șirurilor, rezultat sau timpul de execuție; consultați [API: setLimit](https://phasis.inline0.dev/ro/docs/api#setlimit).
- Este verificat față de Node.js (V8). CI rulează suitele unitare și oracle la fiecare push către `main` și la fiecare pull request, iar testele Web Platform și suitele pentru pachete populare când se modifică sursa motorului; întreaga matrice test262 este rulată manual, iar instantaneul ei este înregistrat în `COMPAT.md`. Consultați [Compatibilitate](https://phasis.inline0.dev/ro/docs/compatibility).

## Ce nu este

Phasis nu este un compilator JIT. Este un interpret care parcurge arborele, cu o mașină virtuală de bytecode folosită oportunist. Pentru sarcini limitate de dispecerizare, așteptați-vă la un timp de execuție de ~100× față de V8. Compromisul oferă zero dependențe, PHP pur și execuție controlată de gazdă — ideal pentru încorporarea JavaScript în aplicații PHP, unde corectitudinea și izolarea contează mai mult decât debitul brut.

## De unde să începeți

- [Noțiuni introductive](https://phasis.inline0.dev/ro/docs/getting-started) — instalați și rulați primul script.
- [CLI](https://phasis.inline0.dev/ro/docs/cli) — `bin/phasis` pentru rularea fișierelor, evaluarea sursei și afișarea AST-ului.
- [API](https://phasis.inline0.dev/ro/docs/api) — încorporați `Phasis\Engine` în aplicația PHP.
- [Interoperabilitate](https://phasis.inline0.dev/ro/docs/interop) — transmiteți valori și funcții apelabile PHP către JavaScript.
- [Compatibilitate](https://phasis.inline0.dev/ro/docs/compatibility) — acoperire test262 și funcții acceptate.
- [Parser](https://phasis.inline0.dev/ro/docs/parser) — parsați JavaScript într-un AST tipizat sau ESTree fără a-l executa.
- [Formator](https://phasis.inline0.dev/ro/docs/formatter) — formatați JavaScript, JSON și CSS cu aranjare compatibilă cu prettier.
- [Avansat](https://phasis.inline0.dev/ro/docs/advanced) — arhitectură, VM de bytecode, teste de performanță și modelul de testare oracle.
