Blame view

node_modules/loader-utils/lib/urlToRequest.js 1.66 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  '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;