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
			| 
											3 years ago
										 | '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; |