plugins/bob/public/Resolve-JaxRunConfigFile.ps1

function Resolve-JaxRunConfigFile {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string] $EnvDir,
        [System.Collections.IDictionary] $Config,
        [System.Collections.IDictionary] $PluginConfig
    )

    if (-not (Test-Path -Path $EnvDir -PathType Container)) {
        return $null
    }

    $pluginDefaults = Get-JaxBobPluginDefaults
    $pluginConfig = Get-JaxBobPluginConfig -PluginConfig $PluginConfig

    $fileNames = @()
    if ($pluginConfig.Keys -contains 'fileNames') {
        $fileNames = @($pluginConfig['fileNames'])
    }
    if ($fileNames.Count -eq 0) {
        $baseNames = @($pluginConfig['fileBaseNames'])
        if ($baseNames.Count -eq 0) {
            $baseNames = @($pluginDefaults['fileBaseNames'])
        }
        $extensions = @($pluginConfig['fileExtensions'])
        if ($extensions.Count -eq 0) {
            $extensions = @($pluginDefaults['fileExtensions'])
        }
        foreach ($baseName in $baseNames) {
            foreach ($ext in $extensions) {
                $trimmedExt = $ext.TrimStart('.')
                $fileNames += "$baseName.$trimmedExt"
            }
        }
    }

    foreach ($fileName in $fileNames) {
        if ([string]::IsNullOrWhiteSpace($fileName)) {
            continue
        }
        $candidate = Join-Path $EnvDir $fileName
        if (Test-Path -Path $candidate -PathType Leaf) {
            return (Resolve-Path $candidate).Path
        }
    }

    return $null
}