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 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
- for (var key in obj) {
35
- if (obj.hasOwnProperty(key)) {
36
- values = values.concat(internals.stringify(obj[key], prefix + '[' + key + ']'));
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
- for (var key in obj) {
52
- if (obj.hasOwnProperty(key)) {
53
- keys = keys.concat(internals.stringify(obj[key], key));
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 (Array.isArray(source)) {
30
- for (var i = 0, il = source.length; i < il; ++i) {
31
- if (typeof source[i] !== 'undefined') {
32
- if (typeof target[i] === 'object') {
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
- if (typeof source !== 'object') {
46
- target.push(source);
47
- return target;
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 (value &&
60
- typeof value === 'object') {
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 (typeof Buffer !== 'undefined') {
134
- return Buffer.isBuffer(obj);
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.4",
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('#parse', function () {
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('#stringify', function () {
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('');