(nameVersions []string)
| 83 | } |
| 84 | |
| 85 | func (r *removeCmd) validatePackageNames(nameVersions []string) ([]string, error) { |
| 86 | regex := regexp.MustCompile(`^[a-zA-Z0-9_-]+@[a-zA-Z0-9._-]+$`) |
| 87 | normalized := make([]string, 0, len(nameVersions)) |
| 88 | |
| 89 | for _, nameVersion := range nameVersions { |
| 90 | // In Windows PowerShell completion context, "`" can be added before "@", |
| 91 | // keep behavior aligned with install/update commands. |
| 92 | nameVersion = strings.ReplaceAll(nameVersion, "`", "") |
| 93 | nameVersion = strings.TrimSpace(nameVersion) |
| 94 | |
| 95 | if nameVersion == "" { |
| 96 | return nil, fmt.Errorf("empty package name") |
| 97 | } |
| 98 | |
| 99 | if !regex.MatchString(nameVersion) { |
| 100 | return nil, fmt.Errorf("invalid package name format: %s (expected format: name@version)", nameVersion) |
| 101 | } |
| 102 | |
| 103 | normalized = append(normalized, nameVersion) |
| 104 | } |
| 105 | |
| 106 | return normalized, nil |
| 107 | } |
| 108 | |
| 109 | // removePackages handles the actual package removal. |
| 110 | func (r *removeCmd) removePackages(nameVersions []string) error { |
no outgoing calls