diff options
Diffstat (limited to 'deps/npm/lib/uninstall.js')
-rw-r--r-- | deps/npm/lib/uninstall.js | 87 |
1 files changed, 50 insertions, 37 deletions
diff --git a/deps/npm/lib/uninstall.js b/deps/npm/lib/uninstall.js index 15995c0b3c..d7116e4c2d 100644 --- a/deps/npm/lib/uninstall.js +++ b/deps/npm/lib/uninstall.js @@ -2,49 +2,62 @@ const { resolve } = require('path') const Arborist = require('@npmcli/arborist') const rpj = require('read-package-json-fast') -const npm = require('./npm.js') const usageUtil = require('./utils/usage.js') const reifyFinish = require('./utils/reify-finish.js') const completion = require('./utils/completion/installed-shallow.js') -const usage = usageUtil( - 'uninstall', - 'npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|--no-save]' -) - -const cmd = (args, cb) => rm(args).then(() => cb()).catch(cb) - -const rm = async args => { - // the /path/to/node_modules/.. - const { global, prefix } = npm.flatOptions - const path = global ? resolve(npm.globalDir, '..') : prefix - - if (!args.length) { - if (!global) - throw new Error('Must provide a package name to remove') - else { - let pkg - - try { - pkg = await rpj(resolve(npm.localPrefix, 'package.json')) - } catch (er) { - if (er.code !== 'ENOENT' && er.code !== 'ENOTDIR') - throw er - else - throw usage - } +class Uninstall { + constructor (npm) { + this.npm = npm + } - args.push(pkg.name) - } + get usage () { + return usageUtil( + 'uninstall', + 'npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|--no-save]' + ) } - const arb = new Arborist({ ...npm.flatOptions, path }) + /* istanbul ignore next - see test/lib/load-all-commands.js */ + async completion (opts) { + return completion(this.npm, opts) + } - await arb.reify({ - ...npm.flatOptions, - rm: args, - }) - await reifyFinish(arb) -} + exec (args, cb) { + this.uninstall(args).then(() => cb()).catch(cb) + } -module.exports = Object.assign(cmd, { usage, completion }) + async uninstall (args) { + // the /path/to/node_modules/.. + const { global, prefix } = this.npm.flatOptions + const path = global ? resolve(this.npm.globalDir, '..') : prefix + + if (!args.length) { + if (!global) + throw new Error('Must provide a package name to remove') + else { + let pkg + + try { + pkg = await rpj(resolve(this.npm.localPrefix, 'package.json')) + } catch (er) { + if (er.code !== 'ENOENT' && er.code !== 'ENOTDIR') + throw er + else + throw this.usage + } + + args.push(pkg.name) + } + } + + const arb = new Arborist({ ...this.npm.flatOptions, path }) + + await arb.reify({ + ...this.npm.flatOptions, + rm: args, + }) + await reifyFinish(this.npm, arb) + } +} +module.exports = Uninstall |