implementing-jsc-classes-zig
Creates JavaScript classes using Bun's Zig bindings generator (.classes.ts). Use when implementing new JS APIs in Zig with JSC integration.
Installation
Pick a client and clone the repository into its skills directory.
Installation
About this skill
Creates JavaScript classes using Bun's Zig bindings generator (.classes.ts). Use when implementing new JS APIs in Zig with JSC integration.
How to use
Utwórz plik .classes.ts w swoim projekcie Bun, w którym zdefiniujesz strukturę klasy JavaScript. Użyj funkcji define() z opcjami takimi jak name (nazwa klasy), constructor (czy ma publiczny konstruktor), proto (właściwości i metody), finalize (czy wymaga czyszczenia zasobów) i cache (czy cachować wartości właściwości).
W pliku .zig zaimplementuj strukturę odpowiadającą zdefiniowanej klasie. Dodaj pole js wskazujące na wygenerowany kod JSC.Codegen, oraz funkcje toJS, fromJS i fromJSDirect do konwersji między Zig a JavaScript.
Zaimplementuj funkcję constructor w Zig, która przyjmuje globalObject i callFrame, inicjalizuje strukturę i zwraca instancję. Ta funkcja będzie wywoływana gdy użytkownik tworzy nową instancję klasy w JavaScript.
Dla każdej metody zdefiniowanej w proto dodaj odpowiadającą jej funkcję w strukturze Zig. Każda metoda powinna przyjmować this (instancję), globalObject i callFrame, a zwracać JSC.JSValue lub bun.JSError.
Dla właściwości z opcją getter zaimplementuj funkcję getPropertyName w Zig, która zwraca JSC.JSValue. Jeśli ustawiłeś cache: true, wartość będzie automatycznie cachowana przez WriteBarrier.
Generator automatycznie tworzy kod C++/Zig łączący definicję .classes.ts z implementacją Zig — nie musisz ręcznie pisać kodu integracyjnego. Skompiluj projekt, a Twoja klasa będzie dostępna w JavaScript z pełnym wsparciem dla konstruktora, metod i getterów.