diff options
author | Rebecca Turner <me@re-becca.org> | 2017-01-12 16:58:10 -0800 |
---|---|---|
committer | Jeremiah Senkpiel <fishrock123@rocketmail.com> | 2017-01-26 10:56:33 -0500 |
commit | f73bc91756373f4057b3fc139dc5968049fa8c2a (patch) | |
tree | 054d2dc51e9e0950542dae62569ea1aacaf8a015 /deps/npm/lib/doctor.js | |
parent | bfd3c7e626306cc5793618da2b56d37df338eb05 (diff) | |
download | android-node-v8-f73bc91756373f4057b3fc139dc5968049fa8c2a.tar.gz android-node-v8-f73bc91756373f4057b3fc139dc5968049fa8c2a.tar.bz2 android-node-v8-f73bc91756373f4057b3fc139dc5968049fa8c2a.zip |
deps: upgrade npm to 4.1.1
PR-URL: https://github.com/nodejs/node/pull/10781
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'deps/npm/lib/doctor.js')
-rw-r--r-- | deps/npm/lib/doctor.js | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/deps/npm/lib/doctor.js b/deps/npm/lib/doctor.js new file mode 100644 index 0000000000..f2037ab86c --- /dev/null +++ b/deps/npm/lib/doctor.js @@ -0,0 +1,109 @@ +var path = require('path') +var chain = require('slide').chain +var table = require('text-table') +var color = require('ansicolors') +var styles = require('ansistyles') +var semver = require('semver') +var npm = require('./npm.js') +var log = require('npmlog') +var ansiTrim = require('./utils/ansi-trim.js') +var output = require('./utils/output.js') +var defaultRegistry = require('./config/defaults.js').defaults.registry +var checkPing = require('./doctor/check-ping.js') +var getGitPath = require('./doctor/get-git-path.js') +var checksumCachedFiles = require('./doctor/checksum-cached-files.js') +var checkFilesPermission = require('./doctor/check-files-permission.js') +var getLatestNodejsVersion = require('./doctor/get-latest-nodejs-version.js') +var getLatestNpmVersion = require('./doctor/get-latest-npm-version') +var globalNodeModules = path.join(npm.config.globalPrefix, 'lib', 'node_modules') +var localNodeModules = path.join(npm.config.localPrefix, 'node_modules') + +module.exports = doctor + +doctor.usage = 'npm doctor' + +function doctor (args, silent, cb) { + args = args || {} + if (typeof cb !== 'function') { + cb = silent + silent = false + } + + var actionsToRun = [ + [checkPing], + [getLatestNpmVersion], + [getLatestNodejsVersion, args['node-url']], + [getGitPath], + [checkFilesPermission, npm.cache, 6], + [checkFilesPermission, globalNodeModules, 4], + [checkFilesPermission, localNodeModules, 6], + [checksumCachedFiles] + ] + + log.info('doctor', 'Running checkup') + chain(actionsToRun, function (stderr, stdout) { + if (stderr && stderr.message !== 'not found: git') return cb(stderr) + var outHead = ['Check', 'Value', 'Recommendation'] + var list = makePretty(stdout) + var outBody = list + + if (npm.color) { + outHead = outHead.map(function (item) { + return styles.underline(item) + }) + outBody = outBody.map(function (item) { + if (item[2]) { + item[0] = color.red(item[0]) + item[2] = color.magenta(item[2]) + } + return item + }) + } + + var outTable = [outHead].concat(outBody) + var tableOpts = { + stringLength: function (s) { return ansiTrim(s).length } + } + + if (!silent) output(table(outTable, tableOpts)) + + cb(null, list) + }) +} + +function makePretty (p) { + var ping = p[0] ? 'ok' : 'notOk' + var npmLTS = p[1] + var nodeLTS = p[2].replace('v', '') + var whichGit = p[3] || 'not installed' + var readbleCaches = p[4] ? 'ok' : 'notOk' + var executableGlobalModules = p[5] ? 'ok' : 'notOk' + var executableLocalModules = p[6] ? 'ok' : 'notOk' + var checksumCachedFiles = p[7] ? 'ok' : 'notOk' + var npmV = npm.version + var nodeV = process.version.replace('v', '') + var registry = npm.config.get('registry') + var list = [ + ['npm ping', ping], + ['npm -v', 'v' + npmV], + ['node -v', 'v' + nodeV], + ['npm config get registry', registry], + ['which git', whichGit], + ['Perms check on cached files', readbleCaches], + ['Perms check on global node_modules', executableGlobalModules], + ['Perms check on local node_modules', executableLocalModules], + ['Checksum cached files', checksumCachedFiles] + ] + + if (ping !== 'ok') list[0][2] = 'Check your internet connection' + if (!semver.satisfies(npmV, '>=' + npmLTS)) list[1][2] = 'Use npm v' + npmLTS + if (!semver.satisfies(nodeV, '>=' + nodeLTS)) list[2][2] = 'Use node v' + nodeLTS + if (registry !== defaultRegistry) list[3][2] = 'Try `npm config set registry ' + defaultRegistry + if (whichGit === 'not installed') list[4][2] = 'Install git and ensure it\'s in your PATH.' + if (readbleCaches !== 'ok') list[5][2] = 'Check the permissions of your files in ' + npm.config.get('cache') + if (executableGlobalModules !== 'ok') list[6][2] = globalNodeModules + ' must be readable and writable by the current user.' + if (executableLocalModules !== 'ok') list[7][2] = localNodeModules + ' must be readable and writable by the current user.' + if (checksumCachedFiles !== 'ok') list[8][2] = 'You have some broken packages in your cache.' + + return list +} |