tra-analysis/website/node_modules/npm/lib/utils/completion/installed-shallow.js
2019-01-06 13:14:45 -06:00

88 lines
1.9 KiB
JavaScript

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))
}
}