Skip to content

Commit

Permalink
Added the ability for the url-encoded-form serializer to respect th…
Browse files Browse the repository at this point in the history
…e `formSerializer` config; (#4721)

Added test for `formSerializer` config in context of `url-encoded-form` serializer;
  • Loading branch information
DigitalBrainJS committed May 17, 2022
1 parent e6f9026 commit bd39124
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 9 deletions.
2 changes: 1 addition & 1 deletion lib/defaults/index.js
Expand Up @@ -77,7 +77,7 @@ var defaults = {

if (isObjectPayload) {
if (contentType.indexOf('application/x-www-form-urlencoded') !== -1) {
return toURLEncodedForm(data).toString();
return toURLEncodedForm(data, this.formSerializer).toString();
}

if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') !== -1) {
Expand Down
6 changes: 3 additions & 3 deletions lib/helpers/toURLEncodedForm.js
Expand Up @@ -4,8 +4,8 @@ var utils = require('../utils');
var toFormData = require('./toFormData');
var platform = require('../platform/');

module.exports = function toURLEncodedForm(data) {
return toFormData(data, new platform.classes.URLSearchParams(), {
module.exports = function toURLEncodedForm(data, options) {
return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({
visitor: function(value, key, path, helpers) {
if (platform.isNode && utils.isBuffer(value)) {
this.append(key, value.toString('base64'));
Expand All @@ -14,5 +14,5 @@ module.exports = function toURLEncodedForm(data) {

return helpers.defaultVisitor.apply(this, arguments);
}
});
}, options));
};
6 changes: 2 additions & 4 deletions lib/platform/browser/classes/URLSearchParams.js
@@ -1,8 +1,6 @@
'use strict';

module.exports = (function getURLSearchParams(nativeURLSearchParams) {
if (typeof nativeURLSearchParams === 'function') return nativeURLSearchParams;

module.exports = typeof URLSearchParams !== 'undefined' ? URLSearchParams : (function defineURLSearchParams() {
function encode(str) {
var charMap = {
'!': '%21',
Expand Down Expand Up @@ -35,4 +33,4 @@ module.exports = (function getURLSearchParams(nativeURLSearchParams) {
};

return URLSearchParams;
})(URLSearchParams);
})();
36 changes: 35 additions & 1 deletion test/unit/adapters/http.js
Expand Up @@ -1404,8 +1404,42 @@ describe('supports http with nodejs', function () {
.then(function (res) {
assert.deepStrictEqual(res.data, obj);
done();
}, done);
}).catch(done);
});
});
});

it('should respect formSerializer config', function (done) {
const obj = {
arr1: ['1', '2', '3'],
arr2: ['1', ['2'], '3'],
};

const form = new URLSearchParams();

form.append('arr1[0]', '1');
form.append('arr1[1]', '2');
form.append('arr1[2]', '3');

form.append('arr2[0]', '1');
form.append('arr2[1][0]', '2');
form.append('arr2[2]', '3');

server = http.createServer(function (req, res) {
req.pipe(res);
}).listen(3001, () => {
return axios.post('http://localhost:3001/', obj, {
headers: {
'content-type': 'application/x-www-form-urlencoded'
},
formSerializer: {
indexes: true
}
})
.then(function (res) {
assert.strictEqual(res.data, form.toString());
done();
}).catch(done);
});
});
});

0 comments on commit bd39124

Please sign in to comment.