Skip to content

Commit

Permalink
allow disabling uri encoding, closes #117
Browse files Browse the repository at this point in the history
  • Loading branch information
nlf committed Sep 11, 2015
1 parent e139c9b commit 282980a
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 7 deletions.
19 changes: 12 additions & 7 deletions lib/stringify.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ var internals = {
}
},
strictNullHandling: false,
skipNulls: false
skipNulls: false,
encode: true
};


internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHandling, skipNulls, filter) {
internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter) {

if (typeof filter === 'function') {
obj = filter(prefix, obj);
Expand All @@ -39,7 +40,7 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
}
else if (obj === null) {
if (strictNullHandling) {
return Utils.encode(prefix);
return encode ? Utils.encode(prefix) : prefix;
}

obj = '';
Expand All @@ -49,7 +50,10 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
typeof obj === 'number' ||
typeof obj === 'boolean') {

return [Utils.encode(prefix) + '=' + Utils.encode(obj)];
if (encode) {
return [Utils.encode(prefix) + '=' + Utils.encode(obj)];
}
return [prefix + '=' + obj];
}

var values = [];
Expand All @@ -69,10 +73,10 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
}

if (Array.isArray(obj)) {
values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, filter));
values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
}
else {
values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', generateArrayPrefix, strictNullHandling, skipNulls, filter));
values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
}
}

Expand All @@ -86,6 +90,7 @@ module.exports = function (obj, options) {
var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter;
var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : internals.strictNullHandling;
var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : internals.skipNulls;
var encode = typeof options.encode === 'boolean' ? options.encode : internals.encode;
var objKeys;
var filter;
if (typeof options.filter === 'function') {
Expand Down Expand Up @@ -130,7 +135,7 @@ module.exports = function (obj, options) {
continue;
}

keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, filter));
keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
}

return keys.join(delimiter);
Expand Down
8 changes: 8 additions & 0 deletions test/stringify.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,4 +270,12 @@ describe('stringify()', function () {
done();

});

it('can disable uri encoding', function (done) {

expect(Qs.stringify({ a: 'b' }, { encode: false })).to.equal('a=b');
expect(Qs.stringify({ a: { b: 'c' } }, { encode: false })).to.equal('a[b]=c');
expect(Qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false })).to.equal('a=b&c');
done();
});
});

0 comments on commit 282980a

Please sign in to comment.