in operator/pkg/values/map.go [165:211]
func (m Map) GetPath(name string) (any, bool) {
current := any(m)
paths := splitPath(name)
for _, n := range paths {
if idx, ok := extractIndex(n); ok {
a, ok := current.([]any)
if !ok {
return nil, false
}
if idx >= 0 && idx < len(a) {
current = a[idx]
} else {
return nil, false
}
} else if k, v, ok := extractKeyValue(n); ok {
a, ok := current.([]any)
if !ok {
return nil, false
}
index := -1
for idx, cm := range a {
if MustCastAsMap(cm)[k] == v {
index = idx
break
}
}
if index == -1 {
return nil, false
}
current = a[idx]
} else {
cm, ok := CastAsMap(current)
if !ok {
return nil, false
}
subKey, ok := cm[n]
if !ok {
return nil, false
}
current = subKey
}
}
if p, ok := current.(*any); ok {
return *p, true
}
return current, true
}