path-util.js
2.47 KB
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
};