klee-contrib / topmodel

Outil de modélisation et générateurs pour divers langages
https://klee-contrib.github.io/topmodel/#/
MIT License
9 stars 9 forks source link

`tagConfigOverrides` et implé pour le générateur JS #193

Closed JabX closed 1 year ago

JabX commented 1 year ago

Solution pour implémenter #138 sur les autres générateurs

La génération par tag a été implémentée sur le générateur JS en utilisant le placeholder {tag} dans les chemins de fichiers cibles (modèle, clients, traductions). Cette solution est satisfaisante, quoi que limitée par le fait qu'il faut utiliser le libellé du tag directement dans le chemin quelque part. En revanche, pour les autres usages de la fonctionnalité envisagées pour les générateurs C# et Java, l'utilisation directe du tag ne pourra pas vraiment fonctionner selon le même (en particulier pour "Client" et "Server" pour le mode de génération d'API).

La solution proposée consiste dp,c à ajouter, potentiellement à chaque générateur, une nouvelle section de configuration appelée tagConfigOverrides, qui permet pour chaque tag de remplacer la valeur du placeholder {tag} pour un ou plusieurs paramètres.

Par exemple :

- tags:
      - Interne
      - Externe
    tagConfigOverrides:
      Interne:
        modelRootPath: SpaInterne
      Externe:
        modelRootPath: SpaExterne
    outputDirectory: ../sources/front/src
    modelRootPath: "{tag}/model"
    resourceRootPath: "{tag}/locale"
    apiClientRootPath: "{tag}/services"

Pour la résolution du chemin de modelRootPath, le tag Interne sera spa-interne/model (au lieu de interne-model), alors que pour les deux autres ils seront toujours résolus comme interne/locale et interne/services. Si l'intégralité du chemin ou de la valeur du paramètre doit dépendre du tag, alors il suffit de mettre {tag} comme valeur et de définir pour chaque tag la valeur que l'on souhaite.

Cette solution évite de changer le format du fichier de config et n'oblige pas à spécifier les valeurs pour tous les tags si on en a pas besoin.

gideruette commented 1 year ago

Rendre la chose plus générique en introduisant un système de variables globales et par tag


    variables:
        titi: toto
    tagVariables:
      Interne:
        titi: tutu