2025-04-24 03:46:38 +05:30
|
|
|
package utils
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"strings"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func CleanVersion(version string) string {
|
|
|
|
|
version = strings.TrimPrefix(version, "^")
|
|
|
|
|
version = strings.TrimPrefix(version, "~")
|
|
|
|
|
if version == "*" {
|
|
|
|
|
return "latest"
|
|
|
|
|
}
|
|
|
|
|
return version
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ParsePackageInfo(input string) (packageName, version string, err error) {
|
|
|
|
|
if input == "" {
|
|
|
|
|
return "", "", fmt.Errorf("package info cannot be empty")
|
|
|
|
|
}
|
2025-05-04 18:50:13 +05:30
|
|
|
input = strings.TrimSpace(input)
|
|
|
|
|
|
|
|
|
|
if strings.HasPrefix(input, "@") {
|
|
|
|
|
lastAtIndex := strings.LastIndex(input, "@")
|
|
|
|
|
if lastAtIndex > 0 {
|
|
|
|
|
packageName = strings.TrimSpace(input[:lastAtIndex])
|
|
|
|
|
version = strings.TrimSpace(input[lastAtIndex+1:])
|
|
|
|
|
return packageName, version, nil
|
|
|
|
|
}
|
|
|
|
|
// If no version specifier, return the whole input as package name
|
|
|
|
|
return strings.TrimSpace(input), "", nil
|
|
|
|
|
}
|
2025-04-24 03:46:38 +05:30
|
|
|
|
|
|
|
|
pkg := strings.Split(input, "@")
|
2025-04-25 20:53:07 +05:30
|
|
|
if len(pkg) == 2 {
|
|
|
|
|
packageName = strings.TrimSpace(pkg[0])
|
|
|
|
|
version = strings.TrimSpace(pkg[1])
|
|
|
|
|
return packageName, version, nil
|
2025-04-24 03:46:38 +05:30
|
|
|
}
|
|
|
|
|
|
2025-04-25 20:53:07 +05:30
|
|
|
if len(pkg) == 1 {
|
|
|
|
|
packageName = strings.TrimSpace(pkg[0])
|
|
|
|
|
return packageName, "", nil
|
2025-04-24 03:46:38 +05:30
|
|
|
}
|
|
|
|
|
|
2025-04-28 20:48:07 +05:30
|
|
|
return "", "", fmt.Errorf("invalid format: expected 'package' OR 'package@version', got '%s'", input)
|
2025-04-24 03:46:38 +05:30
|
|
|
}
|
2025-04-30 14:26:38 +05:30
|
|
|
|
|
|
|
|
func IsInstallCommand(pkgManager, cmd string) bool {
|
|
|
|
|
validActions := map[string]map[string]bool{
|
|
|
|
|
"npm": {
|
|
|
|
|
"install": true,
|
|
|
|
|
"i": true,
|
|
|
|
|
"add": true,
|
|
|
|
|
},
|
|
|
|
|
"pnpm": {
|
|
|
|
|
"add": true,
|
|
|
|
|
"install": true,
|
|
|
|
|
"i": true,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if actions, exists := validActions[pkgManager]; exists {
|
|
|
|
|
return actions[cmd]
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|