Spaces:
Running
Running
; | |
var isWindows = process.platform === 'win32'; | |
// Regex to split a windows path into into [dir, root, basename, name, ext] | |
var splitWindowsRe = | |
/^(((?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?[\\\/]?)(?:[^\\\/]*[\\\/])*)((\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))[\\\/]*$/; | |
var win32 = {}; | |
function win32SplitPath(filename) { | |
return splitWindowsRe.exec(filename).slice(1); | |
} | |
win32.parse = function(pathString) { | |
if (typeof pathString !== 'string') { | |
throw new TypeError( | |
"Parameter 'pathString' must be a string, not " + typeof pathString | |
); | |
} | |
var allParts = win32SplitPath(pathString); | |
if (!allParts || allParts.length !== 5) { | |
throw new TypeError("Invalid path '" + pathString + "'"); | |
} | |
return { | |
root: allParts[1], | |
dir: allParts[0] === allParts[1] ? allParts[0] : allParts[0].slice(0, -1), | |
base: allParts[2], | |
ext: allParts[4], | |
name: allParts[3] | |
}; | |
}; | |
// Split a filename into [dir, root, basename, name, ext], unix version | |
// 'root' is just a slash, or nothing. | |
var splitPathRe = | |
/^((\/?)(?:[^\/]*\/)*)((\.{1,2}|[^\/]+?|)(\.[^.\/]*|))[\/]*$/; | |
var posix = {}; | |
function posixSplitPath(filename) { | |
return splitPathRe.exec(filename).slice(1); | |
} | |
posix.parse = function(pathString) { | |
if (typeof pathString !== 'string') { | |
throw new TypeError( | |
"Parameter 'pathString' must be a string, not " + typeof pathString | |
); | |
} | |
var allParts = posixSplitPath(pathString); | |
if (!allParts || allParts.length !== 5) { | |
throw new TypeError("Invalid path '" + pathString + "'"); | |
} | |
return { | |
root: allParts[1], | |
dir: allParts[0].slice(0, -1), | |
base: allParts[2], | |
ext: allParts[4], | |
name: allParts[3], | |
}; | |
}; | |
if (isWindows) | |
module.exports = win32.parse; | |
else /* posix */ | |
module.exports = posix.parse; | |
module.exports.posix = posix.parse; | |
module.exports.win32 = win32.parse; | |