UNPKG

@4c/fetch-mock

Version:

Mock http requests made using fetch (or isomorphic-fetch)

131 lines (104 loc) 4.68 kB
"use strict"; 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]; }); } } };