d5e758b0a22de351dd1ea141f04eb249293b2b593f1b05e5ae59ce19a3bf14f49fb6e606bb4fb5b8198bbe11a72f19797066a25fde3a7818241e58fcde08d4 4.7 KB

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