@webex/http-core
Version:
Core HTTP library for the Cisco Webex
92 lines (87 loc) • 3.76 kB
JavaScript
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.intercept = intercept;
exports.prepareFetchOptions = prepareFetchOptions;
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
var _events = require("events");
/* eslint-disable import/prefer-default-export */
/**
* @param {Object} options
* @param {Array<Object>} interceptors
* @param {string} key
* @param {Object | undefined} res
* @private
* @returns {Promise}
*/
function intercept(options, interceptors, key) {
var res = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
var successKey = "on".concat(key);
var errorKey = "on".concat(key, "Error");
return interceptors.reduce(function (promise, interceptor) {
return promise.then(function (result) {
interceptor.logOptions(options);
if (interceptor[successKey]) {
return interceptor[successKey](options, result);
}
return _promise.default.resolve(result);
}, function (reason) {
interceptor.logOptions(options);
if (interceptor[errorKey]) {
return interceptor[errorKey](options, reason);
}
return _promise.default.reject(reason);
});
}, _promise.default.resolve(res));
}
/**
* Prepare options for a fetch.
* @param {object} options
* @returns {Promise}
*/
function prepareFetchOptions(_x) {
return _prepareFetchOptions.apply(this, arguments);
}
function _prepareFetchOptions() {
_prepareFetchOptions = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(options) {
return _regenerator.default.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (options.url) {
options.uri = options.url;
options.url = null;
}
options.headers = options.headers || {};
if (options.json) {
// don't override existing accept header declared by user
options.headers.accept = options.headers.accept || options.headers.Accept || 'application/json';
// don't override existing content-type header declared by user
if (options.method !== 'GET' && options.method !== 'HEAD') {
options.headers['content-type'] = options.headers['content-type'] || options.headers['Content-Type'] || 'application/json';
options.body = (0, _stringify.default)(options.json === true ? options.body : options.json);
}
} else if (options.json !== undefined) {
(0, _deleteProperty.default)(options, 'json');
}
options.download = new _events.EventEmitter();
options.upload = new _events.EventEmitter();
options.keepalive = true;
return _context.abrupt("return", intercept(options, options.interceptors, 'Request').then(function () {
return options;
}));
case 7:
case "end":
return _context.stop();
}
}, _callee);
}));
return _prepareFetchOptions.apply(this, arguments);
}
//# sourceMappingURL=utils.js.map
;