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)); }
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()); }