Esempio n. 1
0
        /// <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));
                }
            }
        }