| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | /* 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 = teamteam.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}))    }  })}
 |