From 300322395805bc5174ca86c81b7db275edda2756 Mon Sep 17 00:00:00 2001 From: briwa Date: Tue, 27 Feb 2024 14:04:32 +0700 Subject: [PATCH 1/3] 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, From 12ff1e3463d5b3e174a6085ca51fb0da923bc940 Mon Sep 17 00:00:00 2001 From: briwa Date: Tue, 27 Feb 2024 14:20:32 +0700 Subject: [PATCH 2/3] chore: style fixes --- test/specs/helpers/buildURL.spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/specs/helpers/buildURL.spec.js b/test/specs/helpers/buildURL.spec.js index 4f00408fd8..6ddba8f009 100644 --- a/test/specs/helpers/buildURL.spec.js +++ b/test/specs/helpers/buildURL.spec.js @@ -67,13 +67,13 @@ describe('helpers::buildURL', function () { it('should support custom serialize function', function () { var params = { x: 1 - } + }; var options = { - serialize: (thisParams, thisOptions) => { + serialize: function (thisParams, thisOptions) { expect(thisParams).toEqual(params); expect(thisOptions).toEqual(options); - return 'rendered' + return 'rendered'; } }; From f6f9f8d9a8d118d24d334795048986102fd79235 Mon Sep 17 00:00:00 2001 From: briwa Date: Fri, 22 Mar 2024 09:46:41 +0700 Subject: [PATCH 3/3] chore: add typings in index --- index.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/index.d.ts b/index.d.ts index 27dbd1a479..4ef1a65201 100644 --- a/index.d.ts +++ b/index.d.ts @@ -128,6 +128,7 @@ export interface CustomParamsSerializer { export interface ParamsSerializerOptions extends SerializerOptions { encode?: ParamEncoder; + serialize?: CustomParamsSerializer; } export interface AxiosRequestConfig {