Skip to content

Commit

Permalink
[JS] Support de {module} (et {lang}) dans modelRootPath et resourceRo…
Browse files Browse the repository at this point in the history
…otPath
  • Loading branch information
JabX committed Dec 12, 2024
1 parent 6e4c061 commit 437fc7b
Show file tree
Hide file tree
Showing 8 changed files with 50 additions and 31 deletions.
10 changes: 10 additions & 0 deletions TopModel.Generator.Javascript/GeneratorRegistration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ public void Register(IServiceCollection services, JavascriptConfig config, int n

if (config.ModelRootPath != null)
{
if (!config.ModelRootPath.Contains("{module}"))
{
config.ModelRootPath = Path.Combine(config.ModelRootPath, "{module}");
}

services.AddGenerator<TypescriptDefinitionGenerator, JavascriptConfig>(config, number);
services.AddGenerator<TypescriptReferenceGenerator, JavascriptConfig>(config, number);

Expand All @@ -59,6 +64,11 @@ public void Register(IServiceCollection services, JavascriptConfig config, int n

if (config.ResourceRootPath != null && (config.TranslateProperties == true || config.TranslateReferences == true))
{
if (!config.ResourceRootPath.Contains("{lang}"))
{
config.ResourceRootPath = Path.Combine(config.ResourceRootPath, "{lang}");
}

services.AddGenerator<JavascriptResourceGenerator, JavascriptConfig>(config, number);
}
}
Expand Down
46 changes: 27 additions & 19 deletions TopModel.Generator.Javascript/JavascriptConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ namespace TopModel.Generator.Javascript;
public class JavascriptConfig : GeneratorConfigBase
{
/// <summary>
/// Localisation du modèle, relative au répertoire de génération. Si non renseigné, aucun fichier ne sera généré.
/// Localisation du modèle, relative au répertoire de génération. Si non renseigné, aucun modèle ne sera généré. Si '{module}' n'est pas présent dans le chemin, alors il sera ajouté à la fin.
/// </summary>
public string? ModelRootPath { get; set; }

/// <summary>
/// Localisation des ressources i18n, relative au répertoire de génération. Si non renseigné, aucun fichier ne sera généré.
/// Localisation des ressources i18n, relative au répertoire de génération. Si non renseigné, aucun fichier ne sera généré. Si '{lang}' n'est pas présent dans le chemin, alors il sera ajouté à la fin.
/// </summary>
public string? ResourceRootPath { get; set; }

Expand Down Expand Up @@ -80,24 +80,31 @@ public class JavascriptConfig : GeneratorConfigBase
/// </summary>
public bool GenerateMainResourceFiles { get; set; }

public override string[] PropertiesWithModuleVariableSupport => new[]
{
nameof(ApiClientFilePath)
};
public override string[] PropertiesWithModuleVariableSupport =>
[
nameof(ModelRootPath),
nameof(ApiClientFilePath),
nameof(ResourceRootPath)
];

public override string[] PropertiesWithFileNameVariableSupport => new[]
{
public override string[] PropertiesWithFileNameVariableSupport =>
[
nameof(ApiClientFilePath)
};
];

public override string[] PropertiesWithTagVariableSupport => new[]
{
public override string[] PropertiesWithTagVariableSupport =>
[
nameof(ModelRootPath),
nameof(ResourceRootPath),
nameof(ApiClientRootPath),
nameof(FetchPath),
nameof(DomainPath)
};
];

public override string[] PropertiesWithLangVariableSupport =>
[
nameof(ResourceRootPath)
];

protected override bool UseNamedEnums => false;

Expand All @@ -107,8 +114,7 @@ public virtual string GetClassFileName(Class classe, string tag)
{
return Path.Combine(
OutputDirectory,
ResolveVariables(ModelRootPath!, tag),
classe.Namespace.ModulePathKebab,
ResolveVariables(ModelRootPath!, tag, classe.Namespace.ModulePathKebab),
$"{classe.Name.ToKebabCase()}.ts")
.Replace("\\", "/");
}
Expand All @@ -117,8 +123,7 @@ public virtual string GetCommentResourcesFilePath(Namespace ns, string tag, stri
{
return Path.Combine(
OutputDirectory,
ResolveVariables(ResourceRootPath!, tag),
lang,
ResolveVariables(ResourceRootPath!, tag, ns.RootModule.ToKebabCase(), lang),
$"{ns.RootModule.ToKebabCase()}.comments{(ResourceMode == ResourceMode.JS ? ".ts" : ".json")}")
.Replace("\\", "/");
}
Expand Down Expand Up @@ -208,7 +213,11 @@ public virtual string GetMainResourceFilePath(string tag, string lang)

public virtual string GetReferencesFileName(Namespace ns, string tag)
{
return Path.Combine(OutputDirectory, ResolveVariables(ModelRootPath!, tag), ns.ModulePathKebab, "references.ts").Replace("\\", "/");
return Path.Combine(
OutputDirectory,
ResolveVariables(ModelRootPath!, tag, ns.ModulePathKebab),
"references.ts")
.Replace("\\", "/");
}

public virtual string GetRelativePath(string path, string fileName)
Expand All @@ -222,8 +231,7 @@ public virtual string GetResourcesFilePath(Namespace ns, string tag, string lang
{
return Path.Combine(
OutputDirectory,
ResolveVariables(ResourceRootPath!, tag),
lang,
ResolveVariables(ResourceRootPath!, tag, ns.RootModule.ToKebabCase(), lang),
$"{ns.RootModule.ToKebabCase()}{(ResourceMode == ResourceMode.JS ? ".ts" : ".json")}")
.Replace("\\", "/");
}
Expand Down
4 changes: 2 additions & 2 deletions TopModel.Generator.Javascript/javascript.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,11 @@
},
"modelRootPath": {
"type": "string",
"description": "Localisation du modèle, relative au répertoire de génération. Si non renseigné, aucun modèle ne sera généré."
"description": "Localisation du modèle, relative au répertoire de génération. Si non renseigné, aucun modèle ne sera généré. Si '{module}' n'est pas présent dans le chemin, alors il sera ajouté à la fin."
},
"resourceRootPath": {
"type": "string",
"description": "Localisation des ressources i18n, relative au répertoire de génération. Si non renseigné, aucun fichier ne sera généré"
"description": "Localisation des ressources i18n, relative au répertoire de génération. Si non renseigné, aucun fichier ne sera généré. Si '{lang}' n'est pas présent dans le chemin, alors il sera ajouté à la fin."
},
"apiClientRootPath": {
"type": "string",
Expand Down
4 changes: 2 additions & 2 deletions samples/generators/angular/topmodel.config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -159,11 +159,11 @@
},
"modelRootPath": {
"type": "string",
"description": "Localisation du modèle, relative au répertoire de génération. Si non renseigné, aucun modèle ne sera généré."
"description": "Localisation du modèle, relative au répertoire de génération. Si non renseigné, aucun modèle ne sera généré. Si '{module}' n'est pas présent dans le chemin, alors il sera ajouté à la fin."
},
"resourceRootPath": {
"type": "string",
"description": "Localisation des ressources i18n, relative au répertoire de génération. Si non renseigné, aucun fichier ne sera généré"
"description": "Localisation des ressources i18n, relative au répertoire de génération. Si non renseigné, aucun fichier ne sera généré. Si '{lang}' n'est pas présent dans le chemin, alors il sera ajouté à la fin."
},
"apiClientRootPath": {
"type": "string",
Expand Down
4 changes: 2 additions & 2 deletions samples/generators/focus/topmodel.config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -159,11 +159,11 @@
},
"modelRootPath": {
"type": "string",
"description": "Localisation du modèle, relative au répertoire de génération. Si non renseigné, aucun modèle ne sera généré."
"description": "Localisation du modèle, relative au répertoire de génération. Si non renseigné, aucun modèle ne sera généré. Si '{module}' n'est pas présent dans le chemin, alors il sera ajouté à la fin."
},
"resourceRootPath": {
"type": "string",
"description": "Localisation des ressources i18n, relative au répertoire de génération. Si non renseigné, aucun fichier ne sera généré"
"description": "Localisation des ressources i18n, relative au répertoire de génération. Si non renseigné, aucun fichier ne sera généré. Si '{lang}' n'est pas présent dans le chemin, alors il sera ajouté à la fin."
},
"apiClientRootPath": {
"type": "string",
Expand Down
9 changes: 5 additions & 4 deletions samples/generators/jpa/topmodel.config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -219,16 +219,17 @@
{
"type": "string",
"description": "Mode de génération de l'API Client ('Client' ou 'Server')",
"default": "RestClient",
"default": "restClient",
"enum": [
"RestTemplate",
"RestClient"
"RrestTemplate",
"RestClient",
"FeignClient"
]
},
{
"type": "string",
"description": "Mode de génération de l'API ('RestTemplate' ou 'RestClient')",
"default": "RestClient",
"default": "restClient",
"pattern": "^\\{[^\\}]+\\}$"
}
]
Expand Down
2 changes: 1 addition & 1 deletion samples/model/angular.topmodel.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

version: 2.2.1
custom:
../../../TopModel.Generator.Javascript: 571f6c4e09ca0841e5b731496f3dc036
../../../TopModel.Generator.Javascript: 427ee5726835e07eed75a535e18ef04c
generatedFiles:
- ../generators/angular/src/appgenerated/api/securite/profil/profil.service.ts
- ../generators/angular/src/appgenerated/api/securite/utilisateur/utilisateur.service.ts
Expand Down
2 changes: 1 addition & 1 deletion samples/model/focus.topmodel.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

version: 2.2.1
custom:
../../../TopModel.Generator.Javascript: 571f6c4e09ca0841e5b731496f3dc036
../../../TopModel.Generator.Javascript: 427ee5726835e07eed75a535e18ef04c
generatedFiles:
- ../generators/focus/src/locale/common.ts
- ../generators/focus/src/locale/securite.ts
Expand Down

0 comments on commit 437fc7b

Please sign in to comment.