private ResourceTypeChangeLog GetChangesForResourceType()

in src/TemplateRefGenerator/Generators/ChangelogGenerator.cs [56:88]


    private ResourceTypeChangeLog GetChangesForResourceType(string typeName, IReadOnlyList<string> apiVersions)
    {
        List<VersionedChangeLog> versionChanges = new();
        var apiVersionsOrdered = apiVersions.OrderBy(x => x, ApiVersionComparer.Instance).ToImmutableArray();
        for (var i = 0; i < apiVersionsOrdered.Length; i++)
        {
            var prevVersion = i > 0 ? apiVersionsOrdered[i - 1] : null;
            ResourceType? prevType = null;
            var newVersion = apiVersionsOrdered[i];

            var prevNamedTypes = ImmutableDictionary<string, TypeBase>.Empty;
            if (prevVersion is {})
            {
                prevType = typeProvider.Get(typeName, prevVersion);
                prevNamedTypes = GetNamedTypes(prevType);
            }

            var newType = typeProvider.Get(typeName, newVersion);
            var newNameTypes = GetNamedTypes(newType);

            var allNames = newNameTypes.Keys.Union(prevNamedTypes.Keys, StringComparer.OrdinalIgnoreCase).Distinct(StringComparer.OrdinalIgnoreCase);
            var changes = allNames
                .Select(x => new NamedTypeChangeLog(
                    x,
                    prevNamedTypes.TryGetValue(x, out var before) ? before : null,
                    newNameTypes.TryGetValue(x, out var after) ? after : null))
                .ToImmutableArray();

            versionChanges.Add(new(newVersion, prevType, newType, changes));
        }

        return new(typeName, [.. versionChanges]);
    }