|
1 | 1 | 'use strict' |
2 | 2 |
|
3 | | -const fs = require('fs') |
4 | | -const rm = require('rimraf') |
| 3 | +const fs = require('graceful-fs') |
| 4 | +const rimraf = require('rimraf') |
| 5 | +const util = require('util') |
5 | 6 | const path = require('path') |
6 | 7 | const log = require('npmlog') |
7 | 8 | const semver = require('semver') |
8 | 9 |
|
9 | | -function remove (gyp, argv, callback) { |
10 | | - var devDir = gyp.devDir |
11 | | - log.verbose('remove', 'using node-gyp dir:', devDir) |
| 10 | +async function remove (gyp, argv) { |
| 11 | + log.verbose('remove', 'using node-gyp dir:', gyp.devDir) |
12 | 12 |
|
13 | 13 | // get the user-specified version to remove |
14 | | - var version = argv[0] || gyp.opts.target |
| 14 | + let version = argv[0] || gyp.opts.target |
15 | 15 | log.verbose('remove', 'removing target version:', version) |
16 | 16 |
|
17 | 17 | if (!version) { |
18 | | - return callback(new Error('You must specify a version number to remove. Ex: "' + process.version + '"')) |
| 18 | + throw new Error(`You must specify a version number to remove. Ex: "${process.version}"`) |
19 | 19 | } |
20 | 20 |
|
21 | | - var versionSemver = semver.parse(version) |
| 21 | + const versionSemver = semver.parse(version) |
22 | 22 | if (versionSemver) { |
23 | 23 | // flatten the version Array into a String |
24 | 24 | version = versionSemver.version |
25 | 25 | } |
26 | 26 |
|
27 | | - var versionPath = path.resolve(gyp.devDir, version) |
| 27 | + const versionPath = path.resolve(gyp.devDir, version) |
28 | 28 | log.verbose('remove', 'removing development files for version:', version) |
29 | 29 |
|
30 | 30 | // first check if its even installed |
31 | | - fs.stat(versionPath, function (err) { |
| 31 | + try { |
| 32 | + await fs.promises.stat(versionPath) |
| 33 | + } catch (err) { |
32 | 34 | if (err) { |
33 | 35 | if (err.code === 'ENOENT') { |
34 | | - callback(null, 'version was already uninstalled: ' + version) |
35 | | - } else { |
36 | | - callback(err) |
| 36 | + return 'version was already uninstalled: ' + version |
37 | 37 | } |
38 | | - return |
| 38 | + throw err |
39 | 39 | } |
40 | | - // Go ahead and delete the dir |
41 | | - rm(versionPath, callback) |
42 | | - }) |
| 40 | + } |
| 41 | + |
| 42 | + // Go ahead and delete the dir |
| 43 | + return util.promisify(rimraf)(versionPath) |
43 | 44 | } |
44 | 45 |
|
45 | | -module.exports = exports = remove |
| 46 | +module.exports = function (gyp, argv, callback) { |
| 47 | + return remove(gyp, argv).then(callback.bind(undefined, null), callback) |
| 48 | +} |
46 | 49 | module.exports.usage = 'Removes the node development files for the specified version' |
0 commit comments