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