123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- var pathPlatform = require('path-platform');
- module.exports = function (cwd, opts) {
- if (cwd === undefined) cwd = process.cwd();
- if (!opts) opts = {};
- var platform = opts.platform || process.platform;
-
- var isWindows = /^win/.test(platform);
- var path = isWindows ? pathPlatform.win32 : pathPlatform;
- var normalize = !isWindows ? path.normalize :
- path.normalize('c:') === 'c:.' ? fixNormalize(path.normalize) :
- path.normalize;
- var sep = isWindows ? /[\\\/]/ : '/';
- var init = isWindows ? '' : '/';
-
- var join = function (x, y) {
- var ps = [ x, y ].filter(function (p) {
- return p && typeof p === 'string'
- });
- return normalize(ps.join(isWindows ? '\\' : '/'));
- };
-
- var res = normalize(cwd)
- .split(sep)
- .reduce(function (acc,dir,ix) {
- return acc.concat(join(acc[ix], dir))
- }, [init])
- .slice(1)
- .reverse()
- ;
- if (res[0] === res[1]) return [ res[0] ];
- if (isWindows && /^\\/.test(cwd)) {
- return res.slice(0,-1).map(function (d) {
- var ch = d.charAt(0)
- return ch === '\\' ? d :
- ch === '.' ? '\\' + d.slice(1) :
- '\\' + d
- });
- }
- return res;
- function fixNormalize(fn) {
- return function(p) {
- return fn(p).replace(/:\.$/, ':')
- }
- }
- }
|