Private/Init.psm1
|
$global:ForgeCommands = (Import-PowerShellDataFile "$PSScriptRoot/../ForgeCli.psd1").FunctionsToExport $global:ForgeProviders = @{ 'github' = @{ Module = 'GithubCli' Prefix = 'Github' HostPatterns = @('github') Resource = @{ 'Branch' = 'Branch' 'ChangeRequest' = 'PullRequest' 'ChangeRequestComment' = 'PullRequestComment' 'Commit' = 'Commit' 'Group' = 'Organization' 'GroupMember' = 'OrganizationMember' 'Issue' = 'Issue' 'IssueComment' = 'IssueComment' 'Milestone' = 'Milestone' 'Release' = 'Release' 'Repo' = 'Repository' 'User' = 'User' } } 'gitlab' = @{ Module = 'GitlabCli' Prefix = 'Gitlab' HostPatterns = @('gitlab') Resource = @{ 'Branch' = 'Branch' 'ChangeRequest' = 'MergeRequest' 'ChangeRequestComment' = 'MergeRequestNote' 'Commit' = 'Commit' 'Group' = 'Group' 'GroupMember' = 'GroupMember' 'Issue' = 'Issue' 'IssueComment' = 'IssueNote' 'Milestone' = 'Milestone' 'Release' = 'Release' 'Repo' = 'Project' 'User' = 'User' } } } foreach ($Key in $global:ForgeProviders.Keys) { $Provider = $global:ForgeProviders[$Key] $Commands = @{} foreach ($ForgeCommand in $global:ForgeCommands) { $Verb, $Noun = $ForgeCommand -split '-', 2 $MappedNoun = $Provider.Resource[$Noun] if (-not $MappedNoun) { throw "Forge command '$ForgeCommand' uses noun '$Noun' which is not mapped in the '$Key' provider. Add it to the Resource table in Init.psm1." } $Commands[$ForgeCommand] = "$Verb-$($Provider.Prefix)$MappedNoun" } $Provider.Commands = $Commands } # Probe for installed provider modules and import them. # Providers whose modules are not installed are removed from the registry. foreach ($Key in @($global:ForgeProviders.Keys)) { $Provider = $global:ForgeProviders[$Key] $Module = $Provider.Module if (Get-Module -Name $Module) { Write-Verbose "Forge: provider '$Key' already loaded ($Module)" } elseif (Get-Module -ListAvailable -Name $Module) { Write-Verbose "Forge: loading provider '$Key' ($Module)" Import-Module $Module } else { Write-Verbose "Forge: provider '$Key' not available ($Module not installed)" $global:ForgeProviders.Remove($Key) } } Write-Verbose "Forge: $(($global:ForgeProviders.Keys) -join ', ') provider(s) registered" |