'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'); 
 | 
}; 
 |