1- var Url = require ( 'url-parse' ) ; //supports both browser and node
2- Url ( 'hostname' , { } ) ;
3-
41export function parseURL ( url ) {
5- let parsedUrl = Url ( url ) ;
6- let searchObject = { } , queries , split , i ;
7-
2+ let parser ;
3+ if ( typeof document === 'undefined' ) {
4+ parser = parseUrlInNode ( url ) ;
5+ } else {
6+ parser = parseUrlInBrowser ( url ) ;
7+ }
8+
9+ return {
10+ protocol : parser . protocol ,
11+ host : parser . host ,
12+ hostname : parser . hostname ,
13+ port : parser . port ,
14+ pathname : parser . pathname ,
15+ search : parser . search ,
16+ searchObject : parser . searchObject ,
17+ hash : parser . hash
18+ } ;
19+ }
20+
21+ function parseUrlInBrowser ( urlToParse ) {
22+ var parser = document . createElement ( 'a' ) , searchObject = { } , queries , split , i ;
23+ // Let the browser do the work
24+ parser . href = urlToParse ;
825 // Convert query string to object
9- queries = parsedUrl . query . replace ( / ^ \? / , '' ) . split ( '&' ) ;
26+ queries = parser . search . replace ( / ^ \? / , '' ) . split ( '&' ) ;
1027 for ( i = 0 ; i < queries . length ; i ++ ) {
1128 split = queries [ i ] . split ( '=' ) ;
1229 searchObject [ split [ 0 ] ] = split [ 1 ] ;
1330 }
14- return {
15- protocol : parsedUrl . protocol ,
16- host : parsedUrl . host ,
17- hostname : parsedUrl . hostname ,
18- port : parsedUrl . port ,
19- pathname : parsedUrl . pathname ,
20- search : parsedUrl . query ,
21- searchObject : searchObject ,
22- hash : parsedUrl . hash
23- } ;
31+ parser . searchObject = searchObject ;
32+ return parser ;
2433}
34+
35+ function parseUrlInNode ( urlToParse ) {
36+ var url = require ( 'url' ) ;
37+
38+ var parser = new URL ( urlToParse ) ;
39+ var searchObject = { } , queries , split , i ;
40+
41+ // Convert query string to object
42+ queries = parser . search . replace ( / ^ \? / , '' ) . split ( '&' ) ;
43+ for ( i = 0 ; i < queries . length ; i ++ ) {
44+ split = queries [ i ] . split ( '=' ) ;
45+ searchObject [ split [ 0 ] ] = split [ 1 ] ;
46+ }
47+ parser . searchObject = searchObject ;
48+ return parser ;
49+ }
0 commit comments