11import { methods } from "./create-fetch" ;
2- import { BetterFetchOption } from "./types" ;
2+ import type { BetterFetchOption } from "./types" ;
33
44/**
55 * Normalize URL
66 */
77export function getURL ( url : string , option ?: BetterFetchOption ) {
8- let { baseURL, params, query } = option || {
8+ const { baseURL, params, query } = option || {
99 query : { } ,
1010 params : { } ,
1111 baseURL : "" ,
@@ -29,7 +29,18 @@ export function getURL(url: string, option?: BetterFetchOption) {
2929 const queryParams = new URLSearchParams ( urlQuery ) ;
3030 for ( const [ key , value ] of Object . entries ( query || { } ) ) {
3131 if ( value == null ) continue ;
32- queryParams . set ( key , String ( value ) ) ;
32+ let serializedValue ;
33+ if ( typeof value === "string" ) {
34+ serializedValue = value ;
35+ } else if ( Array . isArray ( value ) ) {
36+ for ( const val of value ) {
37+ queryParams . append ( key , val ) ;
38+ }
39+ continue ;
40+ } else {
41+ serializedValue = JSON . stringify ( value ) ;
42+ }
43+ queryParams . set ( key , serializedValue ) ;
3344 }
3445 if ( params ) {
3546 if ( Array . isArray ( params ) ) {
@@ -49,7 +60,9 @@ export function getURL(url: string, option?: BetterFetchOption) {
4960 if ( path . startsWith ( "/" ) ) path = path . slice ( 1 ) ;
5061 let queryParamString = queryParams . toString ( ) ;
5162 queryParamString =
52- queryParamString . length > 0 ? `?${ queryParamString } ` . replace ( / \+ / g, "%20" ) : "" ;
63+ queryParamString . length > 0
64+ ? `?${ queryParamString } ` . replace ( / \+ / g, "%20" )
65+ : "" ;
5366 if ( ! basePath . startsWith ( "http" ) ) {
5467 return `${ basePath } ${ path } ${ queryParamString } ` ;
5568 }
0 commit comments