mirror of
https://github.com/tenrok/axios.git
synced 2026-06-20 20:00:40 +03:00
@@ -7,5 +7,3 @@ typings/
|
|||||||
coverage/
|
coverage/
|
||||||
test/typescript/axios.js*
|
test/typescript/axios.js*
|
||||||
sauce_connect.log
|
sauce_connect.log
|
||||||
package-lock.json
|
|
||||||
yarn.lock
|
|
||||||
@@ -1,5 +1,60 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
### 0.25.0 (January 18, 2022)
|
||||||
|
|
||||||
|
Breaking changes:
|
||||||
|
- Fixing maxBodyLength enforcement ([#3786](https://github.com/axios/axios/pull/3786))
|
||||||
|
- Don't rely on strict mode behaviour for arguments ([#3470](https://github.com/axios/axios/pull/3470))
|
||||||
|
- Adding error handling when missing url ([#3791](https://github.com/axios/axios/pull/3791))
|
||||||
|
- Update isAbsoluteURL.js removing escaping of non-special characters ([#3809](https://github.com/axios/axios/pull/3809))
|
||||||
|
- Use native Array.isArray() in utils.js ([#3836](https://github.com/axios/axios/pull/3836))
|
||||||
|
- Adding error handling inside stream end callback ([#3967](https://github.com/axios/axios/pull/3967))
|
||||||
|
|
||||||
|
Fixes and Functionality:
|
||||||
|
- Added aborted even handler ([#3916](https://github.com/axios/axios/pull/3916))
|
||||||
|
- Header types expanded allowing `boolean` and `number` types ([#4144](https://github.com/axios/axios/pull/4144))
|
||||||
|
- Fix cancel signature allowing cancel message to be `undefined` ([#3153](https://github.com/axios/axios/pull/3153))
|
||||||
|
- Updated type checks to be formulated better ([#3342](https://github.com/axios/axios/pull/3342))
|
||||||
|
- Avoid unnecessary buffer allocations ([#3321](https://github.com/axios/axios/pull/3321))
|
||||||
|
- Adding a socket handler to keep TCP connection live when processing long living requests ([#3422](https://github.com/axios/axios/pull/3422))
|
||||||
|
- Added toFormData helper function ([#3757](https://github.com/axios/axios/pull/3757))
|
||||||
|
- Adding responseEncoding prop type in AxiosRequestConfig ([#3918](https://github.com/axios/axios/pull/3918))
|
||||||
|
|
||||||
|
Internal and Tests:
|
||||||
|
- Adding axios-test-instance to ecosystem ([#3786](https://github.com/axios/axios/pull/3786))
|
||||||
|
- Optimize the logic of isAxiosError ([#3546](https://github.com/axios/axios/pull/3546))
|
||||||
|
- Add tests and documentation to display how multiple inceptors work ([#3564](https://github.com/axios/axios/pull/3564))
|
||||||
|
- Updating follow-redirects to version 1.14.7 ([#4379](https://github.com/axios/axios/pull/4379))
|
||||||
|
|
||||||
|
|
||||||
|
Documentation:
|
||||||
|
- Fixing changelog to show corrext pull request ([#4219](https://github.com/axios/axios/pull/4219))
|
||||||
|
- Update upgrade guide for https proxy setting ([#3604](https://github.com/axios/axios/pull/3604))
|
||||||
|
|
||||||
|
Huge thanks to everyone who contributed to this release via code (authors listed below) or via reviews and triaging on GitHub:
|
||||||
|
|
||||||
|
- [Jay](mailto:jasonsaayman@gmail.com)
|
||||||
|
- [Rijk van Zanten](https://github.com/rijkvanzanten)
|
||||||
|
- [Kohta Ito](https://github.com/koh110)
|
||||||
|
- [Brandon Faulkner](https://github.com/bfaulk96)
|
||||||
|
- [Stefano Magni](https://github.com/NoriSte)
|
||||||
|
- [enofan](https://github.com/fanguangyi)
|
||||||
|
- [Andrey Pechkurov](https://github.com/puzpuzpuz)
|
||||||
|
- [Doowonee](https://github.com/doowonee)
|
||||||
|
- [Emil Broman](https://github.com/emilbroman-eqt)
|
||||||
|
- [Remco Haszing](https://github.com/remcohaszing)
|
||||||
|
- [Black-Hole](https://github.com/BlackHole1)
|
||||||
|
- [Wolfram Kriesing](https://github.com/wolframkriesing)
|
||||||
|
- [Andrew Ovens](https://github.com/repl-andrew-ovens)
|
||||||
|
- [Paulo Renato](https://github.com/PauloRSF)
|
||||||
|
- [Ben Carp](https://github.com/carpben)
|
||||||
|
- [Hirotaka Tagawa](https://github.com/wafuwafu13)
|
||||||
|
- [狼族小狈](https://github.com/lzxb)
|
||||||
|
- [C. Lewis](https://github.com/ctjlewis)
|
||||||
|
- [Felipe Carvalho](https://github.com/FCarvalhoVII)
|
||||||
|
- [Daniel](https://github.com/djs113)
|
||||||
|
- [Gustavo Sales](https://github.com/gussalesdev)
|
||||||
|
|
||||||
### 0.24.0 (October 25, 2021)
|
### 0.24.0 (October 25, 2021)
|
||||||
|
|
||||||
Breaking changes:
|
Breaking changes:
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "axios",
|
"name": "axios",
|
||||||
"main": "./dist/axios.js",
|
"main": "./dist/axios.js",
|
||||||
"version": "0.24.0",
|
"version": "0.25.0",
|
||||||
"homepage": "https://axios-http.com",
|
"homepage": "https://axios-http.com",
|
||||||
"authors": [
|
"authors": [
|
||||||
"Matt Zabriskie"
|
"Matt Zabriskie"
|
||||||
|
|||||||
Vendored
+2
@@ -1,3 +1,5 @@
|
|||||||
|
/* axios v0.25.0 | (c) 2022 by Matt Zabriskie */
|
||||||
|
/* axios v0.24.0 | (c) 2022 by Matt Zabriskie */
|
||||||
(function webpackUniversalModuleDefinition(root, factory) {
|
(function webpackUniversalModuleDefinition(root, factory) {
|
||||||
if(typeof exports === 'object' && typeof module === 'object')
|
if(typeof exports === 'object' && typeof module === 'object')
|
||||||
module.exports = factory();
|
module.exports = factory();
|
||||||
|
|||||||
Vendored
+2
File diff suppressed because one or more lines are too long
Vendored
+15
@@ -53,6 +53,20 @@ export type ResponseType =
|
|||||||
| 'text'
|
| 'text'
|
||||||
| 'stream';
|
| 'stream';
|
||||||
|
|
||||||
|
export type responseEncoding =
|
||||||
|
| 'ascii' | 'ASCII'
|
||||||
|
| 'ansi' | 'ANSI'
|
||||||
|
| 'binary' | 'BINARY'
|
||||||
|
| 'base64' | 'BASE64'
|
||||||
|
| 'base64url' | 'BASE64URL'
|
||||||
|
| 'hex' | 'HEX'
|
||||||
|
| 'latin1' | 'LATIN1'
|
||||||
|
| 'ucs-2' | 'UCS-2'
|
||||||
|
| 'ucs2' | 'UCS2'
|
||||||
|
| 'utf-8' | 'UTF-8'
|
||||||
|
| 'utf8' | 'UTF8'
|
||||||
|
| 'utf16le' | 'UTF16LE';
|
||||||
|
|
||||||
export interface TransitionalOptions {
|
export interface TransitionalOptions {
|
||||||
silentJSONParsing?: boolean;
|
silentJSONParsing?: boolean;
|
||||||
forcedJSONParsing?: boolean;
|
forcedJSONParsing?: boolean;
|
||||||
@@ -75,6 +89,7 @@ export interface AxiosRequestConfig<D = any> {
|
|||||||
adapter?: AxiosAdapter;
|
adapter?: AxiosAdapter;
|
||||||
auth?: AxiosBasicCredentials;
|
auth?: AxiosBasicCredentials;
|
||||||
responseType?: ResponseType;
|
responseType?: ResponseType;
|
||||||
|
responseEncoding?: responseEncoding | string;
|
||||||
xsrfCookieName?: string;
|
xsrfCookieName?: string;
|
||||||
xsrfHeaderName?: string;
|
xsrfHeaderName?: string;
|
||||||
onUploadProgress?: (progressEvent: any) => void;
|
onUploadProgress?: (progressEvent: any) => void;
|
||||||
|
|||||||
+27
-8
@@ -138,6 +138,16 @@ module.exports = function httpAdapter(config) {
|
|||||||
var isHttpsRequest = isHttps.test(protocol);
|
var isHttpsRequest = isHttps.test(protocol);
|
||||||
var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;
|
var agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;
|
||||||
|
|
||||||
|
try {
|
||||||
|
buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, '');
|
||||||
|
} catch (err) {
|
||||||
|
var customErr = new Error(err.message);
|
||||||
|
customErr.config = config;
|
||||||
|
customErr.url = config.url;
|
||||||
|
customErr.exists = true;
|
||||||
|
reject(customErr);
|
||||||
|
}
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''),
|
path: buildURL(parsed.path, config.params, config.paramsSerializer).replace(/^\?/, ''),
|
||||||
method: config.method.toUpperCase(),
|
method: config.method.toUpperCase(),
|
||||||
@@ -297,15 +307,18 @@ module.exports = function httpAdapter(config) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
stream.on('end', function handleStreamEnd() {
|
stream.on('end', function handleStreamEnd() {
|
||||||
var responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);
|
try {
|
||||||
if (config.responseType !== 'arraybuffer') {
|
var responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);
|
||||||
responseData = responseData.toString(config.responseEncoding);
|
if (config.responseType !== 'arraybuffer') {
|
||||||
if (!config.responseEncoding || config.responseEncoding === 'utf8') {
|
responseData = responseData.toString(config.responseEncoding);
|
||||||
responseData = utils.stripBOM(responseData);
|
if (!config.responseEncoding || config.responseEncoding === 'utf8') {
|
||||||
|
responseData = utils.stripBOM(responseData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
response.data = responseData;
|
||||||
|
} catch (err) {
|
||||||
|
reject(enhanceError(err, config, err.code, response.request, response));
|
||||||
}
|
}
|
||||||
|
|
||||||
response.data = responseData;
|
|
||||||
settle(resolve, reject, response);
|
settle(resolve, reject, response);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -346,9 +359,15 @@ module.exports = function httpAdapter(config) {
|
|||||||
// ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.
|
// ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.
|
||||||
req.setTimeout(timeout, function handleRequestTimeout() {
|
req.setTimeout(timeout, function handleRequestTimeout() {
|
||||||
req.abort();
|
req.abort();
|
||||||
|
var timeoutErrorMessage = '';
|
||||||
|
if (config.timeoutErrorMessage) {
|
||||||
|
timeoutErrorMessage = config.timeoutErrorMessage;
|
||||||
|
} else {
|
||||||
|
timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';
|
||||||
|
}
|
||||||
var transitional = config.transitional || defaults.transitional;
|
var transitional = config.transitional || defaults.transitional;
|
||||||
reject(createError(
|
reject(createError(
|
||||||
'timeout of ' + timeout + 'ms exceeded',
|
timeoutErrorMessage,
|
||||||
config,
|
config,
|
||||||
transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',
|
transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',
|
||||||
req
|
req
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ Axios.prototype.request = function request(configOrUrl, config) {
|
|||||||
config = configOrUrl || {};
|
config = configOrUrl || {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!config.url) {
|
||||||
|
throw new Error('Provided config url is not valid');
|
||||||
|
}
|
||||||
|
|
||||||
config = mergeConfig(this.defaults, config);
|
config = mergeConfig(this.defaults, config);
|
||||||
|
|
||||||
// Set config.method
|
// Set config.method
|
||||||
@@ -118,6 +122,9 @@ Axios.prototype.request = function request(configOrUrl, config) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Axios.prototype.getUri = function getUri(config) {
|
Axios.prototype.getUri = function getUri(config) {
|
||||||
|
if (!config.url) {
|
||||||
|
throw new Error('Provided config url is not valid');
|
||||||
|
}
|
||||||
config = mergeConfig(this.defaults, config);
|
config = mergeConfig(this.defaults, config);
|
||||||
return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
|
return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
|
||||||
};
|
};
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
"version": "0.24.0"
|
"version": "0.25.0"
|
||||||
};
|
};
|
||||||
@@ -10,5 +10,5 @@ module.exports = function isAbsoluteURL(url) {
|
|||||||
// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
|
// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
|
||||||
// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
|
// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
|
||||||
// by any combination of letters, digits, plus, period, or hyphen.
|
// by any combination of letters, digits, plus, period, or hyphen.
|
||||||
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
|
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
|
||||||
};
|
};
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ var toString = Object.prototype.toString;
|
|||||||
* @returns {boolean} True if value is an Array, otherwise false
|
* @returns {boolean} True if value is an Array, otherwise false
|
||||||
*/
|
*/
|
||||||
function isArray(val) {
|
function isArray(val) {
|
||||||
return toString.call(val) === '[object Array]';
|
return Array.isArray(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Generated
+29331
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "axios",
|
"name": "axios",
|
||||||
"version": "0.24.0",
|
"version": "0.25.0",
|
||||||
"description": "Promise based HTTP client for the browser and node.js",
|
"description": "Promise based HTTP client for the browser and node.js",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"types": "index.d.ts",
|
"types": "index.d.ts",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"unpkg": "dist/axios.min.js",
|
"unpkg": "dist/axios.min.js",
|
||||||
"typings": "./index.d.ts",
|
"typings": "./index.d.ts",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"follow-redirects": "^1.14.4"
|
"follow-redirects": "^1.14.7"
|
||||||
},
|
},
|
||||||
"bundlesize": [
|
"bundlesize": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ describe('static api', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should have promise method helpers', function () {
|
it('should have promise method helpers', function () {
|
||||||
var promise = axios();
|
var promise = axios('/test');
|
||||||
|
|
||||||
expect(typeof promise.then).toEqual('function');
|
expect(typeof promise.then).toEqual('function');
|
||||||
expect(typeof promise.catch).toEqual('function');
|
expect(typeof promise.catch).toEqual('function');
|
||||||
|
|||||||
+21
-21
@@ -67,28 +67,28 @@ describe('cancel', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when called after response has been received', function() {
|
// describe('when called after response has been received', function() {
|
||||||
// https://github.com/axios/axios/issues/482
|
// // https://github.com/axios/axios/issues/482
|
||||||
it('does not cause unhandled rejection', function(done) {
|
// it('does not cause unhandled rejection', function(done) {
|
||||||
var source = CancelToken.source();
|
// var source = CancelToken.source();
|
||||||
axios.get('/foo', {
|
// axios.get('/foo', {
|
||||||
cancelToken: source.token
|
// cancelToken: source.token
|
||||||
}).then(function() {
|
// }).then(function() {
|
||||||
window.addEventListener('unhandledrejection', function() {
|
// window.addEventListener('unhandledrejection', function() {
|
||||||
done.fail('Unhandled rejection.');
|
// done.fail('Unhandled rejection.');
|
||||||
});
|
// });
|
||||||
source.cancel();
|
// source.cancel();
|
||||||
setTimeout(done, 100);
|
// setTimeout(done, 100);
|
||||||
});
|
// });
|
||||||
|
|
||||||
getAjaxRequest().then(function(request) {
|
// getAjaxRequest().then(function(request) {
|
||||||
request.respondWith({
|
// request.respondWith({
|
||||||
status: 200,
|
// status: 200,
|
||||||
responseText: 'OK'
|
// responseText: 'OK'
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
|
|
||||||
it('it should support cancellation using AbortController signal', function(done) {
|
it('it should support cancellation using AbortController signal', function(done) {
|
||||||
var controller = new AbortController();
|
var controller = new AbortController();
|
||||||
|
|||||||
@@ -7,6 +7,24 @@ describe('requests', function () {
|
|||||||
jasmine.Ajax.uninstall();
|
jasmine.Ajax.uninstall();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should throw error when missing url', function (done) {
|
||||||
|
expect(() => axios()).toThrowError(/Provided config url is not valid/);
|
||||||
|
done();
|
||||||
|
|
||||||
|
expect(() => axios('')).toThrowError(/Provided config url is not valid/);
|
||||||
|
done();
|
||||||
|
|
||||||
|
expect(() => axios({
|
||||||
|
url: undefined,
|
||||||
|
})).toThrowError(/Provided config url is not valid/);
|
||||||
|
done();
|
||||||
|
|
||||||
|
expect(() => axios({
|
||||||
|
method: 'POST',
|
||||||
|
})).toThrowError(/Provided config url is not valid/);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
it('should treat single string arg as url', function (done) {
|
it('should treat single string arg as url', function (done) {
|
||||||
axios('/foo');
|
axios('/foo');
|
||||||
|
|
||||||
|
|||||||
@@ -116,6 +116,36 @@ describe('supports http with nodejs', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should respect the timeoutErrorMessage property', function (done) {
|
||||||
|
|
||||||
|
server = http.createServer(function (req, res) {
|
||||||
|
setTimeout(function () {
|
||||||
|
res.end();
|
||||||
|
}, 1000);
|
||||||
|
}).listen(4444, function () {
|
||||||
|
var success = false, failure = false;
|
||||||
|
var error;
|
||||||
|
|
||||||
|
axios.get('http://localhost:4444/', {
|
||||||
|
timeout: 250,
|
||||||
|
timeoutErrorMessage: 'oops, timeout',
|
||||||
|
}).then(function (res) {
|
||||||
|
success = true;
|
||||||
|
}).catch(function (err) {
|
||||||
|
error = err;
|
||||||
|
failure = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
setTimeout(function () {
|
||||||
|
assert.strictEqual(success, false, 'request should not succeed');
|
||||||
|
assert.strictEqual(failure, true, 'request should fail');
|
||||||
|
assert.strictEqual(error.code, 'ECONNABORTED');
|
||||||
|
assert.strictEqual(error.message, 'oops, timeout');
|
||||||
|
done();
|
||||||
|
}, 300);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should allow passing JSON', function (done) {
|
it('should allow passing JSON', function (done) {
|
||||||
var data = {
|
var data = {
|
||||||
firstName: 'Fred',
|
firstName: 'Fred',
|
||||||
@@ -462,6 +492,21 @@ describe('supports http with nodejs', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should display error while parsing params', function (done) {
|
||||||
|
server = http.createServer(function () {
|
||||||
|
|
||||||
|
}).listen(4444, function () {
|
||||||
|
axios.get('http://localhost:4444/', {
|
||||||
|
params: {
|
||||||
|
errorParam: new Date(undefined),
|
||||||
|
},
|
||||||
|
}).catch(function (err) {
|
||||||
|
assert.deepEqual(err.exists, true)
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should support sockets', function (done) {
|
it('should support sockets', function (done) {
|
||||||
// Different sockets for win32 vs darwin/linux
|
// Different sockets for win32 vs darwin/linux
|
||||||
var socketName = './test.sock';
|
var socketName = './test.sock';
|
||||||
|
|||||||
Reference in New Issue
Block a user