Effect 3.0, Hono RPC, i Przyszłość TypeScript - Przegląd Frontendu

Published on 12/19/2024

Effect 3.0 - Pierwsze Stabilne Wydanie

TLDR: Po pięciu latach prac Effect 3.0 zostało wydane jako pierwsze stabilne wydanie "brakującej biblioteki standardowej dla TypeScript". To kompleksowy framework oferujący zaawansowane abstrakcje dla produkcyjnych aplikacji TypeScript.

Summary:

Effect to fascynujący projekt, który próbuje rozwiązać fundamentalne problemy TypeScript w dużych aplikacjach produkcyjnych. Zespół Effect argumentuje, że TypeScript, mimo swojej popularności, wciąż brakuje kluczowych funkcjonalności potrzebnych w enterprise'owych aplikacjach. JavaScript zaczynał jako prosty język skryptowy do automatyzacji UI, a dziś używamy go do budowania kompleksnych systemów backend i frontend.

Główne problemy, które Effect adresuje, to obsługa błędów - w TypeScript często mamy do czynienia z nieznanymi typami błędów, co czyni logikę obsługi błędów grą w zgadywanki. Brakuje też natywnego wsparcia dla testowania i dependency injection, co zmusza nas do monkey-patchingu modułów. Walidacja danych w runtime jest trudna i niebezpieczna - typy TypeScript nie istnieją w runtime, więc bez odpowiedniej walidacji na granicach aplikacji opieramy się na kłamstwie.

Effect oferuje kompleksowe rozwiązanie tych problemów poprzez wbudowane prymitywy do obsługi błędów z silnie typowanymi błędami jako wartościami, API do retry i recovery, narzędzia do logowania i tracingu. Dostarcza też abstrakcje dla współbieżności, walidacji danych, strumieni i wiele więcej. To pozwala zastąpić wiele pojedynczych zależności jednym spójnym systemem.

Największą zaletą Effect jest kompozycyjność następnego poziomu, która czyni całą bazę kodu bardziej reużywalną i testowalną. Jednak z wielką mocą przychodzą wielkie kompromisy. Effect ma ponad 500 funkcji, rozległe API i charakterystyczny styl programowania, który przypomina bardziej naukę nowego języka niż biblioteki. Na szczęście można go adoptować stopniowo - znaleźć kilka funkcji, które od razu się podobają i nigdy nie przejmować się resztą.

Key takeaways:

  • Effect 3.0 to pierwsze stabilne wydanie po 5 latach rozwoju
  • Rozwiązuje problemy z obsługą błędów, testowaniem i walidacją w TypeScript
  • Oferuje ponad 500 funkcji, co oznacza stromą krzywą uczenia
  • Można adoptować stopniowo, wybierając tylko potrzebne funkcjonalności

Link: Effect 3.0 Release

Hono 4.3.0 - Ulepszenia w Trybie RPC

TLDR: Hono 4.3.0 wprowadza znaczące ulepszenia w trybie RPC, w tym typowanie odpowiedzi c.text(), wsparcie dla wszystkich prymitywów JSON i typowanie kodów statusu.

Summary:

Nowa wersja Hono przynosi długo oczekiwane ulepszenia w trybie RPC, które znacząco poprawiają developer experience. Największą zmianą jest typowanie odpowiedzi c.text() - wcześniej zwracała ona po prostu obiekt Response bez typowania, teraz jest to TypedResponse, co pozwala klientowi utworzonemu przez hc uzyskać prawidłowe typy.

To oznacza, że gdy definiujemy endpoint zwracający tekst, klient automatycznie wie, że powinna być wywołana metoda text(), a nie json(). To może wydawać się drobnostką, ale w praktyce eliminuje całe klasy błędów runtime'owych i znacząco poprawia autocomplete w IDE.

Kolejnym ulepszeniem jest pełne wsparcie dla wszystkich prymitywów JSON. Hono teraz prawidłowo inferencuje typy dla stringów, liczb, booleanów i ich kombinacji. To znaczy, że jeśli endpoint zwraca liczbę 37, klient będzie wiedział, że to dokładnie 37, a nie po prostu number.

Bardzo interesującą funkcjonalnością jest typowanie kodów statusu. Gdy explicite określamy status code jak 200 czy 404 w c.json(), zostaje on dodany jako typ przekazywany do klienta. To pozwala na type-safe obsługę różnych scenariuszy - możemy sprawdzić status odpowiedzi i TypeScript będzie wiedział, jakie dane są dostępne dla danego statusu.

Te ulepszenia pokazują, jak dojrzały staje się ekosystem full-stack TypeScript. Możliwość dzielenia typów między klientem a serwerem w sposób tak seamless to coś, o czym mogliśmy tylko marzyć kilka lat temu.

Key takeaways:

  • Typowanie odpowiedzi c.text() dla lepszego type safety
  • Pełne wsparcie inferowania typów dla wszystkich prymitywów JSON
  • Type-safe obsługa różnych kodów statusu HTTP
  • Znaczące ulepszenie developer experience w aplikacjach full-stack

Link: Hono v4.3.0 Release

Tworzenie Pointer-Friendly Submenu w React Spectrum

TLDR: Adobe React Spectrum dodaje wsparcie dla submenu z zaawansowanym algorytmem przewidywania intencji użytkownika na podstawie kierunku i prędkości ruchu kursora.

Summary:

Adobe podzieliło się fascynującym case study dotyczącym implementacji submenu w React Spectrum i React Aria. Problem wydaje się prosty - użytkownik najeżdża na element, pojawia się submenu, użytkownik przesuwa kursor do submenu. W praktyce jednak, gdy użytkownik porusza kursor najkrótszą ścieżką do submenu, może przypadkowo najechać na inny element menu, co spowoduje zamknięcie submenu.

Rozwiązanie Adobe polega na przewidywaniu intencji użytkownika poprzez śledzenie kierunku i prędkości ruchu kursora. Używają geometrii do określenia "bezpiecznej strefy" - wyobrażają sobie dwie linie: jedną od kursora do górnej części submenu, drugą do dolnej części. Obszar między tymi liniami to miejsce, gdzie użytkownik prawdopodobnie porusza kursor w kierunku submenu.

Kluczowym elementem jest użycie funkcji atan2 do mierzenia kątów. Obliczają trzy kąty: do górnego rogu submenu, do dolnego rogu i rzeczywisty kąt ruchu kursora. Jeśli kąt ruchu kursora mieści się między dwoma pierwszymi, wiedzą, że użytkownik zmierza do submenu.

Dodatkowo uwzględniają prędkość kursora. Użytkownicy zazwyczaj przyspieszają poruszając się w kierunku submenu, potem zwalniają gdy docierają do celu. Czasami zatrzymują się lub zwalniają przeglądając opcje w submenu.

To świetny przykład tego, jak pozornie proste interakcje UI wymagają zaawansowanych algorytmów. Pokazuje też, jak ważne jest myślenie o różnych typach urządzeń wejściowych - to co działa dobrze na desktopie z myszką, może nie działać na tablecie z dotykiem.

Key takeaways:

  • Submenu wymagają zaawansowanych algorytmów przewidywania intencji użytkownika
  • Geometria i trygonometria są przydatne w programowaniu UI
  • Ważne jest uwzględnienie różnych typów urządzeń wejściowych
  • Pozornie proste interakcje często skrywają złożone problemy techniczne

Link: Creating a pointer-friendly submenu experience

Deno 1.43 - Znaczące Ulepszenia Performance Language Servera

TLDR: Deno 1.43 drastycznie poprawia performance Language Servera, redukując czas autocompletowania z 6-8 sekund do poniżej sekundy w dużych projektach, plus lepszą kompatybilność z npm.

Summary:

Deno 1.43 to wydanie skupione głównie na performance i developer experience. Największą zmianą są radykalne ulepszenia Language Servera - w większych projektach, gdzie autocompletowanie wcześniej zajmowało 6-8 sekund, teraz jest to poniżej sekundy. Równocześnie znacząco zmniejszono zużycie pamięci, co pozwala na pracę z projektami, które wcześniej powodowały out-of-memory errors.

To pokazuje, jak ważny jest dobry tooling dla adopcji technologii. Nie ma znaczenia, jak dobry jest runtime, jeśli developer experience w IDE jest frustrujący. Deno wreszcie dorównuje, a w niektórych aspektach przewyższa Node.js pod względem responsywności narzędzi deweloperskich.

Kolejną ważną obszarem jest kompatybilność z Node.js i npm. Deno przepracowało implementacje node:vm i node:worker_threads - modułów szeroko używanych w JavaScript CLI tools jak test runnery. To oznacza, że narzędzia jak Jest, Vitest czy Docusaurus działają teraz lepiej z Deno.

Dodano też wsparcie dla używania npm commands w deno.json tasks, co czyni migrację z Node.js jeszcze płynniejszą. To strategiczna decyzja - zamiast zmuszać ludzi do przepisywania wszystkiego, Deno coraz lepiej współpracuje z istniejącym ekosystemem.

Ciekawe jest też wprowadzenie komendy deno serve, która upraszcza tworzenie serwerów HTTP. Plus ulepszenia w JSX precompile i wsparcie dla jsxImportSourceTypes, co pokazuje, że Deno nie zapomina o frontend development.

Deno konsekwentnie realizuje swoją wizję "zero-config, batteries-included" runtime'u, ale robi to w sposób pragmatyczny, nie zmuszając do porzucenia całego istniejącego toolingu.

Key takeaways:

  • Dramatyczna poprawa performance Language Servera w dużych projektach
  • Lepsza kompatybilność z popularnymi narzędziami JavaScript jak Jest i Vitest
  • Wsparcie dla npm commands w deno.json dla łatwiejszej migracji
  • Nowa komenda deno serve upraszcza tworzenie serwerów HTTP

Link: Deno 1.43: Improved Language Server performance

Layer Cake - Framework do Wizualizacji Danych dla Svelte

TLDR: Layer Cake to headless framework do tworzenia wykresów w Svelte, oferujący elastyczne podejście do wizualizacji danych z komponentami SVG, Canvas i HTML.

Summary:

Layer Cake reprezentuje interesujące podejście do bibliotek wizualizacji danych. Zamiast dostarczać gotowe komponenty wykresów, oferuje "headless" framework - dostarcza logikę i abstrakcje, ale pozostawia renderowanie deweloperowi.

Architektura jest elegancka - główny komponent LayerCake zarządza danymi i skalami, a następnie dostarcza puste komponenty layout'owe dla SVG, Canvas i HTML. Deweloper wypełnia te komponenty własnymi komponentami wykresów, które może kopiować i modyfikować z przykładów.

To podejście ma kilka zalet. Po pierwsze, daje pełną kontrolę nad wyglądem i zachowaniem wykresów. Po drugie, pozwala na mieszanie różnych technologii renderowania - można mieć osie w SVG, punkty danych w Canvas dla performance, i etykiety w HTML dla łatwego stylowania.

Layer Cake obsługuje Svelte 5 z nową składnią Rune, ale zachowuje wsparcie dla starszych wersji. To pokazuje, jak biblioteki muszą balansować między adopcją nowych funkcjonalności a wsparciem dla istniejących projektów.

Framework jest szczególnie interesujący w kontekście rosnącej popularności "headless" podejścia w różnych obszarach - od CMS-ów po komponenty UI. Zamiast narzucać konkretne implementacje, dostarczają logikę i pozwalają deweloperom na customizację.

Dla projektów wymagających niestandardowych wizualizacji, Layer Cake może być lepszym wyborem niż tradycyjne biblioteki wykresów, które często ograniczają możliwości customizacji.

Key takeaways:

  • Headless approach daje pełną kontrolę nad renderowaniem wykresów
  • Możliwość mieszania SVG, Canvas i HTML w jednym wykresie
  • Wsparcie dla Svelte 5 z zachowaniem kompatybilności wstecznej
  • Idealne dla projektów wymagających wysokiego stopnia customizacji

Link: Layer Cake - graphics framework for Svelte

Remix dla Deweloperów Next.js - Przewodnik Migracji

TLDR: Kompleksowy przewodnik porównujący koncepty i składnię między Next.js a Remix, ułatwiający migrację deweloperom znającym Next.js.

Summary:

Ten przewodnik to doskonały przykład tego, jak społeczność może ułatwić adopcję nowych technologii. Zamiast zmuszać deweloperów do nauki Remix od zera, pokazuje bezpośrednie mapowanie między konceptami Next.js a Remix.

Najciekawsze różnice dotyczą definicji routes. Gdzie Next.js używa folderów i slashy, Remix używa kropek - każda kropka definiuje segment ścieżki. To może wydawać się dziwne na początku, ale ma swoje zalety - cała struktura routes jest widoczna w jednym folderze bez zagnieżdżonych katalogów.

Dynamiczne routes używają znaku dolara zamiast kwadratowych nawiasów, a catch-all routes to po prostu znak dolara. Route groups w Remix są ukryte routes zaczynające się od podkreślenia, co jest eleganckim rozwiązaniem dla definiowania layout'ów.

Interesujące jest też podejście do plików jak sitemap.xml - Remix pozwala na escape'owanie kropek używając składni z kwadratowymi nawiasami.

Przewodnik pokazuje też różnice w lifecycle'u komponentów - gdzie Next.js ma _document.tsx i _app.tsx, Remix ma root.tsx i system layout'ów oparty na Outlet.

To świetny przykład developer relations - zamiast mówić "naucz się nowego sposobu", mówi "oto jak to, co już znasz, działa w nowym systemie". Tego typu zasoby są kluczowe dla adopcji nowych frameworków.

Key takeaways:

  • Remix używa kropek zamiast folderów do definiowania routes
  • Dynamiczne routes używają znaku dolara zamiast kwadratowych nawiasów
  • System layout'ów oparty na Outlet jest podobny ale różni się od Next.js
  • Przewodnik ułatwia migrację przez bezpośrednie porównania składni

Link: Remix for Next.js Developers

Disclaimer: This article was generated using newsletter-ai powered by claude-sonnet-4-20250514 LLM. While we strive for accuracy, please verify critical information independently.