2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-20 20:00:40 +03:00

chore(release): v1.7.6 (#6583)

Co-authored-by: DigitalBrainJS <12586868+DigitalBrainJS@users.noreply.github.com>
This commit is contained in:
github-actions[bot]
2024-08-30 22:56:08 +03:00
committed by GitHub
parent bc03c6cbc4
commit d584fcfa62
17 changed files with 297 additions and 228 deletions
+14
View File
@@ -1,5 +1,19 @@
# Changelog # Changelog
## [1.7.6](https://github.com/axios/axios/compare/v1.7.5...v1.7.6) (2024-08-30)
### Bug Fixes
* **fetch:** fix content length calculation for FormData payload; ([#6524](https://github.com/axios/axios/issues/6524)) ([085f568](https://github.com/axios/axios/commit/085f56861a83e9ac02c140ad9d68dac540dfeeaa))
* **fetch:** optimize signals composing logic; ([#6582](https://github.com/axios/axios/issues/6582)) ([df9889b](https://github.com/axios/axios/commit/df9889b83c2cc37e9e6189675a73ab70c60f031f))
### Contributors to this release
- <img src="https://avatars.githubusercontent.com/u/12586868?v&#x3D;4&amp;s&#x3D;18" alt="avatar" width="18"/> [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+98/-46 (#6582 )")
- <img src="https://avatars.githubusercontent.com/u/3534453?v&#x3D;4&amp;s&#x3D;18" alt="avatar" width="18"/> [Jacques Germishuys](https://github.com/jacquesg "+5/-1 (#6524 )")
- <img src="https://avatars.githubusercontent.com/u/53894505?v&#x3D;4&amp;s&#x3D;18" alt="avatar" width="18"/> [kuroino721](https://github.com/kuroino721 "+3/-1 (#6575 )")
## [1.7.5](https://github.com/axios/axios/compare/v1.7.4...v1.7.5) (2024-08-23) ## [1.7.5](https://github.com/axios/axios/compare/v1.7.4...v1.7.5) (2024-08-23)
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "axios", "name": "axios",
"main": "./dist/axios.js", "main": "./dist/axios.js",
"version": "1.7.5", "version": "1.7.6",
"homepage": "https://axios-http.com", "homepage": "https://axios-http.com",
"authors": [ "authors": [
"Matt Zabriskie" "Matt Zabriskie"
+84 -65
View File
@@ -1,4 +1,4 @@
// Axios v1.7.5 Copyright (c) 2024 Matt Zabriskie and contributors // Axios v1.7.6 Copyright (c) 2024 Matt Zabriskie and contributors
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) : typeof define === 'function' && define.amd ? define(factory) :
@@ -3093,38 +3093,42 @@
}; };
var composeSignals = function composeSignals(signals, timeout) { var composeSignals = function composeSignals(signals, timeout) {
var controller = new AbortController(); var _signals = signals = signals ? signals.filter(Boolean) : [],
var aborted; length = _signals.length;
var onabort = function onabort(cancel) { if (timeout || length) {
if (!aborted) { var controller = new AbortController();
aborted = true; var aborted;
unsubscribe(); var onabort = function onabort(reason) {
var err = cancel instanceof Error ? cancel : this.reason; if (!aborted) {
controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err)); aborted = true;
} unsubscribe();
}; var err = reason instanceof Error ? reason : this.reason;
var timer = timeout && setTimeout(function () { controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));
onabort(new AxiosError("timeout ".concat(timeout, " of ms exceeded"), AxiosError.ETIMEDOUT)); }
}, timeout); };
var unsubscribe = function unsubscribe() { var timer = timeout && setTimeout(function () {
if (signals) {
timer && clearTimeout(timer);
timer = null; timer = null;
signals.forEach(function (signal) { onabort(new AxiosError("timeout ".concat(timeout, " of ms exceeded"), AxiosError.ETIMEDOUT));
signal && (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort)); }, timeout);
}); var unsubscribe = function unsubscribe() {
signals = null; if (signals) {
} timer && clearTimeout(timer);
}; timer = null;
signals.forEach(function (signal) { signals.forEach(function (signal) {
return signal && signal.addEventListener && signal.addEventListener('abort', onabort); signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);
}); });
var signal = controller.signal; signals = null;
signal.unsubscribe = unsubscribe; }
return [signal, function () { };
timer && clearTimeout(timer); signals.forEach(function (signal) {
timer = null; return signal.addEventListener('abort', onabort);
}]; });
var signal = controller.signal;
signal.unsubscribe = function () {
return utils$1.asap(unsubscribe);
};
return signal;
}
}; };
var composeSignals$1 = composeSignals; var composeSignals$1 = composeSignals;
@@ -3377,6 +3381,7 @@
}(new Response()); }(new Response());
var getBodyLength = /*#__PURE__*/function () { var getBodyLength = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(body) { var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(body) {
var _request;
return _regeneratorRuntime().wrap(function _callee2$(_context2) { return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) { while (1) switch (_context2.prev = _context2.next) {
case 0: case 0:
@@ -3393,32 +3398,36 @@
return _context2.abrupt("return", body.size); return _context2.abrupt("return", body.size);
case 4: case 4:
if (!utils$1.isSpecCompliantForm(body)) { if (!utils$1.isSpecCompliantForm(body)) {
_context2.next = 8; _context2.next = 9;
break; break;
} }
_context2.next = 7; _request = new Request(platform.origin, {
return new Request(body).arrayBuffer(); method: 'POST',
case 7: body: body
return _context2.abrupt("return", _context2.sent.byteLength); });
_context2.next = 8;
return _request.arrayBuffer();
case 8: case 8:
return _context2.abrupt("return", _context2.sent.byteLength);
case 9:
if (!(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body))) { if (!(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body))) {
_context2.next = 10; _context2.next = 11;
break; break;
} }
return _context2.abrupt("return", body.byteLength); return _context2.abrupt("return", body.byteLength);
case 10: case 11:
if (utils$1.isURLSearchParams(body)) { if (utils$1.isURLSearchParams(body)) {
body = body + ''; body = body + '';
} }
if (!utils$1.isString(body)) { if (!utils$1.isString(body)) {
_context2.next = 15; _context2.next = 16;
break; break;
} }
_context2.next = 14; _context2.next = 15;
return encodeText(body); return encodeText(body);
case 14:
return _context2.abrupt("return", _context2.sent.byteLength);
case 15: case 15:
return _context2.abrupt("return", _context2.sent.byteLength);
case 16:
case "end": case "end":
return _context2.stop(); return _context2.stop();
} }
@@ -3448,18 +3457,15 @@
}(); }();
var fetchAdapter = isFetchSupported && ( /*#__PURE__*/function () { var fetchAdapter = isFetchSupported && ( /*#__PURE__*/function () {
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(config) { var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(config) {
var _resolveConfig, url, method, data, signal, cancelToken, timeout, onDownloadProgress, onUploadProgress, responseType, headers, _resolveConfig$withCr, withCredentials, fetchOptions, _ref5, _ref6, composedSignal, stopTimeout, finished, request, onFinish, requestContentLength, _request, contentTypeHeader, _progressEventDecorat, _progressEventDecorat2, onProgress, flush, isCredentialsSupported, response, isStreamResponse, options, responseContentLength, _ref7, _ref8, _onProgress, _flush, responseData; var _resolveConfig, url, method, data, signal, cancelToken, timeout, onDownloadProgress, onUploadProgress, responseType, headers, _resolveConfig$withCr, withCredentials, fetchOptions, composedSignal, request, unsubscribe, requestContentLength, _request, contentTypeHeader, _progressEventDecorat, _progressEventDecorat2, onProgress, flush, isCredentialsSupported, response, isStreamResponse, options, responseContentLength, _ref5, _ref6, _onProgress, _flush, responseData;
return _regeneratorRuntime().wrap(function _callee4$(_context4) { return _regeneratorRuntime().wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) { while (1) switch (_context4.prev = _context4.next) {
case 0: case 0:
_resolveConfig = resolveConfig(config), url = _resolveConfig.url, method = _resolveConfig.method, data = _resolveConfig.data, signal = _resolveConfig.signal, cancelToken = _resolveConfig.cancelToken, timeout = _resolveConfig.timeout, onDownloadProgress = _resolveConfig.onDownloadProgress, onUploadProgress = _resolveConfig.onUploadProgress, responseType = _resolveConfig.responseType, headers = _resolveConfig.headers, _resolveConfig$withCr = _resolveConfig.withCredentials, withCredentials = _resolveConfig$withCr === void 0 ? 'same-origin' : _resolveConfig$withCr, fetchOptions = _resolveConfig.fetchOptions; _resolveConfig = resolveConfig(config), url = _resolveConfig.url, method = _resolveConfig.method, data = _resolveConfig.data, signal = _resolveConfig.signal, cancelToken = _resolveConfig.cancelToken, timeout = _resolveConfig.timeout, onDownloadProgress = _resolveConfig.onDownloadProgress, onUploadProgress = _resolveConfig.onUploadProgress, responseType = _resolveConfig.responseType, headers = _resolveConfig.headers, _resolveConfig$withCr = _resolveConfig.withCredentials, withCredentials = _resolveConfig$withCr === void 0 ? 'same-origin' : _resolveConfig$withCr, fetchOptions = _resolveConfig.fetchOptions;
responseType = responseType ? (responseType + '').toLowerCase() : 'text'; responseType = responseType ? (responseType + '').toLowerCase() : 'text';
_ref5 = signal || cancelToken || timeout ? composeSignals$1([signal, cancelToken], timeout) : [], _ref6 = _slicedToArray(_ref5, 2), composedSignal = _ref6[0], stopTimeout = _ref6[1]; composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout);
onFinish = function onFinish() { unsubscribe = composedSignal && composedSignal.unsubscribe && function () {
!finished && setTimeout(function () { composedSignal.unsubscribe();
composedSignal && composedSignal.unsubscribe();
});
finished = true;
}; };
_context4.prev = 4; _context4.prev = 4;
_context4.t0 = onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head'; _context4.t0 = onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head';
@@ -3510,16 +3516,16 @@
case 20: case 20:
response = _context4.sent; response = _context4.sent;
isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');
if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) { if (supportsResponseStream && (onDownloadProgress || isStreamResponse && unsubscribe)) {
options = {}; options = {};
['status', 'statusText', 'headers'].forEach(function (prop) { ['status', 'statusText', 'headers'].forEach(function (prop) {
options[prop] = response[prop]; options[prop] = response[prop];
}); });
responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length')); responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length'));
_ref7 = onDownloadProgress && progressEventDecorator(responseContentLength, progressEventReducer(asyncDecorator(onDownloadProgress), true)) || [], _ref8 = _slicedToArray(_ref7, 2), _onProgress = _ref8[0], _flush = _ref8[1]; _ref5 = onDownloadProgress && progressEventDecorator(responseContentLength, progressEventReducer(asyncDecorator(onDownloadProgress), true)) || [], _ref6 = _slicedToArray(_ref5, 2), _onProgress = _ref6[0], _flush = _ref6[1];
response = new Response(trackStream(response.body, DEFAULT_CHUNK_SIZE, _onProgress, function () { response = new Response(trackStream(response.body, DEFAULT_CHUNK_SIZE, _onProgress, function () {
_flush && _flush(); _flush && _flush();
isStreamResponse && onFinish(); unsubscribe && unsubscribe();
}, encodeText), options); }, encodeText), options);
} }
responseType = responseType || 'text'; responseType = responseType || 'text';
@@ -3527,9 +3533,8 @@
return resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); return resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config);
case 26: case 26:
responseData = _context4.sent; responseData = _context4.sent;
!isStreamResponse && onFinish(); !isStreamResponse && unsubscribe && unsubscribe();
stopTimeout && stopTimeout(); _context4.next = 30;
_context4.next = 31;
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
settle(resolve, reject, { settle(resolve, reject, {
data: responseData, data: responseData,
@@ -3540,26 +3545,26 @@
request: request request: request
}); });
}); });
case 31: case 30:
return _context4.abrupt("return", _context4.sent); return _context4.abrupt("return", _context4.sent);
case 34: case 33:
_context4.prev = 34; _context4.prev = 33;
_context4.t2 = _context4["catch"](4); _context4.t2 = _context4["catch"](4);
onFinish(); unsubscribe && unsubscribe();
if (!(_context4.t2 && _context4.t2.name === 'TypeError' && /fetch/i.test(_context4.t2.message))) { if (!(_context4.t2 && _context4.t2.name === 'TypeError' && /fetch/i.test(_context4.t2.message))) {
_context4.next = 39; _context4.next = 38;
break; break;
} }
throw Object.assign(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request), { throw Object.assign(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request), {
cause: _context4.t2.cause || _context4.t2 cause: _context4.t2.cause || _context4.t2
}); });
case 39: case 38:
throw AxiosError.from(_context4.t2, _context4.t2 && _context4.t2.code, config, request); throw AxiosError.from(_context4.t2, _context4.t2 && _context4.t2.code, config, request);
case 40: case 39:
case "end": case "end":
return _context4.stop(); return _context4.stop();
} }
}, _callee4, null, [[4, 34]]); }, _callee4, null, [[4, 33]]);
})); }));
return function (_x5) { return function (_x5) {
return _ref4.apply(this, arguments); return _ref4.apply(this, arguments);
@@ -3683,7 +3688,7 @@
}); });
} }
var VERSION = "1.7.5"; var VERSION = "1.7.6";
var validators$1 = {}; var validators$1 = {};
@@ -4064,6 +4069,20 @@
this._listeners.splice(index, 1); this._listeners.splice(index, 1);
} }
} }
}, {
key: "toAbortSignal",
value: function toAbortSignal() {
var _this = this;
var controller = new AbortController();
var abort = function abort(err) {
controller.abort(err);
};
this.subscribe(abort);
controller.signal.unsubscribe = function () {
return _this.unsubscribe(abort);
};
return controller.signal;
}
/** /**
* Returns an object that contains a new `CancelToken` and a function that, when called, * Returns an object that contains a new `CancelToken` and a function that, when called,
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+62 -50
View File
@@ -1,4 +1,4 @@
// Axios v1.7.5 Copyright (c) 2024 Matt Zabriskie and contributors // Axios v1.7.6 Copyright (c) 2024 Matt Zabriskie and contributors
'use strict'; 'use strict';
function bind(fn, thisArg) { function bind(fn, thisArg) {
@@ -2637,45 +2637,46 @@ var xhrAdapter = isXHRAdapterSupported && function (config) {
}; };
const composeSignals = (signals, timeout) => { const composeSignals = (signals, timeout) => {
let controller = new AbortController(); const {length} = (signals = signals ? signals.filter(Boolean) : []);
let aborted; if (timeout || length) {
let controller = new AbortController();
const onabort = function (cancel) { let aborted;
if (!aborted) {
aborted = true;
unsubscribe();
const err = cancel instanceof Error ? cancel : this.reason;
controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));
}
};
let timer = timeout && setTimeout(() => { const onabort = function (reason) {
onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT)); if (!aborted) {
}, timeout); aborted = true;
unsubscribe();
const err = reason instanceof Error ? reason : this.reason;
controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));
}
};
const unsubscribe = () => { let timer = timeout && setTimeout(() => {
if (signals) {
timer && clearTimeout(timer);
timer = null; timer = null;
signals.forEach(signal => { onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT));
signal && }, timeout);
(signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));
});
signals = null;
}
};
signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort)); const unsubscribe = () => {
if (signals) {
timer && clearTimeout(timer);
timer = null;
signals.forEach(signal => {
signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);
});
signals = null;
}
};
const {signal} = controller; signals.forEach((signal) => signal.addEventListener('abort', onabort));
signal.unsubscribe = unsubscribe; const {signal} = controller;
return [signal, () => { signal.unsubscribe = () => utils$1.asap(unsubscribe);
timer && clearTimeout(timer);
timer = null; return signal;
}]; }
}; };
var composeSignals$1 = composeSignals; var composeSignals$1 = composeSignals;
@@ -2808,7 +2809,11 @@ const getBodyLength = async (body) => {
} }
if(utils$1.isSpecCompliantForm(body)) { if(utils$1.isSpecCompliantForm(body)) {
return (await new Request(body).arrayBuffer()).byteLength; const _request = new Request(platform.origin, {
method: 'POST',
body,
});
return (await _request.arrayBuffer()).byteLength;
} }
if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) {
@@ -2848,18 +2853,13 @@ var fetchAdapter = isFetchSupported && (async (config) => {
responseType = responseType ? (responseType + '').toLowerCase() : 'text'; responseType = responseType ? (responseType + '').toLowerCase() : 'text';
let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ? let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout);
composeSignals$1([signal, cancelToken], timeout) : [];
let finished, request; let request;
const onFinish = () => { const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {
!finished && setTimeout(() => { composedSignal.unsubscribe();
composedSignal && composedSignal.unsubscribe(); });
});
finished = true;
};
let requestContentLength; let requestContentLength;
@@ -2896,7 +2896,7 @@ var fetchAdapter = isFetchSupported && (async (config) => {
// Cloudflare Workers throws when credentials are defined // Cloudflare Workers throws when credentials are defined
// see https://github.com/cloudflare/workerd/issues/902 // see https://github.com/cloudflare/workerd/issues/902
const isCredentialsSupported = "credentials" in Request.prototype; const isCredentialsSupported = "credentials" in Request.prototype;
request = new Request(url, { request = new Request(url, {
...fetchOptions, ...fetchOptions,
signal: composedSignal, signal: composedSignal,
@@ -2911,7 +2911,7 @@ var fetchAdapter = isFetchSupported && (async (config) => {
const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');
if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) { if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {
const options = {}; const options = {};
['status', 'statusText', 'headers'].forEach(prop => { ['status', 'statusText', 'headers'].forEach(prop => {
@@ -2928,7 +2928,7 @@ var fetchAdapter = isFetchSupported && (async (config) => {
response = new Response( response = new Response(
trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {
flush && flush(); flush && flush();
isStreamResponse && onFinish(); unsubscribe && unsubscribe();
}, encodeText), }, encodeText),
options options
); );
@@ -2938,9 +2938,7 @@ var fetchAdapter = isFetchSupported && (async (config) => {
let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config);
!isStreamResponse && onFinish(); !isStreamResponse && unsubscribe && unsubscribe();
stopTimeout && stopTimeout();
return await new Promise((resolve, reject) => { return await new Promise((resolve, reject) => {
settle(resolve, reject, { settle(resolve, reject, {
@@ -2953,7 +2951,7 @@ var fetchAdapter = isFetchSupported && (async (config) => {
}); });
}) })
} catch (err) { } catch (err) {
onFinish(); unsubscribe && unsubscribe();
if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) { if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {
throw Object.assign( throw Object.assign(
@@ -3115,7 +3113,7 @@ function dispatchRequest(config) {
}); });
} }
const VERSION = "1.7.5"; const VERSION = "1.7.6";
const validators$1 = {}; const validators$1 = {};
@@ -3522,6 +3520,20 @@ class CancelToken {
} }
} }
toAbortSignal() {
const controller = new AbortController();
const abort = (err) => {
controller.abort(err);
};
this.subscribe(abort);
controller.signal.unsubscribe = () => this.unsubscribe(abort);
return controller.signal;
}
/** /**
* Returns an object that contains a new `CancelToken` and a function that, when called, * Returns an object that contains a new `CancelToken` and a function that, when called,
* cancels the `CancelToken`. * cancels the `CancelToken`.
+1 -1
View File
File diff suppressed because one or more lines are too long
+62 -50
View File
@@ -1,4 +1,4 @@
// Axios v1.7.5 Copyright (c) 2024 Matt Zabriskie and contributors // Axios v1.7.6 Copyright (c) 2024 Matt Zabriskie and contributors
function bind(fn, thisArg) { function bind(fn, thisArg) {
return function wrap() { return function wrap() {
return fn.apply(thisArg, arguments); return fn.apply(thisArg, arguments);
@@ -2635,45 +2635,46 @@ const xhrAdapter = isXHRAdapterSupported && function (config) {
}; };
const composeSignals = (signals, timeout) => { const composeSignals = (signals, timeout) => {
let controller = new AbortController(); const {length} = (signals = signals ? signals.filter(Boolean) : []);
let aborted; if (timeout || length) {
let controller = new AbortController();
const onabort = function (cancel) { let aborted;
if (!aborted) {
aborted = true;
unsubscribe();
const err = cancel instanceof Error ? cancel : this.reason;
controller.abort(err instanceof AxiosError$1 ? err : new CanceledError$1(err instanceof Error ? err.message : err));
}
};
let timer = timeout && setTimeout(() => { const onabort = function (reason) {
onabort(new AxiosError$1(`timeout ${timeout} of ms exceeded`, AxiosError$1.ETIMEDOUT)); if (!aborted) {
}, timeout); aborted = true;
unsubscribe();
const err = reason instanceof Error ? reason : this.reason;
controller.abort(err instanceof AxiosError$1 ? err : new CanceledError$1(err instanceof Error ? err.message : err));
}
};
const unsubscribe = () => { let timer = timeout && setTimeout(() => {
if (signals) {
timer && clearTimeout(timer);
timer = null; timer = null;
signals.forEach(signal => { onabort(new AxiosError$1(`timeout ${timeout} of ms exceeded`, AxiosError$1.ETIMEDOUT));
signal && }, timeout);
(signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));
});
signals = null;
}
};
signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort)); const unsubscribe = () => {
if (signals) {
timer && clearTimeout(timer);
timer = null;
signals.forEach(signal => {
signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);
});
signals = null;
}
};
const {signal} = controller; signals.forEach((signal) => signal.addEventListener('abort', onabort));
signal.unsubscribe = unsubscribe; const {signal} = controller;
return [signal, () => { signal.unsubscribe = () => utils$1.asap(unsubscribe);
timer && clearTimeout(timer);
timer = null; return signal;
}]; }
}; };
const composeSignals$1 = composeSignals; const composeSignals$1 = composeSignals;
@@ -2806,7 +2807,11 @@ const getBodyLength = async (body) => {
} }
if(utils$1.isSpecCompliantForm(body)) { if(utils$1.isSpecCompliantForm(body)) {
return (await new Request(body).arrayBuffer()).byteLength; const _request = new Request(platform.origin, {
method: 'POST',
body,
});
return (await _request.arrayBuffer()).byteLength;
} }
if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) {
@@ -2846,18 +2851,13 @@ const fetchAdapter = isFetchSupported && (async (config) => {
responseType = responseType ? (responseType + '').toLowerCase() : 'text'; responseType = responseType ? (responseType + '').toLowerCase() : 'text';
let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ? let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout);
composeSignals$1([signal, cancelToken], timeout) : [];
let finished, request; let request;
const onFinish = () => { const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {
!finished && setTimeout(() => { composedSignal.unsubscribe();
composedSignal && composedSignal.unsubscribe(); });
});
finished = true;
};
let requestContentLength; let requestContentLength;
@@ -2894,7 +2894,7 @@ const fetchAdapter = isFetchSupported && (async (config) => {
// Cloudflare Workers throws when credentials are defined // Cloudflare Workers throws when credentials are defined
// see https://github.com/cloudflare/workerd/issues/902 // see https://github.com/cloudflare/workerd/issues/902
const isCredentialsSupported = "credentials" in Request.prototype; const isCredentialsSupported = "credentials" in Request.prototype;
request = new Request(url, { request = new Request(url, {
...fetchOptions, ...fetchOptions,
signal: composedSignal, signal: composedSignal,
@@ -2909,7 +2909,7 @@ const fetchAdapter = isFetchSupported && (async (config) => {
const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');
if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) { if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {
const options = {}; const options = {};
['status', 'statusText', 'headers'].forEach(prop => { ['status', 'statusText', 'headers'].forEach(prop => {
@@ -2926,7 +2926,7 @@ const fetchAdapter = isFetchSupported && (async (config) => {
response = new Response( response = new Response(
trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {
flush && flush(); flush && flush();
isStreamResponse && onFinish(); unsubscribe && unsubscribe();
}, encodeText), }, encodeText),
options options
); );
@@ -2936,9 +2936,7 @@ const fetchAdapter = isFetchSupported && (async (config) => {
let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config);
!isStreamResponse && onFinish(); !isStreamResponse && unsubscribe && unsubscribe();
stopTimeout && stopTimeout();
return await new Promise((resolve, reject) => { return await new Promise((resolve, reject) => {
settle(resolve, reject, { settle(resolve, reject, {
@@ -2951,7 +2949,7 @@ const fetchAdapter = isFetchSupported && (async (config) => {
}); });
}) })
} catch (err) { } catch (err) {
onFinish(); unsubscribe && unsubscribe();
if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) { if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {
throw Object.assign( throw Object.assign(
@@ -3113,7 +3111,7 @@ function dispatchRequest(config) {
}); });
} }
const VERSION$1 = "1.7.5"; const VERSION$1 = "1.7.6";
const validators$1 = {}; const validators$1 = {};
@@ -3520,6 +3518,20 @@ class CancelToken$1 {
} }
} }
toAbortSignal() {
const controller = new AbortController();
const abort = (err) => {
controller.abort(err);
};
this.subscribe(abort);
controller.signal.unsubscribe = () => this.unsubscribe(abort);
return controller.signal;
}
/** /**
* Returns an object that contains a new `CancelToken` and a function that, when called, * Returns an object that contains a new `CancelToken` and a function that, when called,
* cancels the `CancelToken`. * cancels the `CancelToken`.
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+62 -50
View File
@@ -1,4 +1,4 @@
// Axios v1.7.5 Copyright (c) 2024 Matt Zabriskie and contributors // Axios v1.7.6 Copyright (c) 2024 Matt Zabriskie and contributors
'use strict'; 'use strict';
const FormData$1 = require('form-data'); const FormData$1 = require('form-data');
@@ -2071,7 +2071,7 @@ function buildFullPath(baseURL, requestedURL) {
return requestedURL; return requestedURL;
} }
const VERSION = "1.7.5"; const VERSION = "1.7.6";
function parseProtocol(url) { function parseProtocol(url) {
const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
@@ -3668,45 +3668,46 @@ const xhrAdapter = isXHRAdapterSupported && function (config) {
}; };
const composeSignals = (signals, timeout) => { const composeSignals = (signals, timeout) => {
let controller = new AbortController(); const {length} = (signals = signals ? signals.filter(Boolean) : []);
let aborted; if (timeout || length) {
let controller = new AbortController();
const onabort = function (cancel) { let aborted;
if (!aborted) {
aborted = true;
unsubscribe();
const err = cancel instanceof Error ? cancel : this.reason;
controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));
}
};
let timer = timeout && setTimeout(() => { const onabort = function (reason) {
onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT)); if (!aborted) {
}, timeout); aborted = true;
unsubscribe();
const err = reason instanceof Error ? reason : this.reason;
controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));
}
};
const unsubscribe = () => { let timer = timeout && setTimeout(() => {
if (signals) {
timer && clearTimeout(timer);
timer = null; timer = null;
signals.forEach(signal => { onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT));
signal && }, timeout);
(signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));
});
signals = null;
}
};
signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort)); const unsubscribe = () => {
if (signals) {
timer && clearTimeout(timer);
timer = null;
signals.forEach(signal => {
signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);
});
signals = null;
}
};
const {signal} = controller; signals.forEach((signal) => signal.addEventListener('abort', onabort));
signal.unsubscribe = unsubscribe; const {signal} = controller;
return [signal, () => { signal.unsubscribe = () => utils$1.asap(unsubscribe);
timer && clearTimeout(timer);
timer = null; return signal;
}]; }
}; };
const composeSignals$1 = composeSignals; const composeSignals$1 = composeSignals;
@@ -3839,7 +3840,11 @@ const getBodyLength = async (body) => {
} }
if(utils$1.isSpecCompliantForm(body)) { if(utils$1.isSpecCompliantForm(body)) {
return (await new Request(body).arrayBuffer()).byteLength; const _request = new Request(platform.origin, {
method: 'POST',
body,
});
return (await _request.arrayBuffer()).byteLength;
} }
if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) {
@@ -3879,18 +3884,13 @@ const fetchAdapter = isFetchSupported && (async (config) => {
responseType = responseType ? (responseType + '').toLowerCase() : 'text'; responseType = responseType ? (responseType + '').toLowerCase() : 'text';
let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ? let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout);
composeSignals$1([signal, cancelToken], timeout) : [];
let finished, request; let request;
const onFinish = () => { const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {
!finished && setTimeout(() => { composedSignal.unsubscribe();
composedSignal && composedSignal.unsubscribe(); });
});
finished = true;
};
let requestContentLength; let requestContentLength;
@@ -3927,7 +3927,7 @@ const fetchAdapter = isFetchSupported && (async (config) => {
// Cloudflare Workers throws when credentials are defined // Cloudflare Workers throws when credentials are defined
// see https://github.com/cloudflare/workerd/issues/902 // see https://github.com/cloudflare/workerd/issues/902
const isCredentialsSupported = "credentials" in Request.prototype; const isCredentialsSupported = "credentials" in Request.prototype;
request = new Request(url, { request = new Request(url, {
...fetchOptions, ...fetchOptions,
signal: composedSignal, signal: composedSignal,
@@ -3942,7 +3942,7 @@ const fetchAdapter = isFetchSupported && (async (config) => {
const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');
if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) { if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {
const options = {}; const options = {};
['status', 'statusText', 'headers'].forEach(prop => { ['status', 'statusText', 'headers'].forEach(prop => {
@@ -3959,7 +3959,7 @@ const fetchAdapter = isFetchSupported && (async (config) => {
response = new Response( response = new Response(
trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {
flush && flush(); flush && flush();
isStreamResponse && onFinish(); unsubscribe && unsubscribe();
}, encodeText), }, encodeText),
options options
); );
@@ -3969,9 +3969,7 @@ const fetchAdapter = isFetchSupported && (async (config) => {
let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config);
!isStreamResponse && onFinish(); !isStreamResponse && unsubscribe && unsubscribe();
stopTimeout && stopTimeout();
return await new Promise((resolve, reject) => { return await new Promise((resolve, reject) => {
settle(resolve, reject, { settle(resolve, reject, {
@@ -3984,7 +3982,7 @@ const fetchAdapter = isFetchSupported && (async (config) => {
}); });
}) })
} catch (err) { } catch (err) {
onFinish(); unsubscribe && unsubscribe();
if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) { if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {
throw Object.assign( throw Object.assign(
@@ -4551,6 +4549,20 @@ class CancelToken {
} }
} }
toAbortSignal() {
const controller = new AbortController();
const abort = (err) => {
controller.abort(err);
};
this.subscribe(abort);
controller.signal.unsubscribe = () => this.unsubscribe(abort);
return controller.signal;
}
/** /**
* Returns an object that contains a new `CancelToken` and a function that, when called, * Returns an object that contains a new `CancelToken` and a function that, when called,
* cancels the `CancelToken`. * cancels the `CancelToken`.
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1 +1 @@
export const VERSION = "1.7.5"; export const VERSION = "1.7.6";
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "axios", "name": "axios",
"version": "1.7.5", "version": "1.7.6",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "axios", "name": "axios",
"version": "1.7.5", "version": "1.7.6",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.6", "follow-redirects": "^1.15.6",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "axios", "name": "axios",
"version": "1.7.5", "version": "1.7.6",
"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",
"exports": { "exports": {