v12.6
@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
FieldEntry2n'existe plus, il s'agit maintenant du typeFieldEntrytout 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 typeDomaindedans.Par exemple :
FieldEntry<ZodString>devient doncFieldEntry<Domain<ZodString>>, ouFieldEntry<ZodString, string, InputProps>qui devientFieldEntry<Domain<ZodString, InputProps>, string> -
Les types
FieldEntry,ObjectEntry,ListEntry,RecursiveListEntryetEntityToTypesont désormais exportés de@focus4/entities.Domainest 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".