qs 2.2.4 → 2.2.5
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/CHANGELOG.md +3 -0
- package/lib/stringify.js +12 -8
- package/lib/utils.js +20 -33
- package/package.json +1 -2
- package/test/parse.js +12 -3
- package/test/stringify.js +20 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
|
|
2
|
+
## [**2.2.4**](https://github.com/hapijs/qs/issues?milestone=13&state=closed)
|
|
3
|
+
- [**#38**](https://github.com/hapijs/qs/issues/38) how to handle object keys beginning with a number
|
|
4
|
+
|
|
2
5
|
## [**2.2.3**](https://github.com/hapijs/qs/issues?milestone=12&state=closed)
|
|
3
6
|
- [**#37**](https://github.com/hapijs/qs/issues/37) parser discards first empty value in array
|
|
4
7
|
- [**#36**](https://github.com/hapijs/qs/issues/36) Update to lab 4.x
|
package/lib/stringify.js
CHANGED
|
@@ -31,10 +31,14 @@ internals.stringify = function (obj, prefix) {
|
|
|
31
31
|
|
|
32
32
|
var values = [];
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
if (typeof obj === 'undefined') {
|
|
35
|
+
return values;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
var objKeys = Object.keys(obj);
|
|
39
|
+
for (var i = 0, il = objKeys.length; i < il; ++i) {
|
|
40
|
+
var key = objKeys[i];
|
|
41
|
+
values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']'));
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
return values;
|
|
@@ -48,10 +52,10 @@ module.exports = function (obj, options) {
|
|
|
48
52
|
|
|
49
53
|
var keys = [];
|
|
50
54
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
var objKeys = Object.keys(obj);
|
|
56
|
+
for (var i = 0, il = objKeys.length; i < il; ++i) {
|
|
57
|
+
var key = objKeys[i];
|
|
58
|
+
keys = keys.concat(internals.stringify(obj[key], key));
|
|
55
59
|
}
|
|
56
60
|
|
|
57
61
|
return keys.join(delimiter);
|
package/lib/utils.js
CHANGED
|
@@ -26,29 +26,20 @@ exports.merge = function (target, source) {
|
|
|
26
26
|
return target;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
if (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
target[i] = exports.merge(target[i], source[i]);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
target[i] = source[i];
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
29
|
+
if (typeof source !== 'object') {
|
|
30
|
+
target.push(source);
|
|
31
|
+
return target;
|
|
32
|
+
}
|
|
40
33
|
|
|
34
|
+
if (typeof target !== 'object') {
|
|
35
|
+
target = [target].concat(source);
|
|
41
36
|
return target;
|
|
42
37
|
}
|
|
43
38
|
|
|
44
|
-
if (Array.isArray(target)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
target = exports.arrayToObject(target);
|
|
51
|
-
}
|
|
39
|
+
if (Array.isArray(target) &&
|
|
40
|
+
!Array.isArray(source)) {
|
|
41
|
+
|
|
42
|
+
target = exports.arrayToObject(target);
|
|
52
43
|
}
|
|
53
44
|
|
|
54
45
|
var keys = Object.keys(source);
|
|
@@ -56,18 +47,11 @@ exports.merge = function (target, source) {
|
|
|
56
47
|
var key = keys[k];
|
|
57
48
|
var value = source[key];
|
|
58
49
|
|
|
59
|
-
if (
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (!target[key]) {
|
|
63
|
-
target[key] = value;
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
target[key] = exports.merge(target[key], value);
|
|
67
|
-
}
|
|
50
|
+
if (!target[key]) {
|
|
51
|
+
target[key] = value;
|
|
68
52
|
}
|
|
69
53
|
else {
|
|
70
|
-
target[key] = value;
|
|
54
|
+
target[key] = exports.merge(target[key], value);
|
|
71
55
|
}
|
|
72
56
|
}
|
|
73
57
|
|
|
@@ -130,10 +114,13 @@ exports.isRegExp = function (obj) {
|
|
|
130
114
|
|
|
131
115
|
exports.isBuffer = function (obj) {
|
|
132
116
|
|
|
133
|
-
if (
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
else {
|
|
117
|
+
if (obj === null ||
|
|
118
|
+
typeof obj === 'undefined') {
|
|
119
|
+
|
|
137
120
|
return false;
|
|
138
121
|
}
|
|
122
|
+
|
|
123
|
+
return !!(obj.constructor &&
|
|
124
|
+
obj.constructor.isBuffer &&
|
|
125
|
+
obj.constructor.isBuffer(obj));
|
|
139
126
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qs",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.5",
|
|
4
4
|
"description": "A querystring parser that supports nesting and arrays, with a depth limit",
|
|
5
5
|
"homepage": "https://github.com/hapijs/qs",
|
|
6
6
|
"main": "index.js",
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"querystring",
|
|
20
20
|
"qs"
|
|
21
21
|
],
|
|
22
|
-
"author": "Nathan LaFreniere <quitlahok@gmail.com>",
|
|
23
22
|
"licenses": [
|
|
24
23
|
{
|
|
25
24
|
"type": "BSD",
|
package/test/parse.js
CHANGED
|
@@ -13,13 +13,11 @@ var internals = {};
|
|
|
13
13
|
|
|
14
14
|
var lab = exports.lab = Lab.script();
|
|
15
15
|
var expect = Lab.expect;
|
|
16
|
-
var before = lab.before;
|
|
17
|
-
var after = lab.after;
|
|
18
16
|
var describe = lab.experiment;
|
|
19
17
|
var it = lab.test;
|
|
20
18
|
|
|
21
19
|
|
|
22
|
-
describe('
|
|
20
|
+
describe('parse()', function () {
|
|
23
21
|
|
|
24
22
|
it('parses a simple string', function (done) {
|
|
25
23
|
|
|
@@ -82,6 +80,17 @@ describe('#parse', function () {
|
|
|
82
80
|
done();
|
|
83
81
|
});
|
|
84
82
|
|
|
83
|
+
it('parses a mix of simple and explicit arrays', function (done) {
|
|
84
|
+
|
|
85
|
+
expect(Qs.parse('a=b&a[]=c')).to.deep.equal({ a: ['b', 'c'] });
|
|
86
|
+
expect(Qs.parse('a[]=b&a=c')).to.deep.equal({ a: ['b', 'c'] });
|
|
87
|
+
expect(Qs.parse('a[0]=b&a=c')).to.deep.equal({ a: ['b', 'c'] });
|
|
88
|
+
expect(Qs.parse('a=b&a[0]=c')).to.deep.equal({ a: ['b', 'c'] });
|
|
89
|
+
expect(Qs.parse('a[1]=b&a=c')).to.deep.equal({ a: ['b', 'c'] });
|
|
90
|
+
expect(Qs.parse('a=b&a[1]=c')).to.deep.equal({ a: ['b', 'c'] });
|
|
91
|
+
done();
|
|
92
|
+
});
|
|
93
|
+
|
|
85
94
|
it('parses a nested array', function (done) {
|
|
86
95
|
|
|
87
96
|
expect(Qs.parse('a[b][]=c&a[b][]=d')).to.deep.equal({ a: { b: ['c', 'd'] } });
|
package/test/stringify.js
CHANGED
|
@@ -13,13 +13,11 @@ var internals = {};
|
|
|
13
13
|
|
|
14
14
|
var lab = exports.lab = Lab.script();
|
|
15
15
|
var expect = Lab.expect;
|
|
16
|
-
var before = lab.before;
|
|
17
|
-
var after = lab.after;
|
|
18
16
|
var describe = lab.experiment;
|
|
19
17
|
var it = lab.test;
|
|
20
18
|
|
|
21
19
|
|
|
22
|
-
describe('
|
|
20
|
+
describe('stringify()', function () {
|
|
23
21
|
|
|
24
22
|
it('stringifies a querystring object', function (done) {
|
|
25
23
|
|
|
@@ -70,6 +68,25 @@ describe('#stringify', function () {
|
|
|
70
68
|
done();
|
|
71
69
|
});
|
|
72
70
|
|
|
71
|
+
it('stringifies an empty object', function (done) {
|
|
72
|
+
|
|
73
|
+
var obj = Object.create(null);
|
|
74
|
+
obj.a = 'b';
|
|
75
|
+
expect(Qs.stringify(obj)).to.equal('a=b');
|
|
76
|
+
done();
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('stringifies an object with an empty object as a child', function (done) {
|
|
80
|
+
|
|
81
|
+
var obj = {
|
|
82
|
+
a: Object.create(null)
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
obj.a.b = 'c';
|
|
86
|
+
expect(Qs.stringify(obj)).to.equal('a%5Bb%5D=c');
|
|
87
|
+
done();
|
|
88
|
+
});
|
|
89
|
+
|
|
73
90
|
it('drops keys with a value of undefined', function (done) {
|
|
74
91
|
|
|
75
92
|
expect(Qs.stringify({ a: undefined })).to.equal('');
|