1
1
( function ( f ) { if ( typeof exports === "object" && typeof module !== "undefined" ) { module . exports = f ( ) } else if ( typeof define === "function" && define . amd ) { define ( [ ] , f ) } else { var g ; if ( typeof window !== "undefined" ) { g = window } else if ( typeof global !== "undefined" ) { g = global } else if ( typeof self !== "undefined" ) { g = self } else { g = this } g . Qs = f ( ) } } ) ( function ( ) { var define , module , exports ; return ( function e ( t , n , r ) { function s ( o , u ) { if ( ! n [ o ] ) { if ( ! t [ o ] ) { var a = typeof require == "function" && require ; if ( ! u && a ) return a ( o , ! 0 ) ; if ( i ) return i ( o , ! 0 ) ; var f = new Error ( "Cannot find module '" + o + "'" ) ; throw f . code = "MODULE_NOT_FOUND" , f } var l = n [ o ] = { exports :{ } } ; t [ o ] [ 0 ] . call ( l . exports , function ( e ) { var n = t [ o ] [ 1 ] [ e ] ; return s ( n ?n :e ) } , l , l . exports , e , t , n , r ) } return n [ o ] . exports } var i = typeof require == "function" && require ; for ( var o = 0 ; o < r . length ; o ++ ) s ( r [ o ] ) ; return s } ) ( { 1 :[ function ( require , module , exports ) {
2
2
'use strict' ;
3
3
4
- var Stringify = require ( './stringify' ) ;
5
- var Parse = require ( './parse' ) ;
4
+ var replace = String . prototype . replace ;
5
+ var percentTwenties = / % 2 0 / g ;
6
6
7
7
module . exports = {
8
- stringify : Stringify ,
9
- parse : Parse
8
+ 'default' : 'RFC3986' ,
9
+ formatters : {
10
+ RFC1738 : function ( value ) {
11
+ return replace . call ( value , percentTwenties , '+' ) ;
12
+ } ,
13
+ RFC3986 : function ( value ) {
14
+ return value ;
15
+ }
16
+ } ,
17
+ RFC1738 : 'RFC1738' ,
18
+ RFC3986 : 'RFC3986'
19
+ } ;
20
+
21
+ } , { } ] , 2 :[ function ( require , module , exports ) {
22
+ 'use strict' ;
23
+
24
+ var stringify = require ( './stringify' ) ;
25
+ var parse = require ( './parse' ) ;
26
+ var formats = require ( './formats' ) ;
27
+
28
+ module . exports = {
29
+ formats : formats ,
30
+ parse : parse ,
31
+ stringify : stringify
10
32
} ;
11
33
12
- } , { "./parse" :2 , "./stringify" :3 } ] , 2 :[ function ( require , module , exports ) {
34
+ } , { "./formats" : 1 , "./ parse" :3 , "./stringify" :4 } ] , 3 :[ function ( require , module , exports ) {
13
35
'use strict' ;
14
36
15
- var Utils = require ( './utils' ) ;
37
+ var utils = require ( './utils' ) ;
16
38
17
39
var has = Object . prototype . hasOwnProperty ;
18
40
19
41
var defaults = {
42
+ allowDots : false ,
43
+ allowPrototypes : false ,
44
+ arrayLimit : 20 ,
45
+ decoder : utils . decode ,
20
46
delimiter : '&' ,
21
47
depth : 5 ,
22
- arrayLimit : 20 ,
23
48
parameterLimit : 1000 ,
24
- strictNullHandling : false ,
25
49
plainObjects : false ,
26
- allowPrototypes : false ,
27
- allowDots : false ,
28
- decoder : Utils . decode
50
+ strictNullHandling : false
29
51
} ;
30
52
31
53
var parseValues = function parseValues ( str , options ) {
@@ -147,7 +169,7 @@ module.exports = function (str, opts) {
147
169
throw new TypeError ( 'Decoder has to be a function.' ) ;
148
170
}
149
171
150
- options . delimiter = typeof options . delimiter === 'string' || Utils . isRegExp ( options . delimiter ) ? options . delimiter : defaults . delimiter ;
172
+ options . delimiter = typeof options . delimiter === 'string' || utils . isRegExp ( options . delimiter ) ? options . delimiter : defaults . delimiter ;
151
173
options . depth = typeof options . depth === 'number' ? options . depth : defaults . depth ;
152
174
options . arrayLimit = typeof options . arrayLimit === 'number' ? options . arrayLimit : defaults . arrayLimit ;
153
175
options . parseArrays = options . parseArrays !== false ;
@@ -171,16 +193,17 @@ module.exports = function (str, opts) {
171
193
for ( var i = 0 ; i < keys . length ; ++ i ) {
172
194
var key = keys [ i ] ;
173
195
var newObj = parseKeys ( key , tempObj [ key ] , options ) ;
174
- obj = Utils . merge ( obj , newObj , options ) ;
196
+ obj = utils . merge ( obj , newObj , options ) ;
175
197
}
176
198
177
- return Utils . compact ( obj ) ;
199
+ return utils . compact ( obj ) ;
178
200
} ;
179
201
180
- } , { "./utils" :4 } ] , 3 :[ function ( require , module , exports ) {
202
+ } , { "./utils" :5 } ] , 4 :[ function ( require , module , exports ) {
181
203
'use strict' ;
182
204
183
- var Utils = require ( './utils' ) ;
205
+ var utils = require ( './utils' ) ;
206
+ var formats = require ( './formats' ) ;
184
207
185
208
var arrayPrefixGenerators = {
186
209
brackets : function brackets ( prefix ) {
@@ -194,20 +217,25 @@ var arrayPrefixGenerators = {
194
217
}
195
218
} ;
196
219
220
+ var toISO = Date . prototype . toISOString ;
221
+
197
222
var defaults = {
198
223
delimiter : '&' ,
199
- strictNullHandling : false ,
200
- skipNulls : false ,
201
224
encode : true ,
202
- encoder : Utils . encode
225
+ encoder : utils . encode ,
226
+ serializeDate : function serializeDate ( date ) {
227
+ return toISO . call ( date ) ;
228
+ } ,
229
+ skipNulls : false ,
230
+ strictNullHandling : false
203
231
} ;
204
232
205
- var stringify = function stringify ( object , prefix , generateArrayPrefix , strictNullHandling , skipNulls , encoder , filter , sort , allowDots ) {
233
+ var stringify = function stringify ( object , prefix , generateArrayPrefix , strictNullHandling , skipNulls , encoder , filter , sort , allowDots , serializeDate , formatter ) {
206
234
var obj = object ;
207
235
if ( typeof filter === 'function' ) {
208
236
obj = filter ( prefix , obj ) ;
209
237
} else if ( obj instanceof Date ) {
210
- obj = obj . toISOString ( ) ;
238
+ obj = serializeDate ( obj ) ;
211
239
} else if ( obj === null ) {
212
240
if ( strictNullHandling ) {
213
241
return encoder ? encoder ( prefix ) : prefix ;
@@ -216,11 +244,11 @@ var stringify = function stringify(object, prefix, generateArrayPrefix, strictNu
216
244
obj = '' ;
217
245
}
218
246
219
- if ( typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || Utils . isBuffer ( obj ) ) {
247
+ if ( typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils . isBuffer ( obj ) ) {
220
248
if ( encoder ) {
221
- return [ encoder ( prefix ) + '=' + encoder ( obj ) ] ;
249
+ return [ formatter ( encoder ( prefix ) ) + '=' + formatter ( encoder ( obj ) ) ] ;
222
250
}
223
- return [ prefix + '=' + String ( obj ) ] ;
251
+ return [ formatter ( prefix ) + '=' + formatter ( String ( obj ) ) ] ;
224
252
}
225
253
226
254
var values = [ ] ;
@@ -245,9 +273,33 @@ var stringify = function stringify(object, prefix, generateArrayPrefix, strictNu
245
273
}
246
274
247
275
if ( Array . isArray ( obj ) ) {
248
- values = values . concat ( stringify ( obj [ key ] , generateArrayPrefix ( prefix , key ) , generateArrayPrefix , strictNullHandling , skipNulls , encoder , filter , sort , allowDots ) ) ;
276
+ values = values . concat ( stringify (
277
+ obj [ key ] ,
278
+ generateArrayPrefix ( prefix , key ) ,
279
+ generateArrayPrefix ,
280
+ strictNullHandling ,
281
+ skipNulls ,
282
+ encoder ,
283
+ filter ,
284
+ sort ,
285
+ allowDots ,
286
+ serializeDate ,
287
+ formatter
288
+ ) ) ;
249
289
} else {
250
- values = values . concat ( stringify ( obj [ key ] , prefix + ( allowDots ? '.' + key : '[' + key + ']' ) , generateArrayPrefix , strictNullHandling , skipNulls , encoder , filter , sort , allowDots ) ) ;
290
+ values = values . concat ( stringify (
291
+ obj [ key ] ,
292
+ prefix + ( allowDots ? '.' + key : '[' + key + ']' ) ,
293
+ generateArrayPrefix ,
294
+ strictNullHandling ,
295
+ skipNulls ,
296
+ encoder ,
297
+ filter ,
298
+ sort ,
299
+ allowDots ,
300
+ serializeDate ,
301
+ formatter
302
+ ) ) ;
251
303
}
252
304
}
253
305
@@ -264,6 +316,13 @@ module.exports = function (object, opts) {
264
316
var encoder = encode ? ( typeof options . encoder === 'function' ? options . encoder : defaults . encoder ) : null ;
265
317
var sort = typeof options . sort === 'function' ? options . sort : null ;
266
318
var allowDots = typeof options . allowDots === 'undefined' ? false : options . allowDots ;
319
+ var serializeDate = typeof options . serializeDate === 'function' ? options . serializeDate : defaults . serializeDate ;
320
+ if ( typeof options . format === 'undefined' ) {
321
+ options . format = formats . default ;
322
+ } else if ( ! Object . prototype . hasOwnProperty . call ( formats . formatters , options . format ) ) {
323
+ throw new TypeError ( 'Unknown format option provided.' ) ;
324
+ }
325
+ var formatter = formats . formatters [ options . format ] ;
267
326
var objKeys ;
268
327
var filter ;
269
328
@@ -275,7 +334,8 @@ module.exports = function (object, opts) {
275
334
filter = options . filter ;
276
335
obj = filter ( '' , obj ) ;
277
336
} else if ( Array . isArray ( options . filter ) ) {
278
- objKeys = filter = options . filter ;
337
+ filter = options . filter ;
338
+ objKeys = filter ;
279
339
}
280
340
281
341
var keys = [ ] ;
@@ -310,26 +370,40 @@ module.exports = function (object, opts) {
310
370
continue ;
311
371
}
312
372
313
- keys = keys . concat ( stringify ( obj [ key ] , key , generateArrayPrefix , strictNullHandling , skipNulls , encoder , filter , sort , allowDots ) ) ;
373
+ keys = keys . concat ( stringify (
374
+ obj [ key ] ,
375
+ key ,
376
+ generateArrayPrefix ,
377
+ strictNullHandling ,
378
+ skipNulls ,
379
+ encoder ,
380
+ filter ,
381
+ sort ,
382
+ allowDots ,
383
+ serializeDate ,
384
+ formatter
385
+ ) ) ;
314
386
}
315
387
316
388
return keys . join ( delimiter ) ;
317
389
} ;
318
390
319
- } , { "./utils" :4 } ] , 4 :[ function ( require , module , exports ) {
391
+ } , { "./formats" : 1 , "./ utils" :5 } ] , 5 :[ function ( require , module , exports ) {
320
392
'use strict' ;
321
393
394
+ var has = Object . prototype . hasOwnProperty ;
395
+
322
396
var hexTable = ( function ( ) {
323
- var array = new Array ( 256 ) ;
397
+ var array = [ ] ;
324
398
for ( var i = 0 ; i < 256 ; ++ i ) {
325
- array [ i ] = '%' + ( ( i < 16 ? '0' : '' ) + i . toString ( 16 ) ) . toUpperCase ( ) ;
399
+ array . push ( '%' + ( ( i < 16 ? '0' : '' ) + i . toString ( 16 ) ) . toUpperCase ( ) ) ;
326
400
}
327
401
328
402
return array ;
329
403
} ( ) ) ;
330
404
331
405
exports . arrayToObject = function ( source , options ) {
332
- var obj = options . plainObjects ? Object . create ( null ) : { } ;
406
+ var obj = options && options . plainObjects ? Object . create ( null ) : { } ;
333
407
for ( var i = 0 ; i < source . length ; ++ i ) {
334
408
if ( typeof source [ i ] !== 'undefined' ) {
335
409
obj [ i ] = source [ i ] ;
@@ -365,6 +439,21 @@ exports.merge = function (target, source, options) {
365
439
mergeTarget = exports . arrayToObject ( target , options ) ;
366
440
}
367
441
442
+ if ( Array . isArray ( target ) && Array . isArray ( source ) ) {
443
+ source . forEach ( function ( item , i ) {
444
+ if ( has . call ( target , i ) ) {
445
+ if ( target [ i ] && typeof target [ i ] === 'object' ) {
446
+ target [ i ] = exports . merge ( target [ i ] , item , options ) ;
447
+ } else {
448
+ target . push ( item ) ;
449
+ }
450
+ } else {
451
+ target [ i ] = item ;
452
+ }
453
+ } ) ;
454
+ return target ;
455
+ }
456
+
368
457
return Object . keys ( source ) . reduce ( function ( acc , key ) {
369
458
var value = source [ key ] ;
370
459
@@ -462,10 +551,9 @@ exports.compact = function (obj, references) {
462
551
}
463
552
464
553
var keys = Object . keys ( obj ) ;
465
- for ( var j = 0 ; j < keys . length ; ++ j ) {
466
- var key = keys [ j ] ;
554
+ keys . forEach ( function ( key ) {
467
555
obj [ key ] = exports . compact ( obj [ key ] , refs ) ;
468
- }
556
+ } ) ;
469
557
470
558
return obj ;
471
559
} ;
@@ -482,5 +570,5 @@ exports.isBuffer = function (obj) {
482
570
return ! ! ( obj . constructor && obj . constructor . isBuffer && obj . constructor . isBuffer ( obj ) ) ;
483
571
} ;
484
572
485
- } , { } ] } , { } , [ 1 ] ) ( 1 )
573
+ } , { } ] } , { } , [ 2 ] ) ( 2 )
486
574
} ) ;
0 commit comments