querystring: do not add sep for empty array
authorcjihrig <cjihrig@gmail.com>
Sat, 19 Jul 2014 05:27:34 +0000 (01:27 -0400)
committerFedor Indutny <fedor@indutny.com>
Wed, 23 Jul 2014 20:41:51 +0000 (00:41 +0400)
Currently, stringification of an empty array outputs a single
separator character. This commit causes an empty array to output
the empty string.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
lib/querystring.js
test/simple/test-querystring.js

index aa3f3c7..369316c 100644 (file)
@@ -128,9 +128,6 @@ var stringifyPrimitive = function(v) {
 QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) {
   sep = sep || '&';
   eq = eq || '=';
-  if (util.isNull(obj)) {
-    obj = undefined;
-  }
 
   var encode = QueryString.escape;
   if (options && typeof options.encodeURIComponent === 'function') {
@@ -138,16 +135,22 @@ QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) {
   }
 
   if (util.isObject(obj)) {
-    return Object.keys(obj).map(function(k) {
+    var keys = Object.keys(obj);
+    var fields = [];
+
+    for (var i = 0; i < keys.length; i++) {
+      var k = keys[i];
+      var v = obj[k];
       var ks = encode(stringifyPrimitive(k)) + eq;
-      if (util.isArray(obj[k])) {
-        return obj[k].map(function(v) {
-          return ks + encode(stringifyPrimitive(v));
-        }).join(sep);
+
+      if (util.isArray(v)) {
+        for (var j = 0; j < v.length; j++)
+          fields.push(ks + encode(stringifyPrimitive(v[j])));
       } else {
-        return ks + encode(stringifyPrimitive(obj[k]));
+        fields.push(ks + encode(stringifyPrimitive(v)));
       }
-    }).join(sep);
+    }
+    return fields.join(sep);
   }
   return '';
 };
index 3cee808..c6390d7 100644 (file)
@@ -57,7 +57,9 @@ var qsTestCases = [
       valueOf: 'bar',
       __defineGetter__: 'baz' }],
   // See: https://github.com/joyent/node/issues/3058
-  ['foo&bar=baz', 'foo=&bar=baz', { foo: '', bar: 'baz' }]
+  ['foo&bar=baz', 'foo=&bar=baz', { foo: '', bar: 'baz' }],
+  [null, '', {}],
+  [undefined, '', {}]
 ];
 
 // [ wonkyQS, canonicalQS, obj ]
@@ -87,7 +89,8 @@ var qsWeirdObjects = [
   [{f: false, t: true}, 'f=false&t=true', {'f': 'false', 't': 'true'}],
   [{n: null}, 'n=', {'n': ''}],
   [{nan: NaN}, 'nan=', {'nan': ''}],
-  [{inf: Infinity}, 'inf=', {'inf': ''}]
+  [{inf: Infinity}, 'inf=', {'inf': ''}],
+  [{a: [], b: []}, '', {}]
 ];
 // }}}