@@ -66,42 +66,34 @@ var stringifyPrimitive = function(v) {
6666QueryString . stringify = QueryString . encode = function ( obj , sep , eq , name ) {
6767 sep = sep || '&' ;
6868 eq = eq || '=' ;
69- obj = ( obj === null ) ? undefined : obj ;
70-
71- switch ( typeof obj ) {
72- case 'object' :
73- return Object . keys ( obj ) . map ( function ( k ) {
74- if ( Array . isArray ( obj [ k ] ) ) {
75- return obj [ k ] . map ( function ( v ) {
76- return QueryString . escape ( stringifyPrimitive ( k ) ) +
77- eq +
78- QueryString . escape ( stringifyPrimitive ( v ) ) ;
79- } ) . join ( sep ) ;
80- } else {
81- return QueryString . escape ( stringifyPrimitive ( k ) ) +
82- eq +
83- QueryString . escape ( stringifyPrimitive ( obj [ k ] ) ) ;
84- }
85- } ) . join ( sep ) ;
69+ if ( obj === null ) {
70+ obj = undefined ;
71+ }
72+
73+ if ( typeof obj === 'object' ) {
74+ return Object . keys ( obj ) . map ( function ( k ) {
75+ var ks = QueryString . escape ( stringifyPrimitive ( k ) ) + eq ;
76+ if ( Array . isArray ( obj [ k ] ) ) {
77+ return obj [ k ] . map ( function ( v ) {
78+ return ks + QueryString . escape ( stringifyPrimitive ( v ) ) ;
79+ } ) . join ( sep ) ;
80+ } else {
81+ return ks + QueryString . escape ( stringifyPrimitive ( obj [ k ] ) ) ;
82+ }
83+ } ) . join ( sep ) ;
8684
87- default :
88- if ( ! name ) return '' ;
89- return QueryString . escape ( stringifyPrimitive ( name ) ) + eq +
90- QueryString . escape ( stringifyPrimitive ( obj ) ) ;
9185 }
86+
87+ if ( ! name ) return '' ;
88+ return QueryString . escape ( stringifyPrimitive ( name ) ) + eq +
89+ QueryString . escape ( stringifyPrimitive ( obj ) ) ;
9290} ;
9391
9492// Parse a key=val string.
9593QueryString . parse = QueryString . decode = function ( qs , sep , eq , options ) {
9694 sep = sep || '&' ;
9795 eq = eq || '=' ;
98- var obj = { } ,
99- maxKeys = 1000 ;
100-
101- // Handle maxKeys = 0 case
102- if ( options && typeof options . maxKeys === 'number' ) {
103- maxKeys = options . maxKeys ;
104- }
96+ var obj = { } ;
10597
10698 if ( typeof qs !== 'string' || qs . length === 0 ) {
10799 return obj ;
@@ -110,16 +102,29 @@ QueryString.parse = QueryString.decode = function(qs, sep, eq, options) {
110102 var regexp = / \+ / g;
111103 qs = qs . split ( sep ) ;
112104
105+ var maxKeys = 1000 ;
106+ if ( options && typeof options . maxKeys === 'number' ) {
107+ maxKeys = options . maxKeys ;
108+ }
109+
110+ var len = qs . length ;
113111 // maxKeys <= 0 means that we should not limit keys count
114- if ( maxKeys > 0 ) {
115- qs = qs . slice ( 0 , maxKeys ) ;
112+ if ( maxKeys > 0 && len > maxKeys ) {
113+ len = maxKeys ;
116114 }
117115
118- for ( var i = 0 , len = qs . length ; i < len ; ++ i ) {
116+ for ( var i = 0 ; i < len ; ++ i ) {
119117 var x = qs [ i ] . replace ( regexp , '%20' ) ,
120118 idx = x . indexOf ( eq ) ,
121- kstr = x . substring ( 0 , idx ) ,
122- vstr = x . substring ( idx + 1 ) , k , v ;
119+ kstr , vstr , k , v ;
120+
121+ if ( idx >= 0 ) {
122+ kstr = x . substr ( 0 , idx ) ;
123+ vstr = x . substr ( idx + 1 ) ;
124+ } else {
125+ kstr = x ;
126+ vstr = '' ;
127+ }
123128
124129 try {
125130 k = decodeURIComponent ( kstr ) ;
@@ -131,10 +136,10 @@ QueryString.parse = QueryString.decode = function(qs, sep, eq, options) {
131136
132137 if ( ! hasOwnProperty ( obj , k ) ) {
133138 obj [ k ] = v ;
134- } else if ( ! Array . isArray ( obj [ k ] ) ) {
135- obj [ k ] = [ obj [ k ] , v ] ;
136- } else {
139+ } else if ( Array . isArray ( obj [ k ] ) ) {
137140 obj [ k ] . push ( v ) ;
141+ } else {
142+ obj [ k ] = [ obj [ k ] , v ] ;
138143 }
139144 }
140145
0 commit comments