19
19
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
20
* THE SOFTWARE.
21
21
*/
22
- function decode ( str ) {
22
+ "use strict" ;
23
+ module . exports = CookieParser ;
24
+
25
+ function CookieParser ( ) {
26
+
27
+ }
28
+
29
+ CookieParser . maxLength = 4096 ;
30
+
31
+ CookieParser . parse = function ( str ) {
32
+ var maxLength = CookieParser . maxLength ;
33
+
34
+ if ( typeof str !== "string" ) {
35
+ throw new TypeError ( "str must be a string" ) ;
36
+ }
37
+
38
+ if ( str . length > maxLength ) {
39
+ throw new RangeError ( "str is too large " +
40
+ "(CookieParser.maxLength=" + maxLength + ")" ) ;
41
+ }
42
+ var cookieParser = new CookieParser ( ) ;
43
+ if ( arguments . length > 1 ) {
44
+ var opt = arguments [ 1 ] ;
45
+ if ( typeof opt === "object" && opt !== null &&
46
+ typeof opt . decode === "function" ) {
47
+ return cookieParser . slowParse ( str , opt . decode ) ;
48
+ }
49
+ }
50
+ return cookieParser . parse ( str ) ;
51
+ } ;
52
+
53
+ CookieParser . prototype . decode = function CookieParser$decode ( str ) {
23
54
try {
24
55
return decodeURIComponent ( str ) ;
25
56
}
26
57
catch ( e ) {
27
58
return str ;
28
59
}
29
- }
60
+ } ;
30
61
31
- function extract ( str , start , end ) {
62
+ CookieParser . prototype . extract =
63
+ function CookieParser$extract ( str , start , end ) {
32
64
if ( start === end + 1 ) {
33
65
return "" ;
34
66
}
35
67
return str . slice (
36
- trimForward ( str , start ) ,
37
- trimBackward ( str , end ) + 1
68
+ this . trimForward ( str , start ) ,
69
+ this . trimBackward ( str , end ) + 1
38
70
) ;
39
- }
71
+ } ;
40
72
41
- function trimForward ( str , i ) {
73
+ CookieParser . prototype . trimForward =
74
+ function CookieParser$trimForward ( str , i ) {
42
75
var ch = str . charCodeAt ( i ) ;
43
- while ( isWhiteSpace ( ch ) ) {
76
+ while ( this . isWhiteSpace ( ch ) ) {
44
77
ch = str . charCodeAt ( ++ i ) ;
45
78
}
46
79
return i ;
80
+ } ;
47
81
48
- }
49
-
50
- function trimBackward ( str , i ) {
82
+ CookieParser . prototype . trimBackward =
83
+ function CookieParser$trimBackward ( str , i ) {
51
84
var ch = str . charCodeAt ( i ) ;
52
- while ( isWhiteSpace ( ch ) ) {
85
+ while ( this . isWhiteSpace ( ch ) ) {
53
86
ch = str . charCodeAt ( -- i ) ;
54
87
}
55
88
return i ;
56
- }
89
+ } ;
57
90
58
- function isWhiteSpace ( ch ) {
91
+ CookieParser . prototype . isWhiteSpace = function CookieParser$ isWhiteSpace( ch ) {
59
92
return ch <= 32 ;
60
- }
61
-
62
- function parse ( str ) {
63
- if ( typeof str !== "string" ) {
64
- throw new TypeError ( "str must be a string (Cookie parser)" ) ;
65
- }
66
-
67
- if ( arguments . length > 1 ) {
68
- var opt = arguments [ 1 ] ;
69
- if ( typeof opt === "object" && opt !== null &&
70
- typeof opt . decode === "function" ) {
71
- return slowParse ( str , opt . decode ) ;
72
- }
73
- }
93
+ } ;
74
94
95
+ CookieParser . prototype . parse = function CookieParser$parse ( str ) {
75
96
var dictionary = { } ;
76
97
var keyStart = 0 ;
77
98
var keyEnd = 0 ;
@@ -84,7 +105,7 @@ function parse(str) {
84
105
mainloop: for ( ; i < len ; ++ i ) {
85
106
var ch = str . charCodeAt ( i ) ;
86
107
if ( ch > 127 ) {
87
- return slowParse ( str , decode ) ;
108
+ return this . slowParse ( str , this . decode ) ;
88
109
}
89
110
else if ( ch === 61 ) {
90
111
keyEnd = i - 1 ;
@@ -107,19 +128,19 @@ function parse(str) {
107
128
else if ( ch === 59 ||
108
129
ch === 44 ) {
109
130
if ( isQuote ) {
110
- var k = trimBackward ( str , j - 1 ) ;
131
+ var k = this . trimBackward ( str , j - 1 ) ;
111
132
valueEnd = k - 1 ;
112
133
if ( valueEnd < valueStart ) valueStart = valueEnd ;
113
134
}
114
135
else {
115
136
valueEnd = j - 1 ;
116
137
}
117
138
118
- var key = extract ( str , keyStart , keyEnd ) ;
119
- var value = extract ( str , valueStart , valueEnd ) ;
139
+ var key = this . extract ( str , keyStart , keyEnd ) ;
140
+ var value = this . extract ( str , valueStart , valueEnd ) ;
120
141
121
142
dictionary [ key ] = valueMightNeedDecoding
122
- ? decode ( value )
143
+ ? this . decode ( value )
123
144
: value ;
124
145
125
146
i = j ;
@@ -137,19 +158,19 @@ function parse(str) {
137
158
138
159
}
139
160
if ( isQuote ) {
140
- var k = trimBackward ( str , j - 1 ) ;
161
+ var k = this . trimBackward ( str , j - 1 ) ;
141
162
valueEnd = k - 1 ;
142
163
if ( valueEnd < valueStart ) valueStart = valueEnd ;
143
164
}
144
165
else {
145
166
valueEnd = j - 1 ;
146
167
}
147
168
148
- var key = extract ( str , keyStart , keyEnd ) ;
149
- var value = extract ( str , valueStart , valueEnd ) ;
169
+ var key = this . extract ( str , keyStart , keyEnd ) ;
170
+ var value = this . extract ( str , valueStart , valueEnd ) ;
150
171
151
172
dictionary [ key ] = valueMightNeedDecoding
152
- ? decode ( value )
173
+ ? this . decode ( value )
153
174
: value ;
154
175
i = j ;
155
176
}
@@ -160,14 +181,9 @@ function parse(str) {
160
181
161
182
}
162
183
return dictionary ;
163
- }
164
-
165
- module . exports = {
166
- parse : parse ,
167
- serialize : serialize
168
184
} ;
169
185
170
- function serialize ( name , val , opt ) {
186
+ CookieParser . serialize = function CookieParser$Serialize ( name , val , opt ) {
171
187
opt = opt || { } ;
172
188
var enc = opt . encode || encodeURIComponent ;
173
189
var pairs = [ name + "=" + enc ( val ) ] ;
@@ -180,8 +196,9 @@ function serialize(name, val, opt) {
180
196
if ( opt . secure ) pairs . push ( "Secure" ) ;
181
197
182
198
return pairs . join ( "; " ) ;
183
- }
184
- function slowParse ( str , dec ) {
199
+ } ;
200
+
201
+ CookieParser . prototype . slowParse = function CookieParser$slowParse ( str , dec ) {
185
202
var obj = { } ;
186
203
var pairs = str . split ( / [ ; , ] * / ) ;
187
204
@@ -209,4 +226,4 @@ function slowParse(str, dec) {
209
226
} ) ;
210
227
211
228
return obj ;
212
- }
229
+ } ;
0 commit comments