in code/go/internal/validator/folder_spec.go [192:228]
func (v *validator) findItemSpec(folderItemName string) (spectypes.ItemSpec, error) {
isLink, folderItemName := checkLink(folderItemName)
for _, itemSpec := range v.spec.Contents() {
if itemSpec.Name() != "" && itemSpec.Name() == folderItemName {
return itemSpec, nil
}
if itemSpec.Pattern() != "" {
isMatch, err := regexp.MatchString(strings.ReplaceAll(itemSpec.Pattern(), "{PACKAGE_NAME}", v.pkg.Name), folderItemName)
if err != nil {
return nil, fmt.Errorf("invalid folder item spec pattern: %w", err)
}
if isMatch {
var isForbidden bool
for _, forbidden := range itemSpec.ForbiddenPatterns() {
isForbidden, err = regexp.MatchString(forbidden, folderItemName)
if err != nil {
return nil, fmt.Errorf("invalid forbidden pattern for folder item: %w", err)
}
if isForbidden {
break
}
}
if !isForbidden {
if isLink && !itemSpec.AllowLink() {
return nil, fmt.Errorf("item [%s] is a link but is not allowed", folderItemName)
}
return itemSpec, nil
}
}
}
}
// No item spec found
return nil, nil
}