From 300322395805bc5174ca86c81b7db275edda2756 Mon Sep 17 00:00:00 2001 From: briwa Date: Tue, 27 Feb 2024 14:04:32 +0700 Subject: [PATCH] backport: custom params serializer support for v0.x originally implemented in #5113 --- lib/core/Axios.js | 7 +++++++ lib/helpers/buildURL.js | 18 +++++++++++++----- test/specs/helpers/buildURL.spec.js | 16 ++++++++++++++++ test/typescript/axios.ts | 3 ++- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/lib/core/Axios.js b/lib/core/Axios.js index b9ea3e3a2b..84410891ac 100644 --- a/lib/core/Axios.js +++ b/lib/core/Axios.js @@ -61,6 +61,13 @@ Axios.prototype.request = function request(configOrUrl, config) { var paramsSerializer = config.paramsSerializer; + if (paramsSerializer !== undefined) { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + utils.isFunction(paramsSerializer) && (config.paramsSerializer = {serialize: paramsSerializer}); // filter out skipped interceptors diff --git a/lib/helpers/buildURL.js b/lib/helpers/buildURL.js index bebacb3aee..9be8196e2a 100644 --- a/lib/helpers/buildURL.js +++ b/lib/helpers/buildURL.js @@ -35,12 +35,20 @@ module.exports = function buildURL(url, params, options) { var _encode = options && options.encode || encode; - var serializerParams = utils.isURLSearchParams(params) ? - params.toString() : - new AxiosURLSearchParams(params, options).toString(_encode); + var serializeFn = options && options.serialize; - if (serializerParams) { - url += (url.indexOf('?') === -1 ? '?' : '&') + serializerParams; + var serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, options); + } else { + serializedParams = utils.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams(params, options).toString(_encode); + } + + if (serializedParams) { + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; } return url; diff --git a/test/specs/helpers/buildURL.spec.js b/test/specs/helpers/buildURL.spec.js index 0bee3e9a05..4f00408fd8 100644 --- a/test/specs/helpers/buildURL.spec.js +++ b/test/specs/helpers/buildURL.spec.js @@ -63,4 +63,20 @@ describe('helpers::buildURL', function () { it('should support URLSearchParams', function () { expect(buildURL('/foo', new URLSearchParams('bar=baz'))).toEqual('/foo?bar=baz'); }); + + it('should support custom serialize function', function () { + var params = { + x: 1 + } + + var options = { + serialize: (thisParams, thisOptions) => { + expect(thisParams).toEqual(params); + expect(thisOptions).toEqual(options); + return 'rendered' + } + }; + + expect(buildURL('/foo', params, options)).toEqual('/foo?rendered'); + }); }); diff --git a/test/typescript/axios.ts b/test/typescript/axios.ts index 2bfb23c07a..60873d89a3 100644 --- a/test/typescript/axios.ts +++ b/test/typescript/axios.ts @@ -22,7 +22,8 @@ const config: AxiosRequestConfig = { params: { id: 12345 }, paramsSerializer: { indexes: true, - encode: (value) => value + encode: (value) => value, + serialize: (value, options) => String(value) }, data: { foo: 'bar' }, timeout: 10000,