diff --git a/packages/build/src/error/clean_stack.js b/packages/build/src/error/clean_stack.js index c46d28def2..d3e7130e86 100644 --- a/packages/build/src/error/clean_stack.js +++ b/packages/build/src/error/clean_stack.js @@ -11,7 +11,12 @@ const stripAnsi = require('strip-ansi') // Keep non stack trace lines as is. // We do not use libraries that patch `Error.prepareStackTrace()` because they // tend to create issues. -const cleanStacks = function(string) { +const cleanStacks = function(string, rawStack) { + // Internal errors / bugs keep their full stack trace + if (rawStack || string === undefined) { + return string + } + return String(string) .split('\n') .reduce(cleanStackLine, '') diff --git a/packages/build/src/error/serialize.js b/packages/build/src/error/serialize.js index f89fe7f70c..befa865df0 100644 --- a/packages/build/src/error/serialize.js +++ b/packages/build/src/error/serialize.js @@ -30,14 +30,14 @@ const CLEANED_ERROR_PROPS = [INFO_SYM, 'requireStack'] // Retrieve body to print in logs const getBody = function({ - typeInfo: { stackType, getLocation, showErrorProps }, + typeInfo: { stackType, getLocation, showErrorProps, rawStack }, message, stack, errorProps, location = {}, plugin = {}, }) { - const { message: messageA, stack: stackA } = getStackInfo({ message, stack, stackType }) + const { message: messageA, stack: stackA } = getStackInfo({ message, stack, stackType, rawStack }) const messageBlock = { name: 'Error message', value: messageA } const pluginBlock = getPluginBlock(plugin) const locationBlock = getLocationBlock({ stack: stackA, location, getLocation }) diff --git a/packages/build/src/error/stack.js b/packages/build/src/error/stack.js index c877b20d7f..1f24e80a12 100644 --- a/packages/build/src/error/stack.js +++ b/packages/build/src/error/stack.js @@ -1,30 +1,25 @@ const { cleanStacks } = require('./clean_stack') // Retrieve the stack trace -const getStackInfo = function({ message, stack, stackType }) { +const getStackInfo = function({ message, stack, stackType, rawStack }) { + const { message: messageA, stack: stackA } = splitStackInfo({ message, stack, stackType }) + const stackB = cleanStacks(stackA, rawStack) + return { message: messageA, stack: stackB } +} + +const splitStackInfo = function({ message, stack, stackType }) { // Some errors should not show any stack trace if (stackType === 'none') { return { message } } - // Some errors should show `error.stack` as is, without cleaning it - if (stackType === 'stack') { - return splitStack(stack) - } - - return splitStackInfo(message) -} - -// Some errors have the stack trace inside `error.message` instead of -// `error.stack` due to IPC -const splitStackInfo = function(string) { - const { message, stack } = splitStack(string) - if (stack === undefined) { - return { message } + // Some errors have their stack trace inside `error.message` instead of + // `error.stack` due to IPC + if (stackType === 'message') { + return splitStack(message) } - const stackA = cleanStacks(stack) - return { message, stack: stackA } + return splitStack(stack) } const splitStack = function(string) { diff --git a/packages/build/src/error/type.js b/packages/build/src/error/type.js index 34ca6549af..ea2ed7dff9 100644 --- a/packages/build/src/error/type.js +++ b/packages/build/src/error/type.js @@ -16,7 +16,7 @@ const TYPES = { pluginLoad: { header: 'Build failed', stackType: 'message', getLocation: getPluginLoadLocation }, shellCommand: { header: 'Build failed', stackType: 'message', getLocation: getShellCommandLocation }, pluginCommand: { header: 'Build failed', stackType: 'message', getLocation: getPluginCommandLocation }, - internalError: { header: 'Internal error', stackType: 'stack', showErrorProps: true }, + internalError: { header: 'Internal error', stackType: 'stack', showErrorProps: true, rawStack: true }, } // When no error type matches, it's an uncaught exception, i.e. a bug const DEFAULT_TYPE = 'internalError' diff --git a/packages/build/tests/cache/main/snapshots/tests.js.snap b/packages/build/tests/cache/main/snapshots/tests.js.snap index 14c715378b..4387c5a3ac 100644 Binary files a/packages/build/tests/cache/main/snapshots/tests.js.snap and b/packages/build/tests/cache/main/snapshots/tests.js.snap differ diff --git a/packages/build/tests/config/cwd/snapshots/tests.js.snap b/packages/build/tests/config/cwd/snapshots/tests.js.snap index 33542bbe9d..584baa2b69 100644 Binary files a/packages/build/tests/config/cwd/snapshots/tests.js.snap and b/packages/build/tests/config/cwd/snapshots/tests.js.snap differ diff --git a/packages/build/tests/config/load/snapshots/tests.js.snap b/packages/build/tests/config/load/snapshots/tests.js.snap index 686ef665b1..ffc7c0f486 100644 Binary files a/packages/build/tests/config/load/snapshots/tests.js.snap and b/packages/build/tests/config/load/snapshots/tests.js.snap differ diff --git a/packages/build/tests/config/normalize/snapshots/tests.js.snap b/packages/build/tests/config/normalize/snapshots/tests.js.snap index 60f55bf7bc..8ebaad6f7b 100644 Binary files a/packages/build/tests/config/normalize/snapshots/tests.js.snap and b/packages/build/tests/config/normalize/snapshots/tests.js.snap differ diff --git a/packages/build/tests/config/template/snapshots/tests.js.snap b/packages/build/tests/config/template/snapshots/tests.js.snap index 4a7d7469fa..3d333deb54 100644 Binary files a/packages/build/tests/config/template/snapshots/tests.js.snap and b/packages/build/tests/config/template/snapshots/tests.js.snap differ diff --git a/packages/build/tests/config/validate/snapshots/tests.js.snap b/packages/build/tests/config/validate/snapshots/tests.js.snap index 60c7f2ae97..7c71b78a94 100644 Binary files a/packages/build/tests/config/validate/snapshots/tests.js.snap and b/packages/build/tests/config/validate/snapshots/tests.js.snap differ diff --git a/packages/build/tests/core/cli/snapshots/tests.js.snap b/packages/build/tests/core/cli/snapshots/tests.js.snap index c10d9c6a56..5431ee87b6 100644 Binary files a/packages/build/tests/core/cli/snapshots/tests.js.snap and b/packages/build/tests/core/cli/snapshots/tests.js.snap differ diff --git a/packages/build/tests/core/commands/snapshots/tests.js.snap b/packages/build/tests/core/commands/snapshots/tests.js.snap index c04944e500..4ec3d29d2d 100644 Binary files a/packages/build/tests/core/commands/snapshots/tests.js.snap and b/packages/build/tests/core/commands/snapshots/tests.js.snap differ diff --git a/packages/build/tests/core/lifecycle/snapshots/tests.js.snap b/packages/build/tests/core/lifecycle/snapshots/tests.js.snap index aa4922ca4c..4f7b693e4a 100644 Binary files a/packages/build/tests/core/lifecycle/snapshots/tests.js.snap and b/packages/build/tests/core/lifecycle/snapshots/tests.js.snap differ diff --git a/packages/build/tests/error/plugin_load/snapshots/tests.js.snap b/packages/build/tests/error/plugin_load/snapshots/tests.js.snap index f769bf2312..b976a25642 100644 Binary files a/packages/build/tests/error/plugin_load/snapshots/tests.js.snap and b/packages/build/tests/error/plugin_load/snapshots/tests.js.snap differ diff --git a/packages/build/tests/error/stack/snapshots/tests.js.snap b/packages/build/tests/error/stack/snapshots/tests.js.snap index e5a50858f6..4bbfed0d91 100644 Binary files a/packages/build/tests/error/stack/snapshots/tests.js.snap and b/packages/build/tests/error/stack/snapshots/tests.js.snap differ diff --git a/packages/build/tests/plugins/api/snapshots/tests.js.snap b/packages/build/tests/plugins/api/snapshots/tests.js.snap index 7db3921bb2..43e8d21415 100644 Binary files a/packages/build/tests/plugins/api/snapshots/tests.js.snap and b/packages/build/tests/plugins/api/snapshots/tests.js.snap differ diff --git a/packages/build/tests/plugins/config/snapshots/tests.js.snap b/packages/build/tests/plugins/config/snapshots/tests.js.snap index 52e2e12b17..5e1a363560 100644 Binary files a/packages/build/tests/plugins/config/snapshots/tests.js.snap and b/packages/build/tests/plugins/config/snapshots/tests.js.snap differ diff --git a/packages/build/tests/plugins/constants/snapshots/tests.js.snap b/packages/build/tests/plugins/constants/snapshots/tests.js.snap index f33e760706..36fd76af38 100644 Binary files a/packages/build/tests/plugins/constants/snapshots/tests.js.snap and b/packages/build/tests/plugins/constants/snapshots/tests.js.snap differ diff --git a/packages/build/tests/plugins/duplicate/snapshots/tests.js.snap b/packages/build/tests/plugins/duplicate/snapshots/tests.js.snap index eaac36c81e..46822b084f 100644 Binary files a/packages/build/tests/plugins/duplicate/snapshots/tests.js.snap and b/packages/build/tests/plugins/duplicate/snapshots/tests.js.snap differ diff --git a/packages/build/tests/plugins/env/snapshots/tests.js.snap b/packages/build/tests/plugins/env/snapshots/tests.js.snap index e02fb590ba..9111cc367d 100644 Binary files a/packages/build/tests/plugins/env/snapshots/tests.js.snap and b/packages/build/tests/plugins/env/snapshots/tests.js.snap differ diff --git a/packages/build/tests/plugins/functions/snapshots/tests.js.snap b/packages/build/tests/plugins/functions/snapshots/tests.js.snap index 9964e37635..e0cd211bba 100644 Binary files a/packages/build/tests/plugins/functions/snapshots/tests.js.snap and b/packages/build/tests/plugins/functions/snapshots/tests.js.snap differ diff --git a/packages/build/tests/plugins/install/snapshots/tests.js.snap b/packages/build/tests/plugins/install/snapshots/tests.js.snap index 8f9ce072b2..0792e3a1a6 100644 Binary files a/packages/build/tests/plugins/install/snapshots/tests.js.snap and b/packages/build/tests/plugins/install/snapshots/tests.js.snap differ diff --git a/packages/build/tests/plugins/load/snapshots/tests.js.snap b/packages/build/tests/plugins/load/snapshots/tests.js.snap index da1a2db471..ed1e8d80e9 100644 Binary files a/packages/build/tests/plugins/load/snapshots/tests.js.snap and b/packages/build/tests/plugins/load/snapshots/tests.js.snap differ diff --git a/packages/build/tests/plugins/validate/snapshots/tests.js.snap b/packages/build/tests/plugins/validate/snapshots/tests.js.snap index 9c1ca32d8b..c26f274045 100644 Binary files a/packages/build/tests/plugins/validate/snapshots/tests.js.snap and b/packages/build/tests/plugins/validate/snapshots/tests.js.snap differ diff --git a/packages/build/tests/utils/cache/snapshots/tests.js.snap b/packages/build/tests/utils/cache/snapshots/tests.js.snap index 1533b1a0c1..a50534d1db 100644 Binary files a/packages/build/tests/utils/cache/snapshots/tests.js.snap and b/packages/build/tests/utils/cache/snapshots/tests.js.snap differ diff --git a/packages/build/tests/utils/git/snapshots/tests.js.snap b/packages/build/tests/utils/git/snapshots/tests.js.snap index 7302f7b857..4d110c3d3b 100644 Binary files a/packages/build/tests/utils/git/snapshots/tests.js.snap and b/packages/build/tests/utils/git/snapshots/tests.js.snap differ diff --git a/packages/build/tests/utils/load/snapshots/tests.js.snap b/packages/build/tests/utils/load/snapshots/tests.js.snap index 8e647c4557..7091915e8f 100644 Binary files a/packages/build/tests/utils/load/snapshots/tests.js.snap and b/packages/build/tests/utils/load/snapshots/tests.js.snap differ diff --git a/packages/build/tests/utils/run/snapshots/tests.js.snap b/packages/build/tests/utils/run/snapshots/tests.js.snap index aec5736e53..cf154d1866 100644 Binary files a/packages/build/tests/utils/run/snapshots/tests.js.snap and b/packages/build/tests/utils/run/snapshots/tests.js.snap differ