1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- "use strict";
- var window = require('global/window');
- var httpResponseHandler = function httpResponseHandler(callback, decodeResponseBody) {
- if (decodeResponseBody === void 0) {
- decodeResponseBody = false;
- }
- return function (err, response, responseBody) {
- // if the XHR failed, return that error
- if (err) {
- callback(err);
- return;
- } // if the HTTP status code is 4xx or 5xx, the request also failed
- if (response.statusCode >= 400 && response.statusCode <= 599) {
- var cause = responseBody;
- if (decodeResponseBody) {
- if (window.TextDecoder) {
- var charset = getCharset(response.headers && response.headers['content-type']);
- try {
- cause = new TextDecoder(charset).decode(responseBody);
- } catch (e) {}
- } else {
- cause = String.fromCharCode.apply(null, new Uint8Array(responseBody));
- }
- }
- callback({
- cause: cause
- });
- return;
- } // otherwise, request succeeded
- callback(null, responseBody);
- };
- };
- function getCharset(contentTypeHeader) {
- if (contentTypeHeader === void 0) {
- contentTypeHeader = '';
- }
- return contentTypeHeader.toLowerCase().split(';').reduce(function (charset, contentType) {
- var _contentType$split = contentType.split('='),
- type = _contentType$split[0],
- value = _contentType$split[1];
- if (type.trim() === 'charset') {
- return value.trim();
- }
- return charset;
- }, 'utf-8');
- }
- module.exports = httpResponseHandler;
|