2 <a href="https://gulpjs.com">
3 <img height="257" width="114" src="https://raw.githubusercontent.com/gulpjs/artwork/master/gulp-2x.png">
9 [![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Azure Pipelines Build Status][azure-pipelines-image]][azure-pipelines-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
11 Extract the non-magic parent path from a glob string.
16 var globParent = require('glob-parent');
18 globParent('path/to/*.js'); // 'path/to'
19 globParent('/root/path/to/*.js'); // '/root/path/to'
20 globParent('/*.js'); // '/'
21 globParent('*.js'); // '.'
22 globParent('**/*.js'); // '.'
23 globParent('path/{to,from}'); // 'path'
24 globParent('path/!(to|from)'); // 'path'
25 globParent('path/?(to|from)'); // 'path'
26 globParent('path/+(to|from)'); // 'path'
27 globParent('path/*(to|from)'); // 'path'
28 globParent('path/@(to|from)'); // 'path'
29 globParent('path/**/*'); // 'path'
31 // if provided a non-glob path, returns the nearest dir
32 globParent('path/foo/bar.js'); // 'path/foo'
33 globParent('path/foo/'); // 'path/foo'
34 globParent('path/foo'); // 'path' (see issue #3 for details)
39 ### `globParent(maybeGlobString, [options])`
41 Takes a string and returns the part of the path before the glob begins. Be aware of Escaping rules and Limitations below.
47 // Disables the automatic conversion of slashes for Windows
54 The following characters have special significance in glob patterns and must be escaped if you want them to be treated as regular path characters:
56 - `?` (question mark) unless used as a path segment alone
59 - `(` (opening parenthesis)
60 - `)` (closing parenthesis)
61 - `{` (opening curly brace)
62 - `}` (closing curly brace)
63 - `[` (opening bracket)
64 - `]` (closing bracket)
69 globParent('foo/[bar]/') // 'foo'
70 globParent('foo/\\[bar]/') // 'foo/[bar]'
76 This library attempts a quick and imperfect method of determining which path
77 parts have glob magic without fully parsing/lexing the pattern. There are some
78 advanced use cases that can trip it up, such as nested braces where the outer
79 pair is escaped and the inner one contains a path separator. If you find
80 yourself in the unlikely circumstance of being affected by this or need to
81 ensure higher-fidelity glob handling in your library, it is recommended that you
82 pre-process your input with [expand-braces] and/or [expand-brackets].
85 Backslashes are not valid path separators for globs. If a path with backslashes
86 is provided anyway, for simple cases, glob-parent will replace the path
87 separator for you and return the non-glob parent path (now with
88 forward-slashes, which are still valid as Windows path separators).
90 This cannot be used in conjunction with escape characters.
94 globParent('C:\\Program Files \\(x86\\)\\*.ext') // 'C:/Program Files /(x86/)'
97 globParent('C:/Program Files\\(x86\\)/*.ext') // 'C:/Program Files (x86)'
100 If you are using escape characters for a pattern without path parts (i.e.
101 relative to `cwd`), prefix with `./` to avoid confusing glob-parent.
105 globParent('foo \\[bar]') // 'foo '
106 globParent('foo \\[bar]*') // 'foo '
109 globParent('./foo \\[bar]') // 'foo [bar]'
110 globParent('./foo \\[bar]*') // '.'
117 [expand-braces]: https://github.com/jonschlinkert/expand-braces
118 [expand-brackets]: https://github.com/jonschlinkert/expand-brackets
120 [downloads-image]: https://img.shields.io/npm/dm/glob-parent.svg
121 [npm-url]: https://www.npmjs.com/package/glob-parent
122 [npm-image]: https://img.shields.io/npm/v/glob-parent.svg
124 [azure-pipelines-url]: https://dev.azure.com/gulpjs/gulp/_build/latest?definitionId=2&branchName=master
125 [azure-pipelines-image]: https://dev.azure.com/gulpjs/gulp/_apis/build/status/glob-parent?branchName=master
127 [travis-url]: https://travis-ci.org/gulpjs/glob-parent
128 [travis-image]: https://img.shields.io/travis/gulpjs/glob-parent.svg?label=travis-ci
130 [appveyor-url]: https://ci.appveyor.com/project/gulpjs/glob-parent
131 [appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/glob-parent.svg?label=appveyor
133 [coveralls-url]: https://coveralls.io/r/gulpjs/glob-parent
134 [coveralls-image]: https://img.shields.io/coveralls/gulpjs/glob-parent/master.svg
136 [gitter-url]: https://gitter.im/gulpjs/gulp
137 [gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg