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.
		
		
		
		
			
				
					61 lines
				
				1.7 KiB
			
		
		
			
		
	
	
					61 lines
				
				1.7 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								'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;
							 |