Private/Resolve-DFPackageManager.ps1

#Requires -Version 7.0

$script:DFPackageManagers = $null

function script:Resolve-DFPackageManager {
    <#
    .SYNOPSIS
        Detects which package managers are available on PATH.
        Returns names in priority order. Result is cached; use -Force to reload.
    .PARAMETER Priority
        Ordered list of package manager names to check.
        Defaults to scoop, winget, choco.
    .PARAMETER Force
        Clear cache and re-detect.
    #>

    [CmdletBinding()]
    [OutputType([string[]])]
    param(
        [string[]]$Priority = @('scoop', 'winget', 'choco'),
        [switch]$Force
    )

    if ($script:DFPackageManagers -and -not $Force) { return $script:DFPackageManagers }

    $available = $Priority | Where-Object { Get-Command $_ -ErrorAction Ignore }
    $script:DFPackageManagers = @($available)
    return $script:DFPackageManagers
}