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.
		
		
		
		
		
			
		
			
				
					
					
						
							43 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							43 lines
						
					
					
						
							1.1 KiB
						
					
					
				| 'use strict';
 | |
| 
 | |
| var isGlob = require('is-glob');
 | |
| var pathPosixDirname = require('path').posix.dirname;
 | |
| var isWin32 = require('os').platform() === 'win32';
 | |
| 
 | |
| var slash = '/';
 | |
| var backslash = /\\/g;
 | |
| var enclosure = /[\{\[].*[\}\]]$/;
 | |
| var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/;
 | |
| var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
 | |
| 
 | |
| /**
 | |
|  * @param {string} str
 | |
|  * @param {Object} opts
 | |
|  * @param {boolean} [opts.flipBackslashes=true]
 | |
|  * @returns {string}
 | |
|  */
 | |
| module.exports = function globParent(str, opts) {
 | |
|   var options = Object.assign({ flipBackslashes: true }, opts);
 | |
| 
 | |
|   // flip windows path separators
 | |
|   if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {
 | |
|     str = str.replace(backslash, slash);
 | |
|   }
 | |
| 
 | |
|   // special case for strings ending in enclosure containing path separator
 | |
|   if (enclosure.test(str)) {
 | |
|     str += slash;
 | |
|   }
 | |
| 
 | |
|   // preserves full path in case of trailing path separator
 | |
|   str += 'a';
 | |
| 
 | |
|   // remove path parts that are globby
 | |
|   do {
 | |
|     str = pathPosixDirname(str);
 | |
|   } while (isGlob(str) || globby.test(str));
 | |
| 
 | |
|   // remove escape chars and return result
 | |
|   return str.replace(escaped, '$1');
 | |
| };
 |