
# Úvod
Phasis je čistě PHP engine JavaScript. Lexuje, parsuje a spouští ECMAScript v hostitelském procesu PHP — bez `exec('node …')`, bez FFI a bez vlastního binárního rozšíření. Vyžaduje tři standardní rozšíření PHP: `ext-mbstring`, `ext-bcmath` a `ext-curl` (výchozí transport `fetch()`). `ext-intl` a `ext-openssl` jsou volitelné. Viz [Začínáme](https://phasis.inline0.dev/cs/docs/getting-started) pro sestavení, která `bcmath` vynechávají.

- **Vhodný k vložení** — přidejte běhové prostředí JS do libovolné aplikace PHP, frameworku nebo nástroje CLI pomocí třídy `Phasis\Engine`.
- **V souladu se specifikací** — prochází oficiální sadou test262 na 100 %, ve všech kategoriích, bez vynechaných testů.
- **Webová API** — kompletní **Web Platform Pack** (URL, TextEncoder/Decoder, atob/btoa, structuredClone, performance, DOMException), kompletní **Fetch Pack** (fetch, Request, Response, Headers, Body, AbortController/Signal, Blob, File, FormData, EventTarget, kompletní WHATWG Streams, navigator), dále `crypto` + `SubtleCrypto`, `WebSocket`, `XMLHttpRequest` a skutečná smyčka událostí. Projde 100 % importovaných Web Platform Tests.
- **Moderní možnosti** — šipkové funkce, třídy, async/await, Promises, generátory, Symbol, BigInt, Proxy, Reflect, Temporal, Intl, TypedArrays, plná podpora modulů.
- **Propojení PHP↔JS** — předávejte skaláry a pole PHP do JS (pole se kopírují), propojujte uzávěry PHP jako funkce JS a volejte funkce JS z PHP. Objekty PHP zatím nelze sdílet s JS; viz [Sdílené objekty](https://phasis.inline0.dev/cs/docs/interop/shared-objects).

## Proč vzniklo Phasis

Aplikace PHP, které potřebují spouštět uživatelem dodaný JavaScript — šablonovací enginy, nástroje pro frontendové SSR, pravidla ověřování dat, sandboxy obsahu či bezhlavé testovací nástroje — obvykle spouštějí Node.js jako samostatný proces, nebo tuto funkci vynechají. Obě možnosti zvyšují provozní složitost: druhé běhové prostředí, hranici serializace, síť propojených rour podprocesů a problematické nasazení ve sdíleném hostingu.

Phasis tuto mezeru vyplňuje. Váš kód PHP může lexovat, parsovat a spouštět JavaScript pouze pomocí PHP 8.2+ s `mbstring`, `bcmath` a `curl`. Engine se dodává jako balíček Composer a nabízí malé rozhraní API.

## Co umí

- Implementuje kompletní standardní knihovnu ECMAScript: `Array`, `String`, `Object`, `Math`, `JSON`, `Date`, `RegExp`, `Map`, `Set`, `Promise`, `Proxy`, `Reflect`, `Symbol`, `BigInt`, `TypedArray`, `Temporal`, `Intl`, generátory, asynchronní iterátory a moduly.
- Nabízí API **Web Platform**, která skutečné knihovny JS předem ověřují: `URL`, `URLSearchParams`, `TextEncoder`/`TextDecoder`, `atob`/`btoa`, `structuredClone`, `performance`, `DOMException`. Kompletní přehled najdete v části [Webová API](https://phasis.inline0.dev/cs/docs/compatibility/web-apis).
- Nabízí **`fetch`** s kompletní sadou Fetch — `Request`, `Response`, `Headers`, čtečky těla, `AbortController`/`AbortSignal`, `Blob`, `File`, `FormData`, `EventTarget`/`Event` a kompletní WHATWG Streams (`ReadableStream`, `WritableStream`, `TransformStream`, BYOB, strategie řazení do fronty). Skutečný HTTP funguje ihned díky PHP a jeho `ext-curl`.
- Nabízí **`crypto`** + kompletní `SubtleCrypto` (rodina SHA, HMAC, AES-GCM/CBC/CTR, RSA-OAEP/PSS/PKCS1, ECDSA, ECDH, HKDF, PBKDF2), **`WebSocket`** (RFC 6455 + vyměnitelný transport) a **`XMLHttpRequest`** (postavené na stejném fetch transportu).
- Obsahuje skutečnou **smyčku událostí**: `setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `queueMicrotask` a Stage-3 `AsyncContext` pro předávání hodnot přes asynchronní hranice.
- Podporuje moderní syntaxi — destrukturování, spread/rest, vypočítané vlastnosti, volitelné řetězení, nullish coalescing, šablonové řetězce a označené šablony, třídy (se soukromými poli, statickými bloky a dekorátory) i top-level await.
- Převádí hodnoty přes hranici PHP↔JS. Skaláry a pole se kopírují dovnitř, volatelné objekty PHP se mění na funkce JS a výsledky JS se vracejí jako skaláry a pole PHP. Přesná pravidla najdete v části [Převod hodnot](https://phasis.inline0.dev/cs/docs/interop/values).
- Běží pod kontrolou hostitele. Hostitel spravuje transport `fetch` a zásady, smyčka událostí běží ve virtuálním čase a pevný limit hloubky zásobníku zastaví nekonečnou rekurzi. Limit počtu iterací smyčky existuje, ale zatím se nevynucuje u smyček spouštěných bajtkódovým VM. Nejsou nastaveny limity délky řetězců, výstupu ani času běhu; viz [API: setLimit](https://phasis.inline0.dev/cs/docs/api#setlimit).
- Ověřuje se pomocí Node.js (V8). CI spouští sady unit testů a oracle při každém pushi do `main` a každém pull requestu; sady Web Platform Tests a oblíbených balíčků spouští při změně zdrojového kódu enginu. Kompletní testovací matici test262 spouštíme ručně a její snímek ukládáme do `COMPAT.md`. Viz [Kompatibilita](https://phasis.inline0.dev/cs/docs/compatibility).

## Co merql není

Phasis není JIT kompilátor. Jde o interpret procházející syntaktický strom s příležitostným použitím bajtkódového VM. U úloh omezených rychlostí zpracování očekávejte běh přibližně 100× pomalejší než V8. Výhodou jsou nulové závislosti, čisté PHP a vykonávání pod kontrolou hostitele — ideální pro vložení JavaScript do aplikací PHP, kde jsou správnost a izolace důležitější než maximální propustnost.

## Kde začít

- [Začínáme](https://phasis.inline0.dev/cs/docs/getting-started) — nainstalujte a spusťte svůj první skript.
- [CLI](https://phasis.inline0.dev/cs/docs/cli) — `bin/phasis` pro spouštění souborů, vyhodnocování zdrojového kódu a výpis AST.
- [API](https://phasis.inline0.dev/cs/docs/api) — vložte `Phasis\Engine` do své aplikace PHP.
- [Propojení](https://phasis.inline0.dev/cs/docs/interop) — předávejte hodnoty a volatelné objekty PHP do JavaScript.
- [Kompatibilita](https://phasis.inline0.dev/cs/docs/compatibility) — pokrytí test262 a podporované funkce.
- [Parser](https://phasis.inline0.dev/cs/docs/parser) — parsujte JavaScript do typovaného AST nebo ESTree bez jeho spouštění.
- [Formátovač](https://phasis.inline0.dev/cs/docs/formatter) — formátujte JavaScript, JSON a CSS s rozvržením kompatibilním s prettier.
- [Pokročilé](https://phasis.inline0.dev/cs/docs/advanced) — architektura, bajtkódový VM, benchmarky a model testování pomocí oracle.
