Skip to content

Commit

Permalink
fix(backport): custom params serializer support (#6263)
Browse files Browse the repository at this point in the history
  • Loading branch information
briwa committed Mar 28, 2024
1 parent 92a0454 commit 111811e
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 6 deletions.
1 change: 1 addition & 0 deletions index.d.ts
Expand Up @@ -128,6 +128,7 @@ export interface CustomParamsSerializer {

export interface ParamsSerializerOptions extends SerializerOptions {
encode?: ParamEncoder;
serialize?: CustomParamsSerializer;
}

export interface AxiosRequestConfig<D = any> {
Expand Down
7 changes: 7 additions & 0 deletions lib/core/Axios.js
Expand Up @@ -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
Expand Down
18 changes: 13 additions & 5 deletions lib/helpers/buildURL.js
Expand Up @@ -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;
Expand Down
16 changes: 16 additions & 0 deletions test/specs/helpers/buildURL.spec.js
Expand Up @@ -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: function (thisParams, thisOptions) {
expect(thisParams).toEqual(params);
expect(thisOptions).toEqual(options);
return 'rendered';
}
};

expect(buildURL('/foo', params, options)).toEqual('/foo?rendered');
});
});
3 changes: 2 additions & 1 deletion test/typescript/axios.ts
Expand Up @@ -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,
Expand Down

0 comments on commit 111811e

Please sign in to comment.