@cmssy/types
Jeden pakiet bez zależności opisujący bloki, pola, strony, modele, formularze i commerce - dzielony przez SDK, platformę i Twoją aplikację.
Każda część cmssy - platforma, SDK, narzędzia AI, Twoja aplikacja - musi zgadzać się co do tego, czym jest blok, czym pole, jak wygląda strona. @cmssy/types to miejsce, gdzie ta zgoda jest spisana.
Zawiera typy i garść czystych helperów. Zero zależności runtime'owych, zero frameworka, nic do zbundlowania.
Zwykle dostajesz go za darmo
Rzadko instalujesz go sam. @cmssy/react i @cmssy/next reeksportują to, czego potrzebujesz, więc normalna aplikacja nigdy nie importuje go wprost.
Sięgnij po niego, gdy piszesz coś obok SDK: skrypt czytający treść bloków, migrację, własny dashboard, integrację z edytorem. Wtedy chcesz słownika bez wciągania Reacta.
Co jest w środku
- Pola -
FieldTypei listy wartości typów pól,FieldValidation,ValidationPattern(email,url,phone,slug) oraz typy warunkowego wyświetlania. - Schemat bloku -
FieldDefinition,BlockSchema,BlockPropsSchema,BlockMetaplusInferBlockContent, który wyprowadza typ treści bloku z jego schematu propsów. - Treść -
CmssyPageData,CmssyPageSummary,CmssyPageMeta,RawBlock,RawLayoutBlock,CmssyLocalizedValue,CmssySiteConfig,CmssyBranding,CmssySiteLocales. - Modele -
CmssyModelDefinition,CmssyModelRecord,CmssyRecordList. - Layout, formularze, commerce, integracje, moduły, szablony - po jednym pliku na każde.
Dwa helpery warte poznania
isLocalizableFieldType(type) odpowiada, czy dany typ pola niesie wartości per język. Nie każdy niesie - boolean albo kolor jest ten sam w każdym języku, a traktowanie go jako tłumaczalnego produkuje pięć kopii jednej wartości.
evaluateFieldConditionGroup(...) oblicza warunkową widoczność pól. To czysta funkcja, a nie logika wewnętrzna edytora - dzięki temu własny interfejs może decydować, które pola pokazać, dokładnie tą samą regułą, której używa edytor cmssy. Dwie implementacje "pokaż to pole, gdy..." rozjechałyby się, a rozjechanie objawiłoby się jako pole wymagane, ale niewidoczne.
Wartości lokalizowane to unia
Typ, który zaskakuje:
type CmssyLocalizedValue = Record<string, string> | string | null;Wartość lokalizowana to mapa języków albo goły string albo null. Goły string to treść zapisana, zanim pole stało się lokalizowane, i dalej jest poprawna - więc zawęż typ, zanim sięgniesz po klucz:
const title =
typeof value === "string" ? value : (value?.[locale] ?? value?.[defaultLocale] ?? "");Sięgnięcie wprost po value[locale] działa, dopóki nie trafi na starsze pole - i wtedy po cichu daje undefined.
Następne kroki
- Schemat bloku i typy pól - typy pól, które to opisuje.
- API dostawcze GraphQL - skąd biorą się
RawBlockiCmssyPageData. - i18n - łańcuch fallbacku dla wartości lokalizowanych.