psturtle.com/filters.ps1
# Filters are PowerShell functions designed to quickly process pipeline input. # This file contains filters that are useful throughout the build. #region PowerShell Specific Filters filter RequireModule { <# .SYNOPSIS Installs a module if it is not already loaded. .DESCRIPTION Installs a PowerShell module if it is not already loaded. #> $requirementName = $_ if ($requirementName -is [Management.Automation.ExternalScriptInfo]) { $requirementName.ScriptBlock.Ast.ScriptRequirements.RequiredModules.Name | RequireModule return } if (! $requirementName) { return } $alreadyLoaded = Import-Module -Name $requirementName -PassThru -ErrorAction Ignore -Global # If they're not already loaded, we'll install them. if (-not $alreadyLoaded) { Install-Module -AllowClobber -Force -Name $requirementName -Scope CurrentUser $alreadyLoaded = Import-Module -Name $requirementName -PassThru -ErrorAction Ignore -Global if ($file.FullName) { Write-Host "Installed $($alreadyLoaded.Name) for $($file.FullName)" } } elseif ($file.FullName) { Write-Host "Already loaded $($alreadyLoaded.Name) for $($file.FullName)" } } #endregion PowerShell Specific Filters #region Special Filters filter content {$Content} filter now {[DateTime]::Now} filter utc_now {[DateTime]::UtcNow} filter today {[DateTime]::Today} filter yaml_header_pattern { [Regex]::new(' (?<Markdown_YAMLHeader> (?m)\A\-{3,} # At least 3 dashes mark the start of the YAML header (?<YAML>(?:.|\s){0,}?(?=\z|\-{3,} # And anything until at least three dashes is the content ))\-{3,} # Include the dashes in the match, so that the pointer is correct. ) ','IgnoreCase, IgnorePatternWhitespace') } filter yaml_header { $in = $_ if ($in -is [IO.FileInfo]) { $in | Get-Content -Raw | yaml_header return } foreach ($match in (yaml_header_pattern).Matches("$in")) { $match.Groups['YAML'].Value | from_yaml } } filter from_yaml { $in = $_ "YaYaml" | RequireModule $in | ConvertFrom-Yaml } filter to_yaml { $in = $_ "YaYaml" | RequireModule $in | ConvertTo-Yaml } filter to_json { $in = $_ $in | ConvertTo-Json -Depth 10 } filter strip_yaml_header { $in = $_ if ($in -is [IO.FileInfo]) { $in | Get-Content -Raw | strip_yaml_header return } $in -replace (yaml_header_pattern) } filter from_markdown { $in = $_ if ($in -is [IO.FileInfo]) { $in | Get-Content -Raw | from_markdown return } @( $in | strip_yaml_header | ConvertFrom-Markdown | Select-Object -ExpandProperty Html ) -replace 'disabled="disabled"' } #endregion Special Filters #region Custom Filters <# Put any function or filter you want here. (if you want to add more filters inline but don't want to modify any of the other filters) #> #endregion Custom Filters |