@@ -6,9 +6,11 @@ import { isNode } from './common.js';
6
6
function throwResolveError ( relUrl , parentUrl ) {
7
7
throw new RangeError ( 'Unable to resolve "' + relUrl + '" to ' + parentUrl ) ;
8
8
}
9
+ var protocolRegEx = / ^ [ ^ / ] + : / ;
9
10
export function resolveIfNotPlain ( relUrl , parentUrl ) {
10
11
relUrl = relUrl . trim ( ) ;
11
- var parentProtocol = parentUrl && parentUrl . substr ( 0 , parentUrl . indexOf ( ':' ) + 1 ) ;
12
+ if ( parentUrl )
13
+ var parentProtocol = parentUrl . match ( protocolRegEx ) ;
12
14
13
15
var firstChar = relUrl [ 0 ] ;
14
16
var secondChar = relUrl [ 1 ] ;
@@ -17,12 +19,12 @@ export function resolveIfNotPlain (relUrl, parentUrl) {
17
19
if ( firstChar === '/' && secondChar === '/' ) {
18
20
if ( ! parentProtocol )
19
21
throwResolveError ( relUrl , parentUrl ) ;
20
- return parentProtocol + relUrl ;
22
+ return parentProtocol [ 0 ] + relUrl ;
21
23
}
22
24
// relative-url
23
25
else if ( firstChar === '.' && ( secondChar === '/' || secondChar === '.' && ( relUrl [ 2 ] === '/' || relUrl . length === 2 ) || relUrl . length === 1 )
24
26
|| firstChar === '/' ) {
25
- var parentIsPlain = ! parentProtocol || parentUrl [ parentProtocol . length ] !== '/' ;
27
+ var parentIsPlain = ! parentProtocol || parentUrl [ parentProtocol [ 0 ] . length ] !== '/' ;
26
28
27
29
// read pathname from parent if a URL
28
30
// pathname taken to be part after leading "/"
@@ -33,10 +35,10 @@ export function resolveIfNotPlain (relUrl, parentUrl) {
33
35
throwResolveError ( relUrl , parentUrl ) ;
34
36
pathname = parentUrl ;
35
37
}
36
- else if ( parentUrl [ parentProtocol . length + 1 ] === '/' ) {
38
+ else if ( parentUrl [ parentProtocol [ 0 ] . length + 1 ] === '/' ) {
37
39
// resolving to a :// so we need to read out the auth and host
38
- if ( parentProtocol !== 'file:' ) {
39
- pathname = parentUrl . substr ( parentProtocol . length + 2 ) ;
40
+ if ( parentProtocol [ 0 ] !== 'file:' ) {
41
+ pathname = parentUrl . substr ( parentProtocol [ 0 ] . length + 2 ) ;
40
42
pathname = pathname . substr ( pathname . indexOf ( '/' ) + 1 ) ;
41
43
}
42
44
else {
@@ -45,7 +47,7 @@ export function resolveIfNotPlain (relUrl, parentUrl) {
45
47
}
46
48
else {
47
49
// resolving to :/ so pathname is the /... part
48
- pathname = parentUrl . substr ( parentProtocol . length + 1 ) ;
50
+ pathname = parentUrl . substr ( parentProtocol [ 0 ] . length + 1 ) ;
49
51
}
50
52
51
53
if ( firstChar === '/' ) {
0 commit comments