summaryrefslogtreecommitdiff
path: root/deps/npm/lib/utils/error-handler.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/lib/utils/error-handler.js')
-rw-r--r--deps/npm/lib/utils/error-handler.js192
1 files changed, 76 insertions, 116 deletions
diff --git a/deps/npm/lib/utils/error-handler.js b/deps/npm/lib/utils/error-handler.js
index 902ad7af9b..16abcd67ce 100644
--- a/deps/npm/lib/utils/error-handler.js
+++ b/deps/npm/lib/utils/error-handler.js
@@ -1,40 +1,37 @@
-
-module.exports = errorHandler
-module.exports.exit = exit
-
-var cbCalled = false
-var log = require('npmlog')
-var npm = require('../npm.js')
-var itWorked = false
-var path = require('path')
-var wroteLogFile = false
-var exitCode = 0
-var rollbacks = npm.rollbacks
-var chain = require('slide').chain
-var errorMessage = require('./error-message.js')
-var replaceInfo = require('./replace-info.js')
-var stopMetrics = require('./metrics.js').stop
+let cbCalled = false
+const log = require('npmlog')
+const npm = require('../npm.js')
+let itWorked = false
+const path = require('path')
+let wroteLogFile = false
+let exitCode = 0
+const errorMessage = require('./error-message.js')
+const stopMetrics = require('./metrics.js').stop
const cacheFile = require('./cache-file.js')
-var logFileName
-function getLogFile () {
+let logFileName
+const getLogFile = () => {
if (!logFileName) {
logFileName = path.resolve(npm.config.get('cache'), '_logs', (new Date()).toISOString().replace(/[.:]/g, '_') + '-debug.log')
}
return logFileName
}
-var timings = {
+const timings = {
version: npm.version,
command: process.argv.slice(2),
logfile: null
}
-process.on('timing', function (name, value) {
- if (timings[name]) { timings[name] += value } else { timings[name] = value }
+process.on('timing', (name, value) => {
+ if (timings[name]) {
+ timings[name] += value
+ } else {
+ timings[name] = value
+ }
})
-process.on('exit', function (code) {
+process.on('exit', code => {
process.emit('timeEnd', 'npm')
log.disableProgress()
if (npm.config && npm.config.loaded && npm.config.get('timing')) {
@@ -57,7 +54,7 @@ process.on('exit', function (code) {
log.error('', 'cb() never called!')
console.error('')
log.error('', 'This is an error with npm itself. Please report this error at:')
- log.error('', ' <https://npm.community>')
+ log.error('', ' <https://github.com/npm/cli/issues>')
writeLogFile()
}
@@ -80,54 +77,20 @@ process.on('exit', function (code) {
wroteLogFile = false
}
- var doExit = npm.config && npm.config.loaded && npm.config.get('_exit')
- if (doExit) {
- // actually exit.
- if (exitCode === 0 && !itWorked) {
- exitCode = 1
- }
- if (exitCode !== 0) process.exit(exitCode)
- } else {
- itWorked = false // ready for next exit
+ // actually exit.
+ if (exitCode === 0 && !itWorked) {
+ exitCode = 1
}
+ if (exitCode !== 0) process.exit(exitCode)
})
-function exit (code, noLog) {
+const exit = (code, noLog) => {
exitCode = exitCode || process.exitCode || code
- var doExit = npm.config && npm.config.loaded ? npm.config.get('_exit') : true
- log.verbose('exit', [code, doExit])
+ log.verbose('exit', code)
if (log.level === 'silent') noLog = true
- if (rollbacks.length) {
- chain(rollbacks.map(function (f) {
- return function (cb) {
- npm.commands.unbuild([f], true, cb)
- }
- }), function (er) {
- if (er) {
- log.error('error rolling back', er)
- if (!code) {
- errorHandler(er)
- } else {
- if (!noLog) writeLogFile()
- reallyExit(er)
- }
- } else {
- if (!noLog && code) writeLogFile()
- reallyExit()
- }
- })
- rollbacks.length = 0
- } else if (code && !noLog) {
- writeLogFile()
- } else {
- reallyExit()
- }
-
- function reallyExit (er) {
- if (er && !code) code = typeof er.errno === 'number' ? er.errno : 1
-
+ const reallyExit = () => {
itWorked = !code
// Exit directly -- nothing in the CLI should still be running in the
@@ -139,9 +102,15 @@ function exit (code, noLog) {
process.exit(code)
})
}
+
+ if (code && !noLog) {
+ writeLogFile()
+ } else {
+ reallyExit()
+ }
}
-function errorHandler (er) {
+const errorHandler = (er) => {
log.disableProgress()
if (!npm.config || !npm.config.loaded) {
// logging won't work unless we pretend that it's ready
@@ -153,6 +122,13 @@ function errorHandler (er) {
er = er || new Error('Callback called more than once.')
}
+ if (npm.updateNotification) {
+ const { level } = log
+ log.level = log.levels.notice
+ log.notice('', npm.updateNotification)
+ log.level = level
+ }
+
cbCalled = true
if (!er) return exit(0)
if (typeof er === 'string') {
@@ -163,50 +139,35 @@ function errorHandler (er) {
return exit(1, true)
}
- var m = er.code || er.message.match(/^(?:Error: )?(E[A-Z]+)/)
- if (m && !er.code) {
- er.code = m
+ if (!er.code) {
+ const matchErrorCode = er.message.match(/^(?:Error: )?(E[A-Z]+)/)
+ er.code = matchErrorCode && matchErrorCode[1]
}
- ;[
- 'type',
- 'stack',
- 'statusCode',
- 'pkgid'
- ].forEach(function (k) {
- var v = er[k]
- if (!v) return
- v = replaceInfo(v)
- log.verbose(k, v)
- })
+ for (const k of ['type', 'stack', 'statusCode', 'pkgid']) {
+ const v = er[k]
+ if (v) log.verbose(k, v)
+ }
log.verbose('cwd', process.cwd())
- var os = require('os')
- var args = replaceInfo(process.argv)
+ const os = require('os')
log.verbose('', os.type() + ' ' + os.release())
- log.verbose('argv', args.map(JSON.stringify).join(' '))
+ log.verbose('argv', process.argv.map(JSON.stringify).join(' '))
log.verbose('node', process.version)
log.verbose('npm ', 'v' + npm.version)
- ;[
- 'code',
- 'syscall',
- 'file',
- 'path',
- 'dest',
- 'errno'
- ].forEach(function (k) {
- var v = er[k]
+ for (const k of ['code', 'syscall', 'file', 'path', 'dest', 'errno']) {
+ const v = er[k]
if (v) log.error(k, v)
- })
+ }
- var msg = errorMessage(er)
- msg.summary.concat(msg.detail).forEach(function (errline) {
- log.error.apply(log, errline)
- })
+ const msg = errorMessage(er)
+ for (const errline of [...msg.summary, ...msg.detail]) {
+ log.error(...errline)
+ }
if (npm.config && npm.config.get('json')) {
- var error = {
+ const error = {
error: {
code: er.code,
summary: messageText(msg.summary),
@@ -216,32 +177,28 @@ function errorHandler (er) {
console.log(JSON.stringify(error, null, 2))
}
- exit(typeof er.errno === 'number' ? er.errno : 1)
+ exit(typeof er.errno === 'number' ? er.errno : typeof er.code === 'number' ? er.code : 1)
}
-function messageText (msg) {
- return msg.map(function (line) {
- return line.slice(1).join(' ')
- }).join('\n')
-}
+const messageText = msg => msg.map(line => line.slice(1).join(' ')).join('\n')
-function writeLogFile () {
+const writeLogFile = () => {
if (wroteLogFile) return
- var os = require('os')
+ const os = require('os')
try {
- var logOutput = ''
- log.record.forEach(function (m) {
- var pref = [m.id, m.level]
- if (m.prefix) pref.push(m.prefix)
- pref = pref.join(' ')
-
- m.message.trim().split(/\r?\n/).map(function (line) {
- return (pref + ' ' + line).trim()
- }).forEach(function (line) {
- logOutput += line + os.EOL
- })
+ let logOutput = ''
+ log.record.forEach(m => {
+ const p = [m.id, m.level]
+ if (m.prefix) p.push(m.prefix)
+ const pref = p.join(' ')
+
+ m.message.trim().split(/\r?\n/)
+ .map(line => (pref + ' ' + line).trim())
+ .forEach(line => {
+ logOutput += line + os.EOL
+ })
})
cacheFile.write(getLogFile(), logOutput)
@@ -252,3 +209,6 @@ function writeLogFile () {
}
}
+
+module.exports = errorHandler
+module.exports.exit = exit