github.com/jfrog/jfrog-cli-go@v1.22.1-0.20200318093948-4826ef344ffd/artifactory/utils/npm/packageInfo.go (about) 1 package npm 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/jfrog/jfrog-client-go/utils/errorutils" 7 "github.com/jfrog/jfrog-client-go/utils/log" 8 "io/ioutil" 9 "path/filepath" 10 "strings" 11 ) 12 13 type PackageInfo struct { 14 Name string `json:"name,omitempty"` 15 Version string `json:"version,omitempty"` 16 Scope string 17 } 18 19 func ReadPackageInfoFromPackageJson(packageJsonDirectory string) (*PackageInfo, error) { 20 log.Debug("Reading info from package.json file:", filepath.Join(packageJsonDirectory, "package.json")) 21 packageJson, err := ioutil.ReadFile(filepath.Join(packageJsonDirectory, "package.json")) 22 if err != nil { 23 return nil, errorutils.CheckError(err) 24 } 25 return ReadPackageInfo(packageJson) 26 } 27 28 func ReadPackageInfo(data []byte) (*PackageInfo, error) { 29 parsedResult := new(PackageInfo) 30 if err := json.Unmarshal(data, parsedResult); err != nil { 31 return nil, errorutils.CheckError(err) 32 } 33 removeVersionPrefixes(parsedResult) 34 splitScopeFromName(parsedResult) 35 return parsedResult, nil 36 } 37 38 func (pi *PackageInfo) BuildInfoModuleId() string { 39 nameBase := fmt.Sprintf("%s:%s", pi.Name, pi.Version) 40 if pi.Scope == "" { 41 return nameBase 42 } 43 return fmt.Sprintf("%s:%s", strings.TrimPrefix(pi.Scope, "@"), nameBase) 44 } 45 46 func (pi *PackageInfo) GetDeployPath() string { 47 fileName := fmt.Sprintf("%s-%s.tgz", pi.Name, pi.Version) 48 if pi.Scope == "" { 49 return fmt.Sprintf("%s/-/%s", pi.Name, fileName) 50 } 51 return fmt.Sprintf("%s/%s/-/%s", pi.Scope, pi.Name, fileName) 52 } 53 54 func (pi *PackageInfo) GetExpectedPackedFileName() string { 55 fileNameBase := fmt.Sprintf("%s-%s.tgz", pi.Name, pi.Version) 56 if pi.Scope == "" { 57 return fileNameBase 58 } 59 return fmt.Sprintf("%s-%s", strings.TrimPrefix(pi.Scope, "@"), fileNameBase) 60 } 61 62 func splitScopeFromName(packageInfo *PackageInfo) { 63 if strings.HasPrefix(packageInfo.Name, "@") && strings.Contains(packageInfo.Name, "/") { 64 splitValues := strings.Split(packageInfo.Name, "/") 65 packageInfo.Scope = splitValues[0] 66 packageInfo.Name = splitValues[1] 67 } 68 } 69 70 // A leading "=" or "v" character is stripped off and ignored by npm. 71 func removeVersionPrefixes(packageInfo *PackageInfo) { 72 packageInfo.Version = strings.TrimPrefix(packageInfo.Version, "v") 73 packageInfo.Version = strings.TrimPrefix(packageInfo.Version, "=") 74 }