/// <summary> /// Generates class definition and appends it to the output. /// </summary> /// <param name="classModel">The class to generate definition for.</param> /// <param name="sb">The output.</param> /// <param name="generatorOutput"></param> protected virtual void AppendClassDefinition(TsClass classModel, ScriptBuilder sb, TsGeneratorOutput generatorOutput) { string typeName = this.GetTypeName(classModel); string visibility = this.GetTypeVisibility(classModel, typeName) ? "export " : ""; _docAppender.AppendClassDoc(sb, classModel, typeName); sb.AppendFormatIndented("{0}class {1}", visibility, typeName); if (classModel.BaseType != null) { sb.AppendFormat(" extends {0}", this.GetFullyQualifiedTypeName(classModel.BaseType)); } if (classModel.Interfaces.Count > 0) { var implementations = classModel.Interfaces.Select(GetFullyQualifiedTypeName).ToArray(); var prefixFormat = classModel.Type.IsInterface ? " extends {0}" : classModel.BaseType != null ? " , {0}" : " extends {0}"; sb.AppendFormat(prefixFormat, string.Join(" ,", implementations)); } sb.AppendLine(" {"); var members = new List <TsProperty>(); if ((generatorOutput & TsGeneratorOutput.Properties) == TsGeneratorOutput.Properties) { members.AddRange(classModel.Properties); } if ((generatorOutput & TsGeneratorOutput.Fields) == TsGeneratorOutput.Fields) { members.AddRange(classModel.Fields); } using (sb.IncreaseIndentation()) { foreach (var property in members) { if (property.IsIgnored) { continue; } _docAppender.AppendPropertyDoc(sb, property, this.GetPropertyName(property), this.GetPropertyType(property)); sb.AppendLineIndented(string.Format("{0}: {1};", this.GetPropertyName(property), this.GetPropertyType(property))); } } sb.AppendLineIndented("}"); _generatedClasses.Add(classModel); }
/// <summary> /// Generates class definition and appends it to the output. /// </summary> /// <param name="classModel">The class to generate definition for.</param> /// <param name="sb">The output.</param> /// <param name="generatorOutput"></param> protected virtual void AppendClassDefinition(TsClass classModel, IndentedStringBuilder sb, TsGeneratorOutput generatorOutput) { var typeName = GetTypeName(classModel); var visibility = GetTypeVisibility(classModel, typeName) ? "export " : ""; DocAppender.AppendClassDoc(sb, classModel, typeName); sb.Append(string.Format("{0}interface {1}", visibility, typeName)); if (classModel.BaseType != null) { sb.Append(string.Format(" extends {0}", GetFullyQualifiedTypeName(classModel.BaseType))); } if (classModel.Interfaces.Count > 0) { var implementations = classModel.Interfaces.Select(GetFullyQualifiedTypeName).ToArray(); var prefixFormat = classModel.Type.GetTypeInfo().IsInterface ? " extends {0}" : classModel.BaseType != null ? " , {0}" : " extends {0}"; sb.Append(string.Format(prefixFormat, string.Join(" ,", implementations))); } sb.AppendLine(" {"); var members = new List <TsProperty>(); if ((generatorOutput & TsGeneratorOutput.Properties) == TsGeneratorOutput.Properties) { members.AddRange(classModel.Properties); } if ((generatorOutput & TsGeneratorOutput.Fields) == TsGeneratorOutput.Fields) { members.AddRange(classModel.Fields); } using (sb.Indent()) { foreach (var property in members.Where(p => !p.IsIgnored).OrderBy(GetPropertyName)) { DocAppender.AppendPropertyDoc(sb, property, GetPropertyName(property), GetPropertyType(property)); sb.AppendLine(string.Format("{0}: {1};", GetPropertyName(property), GetPropertyType(property))); } } sb.AppendLine("}"); GeneratedClasses.Add(classModel); }