
# Úvod
Phasis je čistý engine PHP JavaScript. Lexuje, analyzuje a vykonáva ECMAScript v procese hostiteľského PHP bez `exec('node …')`, FFI a vlastného binárneho rozšírenia. Vyžaduje tri štandardné rozšírenia PHP: `ext-mbstring`, `ext-bcmath` a `ext-curl` (predvolený prenosový mechanizmus `fetch()`). `ext-intl` a `ext-openssl` sú voliteľné. Zostavy bez `bcmath` nájdete v časti [Začíname](https://phasis.inline0.dev/sk/docs/getting-started).

- **Vložiteľný** — vložte modul JS do ľubovoľnej aplikácie PHP, frameworku alebo nástroja CLI prostredníctvom triedy `Phasis\Engine`.
- **V súlade so špecifikáciou** — úspešne prejde oficiálnou sadou test262 na úrovni 100 %, vo všetkých kategóriách a bez preskočených testov.
- **Webové API** — úplný **balík Web Platform** (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), úplný **balík Fetch** (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, úplné WHATWG Streams, navigator), plus `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest` a skutočná slučka udalostí. Úspešne prejde 100 % importovaných testov Web Platform. 
- **Moderné rozhranie** — šípkové funkcie, triedy, async/await, Promises, generátory, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays a úplná podpora modulov.
- **Prepojenie PHP↔JS** — odovzdávajte skaláre PHP a polia do JS (polia sa kopírujú), viažte uzávery PHP ako funkcie JS a volajte funkcie JS z PHP. Objekty PHP zatiaľ nemožno zdieľať s JS; pozrite si [Zdieľané objekty](https://phasis.inline0.dev/sk/docs/interop/shared-objects).

## Prečo vznikol Phasis

Aplikácie PHP, ktoré potrebujú spúšťať používateľský kód JavaScript — šablónovacie moduly, nástroje na obchádzanie SSR pre frontend, pravidlá overovania údajov, izolované prostredia pre obsah a bezhlavé testovacie spúšťače — zvyčajne spustia Node.js ako externý proces alebo túto funkciu vynechajú. Obe možnosti prinášajú prevádzkovú zložitosť: druhé prostredie, hranicu serializácie, sieť kanálov medzi podprocesmi a náročné nasadenie v zdieľanom hostingu.

Phasis túto medzeru vypĺňa. Váš kód PHP môže lexovať, analyzovať a spúšťať JavaScript iba pomocou PHP 8.2+ s `mbstring`, `bcmath` a `curl`. Engine sa dodáva ako balík Composer a sprístupňuje malé jednotné rozhranie API.

## Čo dokáže

- Implementuje úplnú štandardnú knižnicu ECMAScript: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, generátory, asynchrónne iterátory a moduly.
- Dodáva rozhrania API **Web Platform**, ktoré knižnice JS z praxe vopred kontrolujú: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. Úplný zoznam rozhraní nájdete v časti [Webové API](https://phasis.inline0.dev/sk/docs/compatibility/web-apis).
- Dodáva **`fetch`** s úplnou rodinou Fetch — `Request`, `Response`, `Headers`, čítačmi tela, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event` a úplným WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB a stratégiami frontu). Skutočný HTTP funguje okamžite vďaka PHP `ext-curl`.
- Dodáva **`crypto`** + úplné `SubtleCrypto` (rodina SHA, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), **`WebSocket`** (RFC 6455 + vymeniteľný prenosový mechanizmus) a **`XMLHttpRequest`** (postavené na rovnakom prenosovom mechanizme fetch).
- Dodáva skutočnú **slučku udalostí**: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask` a Stage-3 `AsyncContext` na prenos hodnôt cez asynchrónne hranice.
- Podporuje modernú syntax — deštrukturalizáciu, spread/rest, vypočítané vlastnosti, voliteľné reťazenie, spájanie pri hodnotách null, šablónové literály, označené šablóny, triedy (so súkromnými poľami, statickými blokmi a dekorátormi) a await na najvyššej úrovni.
- Prevádza hodnoty cez hranicu PHP↔JS. Skaláre a polia sa kopírujú dovnútra, volateľné objekty PHP sa menia na funkcie JS a výsledky JS sa vracajú ako skaláre a polia PHP. Presné pravidlá nájdete v časti [Konverzia hodnôt](https://phasis.inline0.dev/sk/docs/interop/values).
- Beží pod kontrolou hostiteľa. Hostiteľ vlastní prenosový mechanizmus `fetch` a politické háky, slučka udalostí beží vo virtuálnom čase a pevný limit zásobníka volaní zastavuje nekonečnú rekurziu. Limit počtu iterácií slučky existuje, ale zatiaľ sa nevynucuje pri slučkách spúšťaných VM bajtkódu; neexistujú ani limity dĺžky reťazcov, výstupu či reálneho času. Pozrite si [API: setLimit](https://phasis.inline0.dev/sk/docs/api#setlimit).
- Overuje sa voči Node.js (V8). CI spúšťa jednotkové testy a testy referenčnej implementácie pri každom odoslaní do `main` a pri každej požiadavke na stiahnutie; testy Web Platform a sady populárnych balíkov spúšťa pri zmenách zdrojového kódu enginu. Úplnú maticu test262 spúšťa vývojár ručne a jej snímka sa ukladá do `COMPAT.md`. Pozrite si [Kompatibilita](https://phasis.inline0.dev/sk/docs/compatibility).

## Čo to nie je

Phasis nie je JIT kompilátor. Je to interpret prechádzajúci strom s príležitostným virtuálnym strojom bajtkódu. Pri úlohách limitovaných obsluhou očakávajte približne 100× dlhší beh než pri V8. Kompromisom sú nulové závislosti, čisté PHP a vykonávanie riadené hostiteľom — ideálne na vloženie JavaScript do aplikácií PHP, kde sú správnosť a izolácia dôležitejšie než surová priepustnosť.

## Kde začať

- [Začíname](https://phasis.inline0.dev/sk/docs/getting-started) — nainštalujte a spustite svoj prvý skript.
- [CLI](https://phasis.inline0.dev/sk/docs/cli) — `bin/phasis` na spúšťanie súborov, vyhodnocovanie zdrojového kódu a výpis AST.
- [API](https://phasis.inline0.dev/sk/docs/api) — vložte `Phasis\Engine` do svojej aplikácie PHP.
- [Prepojenie](https://phasis.inline0.dev/sk/docs/interop) — odovzdávanie hodnôt a volateľných objektov PHP do JavaScript.
- [Kompatibilita](https://phasis.inline0.dev/sk/docs/compatibility) — pokrytie test262 a podporované funkcie.
- [Parser](https://phasis.inline0.dev/sk/docs/parser) — parsovanie JavaScript do typovaného AST alebo ESTree bez jeho vykonania.
- [Formátovač](https://phasis.inline0.dev/sk/docs/formatter) — formátovanie JavaScript, JSON a CSS s rozložením kompatibilným s prettier.
- [Pokročilé témy](https://phasis.inline0.dev/sk/docs/advanced) — architektúra, virtuálny stroj bajtkódu, benchmarky a model testovania pomocou oracle.
