You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							60 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							60 lines
						
					
					
						
							1.7 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
// we can't use path.win32.isAbsolute because it also matches paths starting with a forward slash | 
						|
const matchNativeWin32Path = /^[A-Z]:[/\\]|^\\\\/i; | 
						|
 | 
						|
function urlToRequest(url, root) { | 
						|
  // Do not rewrite an empty url | 
						|
  if (url === '') { | 
						|
    return ''; | 
						|
  } | 
						|
 | 
						|
  const moduleRequestRegex = /^[^?]*~/; | 
						|
  let request; | 
						|
 | 
						|
  if (matchNativeWin32Path.test(url)) { | 
						|
    // absolute windows path, keep it | 
						|
    request = url; | 
						|
  } else if (root !== undefined && root !== false && /^\//.test(url)) { | 
						|
    // if root is set and the url is root-relative | 
						|
    switch (typeof root) { | 
						|
      // 1. root is a string: root is prefixed to the url | 
						|
      case 'string': | 
						|
        // special case: `~` roots convert to module request | 
						|
        if (moduleRequestRegex.test(root)) { | 
						|
          request = root.replace(/([^~/])$/, '$1/') + url.slice(1); | 
						|
        } else { | 
						|
          request = root + url; | 
						|
        } | 
						|
        break; | 
						|
      // 2. root is `true`: absolute paths are allowed | 
						|
      //    *nix only, windows-style absolute paths are always allowed as they doesn't start with a `/` | 
						|
      case 'boolean': | 
						|
        request = url; | 
						|
        break; | 
						|
      default: | 
						|
        throw new Error( | 
						|
          "Unexpected parameters to loader-utils 'urlToRequest': url = " + | 
						|
            url + | 
						|
            ', root = ' + | 
						|
            root + | 
						|
            '.' | 
						|
        ); | 
						|
    } | 
						|
  } else if (/^\.\.?\//.test(url)) { | 
						|
    // A relative url stays | 
						|
    request = url; | 
						|
  } else { | 
						|
    // every other url is threaded like a relative url | 
						|
    request = './' + url; | 
						|
  } | 
						|
 | 
						|
  // A `~` makes the url an module | 
						|
  if (moduleRequestRegex.test(request)) { | 
						|
    request = request.replace(moduleRequestRegex, ''); | 
						|
  } | 
						|
 | 
						|
  return request; | 
						|
} | 
						|
 | 
						|
module.exports = urlToRequest;
 | 
						|
 |