mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
1.9 KiB
87 lines
1.9 KiB
|
|
module.exports = installedShallow
|
|
|
|
var npm = require('../../npm.js')
|
|
var fs = require('graceful-fs')
|
|
var path = require('path')
|
|
var readJson = require('read-package-json')
|
|
var asyncMap = require('slide').asyncMap
|
|
|
|
function installedShallow (opts, filter, cb) {
|
|
if (typeof cb !== 'function') {
|
|
cb = filter
|
|
filter = null
|
|
}
|
|
var conf = opts.conf
|
|
var args = conf.argv.remain
|
|
if (args.length > 3) return cb()
|
|
var local
|
|
var global
|
|
var localDir = npm.dir
|
|
var globalDir = npm.globalDir
|
|
if (npm.config.get('global')) {
|
|
local = []
|
|
next()
|
|
} else {
|
|
fs.readdir(localDir, function (er, pkgs) {
|
|
local = (pkgs || []).filter(function (p) {
|
|
return p.charAt(0) !== '.'
|
|
})
|
|
next()
|
|
})
|
|
}
|
|
|
|
fs.readdir(globalDir, function (er, pkgs) {
|
|
global = (pkgs || []).filter(function (p) {
|
|
return p.charAt(0) !== '.'
|
|
})
|
|
next()
|
|
})
|
|
function next () {
|
|
if (!local || !global) return
|
|
filterInstalled(local, global, filter, cb)
|
|
}
|
|
}
|
|
|
|
function filterInstalled (local, global, filter, cb) {
|
|
var fl
|
|
var fg
|
|
|
|
if (!filter) {
|
|
fl = local
|
|
fg = global
|
|
return next()
|
|
}
|
|
|
|
asyncMap(local, function (p, cb) {
|
|
readJson(path.join(npm.dir, p, 'package.json'), function (er, d) {
|
|
if (!d || !filter(d)) return cb(null, [])
|
|
return cb(null, d.name)
|
|
})
|
|
}, function (er, local) {
|
|
fl = local || []
|
|
next()
|
|
})
|
|
|
|
var globalDir = npm.globalDir
|
|
asyncMap(global, function (p, cb) {
|
|
readJson(path.join(globalDir, p, 'package.json'), function (er, d) {
|
|
if (!d || !filter(d)) return cb(null, [])
|
|
return cb(null, d.name)
|
|
})
|
|
}, function (er, global) {
|
|
fg = global || []
|
|
next()
|
|
})
|
|
|
|
function next () {
|
|
if (!fg || !fl) return
|
|
if (!npm.config.get('global')) {
|
|
fg = fg.map(function (g) {
|
|
return [g, '-g']
|
|
})
|
|
}
|
|
console.error('filtered', fl, fg)
|
|
return cb(null, fl.concat(fg))
|
|
}
|
|
}
|
|
|