'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Proxy = undefined; var _Feature = require('./Feature'); var _Feature2 = _interopRequireDefault(_Feature); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Proxy = exports.Proxy = function Proxy(src, options) { if (!options.proxy) { return Promise.reject(process.env.NODE_ENV !== 'production' ? 'No proxy defined' : null); } var proxy = options.proxy; return new Promise(function (resolve, reject) { var responseType = _Feature2.default.SUPPORT_CORS_XHR && _Feature2.default.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text'; var xhr = _Feature2.default.SUPPORT_CORS_XHR ? new XMLHttpRequest() : new XDomainRequest(); xhr.onload = function () { if (xhr instanceof XMLHttpRequest) { if (xhr.status === 200) { if (responseType === 'text') { resolve(xhr.response); } else { var reader = new FileReader(); // $FlowFixMe reader.addEventListener('load', function () { return resolve(reader.result); }, false); // $FlowFixMe reader.addEventListener('error', function (e) { return reject(e); }, false); reader.readAsDataURL(xhr.response); } } else { reject(process.env.NODE_ENV !== 'production' ? 'Failed to proxy resource ' + src.substring(0, 256) + ' with status code ' + xhr.status : ''); } } else { resolve(xhr.responseText); } }; xhr.onerror = reject; xhr.open('GET', proxy + '?url=' + encodeURIComponent(src) + '&responseType=' + responseType); if (responseType !== 'text' && xhr instanceof XMLHttpRequest) { xhr.responseType = responseType; } if (options.imageTimeout) { var timeout = options.imageTimeout; xhr.timeout = timeout; xhr.ontimeout = function () { return reject(process.env.NODE_ENV !== 'production' ? 'Timed out (' + timeout + 'ms) proxying ' + src.substring(0, 256) : ''); }; } xhr.send(); }); };