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.
		
		
		
		
		
			
		
			
				
					25 lines
				
				917 B
			
		
		
			
		
	
	
					25 lines
				
				917 B
			| 
											3 years ago
										 | // unix absolute paths are also absolute on win32, so we use this for both
 | ||
|  | const { isAbsolute, parse } = require('path').win32 | ||
|  | 
 | ||
|  | // returns [root, stripped]
 | ||
|  | // Note that windows will think that //x/y/z/a has a "root" of //x/y, and in
 | ||
|  | // those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip /
 | ||
|  | // explicitly if it's the first character.
 | ||
|  | // drive-specific relative paths on Windows get their root stripped off even
 | ||
|  | // though they are not absolute, so `c:../foo` becomes ['c:', '../foo']
 | ||
|  | module.exports = path => { | ||
|  |   let r = '' | ||
|  | 
 | ||
|  |   let parsed = parse(path) | ||
|  |   while (isAbsolute(path) || parsed.root) { | ||
|  |     // windows will think that //x/y/z has a "root" of //x/y/
 | ||
|  |     // but strip the //?/C:/ off of //?/C:/path
 | ||
|  |     const root = path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ? '/' | ||
|  |       : parsed.root | ||
|  |     path = path.slice(root.length) | ||
|  |     r += root | ||
|  |     parsed = parse(path) | ||
|  |   } | ||
|  |   return [r, path] | ||
|  | } |