summaryrefslogtreecommitdiff
path: root/deps/npm/lib/ls.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/lib/ls.js')
-rw-r--r--deps/npm/lib/ls.js23
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 + ")"
}