KubePrompt.psm1

#Region '.\Private\KubeInfo.ps1' 0
Set-StrictMode -Version 2

function Test-KubeBinaries {
    try {
        [bool](Get-Command -Name 'kubectx') -and [bool](Get-Command -Name 'kubens')
    }
    catch {
        $PSCmdlet.ThrowTerminatingError($_)
    }
}

function Get-KubeContext {
    try {
        kubectx --current
    }
    catch {
        $PSCmdlet.ThrowTerminatingError($_)
    }
}

function Get-KubeNamespace {
    try {
        kubens --current
    }
    catch {
        $PSCmdlet.ThrowTerminatingError($_)
    }
}
#EndRegion '.\Private\KubeInfo.ps1' 28
#Region '.\Private\Prompt.ps1' 0

function Write-ToHost {
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        $Text,
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        $ForegroundColor
    )

    try {
        $params = @{
            Object = $Text
            NoNewLine = $true
        }

        if ($PSBoundParameters.ContainsKey('ForegroundColor')) {
            $params.ForegroundColor = $ForegroundColor
        }

        Write-Host @params
    }
    catch {
        $PSCmdlet.ThrowTerminatingError($_)
    }
}
#EndRegion '.\Private\Prompt.ps1' 27
#Region '.\Public\Write-KubePrompt.ps1' 0
$global:KubePromptSettings = @{
    DefaultColors = @{
        SymbolColor = [ConsoleColor]::DarkBlue
        ContextColor = [ConsoleColor]::DarkRed
        NamespaceColor = [ConsoleColor]::DarkCyan
    }
    Prefix = '['
    Suffix = ']'
    Symbol = @{
        Enabled = $true
        Value = 0x2388
    }
    Divider = ':'
    Separator = '|'
}


function Write-KubePrompt {
    [CmdletBinding(DefaultParameterSetName = 'Default')]
    param(
        [Parameter(ParameterSetName = 'Default')]
        [Parameter(ParameterSetName = 'EnableSymbol')]
        [ValidateNotNullOrEmpty()]
        $ContextColor,

        [Parameter(ParameterSetName = 'Default')]
        [Parameter(ParameterSetName = 'EnableSymbol')]
        [ValidateNotNullOrEmpty()]
        $NamespaceColor,

        [Parameter(ParameterSetName = 'EnableSymbol')]
        [ValidateNotNullOrEmpty()]
        $Symbol,

        [Parameter(ParameterSetName = 'EnableSymbol')]
        [ValidateNotNullOrEmpty()]
        $SymbolColor,

        [Parameter(ParameterSetName = 'DisableSymbol')]
        [switch]
        $DisableSymbol
    )

    try {
        $settings = $KubePromptSettings

        $ctxColor = $settings.DefaultColors.ContextColor
        $nsColor = $settings.DefaultColors.NamespaceColor
        $symColor = $settings.DefaultColors.SymbolColor
        $sym = $settings.Symbol.Value
        $noSymbol = -not $settings.Symbol.Enabled

        if ($ContextColor) {
            $ctxColor = $ContextColor
        }

        if ($NamespaceColor) {
            $nsColor = $NamespaceColor
        }

        if ($SymbolColor) {
            $symColor = $SymbolColor
        }

        if ($Symbol) {
            $sym = $Symbol
        }

        if ($DisableSymbol) {
            $noSymbol = $DisableSymbol
        }

        Write-ToHost -Text $settings.Prefix

        if (-not $noSymbol) {
            Write-ToHost -Text ("$([char]$sym) ") -ForegroundColor $symColor
            Write-ToHost -Text $settings.Separator
        }

        Write-ToHost -Text (Get-KubeContext) -ForegroundColor $ctxColor

        Write-ToHost -Text $settings.Divider

        Write-ToHost -Text (Get-KubeNamespace) -ForegroundColor $nsColor

        Write-ToHost -Text $settings.Suffix
    }
    catch {
        $PSCmdlet.ThrowTerminatingError($_)
    }
}
#EndRegion '.\Public\Write-KubePrompt.ps1' 91