Beispiel #1
0
        public void GenerateDataModelAST(TypeScriptClassModel classModel, string outputPath)
        {
            var request = new ClassGenerationRequest();

            string fileName = $"{NameCaseConverter.ToKebabCase(classModel.Name)}.model.{TypeScriptFileExtension.File}";

            var typeGenerator = new TypeGenerator();

            request.OutputPath = Path.Combine(outputPath, "models", fileName);

            request.DataModel = new ClassModel()
            {
                Name           = classModel.Name,
                BaseClass      = classModel.BaseClass,
                Decorators     = new string[] { },
                TypeParameters = classModel.TypeParameters.Select(i => i.Name).ToArray(),
                Imports        = classModel.Imports.Select(i => new ImportModel()
                {
                    Names = new string[] { i.Name },
                    Path  = i.DependencyKind == DependencyKind.Model
                        ? $"./{NameCaseConverter.ToKebabCase(i.Name)}.model"
                        : $"../enums/{NameCaseConverter.ToKebabCase(i.Name)}.enum"
                }).ToArray(),
                Properties = classModel.Properties.Select(p => new PropertyModel()
                {
                    Name         = NameCaseConverter.ToCamelCase(p.Name),
                    Type         = typeGenerator.GetEmittedType(p.Type),
                    IsPrivate    = false,
                    InitialValue = null,
                }).ToArray(),
            };

            var result = CallGenerator("/generate/class", CreateStringContent(request));
        }
Beispiel #2
0
 public void ToKebabCaseTest()
 {
     Assert.AreEqual("url-value", NameCaseConverter.ToKebabCase("URLValue"));
     Assert.AreEqual("url", NameCaseConverter.ToKebabCase("URL"));
     Assert.AreEqual("id", NameCaseConverter.ToKebabCase("ID"));
     Assert.AreEqual("i", NameCaseConverter.ToKebabCase("I"));
     Assert.AreEqual("", NameCaseConverter.ToKebabCase(""));
     Assert.AreEqual(null, NameCaseConverter.ToKebabCase(null));
     Assert.AreEqual("person", NameCaseConverter.ToKebabCase("Person"));
     Assert.AreEqual("i-phone", NameCaseConverter.ToKebabCase("iPhone"));
     Assert.AreEqual("i-phone", NameCaseConverter.ToKebabCase("IPhone"));
     Assert.AreEqual("i-phone", NameCaseConverter.ToKebabCase("I Phone"));
     Assert.AreEqual("i-phone", NameCaseConverter.ToKebabCase("I  Phone"));
     Assert.AreEqual("i-phone", NameCaseConverter.ToKebabCase(" IPhone"));
     Assert.AreEqual("i-phone", NameCaseConverter.ToKebabCase(" IPhone "));
     Assert.AreEqual("is-cia", NameCaseConverter.ToKebabCase("IsCIA"));
     Assert.AreEqual("vm-q", NameCaseConverter.ToKebabCase("VmQ"));
     Assert.AreEqual("xml2-json", NameCaseConverter.ToKebabCase("Xml2Json"));
     Assert.AreEqual("sn-ak-ec-as-e", NameCaseConverter.ToKebabCase("SnAkEcAsE"));
     Assert.AreEqual("sn-a--k-ec-as-e", NameCaseConverter.ToKebabCase("SnA--kEcAsE"));
     Assert.AreEqual("sn-a--k-ec-as-e", NameCaseConverter.ToKebabCase("SnA-- kEcAsE"));
     Assert.AreEqual("already-snake-case-", NameCaseConverter.ToKebabCase("already-snake-case- "));
     Assert.AreEqual("is-json-property", NameCaseConverter.ToKebabCase("IsJSONProperty"));
     Assert.AreEqual("shouting-case", NameCaseConverter.ToKebabCase("SHOUTING-CASE"));
     Assert.AreEqual("9999-12-31-t23:59:59.9999999-z", NameCaseConverter.ToKebabCase("9999-12-31T23:59:59.9999999Z"));
     Assert.AreEqual("hi!!-this-is-text.-time-to-test.", NameCaseConverter.ToKebabCase("Hi!! This is text. Time to test."));
 }
Beispiel #3
0
        public void Emit(string path, string name, EmittedFileType fileType, string contents)
        {
            string fileTypeName          = fileType.GetDescription();
            string fileTypeDirectoryName = MapFileTypeToDirectoryName(fileType);

            string directory = Path.Combine(path, fileTypeDirectoryName);

            // this will also ensure the root directory is created if it does not exist yet
            Directory.CreateDirectory(directory);

            string fileName = $"{NameCaseConverter.ToKebabCase(name)}.{fileTypeName}.{TypeScriptFileExtension.File}";

            File.WriteAllText(Path.Combine(directory, fileName), contents);
        }
Beispiel #4
0
        public void GenerateEnumAST(TypeScriptEnumModel enumModel, string outputPath)
        {
            var request = new EnumGenerationRequest();

            string fileName = $"{NameCaseConverter.ToKebabCase(enumModel.Name)}.enum.{TypeScriptFileExtension.File}";

            request.OutputPath = Path.Combine(outputPath, "enums", fileName);

            request.DataModel = new EnumModel()
            {
                Name    = enumModel.Name,
                Members = enumModel.Members.Select(m => new EnumMemberModel()
                {
                    Name  = m.Name,
                    Value = m.Value?.ToString()
                }).ToArray()
            };

            var result = CallGenerator("/generate/enum", CreateStringContent(request));
        }
Beispiel #5
0
        protected void GenerateImportDeclarations(List <TypeScriptImportModel> imports, StringBuilder sb)
        {
            if (imports.Count > 0)
            {
                foreach (var import in imports)
                {
                    import.FilePath = NameCaseConverter.ToKebabCase(import.Name);

                    sb.AppendLine("import { "
                                  + import.Name
                                  + " } from '"
                                  + (import.DependencyKind == DependencyKind.Model ? "./" : "../enums/")
                                  + import.FilePath
                                  + (import.DependencyKind == DependencyKind.Model ? ".model" : ".enum")
                                  + "';");
                }

                sb.AppendLine();
            }
        }
Beispiel #6
0
        public void GenerateValidatorAST(AngularFormValidatorModel validatorModel, string outputPath)
        {
            var request = new ClassGenerationRequest();

            string fileName = $"{NameCaseConverter.ToKebabCase(validatorModel.Name)}.validator.{TypeScriptFileExtension.File}";

            var typeGenerator = new TypeGenerator();

            request.OutputPath = Path.Combine(outputPath, "validators", fileName);

            var imports = new List <ImportModel>()
            {
                new ImportModel()
                {
                    Names = new string[] { "FormGroup, FormBuilder, Validators" }, Path = "@angular/forms"
                }
            };

            var specificImports = validatorModel.Imports.Select(i => new ImportModel()
            {
                Names = new string[] { i.Name },
                Path  = i.DependencyKind == DependencyKind.Model
                    ? $"../models/{NameCaseConverter.ToKebabCase(i.Name)}.model"
                    : $"../enums/{NameCaseConverter.ToKebabCase(i.Name)}.enum"
            }).ToList();

            imports.AddRange(specificImports);

            request.DataModel = new ClassModel()
            {
                Name           = validatorModel.Name + "Validator",
                BaseClass      = null,
                Decorators     = new string[] { },
                TypeParameters = new string[] { },
                Imports        = imports.ToArray(),
                Properties     = new PropertyModel[]
                {
                    new PropertyModel()
                    {
                        Name = "validationMessages", Type = null, IsPrivate = false, InitialValue = ""
                    }
                },
                ConstructorDef = new ConstructorModel()
                {
                    Parameters = new ParameterModel[]
                    {
                        new ParameterModel()
                        {
                            Name = "fb", Type = "FormBuilder", IsPrivate = false
                        }
                    }
                },
                Methods = new MethodModel[]
                {
                    new ValidatorBuilderMethodModel()
                    {
                    }
                }
            };

            var result = CallGenerator("/generate/class", CreateStringContent(request));
        }
Beispiel #7
0
        public void GenerateServiceAST(TypeScriptServiceModel serviceModel, string outputPath)
        {
            var request = new ClassGenerationRequest();

            string fileName = $"{NameCaseConverter.ToKebabCase(serviceModel.Name)}.service.{TypeScriptFileExtension.File}";

            var typeGenerator = new TypeGenerator();

            request.OutputPath = Path.Combine(outputPath, "services", fileName);

            var imports = new List <ImportModel>()
            {
                new ImportModel()
                {
                    Names = new string[] { "Injectable" }, Path = "@angular/core"
                },
                new ImportModel()
                {
                    Names = new string[] { "Http", "Headers", "Response" }, Path = "@angular/http"
                },
                new ImportModel()
                {
                    Names = new string[] { }, Path = "rxjs/add/operator/toPromise"
                }
            };

            var specificImports = serviceModel.Imports.Select(i => new ImportModel()
            {
                Names = new string[] { i.Name },
                Path  = i.DependencyKind == DependencyKind.Model
                    ? $"../models/{NameCaseConverter.ToKebabCase(i.Name)}.model"
                    : $"../enums/{NameCaseConverter.ToKebabCase(i.Name)}.enum"
            }).ToList();

            imports.AddRange(specificImports);

            request.DataModel = new ClassModel()
            {
                Name           = serviceModel.Name + "Service",
                BaseClass      = null,
                Decorators     = new string[] { "Injectable()" },
                TypeParameters = new string[] { },
                Imports        = imports.ToArray(),
                Properties     = new PropertyModel[]
                {
                    new PropertyModel()
                    {
                        Name = "baseUrl", Type = null, IsPrivate = true, InitialValue = serviceModel.RoutePrefix
                    }
                },
                ConstructorDef = new ConstructorModel()
                {
                    Parameters = new ParameterModel[]
                    {
                        new ParameterModel()
                        {
                            Name = "http", Type = "Http", IsPrivate = true
                        }
                    }
                },
                Methods = serviceModel.Methods.Select(m => new HttpMethodModel()
                {
                    Name       = NameCaseConverter.ToCamelCase(m.Name),
                    ReturnType = typeGenerator.GetEmittedType(m.ReturnType),
                    HttpMethod = m.HttpMethod,
                    Route      = m.Route,
                    Parameters = m.Parameters.Select(p => new ParameterModel()
                    {
                        Name      = p.Item2,
                        Type      = typeGenerator.GetEmittedType(p.Item1),
                        IsPrivate = false
                    }).ToArray()
                }).ToArray()
            };

            var result = CallGenerator("/generate/class", CreateStringContent(request));
        }