axios 0.21.4 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +117 -1
- package/README.md +43 -3
- package/UPGRADE_GUIDE.md +6 -0
- package/dist/axios.js +189 -105
- package/dist/axios.map +1 -1
- package/dist/axios.min.js +3 -2
- package/dist/axios.min.map +1 -1
- package/index.d.ts +92 -39
- package/lib/adapters/http.js +78 -21
- package/lib/adapters/xhr.js +32 -9
- package/lib/axios.js +6 -5
- package/lib/cancel/CancelToken.js +62 -0
- package/lib/core/Axios.js +15 -8
- package/lib/core/dispatchRequest.js +5 -0
- package/lib/core/enhanceError.js +2 -1
- package/lib/core/mergeConfig.js +50 -38
- package/lib/defaults.js +6 -6
- package/lib/env/README.md +3 -0
- package/lib/env/data.js +3 -0
- package/lib/helpers/isAbsoluteURL.js +1 -1
- package/lib/helpers/isAxiosError.js +3 -1
- package/lib/helpers/toFormData.js +55 -0
- package/lib/helpers/validator.js +7 -30
- package/lib/utils.js +4 -4
- package/package.json +8 -6
- package/tsconfig.json +14 -0
- package/tslint.json +6 -0
package/lib/core/mergeConfig.js
CHANGED
@@ -15,17 +15,6 @@ module.exports = function mergeConfig(config1, config2) {
|
|
15
15
|
config2 = config2 || {};
|
16
16
|
var config = {};
|
17
17
|
|
18
|
-
var valueFromConfig2Keys = ['url', 'method', 'data'];
|
19
|
-
var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];
|
20
|
-
var defaultToConfig2Keys = [
|
21
|
-
'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',
|
22
|
-
'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
|
23
|
-
'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',
|
24
|
-
'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',
|
25
|
-
'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'
|
26
|
-
];
|
27
|
-
var directMergeKeys = ['validateStatus'];
|
28
|
-
|
29
18
|
function getMergedValue(target, source) {
|
30
19
|
if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
|
31
20
|
return utils.merge(target, source);
|
@@ -37,51 +26,74 @@ module.exports = function mergeConfig(config1, config2) {
|
|
37
26
|
return source;
|
38
27
|
}
|
39
28
|
|
29
|
+
// eslint-disable-next-line consistent-return
|
40
30
|
function mergeDeepProperties(prop) {
|
41
31
|
if (!utils.isUndefined(config2[prop])) {
|
42
|
-
|
32
|
+
return getMergedValue(config1[prop], config2[prop]);
|
43
33
|
} else if (!utils.isUndefined(config1[prop])) {
|
44
|
-
|
34
|
+
return getMergedValue(undefined, config1[prop]);
|
45
35
|
}
|
46
36
|
}
|
47
37
|
|
48
|
-
|
38
|
+
// eslint-disable-next-line consistent-return
|
39
|
+
function valueFromConfig2(prop) {
|
49
40
|
if (!utils.isUndefined(config2[prop])) {
|
50
|
-
|
41
|
+
return getMergedValue(undefined, config2[prop]);
|
51
42
|
}
|
52
|
-
}
|
53
|
-
|
54
|
-
utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);
|
43
|
+
}
|
55
44
|
|
56
|
-
|
45
|
+
// eslint-disable-next-line consistent-return
|
46
|
+
function defaultToConfig2(prop) {
|
57
47
|
if (!utils.isUndefined(config2[prop])) {
|
58
|
-
|
48
|
+
return getMergedValue(undefined, config2[prop]);
|
59
49
|
} else if (!utils.isUndefined(config1[prop])) {
|
60
|
-
|
50
|
+
return getMergedValue(undefined, config1[prop]);
|
61
51
|
}
|
62
|
-
}
|
52
|
+
}
|
63
53
|
|
64
|
-
|
54
|
+
// eslint-disable-next-line consistent-return
|
55
|
+
function mergeDirectKeys(prop) {
|
65
56
|
if (prop in config2) {
|
66
|
-
|
57
|
+
return getMergedValue(config1[prop], config2[prop]);
|
67
58
|
} else if (prop in config1) {
|
68
|
-
|
59
|
+
return getMergedValue(undefined, config1[prop]);
|
69
60
|
}
|
70
|
-
}
|
71
|
-
|
72
|
-
var axiosKeys = valueFromConfig2Keys
|
73
|
-
.concat(mergeDeepPropertiesKeys)
|
74
|
-
.concat(defaultToConfig2Keys)
|
75
|
-
.concat(directMergeKeys);
|
61
|
+
}
|
76
62
|
|
77
|
-
var
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
63
|
+
var mergeMap = {
|
64
|
+
'url': valueFromConfig2,
|
65
|
+
'method': valueFromConfig2,
|
66
|
+
'data': valueFromConfig2,
|
67
|
+
'baseURL': defaultToConfig2,
|
68
|
+
'transformRequest': defaultToConfig2,
|
69
|
+
'transformResponse': defaultToConfig2,
|
70
|
+
'paramsSerializer': defaultToConfig2,
|
71
|
+
'timeout': defaultToConfig2,
|
72
|
+
'timeoutMessage': defaultToConfig2,
|
73
|
+
'withCredentials': defaultToConfig2,
|
74
|
+
'adapter': defaultToConfig2,
|
75
|
+
'responseType': defaultToConfig2,
|
76
|
+
'xsrfCookieName': defaultToConfig2,
|
77
|
+
'xsrfHeaderName': defaultToConfig2,
|
78
|
+
'onUploadProgress': defaultToConfig2,
|
79
|
+
'onDownloadProgress': defaultToConfig2,
|
80
|
+
'decompress': defaultToConfig2,
|
81
|
+
'maxContentLength': defaultToConfig2,
|
82
|
+
'maxBodyLength': defaultToConfig2,
|
83
|
+
'transport': defaultToConfig2,
|
84
|
+
'httpAgent': defaultToConfig2,
|
85
|
+
'httpsAgent': defaultToConfig2,
|
86
|
+
'cancelToken': defaultToConfig2,
|
87
|
+
'socketPath': defaultToConfig2,
|
88
|
+
'responseEncoding': defaultToConfig2,
|
89
|
+
'validateStatus': mergeDirectKeys
|
90
|
+
};
|
83
91
|
|
84
|
-
utils.forEach(
|
92
|
+
utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
|
93
|
+
var merge = mergeMap[prop] || mergeDeepProperties;
|
94
|
+
var configValue = merge(prop);
|
95
|
+
(utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
|
96
|
+
});
|
85
97
|
|
86
98
|
return config;
|
87
99
|
};
|
package/lib/defaults.js
CHANGED
@@ -79,7 +79,7 @@ var defaults = {
|
|
79
79
|
}],
|
80
80
|
|
81
81
|
transformResponse: [function transformResponse(data) {
|
82
|
-
var transitional = this.transitional;
|
82
|
+
var transitional = this.transitional || defaults.transitional;
|
83
83
|
var silentJSONParsing = transitional && transitional.silentJSONParsing;
|
84
84
|
var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
|
85
85
|
var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
|
@@ -114,12 +114,12 @@ var defaults = {
|
|
114
114
|
|
115
115
|
validateStatus: function validateStatus(status) {
|
116
116
|
return status >= 200 && status < 300;
|
117
|
-
}
|
118
|
-
};
|
117
|
+
},
|
119
118
|
|
120
|
-
|
121
|
-
|
122
|
-
|
119
|
+
headers: {
|
120
|
+
common: {
|
121
|
+
'Accept': 'application/json, text/plain, */*'
|
122
|
+
}
|
123
123
|
}
|
124
124
|
};
|
125
125
|
|
package/lib/env/data.js
ADDED
@@ -10,5 +10,5 @@ module.exports = function isAbsoluteURL(url) {
|
|
10
10
|
// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
|
11
11
|
// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
|
12
12
|
// by any combination of letters, digits, plus, period, or hyphen.
|
13
|
-
return /^([a-z][a-z\d
|
13
|
+
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
|
14
14
|
};
|
@@ -1,5 +1,7 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
|
+
var utils = require('./../utils');
|
4
|
+
|
3
5
|
/**
|
4
6
|
* Determines whether the payload is an error thrown by Axios
|
5
7
|
*
|
@@ -7,5 +9,5 @@
|
|
7
9
|
* @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
|
8
10
|
*/
|
9
11
|
module.exports = function isAxiosError(payload) {
|
10
|
-
return (
|
12
|
+
return utils.isObject(payload) && (payload.isAxiosError === true);
|
11
13
|
};
|
@@ -0,0 +1,55 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
function combinedKey(parentKey, elKey) {
|
4
|
+
return parentKey + '.' + elKey;
|
5
|
+
}
|
6
|
+
|
7
|
+
function buildFormData(formData, data, parentKey) {
|
8
|
+
if (Array.isArray(data)) {
|
9
|
+
data.forEach(function buildArray(el, i) {
|
10
|
+
buildFormData(formData, el, combinedKey(parentKey, i));
|
11
|
+
});
|
12
|
+
} else if (
|
13
|
+
typeof data === 'object' &&
|
14
|
+
!(data instanceof File || data === null)
|
15
|
+
) {
|
16
|
+
Object.keys(data).forEach(function buildObject(key) {
|
17
|
+
buildFormData(
|
18
|
+
formData,
|
19
|
+
data[key],
|
20
|
+
parentKey ? combinedKey(parentKey, key) : key
|
21
|
+
);
|
22
|
+
});
|
23
|
+
} else {
|
24
|
+
if (data === undefined) {
|
25
|
+
return;
|
26
|
+
}
|
27
|
+
|
28
|
+
var value =
|
29
|
+
typeof data === 'boolean' || typeof data === 'number'
|
30
|
+
? data.toString()
|
31
|
+
: data;
|
32
|
+
formData.append(parentKey, value);
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
/**
|
37
|
+
* convert a data object to FormData
|
38
|
+
*
|
39
|
+
* type FormDataPrimitive = string | Blob | number | boolean
|
40
|
+
* interface FormDataNest {
|
41
|
+
* [x: string]: FormVal
|
42
|
+
* }
|
43
|
+
*
|
44
|
+
* type FormVal = FormDataNest | FormDataPrimitive
|
45
|
+
*
|
46
|
+
* @param {FormVal} data
|
47
|
+
*/
|
48
|
+
|
49
|
+
module.exports = function getFormData(data) {
|
50
|
+
var formData = new FormData();
|
51
|
+
|
52
|
+
buildFormData(formData, data);
|
53
|
+
|
54
|
+
return formData;
|
55
|
+
};
|
package/lib/helpers/validator.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
|
-
var
|
3
|
+
var VERSION = require('../env/data').version;
|
4
4
|
|
5
5
|
var validators = {};
|
6
6
|
|
@@ -12,48 +12,26 @@ var validators = {};
|
|
12
12
|
});
|
13
13
|
|
14
14
|
var deprecatedWarnings = {};
|
15
|
-
var currentVerArr = pkg.version.split('.');
|
16
|
-
|
17
|
-
/**
|
18
|
-
* Compare package versions
|
19
|
-
* @param {string} version
|
20
|
-
* @param {string?} thanVersion
|
21
|
-
* @returns {boolean}
|
22
|
-
*/
|
23
|
-
function isOlderVersion(version, thanVersion) {
|
24
|
-
var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr;
|
25
|
-
var destVer = version.split('.');
|
26
|
-
for (var i = 0; i < 3; i++) {
|
27
|
-
if (pkgVersionArr[i] > destVer[i]) {
|
28
|
-
return true;
|
29
|
-
} else if (pkgVersionArr[i] < destVer[i]) {
|
30
|
-
return false;
|
31
|
-
}
|
32
|
-
}
|
33
|
-
return false;
|
34
|
-
}
|
35
15
|
|
36
16
|
/**
|
37
17
|
* Transitional option validator
|
38
|
-
* @param {function|boolean?} validator
|
39
|
-
* @param {string?} version
|
40
|
-
* @param {string} message
|
18
|
+
* @param {function|boolean?} validator - set to false if the transitional option has been removed
|
19
|
+
* @param {string?} version - deprecated version / removed since version
|
20
|
+
* @param {string?} message - some message with additional info
|
41
21
|
* @returns {function}
|
42
22
|
*/
|
43
23
|
validators.transitional = function transitional(validator, version, message) {
|
44
|
-
var isDeprecated = version && isOlderVersion(version);
|
45
|
-
|
46
24
|
function formatMessage(opt, desc) {
|
47
|
-
return '[Axios v' +
|
25
|
+
return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
|
48
26
|
}
|
49
27
|
|
50
28
|
// eslint-disable-next-line func-names
|
51
29
|
return function(value, opt, opts) {
|
52
30
|
if (validator === false) {
|
53
|
-
throw new Error(formatMessage(opt, ' has been removed in ' + version));
|
31
|
+
throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));
|
54
32
|
}
|
55
33
|
|
56
|
-
if (
|
34
|
+
if (version && !deprecatedWarnings[opt]) {
|
57
35
|
deprecatedWarnings[opt] = true;
|
58
36
|
// eslint-disable-next-line no-console
|
59
37
|
console.warn(
|
@@ -99,7 +77,6 @@ function assertOptions(options, schema, allowUnknown) {
|
|
99
77
|
}
|
100
78
|
|
101
79
|
module.exports = {
|
102
|
-
isOlderVersion: isOlderVersion,
|
103
80
|
assertOptions: assertOptions,
|
104
81
|
validators: validators
|
105
82
|
};
|
package/lib/utils.js
CHANGED
@@ -13,7 +13,7 @@ var toString = Object.prototype.toString;
|
|
13
13
|
* @returns {boolean} True if value is an Array, otherwise false
|
14
14
|
*/
|
15
15
|
function isArray(val) {
|
16
|
-
return
|
16
|
+
return Array.isArray(val);
|
17
17
|
}
|
18
18
|
|
19
19
|
/**
|
@@ -54,7 +54,7 @@ function isArrayBuffer(val) {
|
|
54
54
|
* @returns {boolean} True if value is an FormData, otherwise false
|
55
55
|
*/
|
56
56
|
function isFormData(val) {
|
57
|
-
return (
|
57
|
+
return toString.call(val) === '[object FormData]';
|
58
58
|
}
|
59
59
|
|
60
60
|
/**
|
@@ -68,7 +68,7 @@ function isArrayBufferView(val) {
|
|
68
68
|
if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
|
69
69
|
result = ArrayBuffer.isView(val);
|
70
70
|
} else {
|
71
|
-
result = (val) && (val.buffer) && (val.buffer
|
71
|
+
result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
|
72
72
|
}
|
73
73
|
return result;
|
74
74
|
}
|
@@ -175,7 +175,7 @@ function isStream(val) {
|
|
175
175
|
* @returns {boolean} True if value is a URLSearchParams object, otherwise false
|
176
176
|
*/
|
177
177
|
function isURLSearchParams(val) {
|
178
|
-
return
|
178
|
+
return toString.call(val) === '[object URLSearchParams]';
|
179
179
|
}
|
180
180
|
|
181
181
|
/**
|
package/package.json
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
{
|
2
2
|
"name": "axios",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.25.0",
|
4
4
|
"description": "Promise based HTTP client for the browser and node.js",
|
5
5
|
"main": "index.js",
|
6
|
+
"types": "index.d.ts",
|
6
7
|
"scripts": {
|
7
|
-
"test": "grunt test",
|
8
|
+
"test": "grunt test && dtslint",
|
8
9
|
"start": "node ./sandbox/server.js",
|
9
10
|
"build": "NODE_ENV=production grunt build",
|
10
|
-
"preversion": "npm test",
|
11
|
-
"version": "npm run build &&
|
11
|
+
"preversion": "grunt version && npm test",
|
12
|
+
"version": "npm run build && git add -A dist && git add CHANGELOG.md bower.json package.json",
|
12
13
|
"postversion": "git push && git push --tags",
|
13
14
|
"examples": "node ./examples/server.js",
|
14
15
|
"coveralls": "cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
|
@@ -32,7 +33,9 @@
|
|
32
33
|
},
|
33
34
|
"homepage": "https://axios-http.com",
|
34
35
|
"devDependencies": {
|
36
|
+
"abortcontroller-polyfill": "^1.5.0",
|
35
37
|
"coveralls": "^3.0.0",
|
38
|
+
"dtslint": "^4.1.6",
|
36
39
|
"es6-promise": "^4.2.4",
|
37
40
|
"grunt": "^1.3.0",
|
38
41
|
"grunt-banner": "^0.6.0",
|
@@ -42,7 +45,6 @@
|
|
42
45
|
"grunt-eslint": "^23.0.0",
|
43
46
|
"grunt-karma": "^4.0.0",
|
44
47
|
"grunt-mocha-test": "^0.13.3",
|
45
|
-
"grunt-ts": "^6.0.0-beta.19",
|
46
48
|
"grunt-webpack": "^4.0.2",
|
47
49
|
"istanbul-instrumenter-loader": "^1.0.0",
|
48
50
|
"jasmine-core": "^2.4.1",
|
@@ -73,7 +75,7 @@
|
|
73
75
|
"unpkg": "dist/axios.min.js",
|
74
76
|
"typings": "./index.d.ts",
|
75
77
|
"dependencies": {
|
76
|
-
"follow-redirects": "^1.14.
|
78
|
+
"follow-redirects": "^1.14.7"
|
77
79
|
},
|
78
80
|
"bundlesize": [
|
79
81
|
{
|
package/tsconfig.json
ADDED