Private/Repository/Get-CgrRepository.ps1

function Get-CgrRepository {
    [CmdletBinding()]
    param(
        [ValidatePattern('^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$')]
        [string] $Repository,

        [string] $Owner,

        [string] $Name,

        [ValidateSet('public', 'private', 'internal')]
        [string] $Visibility,

        [Nullable[bool]] $Archived,

        [ValidateNotNullOrEmpty()]
        [string] $HostName = 'github.com'
    )

    if ($Repository) {
        $normalizedRepository = ConvertTo-CgrRepositoryName -Repository $Repository
        $path = "repos/$normalizedRepository"
        return Get-CgrGitHubApi -Path $path -HostName $HostName |
            ConvertTo-CgrRepository -HostName $HostName
    }

    $path = 'user/repos?per_page=100&affiliation=owner,collaborator,organization_member&sort=updated'
    $repositories = Get-CgrGitHubApi -Path $path -HostName $HostName -Paginate |
        ConvertTo-CgrRepository -HostName $HostName

    if ($Owner) {
        $repositories = $repositories | Where-Object { $_.Owner -eq $Owner }
    }

    if ($Name) {
        $namePattern = "*$Name*"
        $repositories = $repositories | Where-Object { $_.Name -like $namePattern -or $_.FullName -like $namePattern }
    }

    if ($Visibility) {
        $repositories = $repositories | Where-Object { $_.Visibility -eq $Visibility }
    }

    if ($PSBoundParameters.ContainsKey('Archived')) {
        $repositories = $repositories | Where-Object { $_.IsArchived -eq $Archived }
    }

    return @($repositories)
}