private List <TypescriptNamespace> OrganizeSubnamespaces( List <ITypescriptObject> typescriptObjects, string commonTranslatedPrefix = null) { IEnumerable <ITypescriptObject> matchingTypes = typescriptObjects; if (commonTranslatedPrefix != null) { matchingTypes = matchingTypes.Where(x => x.TranslatedNamespace.StartsWith(commonTranslatedPrefix)); } var distinctTranslatedNamespaceNames = matchingTypes .Select(x => commonTranslatedPrefix != null ? x.TranslatedNamespace.RemovePrefix(commonTranslatedPrefix) : x.TranslatedNamespace) .Select(x => x.Split('.')[0]) .Distinct(); var namespaces = new List <TypescriptNamespace>(); foreach (var translatedName in distinctTranslatedNamespaceNames) { var translatedFullName = commonTranslatedPrefix + translatedName; var matchingSettings = settings.NamespaceSettings .Where(x => translatedFullName.StartsWith(x.Translation)) .OrderByDescending(x => x.Translation.Length) .FirstOrDefault(); var namespaceTypes = typescriptObjects.Where(x => x.TranslatedNamespace == translatedFullName).ToList(); var subNamespaceTypes = typescriptObjects .Where(x => x.TranslatedNamespace.StartsWith(translatedFullName + ".")) .ToList(); var subNamespaces = OrganizeSubnamespaces(subNamespaceTypes, translatedFullName + "."); if (namespaceTypes.Count == 0 && subNamespaces.Count == 0) { continue; } var typescriptNamespace = new TypescriptNamespace( translatedName, translatedFullName, settings.Modifiers, namespaceTypes, subNamespaces, matchingSettings?.Filename); namespaces.Add(typescriptNamespace); } return(namespaces); }
public string Format(TypescriptNamespace typescriptNamespace) { var modifiers = typescriptNamespace.Modifiers.Any() ? string.Join(" ", typescriptNamespace.Modifiers) + " " : ""; var formattedTypes = typescriptNamespace.Types .Select(FormatType) .Select(Indent); var subNamespaces = typescriptNamespace.SubNamespaces .Select(Format) .Select(Indent); return($@"{modifiers}namespace {typescriptNamespace.TranslatedName} {{ {string.Join(Environment.NewLine + Environment.NewLine, formattedTypes.Concat(subNamespaces))} }}"); }