/* eslint-disable standard/no-callback-literal */ const columns = require('cli-columns') const figgyPudding = require('figgy-pudding') const libteam = require('libnpm/team') const npmConfig = require('./config/figgy-config.js') const output = require('./utils/output.js') const otplease = require('./utils/otplease.js') const usage = require('./utils/usage') module.exports = team team.subcommands = ['create', 'destroy', 'add', 'rm', 'ls', 'edit'] team.usage = usage( 'team', 'npm team create <scope:team> [--otp <otpcode>]\n' + 'npm team destroy <scope:team> [--otp <otpcode>]\n' + 'npm team add <scope:team> <user> [--otp <otpcode>]\n' + 'npm team rm <scope:team> <user> [--otp <otpcode>]\n' + 'npm team ls <scope>|<scope:team>\n' + 'npm team edit <scope:team>' ) const TeamConfig = figgyPudding({ json: {}, loglevel: {}, parseable: {}, silent: {} }) function UsageError () { throw Object.assign(new Error(team.usage), {code: 'EUSAGE'}) } team.completion = function (opts, cb) { var argv = opts.conf.argv.remain if (argv.length === 2) { return cb(null, team.subcommands) } switch (argv[2]) { case 'ls': case 'create': case 'destroy': case 'add': case 'rm': case 'edit': return cb(null, []) default: return cb(new Error(argv[2] + ' not recognized')) } } function team ([cmd, entity = '', user = ''], cb) { // Entities are in the format <scope>:<team> otplease(npmConfig(), opts => { opts = TeamConfig(opts).concat({description: null}) entity = entity.replace(/^@/, '') switch (cmd) { case 'create': return teamCreate(entity, opts) case 'destroy': return teamDestroy(entity, opts) case 'add': return teamAdd(entity, user, opts) case 'rm': return teamRm(entity, user, opts) case 'ls': { const match = entity.match(/[^:]+:.+/) if (match) { return teamListUsers(entity, opts) } else { return teamListTeams(entity, opts) } } case 'edit': throw new Error('`npm team edit` is not implemented yet.') default: UsageError() } }).then( data => cb(null, data), err => err.code === 'EUSAGE' ? cb(err.message) : cb(err) ) } function teamCreate (entity, opts) { return libteam.create(entity, opts).then(() => { if (opts.json) { output(JSON.stringify({ created: true, team: entity })) } else if (opts.parseable) { output(`${entity}\tcreated`) } else if (!opts.silent && opts.loglevel !== 'silent') { output(`+@${entity}`) } }) } function teamDestroy (entity, opts) { return libteam.destroy(entity, opts).then(() => { if (opts.json) { output(JSON.stringify({ deleted: true, team: entity })) } else if (opts.parseable) { output(`${entity}\tdeleted`) } else if (!opts.silent && opts.loglevel !== 'silent') { output(`-@${entity}`) } }) } function teamAdd (entity, user, opts) { return libteam.add(user, entity, opts).then(() => { if (opts.json) { output(JSON.stringify({ added: true, team: entity, user })) } else if (opts.parseable) { output(`${user}\t${entity}\tadded`) } else if (!opts.silent && opts.loglevel !== 'silent') { output(`${user} added to @${entity}`) } }) } function teamRm (entity, user, opts) { return libteam.rm(user, entity, opts).then(() => { if (opts.json) { output(JSON.stringify({ removed: true, team: entity, user })) } else if (opts.parseable) { output(`${user}\t${entity}\tremoved`) } else if (!opts.silent && opts.loglevel !== 'silent') { output(`${user} removed from @${entity}`) } }) } function teamListUsers (entity, opts) { return libteam.lsUsers(entity, opts).then(users => { users = users.sort() if (opts.json) { output(JSON.stringify(users, null, 2)) } else if (opts.parseable) { output(users.join('\n')) } else if (!opts.silent && opts.loglevel !== 'silent') { output(`\n@${entity} has ${users.length} user${users.length === 1 ? '' : 's'}:\n`) output(columns(users, {padding: 1})) } }) } function teamListTeams (entity, opts) { return libteam.lsTeams(entity, opts).then(teams => { teams = teams.sort() if (opts.json) { output(JSON.stringify(teams, null, 2)) } else if (opts.parseable) { output(teams.join('\n')) } else if (!opts.silent && opts.loglevel !== 'silent') { output(`\n@${entity} has ${teams.length} team${teams.length === 1 ? '' : 's'}:\n`) output(columns(teams.map(t => `@${t}`), {padding: 1})) } }) }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
auth | Folder | 0755 |
|
|
config | Folder | 0755 |
|
|
doctor | Folder | 0755 |
|
|
install | Folder | 0755 |
|
|
search | Folder | 0755 |
|
|
utils | Folder | 0755 |
|
|
access.js | File | 5.54 KB | 0644 |
|
adduser.js | File | 1.31 KB | 0644 |
|
audit.js | File | 10.56 KB | 0644 |
|
bin.js | File | 515 B | 0644 |
|
bugs.js | File | 864 B | 0644 |
|
build.js | File | 4.44 KB | 0644 |
|
cache.js | File | 4.66 KB | 0644 |
|
ci.js | File | 1.31 KB | 0644 |
|
completion.js | File | 7.11 KB | 0644 |
|
config.js | File | 7.43 KB | 0644 |
|
dedupe.js | File | 4.88 KB | 0644 |
|
deprecate.js | File | 2.11 KB | 0644 |
|
dist-tag.js | File | 4.11 KB | 0644 |
|
docs.js | File | 1.04 KB | 0644 |
|
doctor.js | File | 3.98 KB | 0644 |
|
edit.js | File | 1.37 KB | 0644 |
|
explore.js | File | 1.67 KB | 0644 |
|
fetch-package-metadata.js | File | 3.97 KB | 0644 |
|
fetch-package-metadata.md | File | 1.77 KB | 0644 |
|
fund.js | File | 4.91 KB | 0644 |
|
get.js | File | 235 B | 0644 |
|
help-search.js | File | 5.64 KB | 0644 |
|
help.js | File | 6.35 KB | 0644 |
|
hook.js | File | 4.62 KB | 0644 |
|
init.js | File | 2.74 KB | 0644 |
|
install-ci-test.js | File | 486 B | 0644 |
|
install-test.js | File | 507 B | 0644 |
|
install.js | File | 36.47 KB | 0644 |
|
link.js | File | 5.6 KB | 0644 |
|
logout.js | File | 1.26 KB | 0644 |
|
ls.js | File | 16.09 KB | 0644 |
|
npm.js | File | 14.37 KB | 0644 |
|
org.js | File | 4.18 KB | 0644 |
|
outdated.js | File | 12.28 KB | 0644 |
|
owner.js | File | 6.6 KB | 0644 |
|
pack.js | File | 11.79 KB | 0644 |
|
ping.js | File | 1.11 KB | 0644 |
|
prefix.js | File | 330 B | 0644 |
|
profile.js | File | 11.13 KB | 0644 |
|
prune.js | File | 2.23 KB | 0644 |
|
publish.js | File | 5.14 KB | 0644 |
|
rebuild.js | File | 2.09 KB | 0644 |
|
repo.js | File | 1.44 KB | 0644 |
|
restart.js | File | 64 B | 0644 |
|
root.js | File | 320 B | 0644 |
|
run-script.js | File | 5.41 KB | 0644 |
|
search.js | File | 3.36 KB | 0644 |
|
set.js | File | 276 B | 0644 |
|
shrinkwrap.js | File | 9.82 KB | 0644 |
|
star.js | File | 2.11 KB | 0644 |
|
stars.js | File | 1.03 KB | 0644 |
|
start.js | File | 62 B | 0644 |
|
stop.js | File | 61 B | 0644 |
|
substack.js | File | 509 B | 0644 |
|
team.js | File | 4.61 KB | 0644 |
|
test.js | File | 374 B | 0644 |
|
token.js | File | 6.66 KB | 0644 |
|
unbuild.js | File | 4.27 KB | 0644 |
|
uninstall.js | File | 2.21 KB | 0644 |
|
unpublish.js | File | 3.51 KB | 0644 |
|
update.js | File | 2.16 KB | 0644 |
|
version.js | File | 9.79 KB | 0644 |
|
view.js | File | 15.11 KB | 0644 |
|
visnup.js | File | 4.01 KB | 0644 |
|
whoami.js | File | 1.77 KB | 0644 |
|
xmas.js | File | 1.62 KB | 0644 |
|