Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRuy Adorno <ruyadorno@hotmail.com>2020-12-08 22:10:20 +0300
committerisaacs <i@izs.me>2020-12-09 02:58:51 +0300
commitb7d74b627859f08fca23209d6e0d3ec6657a4489 (patch)
treebe0f9ad88faa5a47d2150ebfcc0446f4b4ef014d /lib
parent3db90d94474f673591811fdab5eb6a5bfdeba261 (diff)
fix: minor tweaks to lib/unpublish.js
- Fix handling missing files error on reading package.json - Fixes autocompletion - Fixes printing name and version when using no args - Adds `test/lib/unpublish.js` tests Fixes: https://github.com/npm/statusboard/issues/180 PR-URL: https://github.com/npm/cli/pull/2304 Credit: @ruyadorno Close: #2304 Reviewed-by: @isaacs
Diffstat (limited to 'lib')
-rw-r--r--lib/unpublish.js55
1 files changed, 31 insertions, 24 deletions
diff --git a/lib/unpublish.js b/lib/unpublish.js
index 4d05627d2..d6dbc8d6e 100644
--- a/lib/unpublish.js
+++ b/lib/unpublish.js
@@ -1,3 +1,5 @@
+'use strict'
+
const path = require('path')
const util = require('util')
const log = require('npmlog')
@@ -11,7 +13,7 @@ const npm = require('./npm.js')
const usageUtil = require('./utils/usage.js')
const output = require('./utils/output.js')
const otplease = require('./utils/otplease.js')
-const whoami = util.promisify(require('./whoami.js'))
+const getIdentity = require('./utils/get-identity.js')
const usage = usageUtil('unpublish', 'npm unpublish [<@scope>/]<pkg>[@<version>]')
@@ -25,18 +27,18 @@ const completionFn = async (args) => {
const { partialWord, conf } = args
if (conf.argv.remain.length >= 3)
- return
+ return []
- const username = await whoami([], true)
+ const opts = npm.flatOptions
+ const username = await getIdentity({ ...opts }).catch(() => null)
if (!username)
return []
- const opts = npm.flatOptions
const access = await libaccess.lsPackages(username, opts)
// do a bit of filtering at this point, so that we don't need
// to fetch versions for more than one thing, but also don't
// accidentally a whole project
- let pkgs = Object.keys(access)
+ let pkgs = Object.keys(access || {})
if (!partialWord || !pkgs.length)
return pkgs
@@ -55,18 +57,20 @@ const completionFn = async (args) => {
async function unpublish (args) {
if (args.length > 1)
- throw usage
+ throw new Error(usage)
const spec = args.length && npa(args[0])
const opts = npm.flatOptions
const { force, silent, loglevel } = opts
- let ret
+ let res
+ let pkgName
+ let pkgVersion
log.silly('unpublish', 'args[0]', args[0])
log.silly('unpublish', 'spec', spec)
if (!spec.rawSpec && !force) {
- throw (
+ throw new Error(
'Refusing to delete entire project.\n' +
'Run with --force to do this.\n' +
usage
@@ -77,31 +81,34 @@ async function unpublish (args) {
// if there's a package.json in the current folder, then
// read the package name and version out of that.
const pkgJson = path.join(npm.localPrefix, 'package.json')
- const manifest = await readJson(pkgJson)
-
- log.verbose('unpublish', manifest)
-
- const { name, version, publishConfig } = manifest
- const pkgJsonSpec = npa.resolve(name, version)
-
+ let manifest
try {
- ret = await otplease(opts, opts => libunpub(pkgJsonSpec, { ...opts, publishConfig }))
+ manifest = await readJson(pkgJson)
} catch (err) {
if (err && err.code !== 'ENOENT' && err.code !== 'ENOTDIR')
throw err
else
- throw `Usage: ${usage}`
+ throw new Error(`Usage: ${usage}`)
}
- } else
- ret = await otplease(opts, opts => libunpub(spec, opts))
- if (!silent && loglevel !== 'silent') {
- output(`- ${spec.name}${
- spec.type === 'version' ? `@${spec.rawSpec}` : ''
- }`)
+ log.verbose('unpublish', manifest)
+
+ const { name, version, publishConfig } = manifest
+ const pkgJsonSpec = npa.resolve(name, version)
+
+ res = await otplease(opts, opts => libunpub(pkgJsonSpec, { ...opts, publishConfig }))
+ pkgName = name
+ pkgVersion = version ? `@${version}` : ''
+ } else {
+ res = await otplease(opts, opts => libunpub(spec, opts))
+ pkgName = spec.name
+ pkgVersion = spec.type === 'version' ? `@${spec.rawSpec}` : ''
}
- return ret
+ if (!silent && loglevel !== 'silent')
+ output(`- ${pkgName}${pkgVersion}`)
+
+ return res
}
module.exports = Object.assign(cmd, { completion, usage })