http-handler.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. "use strict";
  2. var window = require('global/window');
  3. var httpResponseHandler = function httpResponseHandler(callback, decodeResponseBody) {
  4. if (decodeResponseBody === void 0) {
  5. decodeResponseBody = false;
  6. }
  7. return function (err, response, responseBody) {
  8. // if the XHR failed, return that error
  9. if (err) {
  10. callback(err);
  11. return;
  12. } // if the HTTP status code is 4xx or 5xx, the request also failed
  13. if (response.statusCode >= 400 && response.statusCode <= 599) {
  14. var cause = responseBody;
  15. if (decodeResponseBody) {
  16. if (window.TextDecoder) {
  17. var charset = getCharset(response.headers && response.headers['content-type']);
  18. try {
  19. cause = new TextDecoder(charset).decode(responseBody);
  20. } catch (e) {}
  21. } else {
  22. cause = String.fromCharCode.apply(null, new Uint8Array(responseBody));
  23. }
  24. }
  25. callback({
  26. cause: cause
  27. });
  28. return;
  29. } // otherwise, request succeeded
  30. callback(null, responseBody);
  31. };
  32. };
  33. function getCharset(contentTypeHeader) {
  34. if (contentTypeHeader === void 0) {
  35. contentTypeHeader = '';
  36. }
  37. return contentTypeHeader.toLowerCase().split(';').reduce(function (charset, contentType) {
  38. var _contentType$split = contentType.split('='),
  39. type = _contentType$split[0],
  40. value = _contentType$split[1];
  41. if (type.trim() === 'charset') {
  42. return value.trim();
  43. }
  44. return charset;
  45. }, 'utf-8');
  46. }
  47. module.exports = httpResponseHandler;