Skip to content

Commit

Permalink
Merge pull request #23 from StartAutomating/Splatter-Action
Browse files Browse the repository at this point in the history
Splatter 0.5.5
  • Loading branch information
StartAutomating authored May 16, 2023
2 parents b866d46 + 8bcb4a9 commit ab91940
Show file tree
Hide file tree
Showing 18 changed files with 1,521 additions and 151 deletions.
1 change: 1 addition & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
github: [StartAutomating]
4 changes: 4 additions & 0 deletions .github/workflows/TestBuildAndPublish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -589,4 +589,8 @@ jobs:
- name: Run HelpOut
uses: StartAutomating/HelpOut@master
id: HelpOut
- name: Run Splatter (on branch)
if: ${{github.ref_name != 'main'}}
uses: ./
id: SplatterBranch

77 changes: 77 additions & 0 deletions @.min.gzip.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#region Splatter [ 0.5.5 ] : Simple Scripts to Supercharge Splatting (Install-Module Splatter, then Initialize-Splatter -Verb Get,Use,Find -Compress -Minify )
.([ScriptBlock]::Create(([IO.StreamReader]::new((
[IO.Compression.GZipStream]::new([IO.MemoryStream]::new(
[Convert]::FromBase64String('
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
ravatNDe3J+li/dS/gZtiOV/AdDBNlK4UQAA
')),
[IO.Compression.CompressionMode]'Decompress')),
[Text.Encoding]::unicode)).ReadToEnd()
))
#endregion Splatter [ 0.5.5 ] : Simple Scripts to Supercharge Splatting (Install-Module Splatter, then Initialize-Splatter -Verb Get,Use,Find -Compress -Minify )
17 changes: 17 additions & 0 deletions @.min.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#region Splatter [ 0.5.5 ] : Simple Scripts to Supercharge Splatting (Install-Module Splatter, then Initialize-Splatter -Verb Get,Use,Find -Minify )

[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseDeclaredVarsMoreThanAssignments", "", Justification="This Declares Variables for Other Scripts")]
param()
${?@}=${GetSplat}=${gSplat}={[Alias('?@','gSplat')]param([Parameter(Mandatory=$true,Position=0)][PSObject[]]$Command,[Parameter(Mandatory=$true,ValueFromPipeline=$true,Position=1)][Alias('InputObject')][PSObject]$Splat,[switch]$Force)begin{if(-not ${script:_@p}){${script:_@p}=@{}};if(-not ${script:_@c}){${script:_@c}=@{}};if(-not ${script:_@mp}){${script:_@mp}=@{}};if(-not ${script:_@pp}){${script:_@pp}=@{}};$ValidateAttributes={param([Parameter(Mandatory)]$value,[Parameter(Mandatory)]$attributes)foreach($attr in $attributes){$_=$this=$value;if($attr-is[Management.Automation.ValidateScriptAttribute]){$result=. $attr.ScriptBlock;if($result-ne$true){$attr}}elseif($attr-is[Management.Automation.ValidatePatternAttribute]-and(-not [Regex]::new($attr.RegexPattern, $attr.Options, '00:00:05').IsMatch($value))){$attr}elseif($attr-is[Management.Automation.ValidateSetAttribute]-and$attr.ValidValues-notcontains$value){$attr}elseif($attr-is[Management.Automation.ValidateRangeAttribute]-and(($value-gt$attr.MaxRange)-or($value-lt$attr.MinRange))){$attr}}}}process{$ap,$ac,$amp=${script:_@p},${script:_@c},${script:_@mp};if($Splat-is[Collections.IDictionary]){$splat=[PSCustomObject]([Ordered]@{} + $Splat)};$in=$Splat;foreach($cmd in $Command){$rc=if($ac.$cmd){$ac.$cmd}elseif($cmd-is[string]){$fc=$ExecutionContext.SessionState.InvokeCommand.GetCommand($cmd,'Function,Cmdlet,ExternalScript,Alias');$fc=if($fc-is[Management.Automation.AliasInfo]){$fc.ResolvedCommand}else{$fc};$ac.$cmd=$fc;$fc}elseif($cmd-is[ScriptBlock]){$hc=$cmd.GetHashCode();$ExecutionContext.SessionState.PSVariable.Set("function:f$hc", $cmd);$c=$ExecutionContext.SessionState.InvokeCommand.GetCommand("f$hc",'Function');$ac.$cmd=$c;$c}elseif($cmd-is[Management.Automation.CommandInfo]){$ac.$cmd=$cmd;$cmd};if(-not $rc){continue};$cmd=$rc;$outSplat,$Invalid,$Unmapped,$paramMap,$Pipe,$NoPipe=foreach($_ in 1..6){[ordered]@{}};$params=[Collections.ArrayList]::new();$props=@($in.psobject.properties);$pc=$props.Count;if(-not ${script:_@pp}.$cmd){${script:_@pp}.$cmd=@(foreach($param in $cmd.Parameters.Values){foreach($attr in $param.Attributes){if($attr.ValueFromPipeline){$param}}})};$cmdMd=$cmd-as[Management.Automation.CommandMetaData];$problems=@(foreach($vfp in ${script:_@pp}.$cmd){if($in-is$vfp.ParameterType-or($vfp.ParameterType.IsArray-and$in-as$vfp.ParameterType)){$v=$in;$badAttributes=& $ValidateAttributes $v $vfp.Attributes;if($badAttributes){@{$vfp.Name=$badAttributes}};if(-not $badAttributes-or$Force){$null=$params.Add($vfp.Name);$pipe[$vfp.Name]=$v;$outSplat[$vfp.Name]=$v;$paramMap[$vfp.Name]=$vfp.Name;$pipelineParameterSets=@(foreach($attr in $vfp.Attributes){if($attr.ParameterSetName){$attr.ParameterSetName}})}}};:NextProperty foreach($prop in $props){$cp=$cmd.Parameters;$pn=$prop.Name;$pv=$prop.Value;if(-not $cp){continue};$param=$cp.$pn;if(-not $param){$k="${cmd}:$pn";$param=if($ap[$k]){$ap[$k]}else{foreach($p in $cp.Values){foreach($a in $p.Aliases){$ap["${cmd}:$a"]=$p};if($ap[$k]){$ap[$k];break}}}};if(-not $param){$pn;continue};$paramMap[$param.Name]=$pn;if($params-contains$param){continue};$pt=$param.ParameterType;$paramSets=@(foreach($attr in $param.Attributes){if($attr.ParameterSetName){$attr.ParameterSetName}});if($pipelineParameterSets){$ok=$false;foreach($cmdPs in $paramSets){$ok=$ok-bor($pipelineParameterSets-contains$cmdPs)};if(-not $ok-and-not $Force){continue}};$v=$pv-as$pt;if(-not $v-and($pt-eq[ScriptBlock]-or$pt-eq[ScriptBlock[]])){$sb=try{foreach($_ in $pv){[ScriptBlock]::Create($_)}}catch{$null};if($sb){$v=$sb}};if($null-ne$v){$nv=try{[PSVariable]::new("$pn", $v, 'Private',$param.Attributes)}catch{@{$pn=$_}};if($nv-is[PSVariable]-or$Force){$null=$params.Add($param);:CanItPipe do{foreach($attr in $param.Attributes){if($attr.ValueFromPipeline-or$attr.ValueFromPipelineByPropertyName-and((-not $pipelineParameterSets)-or($pipelineParameterSets-contains$attr.ParameterSetName))){$pipe[$prop.Name]=$v;break CanItPipe}};$NoPipe[$prop.Name]=$v}while($false);$outSplat[$prop.Name]=$v};if($nv-isnot[PSVariable]){$nv}}else{@{$pn = $param}}});$Mandatory=@{};foreach($param in $cmdMd.Parameters.Values){foreach($a in $param.Attributes){if(-not $a.Mandatory){continue};if($a-isnot[Management.Automation.ParameterAttribute]){continue};if(-not $Mandatory[$a.ParameterSetName]){$Mandatory[$a.ParameterSetName]=[Ordered]@{}};$mp=($paramMap.($param.Name));$Mandatory[$a.ParameterSetName].($param.Name)=if($mp){if($pipelineParameterName-contains$param.Name){$in}else{$outSplat.$mp}}}};$amp.$cmd=$Mandatory;$mandatory=$amp.$cmd;$missingMandatory=@{};foreach($m in $Mandatory.GetEnumerator()){$missingMandatory[$m.Key]=@(foreach($_ in $m.value.GetEnumerator()){if($null-eq$_.Value){$_.Key}})};$couldRun=if(-not $Mandatory.Count){$true}elseif($missingMandatory.'__AllParameterSets'){$false}else{foreach($_ in $missingMandatory.GetEnumerator()){if(-not $_.Value){$true;break}}};if(-not $couldRun-and-not $Force){continue};foreach($p in $problems){if($p-is[Hashtable]){$Invalid+=$p}else{$Unmapped[$p]=$in.$p}};if($Invalid.Count-eq0){$Invalid=$null};if($Unmapped.Count-eq0){$Unmapped=$null};$realCmd=if($cmd-is[Management.Automation.FunctionInfo]-and$cmd.Name.Contains($cmd.ScriptBlock.GetHashCode().ToString())){$cmd.ScriptBlock}else{$cmd};foreach($_ in ([Ordered]@{
Command = $realCmd
CouldRun = $couldRun
Invalid = $Invalid
Missing = $missingMandatory
PercentFit = $(if ($pc) {$outSplat.Count / $pc } else { 0})
Unmapped = $Unmapped
PipelineParameter = $Pipe
NonPipelineParameter = $NoPipe
}).GetEnumerator()){$outSplat.psobject.properties.Add([Management.Automation.PSNoteProperty]::new($_.Key,$_.Value))};$outSplat}}}
${.@}=${UseSplat}={[Alias('.@','uSplat')]param([Parameter(Position=0)][PSObject[]]$Command,[Parameter(Position=1,ValueFromRemainingArguments)][PSObject[]]$ArgumentList,[Parameter(ValueFromPipeline=$true)][PSObject[]]$Splat,[switch]$Force,[Alias('BestFit','BestFitFunction', 'BF','BFF')][switch]$Best,[Alias('Pipe')][switch]$Stream)begin{$pipelines=@{}}process{$WeTrustTheSplat=$false;if(-not $Command-and$splat.Length-eq1-and$splat[0]-is[Collections.IDictionary]-and$Splat[0].psobject.Properties['Command']){$Command=$Splat[0].psobject.Properties['Command'].Value;$WeTrustTheSplat=$true}elseif(-not $command-and$_-is[PSObject]-and$_.Command-and$_.Splat){$WeTrustTheSplat=$true;$splat=$_.Splat;$command=$_.Command};if($Best-and$command.Count){$command=$splat|& ${?@} -Command $command|Sort-Object PercentFit -Descending|Select-Object -ExpandProperty Command -First 1};if(-not $Command){Write-Error -Message "No command found" -Category ObjectNotFound -ErrorId 'Use-Splat.CommandNotFound';return};foreach($cmd in $Command){if($WeTrustTheSplat){if($cmd-is[Management.Automation.CommandInfo]-or$cmd-is[ScriptBlock]){foreach($s in $splat){if($argumentList){& $cmd @s @ArgumentList}else{& $cmd @s}}}}else{$Splat|& ${?@} $cmd -Force:$Force|& {process{$i=$_;$np=$i.NonPipelineParameter;$c=$_.psobject.properties['Command'].Value;if($Stream){if(-not $pipelines[$c]){$stepScript=if($argumentList){{& $c @np @argumentList}}else{{& $c @np}};$stepPipeline=$stepScript.GetSteppablePipeline();$pipelines[$c]=$stepPipeline;$stepPipeline.Begin($true)}else{$stepPipeline=$pipelines[$c]};$stepPipeline.Process([PSCustomObject]$i.PipelineParameter);return};if($c-is[Management.Automation.CommandInfo]-or$c-is[ScriptBlock]){if($ArgumentList){& $c @i @ArgumentList}else{& $c @i}}}}}}}end{if($pipelines.Count){foreach($v in $pipelines.Values){$v.End()}}}}
${??@}=${FindSplat}=${fSplat}={[Alias('??@','fSplat')]param([Parameter(Position=0)][string[]]$Command,[Parameter(ValueFromPipeline=$true,Position=1)][Alias('InputObject')][PSObject]$Splat,[Alias('G')][switch]$Global,[Alias('L')][switch]$Local,[Alias('M')][string[]]$Module,[switch]$Force)begin{$myModule=$MyInvocation.MyCommand.ScriptBlock.Module;$cmdTypes='Function,Cmdlet,ExternalScript,Alias';$resolveAliases={begin{$n=0}process{$n++;if($t-is[int]-and$id){$p=$n*100/$t;Write-Progress "Resolving" "$_ " -PercentComplete $p -Id $id};if($_.ResolvedCommand){$_.ResolvedCommand}else{$_}}end{Write-Progress 'Resolving Aliases' 'Complete' -Id $id}};$filterCmds={process{foreach($c in $Command){if($_-like$c){return $_}}}}}process{if(-not $Splat){return};$id=[Random]::new().Next();$commandList=@(if(-not $Command){Write-Progress -Id $id -Activity 'Getting Commands' -Status ' ';if($MyModule-and$Local){$myModule.ExportedCommands.Values|. $resolveAliases|Select-Object -Unique}elseif($module){foreach($m in $Module){$rm=Get-Module $m;if(-not $rm){continue};$rm.ExportedCommands.Values|. $resolveAliases|Select-Object -Unique}}else{$allcmds=@($ExecutionContext.SessionState.InvokeCommand.GetCommands('*',$cmdTypes, $true));$t=$allcmds.Count;$allcmds|. $resolveAliases|Select-Object -Unique}}elseif($module){foreach($m in $Module){$rm=Get-Module $m;if(-not $rm){continue};$rm.ExportedCommands.Values|. $resolveAliases|. $filterCmds|Select-Object -Unique}}elseif($Global){foreach($c in $Command){$ExecutionContext.SessionState.InvokeCommand.GetCommands($c,$cmdTypes, $true)}}elseif($MyModule-and$Local){$myModule.ExportedCommands.Values|. $filterCmds|. $resolveAliases|Select-Object -Unique}else{foreach($cmd in $Command){if($cmd-is[string]-and$cmd.Contains('*')){$ExecutionContext.SessionState.InvokeCommand.GetCommands($cmd,$cmdTypes, $true)}else{$cmd}}});$psBoundParameters.Command=$commandList;if($Splat-is[Collections.IDictionary]){$Splat=if($splat.GetType().Name-ne'PSBoundParametersDictionary'){[PSCustomObject]$Splat}else{[PSCustomObject]([Ordered]@{} + $Splat)}};$c,$t=0,$commandList.Count;foreach($cmd in $commandList){if($t-gt1){$c++;$p=$c*100/$t;Write-Progress -Id $id -Activity 'Finding Splats' -Status "$cmd " -PercentComplete $p};$Splat|& ${?@} $cmd -Force:$Force|Select-Object -Property * -ExcludeProperty SyncRoot,IsSynchronized,IsReadOnly,IsFixedSize,Count|& {process{if($_.PercentFit-eq0){return};$_.pstypenames.clear();$_.pstypenames.add('Find.Splat.Output');$keys, $values=$_.Keys,$_.Values;$resplat=[Ordered]@{};for($i=0;$i -lt $keys.count;$i++){$resplat[$keys[$i]]=$values[$i]};$_.psobject.properties.remove('Keys');$_.psobject.properties.remove('Values');$_.psobject.properties.Add([Management.Automation.PSNoteProperty]::new('Splat', $resplat));$_}}};Write-Progress -Id $id -Completed -Activity 'Finding Splats' -Status 'Complete!'}}
#endregion Splatter [ 0.5.5 ] : Simple Scripts to Supercharge Splatting (Install-Module Splatter, then Initialize-Splatter -Verb Get,Use,Find -Minify )
Loading

0 comments on commit ab91940

Please sign in to comment.