/// <summary> /// Génère le code des classes. /// </summary> /// <param name="parameters">Paramètres.</param> /// <param name="modelRootList">Liste des modeles.</param> public static void Generate(JavascriptParameters parameters, ICollection <ModelRoot> modelRootList) { if (parameters.ResourceOutputDirectory == null) { return; } if (modelRootList == null) { throw new ArgumentNullException(nameof(modelRootList)); } var nameSpaceMap = new Dictionary <string, List <ModelClass> >(); foreach (var model in modelRootList) { foreach (var modelNameSpace in model.Namespaces.Values) { string namespaceName = modelNameSpace.Name; if (namespaceName.EndsWith("DataContract", StringComparison.Ordinal)) { namespaceName = namespaceName.Substring(0, namespaceName.Length - 12); } else if (namespaceName.EndsWith("Contract", StringComparison.Ordinal)) { namespaceName = namespaceName.Substring(0, namespaceName.Length - 8); } if (!nameSpaceMap.ContainsKey(namespaceName)) { nameSpaceMap.Add(namespaceName, new List <ModelClass>()); } nameSpaceMap[namespaceName].AddRange(modelNameSpace.ClassList); } } foreach (KeyValuePair <string, List <ModelClass> > entry in nameSpaceMap) { var dirInfo = Directory.CreateDirectory(parameters.ResourceOutputDirectory); var fileName = FirstToLower(entry.Key); Console.WriteLine($"Ecriture du fichier de ressource du module {entry.Key}."); WriteNameSpaceNode(dirInfo.FullName + "/" + fileName + ".ts", entry.Key, entry.Value); } }
/// <summary> /// Génère les définitions Typescript. /// </summary> /// <param name="rootNamespace">Namespace de l'application.</param> /// <param name="parameters">Paramètres.</param> /// <param name="modelRootList">La liste des modèles.</param> public static void Generate(string rootNamespace, JavascriptParameters parameters, ICollection <ModelRoot> modelRootList) { if (parameters.ModelOutputDirectory == null) { return; } var nameSpaceMap = new Dictionary <string, List <ModelClass> >(); foreach (var model in modelRootList) { foreach (var modelNameSpace in model.Namespaces.Values) { var namespaceName = TSUtils.ToNamespace(modelNameSpace.Name); if (!nameSpaceMap.ContainsKey(namespaceName)) { nameSpaceMap.Add(namespaceName, new List <ModelClass>()); } nameSpaceMap[namespaceName].AddRange(modelNameSpace.ClassList); } } foreach (var entry in nameSpaceMap) { var staticLists = new List <ModelClass>(); foreach (var model in entry.Value) { if (!model.IsStatique) { if (!parameters.IsGenerateEntities && model.DataContract.IsPersistent) { continue; } var fileName = model.Name.ToDashCase(); Console.Out.WriteLine($"Generating Typescript file: {fileName}.ts ..."); fileName = $"{parameters.ModelOutputDirectory}/{entry.Key.ToDashCase(false)}/{fileName}.ts"; var fileInfo = new FileInfo(fileName); var isNewFile = !fileInfo.Exists; var directoryInfo = fileInfo.Directory; if (!directoryInfo.Exists) { Directory.CreateDirectory(directoryInfo.FullName); } var template = new TypescriptTemplate { RootNamespace = rootNamespace, Model = model }; var result = template.TransformText(); File.WriteAllText(fileName, result, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false)); } else { staticLists.Add(model); } } if (staticLists.Any()) { Console.Out.WriteLine($"Generating Typescript file: references.ts ..."); var fileName = $"{parameters.ModelOutputDirectory}/{entry.Key.ToDashCase(false)}/references.ts"; var fileInfo = new FileInfo(fileName); var isNewFile = !fileInfo.Exists; var directoryInfo = fileInfo.Directory; if (!directoryInfo.Exists) { Directory.CreateDirectory(directoryInfo.FullName); } var template = new ReferenceTemplate { References = staticLists.OrderBy(r => r.Name) }; var result = template.TransformText(); File.WriteAllText(fileName, result, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false)); } } }