Example #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));
        }
Example #2
0
        public string GenerateClass(TypeScriptClassModel classModel, bool includeHeader = true)
        {
            var sb = new StringBuilder();

            if (includeHeader)
            {
                sb.Append(AutogeneratedHeader_Compact());
            }

            var typeGenerator = new TypeGenerator();

            // imports
            GenerateImportDeclarations(classModel.Imports, sb);

            // class declaration
            sb.AppendLine("export class "
                          + classModel.Name
                          + (classModel.IsGeneric ? $"<{GenerateTypeParameters(classModel.TypeParameters)}>" : "")
                          + (string.IsNullOrEmpty(classModel.BaseClass) ? "" : " extends " + classModel.BaseClass)
                          + " {");

            // properties
            foreach (var property in classModel.Properties)
            {
                var emittedType = typeGenerator.GetEmittedType(property.Type);

                sb.AppendLine("\t"                                           // indentation
                              + NameCaseConverter.ToCamelCase(property.Name) // property name
                              + (property.IsOptional ? "?" : "")             // optional?
                              + ": "
                              + emittedType                                  // property type
                              + ";");
            }

            sb.AppendLine("}");
            // sb.AppendLine();

            return(sb.ToString());
        }