1
- import parse from 'url-parse'
2
1
import { PageKey } from '../types'
3
2
3
+ const FAKE_ORIGIN = "https://example.com"
4
+
5
+ export function createfetchPath ( path :string , baseUrl ?: string ) {
6
+ if ( baseUrl ) {
7
+ const parsed = new URL ( url , baseUrl )
8
+ return parsed . toString ( )
9
+ } else {
10
+ const parsed = new URL ( url , baseUrl )
11
+ return parsed . href . replace ( parsed . origin , "" )
12
+ }
13
+ }
14
+
4
15
export function pathQuery ( url : string ) : string {
5
- const { pathname, query } = new parse ( url , { } )
16
+ const { pathname, search : query } = new URL ( url , FAKE_ORIGIN )
6
17
7
18
return pathname + query
8
19
}
9
20
10
21
export function pathQueryHash ( url : string ) : string {
11
- const { pathname, query , hash } = new parse ( url , { } )
22
+ const { pathname, hash , search : query } = new URL ( url , FAKE_ORIGIN )
12
23
13
24
return pathname + query + hash
14
25
}
15
26
16
27
export function hasPropsAt ( url : string ) : boolean {
17
- const parsed = new parse ( url , { } , true )
18
- const query = parsed . query
28
+ const { searchParams} = new URL ( url , FAKE_ORIGIN )
19
29
20
- return ! ! query [ 'props_at' ]
30
+ return searchParams . has ( 'props_at' )
21
31
}
22
32
23
- export function propsAtParam ( url : string ) : string | undefined {
24
- const parsed = new parse ( url , { } , true )
25
- const query = parsed . query
33
+ export function propsAtParam ( url : string ) : string | null {
34
+ const { searchParams } = new URL ( url , FAKE_ORIGIN )
26
35
27
- return query [ 'props_at' ]
36
+ return searchParams . get (
37
+ 'props_at'
38
+ )
28
39
}
29
40
30
41
export function withFormatJson ( url : string ) : string {
31
- const parsed = new parse ( url , { } , true )
32
- parsed . query [ 'format' ] = 'json'
33
-
34
- return parsed . toString ( )
35
- }
36
-
37
- export function pathWithoutBZParams ( url : string ) : string {
38
- const parsed = new parse ( url , { } , true )
39
- const query = parsed . query
40
-
41
- delete query [ 'props_at' ]
42
- delete query [ 'format' ]
43
- parsed . set ( 'query' , query )
42
+ const parsed = new URL ( url , FAKE_ORIGIN )
43
+ parsed . searchParams . set ( 'format' , 'json' )
44
44
45
- return pathQueryHash ( parsed . toString ( ) )
45
+ return parsed . href . replace ( parsed . origin , "" )
46
46
}
47
47
48
48
export function removePropsAt ( url : string ) : string {
49
- const parsed = new parse ( url , { } , true )
50
- const query = parsed . query
49
+ const parsed = new URL ( url , FAKE_ORIGIN )
50
+ parsed . searchParams . delete ( 'props_at' )
51
51
52
- delete query [ 'props_at' ]
53
- parsed . set ( 'query' , query )
54
-
55
- return parsed . toString ( )
52
+ return parsed . href . replace ( parsed . origin , "" )
56
53
}
57
54
58
55
/**
@@ -62,29 +59,18 @@ export function removePropsAt(url: string): string {
62
59
* @returns
63
60
*/
64
61
export function urlToPageKey ( url : string ) : PageKey {
65
- const parsed = new parse ( url , { } , true )
66
- const query = parsed . query
67
-
68
- delete query [ 'props_at' ]
69
- delete query [ 'format' ]
70
- parsed . set ( 'query' , query )
62
+ const parsed = new URL ( url , FAKE_ORIGIN )
63
+ parsed . searchParams . delete ( 'props_at' )
64
+ parsed . searchParams . delete ( 'format' )
71
65
72
66
return pathQuery ( parsed . toString ( ) )
73
67
}
74
68
75
69
export function withoutHash ( url : string ) : string {
76
- const parsed = new parse ( url , { } , true )
77
- parsed . set ( 'hash' , '' )
78
- return parsed . toString ( )
79
- }
80
-
81
- export function withoutBusters ( url : string ) : string {
82
- const parsed = new parse ( url , { } , true )
83
- const query = parsed . query
84
- delete query [ 'format' ]
85
- parsed . set ( 'query' , query )
70
+ const parsed = new URL ( url , FAKE_ORIGIN )
71
+ parsed . hash = ""
86
72
87
- return pathQuery ( parsed . toString ( ) )
73
+ return parsed . href . replace ( parsed . origin , "" )
88
74
}
89
75
90
76
export function formatForXHR ( url : string ) : string {
@@ -94,10 +80,15 @@ export function formatForXHR(url: string): string {
94
80
}
95
81
96
82
export function parsePageKey ( pageKey : PageKey ) {
97
- const { pathname, query } = new parse ( pageKey , { } , true )
83
+ const {
84
+ pathname,
85
+ searchParams
86
+ } = new URL ( pageKey , FAKE_ORIGIN )
87
+
88
+ const search = Object . fromEntries ( searchParams )
98
89
99
90
return {
100
91
pathname,
101
- search : query ,
92
+ search,
102
93
}
103
94
}
0 commit comments