helpyourneighbour/backend/node_modules/superagent/lib/node/response.js

134 lines
11 KiB
JavaScript
Raw Normal View History

"use strict";
/**
* Module dependencies.
*/
const util = require('util');
const Stream = require('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._body : this.res.body !== undefined ? this.res.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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1dGlsIiwicmVxdWlyZSIsIlN0cmVhbSIsIlJlc3BvbnNlQmFzZSIsIl9yZXF1aXJlIiwibWl4aW4iLCJtb2R1bGUiLCJleHBvcnRzIiwiUmVzcG9uc2UiLCJyZXF1ZXN0IiwiY2FsbCIsInJlcyIsInJlcSIsInRleHQiLCJmaWxlcyIsImJ1ZmZlcmVkIiwiX3Jlc0J1ZmZlcmVkIiwiaGVhZGVycyIsImhlYWRlciIsIl9zZXRTdGF0dXNQcm9wZXJ0aWVzIiwic3RhdHVzQ29kZSIsIl9zZXRIZWFkZXJQcm9wZXJ0aWVzIiwic2V0RW5jb2RpbmciLCJiaW5kIiwib24iLCJlbWl0IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJwcm90b3R5cGUiLCJnZXQiLCJfYm9keSIsInVuZGVmaW5lZCIsImJvZHkiLCJzZXQiLCJ2YWx1ZSIsImluaGVyaXRzIiwiZGVzdHJveSIsImVycm9yIiwicGF1c2UiLCJyZXN1bWUiLCJ0b0Vycm9yIiwibWV0aG9kIiwicGF0aCIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJFcnJvciIsInNldFN0YXR1c1Byb3BlcnRpZXMiLCJjb25zb2xlIiwid2FybiIsInRvSlNPTiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL3Jlc3BvbnNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5jb25zdCBSZXNwb25zZUJhc2UgPSByZXF1aXJlKCcuLi9yZXNwb25zZS1iYXNlJyk7XG5jb25zdCB7IG1peGluIH0gPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIEV4cG9zZSBgUmVzcG9uc2VgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gUmVzcG9uc2U7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgUmVzcG9uc2VgIHdpdGggdGhlIGdpdmVuIGB4aHJgLlxuICpcbiAqICAtIHNldCBmbGFncyAoLm9rLCAuZXJyb3IsIGV0YylcbiAqICAtIHBhcnNlIGhlYWRlclxuICpcbiAqIEBwYXJhbSB7UmVxdWVzdH0gcmVxXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyB7U3RyZWFtfVxuICogQGltcGxlbWVudHMge1JlYWRhYmxlU3RyZWFtfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gUmVzcG9uc2UocmVxdWVzdCkge1xuICBTdHJlYW0uY2FsbCh0aGlzKTtcbiAgdGhpcy5yZXMgPSByZXF1ZXN0LnJlcztcbiAgY29uc3QgeyByZXMgfSA9IHRoaXM7XG4gIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIHRoaXMucmVxID0gcmVxdWVzdC5yZXE7XG4gIHRoaXMudGV4dCA9IHJlcy50ZXh0O1xuICB0aGlzLmZpbGVzID0gcmVzLmZpbGVzIHx8IHt9O1xuICB0aGlzLmJ1ZmZlcmVkID0gcmVxdWVzdC5fcmVzQnVmZmVyZWQ7XG4gIHRoaXMuaGVhZGVycyA9IHJlcy5oZWFkZXJzO1xuICB0aGlzLmhlYWRlciA9IHRoaXMuaGVhZGVycztcbiAgdGhpcy5fc2V0U3RhdHVzUHJvcGVydGllcyhyZXMuc3RhdHVzQ29kZSk7XG4gIHRoaXMuX3NldEhlYWRlclByb3BlcnRpZXModGhpcy5oZWFkZXIpO1xuICB0aGlzLnNldEVuY29kaW5nID0gcmVzLnNldEVuY29kaW5nLmJpbmQocmVzKTtcbiAgcmVzLm9uKCdkYXRhJywgdGhpcy5lbWl0LmJpbmQodGhpcywgJ2RhdGEnKSk7XG4gIHJlcy5vbignZW5kJywgdGhpcy5lbWl0LmJpbmQodGhpcywgJ2VuZCcpKTtcbiAgcmVzLm9uKCdjbG9zZScsIHRoaXMuZW1pdC5iaW5kKHRoaXMsICdjbG9zZScpKTtcbiAgcmVzLm9uKCdlcnJvcicsIHRoaXMuZW1pdC5iaW5kKHRoaXMsICdlcnJvcicpKTtcbn1cblxuLy8gTGF6eSBhY2Nlc3MgcmVzLmJvZHkuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zOTUyMCNpc3N1ZWNvbW1lbnQtODg5Njk3MTM2XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVzcG9uc2UucHJvdG90eXBlLCAnYm9keScsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9ib2R5ICE9PSB1bmRlZmluZWRcbiAgICAgID8gdGhpcy5fYm9keVxuICAgICAgOiB0aGlzLnJlcy5ib2R5ICE9PSB1bmRlZmluZWRcbiAgICAgID8gdGhpcy5yZXMuYm9keVxuICAgICAgOiB7fTtcbiAgfSxcbiAgc2V0KHZhbHVlKSB7XG4gICAgdGhpcy5fYm9keSA9IHZhbHVlO1xuICB9XG59KTtcblxuLyoqXG4gKiBJbmhlcml0IGZyb20gYFN0cmVhbWAuXG4gKi9cblxudXRpbC5pbmhlcml0cyhSZXNwb25zZSwgU3RyZWFtKTtcblxubWl4aW4oUmVzcG9uc2UucHJvdG90eXBlLCBSZXNwb25zZUJhc2UucHJvdG90eXBlKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIG1ldGhvZHMgb2YgYSBgUmVhZGFibGVTdHJlYW1gXG4gKi9cblxuUmVzcG9uc2UucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgdGhpcy5yZXMuZGVzdHJveShlcnJvcik7XG59O1xuXG4vKipcbiAqIFBhdXNlLlxuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5yZXMucGF1c2UoKTtcbn07XG5cbi8qKlxuICogUmVzdW1lLlxuICovXG5cblJlc3BvbnNlLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucmVzLnJlc3VtZSgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gYEVycm9yYCByZXByZXNlbnRhdGl2ZSBvZiB0aGlzIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm4ge0Vycm9yfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5SZXNwb25zZS5wcm90b3R5cGUudG9FcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgeyByZXEgfSA9IHRoaXM7XG4gIGNvbnN0IHsgbWV0aG9kIH0gPSByZXE7XG4gIGNvbnN0IHsgcGF0aCB9ID0gcmVxO1xuXG4gIGNvbnN0IG1lc3NhZ2UgPSBgY2Fubm90ICR7bWV0aG9kfSAke3BhdGh9ICgke3RoaXMuc3RhdHVzfSlgO1xuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgZXJyb3Iuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gIGVycm9yLnRleHQgPSB0aGlzLnRleHQ7XG4gIGVycm9yLm1ldGhvZCA9IG1ldGhvZDtcbiAgZXJyb3IucGF0aCA9IHBhdGg7XG5cbiA