diff options
Diffstat (limited to 'deps/npm/lib/ls.js')
-rw-r--r-- | deps/npm/lib/ls.js | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/deps/npm/lib/ls.js b/deps/npm/lib/ls.js index 781b6443b..ed329d19e 100644 --- a/deps/npm/lib/ls.js +++ b/deps/npm/lib/ls.js @@ -14,8 +14,8 @@ var npm = require("./npm.js") , archy = require("archy") , semver = require("semver") , url = require("url") - , isGitUrl = require("./utils/is-git-url.js") , color = require("ansicolors") + , npa = require("npm-package-arg") ls.usage = "npm ls" @@ -29,9 +29,9 @@ function ls (args, silent, cb) { // npm ls 'foo@~1.3' bar 'baz@<2' if (!args) args = [] else args = args.map(function (a) { - var nv = a.split("@") - , name = nv.shift() - , ver = semver.validRange(nv.join("@")) || "" + var p = npa(a) + , name = p.name + , ver = semver.validRange(p.rawSpec) || "" return [ name, ver ] }) @@ -39,6 +39,7 @@ function ls (args, silent, cb) { var depth = npm.config.get("depth") var opt = { depth: depth, log: log.warn, dev: true } readInstalled(dir, opt, function (er, data) { + pruneNestedExtraneous(data) var bfs = bfsify(data, args) , lite = getLite(bfs) @@ -75,6 +76,18 @@ function ls (args, silent, cb) { }) } +function pruneNestedExtraneous (data, visited) { + visited = visited || [] + visited.push(data) + for (var i in data.dependencies) { + if (data.dependencies[i].extraneous) { + data.dependencies[i].dependencies = {} + } else if (visited.indexOf(data.dependencies[i]) === -1) { + pruneNestedExtraneous(data.dependencies[i], visited) + } + } +} + function alphasort (a, b) { a = a.toLowerCase() b = b.toLowerCase() @@ -265,7 +278,7 @@ function makeArchy_ (data, long, dir, depth, parent, d) { // add giturl to name@version if (data._resolved) { - if (isGitUrl(url.parse(data._resolved))) + if (npa(data._resolved).type === "git") out.label += " (" + data._resolved + ")" } |