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.
		
		
		
		
		
			
		
			
				
					
					
						
							75 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							75 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;
 | 
						|
 |