glob-parent
Advanced tools
Comparing version 3.0.1 to 3.1.0
17
index.js
@@ -6,7 +6,20 @@ 'use strict'; | ||
var pathDirname = require('path-dirname'); | ||
var isWin32 = require('os').platform() === 'win32'; | ||
module.exports = function globParent(str) { | ||
str += 'a'; // preserves full path in case of trailing path separator | ||
do {str = pathDirname.posix(str)} while (isglob(str)); | ||
// flip windows path separators | ||
if (isWin32 && str.indexOf('/') < 0) str = str.split('\\').join('/'); | ||
// special case for strings ending in enclosure containing path separator | ||
if (/[\{\[].*[\/]*.*[\}\]]$/.test(str)) str += '/'; | ||
// preserves full path in case of trailing path separator | ||
str += 'a'; | ||
// remove path parts that are globby | ||
do {str = pathDirname.posix(str)} | ||
while (isglob(str) || /(^|[^\\])([\{\[]|\([^\)]+$)/.test(str)); | ||
// remove escape chars and return result | ||
return str.replace(/\\([\*\?\|\[\]\(\)\{\}])/g, '$1'); | ||
}; |
{ | ||
"name": "glob-parent", | ||
"version": "3.0.1", | ||
"version": "3.1.0", | ||
"description": "Strips glob magic from a string to provide the parent directory path", | ||
@@ -24,2 +24,5 @@ "main": "index.js", | ||
], | ||
"files": [ | ||
"index.js" | ||
], | ||
"author": "Elan Shanker (https://github.com/es128)", | ||
@@ -26,0 +29,0 @@ "license": "ISC", |
@@ -59,2 +59,43 @@ glob-parent [![Build Status](https://travis-ci.org/es128/glob-parent.svg)](https://travis-ci.org/es128/glob-parent) [![Coverage Status](https://img.shields.io/coveralls/es128/glob-parent.svg)](https://coveralls.io/r/es128/glob-parent?branch=master) | ||
## Limitations | ||
#### Braces & Brackets | ||
This library attempts a quick and imperfect method of determining which path | ||
parts have glob magic without fully parsing/lexing the pattern. There are some | ||
advanced use cases that can trip it up, such as nested braces where the outer | ||
pair is escaped and the inner one contains a path separator. If you find | ||
yourself in the unlikely circumstance of being affected by this or need to | ||
ensure higher-fidelity glob handling in your library, it is recommended that you | ||
pre-process your input with [expand-braces] and/or [expand-brackets]. | ||
#### Windows | ||
Backslashes are not valid path separators for globs. If a path with backslashes | ||
is provided anyway, for simple cases, glob-parent will replace the path | ||
separator for you and return the non-glob parent path (now with | ||
forward-slashes, which are still valid as Windows path separators). | ||
This cannot be used in conjunction with escape characters. | ||
```js | ||
// BAD | ||
globParent('C:\\Program Files \\(x86\\)\\*.ext') // 'C:/Program Files /(x86/)' | ||
// GOOD | ||
globParent('C:/Program Files\\(x86\\)/*.ext') // 'C:/Program Files (x86)' | ||
``` | ||
If you are using escape characters for a pattern without path parts (i.e. | ||
relative to `cwd`), prefix with `./` to avoid confusing glob-parent. | ||
```js | ||
// BAD | ||
globParent('foo \\[bar]') // 'foo ' | ||
globParent('foo \\[bar]*') // 'foo ' | ||
// GOOD | ||
globParent('./foo \\[bar]') // 'foo [bar]' | ||
globParent('./foo \\[bar]*') // '.' | ||
``` | ||
Change Log | ||
@@ -67,1 +108,4 @@ ---------- | ||
[ISC](https://raw.github.com/es128/glob-parent/master/LICENSE) | ||
[expand-braces]: https://github.com/jonschlinkert/expand-braces | ||
[expand-brackets]: https://github.com/jonschlinkert/expand-brackets |
110
6040
4
18