in custom-targets/util/applysetters/apply_setters.go [291:337]
func currentSetterValues(pattern, value string) map[string]string {
res := make(map[string]string)
// get all setter names enclosed in ${}
// e.g. value: my-app-layer.dev.example.com
// pattern: my-app-layer.${stage}.${domain}.${tld}
// urs: [${stage}, ${domain}, ${tld}]
urs := unresolvedSetters(pattern)
// and escape pattern
pattern = regexp.QuoteMeta(pattern)
// escaped pattern: my-app-layer\.\$\{stage\}\.\$\{domain\}\.\$\{tld\}
for _, setterName := range urs {
// escape setter name
// we need to escape the setterName as well to replace it in the escaped pattern string later
setterName = regexp.QuoteMeta(setterName)
pattern = strings.ReplaceAll(
pattern,
setterName,
`(?P<x>.*)`) // x is just a place holder, it could be any alphanumeric string
}
// pattern: my-app-layer\.(?P<x>.*)\.(?P<x>.*)\.(?P<x>.*)
r, err := regexp.Compile(pattern)
if err != nil {
// just return empty map if values can't be derived from pattern
return res
}
setterValues := r.FindStringSubmatch(value)
if len(setterValues) == 0 {
return res
}
// setterValues: [ "my-app-layer.dev.example.com", "dev", "example", "com"]
setterValues = setterValues[1:]
// setterValues: [ "dev", "example", "com"]
if len(urs) != len(setterValues) {
// just return empty map if values can't be derived
return res
}
for i := range setterValues {
if setterValues[i] == "" {
// if any of the value is unresolved return empty map
// and expect users to provide all values
return make(map[string]string)
}
res[clean(urs[i])] = setterValues[i]
}
return res
}