Public/Invoke-DevVmActivate.ps1

<#
.SYNOPSIS
Activates versions from .devvm configuration files.
 
.DESCRIPTION
Reads merged .devvm configuration (global + project) and activates all configured runtimes.
This is useful to call in your PowerShell profile to auto-activate versions when you open a terminal.
 
.PARAMETER Runtime
If specified, only activates this specific runtime. Otherwise activates all configured runtimes.
 
.PARAMETER Verify
If specified, verifies each runtime command executes after activation by displaying its version output.
Default is $false (no verification).
 
.EXAMPLE
Invoke-DevVmActivate
Invoke-DevVmActivate -Runtime node
Invoke-DevVmActivate -Verify
 
#>

function Invoke-DevVmActivate {
    [CmdletBinding()]
    param (
        [string]$Runtime,
        [switch]$Verify = $false
    )

    $merged = Get-DevVmMergedConfig -StartPath (Get-Location).Path

    if (-not $merged -or $merged.Count -eq 0) {
        Write-Verbose "No runtimes configured in .devvm files"
        return
    }

    foreach ($rt in $merged.Keys) {
        # Skip if specific runtime requested and this isn't it
        if ($Runtime -and $rt -ne $Runtime) {
            continue
        }

        $version = $merged[$rt]

        if ([string]::IsNullOrWhiteSpace($version)) {
            Write-Verbose "No version configured for $rt"
            continue
        }

        try {
            Set-DevVmVersion -Runtime $rt -Version $version -Persist session -Verify:$Verify -ErrorAction Stop
        }
        catch {
            Write-Warning "Failed to activate $rt version $version : $_"
        }
    }
}