diff --git a/index-fetch.js b/index-fetch.js index 2ee12fc1ef7..00fe6ea162f 100644 --- a/index-fetch.js +++ b/index-fetch.js @@ -5,7 +5,12 @@ const fetchImpl = require('./lib/fetch') module.exports.fetch = async function fetch (resource) { const dispatcher = (arguments[1] && arguments[1].dispatcher) || getGlobalDispatcher() - return fetchImpl.apply(dispatcher, arguments) + try { + return await fetchImpl.apply(dispatcher, arguments) + } catch (err) { + Error.captureStackTrace(err, this) + throw err + } } module.exports.FormData = require('./lib/fetch/formdata').FormData module.exports.Headers = require('./lib/fetch/headers').Headers diff --git a/index.js b/index.js index 8099f5a692f..284661215c3 100644 --- a/index.js +++ b/index.js @@ -92,7 +92,12 @@ if (nodeMajor > 16 || (nodeMajor === 16 && nodeMinor >= 8)) { fetchImpl = require('./lib/fetch') } const dispatcher = (arguments[1] && arguments[1].dispatcher) || getGlobalDispatcher() - return fetchImpl.apply(dispatcher, arguments) + try { + return await fetchImpl.apply(dispatcher, arguments) + } catch (err) { + Error.captureStackTrace(err, this) + throw err + } } module.exports.Headers = require('./lib/fetch/headers').Headers module.exports.Response = require('./lib/fetch/response').Response diff --git a/test/fetch/client-error-stack-trace.js b/test/fetch/client-error-stack-trace.js new file mode 100644 index 00000000000..7d94aa8b73c --- /dev/null +++ b/test/fetch/client-error-stack-trace.js @@ -0,0 +1,21 @@ +'use strict' + +const { test } = require('tap') +const { fetch } = require('../..') +const { fetch: fetchIndex } = require('../../index-fetch') + +test('FETCH: request errors and prints trimmed stack trace', async (t) => { + try { + await fetch('http://a.com') + } catch (error) { + t.match(error.stack, `at Test. (${__filename}`) + } +}) + +test('FETCH-index: request errors and prints trimmed stack trace', async (t) => { + try { + await fetchIndex('http://a.com') + } catch (error) { + t.match(error.stack, `at Test. (${__filename}`) + } +})