Vývoj minifikátoru TypeScriptu

Když už jsem v minulém postu představil jeden z mých projektů a cílů a zároveň to není několikaletý projekt, bylo by trochu záhodné říct, co jsem použil k vývoji.

Nejprve jsem se zamýšlel jak to vůbec udělat – od čeho se odrazit. Jelikož jakožto správný uživatel TypeScriptu vím, že to co je na githubu pod „Source Code“ je kompilátor typescriptu napsaný v TypeScriptu, tak jsem si řekl, že b toho šlo využít. Samozřejmě jsem se ihned nepustil do přepisování kompilátoru, aby uměl minifikovat, ale u takových projektů platí, že jsou modulární, takže lze napsat vlastní aplikaci využívající jejich funkce. Modulární nemusí být nutně členěný do modulů, ale musí být nějak členěný. Což kompilátor TS je. Aby to bylo jednodušší, není třeba zkoumat, jak funguje kompilátor celý a to pak volat svým způsobem, ale kompilátor TypeScriptu přímo obsahuje třídy, které jsou pro tuto činnost určené. Obecně je označuje jako TypeScript Language Service. Z těchto tříd pak lze posladat svůj vlastní program pracující (ne nutně kompilující) s TypeScriptovými zdrojovými kódy. Důležité je, že TypeScript Language Service není platformě závislé. Lze to spustit v prohlížeči i v node.js, případně na dalších platformách. Z toho však vyplývá jeden jistý problém a to jak dostat do TSLS jakýkoliv soubor? Proto TSLS vyžaduje, aby pokud potřebujete pracovat s akcemi, které nějaký TypeScriptový kód nutně čtou, musíte mu nejprve předat objekt, který naimplementuje (v TS rozhraní) určité metody, které jsou k tomu potřebné a v podstatě si tak naimplementujete svoje uložiště. To jestli si ho uděláte platformě závislé nebo máte možnost to vyřešit jinak je už zcela na Vás. Jakmile máte tento základní bod vyřešený, tak se v podstatě můžete pustit přímo do implementace samotné aplikace. TSLS pracuje se syntaktickým stromem, který možná znáte z roslynu, ale v podstatě jde o to že jsou prvky řazeny do stromu, kde máte kořen – řekněme zdrojové soubory a pak následují jednotlivé syntaktické prvky různě strukturovány do sebe. Tento strom můžete s pomocí TSLS procházet a hledat v něm to co potřebujete. Když to najdete, tak s tím můžete pracovat. V mé aplikaci samozřejmě bylo důležité to redaktorování, resp to hlavní - nalezení všech výskytů. K tomu ma TSLS několik metod.

Na tomto se dá postavit takřka jakákoliv aplikace. Příkladem třeba moje ukázka TypeScript class vizualizer která umí vizualizovat TS třídy, tak že ukáže, jaké mají vlastnosti a metody. Na TSLS mám ještě jednu aplikaci, která pracuje se závislostmi mezi třídami (třída = soubor), které se ve webovém prohlížeči musí načítat v určeném pozadí, taková aplikace si pak pomocí TSLS načítá všechny soubory a zjišťuje který soubor je závisly na kterém a exportuje soubor s možným řešením.

Práci s TSLS (nebo něčím podobným) rozhodně doporučuji vyzkoušet, krom pro Vás možná velmi užitečné aplikace si trochu víc uvědomíte, proč jsou programovací jazyky navrženy, tak jak jsou a jak jsou interprety a překladači vnímány a zpracovávány.