Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding HTTP status code for transformResponse #4580

Merged
merged 10 commits into from May 9, 2022
2 changes: 1 addition & 1 deletion index.d.ts
Expand Up @@ -10,7 +10,7 @@ export interface AxiosRequestTransformer {
}

export interface AxiosResponseTransformer {
(data: any, headers?: AxiosResponseHeaders): any;
(data: any, headers?: AxiosResponseHeaders, status?: number): any;
}

export interface AxiosAdapter {
Expand Down
3 changes: 3 additions & 0 deletions lib/core/dispatchRequest.js
Expand Up @@ -36,6 +36,7 @@ module.exports = function dispatchRequest(config) {
config,
config.data,
config.headers,
null,
config.transformRequest
);

Expand Down Expand Up @@ -63,6 +64,7 @@ module.exports = function dispatchRequest(config) {
config,
response.data,
response.headers,
response.status,
config.transformResponse
);

Expand All @@ -77,6 +79,7 @@ module.exports = function dispatchRequest(config) {
config,
reason.response.data,
reason.response.headers,
reason.response.status,
config.transformResponse
);
}
Expand Down
5 changes: 3 additions & 2 deletions lib/core/transformData.js
Expand Up @@ -8,14 +8,15 @@ var defaults = require('../defaults');
*
* @param {Object|String} data The data to be transformed
* @param {Array} headers The headers for the request or response
* @param {Number} status HTTP status code
* @param {Array|Function} fns A single function or Array of functions
* @returns {*} The resulting transformed data
*/
module.exports = function transformData(data, headers, fns) {
module.exports = function transformData(data, headers, status, fns) {
var context = this || defaults;
/*eslint no-param-reassign:0*/
utils.forEach(fns, function transform(fn) {
data = fn.call(context, data, headers);
data = fn.call(context, data, headers, status);
});

return data;
Expand Down
27 changes: 25 additions & 2 deletions test/specs/core/transformData.spec.js
Expand Up @@ -3,7 +3,7 @@ var transformData = require('../../../lib/core/transformData');
describe('core::transformData', function () {
it('should support a single transformer', function () {
var data;
data = transformData(data, null, function (data) {
data = transformData(data, null, null, function (data) {
data = 'foo';
return data;
});
Expand All @@ -13,7 +13,7 @@ describe('core::transformData', function () {

it('should support an array of transformers', function () {
var data = '';
data = transformData(data, null, [function (data) {
data = transformData(data, null, null, [function (data) {
data += 'f';
return data;
}, function (data) {
Expand All @@ -26,5 +26,28 @@ describe('core::transformData', function () {

expect(data).toEqual('foo');
});

it('should support reference headers in transformData', function () {
var headers = {
'content-type': 'foo/bar',
};
var data = '';
data = transformData(data, headers, null, [function (data, headers) {
data += headers['content-type'];
return data;
}]);

expect(data).toEqual('foo/bar');
});
jasonsaayman marked this conversation as resolved.
Show resolved Hide resolved

it('should support reference status code in transformData', function () {
var data = '';
data = transformData(data, null, 200, [function (data, headers, status) {
data += status;
return data;
}]);

expect(data).toEqual('200');
});
});

8 changes: 4 additions & 4 deletions test/unit/defaults/transformReponse.js
Expand Up @@ -6,24 +6,24 @@ describe('transformResponse', function () {
describe('200 request', function () {
it('parses json', function () {
var data = '{"message": "hello, world"}';
var result = transformData(data, {'content-type': 'application/json'}, defaults.transformResponse);
var result = transformData(data, {'content-type': 'application/json'}, 200, defaults.transformResponse);
assert.strictEqual(result.message, 'hello, world');
});
it('ignores XML', function () {
var data = '<message>hello, world</message>';
var result = transformData(data, {'content-type': 'text/xml'}, defaults.transformResponse);
var result = transformData(data, {'content-type': 'text/xml'}, 200, defaults.transformResponse);
assert.strictEqual(result, data);
});
});
describe('204 request', function () {
it('does not parse the empty string', function () {
var data = '';
var result = transformData(data, {'content-type': undefined}, defaults.transformResponse);
var result = transformData(data, {'content-type': undefined}, 204, defaults.transformResponse);
assert.strictEqual(result, '');
});
it('does not parse undefined', function () {
var data = undefined;
var result = transformData(data, {'content-type': undefined}, defaults.transformResponse);
var result = transformData(data, {'content-type': undefined}, 200, defaults.transformResponse);
assert.strictEqual(result, data);
});
});
Expand Down