protected virtual void AppendModule(TsModule module, ScriptBuilder sb, TsGeneratorOutput generatorOutput) { List <TsClass> classesByName = module.Classes.Where(c => !_typeConvertors.IsConvertorRegistered(c.Type) && !c.IsIgnored).OrderBy(c => GetTypeName(c)).ToList(); List <TsClass> classes = SortByDependency(classesByName); var enums = module.Enums.Where(e => !_typeConvertors.IsConvertorRegistered(e.Type) && !e.IsIgnored).OrderBy(e => GetTypeName(e)).ToList(); if ((generatorOutput == TsGeneratorOutput.Enums && enums.Count == 0) || (generatorOutput == TsGeneratorOutput.Properties && classes.Count == 0) || (enums.Count == 0 && classes.Count == 0)) { return; } if (generatorOutput == TsGeneratorOutput.Constants && !classes.Any(c => c.Constants.Any())) { return; } var moduleName = GetModuleName(module); var generateModuleHeader = moduleName != string.Empty; if (generateModuleHeader) { if (generatorOutput != TsGeneratorOutput.Enums && (generatorOutput & TsGeneratorOutput.Constants) != TsGeneratorOutput.Constants) { sb.Append(Mode == TsGenerationModes.Definitions ? "declare " : " export "); } sb.AppendLine($"{(Mode == TsGenerationModes.Definitions ? "namespace" : "module")} {moduleName} {{"); using (sb.IncreaseIndentation()) { GenerateModuleContent(sb, generatorOutput, classes, enums); } sb.AppendLine("}"); } else { GenerateModuleContent(sb, generatorOutput, classes, enums); } }
protected virtual void AppendModule(TsModule module, ScriptBuilder sb, TsGeneratorOutput generatorOutput) { var classes = module.Classes.Where(c => !_typeConvertors.IsConvertorRegistered(c.Type) && !c.IsIgnored).OrderBy(c => GetTypeName(c)).ToList(); var baseClasses = classes .Where(c => c.BaseType != null) .Select(c => c.BaseType.Type.FullName) .Distinct() .OrderBy(c => c) .ToList(); var enums = module.Enums.Where(e => !_typeConvertors.IsConvertorRegistered(e.Type) && !e.IsIgnored).OrderBy(e => GetTypeName(e)).ToList(); if ((generatorOutput == TsGeneratorOutput.Enums && enums.Count == 0) || (generatorOutput == TsGeneratorOutput.Properties && classes.Count == 0) || (enums.Count == 0 && classes.Count == 0)) { return; } if (generatorOutput == TsGeneratorOutput.Properties && !classes.Any(c => c.Fields.Any() || c.Properties.Any())) { return; } if (generatorOutput == TsGeneratorOutput.Constants && !classes.Any(c => c.Constants.Any())) { return; } var moduleName = GetModuleName(module); var generateModuleHeader = moduleName != string.Empty; if (generateModuleHeader) { if (generatorOutput != TsGeneratorOutput.Enums && (generatorOutput & TsGeneratorOutput.Constants) != TsGeneratorOutput.Constants) { sb.Append(Mode == TsGenerationModes.Definitions ? "declare " : " export "); } sb.AppendLine($"{(Mode == TsGenerationModes.Definitions ? "namespace" : "module")} {moduleName} {{"); } using (sb.IncreaseIndentation()) { if ((generatorOutput & TsGeneratorOutput.Enums) == TsGeneratorOutput.Enums) { foreach (var enumModel in enums) { this.AppendEnumDefinition(enumModel, sb, generatorOutput); } } if (((generatorOutput & TsGeneratorOutput.Properties) == TsGeneratorOutput.Properties) || (generatorOutput & TsGeneratorOutput.Fields) == TsGeneratorOutput.Fields) { foreach (var baseClassModel in classes.Where(c => baseClasses.Contains(c.Type.FullName))) { this.AppendClassDefinition(baseClassModel, sb, generatorOutput); } } if (((generatorOutput & TsGeneratorOutput.Properties) == TsGeneratorOutput.Properties) || (generatorOutput & TsGeneratorOutput.Fields) == TsGeneratorOutput.Fields) { foreach (var classModel in classes.Where(c => !baseClasses.Contains(c.Type.FullName))) { this.AppendClassDefinition(classModel, sb, generatorOutput); } } if ((generatorOutput & TsGeneratorOutput.Constants) == TsGeneratorOutput.Constants) { foreach (var classModel in classes) { if (classModel.IsIgnored) { continue; } this.AppendConstantModule(classModel, sb); } } } if (generateModuleHeader) { sb.AppendLine("}"); } }