PHP 8.2.31
Preview: org.js Size: 3.96 KB
/opt/alt/alt-nodejs24/root/usr/lib/node_modules/npm/lib/commands/org.js

const liborg = require('libnpmorg')
const { otplease } = require('../utils/auth.js')
const BaseCommand = require('../base-cmd.js')
const { output } = require('proc-log')

class Org extends BaseCommand {
  static description = 'Manage orgs'
  static name = 'org'
  static usage = [
    'set orgname username [developer | admin | owner]',
    'rm orgname username',
    'ls orgname [<username>]',
  ]

  static params = ['registry', 'otp', 'json', 'parseable']

  static async completion (opts) {
    const argv = opts.conf.argv.remain
    if (argv.length === 2) {
      return ['set', 'rm', 'ls']
    }

    switch (argv[2]) {
      case 'ls':
      case 'add':
      case 'rm':
      case 'set':
        return []
      default:
        throw new Error(argv[2] + ' not recognized')
    }
  }

  async exec ([cmd, orgname, username, role]) {
    return otplease(this.npm, {
      ...this.npm.flatOptions,
    }, opts => {
      switch (cmd) {
        case 'add':
        case 'set':
          return this.set(orgname, username, role, opts)
        case 'rm':
          return this.rm(orgname, username, opts)
        case 'ls':
          return this.ls(orgname, username, opts)
        default:
          throw this.usageError()
      }
    })
  }

  async set (org, user, role, opts) {
    role = role || 'developer'
    if (!org) {
      throw new Error('First argument `orgname` is required.')
    }

    if (!user) {
      throw new Error('Second argument `username` is required.')
    }

    if (!['owner', 'admin', 'developer'].find(x => x === role)) {
      throw new Error(
        'Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.'
      )
    }

    const memDeets = await liborg.set(org, user, role, opts)
    if (opts.json) {
      output.standard(JSON.stringify(memDeets, null, 2))
    } else if (opts.parseable) {
      output.standard(['org', 'orgsize', 'user', 'role'].join('\t'))
      output.standard(
        [memDeets.org.name, memDeets.org.size, memDeets.user, memDeets.role].join('\t')
      )
    } else if (!this.npm.silent) {
      output.standard(
        `Added ${memDeets.user} as ${memDeets.role} to ${memDeets.org.name}. You now have ${
            memDeets.org.size
          } member${memDeets.org.size === 1 ? '' : 's'} in this org.`
      )
    }

    return memDeets
  }

  async rm (org, user, opts) {
    if (!org) {
      throw new Error('First argument `orgname` is required.')
    }

    if (!user) {
      throw new Error('Second argument `username` is required.')
    }

    await liborg.rm(org, user, opts)
    const roster = await liborg.ls(org, opts)
    user = user.replace(/^[~@]?/, '')
    org = org.replace(/^[~@]?/, '')
    const userCount = Object.keys(roster).length
    if (opts.json) {
      output.buffer({
        user,
        org,
        userCount,
        deleted: true,
      })
    } else if (opts.parseable) {
      output.standard(['user', 'org', 'userCount', 'deleted'].join('\t'))
      output.standard([user, org, userCount, true].join('\t'))
    } else if (!this.npm.silent) {
      output.standard(
        `Successfully removed ${user} from ${org}. You now have ${userCount} member${userCount === 1 ? '' : 's'} in this org.`
      )
    }
  }

  async ls (org, user, opts) {
    if (!org) {
      throw new Error('First argument `orgname` is required.')
    }

    let roster = await liborg.ls(org, opts)
    if (user) {
      const newRoster = {}
      if (roster[user]) {
        newRoster[user] = roster[user]
      }

      roster = newRoster
    }
    if (opts.json) {
      output.buffer(roster)
    } else if (opts.parseable) {
      output.standard(['user', 'role'].join('\t'))
      Object.keys(roster).forEach(u => {
        output.standard([u, roster[u]].join('\t'))
      })
    } else if (!this.npm.silent) {
      const chalk = this.npm.chalk
      for (const u of Object.keys(roster).sort()) {
        output.standard(`${u} - ${chalk.cyan(roster[u])}`)
      }
    }
  }
}

module.exports = Org

Directory Contents

Dirs: 1 × Files: 67

Name Size Perms Modified Actions
trust DIR
- drwxr-xr-x 2026-05-14 21:13:30
Edit Download
6.17 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.29 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.17 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
847 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
11.48 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
4.24 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
10.83 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
11.48 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.42 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.43 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
7.92 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
5.50 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
449 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
9.99 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.72 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.39 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.55 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.11 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
578 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
6.38 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
538 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
5.53 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.64 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
7.02 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
308 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
303 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
5.10 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
5.24 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
234 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.29 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.42 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
18.03 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.96 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
7.92 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
5.95 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.77 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
873 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.58 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
309 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
10.30 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
770 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
9.47 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.75 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.15 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.24 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
303 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
295 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
6.27 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
4.47 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.83 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
632 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
2.63 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.88 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.03 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
293 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
288 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
4.33 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
288 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
7.96 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
302 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.49 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
5.24 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
183 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download
1.69 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
3.54 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
13.48 KB lrw-r--r-- 2026-04-24 15:56:02
Edit Download
527 B lrw-r--r-- 2026-04-24 15:56:02
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).