core/private/Get-JaxScriptSearchPaths.ps1

function Get-JaxScriptSearchPaths {
    [CmdletBinding()]
    param (
        [string] $RepoRoot,
        [System.Collections.IDictionary] $Config,
        [string] $EnvDir,
        [switch] $SkipEnvRoot
    )

    $commonParams = Get-JaxCommonParameters -BoundParameters $PSBoundParameters
    Write-Debug "FUNC: $($MyInvocation.MyCommand.Name) Args: $($PSBoundParameters | ConvertTo-Json -Depth 1 -Compress -WarningAction SilentlyContinue)"

    $paths = @()
    $seen = @{}
    $hierarchy = Get-JaxEnvHierarchyPaths -RepoRoot $RepoRoot -Config $Config -EnvDir $EnvDir -SkipEnvRoot:$SkipEnvRoot @commonParams
    $dirNames = @('scripts')
    if ($Config.scripts -and $Config.scripts.dirNames) {
        $dirNames = @($Config.scripts.dirNames)
    }

    foreach ($basePath in $hierarchy) {
        foreach ($dirName in $dirNames) {
            if ([string]::IsNullOrWhiteSpace($dirName)) {
                continue
            }
            $candidate = Join-Path $basePath $dirName
            if (-not $seen.ContainsKey($candidate)) {
                $paths += [ordered]@{
                    Path          = $candidate
                    DirectoryType = 'conventional'
                }
                $seen[$candidate] = $true
            }
        }
    }

    if ($Config.scripts -and $Config.scripts.nonConventionalDirs) {
        foreach ($dir in @($Config.scripts.nonConventionalDirs)) {
            if ([string]::IsNullOrWhiteSpace($dir)) {
                continue
            }
            $resolved = Resolve-JaxRepoRootedPath -Path $dir -RepoRoot $RepoRoot @commonParams
            if (-not $seen.ContainsKey($resolved)) {
                $paths += [ordered]@{
                    Path          = $resolved
                    DirectoryType = 'nonConventional'
                }
                $seen[$resolved] = $true
            }
        }
    }

    return @($paths)
}