@@ -299,13 +299,14 @@ function New-PSSwaggerModule {
299
299
$ev = $null
300
300
301
301
$webRequestParams = @ {
302
- ' Uri' = $SpecificationUri
302
+ ' Uri' = $SpecificationUri
303
303
' OutFile' = $SpecificationPath
304
304
}
305
305
306
- if ($Credential -ne $null ) {
306
+ if ($Credential -ne $null ) {
307
307
$webRequestParams [' Credential' ] = $Credential
308
- } elseif ($UseDefaultCredential ) {
308
+ }
309
+ elseif ($UseDefaultCredential ) {
309
310
$webRequestParams [' UseDefaultCredential' ] = $true
310
311
}
311
312
@@ -452,7 +453,9 @@ function New-PSSwaggerModule {
452
453
NoAuthChallenge = $false
453
454
NameSpacePrefix = ' '
454
455
Header = ' '
455
- Formatter = ' '
456
+ Formatter = ' PSScriptAnalyzer'
457
+ DefaultWildcardChar = ' %'
458
+ AzureDefaults = $null
456
459
}
457
460
458
461
# Parse the JSON and populate the dictionary
@@ -482,7 +485,8 @@ function New-PSSwaggerModule {
482
485
if (-not $Formatter ) {
483
486
if ($PowerShellCodeGen [' Formatter' ]) {
484
487
$Formatter = $PowerShellCodeGen [' Formatter' ]
485
- } else {
488
+ }
489
+ else {
486
490
$Formatter = ' None'
487
491
}
488
492
}
@@ -582,6 +586,100 @@ function New-PSSwaggerModule {
582
586
583
587
}
584
588
}
589
+
590
+ # Add extra metadata based on service type
591
+ if (($PowerShellCodeGen [' ServiceType' ] -eq ' azure' ) -or ($PowerShellCodeGen [' ServiceType' ] -eq ' azure_stack' ) -and
592
+ ($PowerShellCodeGen.ContainsKey (' azureDefaults' ) -and $PowerShellCodeGen [' azureDefaults' ] -and
593
+ (-not (Get-Member - InputObject $PowerShellCodeGen [' azureDefaults' ] - Name ' clientSideFiltering' )) -or
594
+ ($PowerShellCodeGen [' azureDefaults' ].ClientSideFiltering))) {
595
+ foreach ($entry in $PathFunctionDetails.GetEnumerator ()) {
596
+ $hyphenIndex = $entry.Name.IndexOf (" -" )
597
+ if ($hyphenIndex -gt -1 ) {
598
+ $commandVerb = $entry.Name.Substring (0 , $hyphenIndex )
599
+ # Add client-side filter metadata automatically if:
600
+ # 1: If the command is a Get-* command
601
+ # 2: A *_List parameter set exists
602
+ # 3: A *_Get parameter set exists
603
+ # 4: *_List required parameters are a subset of *_Get required parameters
604
+ # 5: *_Get has a -Name parameter alias
605
+ if ($commandVerb -eq ' Get' ) {
606
+ $getParameters = @ ()
607
+ $listParameters = $null
608
+ $listOperationId = $null
609
+ $getOperationId = $null
610
+ $nameParameterNormalName = $null # This is the one being switched out for -Name later
611
+ foreach ($parameterSetDetails in $entry.Value.ParameterSetDetails ) {
612
+ if ($parameterSetDetails.OperationId.EndsWith (" _Get" ) -and
613
+ (-not ($parameterSetDetails.OperationId.StartsWith (" InputObject_" ))) -and
614
+ (-not ($parameterSetDetails.OperationId.StartsWith (" ResourceId_" )))) {
615
+ $getOperationId = $parameterSetDetails.OperationId
616
+ foreach ($parametersDetail in $parameterSetDetails.ParameterDetails ) {
617
+ foreach ($parameterDetailEntry in $parametersDetail.GetEnumerator ()) {
618
+ $getParameters += $parameterDetailEntry.Value
619
+ if ($parameterDetailEntry.Value.ContainsKey (' Alias' )) {
620
+ if ($parameterDetailEntry.Value.Alias -eq ' Name' ) {
621
+ $nameParameterNormalName = $parameterDetailEntry.Value.Name
622
+ }
623
+ }
624
+ elseif ($parameterDetailEntry.Value.Name -eq ' Name' ) {
625
+ # We're currently assuming this is a resource name
626
+ $nameParameterNormalName = $parameterDetailEntry.Value.Name
627
+ }
628
+ }
629
+ }
630
+ }
631
+ elseif ($parameterSetDetails.OperationId.EndsWith (" _List" )) {
632
+ $listOperationId = $parameterSetDetails.OperationId
633
+ $listParameters = @ ()
634
+ foreach ($parametersDetail in $parameterSetDetails.ParameterDetails ) {
635
+ foreach ($parameterDetailEntry in $parametersDetail.GetEnumerator ()) {
636
+ $listParameters += $parameterDetailEntry.Value
637
+ }
638
+ }
639
+ }
640
+ }
641
+
642
+ if ($getParameters -and $listParameters ) {
643
+ $valid = $true
644
+ foreach ($parameterDetail in $listParameters ) {
645
+ if ($parameterDetail.Mandatory -eq ' $true' ) {
646
+ $matchingGetParameter = $getParameters | Where-Object { ($_.Name -eq $parameterDetail.Name ) -and ($_.Mandatory -eq ' $true' ) }
647
+ if (-not $matchingGetParameter ) {
648
+ $valid = $false
649
+ Write-Warning - Message ($LocalizedData.FailedToAddAutomaticFilter -f $entry.Name )
650
+ }
651
+ }
652
+ }
653
+
654
+ if ($valid ) {
655
+ if (-not $entry.Value.ContainsKey (' Metadata' )) {
656
+ $entry.Value [' Metadata' ] = New-Object - TypeName PSCustomObject
657
+ }
658
+
659
+ if (-not (Get-Member - InputObject $entry.Value [' Metadata' ] - Name ' ClientSideFilter' )) {
660
+ $clientSideFilter = New-Object - TypeName PSCustomObject
661
+ # Use the current command for server-side results
662
+ Add-Member - InputObject $clientSideFilter - Name ' ServerSideResultCommand' - Value ' .' - MemberType NoteProperty
663
+ # Use the list operation ID
664
+ Add-Member - InputObject $clientSideFilter - Name ' ServerSideResultParameterSet' - Value $listOperationId - MemberType NoteProperty
665
+ # Use the get operation ID
666
+ Add-Member - InputObject $clientSideFilter - Name ' ClientSideParameterSet' - Value $getOperationId - MemberType NoteProperty
667
+ # Create a wildcard filter for the Name parameter
668
+ $nameWildcardFilter = New-Object - TypeName PSCustomObject
669
+ Add-Member - InputObject $nameWildcardFilter - Name ' Type' - Value ' powershellWildcard' - MemberType NoteProperty
670
+ Add-Member - InputObject $nameWildcardFilter - Name ' Parameter' - Value $nameParameterNormalName - MemberType NoteProperty
671
+ Add-Member - InputObject $nameWildcardFilter - Name ' Property' - Value ' Name' - MemberType NoteProperty
672
+ $filters = @ ($nameWildcardFilter )
673
+ Add-Member - InputObject $clientSideFilter - Name ' Filters' - Value $filters - MemberType NoteProperty
674
+ $allClientSideFilters = @ ($clientSideFilter )
675
+ Add-Member - InputObject $entry.Value [' Metadata' ] - Name ' ClientSideFilters' - Value $allClientSideFilters - MemberType NoteProperty
676
+ }
677
+ }
678
+ }
679
+ }
680
+ }
681
+ }
682
+ }
585
683
}
586
684
587
685
$FullClrAssemblyFilePath = $null
@@ -637,7 +735,8 @@ function New-PSSwaggerModule {
637
735
- SwaggerDict $swaggerDict `
638
736
- DefinitionFunctionsDetails $DefinitionFunctionsDetails `
639
737
- PSHeaderComment $PSHeaderComment `
640
- - Formatter $Formatter
738
+ - Formatter $Formatter `
739
+ - PowerShellCodeGen $PowerShellCodeGen
641
740
642
741
$FunctionsToExport += New-SwaggerDefinitionCommand - DefinitionFunctionsDetails $DefinitionFunctionsDetails `
643
742
- SwaggerMetaDict $swaggerMetaDict `
@@ -676,7 +775,9 @@ function New-PSSwaggerModule {
676
775
- PSHeaderComment $PSHeaderComment
677
776
678
777
$CopyFilesMap = [ordered ]@ {
679
- ' Get-TaskResult.ps1' = ' Get-TaskResult.ps1'
778
+ ' Get-TaskResult.ps1' = ' Get-TaskResult.ps1'
779
+ ' Get-ApplicableFilters.ps1' = ' Get-ApplicableFilters.ps1'
780
+ ' Test-FilteredResult.ps1' = ' Test-FilteredResult.ps1'
680
781
}
681
782
if ($UseAzureCsharpGenerator ) {
682
783
$CopyFilesMap [' New-ArmServiceClient.ps1' ] = ' New-ServiceClient.ps1'
@@ -815,7 +916,8 @@ function ConvertTo-CsharpCode {
815
916
$fs = [System.IO.File ]::OpenRead($csc.Source )
816
917
try {
817
918
$null = $fs.Read ($data , 0 , 4096 )
818
- } finally {
919
+ }
920
+ finally {
819
921
$fs.Dispose ()
820
922
}
821
923
@@ -828,7 +930,8 @@ function ConvertTo-CsharpCode {
828
930
if ($magic -eq 0x20b ) {
829
931
# Skip to the end of IMAGE_OPTIONAL_HEADER64 to the first entry in the data directory array
830
932
$p_dataDirectory0 = [System.BitConverter ]::ToUInt32($data , [int ]$p_ioh + 224 )
831
- } else {
933
+ }
934
+ else {
832
935
# Same thing, but for IMAGE_OPTIONAL_HEADER32
833
936
$p_dataDirectory0 = [System.BitConverter ]::ToUInt32($data , [int ]$p_ioh + 208 )
834
937
}
0 commit comments