Skip to content

v12.6

Choose a tag to compare

@JabX JabX released this 28 Oct 18:39
· 157 commits to master since this release

@focus4/entities

Cette release introduit un nouveau module @focus4/entities, qui extrait la modélisation Focus dans un module dédié, libre de toute dépendance Focus, afin de pouvoir l'utiliser dans d'autres projets JS qui n'utilisent pas Focus (ou React).

En plus des types FieldEntry ou EntityToType, ce module introduit une nouvelle API pour créer des entités, au lieu de se baser sur des objets JS avec leurs types écrits "à la main", qui n'était acceptable qu'en utilisant un générateur de code (TopModel, pour ne pas le citer).

On peut donc désormais définir les entités de la façon suivante, pour donner un exemple :

import {e, entity} from "@focus4/entities";

export const ProfilItemEntity = entity({
    id: e.field(DO_ID, f => f.optional().label("securite.profil.profil.id")),
    libelle: e.field(DO_LIBELLE, f => f.label("securite.profil.profil.libelle")),
    nombreUtilisateurs: e.field(DO_ENTIER, f => f.label("securite.profil.profilItem.nombreUtilisateurs"))
});

Ce nouveau format n'est pas obligatoire, vous pouvez toujours continuer à définir vos entités comme avant, mais vous devriez quand même songer à faire la migration. La dernière version du générateur Javascript pour TopModel peut générer les entités dans ce format-là, donc vous n'aurez qu'à changer une option dans le configuration 😉

Breaking changes

  • Le type FieldEntry2 n'existe plus, il s'agit maintenant du type FieldEntry tout court (FieldEntry<{type du domaine}, {type du champ}> de sa forme complète). Cela veut dire que l'ancien type avec 8 paramètres génériques n'existe plus : il faudra remplacer ses usages en incluant le type Domain dedans.

    Par exemple : FieldEntry<ZodString> devient donc FieldEntry<Domain<ZodString>>, ou FieldEntry<ZodString, string, InputProps> qui devient FieldEntry<Domain<ZodString, InputProps>, string>

  • Les types FieldEntry, ObjectEntry, ListEntry, RecursiveListEntry et EntityToType sont désormais exportés de @focus4/entities. Domain est désormais un type global qui n'a pas besoin d'être importé.

Remarque : Ces breaking changes rendent l'ancien mode "typé" du générateur TopModel JS incompatible avec la mise à jour à cause du renommage FieldEntry2 en FieldEntry. Vous devrez donc nécessairement passer au nouveau mode "Focus".