superagent
Version:
elegant & feature rich browser / node HTTP with a fluent API
134 lines (115 loc) • 11.7 kB
JavaScript
"use strict";
/**
* Module dependencies.
*/
const util = require('node:util');
const Stream = require('node:stream');
const ResponseBase = require('../response-base');
const _require = require('../utils'),
mixin = _require.mixin;
/**
* Expose `Response`.
*/
module.exports = Response;
/**
* Initialize a new `Response` with the given `xhr`.
*
* - set flags (.ok, .error, etc)
* - parse header
*
* @param {Request} req
* @param {Object} options
* @constructor
* @extends {Stream}
* @implements {ReadableStream}
* @api private
*/
function Response(request) {
Stream.call(this);
this.res = request.res;
const res = this.res;
this.request = request;
this.req = request.req;
this.text = res.text;
this.files = res.files || {};
this.buffered = request._resBuffered;
this.headers = res.headers;
this.header = this.headers;
this._setStatusProperties(res.statusCode);
this._setHeaderProperties(this.header);
this.setEncoding = res.setEncoding.bind(res);
res.on('data', this.emit.bind(this, 'data'));
res.on('end', this.emit.bind(this, 'end'));
res.on('close', this.emit.bind(this, 'close'));
res.on('error', this.emit.bind(this, 'error'));
}
// Lazy access res.body.
// https://github.com/nodejs/node/pull/39520#issuecomment-889697136
Object.defineProperty(Response.prototype, 'body', {
get() {
return this._body === undefined ? this.res.body === undefined ? {} : this.res.body : this._body;
},
set(value) {
this._body = value;
}
});
/**
* Inherit from `Stream`.
*/
util.inherits(Response, Stream);
mixin(Response.prototype, ResponseBase.prototype);
/**
* Implements methods of a `ReadableStream`
*/
Response.prototype.destroy = function (error) {
this.res.destroy(error);
};
/**
* Pause.
*/
Response.prototype.pause = function () {
this.res.pause();
};
/**
* Resume.
*/
Response.prototype.resume = function () {
this.res.resume();
};
/**
* Return an `Error` representative of this response.
*
* @return {Error}
* @api public
*/
Response.prototype.toError = function () {
const req = this.req;
const method = req.method;
const path = req.path;
const message = `cannot ${method} ${path} (${this.status})`;
const error = new Error(message);
error.status = this.status;
error.text = this.text;
error.method = method;
error.path = path;
return error;
};
Response.prototype.setStatusProperties = function (status) {
console.warn('In superagent 2.x setStatusProperties is a private method');
return this._setStatusProperties(status);
};
/**
* To json.
*
* @return {Object}
* @api public
*/
Response.prototype.toJSON = function () {
return {
req: this.request.toJSON(),
header: this.header,
status: this.status,
text: this.text
};
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlsIiwicmVxdWlyZSIsIlN0cmVhbSIsIlJlc3BvbnNlQmFzZSIsIl9yZXF1aXJlIiwibWl4aW4iLCJtb2R1bGUiLCJleHBvcnRzIiwiUmVzcG9uc2UiLCJyZXF1ZXN0IiwiY2FsbCIsInJlcyIsInJlcSIsInRleHQiLCJmaWxlcyIsImJ1ZmZlcmVkIiwiX3Jlc0J1ZmZlcmVkIiwiaGVhZGVycyIsImhlYWRlciIsIl9zZXRTdGF0dXNQcm9wZXJ0aWVzIiwic3RhdHVzQ29kZSIsIl9zZXRIZWFkZXJQcm9wZXJ0aWVzIiwic2V0RW5jb2RpbmciLCJiaW5kIiwib24iLCJlbWl0IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJwcm90b3R5cGUiLCJnZXQiLCJfYm9keSIsInVuZGVmaW5lZCIsImJvZHkiLCJzZXQiLCJ2YWx1ZSIsImluaGVyaXRzIiwiZGVzdHJveSIsImVycm9yIiwicGF1c2UiLCJyZXN1bWUiLCJ0b0Vycm9yIiwibWV0aG9kIiwicGF0aCIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJFcnJvciIsInNldFN0YXR1c1Byb3BlcnRpZXMiLCJjb25zb2xlIiwid2FybiIsInRvSlNPTiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL3Jlc3BvbnNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnbm9kZTp1dGlsJyk7XG5jb25zdCBTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpO1xuY29uc3QgUmVzcG9uc2VCYXNlID0gcmVxdWlyZSgnLi4vcmVzcG9uc2UtYmFzZScpO1xuY29uc3QgeyBtaXhpbiB9ID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBFeHBvc2UgYFJlc3BvbnNlYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlc3BvbnNlO1xuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgYFJlc3BvbnNlYCB3aXRoIHRoZSBnaXZlbiBgeGhyYC5cbiAqXG4gKiAgLSBzZXQgZmxhZ3MgKC5vaywgLmVycm9yLCBldGMpXG4gKiAgLSBwYXJzZSBoZWFkZXJcbiAqXG4gKiBAcGFyYW0ge1JlcXVlc3R9IHJlcVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMge1N0cmVhbX1cbiAqIEBpbXBsZW1lbnRzIHtSZWFkYWJsZVN0cmVhbX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIFJlc3BvbnNlKHJlcXVlc3QpIHtcbiAgU3RyZWFtLmNhbGwodGhpcyk7XG4gIHRoaXMucmVzID0gcmVxdWVzdC5yZXM7XG4gIGNvbnN0IHsgcmVzIH0gPSB0aGlzO1xuICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB0aGlzLnJlcSA9IHJlcXVlc3QucmVxO1xuICB0aGlzLnRleHQgPSByZXMudGV4dDtcbiAgdGhpcy5maWxlcyA9IHJlcy5maWxlcyB8fCB7fTtcbiAgdGhpcy5idWZmZXJlZCA9IHJlcXVlc3QuX3Jlc0J1ZmZlcmVkO1xuICB0aGlzLmhlYWRlcnMgPSByZXMuaGVhZGVycztcbiAgdGhpcy5oZWFkZXIgPSB0aGlzLmhlYWRlcnM7XG4gIHRoaXMuX3NldFN0YXR1c1Byb3BlcnRpZXMocmVzLnN0YXR1c0NvZGUpO1xuICB0aGlzLl9zZXRIZWFkZXJQcm9wZXJ0aWVzKHRoaXMuaGVhZGVyKTtcbiAgdGhpcy5zZXRFbmNvZGluZyA9IHJlcy5zZXRFbmNvZGluZy5iaW5kKHJlcyk7XG4gIHJlcy5vbignZGF0YScsIHRoaXMuZW1pdC5iaW5kKHRoaXMsICdkYXRhJykpO1xuICByZXMub24oJ2VuZCcsIHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlbmQnKSk7XG4gIHJlcy5vbignY2xvc2UnLCB0aGlzLmVtaXQuYmluZCh0aGlzLCAnY2xvc2UnKSk7XG4gIHJlcy5vbignZXJyb3InLCB0aGlzLmVtaXQuYmluZCh0aGlzLCAnZXJyb3InKSk7XG59XG5cbi8vIExhenkgYWNjZXNzIHJlcy5ib2R5LlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzk1MjAjaXNzdWVjb21tZW50LTg4OTY5NzEzNlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlc3BvbnNlLnByb3RvdHlwZSwgJ2JvZHknLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYm9keSA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMucmVzLmJvZHkgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHt9XG4gICAgICAgIDogdGhpcy5yZXMuYm9keVxuICAgICAgOiB0aGlzLl9ib2R5O1xuICB9LFxuICBzZXQodmFsdWUpIHtcbiAgICB0aGlzLl9ib2R5ID0gdmFsdWU7XG4gIH1cbn0pO1xuXG4vKipcbiAqIEluaGVyaXQgZnJvbSBgU3RyZWFtYC5cbiAqL1xuXG51dGlsLmluaGVyaXRzKFJlc3BvbnNlLCBTdHJlYW0pO1xuXG5taXhpbihSZXNwb25zZS5wcm90b3R5cGUsIFJlc3BvbnNlQmFzZS5wcm90b3R5cGUpO1xuXG4vKipcbiAqIEltcGxlbWVudHMgbWV0aG9kcyBvZiBhIGBSZWFkYWJsZVN0cmVhbWBcbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uIChlcnJvcikge1xuICB0aGlzLnJlcy5kZXN0cm95KGVycm9yKTtcbn07XG5cbi8qKlxuICogUGF1c2UuXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnJlcy5wYXVzZSgpO1xufTtcblxuLyoqXG4gKiBSZXN1bWUuXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5yZXMucmVzdW1lKCk7XG59O1xuXG4vKipcbiAqIFJldHVybiBhbiBgRXJyb3JgIHJlcHJlc2VudGF0aXZlIG9mIHRoaXMgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybiB7RXJyb3J9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS50b0Vycm9yID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHJlcSB9ID0gdGhpcztcbiAgY29uc3QgeyBtZXRob2QgfSA9IHJlcTtcbiAgY29uc3QgeyBwYXRoIH0gPSByZXE7XG5cbiAgY29uc3QgbWVzc2FnZSA9IGBjYW5ub3QgJHttZXRob2R9ICR7cGF0aH0gKCR7dGhpcy5zdGF0dXN9KWA7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnJvci5zdGF0dXMgPSB0aGlzLnN0YXR1cztcbiAgZXJyb3IudGV4dCA9IHRoaXMudGV4dDtcbiAgZXJyb3IubWV0aG9kID0gbWV0aG9kO1xuICBlcnJvci5wYXRoID0gcGF0aDtcblxuICByZXR1cm4gZXJyb3I7XG59O1xuXG5SZXNwb25zZS5wcm90b3R5cGUuc2V0U3RhdHVzUHJvcGVydGllcyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgY29uc29sZS53YXJuKCdJbiBzdXBlcmFnZW50IDIueCBzZXRTdGF0dXNQcm9wZXJ0aWVzIGlzIGEgcHJpdmF0ZSBtZXRob2QnKTtcbiAgcmV0dXJuIHRoaXMuX3NldFN0YXR1c1Byb3BlcnRpZXMoc3RhdHVzKTtcbn07XG5cbi8qKlxuICogVG8ganNvbi5cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgcmVxOiB0aGlzLnJlcXVlc3QudG9KU09OKCksXG4gICAgaGVhZGVyOiB0aGlzLmhlYWRlcixcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHRleHQ6IHRoaXMudGV4dFxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ2pDLE1BQU1DLE1BQU0sR0FBR0QsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUNyQyxNQUFNRSxZQUFZLEdBQUdGLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUNoRCxNQUFBRyxRQUFBLEdBQWtCSCxPQUFPLENBQUMsVUFBVSxDQUFDO0VBQTdCSSxLQUFLLEdBQUFELFFBQUEsQ0FBTEMsS0FBSzs7QUFFYjtBQUNBO0FBQ0E7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHQyxRQUFROztBQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTQSxRQUFRQSxDQUFDQyxPQUFPLEVBQUU7RUFDekJQLE1BQU0sQ0FBQ1EsSUFBSSxDQUFDLElBQUksQ0FBQztFQUNqQixJQUFJLENBQUNDLEdBQUcsR0FBR0YsT0FBTyxDQUFDRSxHQUFHO0VBQ3RCLE1BQVFBLEdBQUcsR0FBSyxJQUFJLENBQVpBLEdBQUc7RUFDWCxJQUFJLENBQUNGLE9BQU8sR0FBR0EsT0FBTztFQUN0QixJQUFJLENBQUNHLEdBQUcsR0FBR0gsT0FBTyxDQUFDRyxHQUFHO0VBQ3RCLElBQUksQ0FBQ0MsSUFBSSxHQUFHRixHQUFHLENBQUNFLElBQUk7RUFDcEIsSUFBSSxDQUFDQyxLQUFLLEdBQUdILEdBQUcsQ0FBQ0csS0FBSyxJQUFJLENBQUMsQ0FBQztFQUM1QixJQUFJLENBQUNDLFFBQVEsR0FBR04sT0FBTyxDQUFDTyxZQUFZO0VBQ3BDLElBQUksQ0FBQ0MsT0FBTyxHQUFHTixHQUFHLENBQUNNLE9BQU87RUFDMUIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsSUFBSSxDQUFDRCxPQUFPO0VBQzFCLElBQUksQ0FBQ0Usb0JBQW9CLENBQUNSLEdBQUcsQ0FBQ1MsVUFBVSxDQUFDO0VBQ3pDLElBQUksQ0FBQ0Msb0JBQW9CLENBQUMsSUFBSSxDQUFDSCxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDSSxXQUFXLEdBQUdYLEdBQUcsQ0FBQ1csV0FBVyxDQUFDQyxJQUFJLENBQUNaLEdBQUcsQ0FBQztFQUM1Q0EsR0FBRyxDQUFDYSxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQ0MsSUFBSSxDQUFDRixJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQzVDWixHQUFHLENBQUNhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDQyxJQUFJLENBQUNGLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFDMUNaLEdBQUcsQ0FBQ2EsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUNDLElBQUksQ0FBQ0YsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztFQUM5Q1osR0FBRyxDQUFDYSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQ0MsSUFBSSxDQUFDRixJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQUcsTUFBTSxDQUFDQyxjQUFjLENBQUNuQixRQUFRLENBQUNvQixTQUFTLEVBQUUsTUFBTSxFQUFFO0VBQ2hEQyxHQUFHQSxDQUFBLEVBQUc7SUFDSixPQUFPLElBQUksQ0FBQ0MsS0FBSyxLQUFLQyxTQUFTLEdBQzNCLElBQUksQ0FBQ3BCLEdBQUcsQ0FBQ3FCLElBQUksS0FBS0QsU0FBUyxHQUN6QixDQUFDLENBQUMsR0FDRixJQUFJLENBQUNwQixHQUFHLENBQUNxQixJQUFJLEdBQ2YsSUFBSSxDQUFDRixLQUFLO0VBQ2hCLENBQUM7RUFDREcsR0FBR0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQ1QsSUFBSSxDQUFDSixLQUFLLEdBQUdJLEtBQUs7RUFDcEI7QUFDRixDQUFDLENBQUM7O0FBRUY7QUFDQTtBQUNBOztBQUVBbEMsSUFBSSxDQUFDbUMsUUFBUSxDQUFDM0IsUUFBUSxFQUFFTixNQUFNLENBQUM7QUFFL0JHLEtBQUssQ0FBQ0csUUFBUSxDQUFDb0IsU0FBUyxFQUFFekIsWUFBWSxDQUFDeUIsU0FBUyxDQUFDOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUFwQixRQUFRLENBQUNvQixTQUFTLENBQUNRLE9BQU8sR0FBRyxVQUFVQyxLQUFLLEVBQUU7RUFDNUMsSUFBSSxDQUFDMUIsR0FBRyxDQUFDeUIsT0FBTyxDQUFDQyxLQUFLLENBQUM7QUFDekIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE3QixRQUFRLENBQUNvQixTQUFTLENBQUNVLEtBQUssR0FBRyxZQUFZO0VBQ3JDLElBQUksQ0FBQzNCLEdBQUcsQ0FBQzJCLEtBQUssQ0FBQyxDQUFDO0FBQ2xCLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBOUIsUUFBUSxDQUFDb0IsU0FBUyxDQUFDVyxNQUFNLEdBQUcsWUFBWTtFQUN0QyxJQUFJLENBQUM1QixHQUFHLENBQUM0QixNQUFNLENBQUMsQ0FBQztBQUNuQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQS9CLFFBQVEsQ0FBQ29CLFNBQVMsQ0FBQ1ksT0FBTyxHQUFHLFlBQVk7RUFDdkMsTUFBUTVCLEdBQUcsR0FBSyxJQUFJLENBQVpBLEdBQUc7RUFDWCxNQUFRNkIsTUFBTSxHQUFLN0IsR0FBRyxDQUFkNkIsTUFBTTtFQUNkLE1BQVFDLElBQUksR0FBSzlCLEdBQUcsQ0FBWjhCLElBQUk7RUFFWixNQUFNQyxPQUFPLEdBQUksVUFBU0YsTUFBTyxJQUFHQyxJQUFLLEtBQUksSUFBSSxDQUFDRSxNQUFPLEdBQUU7RUFDM0QsTUFBTVAsS0FBSyxHQUFHLElBQUlRLEtBQUssQ0FBQ0YsT0FBTyxDQUFDO0VBQ2hDTixLQUFLLENBQUNPLE1BQU0sR0FBRyxJQUFJLENBQUNBLE1BQU07RUFDMUJQLEtBQUssQ0FBQ3hCLElBQUksR0FBRyxJQUFJLENBQUNBLElBQUk7RUFDdEJ3QixLQUFLLENBQUNJLE1BQU0sR0FBR0EsTUFBTTtFQUNyQkosS0FBSyxDQUFDSyxJQUFJLEdBQUdBLElBQUk7RUFFakIsT0FBT0wsS0FBSztBQUNkLENBQUM7QUFFRDdCLFFBQVEsQ0FBQ29CLFNBQVMsQ0FBQ2tCLG1CQUFtQixHQUFHLFVBQVVGLE1BQU0sRUFBRTtFQUN6REcsT0FBTyxDQUFDQyxJQUFJLENBQUMsMkRBQTJELENBQUM7RUFDekUsT0FBTyxJQUFJLENBQUM3QixvQkFBb0IsQ0FBQ3lCLE1BQU0sQ0FBQztBQUMxQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQXBDLFFBQVEsQ0FBQ29CLFNBQVMsQ0FBQ3FCLE1BQU0sR0FBRyxZQUFZO0VBQ3RDLE9BQU87SUFDTHJDLEdBQUcsRUFBRSxJQUFJLENBQUNILE9BQU8sQ0FBQ3dDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCL0IsTUFBTSxFQUFFLElBQUksQ0FBQ0EsTUFBTTtJQUNuQjBCLE1BQU0sRUFBRSxJQUFJLENBQUNBLE1BQU07SUFDbkIvQixJQUFJLEVBQUUsSUFBSSxDQUFDQTtFQUNiLENBQUM7QUFDSCxDQUFDIn0=