@4c/fetch-mock
Version:
Mock http requests made using fetch (or isomorphic-fetch)
131 lines (104 loc) • 4.68 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _every = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/every"));
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/typeof"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toConsumableArray"));
var _getIteratorMethod2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js/get-iterator-method"));
var _entries = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/entries"));
var URL = require('whatwg-url'); // https://stackoverflow.com/a/19709846/308237
var absoluteUrlRX = new RegExp('^(?:[a-z]+:)?//', 'i');
var headersToArray = function headersToArray(headers) {
// node-fetch 1 Headers
if (typeof headers.raw === 'function') {
return (0, _entries["default"])(headers.raw());
} else if ((0, _getIteratorMethod2["default"])(headers)) {
return (0, _toConsumableArray2["default"])(headers);
} else {
return (0, _entries["default"])(headers);
}
};
var zipObject = function zipObject(entries) {
return (0, _reduce["default"])(entries).call(entries, function (obj, _ref) {
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
key = _ref2[0],
val = _ref2[1];
return (0, _assign["default"])(obj, (0, _defineProperty2["default"])({}, key, val));
}, {});
};
var normalizeUrl = function normalizeUrl(url) {
if (typeof url === 'function' || url instanceof RegExp || /^(begin|end|glob|express|path)\:/.test(url)) {
return url;
}
if (absoluteUrlRX.test(url)) {
var u = new URL.URL(url);
return u.href;
} else {
var _u = new URL.URL(url, 'http://dummy');
return _u.pathname + _u.search;
}
};
module.exports = {
normalizeRequest: function normalizeRequest(url, options, Request) {
if (Request.prototype.isPrototypeOf(url)) {
var obj = {
url: normalizeUrl(url.url),
options: (0, _assign["default"])({
method: url.method
}, options),
request: url
};
var headers = headersToArray(url.headers);
if (headers.length) {
obj.options.headers = zipObject(headers);
}
return obj;
} else if (typeof url === 'string' || // horrible URL object duck-typing
(0, _typeof2["default"])(url) === 'object' && 'href' in url) {
return {
url: normalizeUrl(url),
options: options
};
} else if ((0, _typeof2["default"])(url) === 'object') {
throw new TypeError('fetch-mock: Unrecognised Request object. Read the Config and Installation sections of the docs');
} else {
throw new TypeError('fetch-mock: Invalid arguments passed to fetch');
}
},
normalizeUrl: normalizeUrl,
getPath: function getPath(url) {
var u = absoluteUrlRX.test(url) ? new URL.URL(url) : new URL.URL(url, 'http://dummy');
return u.pathname;
},
getQuery: function getQuery(url) {
var u = absoluteUrlRX.test(url) ? new URL.URL(url) : new URL.URL(url, 'http://dummy');
return u.search ? u.search.substr(1) : '';
},
headers: {
normalize: function normalize(headers) {
return zipObject(headersToArray(headers));
},
toLowerCase: function toLowerCase(headers) {
var _context;
return (0, _reduce["default"])(_context = (0, _keys["default"])(headers)).call(_context, function (obj, k) {
obj[k.toLowerCase()] = headers[k];
return obj;
}, {});
},
equal: function equal(actualHeader, expectedHeader) {
actualHeader = (0, _isArray["default"])(actualHeader) ? actualHeader : [actualHeader];
expectedHeader = (0, _isArray["default"])(expectedHeader) ? expectedHeader : [expectedHeader];
if (actualHeader.length !== expectedHeader.length) {
return false;
}
return (0, _every["default"])(actualHeader).call(actualHeader, function (val, i) {
return val === expectedHeader[i];
});
}
}
};