index.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. 'use strict';
  2. var utils = require('../utils');
  3. var normalizeHeaderName = require('../helpers/normalizeHeaderName');
  4. var enhanceError = require('../core/enhanceError');
  5. var transitionalDefaults = require('./transitional');
  6. var DEFAULT_CONTENT_TYPE = {
  7. 'Content-Type': 'application/x-www-form-urlencoded'
  8. };
  9. function setContentTypeIfUnset(headers, value) {
  10. if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
  11. headers['Content-Type'] = value;
  12. }
  13. }
  14. function getDefaultAdapter() {
  15. var adapter;
  16. if (typeof XMLHttpRequest !== 'undefined') {
  17. // For browsers use XHR adapter
  18. adapter = require('../adapters/xhr');
  19. } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
  20. // For node use HTTP adapter
  21. adapter = require('../adapters/http');
  22. }
  23. return adapter;
  24. }
  25. function stringifySafely(rawValue, parser, encoder) {
  26. if (utils.isString(rawValue)) {
  27. try {
  28. (parser || JSON.parse)(rawValue);
  29. return utils.trim(rawValue);
  30. } catch (e) {
  31. if (e.name !== 'SyntaxError') {
  32. throw e;
  33. }
  34. }
  35. }
  36. return (encoder || JSON.stringify)(rawValue);
  37. }
  38. var defaults = {
  39. transitional: transitionalDefaults,
  40. adapter: getDefaultAdapter(),
  41. transformRequest: [function transformRequest(data, headers) {
  42. normalizeHeaderName(headers, 'Accept');
  43. normalizeHeaderName(headers, 'Content-Type');
  44. if (utils.isFormData(data) ||
  45. utils.isArrayBuffer(data) ||
  46. utils.isBuffer(data) ||
  47. utils.isStream(data) ||
  48. utils.isFile(data) ||
  49. utils.isBlob(data)
  50. ) {
  51. return data;
  52. }
  53. if (utils.isArrayBufferView(data)) {
  54. return data.buffer;
  55. }
  56. if (utils.isURLSearchParams(data)) {
  57. setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
  58. return data.toString();
  59. }
  60. if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {
  61. setContentTypeIfUnset(headers, 'application/json');
  62. return stringifySafely(data);
  63. }
  64. return data;
  65. }],
  66. transformResponse: [function transformResponse(data) {
  67. var transitional = this.transitional || defaults.transitional;
  68. var silentJSONParsing = transitional && transitional.silentJSONParsing;
  69. var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
  70. var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
  71. if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {
  72. try {
  73. return JSON.parse(data);
  74. } catch (e) {
  75. if (strictJSONParsing) {
  76. if (e.name === 'SyntaxError') {
  77. throw enhanceError(e, this, 'E_JSON_PARSE');
  78. }
  79. throw e;
  80. }
  81. }
  82. }
  83. return data;
  84. }],
  85. /**
  86. * A timeout in milliseconds to abort a request. If set to 0 (default) a
  87. * timeout is not created.
  88. */
  89. timeout: 0,
  90. xsrfCookieName: 'XSRF-TOKEN',
  91. xsrfHeaderName: 'X-XSRF-TOKEN',
  92. maxContentLength: -1,
  93. maxBodyLength: -1,
  94. validateStatus: function validateStatus(status) {
  95. return status >= 200 && status < 300;
  96. },
  97. headers: {
  98. common: {
  99. 'Accept': 'application/json, text/plain, */*'
  100. }
  101. }
  102. };
  103. utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
  104. defaults.headers[method] = {};
  105. });
  106. utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
  107. defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
  108. });
  109. module.exports = defaults;