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;
							 |