mirror of
https://github.com/tenrok/axios.git
synced 2026-06-17 19:21:29 +03:00
Fixed merge conflicts
This commit is contained in:
@@ -86,7 +86,10 @@ module.exports = function httpAdapter(config) {
|
||||
headers['User-Agent'] = 'axios/' + VERSION;
|
||||
}
|
||||
|
||||
if (data && !utils.isStream(data)) {
|
||||
// support for https://www.npmjs.com/package/form-data api
|
||||
if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {
|
||||
Object.assign(headers, data.getHeaders());
|
||||
} else if (data && !utils.isStream(data)) {
|
||||
if (Buffer.isBuffer(data)) {
|
||||
// Nothing to do...
|
||||
} else if (utils.isArrayBuffer(data)) {
|
||||
|
||||
@@ -41,6 +41,7 @@ axios.CanceledError = require('./cancel/CanceledError');
|
||||
axios.CancelToken = require('./cancel/CancelToken');
|
||||
axios.isCancel = require('./cancel/isCancel');
|
||||
axios.VERSION = require('./env/data').version;
|
||||
axios.toFormData = require('./helpers/toFormData');
|
||||
|
||||
// Expose AxiosError class
|
||||
axios.AxiosError = require('../lib/core/AxiosError');
|
||||
|
||||
+17
-7
@@ -138,13 +138,23 @@ utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData
|
||||
|
||||
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
|
||||
/*eslint func-names:0*/
|
||||
Axios.prototype[method] = function(url, data, config) {
|
||||
return this.request(mergeConfig(config || {}, {
|
||||
method: method,
|
||||
url: url,
|
||||
data: data
|
||||
}));
|
||||
};
|
||||
|
||||
function generateHTTPMethod(isForm) {
|
||||
return function httpMethod(url, data, config) {
|
||||
return this.request(mergeConfig(config || {}, {
|
||||
method: method,
|
||||
headers: isForm ? {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
} : {},
|
||||
url: url,
|
||||
data: data
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
Axios.prototype[method] = generateHTTPMethod();
|
||||
|
||||
Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
|
||||
});
|
||||
|
||||
module.exports = Axios;
|
||||
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
// eslint-disable-next-line strict
|
||||
module.exports = require('form-data');
|
||||
+16
-1
@@ -4,6 +4,7 @@ var utils = require('../utils');
|
||||
var normalizeHeaderName = require('../helpers/normalizeHeaderName');
|
||||
var AxiosError = require('../core/AxiosError');
|
||||
var transitionalDefaults = require('./transitional');
|
||||
var toFormData = require('./helpers/toFormData');
|
||||
|
||||
var DEFAULT_CONTENT_TYPE = {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
@@ -68,10 +69,20 @@ var defaults = {
|
||||
setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
|
||||
return data.toString();
|
||||
}
|
||||
if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {
|
||||
|
||||
var isObjectPayload = utils.isObject(data);
|
||||
var contentType = headers && headers['Content-Type'];
|
||||
|
||||
var isFileList;
|
||||
|
||||
if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {
|
||||
var _FormData = this.env && this.env.FormData;
|
||||
return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());
|
||||
} else if (isObjectPayload || contentType === 'application/json') {
|
||||
setContentTypeIfUnset(headers, 'application/json');
|
||||
return stringifySafely(data);
|
||||
}
|
||||
|
||||
return data;
|
||||
}],
|
||||
|
||||
@@ -109,6 +120,10 @@ var defaults = {
|
||||
maxContentLength: -1,
|
||||
maxBodyLength: -1,
|
||||
|
||||
env: {
|
||||
FormData: require('./defaults/env/FormData')
|
||||
},
|
||||
|
||||
validateStatus: function validateStatus(status) {
|
||||
return status >= 200 && status < 300;
|
||||
},
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
// eslint-disable-next-line strict
|
||||
module.exports = null;
|
||||
+65
-47
@@ -1,55 +1,73 @@
|
||||
'use strict';
|
||||
|
||||
function combinedKey(parentKey, elKey) {
|
||||
return parentKey + '.' + elKey;
|
||||
}
|
||||
|
||||
function buildFormData(formData, data, parentKey) {
|
||||
if (Array.isArray(data)) {
|
||||
data.forEach(function buildArray(el, i) {
|
||||
buildFormData(formData, el, combinedKey(parentKey, i));
|
||||
});
|
||||
} else if (
|
||||
typeof data === 'object' &&
|
||||
!(data instanceof File || data === null)
|
||||
) {
|
||||
Object.keys(data).forEach(function buildObject(key) {
|
||||
buildFormData(
|
||||
formData,
|
||||
data[key],
|
||||
parentKey ? combinedKey(parentKey, key) : key
|
||||
);
|
||||
});
|
||||
} else {
|
||||
if (data === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
var value =
|
||||
typeof data === 'boolean' || typeof data === 'number'
|
||||
? data.toString()
|
||||
: data;
|
||||
formData.append(parentKey, value);
|
||||
}
|
||||
}
|
||||
var utils = require('../utils');
|
||||
|
||||
/**
|
||||
* convert a data object to FormData
|
||||
*
|
||||
* type FormDataPrimitive = string | Blob | number | boolean
|
||||
* interface FormDataNest {
|
||||
* [x: string]: FormVal
|
||||
* }
|
||||
*
|
||||
* type FormVal = FormDataNest | FormDataPrimitive
|
||||
*
|
||||
* @param {FormVal} data
|
||||
*/
|
||||
* Convert a data object to FormData
|
||||
* @param {Object} obj
|
||||
* @param {?Object} [formData]
|
||||
* @returns {Object}
|
||||
**/
|
||||
|
||||
module.exports = function getFormData(data) {
|
||||
var formData = new FormData();
|
||||
function toFormData(obj, formData) {
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
formData = formData || new FormData();
|
||||
|
||||
buildFormData(formData, data);
|
||||
var stack = [];
|
||||
|
||||
function convertValue(value) {
|
||||
if (value === null) return '';
|
||||
|
||||
if (utils.isDate(value)) {
|
||||
return value.toISOString();
|
||||
}
|
||||
|
||||
if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {
|
||||
return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
function build(data, parentKey) {
|
||||
if (utils.isPlainObject(data) || utils.isArray(data)) {
|
||||
if (stack.indexOf(data) !== -1) {
|
||||
throw Error('Circular reference detected in ' + parentKey);
|
||||
}
|
||||
|
||||
stack.push(data);
|
||||
|
||||
utils.forEach(data, function each(value, key) {
|
||||
if (utils.isUndefined(value)) return;
|
||||
|
||||
var fullKey = parentKey ? parentKey + '.' + key : key;
|
||||
var arr;
|
||||
|
||||
if (value && !parentKey && typeof value === 'object') {
|
||||
if (utils.endsWith(key, '{}')) {
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
value = JSON.stringify(value);
|
||||
} else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {
|
||||
// eslint-disable-next-line func-names
|
||||
arr.forEach(function(el) {
|
||||
!utils.isUndefined(el) && formData.append(fullKey, convertValue(el));
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
build(value, fullKey);
|
||||
});
|
||||
|
||||
stack.pop();
|
||||
} else {
|
||||
formData.append(parentKey, convertValue(data));
|
||||
}
|
||||
}
|
||||
|
||||
build(obj);
|
||||
|
||||
return formData;
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = toFormData;
|
||||
|
||||
+100
-27
@@ -6,6 +6,22 @@ var bind = require('./helpers/bind');
|
||||
|
||||
var toString = Object.prototype.toString;
|
||||
|
||||
// eslint-disable-next-line func-names
|
||||
var kindOf = (function(cache) {
|
||||
// eslint-disable-next-line func-names
|
||||
return function(thing) {
|
||||
var str = toString.call(thing);
|
||||
return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
|
||||
};
|
||||
})(Object.create(null));
|
||||
|
||||
function kindOfTest(type) {
|
||||
type = type.toLowerCase();
|
||||
return function isKindOf(thing) {
|
||||
return kindOf(thing) === type;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Array with axios supported protocols.
|
||||
*/
|
||||
@@ -56,22 +72,12 @@ function isBuffer(val) {
|
||||
/**
|
||||
* Determine if a value is an ArrayBuffer
|
||||
*
|
||||
* @function
|
||||
* @param {Object} val The value to test
|
||||
* @returns {boolean} True if value is an ArrayBuffer, otherwise false
|
||||
*/
|
||||
function isArrayBuffer(val) {
|
||||
return toString.call(val) === '[object ArrayBuffer]';
|
||||
}
|
||||
var isArrayBuffer = kindOfTest('ArrayBuffer');
|
||||
|
||||
/**
|
||||
* Determine if a value is a FormData
|
||||
*
|
||||
* @param {Object} val The value to test
|
||||
* @returns {boolean} True if value is an FormData, otherwise false
|
||||
*/
|
||||
function isFormData(val) {
|
||||
return toString.call(val) === '[object FormData]';
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if a value is a view on an ArrayBuffer
|
||||
@@ -126,7 +132,7 @@ function isObject(val) {
|
||||
* @return {boolean} True if value is a plain Object, otherwise false
|
||||
*/
|
||||
function isPlainObject(val) {
|
||||
if (toString.call(val) !== '[object Object]') {
|
||||
if (kindOf(val) !== 'object') {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -137,32 +143,38 @@ function isPlainObject(val) {
|
||||
/**
|
||||
* Determine if a value is a Date
|
||||
*
|
||||
* @function
|
||||
* @param {Object} val The value to test
|
||||
* @returns {boolean} True if value is a Date, otherwise false
|
||||
*/
|
||||
function isDate(val) {
|
||||
return toString.call(val) === '[object Date]';
|
||||
}
|
||||
var isDate = kindOfTest('Date');
|
||||
|
||||
/**
|
||||
* Determine if a value is a File
|
||||
*
|
||||
* @function
|
||||
* @param {Object} val The value to test
|
||||
* @returns {boolean} True if value is a File, otherwise false
|
||||
*/
|
||||
function isFile(val) {
|
||||
return toString.call(val) === '[object File]';
|
||||
}
|
||||
var isFile = kindOfTest('File');
|
||||
|
||||
/**
|
||||
* Determine if a value is a Blob
|
||||
*
|
||||
* @function
|
||||
* @param {Object} val The value to test
|
||||
* @returns {boolean} True if value is a Blob, otherwise false
|
||||
*/
|
||||
function isBlob(val) {
|
||||
return toString.call(val) === '[object Blob]';
|
||||
}
|
||||
var isBlob = kindOfTest('Blob');
|
||||
|
||||
/**
|
||||
* Determine if a value is a FileList
|
||||
*
|
||||
* @function
|
||||
* @param {Object} val The value to test
|
||||
* @returns {boolean} True if value is a File, otherwise false
|
||||
*/
|
||||
var isFileList = kindOfTest('FileList');
|
||||
|
||||
/**
|
||||
* Determine if a value is a Function
|
||||
@@ -185,14 +197,27 @@ function isStream(val) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if a value is a URLSearchParams object
|
||||
* Determine if a value is a FormData
|
||||
*
|
||||
* @param {Object} thing The value to test
|
||||
* @returns {boolean} True if value is an FormData, otherwise false
|
||||
*/
|
||||
function isFormData(thing) {
|
||||
var pattern = '[object FormData]';
|
||||
return thing && (
|
||||
(typeof FormData === 'function' && thing instanceof FormData) ||
|
||||
toString.call(thing) === pattern ||
|
||||
(isFunction(thing.toString) && thing.toString() === pattern)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if a value is a URLSearchParams object
|
||||
* @function
|
||||
* @param {Object} val The value to test
|
||||
* @returns {boolean} True if value is a URLSearchParams object, otherwise false
|
||||
*/
|
||||
function isURLSearchParams(val) {
|
||||
return toString.call(val) === '[object URLSearchParams]';
|
||||
}
|
||||
var isURLSearchParams = kindOfTest('URLSearchParams');
|
||||
|
||||
/**
|
||||
* Trim excess whitespace off the beginning and end of a string
|
||||
@@ -385,6 +410,48 @@ function toFlatObject(sourceObj, destObj, filter) {
|
||||
return destObj;
|
||||
}
|
||||
|
||||
/*
|
||||
* determines whether a string ends with the characters of a specified string
|
||||
* @param {String} str
|
||||
* @param {String} searchString
|
||||
* @param {Number} [position= 0]
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function endsWith(str, searchString, position) {
|
||||
str = String(str);
|
||||
if (position === undefined || position > str.length) {
|
||||
position = str.length;
|
||||
}
|
||||
position -= searchString.length;
|
||||
var lastIndex = str.indexOf(searchString, position);
|
||||
return lastIndex !== -1 && lastIndex === position;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns new array from array like object
|
||||
* @param {*} [thing]
|
||||
* @returns {Array}
|
||||
*/
|
||||
function toArray(thing) {
|
||||
if (!thing) return null;
|
||||
var i = thing.length;
|
||||
if (isUndefined(i)) return null;
|
||||
var arr = new Array(i);
|
||||
while (i-- > 0) {
|
||||
arr[i] = thing[i];
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line func-names
|
||||
var isTypedArray = (function(TypedArray) {
|
||||
// eslint-disable-next-line func-names
|
||||
return function(thing) {
|
||||
return TypedArray && thing instanceof TypedArray;
|
||||
};
|
||||
})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));
|
||||
|
||||
module.exports = {
|
||||
supportedProtocols: supportedProtocols,
|
||||
getProtocol: getProtocol,
|
||||
@@ -411,5 +478,11 @@ module.exports = {
|
||||
trim: trim,
|
||||
stripBOM: stripBOM,
|
||||
inherits: inherits,
|
||||
toFlatObject: toFlatObject
|
||||
toFlatObject: toFlatObject,
|
||||
kindOf: kindOf,
|
||||
kindOfTest: kindOfTest,
|
||||
endsWith: endsWith,
|
||||
toArray: toArray,
|
||||
isTypedArray: isTypedArray,
|
||||
isFileList: isFileList
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user