diff --git a/lib/serialize-error.js b/lib/serialize-error.js index bd1a02533..1cff9b8b0 100644 --- a/lib/serialize-error.js +++ b/lib/serialize-error.js @@ -107,7 +107,16 @@ function trySerializeError(err, shouldBeautifyStack) { } else { // Skip the source line header inserted by `esm`: // - retval.summary = lines.find(line => !/:\d+$/.test(line)); + const start = lines.findIndex(line => !/:\d+$/.test(line)); + retval.summary = ''; + for (let index = start; index < lines.length; index++) { + if (lines[index].startsWith(' at')) { + break; + } + const next = index + 1; + const end = next === lines.length || lines[next].startsWith(' at'); + retval.summary += end ? lines[index] : lines[index] + '\n'; + } } } diff --git a/test/serialize-error.js b/test/serialize-error.js index 073e5823e..69320901e 100644 --- a/test/serialize-error.js +++ b/test/serialize-error.js @@ -180,10 +180,10 @@ test('creates multiline summaries for syntax errors', t => { test('skips esm enhancement lines when finding the summary', t => { const error = new Error(); Object.defineProperty(error, 'stack', { - value: 'file://file.js:1\nHello' + value: 'file://file.js:1\nFirst line\nSecond line' }); const serializedError = serialize(error); - t.is(serializedError.summary, 'Hello'); + t.is(serializedError.summary, 'First line\nSecond line'); t.end(); });