Private/WinGet/New-WinGetPackageMetadataFromTemplate.ps1

function New-WinGetPackageMetadataFromTemplate {
    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory)]
        [psobject]$Template
    )

    if (-not $Template.PSObject.Properties.Name.Contains('resolvedPackage') -or $null -eq $Template.resolvedPackage) {
        throw "Unsupported WinGet template '$($Template.templateId)'. Open an issue requesting this app or submit a PR that adds bundled resolvedPackage metadata."
    }

    $resolvedPackage = $Template.resolvedPackage
    $match = $Template.package.match
    $manifestSource = $resolvedPackage.manifestSource
    $selectedInstaller = $resolvedPackage.selectedInstaller

    if ($null -eq $manifestSource -or $null -eq $selectedInstaller) {
        throw "WinGet template '$($Template.templateId)' resolvedPackage metadata is incomplete."
    }

    $packageVersion = [string]$resolvedPackage.packageVersion
    $packagePath = [string]$manifestSource.packagePath
    $versionPath = [string]$manifestSource.versionPath
    $repository = [string]$manifestSource.repository

    return [PSCustomObject]@{
        PackageIdentifier = [string]$Template.packageIdentifier
        PackageVersion    = $packageVersion
        PackageLocale     = [string]$match.locale
        DisplayName       = [string]$Template.displayName
        Publisher         = [string]$Template.publisher
        Description       = [string]$Template.description
        LocaleManifest    = [PSCustomObject]@{
            PackageLocale    = [string]$match.locale
            PackageName      = [string]$Template.displayName
            Publisher        = [string]$Template.publisher
            ShortDescription = [string]$Template.description
            Icons            = @()
        }
        InstallerManifest = [PSCustomObject]@{
            PackageIdentifier = [string]$Template.packageIdentifier
            PackageVersion    = $packageVersion
            InstallerType     = $selectedInstaller.InstallerType
            Installers        = @($selectedInstaller)
        }
        VersionManifest   = [PSCustomObject]@{
            PackageIdentifier = [string]$Template.packageIdentifier
            PackageVersion    = $packageVersion
        }
        ManifestPath      = $versionPath
        ManifestSource    = [PSCustomObject]@{
            Type          = 'Template'
            Repository    = $repository
            Ref           = [string]$manifestSource.ref
            PackagePath   = $packagePath
            VersionPath   = $versionPath
            InstallerFile = if ($manifestSource.installerFile) { [string]$manifestSource.installerFile } else { $null }
            LocaleFile    = if ($manifestSource.localeFile) { [string]$manifestSource.localeFile } else { $null }
        }
        Installers        = @($selectedInstaller)
        SelectedInstaller = $selectedInstaller
    }
}