PSSemVer.psm1
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidLongLines', '', Justification = 'Contains long links.')] [CmdletBinding()] param() $scriptName = $MyInvocation.MyCommand.Name Write-Verbose "[$scriptName] Importing module" #region - Data import Write-Verbose "[$scriptName] - [data] - Processing folder" $dataFolder = (Join-Path $PSScriptRoot 'data') Write-Verbose "[$scriptName] - [data] - [$dataFolder]" Get-ChildItem -Path "$dataFolder" -Recurse -Force -Include '*.psd1' -ErrorAction SilentlyContinue | ForEach-Object { Write-Verbose "[$scriptName] - [data] - [$($_.Name)] - Importing" New-Variable -Name $_.BaseName -Value (Import-PowerShellDataFile -Path $_.FullName) -Force Write-Verbose "[$scriptName] - [data] - [$($_.Name)] - Done" } Write-Verbose "[$scriptName] - [data] - Done" #endregion - Data import #region - From /public Write-Verbose "[$scriptName] - [/public] - Processing folder" #region - From /public/ConvertTo-PSSemVer.ps1 Write-Verbose "[$scriptName] - [/public/ConvertTo-PSSemVer.ps1] - Importing" filter ConvertTo-PSSemVer { <# .SYNOPSIS Converts a version string to a PSSemVer object. .DESCRIPTION This function takes a version string and converts it to a PSSemVer object. .EXAMPLE '1.2.3-alpha.1+001' | ConvertTo-SemVer Major : 1 Minor : 2 Patch : 3 Prerelease : alpha.1 BuildMetadata : 001 .NOTES Compatible with [PSSemVer 2.0.0](https://PSSemVer.org/). #> [OutputType([PSSemVer])] [CmdletBinding()] param ( # The version to convert. [Parameter( Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName) ] [AllowNull()] [AllowEmptyString()] [string] $Version ) if ($Version | IsNullOrEmpty) { return New-PSSemVer } try { $PSSemVer = [PSSemVer]::new($Version) return $PSSemVer } catch { throw "Failed to convert '$Version' to PSSemVer." } } Write-Verbose "[$scriptName] - [/public/ConvertTo-PSSemVer.ps1] - Done" #endregion - From /public/ConvertTo-PSSemVer.ps1 #region - From /public/New-PSSemVer.ps1 Write-Verbose "[$scriptName] - [/public/New-PSSemVer.ps1] - Importing" function New-PSSemVer { <# .SYNOPSIS Creates a new PSSemVer object. .DESCRIPTION This function creates a new PSSemVer object. .EXAMPLE New-SemVer -Version '1.2.3-alpha.1+001' Major : 1 Minor : 2 Patch : 3 Prerelease : alpha.1 BuildMetadata : 001 .EXAMPLE New-SemVer -Major 1 -Minor 2 -Patch 3 -Prerelease 'alpha.1' -BuildMetadata '001' Major : 1 Minor : 2 Patch : 3 Prerelease : alpha.1 BuildMetadata : 001 .NOTES Compatible with [PSSemVer 2.0.0](https://PSSemVer.org/). #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute( 'PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Does not change system state, but creates a new object.' )] [OutputType([PSSemVer])] [CmdletBinding(DefaultParameterSetName = 'String')] param ( # The major version. [Parameter(ParameterSetName = 'Values')] [int] $Major = 0, # The minor version. [Parameter(ParameterSetName = 'Values')] [int] $Minor = 0, # The patch version. [Parameter(ParameterSetName = 'Values')] [int] $Patch = 0, # The prerelease version. [Parameter(ParameterSetName = 'Values')] [Alias('PreReleaseLabel')] [string] $Prerelease = '', # The build metadata. [Parameter(ParameterSetName = 'Values')] [Alias('Build', 'BuildLabel')] [string] $BuildMetadata = '', # The version as a string. [Parameter(ParameterSetName = 'String')] [string] $Version = '' ) switch ($PSCmdlet.ParameterSetName) { 'String' { return [PSSemVer]::New($Version) } 'Values' { return [PSSemVer]::New($Major, $Minor, $Patch, $Prerelease, $BuildMetadata) } } } Write-Verbose "[$scriptName] - [/public/New-PSSemVer.ps1] - Done" #endregion - From /public/New-PSSemVer.ps1 Write-Verbose "[$scriptName] - [/public] - Done" #endregion - From /public $exports = @{ Alias = '*' Variable = '' Function = @( 'ConvertTo-PSSemVer' 'New-PSSemVer' ) Cmdlet = '' } Export-ModuleMember @exports |