Private/Interactive/Get-TBResourceTypeRegistry.ps1

function Get-TBResourceTypeRegistry {
    <#
    .SYNOPSIS
        Returns supported UTCM resource types grouped by workload.
    .DESCRIPTION
        Builds the registry from the tracked UTCM catalog so interactive menus
        and validation all use the same canonical source.
    #>

    [CmdletBinding()]
    [OutputType([hashtable])]
    param()

    $catalog = Get-TBUTCMCatalog

    $registry = @{}
    foreach ($resource in $catalog.Resources) {
        $workloadName = $resource.WorkloadDisplayName
        if (-not $registry.ContainsKey($workloadName)) {
            $registry[$workloadName] = @{
                WorkloadId    = $resource.WorkloadId
                ResourceTypes = @()
            }
        }

        $displayName = if ($resource.DisplayName) {
            $resource.DisplayName
        }
        else {
            $resource.ShortName
        }

        $registry[$workloadName].ResourceTypes += @{
            Name        = $resource.Name
            DisplayName = $displayName
            ShortName   = $resource.ShortName
            Provider    = $resource.Provider
        }
    }

    foreach ($workload in $registry.Keys) {
        $registry[$workload].ResourceTypes = @($registry[$workload].ResourceTypes | Sort-Object -Property Name)
    }

    return $registry
}