@cmssy/types
Un paquet sans dépendances décrivant blocs, champs, pages, modèles, formulaires et commerce - partagé par le SDK, la plateforme et votre application.
Chaque partie de cmssy - la plateforme, le SDK, les outils IA, votre application - doit s'accorder sur ce qu'est un bloc, un champ, une page. @cmssy/types est l'endroit où cet accord est écrit.
Il contient des types et une poignée de fonctions pures. Aucune dépendance d'exécution, aucun framework, rien à empaqueter.
Vous l'obtenez généralement gratuitement
Vous l'installez rarement vous-même. @cmssy/react et @cmssy/next réexportent ce qu'il vous faut : une application normale ne l'importe jamais directement.
Servez-vous-en quand vous écrivez quelque chose à côté du SDK : un script qui lit du contenu de blocs, une migration, un tableau de bord maison, une intégration à l'éditeur. Vous voulez alors le vocabulaire sans embarquer React.
Ce qu'il contient
- Champs -
FieldTypeet les listes de valeurs de types,FieldValidation,ValidationPattern(email,url,phone,slug) et les types d'affichage conditionnel. - Schéma de bloc -
FieldDefinition,BlockSchema,BlockPropsSchema,BlockMeta, plusInferBlockContent, qui déduit le type de contenu d'un bloc de son schéma de props. - Contenu -
CmssyPageData,CmssyPageSummary,CmssyPageMeta,RawBlock,RawLayoutBlock,CmssyLocalizedValue,CmssySiteConfig,CmssyBranding,CmssySiteLocales. - Modèles -
CmssyModelDefinition,CmssyModelRecord,CmssyRecordList. - Layout, formulaires, commerce, intégrations, modules, templates - un fichier chacun.
Deux fonctions à connaître
isLocalizableFieldType(type) indique si un type de champ porte des valeurs par langue. Ce n'est pas le cas de tous : un booléen ou une couleur est identique dans toutes les langues, et le traiter comme traduisible produit cinq copies d'une seule valeur.
evaluateFieldConditionGroup(...) évalue la visibilité conditionnelle des champs. C'est une fonction pure plutôt qu'une logique interne à l'éditeur : une interface maison peut donc décider quels champs afficher avec exactement les règles de l'éditeur cmssy. Deux implémentations de « affiche ce champ quand… » divergeraient, et la divergence apparaîtrait comme un champ requis mais invisible.
Les valeurs localisées sont une union
Le type qui surprend :
type CmssyLocalizedValue = Record<string, string> | string | null;Une valeur localisée est une map de langues ou une chaîne nue ou null. La chaîne nue est du contenu antérieur à la localisation du champ, et reste valide - restreignez donc avant d'indexer :
const title =
typeof value === "string" ? value : (value?.[locale] ?? value?.[defaultLocale] ?? "");Aller droit sur value[locale] fonctionne jusqu'à rencontrer un champ plus ancien, et renvoie alors silencieusement undefined.
Étapes suivantes
- Schéma de bloc & types de champs - les types de champs décrits ici.
- API de diffusion GraphQL - d'où viennent
RawBlocketCmssyPageData. - i18n - la chaîne de repli des valeurs localisées.