| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | 'use strict';// we can't use path.win32.isAbsolute because it also matches paths starting with a forward slashconst 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;
 |