public/functions/Remove-PowerStubDirectAlias.ps1

<#
.SYNOPSIS
    Removes a direct alias for a PowerStub stub.

.DESCRIPTION
    Removes a PowerShell function that was created as a shortcut for a specific stub.
    Also removes the alias from the saved configuration so it won't be recreated
    when the module loads.

.PARAMETER AliasName
    The name of the alias to remove.

.EXAMPLE
    Remove-PowerStubDirectAlias -AliasName dv

    Removes the 'dv' alias that was created for a stub.

.OUTPUTS
    None
#>


function Remove-PowerStubDirectAlias {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, Position = 0)]
        [string]$AliasName
    )

    Sync-PowerStubConfiguration

    # Check if the alias exists in our config
    $directAliases = Get-PowerStubConfigurationKey 'DirectAliases'
    if (-not $directAliases -or -not $directAliases.ContainsKey($AliasName)) {
        throw "Direct alias '$AliasName' not found in PowerStub configuration."
    }

    # Remove the global function if it exists
    $existingCmd = Get-Command $AliasName -ErrorAction SilentlyContinue
    if ($existingCmd -and $existingCmd.CommandType -eq 'Function') {
        Remove-Item "function:$AliasName" -ErrorAction SilentlyContinue
        Write-Verbose "Removed function '$AliasName'"
    }

    # Remove only this alias from config so other sessions' aliases are kept
    Update-PowerStubConfiguration {
        if ($Script:PSTBSettings['DirectAliases']) {
            $Script:PSTBSettings['DirectAliases'].Remove($AliasName)
        }
        $Script:PSTBSettings['ForcedDirectAliases'] = @($Script:PSTBSettings['ForcedDirectAliases'] | Where-Object { $_ -and $_ -ne $AliasName })
    }

    Write-Verbose "Removed direct alias '$AliasName' from configuration"
}