functions/public/Reset-GooSemVer.ps1
function Reset-GooSemVer { <# .SYNOPSIS Reset identifiers in a SemVer string. .DESCRIPTION This Cmdlet resets a specified identifier of a SemVer string. Tests if the given Version respects the Semantic Versioning guidelines, and throws an error if not. This Cmdlet accepts values from the pipeline. .PARAMETER Version Version that will get an identifier reseted .PARAMETER Identifier Which Identifier to reset Valid choices: Major, Minor, Patch, Prerelease, Buildmetadata .EXAMPLE --- Example 1 Error cases --- PS C:\> '1.2.-3' | Reset-GooSemVer Major The value 1.2.-3 is not following the SemVer guidelines. .EXAMPLE --- Example 2 Valid resets --- PS C:\> '1.2.3' | Reset-GooSemVer Major 0.2.3 PS C:\> '1.2.3' | Reset-GooSemVer Minor 1.0.3 PS C:\> '1.2.3' | Reset-GooSemVer Patch 1.2.0 PS C:\> '1.2.3-alpha' | Reset-GooSemVer Prerelease 1.2.3 PS C:\> '1.2.3-alpha.beta' | Reset-GooSemVer Prerelease 1.2.3-alpha PS C:\> '1.2.3-alpha.beta.1' | Reset-GooSemVer Prerelease 1.2.3-alpha.beta PS C:\> '1.2.3-alpha.beta.1' | Reset-GooSemVer Prerelease | Reset-GooSemVer Prerelease | Reset-GooSemVer Prerelease 1.2.3 .INPUTS System.String System.String .OUTPUTS System.String .NOTES For more information about Semantic Versioning 2.0.0, see this: https://semver.org/ #> [CmdletBinding()] [OutputType([string])] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [string] $Version, [Parameter(Mandatory = $true, Position = 0)] [ValidateSet('Major', 'Minor', 'Patch', 'Prerelease', 'Buildmetadata')] [string] $Identifier ) process { if (-not ($Version -match $Script:GooSemVer.Rex)) { throw $Script:GooSemVer.InvalidVersionFormatMessage -f $Version } if (-not ($Matches.ContainsKey($Identifier))) { return $Version } $versionTable = $Matches # Remove the full match $versionTable.Remove(0) if ($Identifier -in @('Major', 'Minor', 'Patch')) { $versionTable[$Identifier] = 0 return $versionTable | ConvertTo-GooSemVer } $value = $versionTable[$Identifier].Split('.') if (1 -eq $value.Count) { # 1.2.3-alpha -> 1.2.3 $versionTable.Remove($Identifier) } elseif (1 -lt $value.Count) { # 1.2.3-alpha.1 -> 1.2.3-alpha $value = $value[0..($value.Count - 2)] $versionTable[$Identifier] = $value -join '.' } return $versionTable | ConvertTo-GooSemVer } } |