func()

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
}