From 9c52a4383522c5ab562bc3d2fc9d98e53c97ff87 Mon Sep 17 00:00:00 2001 From: ehmicky Date: Thu, 30 Jul 2020 12:52:16 +0200 Subject: [PATCH] Fix error handling of invalid errors --- packages/build/src/error/parse/normalize.js | 21 +++ packages/build/src/error/parse/parse.js | 9 +- packages/build/src/plugins/child/error.js | 4 +- .../fixtures/exception_array/manifest.yml | 2 + .../fixtures/exception_array/netlify.toml | 2 + .../error/fixtures/exception_array/plugin.js | 5 + .../fixtures/exception_string/manifest.yml | 2 + .../fixtures/exception_string/netlify.toml | 2 + .../error/fixtures/exception_string/plugin.js | 5 + .../build/tests/error/snapshots/tests.js.md | 127 ++++++++++++++++++ .../build/tests/error/snapshots/tests.js.snap | Bin 6226 -> 6129 bytes packages/build/tests/error/tests.js | 8 ++ 12 files changed, 178 insertions(+), 9 deletions(-) create mode 100644 packages/build/src/error/parse/normalize.js create mode 100644 packages/build/tests/error/fixtures/exception_array/manifest.yml create mode 100644 packages/build/tests/error/fixtures/exception_array/netlify.toml create mode 100644 packages/build/tests/error/fixtures/exception_array/plugin.js create mode 100644 packages/build/tests/error/fixtures/exception_string/manifest.yml create mode 100644 packages/build/tests/error/fixtures/exception_string/netlify.toml create mode 100644 packages/build/tests/error/fixtures/exception_string/plugin.js diff --git a/packages/build/src/error/parse/normalize.js b/packages/build/src/error/parse/normalize.js new file mode 100644 index 0000000000..1c0a88e499 --- /dev/null +++ b/packages/build/src/error/parse/normalize.js @@ -0,0 +1,21 @@ +// Ensure error is an `Error` instance +const normalizeError = function(error) { + if (error instanceof Array) { + return normalizeArray(error) + } + + if (error instanceof Error && typeof error.message === 'string' && typeof error.stack === 'string') { + return error + } + + return new Error(String(error)) +} + +// Some libraries throw arrays of Errors +const normalizeArray = function(errorArray) { + const [error, ...errors] = errorArray.map(normalizeError) + error.errors = errors + return error +} + +module.exports = { normalizeError } diff --git a/packages/build/src/error/parse/parse.js b/packages/build/src/error/parse/parse.js index e70d5a11fd..8a8827064a 100644 --- a/packages/build/src/error/parse/parse.js +++ b/packages/build/src/error/parse/parse.js @@ -2,6 +2,7 @@ const { getErrorInfo } = require('../info') const { getTypeInfo } = require('../type') const { getLocationInfo } = require('./location') +const { normalizeError } = require('./normalize') const { getPluginInfo } = require('./plugin') const { getErrorProps } = require('./properties') const { getStackInfo } = require('./stack') @@ -61,14 +62,6 @@ const parseErrorInfo = function(error) { } } -const normalizeError = function(error) { - if (error instanceof Error && typeof error.message === 'string' && typeof error.stack === 'string') { - return error - } - - return new Error(String(error)) -} - // Retrieve title to print in logs const getTitle = function(title, errorInfo) { if (typeof title !== 'function') { diff --git a/packages/build/src/plugins/child/error.js b/packages/build/src/plugins/child/error.js index f48f8778f6..6d0602fb99 100644 --- a/packages/build/src/plugins/child/error.js +++ b/packages/build/src/plugins/child/error.js @@ -3,11 +3,13 @@ const logProcessErrors = require('log-process-errors') const { errorToJson } = require('../../error/build') const { isBuildError } = require('../../error/info') +const { normalizeError } = require('../../error/parse/normalize') const { sendEventToParent } = require('../ipc') // Handle any top-level error and communicate it back to parent const handleError = async function(error) { - const errorPayload = errorToJson(error, { type: 'pluginInternal' }) + const errorA = normalizeError(error) + const errorPayload = errorToJson(errorA, { type: 'pluginInternal' }) await sendEventToParent('error', errorPayload) } diff --git a/packages/build/tests/error/fixtures/exception_array/manifest.yml b/packages/build/tests/error/fixtures/exception_array/manifest.yml new file mode 100644 index 0000000000..a3512f0259 --- /dev/null +++ b/packages/build/tests/error/fixtures/exception_array/manifest.yml @@ -0,0 +1,2 @@ +name: test +inputs: [] diff --git a/packages/build/tests/error/fixtures/exception_array/netlify.toml b/packages/build/tests/error/fixtures/exception_array/netlify.toml new file mode 100644 index 0000000000..81b0ce8bb1 --- /dev/null +++ b/packages/build/tests/error/fixtures/exception_array/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin" diff --git a/packages/build/tests/error/fixtures/exception_array/plugin.js b/packages/build/tests/error/fixtures/exception_array/plugin.js new file mode 100644 index 0000000000..96f23893a6 --- /dev/null +++ b/packages/build/tests/error/fixtures/exception_array/plugin.js @@ -0,0 +1,5 @@ +module.exports = { + async onPreBuild() { + throw [new Error('test'), new Error('testTwo')] + }, +} diff --git a/packages/build/tests/error/fixtures/exception_string/manifest.yml b/packages/build/tests/error/fixtures/exception_string/manifest.yml new file mode 100644 index 0000000000..a3512f0259 --- /dev/null +++ b/packages/build/tests/error/fixtures/exception_string/manifest.yml @@ -0,0 +1,2 @@ +name: test +inputs: [] diff --git a/packages/build/tests/error/fixtures/exception_string/netlify.toml b/packages/build/tests/error/fixtures/exception_string/netlify.toml new file mode 100644 index 0000000000..81b0ce8bb1 --- /dev/null +++ b/packages/build/tests/error/fixtures/exception_string/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] +package = "./plugin" diff --git a/packages/build/tests/error/fixtures/exception_string/plugin.js b/packages/build/tests/error/fixtures/exception_string/plugin.js new file mode 100644 index 0000000000..b0803cd819 --- /dev/null +++ b/packages/build/tests/error/fixtures/exception_string/plugin.js @@ -0,0 +1,5 @@ +module.exports = { + async onPreBuild() { + throw 'test' + }, +} diff --git a/packages/build/tests/error/snapshots/tests.js.md b/packages/build/tests/error/snapshots/tests.js.md index 9780cf5b24..4942482c41 100644 --- a/packages/build/tests/error/snapshots/tests.js.md +++ b/packages/build/tests/error/snapshots/tests.js.md @@ -3415,6 +3415,133 @@ Generated by [AVA](https://ava.li). ## exception +> Snapshot 1 + + `␊ + ┌─────────────────────────────┐␊ + │ Netlify Build │␊ + └─────────────────────────────┘␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + debug: true␊ + repositoryRoot: /file/path␊ + ␊ + > Current directory␊ + /file/path␊ + ␊ + > Config file␊ + /file/path␊ + ␊ + > Resolved config␊ + plugins:␊ + - inputs: {}␊ + origin: config␊ + package: /file/path␊ + ␊ + > Context␊ + production␊ + ␊ + > Loading plugins␊ + - /file/path from netlify.toml␊ + ␊ + ┌─────────────────────────────────────┐␊ + │ 1. onPreBuild command from /file/path │␊ + └─────────────────────────────────────┘␊ + ␊ + ␊ + ┌──────────────────────────────────┐␊ + │ Plugin "/file/path" internal error │␊ + └──────────────────────────────────┘␊ + ␊ + Error message␊ + Error: test␊ + ␊ + Plugin details␊ + Package: /file/path␊ + Version: 1.0.0␊ + Repository: git+https://github.com/netlify/build.git␊ + Report issues: https://github.com/netlify/build/issues␊ + ␊ + Error location␊ + In "onPreBuild" event in "/file/path" from netlify.toml␊ + STACK TRACE␊ + ␊ + Resolved config␊ + plugins:␊ + - inputs: {}␊ + origin: config␊ + package: /file/path` + +## exception that are arrays + +> Snapshot 1 + + `␊ + ┌─────────────────────────────┐␊ + │ Netlify Build │␊ + └─────────────────────────────┘␊ + ␊ + > Version␊ + @netlify/build 1.0.0␊ + ␊ + > Flags␊ + debug: true␊ + repositoryRoot: /file/path␊ + ␊ + > Current directory␊ + /file/path␊ + ␊ + > Config file␊ + /file/path␊ + ␊ + > Resolved config␊ + plugins:␊ + - inputs: {}␊ + origin: config␊ + package: /file/path␊ + ␊ + > Context␊ + production␊ + ␊ + > Loading plugins␊ + - /file/path from netlify.toml␊ + ␊ + ┌─────────────────────────────────────┐␊ + │ 1. onPreBuild command from /file/path │␊ + └─────────────────────────────────────┘␊ + ␊ + ␊ + ┌──────────────────────────────────┐␊ + │ Plugin "/file/path" internal error │␊ + └──────────────────────────────────┘␊ + ␊ + Error message␊ + Error: test␊ + ␊ + Plugin details␊ + Package: /file/path␊ + Version: 1.0.0␊ + Repository: git+https://github.com/netlify/build.git␊ + Report issues: https://github.com/netlify/build/issues␊ + ␊ + Error location␊ + In "onPreBuild" event in "/file/path" from netlify.toml␊ + STACK TRACE␊ + ␊ + Error properties␊ + { errors: [ {} ] }␊ + ␊ + Resolved config␊ + plugins:␊ + - inputs: {}␊ + origin: config␊ + package: /file/path` + +## exception that are strings + > Snapshot 1 `␊ diff --git a/packages/build/tests/error/snapshots/tests.js.snap b/packages/build/tests/error/snapshots/tests.js.snap index e84b0c8aceacc5e53563e532e83c763fe3eeff18..c21e4fa9d078ee796fc8fa515f4630976a7356f3 100644 GIT binary patch literal 6129 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 DRY$;a literal 6226 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 diff --git a/packages/build/tests/error/tests.js b/packages/build/tests/error/tests.js index c045a7917b..b6e63775c1 100644 --- a/packages/build/tests/error/tests.js +++ b/packages/build/tests/error/tests.js @@ -86,6 +86,14 @@ test('exception with circular references', async t => { await runFixture(t, 'exception_circular') }) +test('exception that are strings', async t => { + await runFixture(t, 'exception_string') +}) + +test('exception that are arrays', async t => { + await runFixture(t, 'exception_array') +}) + test('Clean stack traces of build.command', async t => { const { returnValue } = await runFixture(t, 'build_command', { snapshot: false, normalize: false }) const count = getStackLinesCount(returnValue)