@@ -148,9 +148,12 @@ function resolveGlobBase(baseURL: string | undefined, match: string): string {
148148 const newSuffix = mapToken ( token . substring ( questionIndex ) , `?$_${ index } _$` ) ;
149149 return newPrefix + newSuffix ;
150150 } ) . join ( '/' ) ;
151- let resolved = constructURLBasedOnBaseURL ( baseURL , relativePath ) ;
152- for ( const [ token , original ] of tokenMap )
153- resolved = resolved . replace ( token , original ) ;
151+ const result = resolveBaseURL ( baseURL , relativePath ) ;
152+ let resolved = result . resolved ;
153+ for ( const [ token , original ] of tokenMap ) {
154+ const normalize = result . caseInsensitivePart ?. includes ( token ) ;
155+ resolved = resolved . replace ( token , normalize ? original . toLowerCase ( ) : original ) ;
156+ }
154157 match = resolved ;
155158 }
156159 return match ;
@@ -166,8 +169,20 @@ function parseURL(url: string): URL | null {
166169
167170export function constructURLBasedOnBaseURL ( baseURL : string | undefined , givenURL : string ) : string {
168171 try {
169- return ( new URL ( givenURL , baseURL ) ) . toString ( ) ;
172+ return resolveBaseURL ( baseURL , givenURL ) . resolved ;
170173 } catch ( e ) {
171174 return givenURL ;
172175 }
173176}
177+
178+ function resolveBaseURL ( baseURL : string | undefined , givenURL : string ) {
179+ try {
180+ const url = new URL ( givenURL , baseURL ) ;
181+ const resolved = url . toString ( ) ;
182+ // Schema and domain are case-insensitive.
183+ const caseInsensitivePrefix = url . origin ;
184+ return { resolved, caseInsensitivePart : caseInsensitivePrefix } ;
185+ } catch ( e ) {
186+ return { resolved : givenURL } ;
187+ }
188+ }
0 commit comments