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 +6 -0
- package/dist/qs.js +40 -47
- package/lib/parse.js +1 -12
- package/lib/stringify.js +27 -35
- package/lib/utils.js +12 -0
- package/package.json +3 -3
- package/test/stringify.js +12 -0
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 =
|
|
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 &&
|
|
421
|
+
if (skipNulls && value === null) {
|
|
427
422
|
continue;
|
|
428
423
|
}
|
|
429
424
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
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 =
|
|
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 &&
|
|
120
|
+
if (skipNulls && value === null) {
|
|
115
121
|
continue;
|
|
116
122
|
}
|
|
117
123
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|