superagent
Version:
elegant & feature rich browser / node HTTP with a fluent API
30 lines (29 loc) • 3.6 kB
JavaScript
;
module.exports = function (res, fn) {
res.text = '';
res.setEncoding('utf8');
res.on('data', chunk => {
res.text += chunk;
});
res.on('end', () => {
let body;
let error;
try {
const text = res.text && res.text.replace(/^\uFEFF/, '');
body = text && JSON.parse(text);
} catch (err) {
error = err;
// issue #675: return the raw response if the response parsing fails
error.rawResponse = res.text || null;
// issue #876: return the http status code if the response parsing fails
error.statusCode = res.statusCode;
// issue #1529: preserve the standard SuperAgent status property as well
error.status = res.statusCode;
// issue #1734: return the response headers if the response parsing fails
error.headers = res.headers;
} finally {
fn(error, body);
}
});
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVzIiwiZm4iLCJ0ZXh0Iiwic2V0RW5jb2RpbmciLCJvbiIsImNodW5rIiwiYm9keSIsImVycm9yIiwicmVwbGFjZSIsIkpTT04iLCJwYXJzZSIsImVyciIsInJhd1Jlc3BvbnNlIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsImhlYWRlcnMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbm9kZS9wYXJzZXJzL2pzb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVzLCBmbikge1xuICByZXMudGV4dCA9ICcnO1xuICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcbiAgcmVzLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgcmVzLnRleHQgKz0gY2h1bms7XG4gIH0pO1xuICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICBsZXQgYm9keTtcbiAgICBsZXQgZXJyb3I7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRleHQgPSByZXMudGV4dCAmJiByZXMudGV4dC5yZXBsYWNlKC9eXFx1RkVGRi8sICcnKTtcbiAgICAgIGJvZHkgPSB0ZXh0ICYmIEpTT04ucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvciA9IGVycjtcbiAgICAgIC8vIGlzc3VlICM2NzU6IHJldHVybiB0aGUgcmF3IHJlc3BvbnNlIGlmIHRoZSByZXNwb25zZSBwYXJzaW5nIGZhaWxzXG4gICAgICBlcnJvci5yYXdSZXNwb25zZSA9IHJlcy50ZXh0IHx8IG51bGw7XG4gICAgICAvLyBpc3N1ZSAjODc2OiByZXR1cm4gdGhlIGh0dHAgc3RhdHVzIGNvZGUgaWYgdGhlIHJlc3BvbnNlIHBhcnNpbmcgZmFpbHNcbiAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSByZXMuc3RhdHVzQ29kZTtcbiAgICAgIC8vIGlzc3VlICMxNTI5OiBwcmVzZXJ2ZSB0aGUgc3RhbmRhcmQgU3VwZXJBZ2VudCBzdGF0dXMgcHJvcGVydHkgYXMgd2VsbFxuICAgICAgZXJyb3Iuc3RhdHVzID0gcmVzLnN0YXR1c0NvZGU7XG4gICAgICAvLyBpc3N1ZSAjMTczNDogcmV0dXJuIHRoZSByZXNwb25zZSBoZWFkZXJzIGlmIHRoZSByZXNwb25zZSBwYXJzaW5nIGZhaWxzXG4gICAgICBlcnJvci5oZWFkZXJzID0gcmVzLmhlYWRlcnM7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGZuKGVycm9yLCBib2R5KTtcbiAgICB9XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsVUFBVUMsR0FBRyxFQUFFQyxFQUFFLEVBQUU7RUFDbENELEdBQUcsQ0FBQ0UsSUFBSSxHQUFHLEVBQUU7RUFDYkYsR0FBRyxDQUFDRyxXQUFXLENBQUMsTUFBTSxDQUFDO0VBQ3ZCSCxHQUFHLENBQUNJLEVBQUUsQ0FBQyxNQUFNLEVBQUdDLEtBQUssSUFBSztJQUN4QkwsR0FBRyxDQUFDRSxJQUFJLElBQUlHLEtBQUs7RUFDbkIsQ0FBQyxDQUFDO0VBQ0ZMLEdBQUcsQ0FBQ0ksRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNO0lBQ2xCLElBQUlFLElBQUk7SUFDUixJQUFJQyxLQUFLO0lBQ1QsSUFBSTtNQUNGLE1BQU1MLElBQUksR0FBR0YsR0FBRyxDQUFDRSxJQUFJLElBQUlGLEdBQUcsQ0FBQ0UsSUFBSSxDQUFDTSxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztNQUN4REYsSUFBSSxHQUFHSixJQUFJLElBQUlPLElBQUksQ0FBQ0MsS0FBSyxDQUFDUixJQUFJLENBQUM7SUFDakMsQ0FBQyxDQUFDLE9BQU9TLEdBQUcsRUFBRTtNQUNaSixLQUFLLEdBQUdJLEdBQUc7TUFDWDtNQUNBSixLQUFLLENBQUNLLFdBQVcsR0FBR1osR0FBRyxDQUFDRSxJQUFJLElBQUksSUFBSTtNQUNwQztNQUNBSyxLQUFLLENBQUNNLFVBQVUsR0FBR2IsR0FBRyxDQUFDYSxVQUFVO01BQ2pDO01BQ0FOLEtBQUssQ0FBQ08sTUFBTSxHQUFHZCxHQUFHLENBQUNhLFVBQVU7TUFDN0I7TUFDQU4sS0FBSyxDQUFDUSxPQUFPLEdBQUdmLEdBQUcsQ0FBQ2UsT0FBTztJQUM3QixDQUFDLFNBQVM7TUFDUmQsRUFBRSxDQUFDTSxLQUFLLEVBQUVELElBQUksQ0FBQztJQUNqQjtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=