/
usr
/
lib
/
node_modules
/
npm
/
lib
/
/usr/lib/node_modules/npm/lib
mkdir
upload
Name
Size
Mode
Actions
auth/
-
0755
rm
config/
-
0755
rm
doctor/
-
0755
rm
install/
-
0755
rm
search/
-
0755
rm
utils/
-
0755
rm
access.js
5672
0644
edit
dl
rm
adduser.js
1337
0644
edit
dl
rm
audit.js
10811
0644
edit
dl
rm
bin.js
515
0644
edit
dl
rm
bugs.js
864
0644
edit
dl
rm
build.js
4545
0644
edit
dl
rm
cache.js
4773
0644
edit
dl
rm
ci.js
1341
0644
edit
dl
rm
completion.js
7278
0644
edit
dl
rm
config.js
7612
0644
edit
dl
rm
dedupe.js
4999
0644
edit
dl
rm
deprecate.js
2157
0644
edit
dl
rm
dist-tag.js
4204
0644
edit
dl
rm
docs.js
1063
0644
edit
dl
rm
doctor.js
4075
0644
edit
dl
rm
edit.js
1407
0644
edit
dl
rm
explore.js
1709
0644
edit
dl
rm
fetch-package-metadata.js
4064
0644
edit
dl
rm
fund.js
5026
0644
edit
dl
rm
get.js
235
0644
edit
dl
rm
help-search.js
5777
0644
edit
dl
rm
help.js
6507
0644
edit
dl
rm
hook.js
4727
0644
edit
dl
rm
init.js
2805
0644
edit
dl
rm
install-ci-test.js
486
0644
edit
dl
rm
install-test.js
507
0644
edit
dl
rm
install.js
37345
0644
edit
dl
rm
link.js
5739
0644
edit
dl
rm
logout.js
1289
0644
edit
dl
rm
ls.js
16480
0644
edit
dl
rm
npm.js
14719
0644
edit
dl
rm
org.js
4276
0644
edit
dl
rm
outdated.js
12572
0644
edit
dl
rm
owner.js
6754
0644
edit
dl
rm
pack.js
12068
0644
edit
dl
rm
ping.js
1141
0644
edit
dl
rm
prefix.js
330
0644
edit
dl
rm
profile.js
11401
0644
edit
dl
rm
prune.js
2281
0644
edit
dl
rm
publish.js
5264
0644
edit
dl
rm
rebuild.js
2143
0644
edit
dl
rm
repo.js
1471
0644
edit
dl
rm
restart.js
64
0644
edit
dl
rm
root.js
320
0644
edit
dl
rm
run-script.js
5540
0644
edit
dl
rm
search.js
3442
0644
edit
dl
rm
set.js
276
0644
edit
dl
rm
shrinkwrap.js
10056
0644
edit
dl
rm
star.js
2157
0644
edit
dl
rm
stars.js
1054
0644
edit
dl
rm
start.js
62
0644
edit
dl
rm
stop.js
61
0644
edit
dl
rm
substack.js
509
0644
edit
dl
rm
team.js
4724
0644
edit
dl
rm
test.js
374
0644
edit
dl
rm
token.js
6818
0644
edit
dl
rm
unbuild.js
4374
0644
edit
dl
rm
uninstall.js
2261
0644
edit
dl
rm
unpublish.js
3594
0644
edit
dl
rm
update.js
2213
0644
edit
dl
rm
version.js
10029
0644
edit
dl
rm
view.js
15473
0644
edit
dl
rm
visnup.js
4104
0644
edit
dl
rm
whoami.js
1809
0644
edit
dl
rm
xmas.js
1663
0644
edit
dl
rm
Edit:
/usr/lib/node_modules/npm/lib/completion.js
(7278B)
module.exports = completion completion.usage = 'source <(npm completion)' var npm = require('./npm.js') var npmconf = require('./config/core.js') var configDefs = npmconf.defs var configTypes = configDefs.types var shorthands = configDefs.shorthands var nopt = require('nopt') var configNames = Object.keys(configTypes) .filter(function (e) { return e.charAt(0) !== '_' }) var shorthandNames = Object.keys(shorthands) var allConfs = configNames.concat(shorthandNames) var once = require('once') var isWindowsShell = require('./utils/is-windows-shell.js') var output = require('./utils/output.js') completion.completion = function (opts, cb) { if (opts.w > 3) return cb() var fs = require('graceful-fs') var path = require('path') var bashExists = null var zshExists = null fs.stat(path.resolve(process.env.HOME, '.bashrc'), function (er) { bashExists = !er next() }) fs.stat(path.resolve(process.env.HOME, '.zshrc'), function (er) { zshExists = !er next() }) function next () { if (zshExists === null || bashExists === null) return var out = [] if (zshExists) out.push('~/.zshrc') if (bashExists) out.push('~/.bashrc') if (opts.w === 2) { out = out.map(function (m) { return ['>>', m] }) } cb(null, out) } } function completion (args, cb) { if (isWindowsShell) { var e = new Error('npm completion supported only in MINGW / Git bash on Windows') e.code = 'ENOTSUP' e.errno = require('constants').ENOTSUP // eslint-disable-line node/no-deprecated-api return cb(e) } // if the COMP_* isn't in the env, then just dump the script. if (process.env.COMP_CWORD === undefined || process.env.COMP_LINE === undefined || process.env.COMP_POINT === undefined) { return dumpScript(cb) } console.error(process.env.COMP_CWORD) console.error(process.env.COMP_LINE) console.error(process.env.COMP_POINT) // get the partial line and partial word, // if the point isn't at the end. // ie, tabbing at: npm foo b|ar var w = +process.env.COMP_CWORD var words = args.map(unescape) var word = words[w] var line = process.env.COMP_LINE var point = +process.env.COMP_POINT var partialLine = line.substr(0, point) var partialWords = words.slice(0, w) // figure out where in that last word the point is. var partialWord = args[w] var i = partialWord.length while (partialWord.substr(0, i) !== partialLine.substr(-1 * i) && i > 0) { i-- } partialWord = unescape(partialWord.substr(0, i)) partialWords.push(partialWord) var opts = { words: words, w: w, word: word, line: line, lineLength: line.length, point: point, partialLine: partialLine, partialWords: partialWords, partialWord: partialWord, raw: args } cb = wrapCb(cb, opts) console.error(opts) if (partialWords.slice(0, -1).indexOf('--') === -1) { if (word.charAt(0) === '-') return configCompl(opts, cb) if (words[w - 1] && words[w - 1].charAt(0) === '-' && !isFlag(words[w - 1])) { // awaiting a value for a non-bool config. // don't even try to do this for now console.error('configValueCompl') return configValueCompl(opts, cb) } } // try to find the npm command. // it's the first thing after all the configs. // take a little shortcut and use npm's arg parsing logic. // don't have to worry about the last arg being implicitly // boolean'ed, since the last block will catch that. var parsed = opts.conf = nopt(configTypes, shorthands, partialWords.slice(0, -1), 0) // check if there's a command already. console.error(parsed) var cmd = parsed.argv.remain[1] if (!cmd) return cmdCompl(opts, cb) Object.keys(parsed).forEach(function (k) { npm.config.set(k, parsed[k]) }) // at this point, if words[1] is some kind of npm command, // then complete on it. // otherwise, do nothing cmd = npm.commands[cmd] if (cmd && cmd.completion) return cmd.completion(opts, cb) // nothing to do. cb() } function dumpScript (cb) { var fs = require('graceful-fs') var path = require('path') var p = path.resolve(__dirname, 'utils/completion.sh') // The Darwin patch below results in callbacks first for the write and then // for the error handler, so make sure we only call our callback once. cb = once(cb) fs.readFile(p, 'utf8', function (er, d) { if (er) return cb(er) d = d.replace(/^#!.*?\n/, '') process.stdout.write(d, function () { cb() }) process.stdout.on('error', function (er) { // Darwin is a pain sometimes. // // This is necessary because the "source" or "." program in // bash on OS X closes its file argument before reading // from it, meaning that you get exactly 1 write, which will // work most of the time, and will always raise an EPIPE. // // Really, one should not be tossing away EPIPE errors, or any // errors, so casually. But, without this, `. <(npm completion)` // can never ever work on OS X. if (er.errno === 'EPIPE') er = null cb(er) }) }) } function unescape (w) { if (w.charAt(0) === '\'') return w.replace(/^'|'$/g, '') else return w.replace(/\\ /g, ' ') } function escape (w) { if (!w.match(/\s+/)) return w return '\'' + w + '\'' } // The command should respond with an array. Loop over that, // wrapping quotes around any that have spaces, and writing // them to stdout. Use console.log, not the outfd config. // If any of the items are arrays, then join them with a space. // Ie, returning ['a', 'b c', ['d', 'e']] would allow it to expand // to: 'a', 'b c', or 'd' 'e' function wrapCb (cb, opts) { return function (er, compls) { if (!Array.isArray(compls)) compls = compls ? [compls] : [] compls = compls.map(function (c) { if (Array.isArray(c)) c = c.map(escape).join(' ') else c = escape(c) return c }) if (opts.partialWord) { compls = compls.filter(function (c) { return c.indexOf(opts.partialWord) === 0 }) } console.error([er && er.stack, compls, opts.partialWord]) if (er || compls.length === 0) return cb(er) output(compls.join('\n')) cb() } } // the current word has a dash. Return the config names, // with the same number of dashes as the current word has. function configCompl (opts, cb) { var word = opts.word var split = word.match(/^(-+)((?:no-)*)(.*)$/) var dashes = split[1] var no = split[2] var flags = configNames.filter(isFlag) console.error(flags) return cb(null, allConfs.map(function (c) { return dashes + c }).concat(flags.map(function (f) { return dashes + (no || 'no-') + f }))) } // expand with the valid values of various config values. // not yet implemented. function configValueCompl (opts, cb) { console.error('configValue', opts) return cb(null, []) } // check if the thing is a flag or not. function isFlag (word) { // shorthands never take args. var split = word.match(/^(-*)((?:no-)+)?(.*)$/) var no = split[2] var conf = split[3] return no || configTypes[conf] === Boolean || shorthands[conf] } // complete against the npm commands function cmdCompl (opts, cb) { return cb(null, npm.fullList) }
Save
cmd:
run