1
+ const regex = / ^ ( .* ?) : [ ^ \S \n ] * ( [ \s \S ] * ?) $ / gm;
2
+ const response = ( request , headers ) => ( {
3
+ ok : ( request . status / 100 | 0 ) == 2 , // 200-299
4
+ statusText : request . statusText ,
5
+ status : request . status ,
6
+ url : request . responseURL ,
7
+ text : ( ) => Promise . resolve ( request . responseText ) ,
8
+ json : ( ) => Promise . resolve ( JSON . parse ( request . responseText ) ) ,
9
+ blob : ( ) => Promise . resolve ( new Blob ( [ request . response ] ) ) ,
10
+ clone : ( ) => response ( request , headers ) ,
11
+ headers : {
12
+ keys : ( ) => headers . keys ,
13
+ entries : ( ) => headers . all ,
14
+ get : n => headers . raw [ n . toLowerCase ( ) ] ,
15
+ has : n => n . toLowerCase ( ) in headers . raw
16
+ }
17
+ } ) ;
18
+
1
19
export default function ( url , options ) {
2
20
options = options || { } ;
3
21
return new Promise ( ( resolve , reject ) => {
4
22
const request = new XMLHttpRequest ( ) ;
5
- const keys = [ ] ;
6
- const all = [ ] ;
7
- const headers = { } ;
8
-
9
- const response = ( ) => ( {
10
- ok : ( request . status / 100 | 0 ) == 2 , // 200-299
11
- statusText : request . statusText ,
12
- status : request . status ,
13
- url : request . responseURL ,
14
- text : ( ) => Promise . resolve ( request . responseText ) ,
15
- json : ( ) => Promise . resolve ( JSON . parse ( request . responseText ) ) ,
16
- blob : ( ) => Promise . resolve ( new Blob ( [ request . response ] ) ) ,
17
- clone : response ,
18
- headers : {
19
- keys : ( ) => keys ,
20
- entries : ( ) => all ,
21
- get : n => headers [ n . toLowerCase ( ) ] ,
22
- has : n => n . toLowerCase ( ) in headers
23
- }
24
- } ) ;
25
23
26
24
request . open ( options . method || 'get' , url , true ) ;
27
25
28
26
request . onload = ( ) => {
29
- request . getAllResponseHeaders ( ) . replace ( / ^ ( .* ?) : [ ^ \S \n ] * ( [ \s \S ] * ?) $ / gm, ( m , key , value ) => {
30
- keys . push ( key = key . toLowerCase ( ) ) ;
31
- all . push ( [ key , value ] ) ;
32
- headers [ key ] = headers [ key ] ? `${ headers [ key ] } ,${ value } ` : value ;
27
+ const head = { all : [ ] , keys : [ ] , raw : { } } ;
28
+ request . getAllResponseHeaders ( ) . replace ( regex , ( m , key , value ) => {
29
+ head . all . push ( [ key , value ] ) ;
30
+ head . keys . push ( key = key . toLowerCase ( ) ) ;
31
+ head . raw [ key ] = head . raw [ key ] ? `${ head . raw [ key ] } ,${ value } ` : value ;
33
32
} ) ;
34
- resolve ( response ( ) ) ;
33
+ resolve ( response ( request , head ) ) ;
35
34
} ;
36
35
37
36
request . onerror = reject ;
@@ -45,3 +44,5 @@ export default function(url, options) {
45
44
request . send ( options . body || null ) ;
46
45
} ) ;
47
46
}
47
+
48
+ export { response } ;
0 commit comments