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.
|
|
'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;
|