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