@@ -76,8 +76,15 @@ export function withBase(input = "", base = ""): string {
76
76
* Returns the URL with the given query parameters. If a query parameter is undefined, it is omitted.
77
77
*/
78
78
export function withQuery ( input : string , query : QueryObject ) : string {
79
- const url = new URL ( input , "http://localhost" ) ;
80
- const searchParams = new URLSearchParams ( url . search ) ;
79
+ let url : URL | undefined ;
80
+ let searchParams : URLSearchParams ;
81
+
82
+ if ( input . includes ( "?" ) ) {
83
+ url = new URL ( input , "http://localhost" ) ;
84
+ searchParams = new URLSearchParams ( url . search ) ;
85
+ } else {
86
+ searchParams = new URLSearchParams ( ) ;
87
+ }
81
88
82
89
for ( const [ key , value ] of Object . entries ( query ) ) {
83
90
if ( value === undefined ) {
@@ -97,12 +104,16 @@ export function withQuery(input: string, query: QueryObject): string {
97
104
}
98
105
}
99
106
100
- url . search = searchParams . toString ( ) ;
101
- let urlWithQuery = url . toString ( ) ;
107
+ const queryString = searchParams . toString ( ) ;
102
108
103
- if ( urlWithQuery . startsWith ( "http://localhost" ) ) {
104
- urlWithQuery = urlWithQuery . slice ( 16 ) ;
109
+ if ( url ) {
110
+ url . search = queryString ;
111
+ let urlWithQuery = url . toString ( ) ;
112
+ if ( urlWithQuery . startsWith ( "http://localhost" ) ) {
113
+ urlWithQuery = urlWithQuery . slice ( 16 ) ;
114
+ }
115
+ return urlWithQuery ;
105
116
}
106
117
107
- return urlWithQuery ;
118
+ return queryString ? ` ${ input } ? ${ queryString } ` : input ;
108
119
}
0 commit comments