From d786051dd1169fa095170027a74c73a3838e20e4 Mon Sep 17 00:00:00 2001 From: Frederico Silva Date: Sun, 24 Apr 2016 12:31:03 +0200 Subject: [PATCH] list available: show LTS and STABLE load versions from https://nodejs.org/download/release/index.json --- src/nvm.go | 41 +++++++++++++++++------------------- src/nvm/node/node.go | 50 +++++++++++++++++++++----------------------- 2 files changed, 43 insertions(+), 48 deletions(-) diff --git a/src/nvm.go b/src/nvm.go index 46ced54..b8191c9 100644 --- a/src/nvm.go +++ b/src/nvm.go @@ -8,7 +8,6 @@ import ( "io/ioutil" "regexp" "bytes" - "encoding/json" "strconv" "./nvm/web" "./nvm/arch" @@ -401,29 +400,35 @@ func list(listtype string) { fmt.Println("No installations recognized.") } } else { - _, stable, unstable := node.GetAvailable() + _, lts, stable, _ := node.GetAvailable() releases := 15 fmt.Println("\nShowing the "+strconv.Itoa(releases)+" latest available releases.\n") - fmt.Println(" STABLE | UNSTABLE ") + fmt.Println(" LTS | STABLE ") fmt.Println(" ---------------------------") for i := 0; i < releases; i++ { - str := "v"+stable[i] - for ii := 10-len(str); ii > 0; ii-- { - str = " "+str + str := " " + if len(lts) > i { + str = "v"+lts[i] + for ii := 10-len(str); ii > 0; ii-- { + str = " "+str + } } - str = str+" | " - str2 := "v"+unstable[i] - for ii := 10-len(str2); ii > 0; ii-- { - str2 = " "+str2 + + str2 := "" + if len(stable) > i { + str2 = "v"+stable[i] + for ii := 10-len(str2); ii > 0; ii-- { + str2 = " "+str2 + } } - fmt.Println(" "+str+str2) + fmt.Println(" "+str + " | " + str2) } - fmt.Println("\nFor a complete list, visit http://coreybutler.github.io/nodedistro") + fmt.Println("\nFor a complete list, visit https://nodejs.org/download/release") } } @@ -478,17 +483,9 @@ func help() { // Given a node.js version, returns the associated npm version func getNpmVersion(nodeversion string) string { - // Get raw text - text := web.GetRemoteTextFile("https://raw.githubusercontent.com/coreybutler/nodedistro/master/nodeversions.json") + _, _, _, npm := node.GetAvailable() - // Parse - var data interface{} - json.Unmarshal([]byte(text), &data); - body := data.(map[string]interface{}) - all := body["all"] - npm := all.(map[string]interface{}) - - return npm[nodeversion].(string) + return npm[nodeversion] } func updateRootDir(path string) { diff --git a/src/nvm/node/node.go b/src/nvm/node/node.go index 739522d..7f9ca69 100644 --- a/src/nvm/node/node.go +++ b/src/nvm/node/node.go @@ -6,7 +6,6 @@ import( "regexp" "io/ioutil" "encoding/json" - "sort" "../arch" "../file" "../web" @@ -71,7 +70,7 @@ func IsVersionInstalled(root string, version string, cpu string) bool { func IsVersionAvailable(v string) bool { // Check the service to make sure the version is available - avail, _, _ := GetAvailable() + avail, _, _, _ := GetAvailable() for _, b := range avail { if b == v { @@ -109,38 +108,37 @@ func (s BySemanticVersion) Less(i, j int) bool { return v1.GTE(v2) } -func GetAvailable() ([]string, []string, []string) { +func GetAvailable() ([]string, []string, []string, map[string]string) { all := make([]string,0) + lts := make([]string,0) stable := make([]string,0) - unstable := make([]string,0) + npm := make(map[string]string) // Check the service to make sure the version is available - text := web.GetRemoteTextFile("https://raw.githubusercontent.com/coreybutler/nodedistro/master/nodeversions.json") + text := web.GetRemoteTextFile("https://nodejs.org/download/release/index.json") // Parse - var data interface{} + var data = make([]map[string]interface{}, 0) json.Unmarshal([]byte(text), &data); - body := data.(map[string]interface{}) - _all := body["all"] - _stable := body["stable"] - _unstable := body["unstable"] - allkeys := _all.(map[string]interface{}) - stablekeys := _stable.(map[string]interface{}) - unstablekeys := _unstable.(map[string]interface{}) - for nodev, _ := range allkeys { - all = append(all,nodev) - } - for nodev, _ := range stablekeys { - stable = append(stable,nodev) - } - for nodev, _ := range unstablekeys { - unstable = append(unstable,nodev) + for _,element := range data { + + var version = element["version"].(string)[1:] + all = append(all, version) + + if val, ok := element["npm"].(string); ok { + npm[version] = val + } + + switch v := element["lts"].(type) { + case bool: + if v == false { + stable = append(stable, version) + } + case string: + lts = append(lts, version) + } } - sort.Sort(BySemanticVersion(all)) - sort.Sort(BySemanticVersion(stable)) - sort.Sort(BySemanticVersion(unstable)) - - return all, stable, unstable + return all, lts, stable, npm }