Blame view

node_modules/eslint/lib/util/path-util.js 2.47 KB
f7563de62   Palak Handa   first commit
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  /**
   * @fileoverview Common helpers for operations on filenames and paths
   * @author Ian VanSchooten
   */
  "use strict";
  
  //------------------------------------------------------------------------------
  // Requirements
  //------------------------------------------------------------------------------
  
  const path = require("path");
  
  //------------------------------------------------------------------------------
  // Private
  //------------------------------------------------------------------------------
  
  /**
   * Replace Windows with posix style paths
   *
   * @param {string} filepath   Path to convert
   * @returns {string}          Converted filepath
   */
  function convertPathToPosix(filepath) {
      const normalizedFilepath = path.normalize(filepath);
      const posixFilepath = normalizedFilepath.replace(/\\/g, "/");
  
      return posixFilepath;
  }
  
  /**
   * Converts an absolute filepath to a relative path from a given base path
   *
   * For example, if the filepath is `/my/awesome/project/foo.bar`,
   * and the base directory is `/my/awesome/project/`,
   * then this function should return `foo.bar`.
   *
   * path.relative() does something similar, but it requires a baseDir (`from` argument).
   * This function makes it optional and just removes a leading slash if the baseDir is not given.
   *
   * It does not take into account symlinks (for now).
   *
   * @param {string} filepath  Path to convert to relative path.  If already relative,
   *                           it will be assumed to be relative to process.cwd(),
   *                           converted to absolute, and then processed.
   * @param {string} [baseDir] Absolute base directory to resolve the filepath from.
   *                           If not provided, all this function will do is remove
   *                           a leading slash.
   * @returns {string} Relative filepath
   */
  function getRelativePath(filepath, baseDir) {
      let relativePath;
  
      if (!path.isAbsolute(filepath)) {
          filepath = path.resolve(filepath);
      }
      if (baseDir) {
          if (!path.isAbsolute(baseDir)) {
              throw new Error("baseDir should be an absolute path");
          }
          relativePath = path.relative(baseDir, filepath);
      } else {
          relativePath = filepath.replace(/^\//, "");
      }
      return relativePath;
  }
  
  //------------------------------------------------------------------------------
  // Public Interface
  //------------------------------------------------------------------------------
  
  module.exports = {
      convertPathToPosix,
      getRelativePath
  };