Skip to content

Commit 3225219

Browse files
diff url parse techniques for browser and ssr
1 parent 8ccb1c1 commit 3225219

File tree

2 files changed

+43
-19
lines changed

2 files changed

+43
-19
lines changed

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
"dependencies": {
5050
"imagekit-javascript": "^1.2.1",
5151
"prop-types": "^15.7.2",
52-
"react-scripts": "3.4.0",
53-
"url-parse": "^1.4.7"
52+
"react-scripts": "3.4.0"
5453
}
5554
}

src/util/urlParser.js

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,49 @@
1-
var Url = require('url-parse'); //supports both browser and node
2-
Url('hostname', {});
3-
41
export 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

Comments
 (0)