You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							76 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							76 lines
						
					
					
						
							1.8 KiB
						
					
					
				'use strict';
 | 
						|
 | 
						|
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;
 |