Skip to content

Commit dffa2d8

Browse files
fix: collection types (#414)
# Pull Request ## Issue Issue #412 ## Description Solve all collection input issues for Bicep ## License By submitting this pull request, I confirm that my contribution is made under the terms of the projects associated license.
1 parent 2bfef2b commit dffa2d8

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

src/ALZ/Private/Config-Helpers/Set-Config.ps1

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,12 @@ function Set-Config {
5151
Write-Verbose "Found collection input config match for $inputConfigName"
5252
$inputConfigItemValue = $inputConfigItem.Value.Value
5353
$inputConfigItemValueType = $inputConfigItemValue.GetType().FullName
54-
Write-Verbose "Input config item value type: $inputConfigItemValueType"
54+
Write-Verbose "Input config item value type pre-standardization: $inputConfigItemValueType"
55+
56+
# Convert to standard type
57+
$inputConfigItemValue = $inputConfigItemValue | ConvertTo-Json | ConvertFrom-Json
58+
$inputConfigItemValueType = $inputConfigItemValue.GetType().FullName
59+
Write-Verbose "Input config item value type post-standardization: $inputConfigItemValueType"
5560

5661
$indexString = $indexSplit[1].Replace("`"", "").Replace("'", "")
5762
Write-Verbose "Using index $indexString for input config item $inputConfigName"
@@ -60,11 +65,6 @@ function Set-Config {
6065
# Handle integer index for arrays
6166
Write-Verbose "Handling integer index for array"
6267

63-
if(!$inputConfigItemValueType.EndsWith("[]") -and !$inputConfigItemValueType.StartsWith("System.Collections.Generic.List")) {
64-
Write-Error "Input config item $($inputConfigName) is not an array, but an index was specified."
65-
throw "Input config item $($inputConfigName) is not an array, but an index was specified."
66-
}
67-
6868
$index = [int]$indexString
6969
if($inputConfigItemValue.Length -le $index) {
7070
Write-Verbose "Input config item $($inputConfigName) does not have an index of $index."
@@ -73,7 +73,16 @@ function Set-Config {
7373
throw "At least one value is required for input config item $($inputConfigName)."
7474
}
7575
} else {
76-
$inputConfigItemIndexValue = $inputConfigItemValue[$index]
76+
try{
77+
$inputConfigItemIndexValue = $inputConfigItemValue[$index]
78+
} catch {
79+
Write-Verbose "Error accessing index $index for input config item $($inputConfigName): $_"
80+
if($index -eq 0) {
81+
Write-Error "At least one value is required for input config item $($inputConfigName)."
82+
throw "At least one value is required for input config item $($inputConfigName)."
83+
}
84+
}
85+
7786
if($null -ne $inputConfigItemIndexValue) {
7887
$configurationValue.Value.Value = $inputConfigItemIndexValue
7988
continue
@@ -89,12 +98,13 @@ function Set-Config {
8998
# Handle string index for maps
9099
Write-Verbose "Handling string index for map"
91100

92-
if(!$inputConfigItemValueType.EndsWith("PSCustomObject")) {
93-
Write-Error "Input config item $($inputConfigName) is not a map, but a key was specified."
94-
throw "Input config item $($inputConfigName) is not a map, but a key was specified."
101+
try{
102+
$mapItem = $inputConfigItemValue.PsObject.Properties | Where-Object { $_.Name -eq $indexString }
103+
} catch {
104+
Write-Verbose "Error accessing map item $indexString for input config item $($inputConfigName): $_"
105+
Write-Error "At least one value is required for input config item $($inputConfigName)."
106+
throw "At least one value is required for input config item $($inputConfigName)."
95107
}
96-
97-
$mapItem = $inputConfigItemValue.PsObject.Properties | Where-Object { $_.Name -eq $indexString }
98108
if($null -ne $mapItem) {
99109
$inputConfigItemIndexValue = $mapItem.Value
100110
if($null -ne $inputConfigItemIndexValue) {

0 commit comments

Comments
 (0)