mirror of
https://github.com/nodejs/node.git
synced 2025-05-16 05:43:02 +00:00

PR-URL: https://github.com/nodejs/node/pull/40726 Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Voltrex <mohammadkeyvanzade94@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Rich Trott <rtrott@gmail.com>
88 lines
2.2 KiB
JavaScript
88 lines
2.2 KiB
JavaScript
const fetch = require('npm-registry-fetch')
|
|
const log = require('npmlog')
|
|
const npa = require('npm-package-arg')
|
|
|
|
const getIdentity = require('../utils/get-identity')
|
|
|
|
const BaseCommand = require('../base-command.js')
|
|
class Star extends BaseCommand {
|
|
static get description () {
|
|
return 'Mark your favorite packages'
|
|
}
|
|
|
|
/* istanbul ignore next - see test/lib/load-all-commands.js */
|
|
static get name () {
|
|
return 'star'
|
|
}
|
|
|
|
/* istanbul ignore next - see test/lib/load-all-commands.js */
|
|
static get usage () {
|
|
return ['[<pkg>...]']
|
|
}
|
|
|
|
/* istanbul ignore next - see test/lib/load-all-commands.js */
|
|
static get params () {
|
|
return [
|
|
'registry',
|
|
'unicode',
|
|
]
|
|
}
|
|
|
|
async exec (args) {
|
|
if (!args.length)
|
|
throw this.usageError()
|
|
|
|
// if we're unstarring, then show an empty star image
|
|
// otherwise, show the full star image
|
|
const unicode = this.npm.config.get('unicode')
|
|
const unstar = this.npm.config.get('star.unstar')
|
|
const full = unicode ? '\u2605 ' : '(*)'
|
|
const empty = unicode ? '\u2606 ' : '( )'
|
|
const show = unstar ? empty : full
|
|
|
|
const pkgs = args.map(npa)
|
|
for (const pkg of pkgs) {
|
|
const [username, fullData] = await Promise.all([
|
|
getIdentity(this.npm, this.npm.flatOptions),
|
|
fetch.json(pkg.escapedName, {
|
|
...this.npm.flatOptions,
|
|
spec: pkg,
|
|
query: { write: true },
|
|
preferOnline: true,
|
|
}),
|
|
])
|
|
|
|
if (!username)
|
|
throw new Error('You need to be logged in!')
|
|
|
|
const body = {
|
|
_id: fullData._id,
|
|
_rev: fullData._rev,
|
|
users: fullData.users || {},
|
|
}
|
|
|
|
if (!unstar) {
|
|
log.info('star', 'starring', body._id)
|
|
body.users[username] = true
|
|
log.verbose('star', 'starring', body)
|
|
} else {
|
|
delete body.users[username]
|
|
log.info('unstar', 'unstarring', body._id)
|
|
log.verbose('unstar', 'unstarring', body)
|
|
}
|
|
|
|
const data = await fetch.json(pkg.escapedName, {
|
|
...this.npm.flatOptions,
|
|
spec: pkg,
|
|
method: 'PUT',
|
|
body,
|
|
})
|
|
|
|
this.npm.output(show + ' ' + pkg.name)
|
|
log.verbose('star', data)
|
|
return data
|
|
}
|
|
}
|
|
}
|
|
module.exports = Star
|