1 |
3a515b92
|
cagy
|
'use strict';
|
2 |
|
|
|
3 |
|
|
var path = require('path');
|
4 |
|
|
var isglob = require('is-glob');
|
5 |
|
|
var pathDirname = require('path-dirname');
|
6 |
|
|
var isWin32 = require('os').platform() === 'win32';
|
7 |
|
|
|
8 |
|
|
module.exports = function globParent(str) {
|
9 |
|
|
// flip windows path separators
|
10 |
|
|
if (isWin32 && str.indexOf('/') < 0) str = str.split('\\').join('/');
|
11 |
|
|
|
12 |
|
|
// special case for strings ending in enclosure containing path separator
|
13 |
|
|
if (/[\{\[].*[\/]*.*[\}\]]$/.test(str)) str += '/';
|
14 |
|
|
|
15 |
|
|
// preserves full path in case of trailing path separator
|
16 |
|
|
str += 'a';
|
17 |
|
|
|
18 |
|
|
// remove path parts that are globby
|
19 |
|
|
do {str = pathDirname.posix(str)}
|
20 |
|
|
while (isglob(str) || /(^|[^\\])([\{\[]|\([^\)]+$)/.test(str));
|
21 |
|
|
|
22 |
|
|
// remove escape chars and return result
|
23 |
|
|
return str.replace(/\\([\*\?\|\[\]\(\)\{\}])/g, '$1');
|
24 |
|
|
};
|