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