diff --git a/index.d.ts b/index.d.ts index 6a83f60a0f..bcbe91e797 100644 --- a/index.d.ts +++ b/index.d.ts @@ -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 { diff --git a/lib/core/dispatchRequest.js b/lib/core/dispatchRequest.js index fa1ad95765..997d4c952e 100644 --- a/lib/core/dispatchRequest.js +++ b/lib/core/dispatchRequest.js @@ -36,6 +36,7 @@ module.exports = function dispatchRequest(config) { config, config.data, config.headers, + null, config.transformRequest ); @@ -63,6 +64,7 @@ module.exports = function dispatchRequest(config) { config, response.data, response.headers, + response.status, config.transformResponse ); @@ -77,6 +79,7 @@ module.exports = function dispatchRequest(config) { config, reason.response.data, reason.response.headers, + reason.response.status, config.transformResponse ); } diff --git a/lib/core/transformData.js b/lib/core/transformData.js index 82ee7dd7af..d54ccea80f 100644 --- a/lib/core/transformData.js +++ b/lib/core/transformData.js @@ -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; diff --git a/test/specs/core/transformData.spec.js b/test/specs/core/transformData.spec.js index 95479bdd3e..db2dae4306 100644 --- a/test/specs/core/transformData.spec.js +++ b/test/specs/core/transformData.spec.js @@ -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; }); @@ -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) { @@ -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'); + }); + + 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'); + }); }); diff --git a/test/unit/defaults/transformReponse.js b/test/unit/defaults/transformReponse.js index 450069e993..ff49a0baf4 100644 --- a/test/unit/defaults/transformReponse.js +++ b/test/unit/defaults/transformReponse.js @@ -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 = 'hello, world'; - 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); }); });