qs 6.9.3 → 6.9.4

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,3 +1,9 @@
1
+ ## **6.9.4**
2
+ - [Fix] `stringify`: when `arrayFormat` is `comma`, respect `serializeDate` (#364)
3
+ - [Refactor] `stringify`: reduce branching (part of #350)
4
+ - [Refactor] move `maybeMap` to `utils`
5
+ - [Dev Deps] update `browserify`, `tape`
6
+
1
7
  ## **6.9.3**
2
8
  - [Fix] proper comma parsing of URL-encoded commas (#361)
3
9
  - [Fix] parses comma delimited array while having percent-encoded comma treated as normal text (#336)
package/dist/qs.js CHANGED
@@ -79,17 +79,6 @@ var parseArrayValue = function (val, options) {
79
79
  return val;
80
80
  };
81
81
 
82
- var maybeMap = function maybeMap(val, fn) {
83
- if (isArray(val)) {
84
- var mapped = [];
85
- for (var i = 0; i < val.length; i += 1) {
86
- mapped.push(fn(val[i]));
87
- }
88
- return mapped;
89
- }
90
- return fn(val);
91
- };
92
-
93
82
  // This is what browsers will submit when the ✓ character occurs in an
94
83
  // application/x-www-form-urlencoded body and the encoding of the page containing
95
84
  // the form is iso-8859-1, or when the submitted form has an accept-charset
@@ -138,7 +127,7 @@ var parseValues = function parseQueryStringValues(str, options) {
138
127
  val = options.strictNullHandling ? null : '';
139
128
  } else {
140
129
  key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');
141
- val = maybeMap(
130
+ val = utils.maybeMap(
142
131
  parseArrayValue(part.slice(pos + 1), options),
143
132
  function (encodedVal) {
144
133
  return options.decoder(encodedVal, defaults.decoder, charset, 'value');
@@ -387,7 +376,12 @@ var stringify = function stringify(
387
376
  } else if (obj instanceof Date) {
388
377
  obj = serializeDate(obj);
389
378
  } else if (generateArrayPrefix === 'comma' && isArray(obj)) {
390
- obj = obj.join(',');
379
+ obj = utils.maybeMap(obj, function (value) {
380
+ if (value instanceof Date) {
381
+ return serializeDate(value);
382
+ }
383
+ return value;
384
+ }).join(',');
391
385
  }
392
386
 
393
387
  if (obj === null) {
@@ -422,44 +416,31 @@ var stringify = function stringify(
422
416
 
423
417
  for (var i = 0; i < objKeys.length; ++i) {
424
418
  var key = objKeys[i];
419
+ var value = obj[key];
425
420
 
426
- if (skipNulls && obj[key] === null) {
421
+ if (skipNulls && value === null) {
427
422
  continue;
428
423
  }
429
424
 
430
- if (isArray(obj)) {
431
- pushToArray(values, stringify(
432
- obj[key],
433
- typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix,
434
- generateArrayPrefix,
435
- strictNullHandling,
436
- skipNulls,
437
- encoder,
438
- filter,
439
- sort,
440
- allowDots,
441
- serializeDate,
442
- formatter,
443
- encodeValuesOnly,
444
- charset
445
- ));
446
- } else {
447
- pushToArray(values, stringify(
448
- obj[key],
449
- prefix + (allowDots ? '.' + key : '[' + key + ']'),
450
- generateArrayPrefix,
451
- strictNullHandling,
452
- skipNulls,
453
- encoder,
454
- filter,
455
- sort,
456
- allowDots,
457
- serializeDate,
458
- formatter,
459
- encodeValuesOnly,
460
- charset
461
- ));
462
- }
425
+ var keyPrefix = isArray(obj)
426
+ ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix
427
+ : prefix + (allowDots ? '.' + key : '[' + key + ']');
428
+
429
+ pushToArray(values, stringify(
430
+ value,
431
+ keyPrefix,
432
+ generateArrayPrefix,
433
+ strictNullHandling,
434
+ skipNulls,
435
+ encoder,
436
+ filter,
437
+ sort,
438
+ allowDots,
439
+ serializeDate,
440
+ formatter,
441
+ encodeValuesOnly,
442
+ charset
443
+ ));
463
444
  }
464
445
 
465
446
  return values;
@@ -816,6 +797,17 @@ var combine = function combine(a, b) {
816
797
  return [].concat(a, b);
817
798
  };
818
799
 
800
+ var maybeMap = function maybeMap(val, fn) {
801
+ if (isArray(val)) {
802
+ var mapped = [];
803
+ for (var i = 0; i < val.length; i += 1) {
804
+ mapped.push(fn(val[i]));
805
+ }
806
+ return mapped;
807
+ }
808
+ return fn(val);
809
+ };
810
+
819
811
  module.exports = {
820
812
  arrayToObject: arrayToObject,
821
813
  assign: assign,
@@ -825,6 +817,7 @@ module.exports = {
825
817
  encode: encode,
826
818
  isBuffer: isBuffer,
827
819
  isRegExp: isRegExp,
820
+ maybeMap: maybeMap,
828
821
  merge: merge
829
822
  };
830
823
 
package/lib/parse.js CHANGED
@@ -37,17 +37,6 @@ var parseArrayValue = function (val, options) {
37
37
  return val;
38
38
  };
39
39
 
40
- var maybeMap = function maybeMap(val, fn) {
41
- if (isArray(val)) {
42
- var mapped = [];
43
- for (var i = 0; i < val.length; i += 1) {
44
- mapped.push(fn(val[i]));
45
- }
46
- return mapped;
47
- }
48
- return fn(val);
49
- };
50
-
51
40
  // This is what browsers will submit when the ✓ character occurs in an
52
41
  // application/x-www-form-urlencoded body and the encoding of the page containing
53
42
  // the form is iso-8859-1, or when the submitted form has an accept-charset
@@ -96,7 +85,7 @@ var parseValues = function parseQueryStringValues(str, options) {
96
85
  val = options.strictNullHandling ? null : '';
97
86
  } else {
98
87
  key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');
99
- val = maybeMap(
88
+ val = utils.maybeMap(
100
89
  parseArrayValue(part.slice(pos + 1), options),
101
90
  function (encodedVal) {
102
91
  return options.decoder(encodedVal, defaults.decoder, charset, 'value');
package/lib/stringify.js CHANGED
@@ -75,7 +75,12 @@ var stringify = function stringify(
75
75
  } else if (obj instanceof Date) {
76
76
  obj = serializeDate(obj);
77
77
  } else if (generateArrayPrefix === 'comma' && isArray(obj)) {
78
- obj = obj.join(',');
78
+ obj = utils.maybeMap(obj, function (value) {
79
+ if (value instanceof Date) {
80
+ return serializeDate(value);
81
+ }
82
+ return value;
83
+ }).join(',');
79
84
  }
80
85
 
81
86
  if (obj === null) {
@@ -110,44 +115,31 @@ var stringify = function stringify(
110
115
 
111
116
  for (var i = 0; i < objKeys.length; ++i) {
112
117
  var key = objKeys[i];
118
+ var value = obj[key];
113
119
 
114
- if (skipNulls && obj[key] === null) {
120
+ if (skipNulls && value === null) {
115
121
  continue;
116
122
  }
117
123
 
118
- if (isArray(obj)) {
119
- pushToArray(values, stringify(
120
- obj[key],
121
- typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix,
122
- generateArrayPrefix,
123
- strictNullHandling,
124
- skipNulls,
125
- encoder,
126
- filter,
127
- sort,
128
- allowDots,
129
- serializeDate,
130
- formatter,
131
- encodeValuesOnly,
132
- charset
133
- ));
134
- } else {
135
- pushToArray(values, stringify(
136
- obj[key],
137
- prefix + (allowDots ? '.' + key : '[' + key + ']'),
138
- generateArrayPrefix,
139
- strictNullHandling,
140
- skipNulls,
141
- encoder,
142
- filter,
143
- sort,
144
- allowDots,
145
- serializeDate,
146
- formatter,
147
- encodeValuesOnly,
148
- charset
149
- ));
150
- }
124
+ var keyPrefix = isArray(obj)
125
+ ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix
126
+ : prefix + (allowDots ? '.' + key : '[' + key + ']');
127
+
128
+ pushToArray(values, stringify(
129
+ value,
130
+ keyPrefix,
131
+ generateArrayPrefix,
132
+ strictNullHandling,
133
+ skipNulls,
134
+ encoder,
135
+ filter,
136
+ sort,
137
+ allowDots,
138
+ serializeDate,
139
+ formatter,
140
+ encodeValuesOnly,
141
+ charset
142
+ ));
151
143
  }
152
144
 
153
145
  return values;
package/lib/utils.js CHANGED
@@ -223,6 +223,17 @@ var combine = function combine(a, b) {
223
223
  return [].concat(a, b);
224
224
  };
225
225
 
226
+ var maybeMap = function maybeMap(val, fn) {
227
+ if (isArray(val)) {
228
+ var mapped = [];
229
+ for (var i = 0; i < val.length; i += 1) {
230
+ mapped.push(fn(val[i]));
231
+ }
232
+ return mapped;
233
+ }
234
+ return fn(val);
235
+ };
236
+
226
237
  module.exports = {
227
238
  arrayToObject: arrayToObject,
228
239
  assign: assign,
@@ -232,5 +243,6 @@ module.exports = {
232
243
  encode: encode,
233
244
  isBuffer: isBuffer,
234
245
  isRegExp: isRegExp,
246
+ maybeMap: maybeMap,
235
247
  merge: merge
236
248
  };
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/ljharb/qs",
5
- "version": "6.9.3",
5
+ "version": "6.9.4",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "https://github.com/ljharb/qs.git"
@@ -32,7 +32,7 @@
32
32
  "dependencies": {},
33
33
  "devDependencies": {
34
34
  "@ljharb/eslint-config": "^16.0.0",
35
- "browserify": "^16.5.0",
35
+ "browserify": "^16.5.1",
36
36
  "covert": "^1.1.1",
37
37
  "eclint": "^2.8.1",
38
38
  "eslint": "^6.8.0",
@@ -45,7 +45,7 @@
45
45
  "qs-iconv": "^1.0.4",
46
46
  "safe-publish-latest": "^1.1.4",
47
47
  "safer-buffer": "^2.1.2",
48
- "tape": "^5.0.0-next.5"
48
+ "tape": "^5.0.0"
49
49
  },
50
50
  "scripts": {
51
51
  "prepublish": "safe-publish-latest && npm run dist",
package/test/stringify.js CHANGED
@@ -595,6 +595,18 @@ test('stringify()', function (t) {
595
595
  'custom serializeDate function called'
596
596
  );
597
597
 
598
+ st.equal(
599
+ qs.stringify(
600
+ { a: [date] },
601
+ {
602
+ serializeDate: function (d) { return d.getTime(); },
603
+ arrayFormat: 'comma'
604
+ }
605
+ ),
606
+ 'a=' + date.getTime(),
607
+ 'works with arrayFormat comma'
608
+ );
609
+
598
610
  st.end();
599
611
  });
600
612