Tools/Build-AliasList.ps1

#requires -Version 5.1
<#
.SYNOPSIS
    Prints the sorted, unique union of every alias the module actually creates at runtime,
    ready to paste into VSAModule.psd1's AliasesToExport (F-03, F-04, F-06).
.DESCRIPTION
    Collects aliases from two sources:
    1. The keys of $URISuffixGetMap, $URISuffixGetByIdMap, $URISuffixRemoveMap (module-scope
       hashtables in VSAModule.psm1 that back the dynamically created Get-VSAItem/
       Get-VSAItemById/Remove-VSAItem aliases).
    2. Every literal -Name argument passed to New-Alias/Set-Alias in public/*.ps1.
.OUTPUTS
    One quoted, sorted, de-duplicated alias name per line to the pipeline.
#>

[CmdletBinding()]
param()
$ErrorActionPreference = 'Stop'

$moduleRoot = Split-Path -Parent $PSScriptRoot
$manifestPath = Join-Path $moduleRoot 'VSAModule.psd1'

Import-Module $manifestPath -Force
$module = Get-Module -Name VSAModule
if (-not $module) { throw "Build-AliasList: VSAModule did not import." }

# Source 1: the three URI-suffix map keys, read from the module's own script scope.
$mapAliases = & $module {
    @($URISuffixGetMap.Keys) + @($URISuffixGetByIdMap.Keys) + @($URISuffixRemoveMap.Keys)
}

# Source 2: every -Name argument of New-Alias/Set-Alias declared in public/*.ps1.
$staticAliases = foreach ($file in Get-ChildItem -Path (Join-Path $moduleRoot 'public') -Filter '*.ps1' -File) {
    $content = Get-Content -LiteralPath $file.FullName -Raw
    foreach ($match in [regex]::Matches($content, '-Name\s+([A-Za-z][\w-]+)')) {
        $match.Groups[1].Value
    }
}

$allAliases = @($mapAliases) + @($staticAliases) | Sort-Object -Unique

foreach ($name in $allAliases) {
    " '$name'"
}