qs 5.1.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.travis.yml +1 -0
- package/README.md +8 -1
- package/dist/qs.js +28 -7
- package/lib/stringify.js +15 -3
- package/package.json +1 -1
- package/test/stringify.js +12 -0
package/.travis.yml
CHANGED
package/README.md
CHANGED
|
@@ -201,7 +201,7 @@ Qs.parse('a[][b]=c');
|
|
|
201
201
|
Qs.stringify(object, [options]);
|
|
202
202
|
```
|
|
203
203
|
|
|
204
|
-
When stringifying, **qs**
|
|
204
|
+
When stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect:
|
|
205
205
|
|
|
206
206
|
```javascript
|
|
207
207
|
Qs.stringify({ a: 'b' });
|
|
@@ -210,6 +210,13 @@ Qs.stringify({ a: { b: 'c' } });
|
|
|
210
210
|
// 'a%5Bb%5D=c'
|
|
211
211
|
```
|
|
212
212
|
|
|
213
|
+
This encoding can be disabled by setting the `encode` option to `false`:
|
|
214
|
+
|
|
215
|
+
```javascript
|
|
216
|
+
Qs.stringify({ a: { b: 'c' } }, { encode: false });
|
|
217
|
+
// 'a[b]=c'
|
|
218
|
+
```
|
|
219
|
+
|
|
213
220
|
Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage.
|
|
214
221
|
|
|
215
222
|
When arrays are stringified, by default they are given explicit indices:
|
package/dist/qs.js
CHANGED
|
@@ -228,11 +228,13 @@ var internals = {
|
|
|
228
228
|
return prefix;
|
|
229
229
|
}
|
|
230
230
|
},
|
|
231
|
-
strictNullHandling: false
|
|
231
|
+
strictNullHandling: false,
|
|
232
|
+
skipNulls: false,
|
|
233
|
+
encode: true
|
|
232
234
|
};
|
|
233
235
|
|
|
234
236
|
|
|
235
|
-
internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHandling, filter) {
|
|
237
|
+
internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter) {
|
|
236
238
|
|
|
237
239
|
if (typeof filter === 'function') {
|
|
238
240
|
obj = filter(prefix, obj);
|
|
@@ -245,7 +247,7 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
|
|
|
245
247
|
}
|
|
246
248
|
else if (obj === null) {
|
|
247
249
|
if (strictNullHandling) {
|
|
248
|
-
return Utils.encode(prefix);
|
|
250
|
+
return encode ? Utils.encode(prefix) : prefix;
|
|
249
251
|
}
|
|
250
252
|
|
|
251
253
|
obj = '';
|
|
@@ -255,7 +257,10 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
|
|
|
255
257
|
typeof obj === 'number' ||
|
|
256
258
|
typeof obj === 'boolean') {
|
|
257
259
|
|
|
258
|
-
|
|
260
|
+
if (encode) {
|
|
261
|
+
return [Utils.encode(prefix) + '=' + Utils.encode(obj)];
|
|
262
|
+
}
|
|
263
|
+
return [prefix + '=' + obj];
|
|
259
264
|
}
|
|
260
265
|
|
|
261
266
|
var values = [];
|
|
@@ -268,11 +273,17 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
|
|
|
268
273
|
for (var i = 0, il = objKeys.length; i < il; ++i) {
|
|
269
274
|
var key = objKeys[i];
|
|
270
275
|
|
|
276
|
+
if (skipNulls &&
|
|
277
|
+
obj[key] === null) {
|
|
278
|
+
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
|
|
271
282
|
if (Array.isArray(obj)) {
|
|
272
|
-
values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, filter));
|
|
283
|
+
values = values.concat(internals.stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
|
|
273
284
|
}
|
|
274
285
|
else {
|
|
275
|
-
values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', generateArrayPrefix, strictNullHandling, filter));
|
|
286
|
+
values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']', generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
|
|
276
287
|
}
|
|
277
288
|
}
|
|
278
289
|
|
|
@@ -285,6 +296,8 @@ module.exports = function (obj, options) {
|
|
|
285
296
|
options = options || {};
|
|
286
297
|
var delimiter = typeof options.delimiter === 'undefined' ? internals.delimiter : options.delimiter;
|
|
287
298
|
var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : internals.strictNullHandling;
|
|
299
|
+
var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : internals.skipNulls;
|
|
300
|
+
var encode = typeof options.encode === 'boolean' ? options.encode : internals.encode;
|
|
288
301
|
var objKeys;
|
|
289
302
|
var filter;
|
|
290
303
|
if (typeof options.filter === 'function') {
|
|
@@ -319,9 +332,17 @@ module.exports = function (obj, options) {
|
|
|
319
332
|
if (!objKeys) {
|
|
320
333
|
objKeys = Object.keys(obj);
|
|
321
334
|
}
|
|
335
|
+
|
|
322
336
|
for (var i = 0, il = objKeys.length; i < il; ++i) {
|
|
323
337
|
var key = objKeys[i];
|
|
324
|
-
|
|
338
|
+
|
|
339
|
+
if (skipNulls &&
|
|
340
|
+
obj[key] === null) {
|
|
341
|
+
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
|
|
325
346
|
}
|
|
326
347
|
|
|
327
348
|
return keys.join(delimiter);
|
package/lib/stringify.js
CHANGED
|
@@ -27,7 +27,7 @@ var internals = {
|
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter) {
|
|
30
|
+
internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort) {
|
|
31
31
|
|
|
32
32
|
if (typeof filter === 'function') {
|
|
33
33
|
obj = filter(prefix, obj);
|
|
@@ -62,7 +62,14 @@ internals.stringify = function (obj, prefix, generateArrayPrefix, strictNullHand
|
|
|
62
62
|
return values;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
var objKeys
|
|
65
|
+
var objKeys;
|
|
66
|
+
if (Array.isArray(filter)) {
|
|
67
|
+
objKeys = filter;
|
|
68
|
+
} else {
|
|
69
|
+
var keys = Object.keys(obj);
|
|
70
|
+
objKeys = sort ? keys.sort(sort) : keys;
|
|
71
|
+
}
|
|
72
|
+
|
|
66
73
|
for (var i = 0, il = objKeys.length; i < il; ++i) {
|
|
67
74
|
var key = objKeys[i];
|
|
68
75
|
|
|
@@ -91,6 +98,7 @@ module.exports = function (obj, options) {
|
|
|
91
98
|
var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : internals.strictNullHandling;
|
|
92
99
|
var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : internals.skipNulls;
|
|
93
100
|
var encode = typeof options.encode === 'boolean' ? options.encode : internals.encode;
|
|
101
|
+
var sort = typeof options.sort === 'function' ? options.sort : null;
|
|
94
102
|
var objKeys;
|
|
95
103
|
var filter;
|
|
96
104
|
if (typeof options.filter === 'function') {
|
|
@@ -126,6 +134,10 @@ module.exports = function (obj, options) {
|
|
|
126
134
|
objKeys = Object.keys(obj);
|
|
127
135
|
}
|
|
128
136
|
|
|
137
|
+
if (sort) {
|
|
138
|
+
objKeys.sort(sort);
|
|
139
|
+
}
|
|
140
|
+
|
|
129
141
|
for (var i = 0, il = objKeys.length; i < il; ++i) {
|
|
130
142
|
var key = objKeys[i];
|
|
131
143
|
|
|
@@ -135,7 +147,7 @@ module.exports = function (obj, options) {
|
|
|
135
147
|
continue;
|
|
136
148
|
}
|
|
137
149
|
|
|
138
|
-
keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter));
|
|
150
|
+
keys = keys.concat(internals.stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encode, filter, sort));
|
|
139
151
|
}
|
|
140
152
|
|
|
141
153
|
return keys.join(delimiter);
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "qs",
|
|
3
3
|
"description": "A querystring parser that supports nesting and arrays, with a depth limit",
|
|
4
4
|
"homepage": "https://github.com/hapijs/qs",
|
|
5
|
-
"version": "5.
|
|
5
|
+
"version": "5.2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "https://github.com/hapijs/qs.git"
|
package/test/stringify.js
CHANGED
|
@@ -278,4 +278,16 @@ describe('stringify()', function () {
|
|
|
278
278
|
expect(Qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false })).to.equal('a=b&c');
|
|
279
279
|
done();
|
|
280
280
|
});
|
|
281
|
+
|
|
282
|
+
it('can sort the keys', function (done) {
|
|
283
|
+
|
|
284
|
+
var sort = function alphabeticalSort (a, b) {
|
|
285
|
+
|
|
286
|
+
return a.localeCompare(b);
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
expect(Qs.stringify({ a: 'c', z: 'y', b : 'f' }, { sort : sort })).to.equal('a=c&b=f&z=y');
|
|
290
|
+
expect(Qs.stringify({ a: 'c', z: { j: 'a', i:'b' }, b : 'f' }, { sort : sort })).to.equal('a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a');
|
|
291
|
+
done();
|
|
292
|
+
});
|
|
281
293
|
});
|