diff options
Diffstat (limited to 'deps/node/deps/npm/lib/utils/completion/installed-shallow.js')
-rw-r--r-- | deps/node/deps/npm/lib/utils/completion/installed-shallow.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/deps/node/deps/npm/lib/utils/completion/installed-shallow.js b/deps/node/deps/npm/lib/utils/completion/installed-shallow.js new file mode 100644 index 00000000..bf692fed --- /dev/null +++ b/deps/node/deps/npm/lib/utils/completion/installed-shallow.js @@ -0,0 +1,87 @@ + +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)) + } +} |