Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80522 views
1
var pathPlatform = require('path-platform');
2
3
module.exports = function (cwd, opts) {
4
if (cwd === undefined) cwd = process.cwd();
5
if (!opts) opts = {};
6
var platform = opts.platform || process.platform;
7
8
var isWindows = /^win/.test(platform);
9
var path = isWindows ? pathPlatform.win32 : pathPlatform;
10
var normalize = !isWindows ? path.normalize :
11
path.normalize('c:') === 'c:.' ? fixNormalize(path.normalize) :
12
path.normalize;
13
var sep = isWindows ? /[\\\/]/ : '/';
14
var init = isWindows ? '' : '/';
15
16
var join = function (x, y) {
17
var ps = [ x, y ].filter(function (p) {
18
return p && typeof p === 'string'
19
});
20
21
return normalize(ps.join(isWindows ? '\\' : '/'));
22
};
23
24
var res = normalize(cwd)
25
.split(sep)
26
.reduce(function (acc,dir,ix) {
27
return acc.concat(join(acc[ix], dir))
28
}, [init])
29
.slice(1)
30
.reverse()
31
;
32
if (res[0] === res[1]) return [ res[0] ];
33
if (isWindows && /^\\/.test(cwd)) {
34
return res.slice(0,-1).map(function (d) {
35
var ch = d.charAt(0)
36
return ch === '\\' ? d :
37
ch === '.' ? '\\' + d.slice(1) :
38
'\\' + d
39
});
40
}
41
return res;
42
43
function fixNormalize(fn) {
44
return function(p) {
45
return fn(p).replace(/:\.$/, ':')
46
}
47
}
48
}
49
50